diff options
author | André Malo <nd@apache.org> | 2003-03-22 23:15:40 +0100 |
---|---|---|
committer | André Malo <nd@apache.org> | 2003-03-22 23:15:40 +0100 |
commit | 986cb6b961a210f6145f4624caa5bf3fcf077713 (patch) | |
tree | 5b712cd7e0980adc4b19ac9e89be8137a53fe803 | |
parent | Fix chinese default page. (diff) | |
download | apache2-986cb6b961a210f6145f4624caa5bf3fcf077713.tar.xz apache2-986cb6b961a210f6145f4624caa5bf3fcf077713.zip |
Do not bypass output filters when redirecting subrequests internally.
PR: 17629
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@99042 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | CHANGES | 3 | ||||
-rw-r--r-- | modules/http/http_request.c | 29 |
2 files changed, 27 insertions, 5 deletions
@@ -2,6 +2,9 @@ Changes with Apache 2.1.0-dev [Remove entries to the current 2.0 section below, when backported] + *) Do not bypass output filters when redirecting subrequests internally. + PR 17629. [André Malo] + *) OpenSSL headers should be included as "openssl/ssl.h", and not rely on the INCLUDE path to be defined properly. PR 11310. [Geoff Thrope <geoff@geoffthorpe.net>] diff --git a/modules/http/http_request.c b/modules/http/http_request.c index 0a21296db7..0817bba7b6 100644 --- a/modules/http/http_request.c +++ b/modules/http/http_request.c @@ -394,17 +394,27 @@ static request_rec *internal_internal_redirect(const char *new_uri, new->proto_output_filters = r->proto_output_filters; new->proto_input_filters = r->proto_input_filters; - new->output_filters = new->proto_output_filters; - new->input_filters = new->proto_input_filters; - if (new->main) { + new->output_filters = r->output_filters; + new->input_filters = r->input_filters; + /* Add back the subrequest filter, which we lost when * we set output_filters to include only the protocol * output filters from the original request. + * + * XXX: This shouldn't be neccessary any longer, because the filter + * is still in place -- isn't it? */ ap_add_output_filter_handle(ap_subreq_core_filter_handle, NULL, new, new->connection); } + else { + /* In subrequests we _must_ point to the complete upper request's + * filter chain, so skip the filters _only_ within the main request. + */ + new->output_filters = new->proto_output_filters; + new->input_filters = new->proto_input_filters; + } update_r_in_filters(new->input_filters, r, new); update_r_in_filters(new->output_filters, r, new); @@ -455,10 +465,19 @@ AP_DECLARE(void) ap_internal_fast_redirect(request_rec *rr, request_rec *r) r->subprocess_env = apr_table_overlay(r->pool, rr->subprocess_env, r->subprocess_env); - r->output_filters = rr->output_filters; - r->input_filters = rr->input_filters; + /* copy the filters _only_ within the main request. In subrequests + * we _must_ point to the upper requests' filter chain, so do not + * touch 'em! + */ + if (!r->main) { + r->output_filters = rr->output_filters; + r->input_filters = rr->input_filters; + } if (r->main) { + /* XXX: This shouldn't be neccessary any longer, because the filter + * is still in place -- isn't it? + */ ap_add_output_filter_handle(ap_subreq_core_filter_handle, NULL, r, r->connection); } |