On Thu, 5 May 2005, Markus Wichitill wrote: > Steve Hay wrote: > >>how can we test if the filehandle is valid then? may be we should skip > >>that bit altogether? Steve, does it work if you comment out the whole > >> > >> if (!size) { ... } > >> > >>block? > > > > No, it doesn't :( > > I've removed the size code, too, and the problem is that after the exception > is thrown, neither of the tests in RegistryCooker::read_script apply: > > if (ref $@ eq 'APR::Error') { > return Apache2::Const::FORBIDDEN if $@ == APR::Const::EACCES; > return Apache2::Const::NOT_FOUND if $@ == APR::Const::ENOENT; > # oops > } > > The actual error code returned by apr_file_open is 720002. >
Does the following fix this? =================================================================== Index: xs/APR/Status/APR__Status.h =================================================================== --- xs/APR/Status/APR__Status.h (revision 168337) +++ xs/APR/Status/APR__Status.h (working copy) @@ -16,3 +16,5 @@ #include "apr_errno.h" #define mpxs_APR__Status_is_EAGAIN APR_STATUS_IS_EAGAIN +#define mpxs_APR__Status_is_EACCES APR_STATUS_IS_EACCES +#define mpxs_APR__Status_is_ENOENT APR_STATUS_IS_ENOENT Index: xs/maps/apr_functions.map =================================================================== --- xs/maps/apr_functions.map (revision 168337) +++ xs/maps/apr_functions.map (working copy) @@ -649,3 +649,5 @@ MODULE=APR::Status PREFIX=mpxs_APR__STATUS_ int:DEFINE_is_EAGAIN | | apr_status_t:rc + int:DEFINE_is_EACCES | | apr_status_t:rc + int:DEFINE_is_ENOENT | | apr_status_t:rc Index: ModPerl-Registry/lib/ModPerl/RegistryCooker.pm =================================================================== --- ModPerl-Registry/lib/ModPerl/RegistryCooker.pm (revision 168337) +++ ModPerl-Registry/lib/ModPerl/RegistryCooker.pm (working copy) @@ -34,6 +34,7 @@ use Apache2::Access (); use APR::Table (); +use APR::Status (); use ModPerl::Util (); use ModPerl::Global (); @@ -41,7 +42,6 @@ use File::Spec::Functions (); use File::Basename; -use APR::Const -compile => qw(EACCES ENOENT); use Apache2::Const -compile => qw(:common &OPT_EXECCGI); use ModPerl::Const -compile => 'EXIT'; @@ -542,8 +542,8 @@ $self->log_error("$@"); if (ref $@ eq 'APR::Error') { - return Apache2::Const::FORBIDDEN if $@ == APR::Const::EACCES; - return Apache2::Const::NOT_FOUND if $@ == APR::Const::ENOENT; + return Apache2::Const::FORBIDDEN if APR::Status::is_EACCES($@); + return Apache2::Const::NOT_FOUND if APR::Status::is_ENOENT($@); } else { return Apache2::Const::SERVER_ERROR; ======================================================================== -- best regards, randy