Commit bf0c369f authored by Thomas J. Donovan's avatar Thomas J. Donovan
Browse files

After r649840, mod_proxy_http will no longer append a query string from r->args if "no-canon".

Moved the NOESCAPE test down after PATH_INFO, and preserve the query string in r->filename if  
NOESCAPE (which implies "no-canon")

Previously this was only done for CONNECT requests, where (r->uri == r->unparsed_uri)
see mod_proxy:proxy_detect



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@670061 13f79535-47bb-0310-9956-ffa450edef68
parent ad74221b
Loading
Loading
Loading
Loading
+3 −0
Changes for CHANGES: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,9 @@
Changes with Apache 2.3.0
[ When backported to 2.2.x, remove entry from this file ]

  *) mod_rewrite: Preserve the query string with [proxy,noescape]. PR 45247
     [Tom Donovan]

  *) mod_proxy_http: Do not forward requests with 'Expect: 100-continue' to
     known HTTP/1.0 servers. Return 'Expectation failed' (417) instead.
     [Ruediger Pluem]
+8 −7
Changes for modules/mappers/mod_rewrite.c: 8 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -4453,10 +4453,6 @@ static int hook_uri2file(request_rec *r)
                return HTTP_FORBIDDEN;
            }

            if (rulestatus == ACTION_NOESCAPE) {
                apr_table_setn(r->notes, "proxy-nocanon", "1");
            }

            /* make sure the QUERY_STRING and
             * PATH_INFO parts get incorporated
             */
@@ -4464,12 +4460,17 @@ static int hook_uri2file(request_rec *r)
                r->filename = apr_pstrcat(r->pool, r->filename,
                                          r->path_info, NULL);
            }
            if (r->args != NULL &&
                r->uri == r->unparsed_uri) {
                /* see proxy_http:proxy_http_canon() */
            if (rulestatus == ACTION_NOESCAPE) {
                /* make sure that mod_proxy_http doesn't canonicalize the URI,
                 * and preserve any (possibly qsappend'd) query string in the
                 * filename for mod_proxy_http:proxy_http_canon()
                 */
                apr_table_setn(r->notes, "proxy-nocanon", "1");
                if (r->args != NULL) {
                    r->filename = apr_pstrcat(r->pool, r->filename,
                                              "?", r->args, NULL);
                }
            }

            /* now make sure the request gets handled by the proxy handler */
            if (PROXYREQ_NONE == r->proxyreq) {