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