cvs commit: modperl-2.0/t/response/TestModperl merge.pm

2004-09-25 Thread stas
stas2004/09/25 11:47:10

  Modified:t/response/TestModperl merge.pm
  Log:
  style cleanup
  
  Revision  ChangesPath
  1.9   +66 -65modperl-2.0/t/response/TestModperl/merge.pm
  
  Index: merge.pm
  ===
  RCS file: /home/cvs/modperl-2.0/t/response/TestModperl/merge.pm,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -u -r1.8 -r1.9
  --- merge.pm  20 Sep 2004 18:14:48 -  1.8
  +++ merge.pm  25 Sep 2004 18:47:10 -  1.9
  @@ -17,71 +17,74 @@
   # t/modperl/merge2.t, and t/modperl/merge3.t.  see any of those
   # tests and/or the below configuration for more details
   
  -
  -# result tables for the below tests (trying to make the code more simple...)
  -# the hash itself represents a request
  -# the keys to the main hash represent merge levels - 1 for the non-overriding
  -# merge, 2 for an overriding merge, and 3 for a two-level merge
  -# the rest should be self-explanatory - settings and expected values.
  -our %merge1 = ( 1 => { PerlPassEnv => [APACHE_TEST_HOSTTYPE => 'z80'],
  -   PerlSetEnv  => [MergeSetEnv1 => 'SetEnv1Val'],
  -   PerlSetVar  => [MergeSetVar1 => 'SetVar1Val'],
  -   PerlAddVar  => [MergeAddVar1 => ['AddVar1Val1', 
  -'AddVar1Val2']],
  - },
  -2 => { PerlSetEnv  => [MergeSetEnv2 => 'SetEnv2Val'],
  -   PerlSetVar  => [MergeSetVar2 => 'SetVar2Val'],
  -   PerlAddVar  => [MergeAddVar2 => ['AddVar2Val1', 
  -'AddVar2Val2']],
  - },
  -3 => { PerlSetEnv  => [MergeSetEnv3 => 'SetEnv3Val'],
  -   PerlSetVar  => [MergeSetVar3 => 'SetVar3Val'],
  -   PerlAddVar  => [MergeAddVar3 => ['AddVar3Val1',
  -'AddVar3Val2']],
  - },
  -  );
  -
  -our %merge2 = ( 1 => { PerlPassEnv => [APACHE_TEST_HOSTTYPE => 'z80'],
  -   PerlSetEnv  => [MergeSetEnv1 => 'SetEnv1Val'],
  -   PerlSetVar  => [MergeSetVar1 => 'SetVar1Val'],
  -   PerlAddVar  => [MergeAddVar1 => ['AddVar1Val1', 
  -'AddVar1Val2']],
  - },
  -2 => { PerlSetEnv  => [MergeSetEnv2 => 'SetEnv2Merge2Val'],
  -   PerlSetVar  => [MergeSetVar2 => 'SetVar2Merge2Val'],
  -   PerlAddVar  => [MergeAddVar2 => ['AddVar2Merge2Val1',
  -'AddVar2Merge2Val2']],
  - },
  -3 => { PerlSetEnv  => [MergeSetEnv3 => 'SetEnv3Val'],
  -   PerlSetVar  => [MergeSetVar3 => 'SetVar3Val'],
  -   PerlAddVar  => [MergeAddVar3 => ['AddVar3Val1',
  -'AddVar3Val2']],
  - },
  -  );
  -
  -our %merge3 = ( 1 => { PerlPassEnv => [APACHE_TEST_HOSTTYPE => 'z80'],
  -   PerlSetEnv  => [MergeSetEnv1 => 'SetEnv1Val'],
  -   PerlSetVar  => [MergeSetVar1 => 'SetVar1Val'],
  -   PerlAddVar  => [MergeAddVar1 => ['AddVar1Val1', 
  -'AddVar1Val2']],
  - },
  -2 => { PerlSetEnv  => [MergeSetEnv2 => 'SetEnv2Merge3Val'],
  -   PerlSetVar  => [MergeSetVar2 => 'SetVar2Merge3Val'],
  -   PerlAddVar  => [MergeAddVar2 => ['AddVar2Merge3Val1',
  -'AddVar2Merge3Val2']],
  - },
  -3 => { PerlSetEnv  => [MergeSetEnv3 => 'SetEnv3Merge3Val'],
  -   PerlSetVar  => [MergeSetVar3 => 'SetVar3Merge3Val'],
  -   PerlAddVar  => [MergeAddVar3 => ['AddVar3Merge3Val1',
  -'AddVar3Merge3Val2']],
  - },
  -  );
  +# result tables for the below tests (trying to make the code more
  +# simple...) the hash itself represents a request
  +# the keys to the main hash represent merge levels - 1 for the
  +# non-overriding merge, 2 for an overriding merge, and 3 for a
  +# two-level merge the rest should be self-explanatory - settings and
  +# expected values.
  +our %merge1 = (
  +1 => { PerlPassEnv => [APACHE_TEST_HOSTTYPE => 'z80'],
  +   PerlSetEnv  => [MergeSetEnv1 => 'SetEnv1Val'],
  +   PerlSetVar  => [MergeSetVar1 => 'SetVar1Val'],
  +   PerlAddVar  => [MergeAddVar1 => ['AddVar1Val1',
  +'AddVar1Val2']],
  +  

cvs commit: modperl-2.0/t/response/TestModperl merge.pm

2004-09-25 Thread stas
stas2004/09/25 11:48:18

  Modified:t/response/TestModperl merge.pm
  Log:
  after moving to its own vhost fix the test to explicitly call
  $r->subprocess_env to make PerlPassEnv  APACHE_TEST_HOSTTYPE visible to
  the process
  
  Revision  ChangesPath
  1.10  +3 -0  modperl-2.0/t/response/TestModperl/merge.pm
  
  Index: merge.pm
  ===
  RCS file: /home/cvs/modperl-2.0/t/response/TestModperl/merge.pm,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -u -r1.9 -r1.10
  --- merge.pm  25 Sep 2004 18:47:10 -  1.9
  +++ merge.pm  25 Sep 2004 18:48:18 -  1.10
  @@ -86,6 +86,9 @@
   
   plan $r, tests => 10;
   
  +# need to insert PerlPassEnv entries
  +$r->subprocess_env;
  +
   my $uri = $r->uri;
   my $hash;
   
  
  
  


cvs commit: modperl-2.0/t/response/TestModperl merge.pm

2004-09-25 Thread stas
stas2004/09/25 11:51:58

  Modified:t/response/TestModperl merge.pm
  Log:
  - revert the last attempt which didn't work
  - add a temp workaround
  
  Revision  ChangesPath
  1.11  +3 -4  modperl-2.0/t/response/TestModperl/merge.pm
  
  Index: merge.pm
  ===
  RCS file: /home/cvs/modperl-2.0/t/response/TestModperl/merge.pm,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -u -r1.10 -r1.11
  --- merge.pm  25 Sep 2004 18:48:18 -  1.10
  +++ merge.pm  25 Sep 2004 18:51:58 -  1.11
  @@ -81,14 +81,10 @@
   );
   
   sub handler {
  -
   my $r = shift;
   
   plan $r, tests => 10;
   
  -# need to insert PerlPassEnv entries
  -$r->subprocess_env;
  -
   my $uri = $r->uri;
   my $hash;
   
  @@ -136,6 +132,9 @@
   PerlModule TestModperl::merge
   
   
  +# XXX: temp workaround
  +PerlPostReadRequestHandler Apache::OK
  +
   # these should pass through all merges untouched
   PerlPassEnv  APACHE_TEST_HOSTTYPE
   PerlSetEnv   MergeSetEnv1  SetEnv1Val
  
  
  


cvs commit: modperl-2.0/t/response/TestDirective env.pm

2004-09-25 Thread stas
stas2004/09/25 12:01:15

  Modified:t/response/TestDirective env.pm
  Log:
  add a temp workaround for the PerlPassEnv handling bug
  
  Revision  ChangesPath
  1.5   +3 -0  modperl-2.0/t/response/TestDirective/env.pm
  
  Index: env.pm
  ===
  RCS file: /home/cvs/modperl-2.0/t/response/TestDirective/env.pm,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -u -r1.4 -r1.5
  --- env.pm9 Jul 2004 15:27:32 -   1.4
  +++ env.pm25 Sep 2004 19:01:15 -  1.5
  @@ -87,6 +87,9 @@
   # per-server entry not overwritten
   PerlSetEnv TestDirective__env_srv2 env_srv2
   
  +# XXX: temp workaround
  +PerlPostReadRequestHandler Apache::OK
  +
   # PerlPassEnv is only per-server
   PerlPassEnv APACHE_TEST_HOSTNAME
   
  
  
  


cvs commit: modperl-2.0/t/response/TestDirective env.pm

2004-09-25 Thread stas
stas2004/09/25 12:30:07

  Modified:t/response/TestModperl merge.pm
   t/response/TestDirective env.pm
  Log:
  unbreak the workaround
  
  Revision  ChangesPath
  1.12  +1 -1  modperl-2.0/t/response/TestModperl/merge.pm
  
  Index: merge.pm
  ===
  RCS file: /home/cvs/modperl-2.0/t/response/TestModperl/merge.pm,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -u -r1.11 -r1.12
  --- merge.pm  25 Sep 2004 18:51:58 -  1.11
  +++ merge.pm  25 Sep 2004 19:30:06 -  1.12
  @@ -133,7 +133,7 @@
   
   
   # XXX: temp workaround
  -PerlPostReadRequestHandler Apache::OK
  +PerlPostReadRequestHandler 'sub { use Apache::Const qw(DECLINED); DECLINED 
}'
   
   # these should pass through all merges untouched
   PerlPassEnv  APACHE_TEST_HOSTTYPE
  
  
  
  1.6   +1 -1  modperl-2.0/t/response/TestDirective/env.pm
  
  Index: env.pm
  ===
  RCS file: /home/cvs/modperl-2.0/t/response/TestDirective/env.pm,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -u -r1.5 -r1.6
  --- env.pm25 Sep 2004 19:01:15 -  1.5
  +++ env.pm25 Sep 2004 19:30:07 -  1.6
  @@ -88,7 +88,7 @@
   PerlSetEnv TestDirective__env_srv2 env_srv2
   
   # XXX: temp workaround
  -PerlPostReadRequestHandler Apache::OK
  +PerlPostReadRequestHandler 'sub { use Apache::Const qw(DECLINED); DECLINED }'
   
   # PerlPassEnv is only per-server
   PerlPassEnv APACHE_TEST_HOSTNAME
  
  
  


cvs commit: modperl-2.0 Changes

2004-09-25 Thread stas
stas2004/09/25 16:27:10

  Modified:src/modules/perl modperl_callback.c
   .Changes
  Log:
  make sure that each handler callback starts with a pristine
  tainted-ness state, so that previous callback calls won't affect the
  consequent ones. Without this change any handler triggering eval or
  another function call, that checks TAINT_PROPER, will crash mod_perl
  with: "Insecure dependency in eval while running setgid. Callback
  called exit." farewell message
  
  Revision  ChangesPath
  1.76  +18 -1 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.75
  retrieving revision 1.76
  diff -u -u -r1.75 -r1.76
  --- modperl_callback.c9 Jul 2004 08:01:20 -   1.75
  +++ modperl_callback.c25 Sep 2004 23:27:10 -  1.76
  @@ -22,8 +22,23 @@
   I32 flags = G_EVAL|G_SCALAR;
   dSP;
   int count, status = OK;
  +int tainted_orig = PL_tainted;
   
  +/* handler callbacks shouldn't affect each other's taintedness
  + * state, so start every callback with a clear record and restore
  + * at the end. one of the main problems we are trying to solve is
  + * that when modperl_croak called (which calls perl's
  + * croak(Nullch) to throw an error object) it leaves the
  + * interprter in the tainted state (which supposedly will be fixed
  + * in 5.8.6) which later affects other callbacks that call eval,
  + * etc, which triggers perl crash with:
  + * Insecure dependency in eval while running setgid.
  + * Callback called exit.
  + */
  +PL_tainted = TAINT_NOT;
  +
   if ((status = modperl_handler_resolve(aTHX_ &handler, p, s)) != OK) {
  +PL_tainted = tainted_orig;
   return status;
   }
   
  @@ -147,7 +162,9 @@
   apr_table_set(r->notes, "error-notes", SvPV_nolen(ERRSV));
   }
   }
  -
  +
  +PL_tainted = tainted_orig;
  +
   return status;
   }
   
  
  
  
  1.499 +7 -0  modperl-2.0/Changes
  
  Index: Changes
  ===
  RCS file: /home/cvs/modperl-2.0/Changes,v
  retrieving revision 1.498
  retrieving revision 1.499
  diff -u -u -r1.498 -r1.499
  --- Changes   25 Sep 2004 01:53:34 -  1.498
  +++ Changes   25 Sep 2004 23:27:10 -  1.499
  @@ -12,6 +12,13 @@
   
   =item 1.99_17-dev
   
  +make sure that each handler callback starts with a pristine
  +tainted-ness state, so that previous callback calls won't affect the
  +consequent ones. Without this change any handler triggering eval or
  +another function call, that checks TAINT_PROPER, will crash mod_perl
  +with: "Insecure dependency in eval while running setgid. Callback
  +called exit." farewell message [Stas]
  +
   make sure that 'make distclean' cleans all the autogenerated files
   [Stas]
   
  
  
  


cvs commit: modperl-2.0 Changes

2004-09-25 Thread stas
stas2004/09/25 20:12:38

  Modified:src/modules/perl modperl_callback.c
   .Changes
  Log:
  if some code changes the current interpreter's tainted state to on,
  the return value from the handler callback will be tainted, and we
  fail to deal with that. So revert to coercing any return value, but
  undef (a special case for exit()). to IV, so that tainted values are
  handled correctly as well.
  
  Revision  ChangesPath
  1.77  +2 -17 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.76
  retrieving revision 1.77
  diff -u -u -r1.76 -r1.77
  --- modperl_callback.c25 Sep 2004 23:27:10 -  1.76
  +++ modperl_callback.c26 Sep 2004 03:12:38 -  1.77
  @@ -122,28 +122,13 @@
   else {
   SV *status_sv = POPs;
   
  -if (SvIOK(status_sv)) {
  -/* normal IV return (e.g., Apache::OK) */
  -status = SvIVX(status_sv);
  -}
  -else if (status_sv == &PL_sv_undef) {
  +if (status_sv == &PL_sv_undef) {
   /* ModPerl::Util::exit() and Perl_croak internally
* arrange to return PL_sv_undef with G_EVAL|G_SCALAR */
   status = OK; 
   }
  -else if (SvPOK(status_sv)) {
  -/* PV return that ought to be treated as IV ("0") */
  -status = SvIVx(status_sv);
  -MP_TRACE_h(MP_FUNC,
  -   "coercing handler %s's return value '%s' into %d",
  -   handler->name, SvPV_nolen(status_sv), status);
  -}
   else {
  -/* any other return types are considered as errors */
  -status = HTTP_INTERNAL_SERVER_ERROR;
  -ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
  - "handler %s didn't return a valid return value!",
  - handler->name);
  +status = SvIVx(status_sv);
   }
   }
   
  
  
  
  1.500 +6 -0  modperl-2.0/Changes
  
  Index: Changes
  ===
  RCS file: /home/cvs/modperl-2.0/Changes,v
  retrieving revision 1.499
  retrieving revision 1.500
  diff -u -u -r1.499 -r1.500
  --- Changes   25 Sep 2004 23:27:10 -  1.499
  +++ Changes   26 Sep 2004 03:12:38 -  1.500
  @@ -12,6 +12,12 @@
   
   =item 1.99_17-dev
   
  +if some code changes the current interpreter's tainted state to on,
  +the return value from the handler callback will be tainted, and we
  +fail to deal with that. So revert to coercing any return value, but
  +undef (a special case for exit()). to IV, so that tainted values are
  +handled correctly as well. [Stas]
  +
   make sure that each handler callback starts with a pristine
   tainted-ness state, so that previous callback calls won't affect the
   consequent ones. Without this change any handler triggering eval or