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'
}
]
},