patch for Apache2::SizeLimit under solaris 10

2010-12-06 Thread Brett @Google
Hello,

Here is a patch for  Apache2::SizeLimit under solaris 10, apache 2.2,
unthreaded prefork model :

diff -c ./mod_perl-2.0.4/blib/lib/Apache2/SizeLimit.pm ./SizeLimit.pm
*** ./mod_perl-2.0.4/blib/lib/Apache2/SizeLimit.pm  Mon Dec  6 15:59:43
2010
--- ./SizeLimit.pm  Mon Dec  6 18:41:04 2010
***
*** 52,58 
  if Apache2::MPM-is_threaded();

  # decide at compile time how to check for a process' memory size.
! if (SOLARIS  $Config{'osvers'} = 2.6) {

  $HOW_BIG_IS_IT = \solaris_2_6_size_check;

--- 52,58 
  if Apache2::MPM-is_threaded();

  # decide at compile time how to check for a process' memory size.
! if (SOLARIS  $Config{'osvers'} = 2.6 || $Config{'osvers'} == 2.10)
{

  $HOW_BIG_IS_IT = \solaris_2_6_size_check;

***
*** 133,139 

  sub solaris_2_6_size_check {
  my $file = /proc/self/as;
! my $size = -s $file
  or error_log(Fatal Error: $file doesn't exist or is empty);
  $size = int($size / 1024); # in Kb
  return ($size, 0);
--- 133,141 

  sub solaris_2_6_size_check {
  my $file = /proc/self/as;
! my $file2 = /proc/$$/as;
! my $size = undef;
! $size = -s $file or $size = -s $file2
  or error_log(Fatal Error: $file doesn't exist or is empty);
  $size = int($size / 1024); # in Kb
  return ($size, 0);

Solaris 10 seems to no longer support /proc/self/as (or perhaps just not in
a non-global zone / container)

It does support /proc/pid/as though, pretty much in the same manner as
2.8. So the thought is just to try both.

The osver conditional breaks after solaris 9, as for Solaris 10 the version
is set to 2.10, which is  2.6 (floating point).

Cheers
Brett


Re: patch for Apache2::SizeLimit under solaris 10

2010-12-06 Thread Adam Prime
What version of SizeLimit were you using?  This was fixed in svn in 
r882407, which was released in 0.93 in October


Adam

On 12/6/2010 4:11 AM, Brett @Google wrote:

Hello,

Here is a patch for  Apache2::SizeLimit under solaris 10, apache 2.2,
unthreaded prefork model :

diff -c ./mod_perl-2.0.4/blib/lib/Apache2/SizeLimit.pm ./SizeLimit.pm
*** ./mod_perl-2.0.4/blib/lib/Apache2/SizeLimit.pm  Mon Dec  6
15:59:43 2010
--- ./SizeLimit.pm  Mon Dec  6 18:41:04 2010
***
*** 52,58 
   if Apache2::MPM-is_threaded();

   # decide at compile time how to check for a process' memory size.
! if (SOLARIS  $Config{'osvers'} = 2.6) {

   $HOW_BIG_IS_IT = \solaris_2_6_size_check;

--- 52,58 
   if Apache2::MPM-is_threaded();

   # decide at compile time how to check for a process' memory size.
! if (SOLARIS  $Config{'osvers'} = 2.6 || $Config{'osvers'} ==
2.10) {

   $HOW_BIG_IS_IT = \solaris_2_6_size_check;

***
*** 133,139 

   sub solaris_2_6_size_check {
   my $file = /proc/self/as;
! my $size = -s $file
   or error_log(Fatal Error: $file doesn't exist or is empty);
   $size = int($size / 1024); # in Kb
   return ($size, 0);
--- 133,141 

   sub solaris_2_6_size_check {
   my $file = /proc/self/as;
! my $file2 = /proc/$$/as;
! my $size = undef;
! $size = -s $file or $size = -s $file2
   or error_log(Fatal Error: $file doesn't exist or is empty);
   $size = int($size / 1024); # in Kb
   return ($size, 0);

Solaris 10 seems to no longer support /proc/self/as (or perhaps just not
in a non-global zone / container)

It does support /proc/pid/as though, pretty much in the same manner
as 2.8. So the thought is just to try both.

The osver conditional breaks after solaris 9, as for Solaris 10 the
version is set to 2.10, which is  2.6 (floating point).

Cheers
Brett





Re: Custom directive and Location - bug?

2010-12-06 Thread Philippe M. Chiasson
On 10-11-30 07:51 , Alex J. G. Burzyński wrote:
 Hi,
 
 I've noticed that when using custom directives within nested Location
 the result of $r-location reports the parent one only, instead of the
 subdir.
 
 However if I add PerlSetVar the $r-location will report the correct one.

Yup, you've stumbled on an interesting bug.

 The way to replicate:
 please follow the example
 http://perl.apache.org/docs/2.0/user/config/custom.html#Merging_at_Work
 
 and now add:
 
 --- httpd.conf-orig2010-11-30 12:06:57.491843181 +
 +++ httpd.conf2010-11-30 12:07:39.217629859 +
 @@ -18,6 +18,7 @@
  PerlResponseHandler MyApache2::CustomDirectivesTest
  /Location
  Location /custom_directives_test/subdir
 +PerlSetVar fix problem
  MyPlus 1
  MyList SubDir
  MyAppend   SubDir

The reason this makes a difference is that without it, there are no
mod_perl directives (the custom ones are 'special'), so no configuration
pass for modperl in that directory.

Side-effect of that is that $r-location isn't tracked proprely.
Keep in mind that r-location is not an httpd api, but rather something
convenient mod_perl tracks. But not in this case, unfortunately.

-- 
Philippe M. Chiasson GPG: F9BFE0C2480E7680 1AE53631CB32A107 88C3A5A5
http://gozer.ectoplasm.org/   m/gozer\@(apache|cpan|ectoplasm)\.org/



signature.asc
Description: OpenPGP digital signature


Re: Custom directive and Location - bug?

2010-12-06 Thread Alex J. G. Burzyński

On 06/12/10 20:39, Philippe M. Chiasson wrote:

On 10-11-30 07:51 , Alex J. G. Burzyński wrote:

Hi,

I've noticed that when using custom directives within nestedLocation
the result of $r-location reports the parent one only, instead of the
subdir.

However if I add PerlSetVar the $r-location will report the correct one.

Yup, you've stumbled on an interesting bug.



I've found this while working on Apache2::Layer (on cpan)


The way to replicate:
please follow the example
http://perl.apache.org/docs/2.0/user/config/custom.html#Merging_at_Work

and now add:

--- httpd.conf-orig2010-11-30 12:06:57.491843181 +
+++ httpd.conf2010-11-30 12:07:39.217629859 +
@@ -18,6 +18,7 @@
  PerlResponseHandler MyApache2::CustomDirectivesTest
  /Location
  Location /custom_directives_test/subdir
+PerlSetVar fix problem
  MyPlus 1
  MyList SubDir
  MyAppend   SubDir

The reason this makes a difference is that without it, there are no
mod_perl directives (the custom ones are 'special'), so no configuration
pass for modperl in that directory.

Side-effect of that is that $r-location isn't tracked proprely.
Keep in mind that r-location is not an httpd api, but rather something
convenient mod_perl tracks. But not in this case, unfortunately.



If you take a look at those (around lines 68-70):
http://pastebin.com/PUtcczwA (with PerlSetVar)
http://pastebin.com/kfjMtZsT (without PerlSetVar)

you'll see that PerlSetVar creates directory context, while custom 
directive on its own does not.



However the Apache2::CmdParams-path returns the correct value and 
that's what I'm using in my module as a workaround.


Thanks,
Alex