gozer 2004/08/06 19:52:08
Modified: . Changes
src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h
todo release
Log:
PerlModule, PerlRequire, Perl and <Perl> is now supported in
.htaccess.
They will run for each request.
If they are used from inside a block, like <Location>, a fatal
error will be generated and server startup will be aborted with
an error like:
"PerlModule directive not allowed in a <FilesMatch> block"
Revision Changes Path
1.428 +3 -0 modperl-2.0/Changes
Index: Changes
===================================================================
RCS file: /home/cvs/modperl-2.0/Changes,v
retrieving revision 1.427
retrieving revision 1.428
diff -u -r1.427 -r1.428
--- Changes 3 Aug 2004 16:25:20 -0000 1.427
+++ Changes 7 Aug 2004 02:52:07 -0000 1.428
@@ -12,6 +12,9 @@
=item 1.99_15-dev
+PerlModule, PerlRequire, Perl and <Perl> is now supported in
+.htaccess. They will run for each request. [Gozer]
+
removed support for httpd 2.0.46. httpd 2.0.47 is now the minimum
supported version. [Geoffrey Young]
1.220 +4 -4 modperl-2.0/src/modules/perl/mod_perl.c
Index: mod_perl.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v
retrieving revision 1.219
retrieving revision 1.220
diff -u -r1.219 -r1.220
--- mod_perl.c 14 Jul 2004 19:20:04 -0000 1.219
+++ mod_perl.c 7 Aug 2004 02:52:08 -0000 1.220
@@ -810,16 +810,16 @@
static const command_rec modperl_cmds[] = {
MP_CMD_SRV_ITERATE("PerlSwitches", switches, "Perl Switches"),
- MP_CMD_SRV_ITERATE("PerlModule", modules, "PerlModule"),
- MP_CMD_SRV_ITERATE("PerlRequire", requires, "PerlRequire"),
+ MP_CMD_DIR_ITERATE("PerlModule", modules, "PerlModule"),
+ MP_CMD_DIR_ITERATE("PerlRequire", requires, "PerlRequire"),
MP_CMD_DIR_ITERATE("PerlOptions", options, "Perl Options"),
MP_CMD_DIR_ITERATE("PerlInitHandler", init_handlers, "Subroutine name"),
MP_CMD_DIR_TAKE2("PerlSetVar", set_var, "PerlSetVar"),
MP_CMD_DIR_ITERATE2("PerlAddVar", add_var, "PerlAddVar"),
MP_CMD_DIR_TAKE2("PerlSetEnv", set_env, "PerlSetEnv"),
MP_CMD_SRV_TAKE1("PerlPassEnv", pass_env, "PerlPassEnv"),
- MP_CMD_SRV_RAW_ARGS_ON_READ("<Perl", perl, "Perl Code"),
- MP_CMD_SRV_RAW_ARGS("Perl", perldo, "Perl Code"),
+ MP_CMD_DIR_RAW_ARGS_ON_READ("<Perl", perl, "Perl Code"),
+ MP_CMD_DIR_RAW_ARGS("Perl", perldo, "Perl Code"),
MP_CMD_DIR_TAKE1("PerlSetInputFilter", set_input_filter,
"filter[;filter]"),
1.62 +20 -0 modperl-2.0/src/modules/perl/modperl_cmd.c
Index: modperl_cmd.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.c,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -r1.61 -r1.62
--- modperl_cmd.c 13 Jul 2004 03:59:46 -0000 1.61
+++ modperl_cmd.c 7 Aug 2004 02:52:08 -0000 1.62
@@ -51,6 +51,18 @@
#endif
+/* This ensures that a given directive is either in Server context
+ * or in a .htaccess file, usefull for things like PerlRequire
+ */
+#define MP_CHECK_SERVER_OR_HTACCESS_CONTEXT \
+ if (parms->path && (parms->override & ACCESS_CONF)) { \
+ ap_directive_t *d = parms->directive; \
+ return apr_psprintf(parms->pool, \
+ "%s directive not allowed in a %s> block", \
+ d->directive, \
+ d->parent->directive); \
+ }
+
static char *modperl_cmd_unclosed_directive(cmd_parms *parms)
{
return apr_pstrcat(parms->pool, parms->cmd->name,
@@ -193,6 +205,8 @@
MP_dSCFG(parms->server);
MP_PERL_DECLARE_CONTEXT;
+ MP_CHECK_SERVER_OR_HTACCESS_CONTEXT;
+
if (modperl_is_running() &&
modperl_init_vhost(parms->server, parms->pool, NULL) != OK)
{
@@ -224,6 +238,8 @@
MP_dSCFG(parms->server);
MP_PERL_DECLARE_CONTEXT;
+ MP_CHECK_SERVER_OR_HTACCESS_CONTEXT;
+
if (modperl_is_running() &&
modperl_init_vhost(parms->server, parms->pool, NULL) != OK)
{
@@ -429,6 +445,8 @@
if (!endp) {
return modperl_cmd_unclosed_directive(parms);
}
+
+ MP_CHECK_SERVER_OR_HTACCESS_CONTEXT;
arg = apr_pstrndup(p, arg, endp - arg);
@@ -483,6 +501,8 @@
return NULL;
}
+ MP_CHECK_SERVER_OR_HTACCESS_CONTEXT;
+
/* we must init earlier than normal */
modperl_run();
1.26 +4 -0 modperl-2.0/src/modules/perl/modperl_cmd.h
Index: modperl_cmd.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- modperl_cmd.h 10 May 2004 19:55:38 -0000 1.25
+++ modperl_cmd.h 7 Aug 2004 02:52:08 -0000 1.26
@@ -136,6 +136,10 @@
AP_INIT_FLAG( name, modperl_cmd_##item, NULL, \
OR_ALL, desc )
+#define MP_CMD_DIR_RAW_ARGS(name, item, desc) \
+ AP_INIT_RAW_ARGS( name, modperl_cmd_##item, NULL, \
+ OR_ALL, desc )
+
#define MP_CMD_DIR_RAW_ARGS_ON_READ(name, item, desc) \
AP_INIT_RAW_ARGS( name, modperl_cmd_##item, NULL, \
OR_ALL|EXEC_ON_READ, desc )
1.39 +0 -4 modperl-2.0/todo/release
Index: release
===================================================================
RCS file: /home/cvs/modperl-2.0/todo/release,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- release 5 Aug 2004 20:01:24 -0000 1.38
+++ release 7 Aug 2004 02:52:08 -0000 1.39
@@ -75,10 +75,6 @@
Apache->server->process->pconf->cleanup_register(sub { ... });
Report: geoff
-- PerlModule, PerlRequire, <Perl> in .htaccess is missing
- http://marc.theaimsgroup.com/?t=105370088700001&r=1&w=2
- Owner: gozer
-
- cgi emulation: %ENV management:
- %ENV is currently only saved/restored for the perl-script