
minfrin at apache
May 9, 2008, 3:40 PM
Post #1 of 1
(17 views)
Permalink
|
|
svn commit: r654968 - in /httpd/httpd/trunk: CHANGES modules/proxy/mod_proxy_http.c server/protocol.c
|
|
Author: minfrin Date: Fri May 9 15:40:01 2008 New Revision: 654968 URL: http://svn.apache.org/viewvc?rev=654968&view=rev Log: core, mod_proxy: If a kept_body is present, it becomes safe for subrequests to support message bodies. Make sure that safety checks within the core and within the proxy are not triggered when kept_body is present. This makes it possible to embed proxied POST requests within mod_include. Modified: httpd/httpd/trunk/CHANGES httpd/httpd/trunk/modules/proxy/mod_proxy_http.c httpd/httpd/trunk/server/protocol.c Modified: httpd/httpd/trunk/CHANGES URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=654968&r1=654967&r2=654968&view=diff ============================================================================== --- httpd/httpd/trunk/CHANGES [utf-8] (original) +++ httpd/httpd/trunk/CHANGES [utf-8] Fri May 9 15:40:01 2008 @@ -2,6 +2,12 @@ Changes with Apache 2.3.0 [ When backported to 2.2.x, remove entry from this file ] + *) core, mod_proxy: If a kept_body is present, it becomes safe for + subrequests to support message bodies. Make sure that safety + checks within the core and within the proxy are not triggered + when kept_body is present. This makes it possible to embed + proxied POST requests within mod_include. [Graham Leggett] + *) mod_auth_form: Make sure the input filter stack is properly set up before reading the login form. Make sure the kept body filter is correctly inserted to ensure the body can be read a second Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_http.c URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_http.c?rev=654968&r1=654967&r2=654968&view=diff ============================================================================== --- httpd/httpd/trunk/modules/proxy/mod_proxy_http.c (original) +++ httpd/httpd/trunk/modules/proxy/mod_proxy_http.c Fri May 9 15:40:01 2008 @@ -266,6 +266,10 @@ apr_brigade_length(bb, 0, &transferred); if (transferred != -1) conn->worker->s->transferred += transferred; +char tmp[1024000]; +apr_size_t tlen = 1024000; +apr_brigade_flatten(bb, tmp, &tlen); +printf(tmp, NULL); status = ap_pass_brigade(origin->output_filters, bb); if (status != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_ERR, status, r->server, @@ -893,8 +897,11 @@ * input_brigade and jump past all of the request body logic... * Reading anything with ap_get_brigade is likely to consume the * main request's body or read beyond EOS - which would be unplesant. + * + * An exception: when a kept_body is present, then subrequest CAN use + * pass request bodies, and we DONT skip the body. */ - if (r->main) { + if (!r->kept_body && r->main) { /* XXX: Why DON'T sub-requests use keepalives? */ p_conn->close++; if (old_cl_val) { Modified: httpd/httpd/trunk/server/protocol.c URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/protocol.c?rev=654968&r1=654967&r2=654968&view=diff ============================================================================== --- httpd/httpd/trunk/server/protocol.c (original) +++ httpd/httpd/trunk/server/protocol.c Fri May 9 15:40:01 2008 @@ -1084,8 +1084,8 @@ /* did the original request have a body? (e.g. POST w/SSI tags) * if so, make sure the subrequest doesn't inherit body headers */ - if (apr_table_get(r->headers_in, "Content-Length") - || apr_table_get(r->headers_in, "Transfer-Encoding")) { + if (!r->kept_body && (apr_table_get(r->headers_in, "Content-Length") + || apr_table_get(r->headers_in, "Transfer-Encoding"))) { clone_headers_no_body(rnew, r); } else { /* no body (common case). clone headers the cheap way */
|