Author: gozer
Date: Thu Mar  9 12:16:26 2006
New Revision: 384596

URL: http://svn.apache.org/viewcvs?rev=384596&view=rev
Log:
Added support for httpd-2.2's new override_opts in Apache2::Access.
Calls to add_config() now accept an override_opts value as the 4th
argument.

Submitted-By: Torsten Foertsch <[EMAIL PROTECTED]>
Reviewed-By: Gozer

Added:
    perl/modperl/trunk/t/api/add_config.t
    perl/modperl/trunk/t/htdocs/TestAPI__add_config/
    perl/modperl/trunk/t/htdocs/TestAPI__add_config/htaccess
    perl/modperl/trunk/t/response/TestAPI/add_config.pm
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/src/modules/perl/modperl_config.h
    perl/modperl/trunk/xs/Apache2/Access/Apache2__Access.h
    perl/modperl/trunk/xs/Apache2/CmdParms/Apache2__CmdParms.h
    perl/modperl/trunk/xs/Apache2/RequestUtil/Apache2__RequestUtil.h
    perl/modperl/trunk/xs/maps/apache2_structures.map
    perl/modperl/trunk/xs/maps/modperl_functions.map
    perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm

Modified: perl/modperl/trunk/Changes
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?rev=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/Changes (original)
+++ perl/modperl/trunk/Changes Thu Mar  9 12:16:26 2006
@@ -12,6 +12,10 @@
 
 =item 2.0.3-dev
 
+Added support for httpd-2.2's new override_opts in Apache2::Access.
+Calls to add_config() now accept an override_opts value as the 4th
+argument. [Torsten Foertsch <[EMAIL PROTECTED]>, Gozer]
+
 Fix 'PerlSwitches +inherit' that got broken somewhere along
 the way to 2.0. You can also use 'PerlOptions +InheritSwitches'
 for the same result. [Gozer]

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=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_apache_compat.h (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_apache_compat.h Thu Mar  9 
12:16:26 2006
@@ -40,4 +40,15 @@
 #define ap_http_scheme(r) ap_http_method(r)
 #endif
 
+#if AP_SERVER_MAJORVERSION_NUMBER>2 || AP_SERVER_MINORVERSION_NUMBER>=2
+#define MP_HTTPD_HAS_OVERRIDE_OPTS
+#endif
+
+#define MP_HTTPD_OVERRIDE_OPTS_UNSET (-1)
+#define MP_HTTPD_OVERRIDE_OPTS_DEFAULT (OPT_UNSET | \
+                                        OPT_ALL | \
+                                        OPT_INCNOEXEC | \
+                                        OPT_SYM_OWNER | \
+                                        OPT_MULTI)
+
 #endif /* MODPERL_APACHE_COMPAT_H */

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=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_config.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_config.c Thu Mar  9 12:16:26 
2006
@@ -498,6 +498,7 @@
                                   apr_pool_t *ptmp,
                                   int override,
                                   char *path,
+                                  int override_options,
                                   ap_conf_vector_t *conf,
                                   SV *lines)
 {
@@ -513,6 +514,14 @@
     parms.override = override;
     parms.path = path;
     parms.pool = p;
+#ifdef MP_HTTPD_HAS_OVERRIDE_OPTS
+    if (override_options == MP_HTTPD_OVERRIDE_OPTS_UNSET) {
+        parms.override_opts = MP_HTTPD_OVERRIDE_OPTS_DEFAULT;
+    }
+    else {
+        parms.override_opts = override_options;
+    }
+#endif
 
     if (ptmp) {
         parms.temp_pool = ptmp;
@@ -559,6 +568,11 @@
                                  parms->temp_pool,
                                  parms->override, 
                                  parms->path,
+#ifdef MP_HTTPD_HAS_OVERRIDE_OPTS
+                                 parms->override_opts,
+#else
+                                 MP_HTTPD_OVERRIDE_OPTS_UNSET,
+#endif
                                  parms->context,
                                  lines);
 }
@@ -570,6 +584,7 @@
     apr_pool_t *p = s->process->pconf;
 
     return modperl_config_insert(aTHX_ s, p, NULL, override, NULL,
+                                 MP_HTTPD_OVERRIDE_OPTS_UNSET,
                                  s->lookup_defaults, lines);
 }
 
@@ -577,20 +592,24 @@
                                           request_rec *r,
                                           SV *lines,
                                           int override,
-                                          char *path)
+                                          char *path,
+                                          int override_options)
 {
     const char *errmsg;
     ap_conf_vector_t *dconf = ap_create_per_dir_config(r->pool);
 
-    /* The path argument of "/" is only required to be non-NULL
-       and "/" is as good a default as anything else */
     if (!path) {
+        /* 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,
-                                   override, path,
+                                   override, path, override_options,
                                    dconf, lines);
 
     if (errmsg) {

Modified: perl/modperl/trunk/src/modules/perl/modperl_config.h
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_config.h?rev=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_config.h (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_config.h Thu Mar  9 12:16:26 
2006
@@ -131,6 +131,7 @@
                                   apr_pool_t *ptmp,
                                   int override,
                                   char *path,
+                                  int override_options,
                                   ap_conf_vector_t *conf,
                                   SV *lines);
 
@@ -143,7 +144,8 @@
                                           request_rec *r,
                                           SV *lines,
                                           int override,
-                                          char *path);
+                                          char *path,
+                                          int override_options);
 
 int modperl_config_is_perl_option_enabled(pTHX_ request_rec *r,
                                           server_rec *s, const char *name);

Added: perl/modperl/trunk/t/api/add_config.t
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/t/api/add_config.t?rev=384596&view=auto
==============================================================================
--- perl/modperl/trunk/t/api/add_config.t (added)
+++ perl/modperl/trunk/t/api/add_config.t Thu Mar  9 12:16:26 2006
@@ -0,0 +1,13 @@
+use strict;
+use warnings FATAL => 'all';
+
+use Apache::TestRequest qw(GET_BODY_ASSERT);
+use Apache::Test;
+use Apache::TestUtil;
+
+my $module = 'TestAPI::add_config';
+my $url    = Apache::TestRequest::module2url($module);
+
+t_debug("connecting to $url");
+print GET_BODY_ASSERT $url;
+

Added: perl/modperl/trunk/t/htdocs/TestAPI__add_config/htaccess
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/t/htdocs/TestAPI__add_config/htaccess?rev=384596&view=auto
==============================================================================
--- perl/modperl/trunk/t/htdocs/TestAPI__add_config/htaccess (added)
+++ perl/modperl/trunk/t/htdocs/TestAPI__add_config/htaccess Thu Mar  9 
12:16:26 2006
@@ -0,0 +1 @@
+TestAddConfig Htaccess

Added: 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=384596&view=auto
==============================================================================
--- perl/modperl/trunk/t/response/TestAPI/add_config.pm (added)
+++ perl/modperl/trunk/t/response/TestAPI/add_config.pm Thu Mar  9 12:16:26 2006
@@ -0,0 +1,122 @@
+package TestAPI::add_config;
+
+use strict;
+use warnings FATAL => 'all';
+
+use Apache2::Access ();
+use Apache2::CmdParms ();
+use Apache2::RequestUtil ();
+use Apache2::Directive ();
+use Apache2::ServerUtil ();
+use base qw(Apache2::Module);
+
+use Apache::Test;
+use Apache::TestUtil;
+
+use Apache2::Const -compile => qw(
+    OK
+    DECLINED
+    :options
+);
+
+use constant KEY        => "TestAddConfig";
+use constant APACHE22   => have_min_apache_version('2.2.0');
+
+my @directives = (
+    {
+        name        => KEY,
+        cmd_data    => 'cmd_data',
+        errmsg      => 'errmsg',
+    },
+);
+
+Apache2::Module::add(__PACKAGE__, [EMAIL PROTECTED]);
+
+sub TestAddConfig {
+    my ($self, $parms, $args) = @_;
+    my $srv_cfg = $self->get_config($parms->server);
+    $srv_cfg->{override_opts} = $parms->override_opts();
+}
+
+sub map2storage {
+    my $r = shift;
+
+    my $o = APACHE22 ? '=All,SymLinksIfOwnerMatch' : '';
+
+    eval {
+        $r->add_config(['AllowOverride All Options'.$o]);
+    };
+    $r->pnotes(add_config1 => "$@");
+
+    eval {
+        $r->add_config(['Options ExecCGI'], -1, '/', 0);
+    };
+    $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;
+}
+
+sub fixup {
+    my ($r) = @_;
+
+    eval {
+        $r->add_config(['Options ExecCGI'], -1, '/',
+                       Apache2::Const::OPT_EXECCGI);
+    };
+    $r->pnotes(add_config3 => "$@");
+
+    return Apache2::Const::DECLINED;
+}
+
+sub handler : method {
+    my ($self, $r) = @_;
+    my $cf = $self->get_config($r->server);
+
+    plan $r, tests => 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'), '';
+
+    my $default_opts = 0;
+    unless (APACHE22) {
+        $default_opts = Apache2::Const::OPT_UNSET |
+                        Apache2::Const::OPT_INCNOEXEC |
+                        Apache2::Const::OPT_MULTI;
+    }
+   
+    my $expect = $default_opts | Apache2::Const::OPT_ALL 
+                               | Apache2::Const::OPT_SYM_OWNER;
+
+    ok t_cmp $cf->{override_opts}, $expect;
+    ok t_cmp $r->allow_override_opts, $expect;
+    ok t_cmp $r->allow_options, Apache2::Const::OPT_EXECCGI;
+
+    return Apache2::Const::OK;
+}
+
+1;
+__END__
+
+# APACHE_TEST_CONFIG_ORDER 950
+<NoAutoConfig>
+    <VirtualHost TestAPI::add_config>
+        PerlModule TestAPI::add_config
+        AccessFileName htaccess
+        SetHandler modperl
+        PerlResponseHandler TestAPI::add_config
+        PerlMapToStorageHandler TestAPI::add_config::map2storage
+        PerlFixupHandler TestAPI::add_config::fixup
+    </VirtualHost>
+</NoAutoConfig>

Modified: perl/modperl/trunk/xs/Apache2/Access/Apache2__Access.h
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/Apache2/Access/Apache2__Access.h?rev=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/xs/Apache2/Access/Apache2__Access.h (original)
+++ perl/modperl/trunk/xs/Apache2/Access/Apache2__Access.h Thu Mar  9 12:16:26 
2006
@@ -80,8 +80,8 @@
     errmsg =
         modperl_config_insert_request(aTHX_ r,
                                       newRV_noinc((SV*)config),
-                                      OR_AUTHCFG,
-                                      NULL);
+                                      OR_AUTHCFG, NULL, 
+                                      MP_HTTPD_OVERRIDE_OPTS_UNSET);
 
     if (errmsg) {
         Perl_warn(aTHX_ "Can't change %s to '%s'\n", directive, val);
@@ -140,4 +140,16 @@
             PUSHs(&PL_sv_undef);
         }
     });
+}
+
+static MP_INLINE
+int mpxs_Apache2__RequestRec_allow_override_opts(pTHX_ request_rec *r)
+{
+#ifdef MP_HTTPD_HAS_OVERRIDE_OPTS
+    core_dir_config *cfg = ap_get_module_config(r->per_dir_config, 
+                                                &core_module);
+    return cfg->override_opts;
+#else
+    return MP_HTTPD_OVERRIDE_OPTS_DEFAULT;
+#endif
 }

Modified: perl/modperl/trunk/xs/Apache2/CmdParms/Apache2__CmdParms.h
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/Apache2/CmdParms/Apache2__CmdParms.h?rev=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/xs/Apache2/CmdParms/Apache2__CmdParms.h (original)
+++ perl/modperl/trunk/xs/Apache2/CmdParms/Apache2__CmdParms.h Thu Mar  9 
12:16:26 2006
@@ -35,3 +35,13 @@
         Perl_croak(aTHX_ "$parms->add_config() has failed: %s", errmsg);
     }
 }
+
+static MP_INLINE
+int mpxs_Apache2__CmdParms_override_opts(pTHX_ cmd_parms *parms)
+{
+#ifdef MP_HTTPD_HAS_OVERRIDE_OPTS
+    return parms->override_opts;
+#else
+    return MP_HTTPD_OVERRIDE_OPTS_DEFAULT;
+#endif
+}

Modified: perl/modperl/trunk/xs/Apache2/RequestUtil/Apache2__RequestUtil.h
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/Apache2/RequestUtil/Apache2__RequestUtil.h?rev=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/xs/Apache2/RequestUtil/Apache2__RequestUtil.h (original)
+++ perl/modperl/trunk/xs/Apache2/RequestUtil/Apache2__RequestUtil.h Thu Mar  9 
12:16:26 2006
@@ -303,10 +303,12 @@
 
 static MP_INLINE
 void mpxs_Apache2__RequestRec_add_config(pTHX_ request_rec *r, SV *lines,
-                                         int override, char *path)
+                                         int override, char *path,
+                                         int override_options)
 {
     const char *errmsg = modperl_config_insert_request(aTHX_ r, lines,
-                                                       override, path);
+                                                       override, path,
+                                                       override_options);
     if (errmsg) {
         Perl_croak(aTHX_ "$r->add_config() has failed: %s", errmsg);
     }

Modified: perl/modperl/trunk/xs/maps/apache2_structures.map
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/maps/apache2_structures.map?rev=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/xs/maps/apache2_structures.map (original)
+++ perl/modperl/trunk/xs/maps/apache2_structures.map Thu Mar  9 12:16:26 2006
@@ -246,6 +246,7 @@
 <  cmd
 <  context
 !  err_directive
+-  override_opts
 </cmd_parms>
 
 !<ap_mgmt_item_t>

Modified: perl/modperl/trunk/xs/maps/modperl_functions.map
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/maps/modperl_functions.map?rev=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/xs/maps/modperl_functions.map (original)
+++ perl/modperl/trunk/xs/maps/modperl_functions.map Thu Mar  9 12:16:26 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
+ mpxs_Apache2__RequestRec_add_config | | r, lines, override=OR_AUTHCFG, 
path=NULL, override_options=MP_HTTPD_OVERRIDE_OPTS_UNSET
  mpxs_Apache2__RequestRec_document_root | | r, new_root=Nullsv
  mpxs_Apache2__RequestRec_child_terminate
 
@@ -152,6 +152,10 @@
  ap_method_is_limited
  mpxs_Apache2__CmdParms_info
  mpxs_Apache2__CmdParms_add_config
+ mpxs_Apache2__CmdParms_override_opts
 
 MODULE=Apache2::MPM    PACKAGE=Apache2::MPM   BOOT=1
  mpxs_Apache2__MPM_query
+
+MODULE=Apache2::Access   PACKAGE=guess
+ mpxs_Apache2__RequestRec_allow_override_opts

Modified: perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm
URL: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm?rev=384596&r1=384595&r2=384596&view=diff
==============================================================================
--- perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm (original)
+++ perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm Thu Mar  9 
12:16:26 2006
@@ -1371,6 +1371,10 @@
         'name' => 'path'
       },
       {
+        'type' => 'int',
+        'name' => 'override_options'
+      },
+      {
         'type' => 'ap_conf_vector_t *',
         'name' => 'conf'
       },
@@ -1421,6 +1425,10 @@
       {
         'type' => 'char *',
         'name' => 'path'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override_options'
       }
     ]
   },
@@ -6109,6 +6117,20 @@
     ]
   },
   {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__CmdParms_override_opts',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+      {
+        'type' => 'cmd_parms *',
+        'name' => 'parms'
+      }
+    ]
+  },
+  {
     'return_type' => 'void',
     'name' => 'mpxs_Apache2__Connection_add_input_filter',
     'args' => [
@@ -6644,6 +6666,10 @@
       {
         'type' => 'char *',
         'name' => 'path'
+      },
+      {
+        'type' => 'int',
+        'name' => 'override_options'
       }
     ]
   },
@@ -6680,6 +6706,20 @@
       {
         'type' => 'SV *',
         'name' => 'callback'
+      }
+    ]
+  },
+  {
+    'return_type' => 'int',
+    'name' => 'mpxs_Apache2__RequestRec_allow_override_opts',
+    'args' => [
+      {
+        'type' => 'PerlInterpreter *',
+        'name' => 'my_perl'
+      },
+     {
+        'type' => 'request_rec *',
+        'name' => 'r'
       }
     ]
   },


Reply via email to