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
 


Reply via email to