sbekman     01/08/08 00:02:41

  Modified:    src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h
                        modperl_config.c modperl_config.h modperl_util.c
                        modperl_util.h
               todo     missing_old_features.txt
  Log:
  * implementing PerlModule and PerlRequire configuration
  directives, for the main server and virtual hosts
  
  * adding a todo item: .htaccess support for PerlModule and PerlRequire is
  missing
  
  Revision  Changes    Path
  1.61      +16 -0     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.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- mod_perl.c        2001/07/15 22:33:48     1.60
  +++ mod_perl.c        2001/08/08 07:02:41     1.61
  @@ -74,6 +74,13 @@
       );
   #endif
   
  +    if (!modperl_config_apply_PerlModule(s, scfg, perl, p)){
  +        exit(1);
  +    }
  +    if (!modperl_config_apply_PerlRequire(s, scfg, perl, p)){
  +        exit(1);
  +    }
  +
   #ifndef USE_ITHREADS
       cdata = modperl_cleanup_data_new(p, (void*)perl);
       apr_pool_cleanup_register(p, cdata,
  @@ -126,6 +133,13 @@
                          modperl_server_desc(s, p));
           }
   
  +        if (!modperl_config_apply_PerlModule(s, scfg, perl, p)){
  +            exit(1);
  +        }
  +        if (!modperl_config_apply_PerlRequire(s, scfg, perl, p)){
  +            exit(1);
  +        }
  +
   #ifdef USE_ITHREADS
   
           if (!MpSrvENABLED(scfg)) {
  @@ -355,6 +369,8 @@
   
   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("PerlOptions", options, "Perl Options"),
   #ifdef MP_TRACE
       MP_CMD_SRV_TAKE1("PerlTrace", trace, "Trace level"),
  
  
  
  1.5       +19 -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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- modperl_cmd.c     2001/04/06 02:18:15     1.4
  +++ modperl_cmd.c     2001/08/08 07:02:41     1.5
  @@ -39,7 +39,26 @@
   MP_CMD_SRV_DECLARE(switches)
   {
       MP_dSCFG(parms->server);
  +    MP_TRACE_d(MP_FUNC, "arg = %s\n", arg);
       modperl_config_srv_argv_push(arg);
  +    return NULL;
  +}
  +
  +MP_CMD_SRV_DECLARE(modules)
  +{
  +    MP_dSCFG(parms->server);
  +
  +    *(const char **)apr_array_push(scfg->PerlModule) = arg;
  +    MP_TRACE_d(MP_FUNC, "arg = %s\n", arg);
  +    return NULL;
  +}
  +
  +MP_CMD_SRV_DECLARE(requires)
  +{
  +    MP_dSCFG(parms->server);
  +
  +    *(const char **)apr_array_push(scfg->PerlRequire) = arg;
  +    MP_TRACE_d(MP_FUNC, "arg = %s\n", arg);
       return NULL;
   }
   
  
  
  
  1.5       +2 -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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- modperl_cmd.h     2001/04/06 02:18:15     1.4
  +++ modperl_cmd.h     2001/08/08 07:02:41     1.5
  @@ -10,6 +10,8 @@
                                  void *dummy, const char *arg)
   MP_CMD_SRV_DECLARE(trace);
   MP_CMD_SRV_DECLARE(switches);
  +MP_CMD_SRV_DECLARE(modules);
  +MP_CMD_SRV_DECLARE(requires);
   MP_CMD_SRV_DECLARE(options);
   
   #ifdef USE_ITHREADS
  
  
  
  1.33      +51 -0     modperl-2.0/src/modules/perl/modperl_config.c
  
  Index: modperl_config.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- modperl_config.c  2001/05/08 21:08:26     1.32
  +++ modperl_config.c  2001/08/08 07:02:41     1.33
  @@ -71,6 +71,9 @@
       MpSrvENABLED_On(scfg); /* mod_perl enabled by default */
       MpSrvHOOKS_ALL_On(scfg); /* all hooks enabled by default */
   
  +    scfg->PerlModule  = apr_array_make(p, 2, sizeof(char *));
  +    scfg->PerlRequire = apr_array_make(p, 2, sizeof(char *));
  +
       scfg->argv = apr_array_make(p, 2, sizeof(char *));
   
       modperl_config_srv_argv_push((char *)ap_server_argv0);
  @@ -152,6 +155,9 @@
       MP_TRACE_d(MP_FUNC, "basev==0x%lx, addv==0x%lx\n", 
                  (unsigned long)basev, (unsigned long)addv);
   
  +    merge_item(PerlModule);
  +    merge_item(PerlRequire);
  +
       merge_item(threaded_mpm);
   
   #ifdef USE_ITHREADS
  @@ -183,3 +189,48 @@
       return mrg;
   }
   
  +int modperl_config_apply_PerlModule(server_rec *s, modperl_config_srv_t *scfg, 
PerlInterpreter *perl, apr_pool_t *p)
  +{
  +    char **entries;
  +    int i;
  +    dTHXa(perl);
  +
  +    entries = (char **)scfg->PerlModule->elts;
  +    for (i = 0; i < scfg->PerlModule->nelts; i++){
  +        if (modperl_require_module(aTHX_ entries[i], TRUE)){
  +            MP_TRACE_d(MP_FUNC, "loaded Perl module %s for server %s\n",
  +                       entries[i], modperl_server_desc(s,p));
  +        }
  +        else {
  +            ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
  +                         "Can't load Perl module %s for server %s, exiting...\n",
  +                         entries[i], modperl_server_desc(s,p));
  +            return FALSE;
  +        }
  +    }
  +
  +    return TRUE;
  +}
  +
  +int modperl_config_apply_PerlRequire(server_rec *s, modperl_config_srv_t *scfg, 
PerlInterpreter *perl, apr_pool_t *p)
  +{
  +    char **entries;
  +    int i;
  +    dTHXa(perl);
  +
  +    entries = (char **)scfg->PerlRequire->elts;
  +    for (i = 0; i < scfg->PerlRequire->nelts; i++){
  +        if (modperl_require_file(aTHX_ entries[i], TRUE)){
  +            MP_TRACE_d(MP_FUNC, "loaded Perl file: %s for server %s\n",
  +                       entries[i], modperl_server_desc(s,p));
  +        }
  +        else {
  +            ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
  +                         "Can't load Perl file: %s for server %s, exiting...\n",
  +                         entries[i], modperl_server_desc(s,p));
  +            return FALSE;
  +        }
  +    }
  +
  +    return TRUE;
  +}
  
  
  
  1.26      +3 -0      modperl-2.0/src/modules/perl/modperl_config.h
  
  Index: modperl_config.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.h,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- modperl_config.h  2001/03/25 21:26:47     1.25
  +++ modperl_config.h  2001/08/08 07:02:41     1.26
  @@ -59,4 +59,7 @@
   #   define MP_dSCFG_dTHX dTHXa(scfg->perl)
   #endif
   
  +int modperl_config_apply_PerlModule(server_rec *s, modperl_config_srv_t *scfg, 
PerlInterpreter *perl, apr_pool_t *p);
  +int modperl_config_apply_PerlRequire(server_rec *s, modperl_config_srv_t *scfg, 
PerlInterpreter *perl, apr_pool_t *p);
  +
   #endif /* MODPERL_CONFIG_H */
  
  
  
  1.16      +26 -0     modperl-2.0/src/modules/perl/modperl_util.c
  
  Index: modperl_util.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.c,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- modperl_util.c    2001/05/22 20:57:33     1.15
  +++ modperl_util.c    2001/08/08 07:02:41     1.16
  @@ -25,6 +25,32 @@
       return TRUE;
   }
   
  +int modperl_require_file(pTHX_ const char *pv, int logfailure)
  +{
  +    SV *sv;
  +
  +    dSP;
  +    PUSHSTACKi(PERLSI_REQUIRE);
  +    PUTBACK;
  +    sv = sv_newmortal();
  +    sv_setpv(sv, "require \"");
  +    sv_catpv(sv, pv);
  +    sv_catpv(sv, "\"");
  +    eval_sv(sv, G_DISCARD);
  +    SPAGAIN;
  +    POPSTACK;
  +
  +    if (SvTRUE(ERRSV)) {
  +        if (logfailure) {
  +            (void)modperl_errsv(aTHX_ HTTP_INTERNAL_SERVER_ERROR,
  +                                NULL, NULL);
  +        }
  +        return FALSE;
  +    }
  +
  +    return TRUE;
  +}
  +
   static SV *modperl_hv_request_find(pTHX_ SV *in, char *classname, CV *cv)
   {
       static char *r_keys[] = { "r", "_r", NULL };
  
  
  
  1.16      +1 -0      modperl-2.0/src/modules/perl/modperl_util.h
  
  Index: modperl_util.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.h,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- modperl_util.h    2001/05/22 20:57:34     1.15
  +++ modperl_util.h    2001/08/08 07:02:41     1.16
  @@ -36,6 +36,7 @@
   int modperl_errsv(pTHX_ int status, request_rec *r, server_rec *s);
   
   int modperl_require_module(pTHX_ const char *pv, int logfailure);
  +int modperl_require_file(pTHX_ const char *pv, int logfailure);
   
   char *modperl_server_desc(server_rec *s, apr_pool_t *p);
   
  
  
  
  1.3       +1 -1      modperl-2.0/todo/missing_old_features.txt
  
  Index: missing_old_features.txt
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/todo/missing_old_features.txt,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- missing_old_features.txt  2001/05/08 22:25:59     1.2
  +++ missing_old_features.txt  2001/08/08 07:02:41     1.3
  @@ -12,7 +12,7 @@
   
   - PerlSetEnv, PerlPassEnv
   
  -- PerlModule, PerlRequire: not yet implemented
  +- PerlModule, PerlRequire: missing support for .htaccess as 1.x does.
   
   - pod directives (=pod,=back,=cut) and __END__
   
  
  
  

Reply via email to