dougm       01/09/28 08:16:06

  Modified:    lib/ModPerl Code.pm
               src/modules/perl mod_perl.c modperl_callback.c
                        modperl_config.c modperl_env.c modperl_env.h
                        modperl_options.c modperl_types.h
               todo     missing_old_features.txt
  Log:
  fix SetupEnv such that:
  PerlOptions +SetupEnv happens as early as possible
  +SetEnv is the default only for perl-script handler
  
  Revision  Changes    Path
  1.70      +10 -3     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.69
  retrieving revision 1.70
  diff -u -r1.69 -r1.70
  --- Code.pm   2001/09/27 19:04:38     1.69
  +++ Code.pm   2001/09/28 15:16:06     1.70
  @@ -96,13 +96,20 @@
       Srv => ['NONE', @ithread_opts, qw(ENABLE AUTOLOAD MERGE_HANDLERS),
               @hook_flags, 'UNSET'],
       Dir => [qw(NONE PARSE_HEADERS SETUP_ENV MERGE_HANDLERS GLOBAL_REQUEST UNSET)],
  -    Req => [qw(NONE SET_GLOBAL_REQUEST)],
  +    Req => [qw(NONE SET_GLOBAL_REQUEST SETUP_ENV)],
       Interp => [qw(NONE IN_USE PUTBACK CLONED BASE)],
       Handler => [qw(NONE PARSED METHOD OBJECT ANON AUTOLOAD DYNAMIC)],
   );
   
  +$flags{DirSeen} = $flags{Dir};
  +
   my %flags_options = map { $_,1 } qw(Srv Dir);
   
  +my %flags_field = (
  +    DirSeen => 'flags->opts_seen',
  +    (map { $_, 'flags->opts' } keys %flags_options),
  +);
  +
   sub new {
       my $class = shift;
       bless {
  @@ -334,9 +341,9 @@
           }
   
           my $flags = join $class, qw(Mp FLAGS);
  +        my $field = $flags_field{$class} || 'flags';
   
  -        print $h_fh "\n#define $flags(p) ",
  -          ($flags_options{$class} ? '(p)->flags->opts' : '(p)->flags'), "\n";
  +        print $h_fh "\n#define $flags(p) (p)->$field\n";
   
           $class = "Mp$class";
           print $h_fh "\n#define ${class}Type $n\n";
  
  
  
  1.79      +5 -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.78
  retrieving revision 1.79
  diff -u -r1.78 -r1.79
  --- mod_perl.c        2001/09/27 23:29:51     1.78
  +++ mod_perl.c        2001/09/28 15:16:06     1.79
  @@ -511,6 +511,11 @@
       }
   #endif
   
  +    /* default is +SetupEnv, skip if PerlOption -SetupEnv */
  +    if (MpDirSETUP_ENV(dcfg) || !MpDirSeenSETUP_ENV(dcfg)) {
  +        modperl_env_request_populate(aTHX_ r);
  +    }
  +
       if (MpDirPARSE_HEADERS(dcfg)) {
           rcfg->wbucket.header_parse = 1;
       }
  
  
  
  1.44      +5 -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.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- modperl_callback.c        2001/09/17 23:36:36     1.43
  +++ modperl_callback.c        2001/09/28 15:16:06     1.44
  @@ -138,6 +138,11 @@
         case MP_HANDLER_TYPE_PER_SRV:
           modperl_handler_make_args(aTHX_ &av_args,
                                     "Apache::RequestRec", r, NULL);
  +
  +        /* only happens once per-request */
  +        if (MpDirSETUP_ENV(dcfg)) {
  +            modperl_env_request_populate(aTHX_ r);
  +        }
           break;
         case MP_HANDLER_TYPE_CONNECTION:
           modperl_handler_make_args(aTHX_ &av_args,
  
  
  
  1.41      +0 -2      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.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- modperl_config.c  2001/09/27 23:31:36     1.40
  +++ modperl_config.c  2001/09/28 15:16:06     1.41
  @@ -9,8 +9,6 @@
       dcfg->interp_scope = MP_INTERP_SCOPE_UNDEF;
   #endif
   
  -    MpDirSETUP_ENV_On(dcfg); /* %ENV setup on by default */
  -
       return dcfg;
   }
   
  
  
  
  1.8       +16 -9     modperl-2.0/src/modules/perl/modperl_env.c
  
  Index: modperl_env.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_env.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- modperl_env.c     2001/09/27 23:31:36     1.7
  +++ modperl_env.c     2001/09/28 15:16:06     1.8
  @@ -36,19 +36,30 @@
       { NULL }
   };
   
  -static void modperl_env_request_populate(pTHX_ request_rec *r)
  +void modperl_env_request_populate(pTHX_ request_rec *r)
   {
  +    MP_dRCFG;
       HV *hv = GvHV(PL_envgv);
       int i;
       U32 mg_flags;
  -    apr_array_header_t *array = apr_table_elts(r->subprocess_env);
  -    apr_table_entry_t *elts = (apr_table_entry_t *)array->elts;
  +    apr_array_header_t *array;
  +    apr_table_entry_t *elts;
   
  +
  +    if (MpReqSETUP_ENV(rcfg)) {
  +        return;
  +    }
  +
  +    MP_TRACE_g(MP_FUNC, "populating environment for %s\n", r->uri);
  +
       ap_add_common_vars(r);
       ap_add_cgi_vars(r);
   
       modperl_env_untie(mg_flags);
   
  +    array = apr_table_elts(r->subprocess_env);
  +    elts  = (apr_table_entry_t *)array->elts;
  +
       for (i = 0; i < array->nelts; i++) {
        if (!elts[i].key || !elts[i].val) {
               continue;
  @@ -64,6 +75,8 @@
       }
                    
       modperl_env_tie(mg_flags);
  +
  +    MpReqSETUP_ENV_On(rcfg);
   }
   
   static int modperl_env_request_set(pTHX_ SV *sv, MAGIC *mg)
  @@ -104,12 +117,6 @@
   
   void modperl_env_request_tie(pTHX_ request_rec *r)
   {
  -    MP_dDCFG;
  -
  -    if (MpDirSETUP_ENV(dcfg)) {
  -        modperl_env_request_populate(aTHX_ r);
  -    }
  -
       EnvMgObj = (char *)r;
   
       PL_vtbl_envelem.svt_set = MEMBER_TO_FPTR(modperl_env_request_set);
  
  
  
  1.4       +3 -0      modperl-2.0/src/modules/perl/modperl_env.h
  
  Index: modperl_env.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_env.h,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- modperl_env.h     2001/09/27 23:31:36     1.3
  +++ modperl_env.h     2001/09/28 15:16:06     1.4
  @@ -8,7 +8,10 @@
   #define modperl_env_tie(mg_flags) \
       SvFLAGS((SV*)GvHV(PL_envgv)) |= mg_flags
   
  +void modperl_env_request_populate(pTHX_ request_rec *r);
  +
   void modperl_env_request_tie(pTHX_ request_rec *r);
  +
   void modperl_env_request_untie(pTHX_ request_rec *r);
   
   #endif /* MODPERL_ENV_H */
  
  
  
  1.10      +4 -0      modperl-2.0/src/modules/perl/modperl_options.c
  
  Index: modperl_options.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_options.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- modperl_options.c 2001/09/27 23:31:36     1.9
  +++ modperl_options.c 2001/09/28 15:16:06     1.10
  @@ -82,6 +82,8 @@
       }
   #endif
   
  +    o->opts_seen |= opt;
  +
       if (action == '-') {
           o->opts_remove |= opt;
           o->opts_add &= ~opt;
  @@ -125,6 +127,8 @@
           conf->opts_add = add->opts_add;
           conf->opts_remove = add->opts_remove;
       }
  +
  +    conf->opts_seen |= add->opts_seen;
   
       return conf;
   }
  
  
  
  1.50      +1 -0      modperl-2.0/src/modules/perl/modperl_types.h
  
  Index: modperl_types.h
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v
  retrieving revision 1.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- modperl_types.h   2001/09/27 23:31:36     1.49
  +++ modperl_types.h   2001/09/28 15:16:06     1.50
  @@ -98,6 +98,7 @@
       modperl_opts_t opts_add;
       modperl_opts_t opts_remove;
       modperl_opts_t opts_override;
  +    modperl_opts_t opts_seen;
       int unset;
   } modperl_options_t;
   
  
  
  
  1.8       +0 -4      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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- missing_old_features.txt  2001/09/27 20:03:37     1.7
  +++ missing_old_features.txt  2001/09/28 15:16:06     1.8
  @@ -10,10 +10,6 @@
   
   - PerlSetEnv, PerlPassEnv
   
  -- PerlSetupEnv (PerlOptions +SetupEnv) currently only happens within
  -  the perl-script handler; needs to happen earlier.  should only
  -  default to On within the perl-script handler
  -
   - PerlModule, PerlRequire: missing support for .htaccess as 1.x does.
   
   - pod directives (=pod,=back,=cut) and __END__
  
  
  


Reply via email to