You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by do...@locus.apache.org on 2000/06/12 21:37:29 UTC

cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_callback.c

dougm       00/06/12 12:37:28

  Modified:    lib/ModPerl Code.pm
               src/modules/perl mod_perl.c modperl_callback.c
  Log:
  allow vhosts to disable mod_perl
  
  Revision  Changes    Path
  1.29      +9 -4      modperl-2.0/lib/ModPerl/Code.pm
  
  Index: Code.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/lib/ModPerl/Code.pm,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- Code.pm	2000/06/12 04:41:09	1.28
  +++ Code.pm	2000/06/12 19:37:25	1.29
  @@ -45,11 +45,11 @@
   
   $hook_proto{PerDir} = $hook_proto{PerSrv};
   
  -my $dcfg_get = 
  -  'modperl_dir_config_t *dcfg = (modperl_dir_config_t *)dummy';
  -
   my $scfg_get = 'MP_dSCFG(parms->server)';
   
  +my $dcfg_get = "$scfg_get;\n" .
  +  'modperl_dir_config_t *dcfg = (modperl_dir_config_t *)dummy';
  +
   my %directive_proto = (
       PerSrv     => {
           args => [{type => 'cmd_parms', name => 'parms'},
  @@ -83,7 +83,7 @@
   
   my %flags = (
       Srv => [qw(NONE PERL_TAINT_CHECK PERL_WARN FRESH_RESTART
  -               PERL_CLONE PERL_ALLOC UNSET)],
  +               PERL_CLONE PERL_ALLOC PERL_OFF UNSET)],
       Dir => [qw(NONE INCPUSH SENDHDR SENTHDR ENV CLEANUP RCLEANUP)],
       Interp => [qw(NONE IN_USE PUTBACK CLONED BASE)],
       Handler => [qw(NONE PARSED METHOD OBJECT ANON)],
  @@ -223,6 +223,11 @@
   $protostr
   {
       $prototype->{cfg}->{get};
  +    if (MpSrvPERL_OFF(scfg)) {
  +        return ap_pstrcat(parms->pool,
  +                          "Perl is disabled for server ",
  +                          parms->server->server_hostname, NULL);
  +    }
       MP_TRACE_d(MP_FUNC, "push \@%s, %s\\n", parms->cmd->name, arg);
       return modperl_cmd_push_handlers(&($av), arg, parms->pool);
   }
  
  
  
  1.17      +16 -1     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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- mod_perl.c	2000/06/12 18:20:55	1.16
  +++ mod_perl.c	2000/06/12 19:37:26	1.17
  @@ -48,8 +48,14 @@
       modperl_srv_config_t *base_scfg =
         (modperl_srv_config_t *)
           ap_get_module_config(base_server->module_config, &perl_module);
  -    PerlInterpreter *base_perl = modperl_startup(base_server, p);
  +    PerlInterpreter *base_perl;
   
  +    if (MpSrvPERL_OFF(base_scfg)) {
  +        /* how silly */
  +        return;
  +    }
  +
  +    base_perl = modperl_startup(base_server, p);
       modperl_interp_init(base_server, p, base_perl);
       MpInterpBASE_On(base_scfg->mip->parent);
   
  @@ -61,12 +67,16 @@
               /* XXX: using getenv() just for testing here */
               char *do_alloc = getenv("MP_SRV_ALLOC_TEST");
               char *do_clone = getenv("MP_SRV_CLONE_TEST");
  +            char *do_off = getenv("MP_SRV_OFF_TEST");
               if (do_alloc && strEQ(do_alloc, s->server_hostname)) {
                   MpSrvPERL_ALLOC_On(scfg);
               }
               if (do_clone && strEQ(do_clone, s->server_hostname)) {
                   MpSrvPERL_CLONE_On(scfg);
               }
  +            if (do_off && strEQ(do_off, s->server_hostname)) {
  +                MpSrvPERL_OFF_On(scfg);
  +            }
           }
   
           /* if alloc flags is On, virtual host gets its own parent perl */
  @@ -74,6 +84,11 @@
               perl = modperl_startup(s, p);
               MP_TRACE_i(MP_FUNC, "modperl_startup() server=%s\n",
                          s->server_hostname);
  +        }
  +
  +        if (MpSrvPERL_OFF(scfg)) {
  +            scfg->mip = NULL;
  +            continue;
           }
   
   #ifdef USE_ITHREADS
  
  
  
  1.11      +6 -0      modperl-2.0/src/modules/perl/modperl_callback.c
  
  Index: modperl_callback.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_callback.c,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- modperl_callback.c	2000/05/26 20:34:49	1.10
  +++ modperl_callback.c	2000/06/12 19:37:27	1.11
  @@ -316,6 +316,12 @@
       int i, status = OK;
       const char *desc = NULL;
   
  +    if (MpSrvPERL_OFF(scfg)) {
  +        MP_TRACE_h(MP_FUNC, "PerlOff for server %s\n",
  +                   s->server_hostname);
  +        return DECLINED;
  +    }
  +
       switch (type) {
         case MP_HANDLER_TYPE_DIR:
           av = dcfg->handlers[idx];