]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
mod_proxy_fcgi: Use r->uri rather than r->filename for directory walk.
authorYann Ylavic <ylavic@apache.org>
Sat, 27 Jul 2024 13:54:08 +0000 (13:54 +0000)
committerYann Ylavic <ylavic@apache.org>
Sat, 27 Jul 2024 13:54:08 +0000 (13:54 +0000)
r->filename is a "proxy:" one for mod_proxy modules, and ap_directory_walk()
can't cope with that, so force r->uri.

Github: closes #468

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1919547 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/mod_proxy_fcgi.c

index d121e1b2bf5c501f6c9216c7af8bd60cccb9a66a..bb56cf0a45b137239e911c05b0b0ad75bcec17af 100644 (file)
@@ -133,7 +133,6 @@ static int proxy_fcgi_canon(request_rec *r, char *url)
         /* It has to be on disk for this to work */
         if (!strcasecmp(pathinfo_type, "full")) {
             rconf->need_dirwalk = 1;
-            ap_unescape_url_keep2f(path, 0);
         }
         else if (!strcasecmp(pathinfo_type, "first-dot")) {
             char *split = ap_strchr(path, '.');
@@ -348,10 +347,11 @@ static apr_status_t send_environment(proxy_conn_rec *conn, request_rec *r,
     fcgi_req_config_t *rconf = ap_get_module_config(r->request_config, &proxy_fcgi_module);
     fcgi_dirconf_t *dconf = ap_get_module_config(r->per_dir_config, &proxy_fcgi_module);
 
-    if (rconf) {
-       if (rconf->need_dirwalk) {
-          ap_directory_walk(r);
-       }
+    if (rconf && rconf->need_dirwalk) {
+        char *saved_filename = r->filename;
+        r->filename = r->uri;
+        ap_directory_walk(r);
+        r->filename = saved_filename;
     }
 
     /* Strip proxy: prefixes */