You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by "Alexander V. Lukyanov" <la...@netis.ru> on 2007/02/15 16:01:33 UTC
a bug with redirect in mod_perl-2.0.3 and CGI-3.25
Hello!
I have a perl script which uses CGI package and does redirect(). It is run
under mod_perl. For some reason I get HTTP status "200 OK", but the header
"Location:" is set and the response body says the document has moved.
I have debugged it somewhat, found that send_cgi_header is correctly called
by CGI's redirect, the function send_cgi_header sets r->status to 302 and
r->status_line to "302 Moved" correctly. But then the status is reset to
200 in RegistryCooker::default_handler. Then Apache's validate_status_line
function finds mismatch between status and status_line and resets the
status_line to "200 OK" too.
I beleave there is a bug somewhere which prevents redirecting from CGI when
using mod_perl. I fixed it by this patch, but I'm not sure it is "the right
way" (TM):
--- RegistryCooker.pm.1 Thu Feb 15 17:57:00 2007
+++ RegistryCooker.pm Thu Feb 15 17:40:59 2007
@@ -168,7 +168,7 @@
# status after running it
my $old_status = $self->{REQ}->status;
my $rc = $self->run;
- my $new_status = $self->{REQ}->status($old_status);
+ my $new_status = $self->{REQ}->status; #($old_status);
return ($rc == Apache2::Const::OK && $old_status != $new_status)
? $new_status
: $rc;
--
Alexander.