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
  
  
  

Reply via email to