From: Joe Orton Date: Mon, 22 Nov 2004 16:03:20 +0000 (+0000) Subject: * modules/generators/mod_cgi.c (cgi_handler): Ensure all stderr from X-Git-Tag: 2.1.2~145 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a4063b9fba3c6834b5acc75031252a4fffe18ee9;p=apache * modules/generators/mod_cgi.c (cgi_handler): Ensure all stderr from the script is logged if it generated a non-local redirect. PR: 20111 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@106195 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index afbfdcebec..12a50e2fd3 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,10 @@ Changes with Apache 2.1.2-dev [Remove entries to the current 2.0 section below, when backported] + *) mod_cgi: Ensure that all stderr is logged for a script which returns + a Location header to generate a non-local redirect. PR 20111. + [Joe Orton] + *) Added the Event MPM to more efficiently handle clients during a Keep Alive request. [Paul Querna, Greg Ames] diff --git a/modules/generators/mod_cgi.c b/modules/generators/mod_cgi.c index 66fbe5f401..36a43bf828 100644 --- a/modules/generators/mod_cgi.c +++ b/modules/generators/mod_cgi.c @@ -925,11 +925,17 @@ static int cgi_handler(request_rec *r) location = apr_table_get(r->headers_out, "Location"); - if (location && location[0] == '/' && r->status == 200) { + if (location && r->status == 200) { + /* For a redirect whether internal or not, discard any + * remaining stdout from the script, and log any remaining + * stderr output, as normal. */ discard_script_output(bb); apr_brigade_destroy(bb); apr_file_pipe_timeout_set(script_err, r->server->timeout); log_script_err(r, script_err); + } + + if (location && location[0] == '/' && r->status == 200) { /* This redirect needs to be a GET no matter what the original * method was. */ @@ -949,8 +955,6 @@ static int cgi_handler(request_rec *r) /* XX Note that if a script wants to produce its own Redirect * body, it now has to explicitly *say* "Status: 302" */ - discard_script_output(bb); - apr_brigade_destroy(bb); return HTTP_MOVED_TEMPORARILY; }