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

2002-06-01 Thread dougm

dougm   2002/06/01 16:42:08

  Modified:src/modules/perl modperl_env.c
  Log:
  pass the PATH and TZ environment variables at startup by default as 1.xx did
  
  Revision  ChangesPath
  1.25  +22 -0 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.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- modperl_env.c 30 May 2002 23:35:02 -  1.24
  +++ modperl_env.c 1 Jun 2002 23:42:07 -   1.25
  @@ -85,10 +85,32 @@
   modperl_env_tie(mg_flags);
   }
   
  +/* list of environment variables to pass by default */
  +static const char *MP_env_pass_defaults[] = {
  +"PATH", "TZ", NULL
  +};
  +
   void modperl_env_configure_server(pTHX_ apr_pool_t *p, server_rec *s)
   {
   /* XXX: propagate scfg->SetEnv to environ */
   MP_dSCFG(s);
  +int i = 0;
  +
  +for (i=0; MP_env_pass_defaults[i]; i++) {
  +const char *key = MP_env_pass_defaults[i];
  +char *val;
  +
  +if (apr_table_get(scfg->SetEnv, key) ||
  +apr_table_get(scfg->PassEnv, key))
  +{
  +continue; /* already configured */
  +}
  +
  +if ((val = getenv(key))) {
  +apr_table_set(scfg->PassEnv, key, val);
  +}
  +}
  +
   modperl_env_table_populate(aTHX_ scfg->SetEnv);
   modperl_env_table_populate(aTHX_ scfg->PassEnv);
   }
  
  
  



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

2002-05-27 Thread dougm

dougm   02/05/27 17:35:00

  Modified:src/modules/perl modperl_env.c
  Log:
  untabify
  
  Revision  ChangesPath
  1.23  +1 -1  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.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- modperl_env.c 27 May 2002 20:19:40 -  1.22
  +++ modperl_env.c 28 May 2002 00:35:00 -  1.23
  @@ -76,7 +76,7 @@
   elts  = (apr_table_entry_t *)array->elts;
   
   for (i = 0; i < array->nelts; i++) {
  - if (!elts[i].key || !elts[i].val) {
  +if (!elts[i].key || !elts[i].val) {
   continue;
   }
   modperl_env_hv_store(aTHX_ hv, &elts[i]);
  
  
  



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

2002-05-27 Thread dougm

dougm   02/05/27 13:19:40

  Modified:src/modules/perl modperl_env.c
  Log:
  also need to feed PassEnv config into %ENV
  
  Revision  ChangesPath
  1.22  +1 -0  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.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- modperl_env.c 27 May 2002 18:39:03 -  1.21
  +++ modperl_env.c 27 May 2002 20:19:40 -  1.22
  @@ -90,6 +90,7 @@
   /* XXX: propagate scfg->SetEnv to environ */
   MP_dSCFG(s);
   modperl_env_table_populate(aTHX_ scfg->SetEnv);
  +modperl_env_table_populate(aTHX_ scfg->PassEnv);
   }
   
   #define overlay_subprocess_env(r, tab) \
  
  
  



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

2002-05-27 Thread dougm

dougm   02/05/27 11:39:03

  Modified:src/modules/perl modperl_env.c
  Log:
  propagate scfg->SetEnv to %ENV
  
  Revision  ChangesPath
  1.21  +26 -18modperl-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.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- modperl_env.c 19 Nov 2001 00:07:28 -  1.20
  +++ modperl_env.c 27 May 2002 18:39:03 -  1.21
  @@ -62,9 +62,34 @@
   modperl_env_tie(mg_flags);
   }
   
  +static void modperl_env_table_populate(pTHX_ apr_table_t *table)
  +{
  +HV *hv = ENVHV;
  +U32 mg_flags;
  +int i;
  +const apr_array_header_t *array;
  +apr_table_entry_t *elts;
  +
  +modperl_env_untie(mg_flags);
  +
  +array = apr_table_elts(table);
  +elts  = (apr_table_entry_t *)array->elts;
  +
  +for (i = 0; i < array->nelts; i++) {
  + if (!elts[i].key || !elts[i].val) {
  +continue;
  +}
  +modperl_env_hv_store(aTHX_ hv, &elts[i]);
  +}
  +
  +modperl_env_tie(mg_flags);
  +}
  +
   void modperl_env_configure_server(pTHX_ apr_pool_t *p, server_rec *s)
   {
   /* XXX: propagate scfg->SetEnv to environ */
  +MP_dSCFG(s);
  +modperl_env_table_populate(aTHX_ scfg->SetEnv);
   }
   
   #define overlay_subprocess_env(r, tab) \
  @@ -106,11 +131,6 @@
   void modperl_env_request_populate(pTHX_ request_rec *r)
   {
   MP_dRCFG;
  -HV *hv = ENVHV;
  -U32 mg_flags;
  -int i;
  -const apr_array_header_t *array;
  -apr_table_entry_t *elts;
   
   if (MpReqSETUP_ENV(rcfg)) {
   return;
  @@ -124,19 +144,7 @@
   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;
  -}
  -modperl_env_hv_store(aTHX_ hv, &elts[i]);
  -}
  -
  -modperl_env_tie(mg_flags);
  +modperl_env_table_populate(aTHX_ r->subprocess_env);
   
   #ifdef MP_COMPAT_1X
   modperl_env_default_populate(aTHX); /* reset GATEWAY_INTERFACE */
  
  
  



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

2001-06-26 Thread dougm

dougm   01/06/26 22:35:55

  Modified:src/modules/perl modperl_env.c
  Log:
  GATEWAY_INTERFACE needs to be set on each request, since ap_add_cgi_vars() will reset
  
  Revision  ChangesPath
  1.3   +23 -0 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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- modperl_env.c 2001/05/08 18:55:45 1.2
  +++ modperl_env.c 2001/06/27 05:35:55 1.3
  @@ -20,6 +20,22 @@
   SvTAINTED_on(*svp);
   }
   
  +typedef struct {
  +const char *key;
  +I32 klen;
  +const char *val;
  +I32 vlen;
  +U32 hash;
  +} mp_env_ent_t;
  +
  +#define MP_ENV_ENT(k,v) \
  +{ k, sizeof(k)-1, v, sizeof(v)-1, 0 }
  +
  +static const mp_env_ent_t mp_env_const_vars[] = {
  +MP_ENV_ENT("GATEWAY_INTERFACE", "CGI-Perl/1.1"),
  +{ NULL }
  +};
  +
   static void mp_env_request_populate(pTHX_ request_rec *r)
   {
   HV *hv = GvHV(PL_envgv);
  @@ -37,6 +53,13 @@
   mp_env_hv_store(aTHX_ hv, &elts[i]);
   }
   
  +for (i = 0; mp_env_const_vars[i].key; i++) {
  +const mp_env_ent_t *ent = &mp_env_const_vars[i];
  +
  +hv_store(hv, ent->key, ent->klen,
  + newSVpvn(ent->val, ent->vlen), ent->hash);
  +}
  + 
   modperl_env_tie(mg_flags);
   }
   
  
  
  



cvs commit: modperl-2.0/src/modules/perl modperl_env.c modperl_env.h

2001-05-07 Thread dougm

dougm   01/05/07 21:10:42

  Added:   src/modules/perl modperl_env.c modperl_env.h
  Log:
  add modperl_env module to manage %ENV
  
  Revision  ChangesPath
  1.1  modperl-2.0/src/modules/perl/modperl_env.c
  
  Index: modperl_env.c
  ===
  #include "mod_perl.h"
  #include "util_script.h"
  
  #define EnvMgObj SvMAGIC((SV*)GvHV(PL_envgv))->mg_ptr
  
  static MP_INLINE
  void mp_env_hv_store(pTHX_ HV *hv, apr_table_entry_t *elt)
  {
  I32 klen = strlen(elt->key);
  SV **svp = hv_fetch(hv, elt->key, klen, FALSE);
  
  if (svp) {
  sv_setpv(*svp, elt->val);
  }
  else {
  SV *sv = newSVpv(elt->val, 0);
  hv_store(hv, elt->key, klen, sv, FALSE);
  svp = &sv;
  }
  
  SvTAINTED_on(*svp);
  }
  
  static void mp_env_request_populate(pTHX_ request_rec *r)
  {
  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;
  
  modperl_env_untie(mg_flags);
  
  for (i = 0; i < array->nelts; i++) {
if (!elts[i].key || !elts[i].val) {
  continue;
  }
  mp_env_hv_store(aTHX_ hv, &elts[i]);
  }
  
  modperl_env_tie(mg_flags);
  }
  
  static int mp_env_request_set(pTHX_ SV *sv, MAGIC *mg)
  {
  const char *key, *val;
  STRLEN klen, vlen;
  request_rec *r = (request_rec *)EnvMgObj;
  
  key = (const char *)MgPV(mg,klen);
  val = (const char *)SvPV(sv,vlen);
  
  apr_table_set(r->subprocess_env, key, val);
  
  /*return magic_setenv(sv, mg);*/
  
  return 0;
  }
  
  #ifdef MP_PERL_HV_GMAGICAL_AWARE
  static int mp_env_request_get(pTHX_ SV *sv, MAGIC *mg)
  {
  const char *key, *val;
  STRLEN klen;
  request_rec *r = (request_rec *)EnvMgObj;
  
  key = (const char *)MgPV(mg,klen);
  
  if ((val = apr_table_get(r->subprocess_env, key))) {
  sv_setpv(sv, val);
  }
  else {
  sv_setsv(sv, &PL_sv_undef);
  }
  
  return 0;
  }
  #endif
  
  void modperl_env_request_tie(pTHX_ request_rec *r)
  {
  ap_add_common_vars(r);
  ap_add_cgi_vars(r);
  
  /* XXX: should be options #ifdef MP_PERL_HV_GMAGICAL_AWARE */
  mp_env_request_populate(aTHX_ r);
  
  EnvMgObj = (char *)r;
  
  PL_vtbl_envelem.svt_set = MEMBER_TO_FPTR(mp_env_request_set);
  #ifdef MP_PERL_HV_GMAGICAL_AWARE
  SvGMAGICAL_on((SV*)GvHV(PL_envgv));
  PL_vtbl_envelem.svt_get = MEMBER_TO_FPTR(mp_env_request_get);
  #endif
  }
  
  void modperl_env_request_untie(pTHX_ request_rec *r)
  {
  PL_vtbl_envelem.svt_set = MEMBER_TO_FPTR(Perl_magic_setenv);
  #ifdef MP_PERL_HV_GMAGICAL_AWARE
  SvGMAGICAL_off((SV*)GvHV(PL_envgv));
  PL_vtbl_envelem.svt_get = 0;
  #endif
  }
  
  
  
  1.1  modperl-2.0/src/modules/perl/modperl_env.h
  
  Index: modperl_env.h
  ===
  #ifndef MODPERL_ENV_H
  #define MODPERL_ENV_H
  
  #define modperl_env_untie(mg_flags) \
  mg_flags = SvMAGICAL((SV*)GvHV(PL_envgv)); \
  SvMAGICAL_off((SV*)GvHV(PL_envgv))
  
  #define modperl_env_tie(mg_flags) \
  SvFLAGS((SV*)GvHV(PL_envgv)) |= mg_flags
  
  void modperl_env_request_tie(pTHX_ request_rec *r);
  void modperl_env_request_untie(pTHX_ request_rec *r);
  
  #endif /* MODPERL_ENV_H */