On Wed, 13 Sep 2000, brian d foy wrote:

> 
> let's suppose that i want to change the HTTP status to be something other
> than i'm going to return from the handler().  is there a way to get the
> logging phase to log the status that the user-agent got rather than the
> return value of the handler()?
> 
> here's my small script which illustrates what i'm trying to do:
> 
>       sub mod_perl_error
>               {
>               # a request object is the first argument
>               # in handler, return mod_perl_error($r);
>               $_[0]->status( SERVER_ERROR );
>               $_[0]->content_type('text/html');
>               $_[0]->send_http_header;
>                       
>               $_[0]->print("There was an oopsie.");
>               
>               return DONE; # the log ends up with status 200  
>               }

argh, because Apache.xs:send_http_header does this:
    r->status = 200; /* XXX, why??? */

i think this was to deal with Apache::cgi_header_out() (used by CGI.pm).
if it modified $r->status, then Apache::send_cgi_header() would call
$r->send_http_header and Apache would also call send_http_header() because
mod_perl returned that status, indicating error or redirect.
with this patch, you don't need to touch $r->status and a 500 will be
properly logged.

Index: src/modules/perl/Apache.xs
===================================================================
RCS file: /home/cvs/modperl/src/modules/perl/Apache.xs,v
retrieving revision 1.111
diff -u -r1.111 Apache.xs
--- src/modules/perl/Apache.xs  2000/09/27 23:51:33     1.111
+++ src/modules/perl/Apache.xs  2000/09/28 16:11:02
@@ -929,7 +929,6 @@
         r->content_type = pstrdup(r->pool, type);
     send_http_header(r);
     mod_perl_sent_header(r, 1);
-    r->status = 200; /* XXX, why??? */
 
 #ifndef PERL_OBJECT
 
Index: Apache/Apache.pm
===================================================================
RCS file: /home/cvs/modperl/Apache/Apache.pm,v
retrieving revision 1.53
diff -u -r1.53 Apache.pm
--- Apache/Apache.pm    2000/08/31 05:49:05     1.53
+++ Apache/Apache.pm    2000/09/28 16:11:12
@@ -180,7 +180,8 @@
            else {
                $not_sent = 1;
            }
-           $r->send_http_header if $not_sent;
+           $r->send_http_header if
+              $not_sent and $r->status == 200;
            $r->print($headers); #send rest of buffer, without stripping newlines!!!
            last;
        }

Reply via email to