From: Yann Ylavic Date: Fri, 3 Sep 2021 17:00:07 +0000 (+0000) Subject: Merge r1892805 from trunk: X-Git-Tag: candidate-2.4.49-rc1~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d9672bf096592fe16c1840f73fa947fd458ee68;p=thirdparty%2Fapache%2Fhttpd.git Merge r1892805 from trunk: mod_proxy_uwsgi: Fix PATH_INFO setting for generic worker. When the generic "proxy:reverse" worker is selected for an uwsgi scheme, the worker name is irrelevant so uwscgi_handler() should point to the PATH_INFO directly from the given URL. Submitted by: ylavic Reviewed by: ylavic, covener, rpluem git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1892875 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/changes-entries/uwsgi_path_info.txt b/changes-entries/uwsgi_path_info.txt new file mode 100644 index 00000000000..4591366cbe0 --- /dev/null +++ b/changes-entries/uwsgi_path_info.txt @@ -0,0 +1 @@ + *) mod_proxy_uwsgi: Fix PATH_INFO setting for generic worker. [Yann Ylavic] diff --git a/modules/proxy/mod_proxy_uwsgi.c b/modules/proxy/mod_proxy_uwsgi.c index 9db608aeca3..4d7589c82c5 100644 --- a/modules/proxy/mod_proxy_uwsgi.c +++ b/modules/proxy/mod_proxy_uwsgi.c @@ -456,11 +456,8 @@ static int uwsgi_handler(request_rec *r, proxy_worker * worker, const char *proxyname, apr_port_t proxyport) { int status; - int delta = 0; - int decode_status; proxy_conn_rec *backend = NULL; apr_pool_t *p = r->pool; - size_t w_len; char server_portstr[32]; char *u_path_info; apr_uri_t *uri; @@ -472,23 +469,14 @@ static int uwsgi_handler(request_rec *r, proxy_worker * worker, uri = apr_palloc(r->pool, sizeof(*uri)); - /* ADD PATH_INFO */ -#if AP_MODULE_MAGIC_AT_LEAST(20111130,0) - w_len = strlen(worker->s->name); -#else - w_len = strlen(worker->name); -#endif - u_path_info = r->filename + 6 + w_len; - if (u_path_info[0] != '/') { - delta = 1; - } - decode_status = ap_unescape_url(url + w_len - delta); - if (decode_status) { + /* ADD PATH_INFO (unescaped) */ + u_path_info = ap_strchr(url + sizeof(UWSGI_SCHEME) + 2, '/'); + if (!u_path_info || ap_unescape_url(u_path_info) != OK) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10100) - "unable to decode uri: %s", url + w_len - delta); + "unable to decode uwsgi uri: %s", url); return HTTP_INTERNAL_SERVER_ERROR; } - apr_table_add(r->subprocess_env, "PATH_INFO", url + w_len - delta); + apr_table_add(r->subprocess_env, "PATH_INFO", u_path_info); /* Create space for state information */