Author: stas Date: Thu Mar 3 18:09:03 2005 New Revision: 156121 URL: http://svn.apache.org/viewcvs?view=rev&rev=156121 Log: ModPerl::Registry no longer checks for -x bit (we don't executed scripts anyway), and thus works on acl-based filesystems. Also replaced the -r check with a proper error handling when the file is read in.
Modified: perl/modperl/trunk/Changes perl/modperl/trunk/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm perl/modperl/trunk/ModPerl-Registry/t/basic.t Modified: perl/modperl/trunk/Changes URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?view=diff&r1=156120&r2=156121 ============================================================================== --- perl/modperl/trunk/Changes (original) +++ perl/modperl/trunk/Changes Thu Mar 3 18:09:03 2005 @@ -12,6 +12,11 @@ =item 1.999_22-dev +ModPerl::Registry no longer checks for -x bit (we don't executed +scripts anyway), and thus works on acl-based filesystems. Also +replaced the -r check with a proper error handling when the file is +read in. [Damon Buckwalter <[EMAIL PROTECTED]>] + Apache::RequestUtil::slurp_filename now throws an APR::Error exception object (before it was just croaking). [Stas] Modified: perl/modperl/trunk/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm?view=diff&r1=156120&r2=156121 ============================================================================== --- perl/modperl/trunk/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm (original) +++ perl/modperl/trunk/ModPerl-Registry/lib/ModPerl/RegistryCooker.pm Thu Mar 3 18:09:03 2005 @@ -41,6 +41,7 @@ use File::Spec::Functions (); use File::Basename; +use APR::Const -compile => qw(EACCES ENOENT); use Apache::Const -compile => qw(:common &OPT_EXECCGI); use ModPerl::Const -compile => 'EXIT'; @@ -254,21 +255,10 @@ my $self = shift; my $r = $self->{REQ}; - unless (-r $r->my_finfo && -s _) { - $self->log_error("$self->{FILENAME} not found or unable to stat"); - return Apache::NOT_FOUND; - } - - return Apache::DECLINED if -d _; + return Apache::DECLINED if -d $r->my_finfo; $self->{MTIME} = -M _; - unless (-x _ or IS_WIN32) { - $r->log_error("file permissions deny server execution", - $self->{FILENAME}); - return Apache::FORBIDDEN; - } - if (!($r->allow_options & Apache::OPT_EXECCGI)) { $r->log_error("Options ExecCGI is off in this directory", $self->{FILENAME}); @@ -372,10 +362,13 @@ sub convert_script_to_compiled_handler { my $self = shift; + my $rc = Apache::OK; + $self->debug("Adding package $self->{PACKAGE}") if DEBUG & D_NOISE; # get the script's source - $self->read_script; + $rc = $self->read_script; + return $rc unless $rc == Apache::OK; # convert the shebang line opts into perl code $self->rewrite_shebang; @@ -408,7 +401,7 @@ ${ $self->{CODE} }, "\n}"; # last line comment without newline? - my $rc = $self->compile(\$eval); + $rc = $self->compile(\$eval); return $rc unless $rc == Apache::OK; $self->debug(qq{compiled package \"$self->{PACKAGE}\"}) if DEBUG & D_NOISE; @@ -534,7 +527,7 @@ # dflt: read_script # desc: reads the script in # args: $self - registry blessed object -# rtrn: nothing +# rtrn: Apache::OK on success, some other code on failure # efct: initializes the CODE field with the source script ######################################################################### @@ -543,7 +536,20 @@ my $self = shift; $self->debug("reading $self->{FILENAME}") if DEBUG & D_NOISE; - $self->{CODE} = $self->{REQ}->slurp_filename(0); # untainted + $self->{CODE} = eval { $self->{REQ}->slurp_filename(0) }; # untainted + if ($@) { + $self->log_error("$@"); + + if (ref $@ eq 'APR::Error') { + return Apache::FORBIDDEN if $@ == APR::EACCES; + return Apache::NOT_FOUND if $@ == APR::ENOENT + } + else { + return Apache::SERVER_ERROR; + } + } + + return Apache::OK; } ######################################################################### Modified: perl/modperl/trunk/ModPerl-Registry/t/basic.t URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/ModPerl-Registry/t/basic.t?view=diff&r1=156120&r2=156121 ============================================================================== --- perl/modperl/trunk/ModPerl-Registry/t/basic.t (original) +++ perl/modperl/trunk/ModPerl-Registry/t/basic.t Thu Mar 3 18:09:03 2005 @@ -32,7 +32,7 @@ ); } -# test non-executable bit +# test non-executable bit (it should be executed w/o a problem) for my $alias (@aliases) { if (Apache::TestConfig::WIN32) { skip "non-executable bit test for Win32", 0; @@ -42,8 +42,8 @@ t_client_log_error_is_expected(); ok t_cmp( - HEAD($url)->status_line(), - "403 Forbidden", + HEAD($url)->code, + 200, "$modules{$alias} non-executable file", ); }