Author: gozer Date: Fri Mar 17 16:38:48 2006 New Revision: 386774 URL: http://svn.apache.org/viewcvs?rev=386774&view=rev Log: Fixed problems with add_config() and thread-safety:
- $s->add_config croaks if called after server startup - $r->add_config can only affect configuration for the current request, just like .htaccess files do Modified: perl/modperl/trunk/Changes perl/modperl/trunk/src/modules/perl/modperl_apache_compat.h perl/modperl/trunk/src/modules/perl/modperl_config.c perl/modperl/trunk/t/response/TestAPI/add_config.pm perl/modperl/trunk/t/response/TestCompat/apache.pm perl/modperl/trunk/xs/Apache2/ServerUtil/Apache2__ServerUtil.h perl/modperl/trunk/xs/maps/modperl_functions.map Modified: perl/modperl/trunk/Changes URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?rev=386774&r1=386773&r2=386774&view=diff ============================================================================== --- perl/modperl/trunk/Changes (original) +++ perl/modperl/trunk/Changes Fri Mar 17 16:38:48 2006 @@ -12,6 +12,14 @@ =item 2.0.3-dev +Fixed problems with add_config() and thread-safety: [Gozer] +- $s->add_config is not allowed anymore after server startup +- $r->add_config can only affect configuration for the current + request, just like .htaccess files do + +$s->add_config is not allowed at request time anymore. $r->add_config +can only affect configuration f + Make sure that LIBS and other MakeMaker command line flags are not ignored by the top level Makefile.PL and xs/APR/APR/Makefile.PL [Stas] Modified: perl/modperl/trunk/src/modules/perl/modperl_apache_compat.h URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_apache_compat.h?rev=386774&r1=386773&r2=386774&view=diff ============================================================================== --- perl/modperl/trunk/src/modules/perl/modperl_apache_compat.h (original) +++ perl/modperl/trunk/src/modules/perl/modperl_apache_compat.h Fri Mar 17 16:38:48 2006 @@ -44,6 +44,8 @@ #define MP_HTTPD_HAS_OVERRIDE_OPTS #endif +#define MP_HTTPD_OVERRIDE_HTACCESS (OR_LIMIT|OR_OPTIONS|OR_FILEINFO|OR_AUTHCFG|OR_INDEXES) + #define MP_HTTPD_OVERRIDE_OPTS_UNSET (-1) #define MP_HTTPD_OVERRIDE_OPTS_DEFAULT (OPT_UNSET | \ OPT_ALL | \ Modified: perl/modperl/trunk/src/modules/perl/modperl_config.c URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_config.c?rev=386774&r1=386773&r2=386774&view=diff ============================================================================== --- perl/modperl/trunk/src/modules/perl/modperl_config.c (original) +++ perl/modperl/trunk/src/modules/perl/modperl_config.c Fri Mar 17 16:38:48 2006 @@ -602,10 +602,6 @@ /* pass a non-NULL path if nothing else given and for compatibility */ path = "/"; } - else if (!*path) { - /* an empty string says a NULL pointer should be used here */ - path = NULL; - } errmsg = modperl_config_insert(aTHX_ r->server, r->pool, r->pool, Modified: perl/modperl/trunk/t/response/TestAPI/add_config.pm URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/t/response/TestAPI/add_config.pm?rev=386774&r1=386773&r2=386774&view=diff ============================================================================== --- perl/modperl/trunk/t/response/TestAPI/add_config.pm (original) +++ perl/modperl/trunk/t/response/TestAPI/add_config.pm Fri Mar 17 16:38:48 2006 @@ -53,16 +53,6 @@ }; $r->pnotes(add_config2 => "$@"); - eval { - my $directory = join '/', ('', $r->document_root, - 'TestAPI__add_config'); - $r->add_config(["<Directory $directory>", - 'AllowOverride All Options'.$o, - '</Directory>' - ], -1, ''); - }; - $r->pnotes(add_config4 => "$@"); - return Apache2::Const::DECLINED; } @@ -75,6 +65,11 @@ }; $r->pnotes(add_config3 => "$@"); + eval { + $r->server->add_config(['ServerAdmin [EMAIL PROTECTED]']); + }; + $r->pnotes(add_config4 => "$@"); + return Apache2::Const::DECLINED; } @@ -87,7 +82,7 @@ ok t_cmp $r->pnotes('add_config1'), qr/.+\n/; ok t_cmp $r->pnotes('add_config2'), (APACHE22 ? qr/.+\n/ : ''); ok t_cmp $r->pnotes('add_config3'), ''; - ok t_cmp $r->pnotes('add_config4'), ''; + ok t_cmp $r->pnotes('add_config4'), qr/after server startup/; my $default_opts = 0; unless (APACHE22) { @@ -115,6 +110,9 @@ PerlModule TestAPI::add_config AccessFileName htaccess SetHandler modperl + <Directory @DocumentRoot@> + AllowOverride All + </Directory> PerlResponseHandler TestAPI::add_config PerlMapToStorageHandler TestAPI::add_config::map2storage PerlFixupHandler TestAPI::add_config::fixup Modified: perl/modperl/trunk/t/response/TestCompat/apache.pm URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/t/response/TestCompat/apache.pm?rev=386774&r1=386773&r2=386774&view=diff ============================================================================== --- perl/modperl/trunk/t/response/TestCompat/apache.pm (original) +++ perl/modperl/trunk/t/response/TestCompat/apache.pm Fri Mar 17 16:38:48 2006 @@ -12,10 +12,16 @@ use ModPerl::Util (); use Apache2::compat (); -use Apache::Constants qw(DIR_MAGIC_TYPE :common :response); +use Apache::Constants qw(DIR_MAGIC_TYPE OPT_EXECCGI :common :response); use File::Spec::Functions qw(catfile canonpath); +sub fixup { + my $r = shift; + Apache->httpd_conf('Options +ExecCGI'); + OK; +} + sub handler { my $r = shift; @@ -75,11 +81,8 @@ ok t_cmp(OK, "0", 'OK'); - my $admin = $r->server->server_admin; - Apache->httpd_conf('ServerAdmin [EMAIL PROTECTED]'); - ok t_cmp($r->server->server_admin, '[EMAIL PROTECTED]', - 'Apache->httpd_conf'); - Apache->httpd_conf("ServerAdmin $admin"); + my $exec_cgi = $r->allow_options & Apache2::Const::OPT_EXECCGI; + ok t_cmp($exec_cgi, Apache2::Const::OPT_EXECCGI, 'Apache->httpd_conf'); # (Apache||$r)->server_root_relative { @@ -124,4 +127,7 @@ __END__ # so we can test whether send_httpd_header() works fine -PerlOptions +ParseHeaders +PerlOptions +ParseHeaders +GlobalRequest +AllowOverride Options +PerlModule TestCompat::apache +PerlFixupHandler TestCompat::apache::fixup Modified: perl/modperl/trunk/xs/Apache2/ServerUtil/Apache2__ServerUtil.h URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/Apache2/ServerUtil/Apache2__ServerUtil.h?rev=386774&r1=386773&r2=386774&view=diff ============================================================================== --- perl/modperl/trunk/xs/Apache2/ServerUtil/Apache2__ServerUtil.h (original) +++ perl/modperl/trunk/xs/Apache2/ServerUtil/Apache2__ServerUtil.h Fri Mar 17 16:38:48 2006 @@ -174,7 +174,11 @@ static MP_INLINE void mpxs_Apache2__ServerRec_add_config(pTHX_ server_rec *s, SV *lines) { - const char *errmsg = modperl_config_insert_server(aTHX_ s, lines); + const char *errmsg; + + MP_CROAK_IF_POST_POST_CONFIG_PHASE("$s->add_config"); + + errmsg = modperl_config_insert_server(aTHX_ s, lines); if (errmsg) { Perl_croak(aTHX_ "$s->add_config() has failed: %s", errmsg); } Modified: perl/modperl/trunk/xs/maps/modperl_functions.map URL: http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/maps/modperl_functions.map?rev=386774&r1=386773&r2=386774&view=diff ============================================================================== --- perl/modperl/trunk/xs/maps/modperl_functions.map (original) +++ perl/modperl/trunk/xs/maps/modperl_functions.map Fri Mar 17 16:38:48 2006 @@ -30,7 +30,7 @@ mpxs_Apache2__RequestRec_location mpxs_Apache2__RequestRec_as_string mpxs_Apache2__RequestRec_pnotes | | r, key=Nullsv, val=Nullsv - mpxs_Apache2__RequestRec_add_config | | r, lines, override=OR_AUTHCFG, path=NULL, override_options=MP_HTTPD_OVERRIDE_OPTS_UNSET + mpxs_Apache2__RequestRec_add_config | | r, lines, override=MP_HTTPD_OVERRIDE_HTACCESS, path=NULL, override_options=MP_HTTPD_OVERRIDE_OPTS_UNSET mpxs_Apache2__RequestRec_document_root | | r, new_root=Nullsv mpxs_Apache2__RequestRec_child_terminate