]> granicus.if.org Git - apache/commitdiff
handle ? in cases where nocanon is in effect
authorJim Jagielski <jim@apache.org>
Thu, 17 Apr 2008 19:20:16 +0000 (19:20 +0000)
committerJim Jagielski <jim@apache.org>
Thu, 17 Apr 2008 19:20:16 +0000 (19:20 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@649239 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/mod_proxy_ajp.c
modules/proxy/mod_proxy_http.c

index 7213660d0f40262296607ebedaa0b1f9a74c2cbc..16329e2523cd227f0ad46245ae06ac32e62e57f1 100644 (file)
@@ -31,6 +31,7 @@ static int proxy_ajp_canon(request_rec *r, char *url)
 {
     char *host, *path, *search, sport[7];
     const char *err;
+    const char *pnocanon;
     apr_port_t port = AJP13_DEF_PORT;
 
     /* ap_port_of_scheme() */
@@ -63,7 +64,8 @@ static int proxy_ajp_canon(request_rec *r, char *url)
      * has already been decoded.  True proxy requests have
      * r->uri == r->unparsed_uri, and no others have that property.
      */
-    if (r->uri == r->unparsed_uri) {
+    pnocanon = apr_table_get(r->notes, "proxy-nocanon");
+    if ((r->uri == r->unparsed_uri) ||  pnocanon) {
         search = strchr(url, '?');
         if (search != NULL)
             *(search++) = '\0';
@@ -72,7 +74,7 @@ static int proxy_ajp_canon(request_rec *r, char *url)
         search = r->args;
 
     /* process path */
-    if (apr_table_get(r->notes, "proxy-nocanon")) {
+    if (pnocanon) {
         path = url;   /* this is the raw path */
     }
     else {
index 0d21358fdb9a1d3c7ca2f0aac55c02cb21568f48..89d893c5715426ff1618da839b3b52b50608dd6b 100644 (file)
@@ -36,6 +36,7 @@ static int proxy_http_canon(request_rec *r, char *url)
     char *host, *path, *search, sport[7];
     const char *err;
     const char *scheme;
+    const char *pnocanon;
     apr_port_t port, def_port;
 
     /* ap_port_of_scheme() */
@@ -72,7 +73,9 @@ static int proxy_http_canon(request_rec *r, char *url)
      * has already been decoded.  True proxy requests have r->uri
      * == r->unparsed_uri, and no others have that property.
      */
-    if (r->uri == r->unparsed_uri) {
+    pnocanon = apr_table_get(r->notes, "proxy-nocanon");
+    if ((r->uri == r->unparsed_uri) ||
+        ((r->proxyreq == PROXYREQ_REVERSE) && pnocanon)) {
         search = strchr(url, '?');
         if (search != NULL)
             *(search++) = '\0';
@@ -88,7 +91,7 @@ static int proxy_http_canon(request_rec *r, char *url)
     switch (r->proxyreq) {
     default: /* wtf are we doing here? */
     case PROXYREQ_REVERSE:
-        if (apr_table_get(r->notes, "proxy-nocanon")) {
+        if (pnocanon) {
             path = url;   /* this is the raw path */
         }
         else {