diff options
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | mod_perl-httpd24.patch | 2281 | ||||
| -rw-r--r-- | mod_perl.spec | 37 | 
3 files changed, 759 insertions, 1561 deletions
@@ -1,4 +1,4 @@  SRCDIR := $(shell pwd)  NAME := $(shell basename $(SRCDIR)) -include ../common/Makefile +include ../../common/Makefile diff --git a/mod_perl-httpd24.patch b/mod_perl-httpd24.patch index f71be91..5b54460 100644 --- a/mod_perl-httpd24.patch +++ b/mod_perl-httpd24.patch @@ -1,1640 +1,813 @@ -diff --git a/Apache-SizeLimit/Makefile.PL b/Apache-SizeLimit/Makefile.PL -index f1fda05..77c72d8 100644 ---- a/Apache-SizeLimit/Makefile.PL -+++ b/Apache-SizeLimit/Makefile.PL -@@ -66,10 +66,6 @@ else { -                               ); - } -  --if ($ENV{MOD_PERL_2_BUILD}) { --    pop @ARGV; --} -- - sub check_for_apache_test { -     return unless eval { -         require Apache::Test; -diff --git a/Apache-SizeLimit/lib/Apache/SizeLimit/Core.pm b/Apache-SizeLimit/lib/Apache/SizeLimit/Core.pm -index 5942bc8..180b3aa 100644 ---- a/Apache-SizeLimit/lib/Apache/SizeLimit/Core.pm -+++ b/Apache-SizeLimit/lib/Apache/SizeLimit/Core.pm -@@ -117,9 +117,9 @@ sub _limits_are_exceeded { - sub _check_size { -     my $class = shift; -  --    my ($size, $share) = $class->_platform_check_size(); -+    my ($size, $share, $unshared) = $class->_platform_check_size(); -  --    return ($size, $share, $size - $share); -+    return ($size, $share, defined $unshared ? $unshared : $size - $share); - } -  - sub _load { -@@ -143,7 +143,7 @@ BEGIN { -  -         *_platform_getppid = \&_linux_getppid; -  --        if (eval { require Linux::Smaps } && Linux::Smaps->new($$)) { -+        if (eval { require Linux::Smaps && Linux::Smaps->new($$) }) { -             $USE_SMAPS = 1; -             *_platform_check_size = \&_linux_smaps_size_check; -         } -@@ -176,7 +176,9 @@ sub _linux_smaps_size_check { -     return $class->_linux_size_check() unless $USE_SMAPS; -  -     my $s = Linux::Smaps->new($$)->all; --    return ($s->size, $s->shared_clean + $s->shared_dirty); -+    return ($s->size, -+	    $s->shared_clean + $s->shared_dirty, -+	    $s->private_clean + $s->private_dirty); - } -  - sub _linux_size_check { -diff --git a/Apache-SizeLimit/t/response/TestApache/basic.pm b/Apache-SizeLimit/t/response/TestApache/basic.pm -index 6e054b6..26211d5 100644 ---- a/Apache-SizeLimit/t/response/TestApache/basic.pm -+++ b/Apache-SizeLimit/t/response/TestApache/basic.pm -@@ -17,8 +17,13 @@ sub handler { -  -     plan $r, tests => 13; -  --    ok( ! Apache::SizeLimit->_limits_are_exceeded(), --        'check that _limits_are_exceeded() returns false without any limits set' ); -+    { -+        local ($Apache::SizeLimit::Core::MAX_PROCESS_SIZE, -+               $Apache::SizeLimit::Core::MIN_SHARE_SIZE, -+               $Apache::SizeLimit::Core::MAX_UNSHARED_SIZE); -+        ok( ! Apache::SizeLimit->_limits_are_exceeded(), -+            'check that _limits_are_exceeded() returns false without any limits set' ); -+    } -  -     { -         my ( $size, $shared ) = Apache::SizeLimit->_check_size(); -diff --git a/Apache-SizeLimit/t/response/TestApache2/basic.pm b/Apache-SizeLimit/t/response/TestApache2/basic.pm -index dce4ec1..f8a856c 100644 ---- a/Apache-SizeLimit/t/response/TestApache2/basic.pm -+++ b/Apache-SizeLimit/t/response/TestApache2/basic.pm -@@ -17,8 +17,13 @@ sub handler { -  -     plan $r, tests => 10; -  --    ok( ! Apache2::SizeLimit->_limits_are_exceeded(), --        'check that _limits_are_exceeded() returns false without any limits set' ); -+    { -+        local ($Apache::SizeLimit::Core::MAX_PROCESS_SIZE, -+               $Apache::SizeLimit::Core::MIN_SHARE_SIZE, -+               $Apache::SizeLimit::Core::MAX_UNSHARED_SIZE); -+        ok( ! Apache2::SizeLimit->_limits_are_exceeded(), -+            'check that _limits_are_exceeded() returns false without any limits set' ); -+    } -  -     { -         my ( $size, $shared ) = Apache2::SizeLimit->_check_size(); -diff --git a/Apache-Test/lib/Apache/TestConfig.pm b/Apache-Test/lib/Apache/TestConfig.pm -index a12b251..65d8515 100644 ---- a/Apache-Test/lib/Apache/TestConfig.pm -+++ b/Apache-Test/lib/Apache/TestConfig.pm -@@ -23,6 +23,7 @@ use constant OSX     => $^O eq 'darwin'; - use constant CYGWIN  => $^O eq 'cygwin'; - use constant NETWARE => $^O eq 'NetWare'; - use constant SOLARIS => $^O eq 'solaris'; -+use constant AIX     => $^O eq 'aix'; - use constant WINFU   => WIN32 || NETWARE; - use constant COLOR   => ($ENV{APACHE_TEST_COLOR} && -t STDOUT) ? 1 : 0; -  -@@ -557,6 +558,7 @@ sub massage_config_args { -             } -         } -         else { -+            $data=~s/\n(?!\z)/\n    /g; -             $args .= "    $data"; -         } -         $args .= "</$directive>\n"; -@@ -610,7 +612,8 @@ sub add_config_hooks_run { -  -     for (@{ $self->{$where} }) { -         $self->replace; --        print $out "$_\n"; -+        s/\n?$/\n/; -+        print $out "$_"; -     } - } -  -@@ -1238,7 +1241,9 @@ sub parse_vhost { -         @out_config = ([Listen => '0.0.0.0:' . $port]); -  -         if ($self->{vhosts}->{$module}->{namebased}) { --            push @out_config => [NameVirtualHost => "*:$port"]; -+            push @out_config => ["<IfVersion < 2.3.11>\n". -+                                 "${indent}${indent}NameVirtualHost" -+                                 => "*:$port\n${indent}</IfVersion>"]; -         } -     } -  -diff --git a/Apache-Test/lib/Apache/TestConfigPerl.pm b/Apache-Test/lib/Apache/TestConfigPerl.pm -index 835b5f4..152ef58 100644 ---- a/Apache-Test/lib/Apache/TestConfigPerl.pm -+++ b/Apache-Test/lib/Apache/TestConfigPerl.pm -@@ -111,19 +111,15 @@ sub configure_inc { -  -     my $inc = $self->{inc}; -  --    my $found; -     for (catdir($top, qw(blib lib)), catdir($top, qw(blib arch))) { -         if (-d $_) { - 	    push @$inc, $_; --	    $found=1; - 	} -     } -  -     # try ../blib as well for Apache::Reload & Co --    unless ($found) { --        for (catdir($top, qw(.. blib lib)), catdir($top, qw(.. blib arch))) { --	    push @$inc, $_ if -d $_; --	} -+    for (catdir($top, qw(.. blib lib)), catdir($top, qw(.. blib arch))) { -+        push @$inc, $_ if -d $_; -     } -  -     # spec: If PERL5LIB is defined, PERLLIB is not used. -@@ -540,6 +536,13 @@ sub configure_pm_tests { -         my ($file, $module, $subdir, $status) = @$entry; -         my @args = (); -  -+        my $file_display; -+        { -+          $file_display=$file; -+          my $topdir=$self->{vars}->{top_dir}; -+          $file_display=~s!^\Q$topdir\E(.)(?:\1)*!!; -+        } -+        $self->postamble("\n# included from $file_display"); -         my $directives = $self->add_module_config($file, \@args); -         $module =~ s,\.pm$,,; -         $module =~ s/^[a-z]://i; #strip drive if any -@@ -568,10 +571,7 @@ sub configure_pm_tests { -  -         debug "configuring $module"; -  --        if ($directives->{noautoconfig}) { --            $self->postamble(""); # which adds "\n" --        } --        else { -+        unless ($directives->{noautoconfig}) { -             if (my $cv = $add_hook_config{$hook}) { -                 $self->$cv($module, \@args); -             } -@@ -595,6 +595,7 @@ sub configure_pm_tests { -               $self->postamble(IfModule => 'mod_perl.c', $cfg); -             } -         } -+        $self->postamble("# end of $file_display\n"); -  -         $self->write_pm_test($module, lc $sub, map { lc } @base); -     } -diff --git a/Apache-Test/lib/Apache/TestHandler.pm b/Apache-Test/lib/Apache/TestHandler.pm -index d96cc94..6b1e691 100644 ---- a/Apache-Test/lib/Apache/TestHandler.pm -+++ b/Apache-Test/lib/Apache/TestHandler.pm -@@ -27,7 +27,8 @@ use Apache2::Const -compile => qw(OK NOT_FOUND SERVER_ERROR); - #see modperl-2.0/t/hooks/TestHooks/authen.pm -  - if ($ENV{MOD_PERL} && require mod_perl2) { --    require Apache2::RequestIO; # puts -+    require Apache2::RequestRec; # content_type -+    require Apache2::RequestIO;  # puts - } -  - #compat with 1.xx -@@ -35,17 +36,17 @@ my $send_http_header = Apache->can('send_http_header') || sub {}; - my $print = Apache2->can('print') || Apache2::RequestRec->can('puts'); -  - sub ok { --    my $r = shift; -+    my ($r, $boolean) = @_; -     $r->$send_http_header; -     $r->content_type('text/plain'); --    $r->$print("ok"); -+    $r->$print((@_>1 && !$boolean ? "not " : '')."ok"); -     0; - } -  - sub ok1 { --    my $r = shift; -+    my ($r, $boolean) = @_; -     Apache::Test::plan($r, tests => 1); --    Apache::Test::ok(1); -+    Apache::Test::ok(@_==1 || $boolean); -     0; - } -  -@@ -101,3 +102,74 @@ sub same_interp_fixup { +From 8b8b824e0b549c1ff8a2aea65f3f0621efd1a10a Mon Sep 17 00:00:00 2001 +From: Stefan Fritsch <sf@sfritsch.de> +Date: Sun, 22 Apr 2012 21:26:01 +0200 +Subject: [PATCH 01/22] fix compile with httpd trunk and AP_DEBUG + +some palloc debugging feature doesn't work within XS +--- + src/modules/perl/modperl_apache_includes.h |    4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/modules/perl/modperl_apache_includes.h b/src/modules/perl/modperl_apache_includes.h +index c93decc..dd39bf6 100644 +--- a/src/modules/perl/modperl_apache_includes.h ++++ b/src/modules/perl/modperl_apache_includes.h +@@ -23,6 +23,10 @@ + #define CORE_PRIVATE + #endif - 1; - __END__ -+ -+=encoding utf8 -+ -+=head1 NAME -+ -+Apache::TestHandler - a few response handlers and helpers -+ -+=head1 SYNOPSIS -+ -+    package My::Test; -+    use Apache::TestHandler (); -+    sub handler { -+        my ($r) = @_; -+        my $result = do_my_test; -+        Apache::TestHandler::ok1 $r, $result; -+    } -+ -+    sub handler2 { -+        my ($r) = @_; -+        my $result = do_my_test; -+        Apache::TestHandler::ok $r, $result; -+    } -+ -+=head1 DESCRIPTION -+ -+C<Apache::TestHandler> provides 2 very simple response handler. -+ -+=head1 FUNCTIONS -+ -+=over 4 -+ -+=item ok $r, $boolean -+ -+The handler simply prints out C<ok> or C<not ok> depending on the -+optional C<$boolean> parameter. -+ -+If C<$boolean> is omitted C<true> is assumed. -+ -+=item ok1 $r, $boolean -+ -+This handler implements a simple response-only test. It can be used on its -+own to check if for a certain URI the response phase is reached. Or it -+can be called like a normal function to print out the test result. The -+client side is automatically created as described in -+L<http://perl.apache.org/docs/general/testing/testing.html#Developing_Response_only_Part_of_a_Test>. -+ -+C<$boolean> is optional. If omitted C<true> is assumed. -+ -+=item same_interp_counter -+ -+=item same_interp_fixup -+ -+TODO -+ -+=back -+ -+=head1 SEE ALSO -+ -+The Apache-Test tutorial: -+L<http://perl.apache.org/docs/general/testing/testing.html>. -+ -+L<Apache::Test>. -+ -+=head1 AUTHOR -+ -+Doug MacEachern, Geoffrey Young, Stas Bekman, Torsten Förtsch and others. -+ -+Questions can be asked at the test-dev <at> httpd.apache.org list -+For more information see: http://httpd.apache.org/test/. ++#ifdef MP_IN_XS ++#define AP_DEBUG_NO_ALLOC_POISON ++#endif  + -+=cut -diff --git a/Apache-Test/lib/Apache/TestRequest.pm b/Apache-Test/lib/Apache/TestRequest.pm -index c68780c..73c1490 100644 ---- a/Apache-Test/lib/Apache/TestRequest.pm -+++ b/Apache-Test/lib/Apache/TestRequest.pm -@@ -159,6 +159,16 @@ sub user_agent { -         }; -     } -  -+    # in LWP 6, verify_hostname defaults to on, so SSL_ca_file -+    # needs to be set accordingly -+    if ($have_lwp and $LWP::VERSION >= 6.0 and not exists $args->{ssl_opts}->{SSL_ca_file}) { -+        my $vars = Apache::Test::vars(); -+        my $cafile = "$vars->{sslca}/$vars->{sslcaorg}/certs/ca.crt"; -+        $args->{ssl_opts}->{SSL_ca_file} = $cafile; -+        # Net:SSL compatibility (legacy) -+        $ENV{HTTPS_CA_FILE} = $cafile; -+    } + #include "ap_mmn.h" + #include "httpd.h" + #include "http_config.h" +--  +1.7.10.2 + + +From c79300b3da6889231a39f7b8d1c5a453c08d3034 Mon Sep 17 00:00:00 2001 +From: Stefan Fritsch <sf@sfritsch.de> +Date: Sun, 22 Apr 2012 21:48:57 +0200 +Subject: [PATCH 02/22] per-module loglevel config + +tell httpd that we are logging for mod_perl +--- + src/modules/perl/modperl_apache_includes.h |    4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/modules/perl/modperl_apache_includes.h b/src/modules/perl/modperl_apache_includes.h +index dd39bf6..a4209c5 100644 +--- a/src/modules/perl/modperl_apache_includes.h ++++ b/src/modules/perl/modperl_apache_includes.h +@@ -43,4 +43,8 @@ +  + #include "util_script.h" +  ++#ifndef MP_IN_XS ++APLOG_USE_MODULE(perl); ++#endif  + -     eval { $UA ||= __PACKAGE__->new(%$args); }; - } -  -@@ -352,7 +362,7 @@ sub prepare { -         } -         push @$pass, content => $content; + #endif /* MODPERL_APACHE_INCLUDES_H */ +--  +1.7.10.2 + + +From 301f912a993802feac2fb167f6cca1ed050e6213 Mon Sep 17 00:00:00 2001 +From: Stefan Fritsch <sf@sfritsch.de> +Date: Sun, 22 Apr 2012 21:57:28 +0200 +Subject: [PATCH 03/22] adjust test to new error log format + +--- + t/response/TestAPI/aplog.pm |   18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/t/response/TestAPI/aplog.pm b/t/response/TestAPI/aplog.pm +index f2a4e19..1357311 100644 +--- a/t/response/TestAPI/aplog.pm ++++ b/t/response/TestAPI/aplog.pm +@@ -93,7 +93,7 @@ sub handler { +                    APR::Const::ENOTIME, "log_rerror test"); +     # can't match against the error string, since a locale may kick in +     ok t_cmp $logdiff->diff, +-        qr/\[crit\] .*?: log_rerror test/, ++        qr/\[\w*:crit\] \[pid[^]]+\] .*?: \[[^]]+\] log_rerror test/, +         '$r->log_rerror(LOG_MARK, LOG_CRIT, APR::Const::ENOTIME...)'; +  +     # log_error +@@ -101,13 +101,13 @@ sub handler { +         t_server_log_error_is_expected(); +         $r->log_error('$r->log_error test'); +         ok t_cmp $logdiff->diff, +-            qr/\[error\] \$r->log_error test/, ++            qr/\[\w*:error\] \[pid[^]]+\] \$r->log_error test/, +             '$r->log_error(...)'; +  +         t_server_log_error_is_expected(); +         $s->log_error('$s->log_error test'); +         ok t_cmp $logdiff->diff, +-            qr/\[error\] \$s->log_error test/, ++            qr/\[\w*:error\] \[pid[^]]+\] \$s->log_error test/, +             '$s->log_error(...)';       } --    if ($keep->{cert}) { -+    if (exists $keep->{cert}) { -         set_client_cert($keep->{cert}); -     } -  -@@ -618,13 +628,27 @@ sub set_client_cert { -     my $dir = join '/', $vars->{sslca}, $vars->{sslcaorg}; -     if ($name) { --        $ENV{HTTPS_CERT_FILE} = "$dir/certs/$name.crt"; --        $ENV{HTTPS_KEY_FILE}  = "$dir/keys/$name.pem"; -+        my ($cert, $key) = ("$dir/certs/$name.crt", "$dir/keys/$name.pem"); -+        @ENV{qw/HTTPS_CERT_FILE HTTPS_KEY_FILE/} = ($cert, $key); -+        if ($LWP::VERSION >= 6.0) { -+            # IO::Socket:SSL doesn't look at environment variables -+            if ($UA) { -+                $UA->ssl_opts(SSL_cert_file => $cert); -+                $UA->ssl_opts(SSL_key_file  => $key); -+            } else { -+                user_agent(ssl_opts => { SSL_cert_file => $cert, -+                                         SSL_key_file  => $key }); -+            } -+        } +@@ -116,13 +116,13 @@ sub handler { +         t_server_log_error_is_expected(); +         $r->log_reason('$r->log_reason test'); +         ok t_cmp $logdiff->diff, +-            qr/\[error\] access to.*failed.*reason: \$r->log_reason test/, ++            qr/\[\w*:error\] \[pid[^]]+\] access to.*failed.*reason: \$r->log_reason test/, +             '$r->log_reason(msg)'; +  +         t_server_log_error_is_expected(); +         $r->log_reason('$r->log_reason filename test','filename'); +         ok t_cmp $logdiff->diff, +-            qr/\[error\] access to filename failed.*\$r->log_reason filename test/, ++            qr/\[\w*:error\] \[pid[^]]+\] access to filename failed.*\$r->log_reason filename test/, +             '$r->log_reason(msg, filename)';       } -     else { -         for (qw(CERT KEY)) { -             delete $ENV{"HTTPS_${_}_FILE"}; -         } -+        if ($LWP::VERSION >= 6.0 and $UA) { -+            $UA->ssl_opts(SSL_cert_file => undef); -+            $UA->ssl_opts(SSL_key_file  => undef); -+        } -     } - } -  -diff --git a/Apache-Test/lib/Apache/TestUtil.pm b/Apache-Test/lib/Apache/TestUtil.pm -index a63915e..cfd8229 100644 ---- a/Apache-Test/lib/Apache/TestUtil.pm -+++ b/Apache-Test/lib/Apache/TestUtil.pm -@@ -43,7 +43,7 @@ $VERSION = '0.02'; - ); - @EXPORT_OK = qw(t_write_perl_script t_write_shell_script t_chown --                t_catfile_apache t_catfile -+                t_catfile_apache t_catfile t_file_watch_for -                 t_start_error_log_watch t_finish_error_log_watch -                 t_start_file_watch t_read_file_watch t_finish_file_watch); +@@ -177,7 +177,7 @@ sub handler { +     t_server_log_warn_is_expected(); +     $s->warn('$s->warn test'); +     ok t_cmp $logdiff->diff, +-        qr/\[warn\] \$s->warn test/, ++        qr/\[\w*:warn\] \[pid[^]]+\] \$s->warn test/, +         '$s->warn()'; -@@ -101,6 +101,33 @@ use constant INDENT     => 4; -         return readline $fh; -     } -  -+    sub t_file_watch_for ($$$) { -+	my ($name, $re, $timeout) = @_; -+	local $/ = "\n"; -+	$re = qr/$re/ unless ref $re; -+	$timeout *= 10; -+	my $buf = ''; -+	my @acc; -+	while ($timeout >= 0) { -+	    my $line = t_read_file_watch $name; -+	    unless (defined $line) { # EOF -+		select undef, undef, undef, 0.1; -+		$timeout--; -+		next; -+	    } -+	    $buf .= $line; -+	    next unless $buf =~ /\n$/; # incomplete line -+ -+	    # found a complete line -+	    $line = $buf; -+	    $buf = ''; -+ -+	    push @acc, $line; -+	    return wantarray ? @acc : $line if $line =~ $re; -+	} -+	return; -+    } -+ -     sub t_start_error_log_watch { -         t_start_file_watch; +     { +@@ -185,7 +185,7 @@ sub handler { +         # this uses global server to get $s internally +         Apache2::ServerRec::warn("Apache2::ServerRec::warn test"); +         ok t_cmp $logdiff->diff, +-            qr/\[warn\] Apache2::ServerRec::warn test/, ++            qr/\[\w*:warn\] \[pid[^]]+\] Apache2::ServerRec::warn test/, +             'Apache2::ServerRec::warn() w/o Apache2::RequestUtil->request '; +  +         Apache2::RequestUtil->request($r); +@@ -193,14 +193,14 @@ sub handler { +         # this uses the global $r to get $s internally +         Apache2::ServerRec::warn("Apache2::ServerRec::warn test"); +         ok t_cmp $logdiff->diff, +-            qr/\[warn\] Apache2::ServerRec::warn test/, ++            qr/\[\w*:warn\] \[pid[^]]+\] Apache2::ServerRec::warn test/, +             'Apache2::ServerRec::warn() w/ Apache2::RequestUtil->request ';       } -@@ -917,6 +944,36 @@ record length use this: -     @lines=t_finish_file_watch($name); -   } -+=item t_file_watch_for() -+ -+  @lines=Apache::TestUtil::t_file_watch_for('access_log', -+                                            qr/condition/, -+                                            $timeout); -+ -+This function reads the file from the current position and looks for the -+first line that matches C<qr/condition/>. If no such line could be found -+until end of file the function pauses and retries until either such a line -+is found or the timeout (in seconds) is reached. -+ -+In scalar or void context only the matching line is returned. In list -+context all read lines are returned with the matching one in last position. -+ -+The function uses C<\n> and end-of-line marker and waits for complete lines. -+ -+The timeout although it can be specified with sub-second precision is not very -+accurate. It is simply multiplied by 10. The result is used as a maximum loop -+count. For the intented purpose this should be good enough. -+ -+Use this function to check for logfile entries when you cannot be sure that -+they are already written when the test program reaches the point, for example -+to check for messages that are written in a PerlCleanupHandler or a -+PerlLogHandler. -+ -+ ok t_file_watch_for 'access_log', qr/expected log entry/, 2; -+ -+This call reads the C<access_log> and waits for maximum 2 seconds for the -+expected entry to appear. -+ - =back +     t_server_log_warn_is_expected(); +     warn "warn test"; +     ok t_cmp $logdiff->diff, +-        qr/\[warn\] warn test/, ++        qr/\[\w*:warn\] \[pid[^]]+\] warn test/, +         'overriden via export warn()'; - =head1 AUTHOR -diff --git a/Apache-Test/lib/Bundle/ApacheTest.pm b/Apache-Test/lib/Bundle/ApacheTest.pm -index 42802d6..4c5b78c 100644 ---- a/Apache-Test/lib/Bundle/ApacheTest.pm -+++ b/Apache-Test/lib/Bundle/ApacheTest.pm -@@ -15,7 +15,7 @@ - # - package Bundle::ApacheTest; -  --$VERSION = '0.01'; -+$VERSION = '0.02'; -  - 1; -  -@@ -31,29 +31,31 @@ Bundle::ApacheTest - A bundle to install all Apache-Test related modules -  - =head1 CONTENTS -  --Crypt::SSLeay      - For https support -+Crypt::SSLeay        - For https support -  --Devel::CoreStack   - For getting core stack info -+Devel::CoreStack     - For getting core stack info -  --Devel::Symdump     - For, uh, dumping symbols -+Devel::Symdump       - For, uh, dumping symbols -  --Digest::MD5        - Needed for Digest authentication -+Digest::MD5          - Needed for Digest authentication -  --URI                - There are URIs everywhere -+URI                  - There are URIs everywhere -  --Net::Cmd           - For libnet -+Net::Cmd             - For libnet -  --MIME::Base64       - Used in authentication headers -+MIME::Base64         - Used in authentication headers -  --HTML::Tagset       - Needed by HTML::Parser -+HTML::Tagset         - Needed by HTML::Parser -  --HTML::Parser       - Need by HTML::HeadParser -+HTML::Parser         - Need by HTML::HeadParser -  --HTML::HeadParser   - To get the correct $res->base -+HTML::HeadParser     - To get the correct $res->base -  --LWP                - For libwww-perl -+LWP                  - For libwww-perl -  --IPC::Run3          - Used in Apache::TestSmoke -+LWP::Protocol::https - LWP plug-in for the https protocol -+ -+IPC::Run3            - Used in Apache::TestSmoke -  - =head1 DESCRIPTION -  -diff --git a/docs/api/APR/Pool.pod b/docs/api/APR/Pool.pod -index 40fc752..5333c03 100644 ---- a/docs/api/APR/Pool.pod -+++ b/docs/api/APR/Pool.pod -@@ -103,12 +103,23 @@ To pass more than one argument, use an ARRAY or a HASH reference -  - =item excpt: -  --if the registered callback fails, it happens when the pool is --destroyed. The destruction is performed by Apache and it ignores any --failures. Even if it didn't ignore the failures, most of the time the --pool is destroyed when a request or connection handlers are long gone. --However the error B<is> logged to F<error_log>, so if you monitor that --file you will spot if there are any problems with it. -+If a registered callback dies or throws an exception C<$@> is stringified -+and passed to C<warn()>. Usually, this results in printing it to the -+F<error_log>. However, a C<$SIG{__WARN__}> handler can be used to catch -+them. -+ -+  $pool->cleanup_register(sub {die "message1\n"}); -+  $pool->cleanup_register(sub {die "message2\n"}); -+  my @warnings; -+  { -+      local $SIG{__WARN__}=sub {push @warnings, @_}; -+      $pool->destroy;       # or simply undef $pool -+  } -+ -+Both of the cleanups above are executed at the time C<$pool-E<gt>destroy> -+is called. C<@warnings> contains C<message2\n> and C<message1\n> afterwards. -+C<$pool-E<gt>destroy> itself does not throw an exception. Any value of C<$@> -+is preserved. -  - =item since: 2.0.00 -  -diff --git a/docs/api/Apache2/RequestUtil.pod b/docs/api/Apache2/RequestUtil.pod -index 127ccd2..10d67b8 100644 ---- a/docs/api/Apache2/RequestUtil.pod -+++ b/docs/api/Apache2/RequestUtil.pod -@@ -279,6 +279,8 @@ The default type -  - =item since: 2.0.00 -  -+=item removed from the C<httpd> API in version 2.3.2 -+ - =back -  -  -@@ -810,7 +812,7 @@ What's wrong with this code: -   } -  - Nothing, except it doesn't work as expected due to this pnotes bug: If the  --same code is called in a sub-request then the pnote of $r->prev is magically  -+same code is called in a sub-request then the pnote of $r-E<gt>prev is magically  - updated at a distance to the same value! -  - Try explain why that is to anyone not deeply familar with perl internals! -diff --git a/docs/api/Apache2/ServerUtil.pod b/docs/api/Apache2/ServerUtil.pod -index e50ae60..ccd079b 100644 ---- a/docs/api/Apache2/ServerUtil.pod -+++ b/docs/api/Apache2/ServerUtil.pod -@@ -841,6 +841,9 @@ F<startup.pl>. The function will croak if run after the - C<L<PerlPostConfigHandler|docs::2.0::user::handlers::server/C_PerlPostConfigHandler_>> - phase. -  -+Values returned from cleanup functions are ignored. If a cleanup dies the -+exception is stringified and passed to C<warn()>. Usually, this results in -+printing it to the F<error_log>. -  -  -  -diff --git a/lib/Apache2/Build.pm b/lib/Apache2/Build.pm -index 38978ef..1b5ac35 100644 ---- a/lib/Apache2/Build.pm -+++ b/lib/Apache2/Build.pm -@@ -27,6 +27,42 @@ use File::Basename; - use ExtUtils::Embed (); - use File::Copy (); -  -+BEGIN {				# check for a sane ExtUtils::Embed -+    unless ($ENV{MP_USE_MY_EXTUTILS_EMBED}) { -+	my ($version, $path)=(ExtUtils::Embed->VERSION, -+			      $INC{q{ExtUtils/Embed.pm}}); -+	my $msg=<<"EOF"; -+I have found ExtUtils::Embed $version at -+ -+  $path -+ -+This is probably not the right one for this perl version. Please make sure -+there is only one version of this module installed and that it is the one -+that comes with this perl version. -+ -+If you insist on using the ExtUtils::Embed as is set the environment -+variable MP_USE_MY_EXTUTILS_EMBED=1 and try again. -+ -+EOF -+	if (eval {require Module::CoreList}) { -+	    my $req=$Module::CoreList::version{$]}->{q/ExtUtils::Embed/}; -+	    die "Please repair your Module::CoreList" unless $req; -+	    unless ($version eq $req) { -+		$msg.=("Details: expecting ExtUtils::Embed $req ". -+		       "(according to Module::CoreList)\n\n"); -+		die $msg; -+	    } -+	} -+	else { -+	    my $req=$Config{privlib}.'/ExtUtils/Embed.pm'; -+	    unless ($path eq $req) { -+		$msg.="Details: expecting ExtUtils::Embed at $req\n\n"; -+		die $msg; -+	    } -+	} -+    } -+} -+ - use constant IS_MOD_PERL_BUILD => grep  -     { -e "$_/Makefile.PL" && -e "$_/lib/mod_perl2.pm" } qw(. ..); -  -@@ -239,12 +275,13 @@ sub caller_package { -     return ($arg and ref($arg) eq __PACKAGE__) ? $arg : __PACKAGE__; - } -  --my %threaded_mpms = map { $_ => 1 } --        qw(worker winnt beos mpmt_os2 netware leader perchild threadpool); -+my %threaded_mpms; -+undef @threaded_mpms{qw(worker winnt beos mpmt_os2 netware leader perchild -+			threadpool dynamic)}; - sub mpm_is_threaded { -     my $self = shift; -     my $mpm_name = $self->mpm_name(); --    return $threaded_mpms{$mpm_name} || 0; -+    return exists $threaded_mpms{$mpm_name} ? 1 : 0; - } -  - sub mpm_name { -@@ -252,6 +289,11 @@ sub mpm_name { -  -     return $self->{mpm_name} if $self->{mpm_name}; -  -+    if ($self->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/) { -+	delete $threaded_mpms{dynamic} if $self->mp_nonthreaded_ok; -+	return $self->{mpm_name} = 'dynamic' if ($1*1000+$2)*1000+$3>=2003000; -+    } -+ -     # XXX: hopefully apxs will work on win32 one day -     return $self->{mpm_name} = 'winnt' if WIN32; -  -@@ -2147,8 +2189,7 @@ sub has_large_files_conflict { -     # with it is that we didn't have such a case yet, but may need to -     # deal with it later -  --    return 0; --    # $perl_lfs64 ^ $apr_lfs64; -+    return $perl_lfs64 ^ $apr_lfs64; - } -  - # if perl is built with uselargefiles, but apr not, the build won't -diff --git a/lib/ModPerl/BuildOptions.pm b/lib/ModPerl/BuildOptions.pm -index e99e09b..cd53664 100644 ---- a/lib/ModPerl/BuildOptions.pm -+++ b/lib/ModPerl/BuildOptions.pm -@@ -264,4 +264,4 @@ GENERATE_XS    0    Generate XS code based on httpd version - LIBNAME        0    Name of the modperl dso library (default is  mod_perl) - COMPAT_1X      0    Compile-time mod_perl 1.0 backcompat (default is  on) - APR_LIB        0    Lib used to build APR::* on Win32 (default is aprext) -- -+NONTHREADED_OK 0    Using a non-threaded perl is okay with httpd >=2.3 +     Apache2::Const::OK; +--  +1.7.10.2 + + +From 94befe6a4f247988181993010374ee9d5565f6db Mon Sep 17 00:00:00 2001 +From: Stefan Fritsch <sf@sfritsch.de> +Date: Tue, 24 Apr 2012 22:28:57 +0200 +Subject: [PATCH 04/22] ignore some new stuff from httpd 2.4 and trunk, and + newer aprs + +these confuse "make source_scan" +--- + lib/Apache2/ParseSource.pm |    6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/lib/Apache2/ParseSource.pm b/lib/Apache2/ParseSource.pm +index 8027548..f35c2a8 100644 +--- a/lib/Apache2/ParseSource.pm ++++ b/lib/Apache2/ParseSource.pm +@@ -139,7 +139,8 @@ sub find_includes { +                                     apr_optional mod_include mod_cgi +                                     mod_proxy mod_ssl ssl_ apr_anylock +                                     apr_rmm ap_config mod_log_config +-                                    mod_perl modperl_ apreq); ++                                    mod_perl modperl_ apreq mod_cache ++                                    mod_serf mod_dav); +         $unwanted = qr|^$unwanted|; +         my $wanted = ''; +  +@@ -280,6 +281,9 @@ my %enums_wanted = ( +  + my $defines_unwanted = join '|', qw{ + HTTP_VERSION APR_EOL_STR APLOG_MARK APLOG_NOERRNO APR_SO_TIMEOUT ++APR_HOOK_PROBES_ENABLED APR_HOOK_INT_DCL_UD ++APLOG_MAX_LOGLEVEL ++APR_BEGIN_DECLS APR_END_DECLS + }; +  + sub get_constants { +--  +1.7.10.2 + + +From fa4c3ba115a8a34fcc9067330d6e0a9442ba9970 Mon Sep 17 00:00:00 2001 +From: Stefan Fritsch <sf@sfritsch.de> +Date: Tue, 24 Apr 2012 22:31:18 +0200 +Subject: [PATCH 05/22] workaround CScan choking on glibc's headers + +CScan gets rather confused if cpp's line number markers appear in the middle +of a function declaration +--- + lib/ModPerl/CScan.pm |    2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/ModPerl/CScan.pm b/lib/ModPerl/CScan.pm +index 6789af3..a7314c9 100644 +--- a/lib/ModPerl/CScan.pm ++++ b/lib/ModPerl/CScan.pm +@@ -943,7 +943,7 @@ sub new { +     my ($sym) = gensym; +     my $cmd = WIN32 ? +         "$Cpp->{cppstdin} $Defines $addincludes $Cpp->{cppflags} $filename |" : +-        "echo '\#include \"$filename\"' | $Cpp->{cppstdin} $Defines $addincludes $Cpp->{cppflags} $Cpp->{cppminus} |"; ++        "echo '\#include \"$filename\"' | $Cpp->{cppstdin} $Defines $addincludes $Cpp->{cppflags} $Cpp->{cppminus} | grep -v '^#' |"; +     #my $cmd = "echo '\#include <$filename>' | $Cpp->{cppstdin} $Defines $addincludes $Cpp->{cppflags} $Cpp->{cppminus} |"; +  +     (open($sym, $cmd) or die "Cannot open pipe from `$cmd': $!") +--  +1.7.10.2 + + +From fcb18aaa4eb48c8e213e2d23eb9e7b41f3d01e7d Mon Sep 17 00:00:00 2001 +From: Stefan Fritsch <sf@sfritsch.de> +Date: Sun, 22 Apr 2012 22:39:33 +0200 +Subject: [PATCH 06/22] Add U16 type to make 'make xs_generate' happy + +--- + xs/maps/modperl_types.map |    2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/xs/maps/modperl_types.map b/xs/maps/modperl_types.map +index 3b02f02..8c6d541 100644 +--- a/xs/maps/modperl_types.map ++++ b/xs/maps/modperl_types.map +@@ -7,6 +7,8 @@ struct modperl_filter_t | Apache2::OutputFilter + SV *  | SV + I32   | IV + I32 * | IV ++U16   | UV ++U16 * | UV + U32   | UV + U32 * | UV +  +--  +1.7.10.2 + + +From 670cf74e6949630b9fef02d9e0b0c10d00728521 Mon Sep 17 00:00:00 2001 +From: Stefan Fritsch <sf@sfritsch.de> +Date: Sun, 22 Apr 2012 22:48:31 +0200 +Subject: [PATCH 07/22] add new constant CRLF_ASCII + +--- + lib/ModPerl/Code.pm |    3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) +  diff --git a/lib/ModPerl/Code.pm b/lib/ModPerl/Code.pm -index e43f77c..4dbcc38 100644 +index e43f77c..98b037d 100644  --- a/lib/ModPerl/Code.pm  +++ b/lib/ModPerl/Code.pm -@@ -825,7 +825,8 @@ my %ifdef = map { $_, 1 } -     qw(AP_MPMQ_STARTING AP_MPMQ_RUNNING AP_MPMQ_STOPPING -        AP_MPMQ_MPM_STATE), # added in 2.0.49 -     qw(APR_FPROT_USETID APR_FPROT_GSETID --       APR_FPROT_WSTICKY APR_FOPEN_LARGEFILE); # added in 2.0.50? -+       APR_FPROT_WSTICKY APR_FOPEN_LARGEFILE), # added in 2.0.50? -+    qw(OPT_INCNOEXEC OPT_INC_WITH_EXEC); -  - sub constants_ifdef { -     my $name = shift; -diff --git a/lib/ModPerl/MapUtil.pm b/lib/ModPerl/MapUtil.pm -index 1aa219f..788fcc7 100644 ---- a/lib/ModPerl/MapUtil.pm -+++ b/lib/ModPerl/MapUtil.pm -@@ -103,15 +103,28 @@ sub readline { -         # #_end_ -         if (/^\s*#\s*_(if|unless|els(?:e|if)|end)_(?:\s(.+))?/) { -             my ($cmd, $param) = ($1, $2); -+            if (defined $param) { -+                while ($param=~s!\\$!!) { -+                    my $l=<$fh>; -+                    die "$ModPerl::MapUtil::MapFile($.): unexpected EOF\n" -+                        unless defined $l; -+                    chomp $l; -+                    $param.=$l; -+                } -+            } -             if ($cmd eq 'if') { --                unshift @condition, 0+!!eval $param; -+                unshift @condition, -+                    0+!!eval "#line $. $ModPerl::MapUtil::MapFile\n".$param; -+                die $@ if $@; -             } -             elsif ($cmd eq 'elsif') { -                 die "parse error ($ModPerl::MapUtil::MapFile line $.)". -                     " #_elsif_ without #_if_" -                     unless @condition; -                 if ($condition[0] == 0) { --                    $condition[0]+=!!eval $param; -+                    $condition[0]+= -+                        !!eval "#line $. $ModPerl::MapUtil::MapFile\n".$param; -+                    die $@ if $@; -                 } else { -                     $condition[0]++; +@@ -889,7 +889,8 @@ EOF +  +             if ($name eq 'DECLINE_CMD' || +                 $name eq 'DIR_MAGIC_TYPE' || +-                $name eq 'CRLF') { ++                $name eq 'CRLF' || ++                $name eq 'CRLF_ASCII') { +                 print $c_fh <<EOF; +               return newSVpv($alias{$name}, 0); + EOF +--  +1.7.10.2 + + +From 51ce86b8ac2db8a5d408febe77c36e054fac578d Mon Sep 17 00:00:00 2001 +From: Stefan Fritsch <sf@sfritsch.de> +Date: Sun, 22 Apr 2012 22:58:48 +0200 +Subject: [PATCH 08/22] workaround APR_ENOKEY not found + +there should be a better solution... +--- + src/modules/perl/modperl_apache_includes.h |    1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/modules/perl/modperl_apache_includes.h b/src/modules/perl/modperl_apache_includes.h +index a4209c5..c2fb6de 100644 +--- a/src/modules/perl/modperl_apache_includes.h ++++ b/src/modules/perl/modperl_apache_includes.h +@@ -38,6 +38,7 @@ + #include "http_core.h" + #include "http_vhost.h" + #include "ap_mpm.h" ++#include "apu_errno.h" +  + #include "util_filter.h" +  +--  +1.7.10.2 + + +From 434a596733eaf6c099e782c4969cb8a985200b78 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Mon, 4 Jun 2012 12:54:53 +0200 +Subject: [PATCH 09/22] Fix WrapXS parameters + +--- + lib/ModPerl/WrapXS.pm |    2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/ModPerl/WrapXS.pm b/lib/ModPerl/WrapXS.pm +index 9114fc6..10a3efe 100644 +--- a/lib/ModPerl/WrapXS.pm ++++ b/lib/ModPerl/WrapXS.pm +@@ -140,7 +140,7 @@ EOF +             else { +                 if ($orig_args and @$orig_args == @$args) { +                     #args were reordered +-                    $parms = join ', ', @$orig_args; ++                    $parms = $xs_parms;                   } -@@ -123,7 +136,9 @@ sub readline { -                 $condition[0]+=1; -             } -             elsif ($cmd eq 'unless') { --                unshift @condition, 0+!eval $param; -+                unshift @condition, -+                    0+!eval "#line $. $ModPerl::MapUtil::MapFile\n".$param; -+                die $@ if $@; -             } -             elsif ($cmd eq 'end') { -                 shift @condition; -@@ -133,6 +148,15 @@ sub readline { -         if (/^\s*#\s*_(eval)_(?:\s(.+))?/) { -             my ($cmd, $param) = ($1, $2); -+            if (defined $param) { -+                while ($param=~s!\\$!!) { -+                    my $l=<$fh>; -+                    die "$ModPerl::MapUtil::MapFile($.): unexpected EOF\n" -+                        unless defined $l; -+                    chomp $l; -+                    $param.=$l; -+                } -+            } -             if ($cmd eq 'eval') { -                 eval "#line $. $ModPerl::MapUtil::MapFile\n".$param; -                 die $@ if $@; -diff --git a/lib/ModPerl/MethodLookup.pm b/lib/ModPerl/MethodLookup.pm -index 071debb..e0206f1 100644 ---- a/lib/ModPerl/MethodLookup.pm -+++ b/lib/ModPerl/MethodLookup.pm -@@ -1945,7 +1945,7 @@ my $methods = { -                             'APR::Socket' -                           ] -                         ], --          'remote_addr' => [ -+          'client_addr' => [ -                              [ -                                'Apache2::Connection', -                                'Apache2::Connection' -@@ -1957,7 +1957,7 @@ my $methods = { -                                'Apache2::Connection' -                              ] -                            ], --          'remote_ip' => [ -+          'client_ip' => [ -                            [ -                              'Apache2::Connection', -                              'Apache2::Connection' -@@ -2003,6 +2003,18 @@ my $methods = { -                                 'Apache2::RequestRec' -                               ] -                             ], -+          'useragent_ip' => [ -+                                [ -+                                  'Apache2::RequestRec', -+                                  'Apache2::RequestRec' -+                                ] -+                              ], -+          'useragent_addr' => [ -+                              [ -+                                'Apache2::RequestRec', -+                                'Apache2::RequestRec' -+                              ] -+                            ], -           'requires' => [ -                           [ -                             'Apache2::Access', -diff --git a/lib/ModPerl/TypeMap.pm b/lib/ModPerl/TypeMap.pm -index 50aece4..dfbd6e4 100644 ---- a/lib/ModPerl/TypeMap.pm -+++ b/lib/ModPerl/TypeMap.pm -@@ -442,12 +442,12 @@ sub typedefs_code { -         $code .= qq{\#include "$_"\n} -     } -  --    for my $t (sort {$a->[1] cmp $b->[1]} @{ $self->{struct} }) { -+    for my $t (@{ $self->{struct} }) { -         next if $seen{ $t->[1] }++; -         $code .= "typedef $t->[0] * $t->[1];\n"; -     } -  --    for my $t (sort {$a->[1] cmp $b->[1]} @{ $self->{typedef} }) { -+    for my $t (@{ $self->{typedef} }) { -         next if $seen{ $t->[1] }++; -         $code .= "typedef $t->[0] $t->[1];\n"; -     } -@@ -470,9 +470,7 @@ sub sv_convert_code { -     my %seen; -     my $code = ""; -  --    for my $ctype (sort keys %$map) { --        my $ptype = $map->{$ctype}; -- -+    while (my ($ctype, $ptype) = each %$map) { -         next if $self->special($ptype); -         next if $ctype =~ /\s/; -         my $class = $ptype; -diff --git a/src/modules/perl/mod_perl.c b/src/modules/perl/mod_perl.c -index b27f8f4..7cb05b0 100644 ---- a/src/modules/perl/mod_perl.c -+++ b/src/modules/perl/mod_perl.c -@@ -653,6 +653,10 @@ int modperl_is_running(void) - int modperl_hook_pre_config(apr_pool_t *p, apr_pool_t *plog, -                             apr_pool_t *ptemp) - { -+#if AP_MODULE_MAGIC_AT_LEAST(20110329,0) -+    ap_reserve_module_slots_directive("PerlLoadModule"); -+#endif -+ -     /* we can't have PerlPreConfigHandler without first configuring mod_perl */ -  -     /* perl 5.8.1+ */ +                 $dispatch = $func->{name}; +--  +1.7.10.2 + + +From 813a8c0e9cc99c61372effc37891717af182d286 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Mon, 4 Jun 2012 12:57:18 +0200 +Subject: [PATCH 10/22] Remove OPT_INCNOEXEC + +--- + src/modules/perl/modperl_apache_compat.h |    1 - + t/response/TestAPI/add_config.pm         |    1 - + 2 files changed, 2 deletions(-) +  diff --git a/src/modules/perl/modperl_apache_compat.h b/src/modules/perl/modperl_apache_compat.h -index 78a9cb3..02a16fd 100644 +index 78a9cb3..072ae79 100644  --- a/src/modules/perl/modperl_apache_compat.h  +++ b/src/modules/perl/modperl_apache_compat.h -@@ -66,12 +66,40 @@ AP_DECLARE(const char *) ap_get_server_version(void); - #define MP_HTTPD_OVERRIDE_HTACCESS (OR_LIMIT|OR_OPTIONS|OR_FILEINFO|OR_AUTHCFG|OR_INDEXES) -  +@@ -68,7 +68,6 @@ AP_DECLARE(const char *) ap_get_server_version(void);   #define MP_HTTPD_OVERRIDE_OPTS_UNSET (-1) -+ -+#if AP_SERVER_MAJORVERSION_NUMBER>2 || AP_SERVER_MINORVERSION_NUMBER>=3 -+/* 2.4 API */ -+ -+#define mp_add_loaded_module(modp, pool, name) \ -+  ap_add_loaded_module((modp), (pool), (name)) -+ -+#define mp_loglevel(s) ((s)->log.level) -+#define mp_module_index_ perl_module.module_index, -+ -+#define MP_HTTPD_OVERRIDE_OPTS_DEFAULT (OPT_UNSET | \ -+                                        OPT_ALL | \ -+                                        OPT_SYM_OWNER | \ -+                                        OPT_MULTI) -+ -+#else -+/* 2.2 API */ -+ -+#define mp_add_loaded_module(modp, pool, name) \ -+  ap_add_loaded_module((modp), (pool)) -+ -+#define mp_loglevel(s) ((s)->loglevel) -+#define mp_module_index_ -+   #define MP_HTTPD_OVERRIDE_OPTS_DEFAULT (OPT_UNSET | \                                           OPT_ALL | \ -                                         OPT_INCNOEXEC | \ +-                                        OPT_INCNOEXEC | \                                           OPT_SYM_OWNER | \                                           OPT_MULTI) -+#define ap_unixd_config unixd_config -+ -+#endif -+ - #ifndef PROXYREQ_RESPONSE - #define PROXYREQ_RESPONSE (3) - #endif -diff --git a/src/modules/perl/modperl_cmd.h b/src/modules/perl/modperl_cmd.h -index d8629e9..efd24b9 100644 ---- a/src/modules/perl/modperl_cmd.h -+++ b/src/modules/perl/modperl_cmd.h -@@ -115,6 +115,10 @@ MP_CMD_SRV_DECLARE(interp_scope); -    AP_INIT_ITERATE( name, modperl_cmd_##item, NULL, \ -       RSRC_CONF, desc ) -  -+#define MP_CMD_SRV_ITERATE_ON_READ(name, item, desc) \ -+   AP_INIT_ITERATE( name, modperl_cmd_##item, NULL, \ -+      RSRC_CONF|EXEC_ON_READ, desc ) -+ - #define MP_CMD_SRV_ITERATE2(name, item, desc) \ -    AP_INIT_ITERATE2( name, modperl_cmd_##item, NULL, \ -       RSRC_CONF, desc ) -diff --git a/src/modules/perl/modperl_common_util.h b/src/modules/perl/modperl_common_util.h -index bba3403..3dcdaf1 100644 ---- a/src/modules/perl/modperl_common_util.h -+++ b/src/modules/perl/modperl_common_util.h -@@ -22,7 +22,7 @@ - #ifdef MP_DEBUG - #define MP_INLINE - #else --#define MP_INLINE -+#define MP_INLINE APR_INLINE - #endif -  - #ifdef CYGWIN -diff --git a/src/modules/perl/modperl_config.c b/src/modules/perl/modperl_config.c -index 4ec135c..f6a9529 100644 ---- a/src/modules/perl/modperl_config.c -+++ b/src/modules/perl/modperl_config.c -@@ -186,7 +186,7 @@ modperl_config_srv_t *modperl_config_srv_new(apr_pool_t *p, server_rec *s) -  -     /* make sure httpd's argv[0] is the first argument so $0 is -      * correctly connected to the real thing */ --    modperl_config_srv_argv_push(s->process->short_name); -+    modperl_config_srv_argv_push(s->process->argv[0]); -  -     MP_TRACE_d(MP_FUNC, "new scfg: 0x%lx", (unsigned long)scfg); +diff --git a/t/response/TestAPI/add_config.pm b/t/response/TestAPI/add_config.pm +index ff52cbc..c5f2d37 100644 +--- a/t/response/TestAPI/add_config.pm ++++ b/t/response/TestAPI/add_config.pm +@@ -100,7 +100,6 @@ sub handler : method { -@@ -479,7 +479,13 @@ typedef struct { -     PerlInterpreter *perl; - } svav_param_t; +     my $expect =  Apache2::Const::OPT_ALL | +                   Apache2::Const::OPT_UNSET | +-                  Apache2::Const::OPT_INCNOEXEC | +                   Apache2::Const::OPT_MULTI | +                   Apache2::Const::OPT_SYM_OWNER; --static void *svav_getstr(void *buf, size_t bufsiz, void *param) -+static -+#if AP_MODULE_MAGIC_AT_LEAST(20110329,0) -+apr_status_t -+#else -+void * -+#endif -+svav_getstr(void *buf, size_t bufsiz, void *param) - { -     svav_param_t *svav_param = (svav_param_t *)param; -     dTHXa(svav_param->perl); -@@ -488,7 +494,11 @@ static void *svav_getstr(void *buf, size_t bufsiz, void *param) -     STRLEN n_a; +--  +1.7.10.2 + + +From ea359ac8f17a9df49807499d70c66f67245bc466 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Wed, 6 Jun 2012 08:47:21 +0200 +Subject: [PATCH 11/22] Fixed logleve + +--- + xs/Apache2/Log/Apache2__Log.h |   11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/xs/Apache2/Log/Apache2__Log.h b/xs/Apache2/Log/Apache2__Log.h +index 1866315..4a3bb4d 100644 +--- a/xs/Apache2/Log/Apache2__Log.h ++++ b/xs/Apache2/Log/Apache2__Log.h +@@ -36,6 +36,7 @@ static void mpxs_ap_log_error(pTHX_ int level, SV *sv, SV *msg) +     int lmask = level & APLOG_LEVELMASK; +     server_rec *s; +     request_rec *r = NULL; ++    int loglevel = 0; +  +     if (SvROK(sv) && sv_isa(sv, "Apache2::Log::Request")) { +         r = INT2PTR(request_rec *, SvObjIV(sv)); +@@ -48,13 +49,19 @@ static void mpxs_ap_log_error(pTHX_ int level, SV *sv, SV *msg) +         s = modperl_global_get_server_rec(); +     } -     if (svav_param->ix > AvFILL(av)) { -+#if AP_MODULE_MAGIC_AT_LEAST(20110329,0) -+        return APR_EOF; +-    if ((lmask == APLOG_DEBUG) && (s->loglevel >= APLOG_DEBUG)) { ++#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 ++	loglevel = s->log.level;  +#else -         return NULL; ++	loglevel = s->loglevel;  +#endif ++ ++    if ((lmask == APLOG_DEBUG) && (loglevel >= APLOG_DEBUG)) { +         COP *cop = PL_curcop; +         file = CopFILE(cop); /* (caller)[1] */ +         line = CopLINE(cop); /* (caller)[2] */       } -     sv = AvARRAY(av)[svav_param->ix++]; -@@ -496,7 +506,11 @@ static void *svav_getstr(void *buf, size_t bufsiz, void *param) +-    if ((s->loglevel >= lmask) && ++    if ((loglevel >= lmask) && +         SvROK(msg) && (SvTYPE(SvRV(msg)) == SVt_PVCV)) { +         dSP; +         ENTER;SAVETMPS; +--  +1.7.10.2 + + +From 171af3b2747e95f2d670a34ae2cbf4899e92f941 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Mon, 4 Jun 2012 13:12:40 +0200 +Subject: [PATCH 12/22] Use module name in ap_add_loaded_module + +--- + src/modules/perl/modperl_module.c |    4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/modules/perl/modperl_module.c b/src/modules/perl/modperl_module.c +index da148ca..aa1a851 100644 +--- a/src/modules/perl/modperl_module.c ++++ b/src/modules/perl/modperl_module.c +@@ -832,7 +832,11 @@ const char *modperl_module_add(apr_pool_t *p, server_rec *s, -     apr_cpystrn(buf, SvPVX(sv), bufsiz); +     modperl_module_insert(modp); -+#if AP_MODULE_MAGIC_AT_LEAST(20110329,0) -+    return APR_SUCCESS; ++#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 ++    ap_add_loaded_module(modp, p, modp->name);  +#else -     return buf; +     ap_add_loaded_module(modp, p);  +#endif - } -  - const char *modperl_config_insert(pTHX_ server_rec *s, -diff --git a/src/modules/perl/modperl_error.h b/src/modules/perl/modperl_error.h -index d18849d..cbd693f 100644 ---- a/src/modules/perl/modperl_error.h -+++ b/src/modules/perl/modperl_error.h -@@ -45,4 +45,20 @@ void modperl_croak(pTHX_ apr_status_t rc, const char* func); -         }                                                    \ -     } STMT_END -  -+#define MP_RUN_CROAK_RESET_OK(s, rc_run, func) STMT_START               \ -+    {                                                                   \ -+        apr_status_t rc = rc_run;                                       \ -+        if (rc != APR_SUCCESS) {                                        \ -+            if (APR_STATUS_IS_ECONNRESET(rc) ||                         \ -+                APR_STATUS_IS_ECONNABORTED(rc)) {                       \ -+                ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,              \ -+                             "%s got: %s", func,                        \ -+                             modperl_error_strerror(aTHX_ rc));         \ -+            }                                                           \ -+            else {                                                      \ -+                modperl_croak(aTHX_ rc, func);                          \ -+            }                                                           \ -+        }                                                               \ -+    } STMT_END -+ - #endif /* MODPERL_ERROR_H */ -diff --git a/src/modules/perl/modperl_filter.c b/src/modules/perl/modperl_filter.c -index 8122a3f..3ab5c66 100644 ---- a/src/modules/perl/modperl_filter.c -+++ b/src/modules/perl/modperl_filter.c -@@ -472,24 +472,6 @@ static int modperl_run_filter_init(ap_filter_t *f, -     return status; - } -- --#define MP_RUN_CROAK_RESET_OK(func)                                     \ --    {                                                                   \ --        apr_status_t rc = func(filter);                                 \ --        if (rc != APR_SUCCESS) {                                        \ --            if (APR_STATUS_IS_ECONNRESET(rc) ||                         \ --                APR_STATUS_IS_ECONNABORTED(rc)) {                       \ --                ap_log_error(APLOG_MARK, APLOG_INFO, 0, s,              \ --                             "Apache2::Filter internal flush got: %s",  \ --                             modperl_error_strerror(aTHX_ rc));         \ --            }                                                           \ --            else {                                                      \ --                modperl_croak(aTHX_ rc,                                 \ --                              "Apache2::Filter internal flush");        \ --            }                                                           \ --        }                                                               \ --    } -- - int modperl_run_filter(modperl_filter_t *filter) - { -     AV *args = Nullav; -@@ -563,10 +545,12 @@ int modperl_run_filter(modperl_filter_t *filter) -             apr_brigade_destroy(filter->bb_in); -             filter->bb_in = NULL; -         } --        MP_RUN_CROAK_RESET_OK(modperl_input_filter_flush); -+        MP_RUN_CROAK_RESET_OK(s, modperl_input_filter_flush(filter), -+                              "Apache2::Filter internal flush"); -     } -     else { --        MP_RUN_CROAK_RESET_OK(modperl_output_filter_flush); -+        MP_RUN_CROAK_RESET_OK(s, modperl_output_filter_flush(filter), -+                              "Apache2::Filter internal flush"); -     } +     apr_pool_cleanup_register(p, modp, modperl_module_remove, +                               apr_pool_cleanup_null); +--  +1.7.10.2 + + +From 963dd2b75feff278eda95de353d5d1975304ad13 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Mon, 4 Jun 2012 13:14:52 +0200 +Subject: [PATCH 13/22] unixd_config renamed to ap_unixd_config + +--- + xs/Apache2/ServerUtil/Apache2__ServerUtil.h |    5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/xs/Apache2/ServerUtil/Apache2__ServerUtil.h b/xs/Apache2/ServerUtil/Apache2__ServerUtil.h +index e222c1b..f000502 100644 +--- a/xs/Apache2/ServerUtil/Apache2__ServerUtil.h ++++ b/xs/Apache2/ServerUtil/Apache2__ServerUtil.h +@@ -162,8 +162,13 @@ SV *mpxs_Apache2__ServerRec_get_handlers(pTHX_ server_rec *s, + #define mpxs_Apache2__ServerUtil_server(classname) modperl_global_get_server_rec() -     MP_FILTER_RESTORE_ERRSV(errsv); + #if !defined(OS2) && !defined(WIN32) && !defined(BEOS)  && !defined(NETWARE) ++#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 ++#define mpxs_Apache2__ServerUtil_user_id(classname)  ap_unixd_config.user_id ++#define mpxs_Apache2__ServerUtil_group_id(classname) ap_unixd_config.group_id ++#else + #define mpxs_Apache2__ServerUtil_user_id(classname)  unixd_config.user_id + #define mpxs_Apache2__ServerUtil_group_id(classname) unixd_config.group_id ++#endif + #else + #define mpxs_Apache2__ServerUtil_user_id(classname)  0 + #define mpxs_Apache2__ServerUtil_group_id(classname) 0 +--  +1.7.10.2 + + +From 888e80fec78ec7a030b98239858dc6052253eb07 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Mon, 4 Jun 2012 13:17:03 +0200 +Subject: [PATCH 14/22] remote_ip renamed to client_ip + +--- + src/modules/perl/modperl_interp.c |    8 ++++++++ + 1 file changed, 8 insertions(+) +  diff --git a/src/modules/perl/modperl_interp.c b/src/modules/perl/modperl_interp.c -index dfff32e..56bc820 100644 +index dfff32e..6ec9b56 100644  --- a/src/modules/perl/modperl_interp.c  +++ b/src/modules/perl/modperl_interp.c -@@ -500,7 +500,7 @@ modperl_interp_t *modperl_interp_select(request_rec *r, conn_rec *c, +@@ -496,11 +496,19 @@ modperl_interp_t *modperl_interp_select(request_rec *r, conn_rec *c, +  +         set_interp(p); +  ++#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 ++        MP_TRACE_i(MP_FUNC, ++                   "set interp 0x%lx in %s 0x%lx (%s request for %s)\n", ++                   (unsigned long)interp, desc, (unsigned long)p, ++                   (r ? (is_subrequest ? "sub" : "main") : "conn"), ++                   (r ? r->uri : c->client_ip)); ++#else +         MP_TRACE_i(MP_FUNC,                      "set interp 0x%lx in %s 0x%lx (%s request for %s)\n",                      (unsigned long)interp, desc, (unsigned long)p,                      (r ? (is_subrequest ? "sub" : "main") : "conn"), --                   (r ? r->uri : c->remote_ip)); -+                   (r ? r->uri : c->client_ip)); +                    (r ? r->uri : c->remote_ip)); ++#endif       }       /* set context (THX) for this thread */ -diff --git a/src/modules/perl/modperl_io_apache.c b/src/modules/perl/modperl_io_apache.c -index 53c8cd7..208838e 100644 ---- a/src/modules/perl/modperl_io_apache.c -+++ b/src/modules/perl/modperl_io_apache.c -@@ -169,8 +169,9 @@ PerlIOApache_flush(pTHX_ PerlIO *f) -                                   rcfg->wbucket->outbuf, -                                   rcfg->wbucket->outcnt)); -  --    MP_RUN_CROAK(modperl_wbucket_flush(rcfg->wbucket, FALSE), --                 ":Apache2 IO flush"); -+    MP_RUN_CROAK_RESET_OK(st->r->server, -+                          modperl_wbucket_flush(rcfg->wbucket, FALSE), -+                          ":Apache2 IO flush"); -  -     return 0; - } -diff --git a/src/modules/perl/modperl_module.c b/src/modules/perl/modperl_module.c -index 0963935..2e133d9 100644 ---- a/src/modules/perl/modperl_module.c -+++ b/src/modules/perl/modperl_module.c -@@ -741,8 +741,6 @@ static const char *modperl_module_add_cmds(apr_pool_t *p, server_rec *s, +--  +1.7.10.2 + + +From 6bc12830447343c70bf4e2bd10c2eb8b80c0f38c Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Mon, 4 Jun 2012 13:20:07 +0200 +Subject: [PATCH 15/22] remove apu_error.h include + +--- + src/modules/perl/modperl_apache_includes.h |    2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/modules/perl/modperl_apache_includes.h b/src/modules/perl/modperl_apache_includes.h +index c2fb6de..6f7bd8b 100644 +--- a/src/modules/perl/modperl_apache_includes.h ++++ b/src/modules/perl/modperl_apache_includes.h +@@ -38,7 +38,9 @@ + #include "http_core.h" + #include "http_vhost.h" + #include "ap_mpm.h" ++#if !(AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4) + #include "apu_errno.h" ++#endif - static void modperl_module_insert(module *modp) + #include "util_filter.h" +  +--  +1.7.10.2 + + +From ad6b98f6e768032c5ac20bf4d89e8bb895d788fa Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Mon, 4 Jun 2012 13:21:14 +0200 +Subject: [PATCH 16/22] Declare modperl::Global methods, otherwise they are + not parsed and included in the final build + +--- + xs/ModPerl/Global/ModPerl__Global.h |   22 ++++++++++++++++++---- + 1 file changed, 18 insertions(+), 4 deletions(-) + +diff --git a/xs/ModPerl/Global/ModPerl__Global.h b/xs/ModPerl/Global/ModPerl__Global.h +index 2ece589..1b38683 100644 +--- a/xs/ModPerl/Global/ModPerl__Global.h ++++ b/xs/ModPerl/Global/ModPerl__Global.h +@@ -17,7 +17,11 @@ + typedef void (*mpxs_special_list_do_t)(pTHX_ modperl_modglobal_key_t *, +                                        const char *, I32); +  +-static int mpxs_special_list_do(pTHX_ const char *name, ++int mpxs_special_list_do(pTHX_ const char *name, ++                                SV *package, ++                                mpxs_special_list_do_t func); ++ ++int mpxs_special_list_do(pTHX_ const char *name, +                                 SV *package, +                                 mpxs_special_list_do_t func)   { --    module *m; -- -     /* -      * insert after mod_perl, rather the top of the list. -      * (see ap_add_module; does not insert into ap_top_module list if -@@ -750,14 +748,8 @@ static void modperl_module_insert(module *modp) -      * this way, modperl config merging happens before this module. -      */ -  --    for (m = ap_top_module; m; m=m->next) { --        if (m == &perl_module) { --            module *next = m->next; --            m->next = modp; --            modp->next = next; --            break; --        } --    } -+    modp->next = perl_module.next; -+    perl_module.next = modp; +@@ -36,7 +40,9 @@ static int mpxs_special_list_do(pTHX_ const char *name, +     return TRUE;   } - #define MP_isGV(gv) (gv && isGV(gv)) -@@ -840,7 +832,10 @@ const char *modperl_module_add(apr_pool_t *p, server_rec *s, -  -     modperl_module_insert(modp); -  --    ap_add_loaded_module(modp, p); -+    if ((errmsg = mp_add_loaded_module(modp, p, modp->name))) { -+        perl_module.next = modp->next; -+        return errmsg; -+    } -  -     apr_pool_cleanup_register(p, modp, modperl_module_remove, -                               apr_pool_cleanup_null); -diff --git a/src/modules/perl/modperl_pcw.c b/src/modules/perl/modperl_pcw.c -index e83baea..16f8b06 100644 ---- a/src/modules/perl/modperl_pcw.c -+++ b/src/modules/perl/modperl_pcw.c -@@ -27,7 +27,11 @@ void ap_pcw_walk_location_config(apr_pool_t *pconf, server_rec *s, -                                  ap_pcw_dir_cb_t dir_cb, void *data) - { -     int i; --    ap_conf_vector_t **urls = (ap_conf_vector_t **)sconf->sec_url->elts; -+    ap_conf_vector_t **urls; +-static ++int mpxs_ModPerl__Global_special_list_call(pTHX_ const char *name, ++                                                     SV *package);  + -+    if( !sconf->sec_url ) return; -+ -+    urls = (ap_conf_vector_t **)sconf->sec_url->elts; -  -     for (i = 0; i < sconf->sec_url->nelts; i++) { -         core_dir_config *conf = -@@ -46,7 +50,11 @@ void ap_pcw_walk_directory_config(apr_pool_t *pconf, server_rec *s, -                                   ap_pcw_dir_cb_t dir_cb, void *data) + MP_INLINE int mpxs_ModPerl__Global_special_list_call(pTHX_ const char *name, +                                                      SV *package)   { -     int i; --    ap_conf_vector_t **dirs = (ap_conf_vector_t **)sconf->sec_dir->elts; -+    ap_conf_vector_t **dirs; -+ -+    if( !sconf->sec_dir ) return; -+ -+    dirs = (ap_conf_vector_t **)sconf->sec_dir->elts; -  -     for (i = 0; i < sconf->sec_dir->nelts; i++) { -         core_dir_config *conf = -@@ -65,7 +73,11 @@ void ap_pcw_walk_files_config(apr_pool_t *pconf, server_rec *s, -                               ap_pcw_dir_cb_t dir_cb, void *data) - { -     int i; --    ap_conf_vector_t **dirs = (ap_conf_vector_t **)dconf->sec_file->elts; -+    ap_conf_vector_t **dirs; -+ -+    if( !dconf->sec_file ) return; -+ -+    dirs = (ap_conf_vector_t **)dconf->sec_file->elts; -  -     for (i = 0; i < dconf->sec_file->nelts; i++) { -         core_dir_config *conf = -diff --git a/src/modules/perl/modperl_svptr_table.c b/src/modules/perl/modperl_svptr_table.c -index c05e0ac..0ca5c95 100644 ---- a/src/modules/perl/modperl_svptr_table.c -+++ b/src/modules/perl/modperl_svptr_table.c -@@ -30,7 +30,7 @@ - #ifdef USE_ITHREADS -  - #if MP_PERL_BRANCH(5, 6) --#   define my_sv_dup(s, p) sv_dup(s) -+#   define my_sv_dup(s, p) SvREFCNT_inc(sv_dup(s)) -  - typedef struct { -     AV *stashes; -@@ -39,7 +39,11 @@ typedef struct { - } CLONE_PARAMS; -  - #else --#   define my_sv_dup(s, p) sv_dup(s, p) -+#   ifdef sv_dup_inc -+#       define my_sv_dup(s, p) sv_dup_inc(s, p) -+#   else -+#       define my_sv_dup(s, p) SvREFCNT_inc(sv_dup(s, p)) -+#   endif - #endif -  - /* -@@ -89,8 +93,7 @@ PTR_TBL_t *modperl_svptr_table_clone(pTHX_ PerlInterpreter *proto_perl, -             /* key is just a pointer we do not modify, no need to copy */ -             dst_ent->oldval = src_ent->oldval; -  --            dst_ent->newval = --                SvREFCNT_inc(my_sv_dup((SV*)src_ent->newval, &parms)); -+            dst_ent->newval = my_sv_dup((SV*)src_ent->newval, &parms); -         } -     } -  -diff --git a/t/api/err_headers_out.t b/t/api/err_headers_out.t -index 006f49f..c9066e6 100644 ---- a/t/api/err_headers_out.t -+++ b/t/api/err_headers_out.t -@@ -19,6 +19,14 @@ my $location = '/TestAPI__err_headers_out'; -  -     ok t_cmp $res->code, 200, "OK"; -  -+    # HTTP::Headers 6.00 makes the next 2 tests fail. When the response comes -+    # in the header name is stored as "x-err_headers_out". But when it is to -+    # be read below it is referred as "x-err-headers-out" and hence not found. -+    local $HTTP::Headers::TRANSLATE_UNDERSCORE= -+	$HTTP::Headers::TRANSLATE_UNDERSCORE; -+    undef $HTTP::Headers::TRANSLATE_UNDERSCORE -+	if defined HTTP::Headers->VERSION and HTTP::Headers->VERSION==6.00; -+ -     ok t_cmp $res->header('X-err_headers_out'), "err_headers_out", -         "X-err_headers_out: made it"; -  -@@ -36,6 +44,14 @@ my $location = '/TestAPI__err_headers_out'; -  -     ok t_cmp $res->code, 404, "not found"; -  -+    # HTTP::Headers 6.00 makes this test fail. When the response comes in -+    # the header name is stored as "x-err_headers_out". But when it is to -+    # be read below it is referred as "x-err-headers-out" and hence not found. -+    local $HTTP::Headers::TRANSLATE_UNDERSCORE= -+	$HTTP::Headers::TRANSLATE_UNDERSCORE; -+    undef $HTTP::Headers::TRANSLATE_UNDERSCORE -+	if defined HTTP::Headers->VERSION and HTTP::Headers->VERSION==6.00; -+ -     ok t_cmp $res->header('X-err_headers_out'), "err_headers_out", -         "X-err_headers_out: made it"; -  -diff --git a/t/conf/extra.conf.in b/t/conf/extra.conf.in -index 9d4f43e..3e8b005 100644 ---- a/t/conf/extra.conf.in -+++ b/t/conf/extra.conf.in -@@ -73,6 +73,10 @@ PerlModule TestExit::FromPerlModule - </IfModule> - <IfModule mod_env.c> -     SetEnv TMPDIR @t_logs@ -+ -+    # pass ld_library_path for non standard lib locations -+    # [rt.cpan.org #66085] -+    PassEnv LD_LIBRARY_PATH - </IfModule> - # </sandbox-friendly> -  -diff --git a/t/filter/TestFilter/out_str_reverse.pm b/t/filter/TestFilter/out_str_reverse.pm -index 737e831..b661ede 100644 ---- a/t/filter/TestFilter/out_str_reverse.pm -+++ b/t/filter/TestFilter/out_str_reverse.pm -@@ -16,12 +16,21 @@ use TestCommon::Utils (); - use Apache2::Const -compile => qw(OK M_POST); -  - use constant BUFF_LEN => 2; -+use constant signature => "Reversed by mod_perl 2.0\n"; -  - sub handler { -     my $f = shift; -     #warn "called\n"; +@@ -44,7 +50,11 @@ MP_INLINE int mpxs_ModPerl__Global_special_list_call(pTHX_ const char *name, +                                 modperl_perl_global_avcv_call); + } -     my $leftover = $f->ctx; +-static  + -+    # We are about to change the length of the response body. Hence, we -+    # have to adjust the content-length header. -+    unless (defined $leftover) { # 1st invocation -+	$f->r->headers_out->{'Content-Length'}+=length signature -+	    if exists $f->r->headers_out->{'Content-Length'}; -+    } ++int mpxs_ModPerl__Global_special_list_clear(pTHX_ const char *name, ++                                                      SV *package);  + -     while ($f->read(my $buffer, BUFF_LEN)) { -         #warn "buffer: [$buffer]\n"; -         $buffer = $leftover . $buffer if defined $leftover; -@@ -34,7 +43,7 @@ sub handler { -  -     if ($f->seen_eos) { -         $f->print(scalar reverse $leftover) if defined $leftover; --        $f->print("Reversed by mod_perl 2.0\n"); -+        $f->print(signature); -     } -     else { -         $f->ctx($leftover) if defined $leftover; -diff --git a/t/protocol/TestProtocol/pseudo_http.pm b/t/protocol/TestProtocol/pseudo_http.pm -index 713b06a..bb49ec8 100644 ---- a/t/protocol/TestProtocol/pseudo_http.pm -+++ b/t/protocol/TestProtocol/pseudo_http.pm -@@ -165,6 +165,8 @@ __END__ -           AuthUserFile @ServerRoot@/htdocs/protocols/basic-auth -       </IfModule> -  -+      AuthName TestProtocol::pseudo_http -+      AuthType Basic -       Require user stas -       Satisfy any -  -diff --git a/t/response/TestAPI/add_config.pm b/t/response/TestAPI/add_config.pm -index 0347c4c..f02a717 100644 ---- a/t/response/TestAPI/add_config.pm -+++ b/t/response/TestAPI/add_config.pm -@@ -100,7 +100,8 @@ sub handler : method { -  -     my $expect =  Apache2::Const::OPT_ALL | -                   Apache2::Const::OPT_UNSET | --                  Apache2::Const::OPT_INCNOEXEC | -+                  (defined &Apache2::Const::OPT_INCNOEXEC -+                   ? Apache2::Const::OPT_INCNOEXEC() : 0) | -                   Apache2::Const::OPT_MULTI | -                   Apache2::Const::OPT_SYM_OWNER; -  -@@ -121,7 +122,7 @@ __END__ - # APACHE_TEST_CONFIG_ORDER 950 - <NoAutoConfig> -     <VirtualHost TestAPI::add_config> --        PerlModule TestAPI::add_config -+        PerlLoadModule TestAPI::add_config -         AccessFileName htaccess -         SetHandler modperl -         <Directory @DocumentRoot@> -diff --git a/t/response/TestAPI/request_rec.pm b/t/response/TestAPI/request_rec.pm -index 2f20f9f..23d1fae 100644 ---- a/t/response/TestAPI/request_rec.pm -+++ b/t/response/TestAPI/request_rec.pm -@@ -57,8 +57,9 @@ sub handler { -  -     ok $r->protocol =~ /http/i; -  --    # HTTP 1.0 --    ok t_cmp $r->proto_num, 1000, 't->proto_num'; -+    # LWP >=6.00 uses HTTP/1.1, other HTTP/1.0 -+    ok t_cmp $r->proto_num, 1000+substr($r->the_request, -1), -+	't->proto_num'; -  -     ok t_cmp lc($r->hostname), lc($r->get_server_name), '$r->hostname'; -  -@@ -124,7 +125,12 @@ sub handler { -  -         ok t_cmp $r->args, $args, '$r->args'; -  --        ok t_cmp $r->the_request, "GET $base_uri$path_info?$args HTTP/1.0", -+	# LWP uses HTTP/1.1 since 6.00 -+        ok t_cmp $r->the_request, qr!GET -+				     \x20 -+				     \Q$base_uri$path_info\E\?\Q$args\E -+				     \x20 -+				     HTTP/1\.\d!x, -             '$r->the_request'; -  -         { -diff --git a/t/response/TestAPI/request_util.pm b/t/response/TestAPI/request_util.pm -index 39ba311..4737314 100644 ---- a/t/response/TestAPI/request_util.pm -+++ b/t/response/TestAPI/request_util.pm -@@ -24,7 +24,8 @@ sub handler { -  -     plan $r, tests => (scalar keys %status_lines) + 11; -  --    ok $r->default_type; -+    # default_type() is gone as of httpd 2.3.2-dev -+    ok !defined(&Apache2::RequestRec::default_type) || $r->default_type; -  -     my $document_root = $r->document_root; -  -diff --git a/t/response/TestAPI/server_const.pm b/t/response/TestAPI/server_const.pm -index 04a190b..d7b17ad 100644 ---- a/t/response/TestAPI/server_const.pm -+++ b/t/response/TestAPI/server_const.pm -@@ -24,7 +24,7 @@ sub handler { -  -     my $r = shift; -  --    plan $r, tests => 5; -+    plan $r, tests => 6; -  -     # test Apache2::ServerUtil constant subroutines -  -@@ -36,20 +36,22 @@ sub handler { -              $built, -              'Apache2::ServerUtil::get_server_built()'); -  --    ok t_cmp(Apache2::ServerUtil::get_server_description, --             $version, -+    my $server_descr = Apache2::ServerUtil::get_server_description; -+    ok t_cmp($server_descr, qr/^\Q$version\E/, -              'Apache2::ServerUtil::get_server_description()'); -  --    my $server_version = Apache2::ServerUtil::get_server_version; --    ok t_cmp($version, --             qr/^$server_version/, --             'Apache2::ServerUtil::get_server_version()'); -+    # added via $s->add_version_component in t/conf/modperl_extra.pl -+    ok t_cmp($server_descr, qr!\bworld domination series/2\.0\b!, -+             'Apache2::ServerUtil::get_server_description() -- component'); -  --    my $server_banner = Apache2::ServerUtil::get_server_banner; --    ok t_cmp($version, --             qr/^$server_banner/, -+    # assuming ServerTokens Full (default) the banner equals description -+    ok t_cmp(Apache2::ServerUtil::get_server_banner, $server_descr, -              'Apache2::ServerUtil::get_server_banner()'); -  -+    # version is just an alias for banner -+    ok t_cmp(Apache2::ServerUtil::get_server_version, $server_descr, -+             'Apache2::ServerUtil::get_server_version()');  + -     Apache2::Const::OK; + MP_INLINE int mpxs_ModPerl__Global_special_list_clear(pTHX_ const char *name, +                                                       SV *package) + { +@@ -52,7 +62,11 @@ MP_INLINE int mpxs_ModPerl__Global_special_list_clear(pTHX_ const char *name, +                                 modperl_perl_global_avcv_clear);   } -diff --git a/t/response/TestDirective/cmdparms.pm b/t/response/TestDirective/cmdparms.pm -index 72e0d33..aa155ca 100644 ---- a/t/response/TestDirective/cmdparms.pm -+++ b/t/response/TestDirective/cmdparms.pm -@@ -134,6 +134,8 @@ TestCmdParms "Vhost" -  - TestCmdParms "Location" -  --<LimitExcept GET> --    TestCmdParms "Limit" --</LimitExcept> -+<Directory /> -+    <LimitExcept GET> -+        TestCmdParms "Limit" -+    </LimitExcept> -+</Directory> -diff --git a/xs/Apache2/Access/Apache2__Access.h b/xs/Apache2/Access/Apache2__Access.h -index 539e201..d1a5dcf 100644 ---- a/xs/Apache2/Access/Apache2__Access.h -+++ b/xs/Apache2/Access/Apache2__Access.h -@@ -19,7 +19,12 @@ static MP_INLINE SV *mpxs_ap_requires(pTHX_ request_rec *r) -     AV *av; -     HV *hv; -     register int x; --    const apr_array_header_t *reqs_arr = ap_requires(r); -+    const apr_array_header_t *reqs_arr =  -+#if AP_SERVER_MAJORVERSION_NUMBER>2 || AP_SERVER_MINORVERSION_NUMBER>=3 -+        0; -+#else -+        ap_requires(r); -+#endif -     require_line *reqs; -  -     if (!reqs_arr) { +-static ++int mpxs_ModPerl__Global_special_list_register(pTHX_ ++                                                         const char *name, ++                                                         SV *package); ++ ++ + MP_INLINE int mpxs_ModPerl__Global_special_list_register(pTHX_ +                                                          const char *name, +                                                          SV *package) +--  +1.7.10.2 + + +From 6036d0e2f19f2ff5c851b24d40e36f396d7c24da Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Thu, 7 Jun 2012 12:24:06 +0200 +Subject: [PATCH 17/22] Fix ap_log_error and ap_log_rerror calls + +--- + xs/Apache2/Log/Apache2__Log.h |   19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) +  diff --git a/xs/Apache2/Log/Apache2__Log.h b/xs/Apache2/Log/Apache2__Log.h -index 1866315..82db55a 100644 +index 4a3bb4d..deb589f 100644  --- a/xs/Apache2/Log/Apache2__Log.h  +++ b/xs/Apache2/Log/Apache2__Log.h -@@ -48,13 +48,13 @@ static void mpxs_ap_log_error(pTHX_ int level, SV *sv, SV *msg) -         s = modperl_global_get_server_rec(); -     } -  --    if ((lmask == APLOG_DEBUG) && (s->loglevel >= APLOG_DEBUG)) { -+    if ((lmask >= APLOG_DEBUG) && (mp_loglevel(s) >= APLOG_DEBUG)) { -         COP *cop = PL_curcop; -         file = CopFILE(cop); /* (caller)[1] */ -         line = CopLINE(cop); /* (caller)[2] */ -     } -  --    if ((s->loglevel >= lmask) && -+    if ((mp_loglevel(s) >= lmask) && -         SvROK(msg) && (SvTYPE(SvRV(msg)) == SVt_PVCV)) { -         dSP; -         ENTER;SAVETMPS; -@@ -72,10 +72,12 @@ static void mpxs_ap_log_error(pTHX_ int level, SV *sv, SV *msg) +@@ -77,13 +77,21 @@ static void mpxs_ap_log_error(pTHX_ int level, SV *sv, SV *msg) +     else { +         str = SvPV(msg,n_a);       } -  +- ++#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 ++    if (r) { ++        ap_log_rerror(file, line, APLOG_MODULE_INDEX, level, 0, r, "%s", str); ++    } ++    else { ++        ap_log_error(file, line, APLOG_MODULE_INDEX, level, 0, s, "%s", str); ++    } ++#else       if (r) { --        ap_log_rerror(file, line, level, 0, r, "%s", str); -+        ap_log_rerror(file, line, mp_module_index_ level, 0, r, -+		      "%s", str); +         ap_log_rerror(file, line, level, 0, r, "%s", str);       }       else { --        ap_log_error(file, line, level, 0, s, "%s", str); -+        ap_log_error(file, line, mp_module_index_ level, 0, s, -+		     "%s", str); +         ap_log_error(file, line, level, 0, s, "%s", str);       } ++#endif       if (svstr) { -@@ -258,10 +260,12 @@ MP_STATIC XS(MPXS_Apache2__Log_log_xerror) +         SvREFCNT_dec(svstr); +@@ -264,12 +272,21 @@ MP_STATIC XS(MPXS_Apache2__Log_log_xerror) +        msgstr = SvPV(msgsv, n_a); ++#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 ++    if (r) { ++        ap_log_rerror(file, line, APLOG_MODULE_INDEX, level, status, r, "%s", msgstr); ++    } ++    else { ++        ap_log_error(file, line, APLOG_MODULE_INDEX, level, status, s, "%s", msgstr); ++    } ++#else       if (r) { --        ap_log_rerror(file, line, level, status, r, "%s", msgstr); -+        ap_log_rerror(file, line, mp_module_index_ level, status, r, -+		      "%s", msgstr); +         ap_log_rerror(file, line, level, status, r, "%s", msgstr);       }       else { --        ap_log_error(file, line, level, status, s, "%s", msgstr); -+        ap_log_error(file, line, mp_module_index_ level, status, s, -+		     "%s", msgstr); +         ap_log_error(file, line, level, status, s, "%s", msgstr);       } ++#endif       SvREFCNT_dec(msgsv); -diff --git a/xs/Apache2/RequestIO/Apache2__RequestIO.h b/xs/Apache2/RequestIO/Apache2__RequestIO.h -index ff586a4..aa2f1f5 100644 ---- a/xs/Apache2/RequestIO/Apache2__RequestIO.h -+++ b/xs/Apache2/RequestIO/Apache2__RequestIO.h -@@ -179,8 +179,9 @@ void mpxs_Apache2__RequestRec_rflush(pTHX_ I32 items, -                rcfg->wbucket->outcnt, -                apr_pstrmemdup(rcfg->wbucket->pool, rcfg->wbucket->outbuf, -                               rcfg->wbucket->outcnt)); --    MP_RUN_CROAK(modperl_wbucket_flush(rcfg->wbucket, TRUE), --                 "Apache2::RequestIO::rflush"); -+    MP_RUN_CROAK_RESET_OK(r->server, -+                          modperl_wbucket_flush(rcfg->wbucket, TRUE), -+                          "Apache2::RequestIO::rflush"); - } - static MP_INLINE long mpxs_ap_get_client_block(pTHX_ request_rec *r, -diff --git a/xs/Apache2/RequestUtil/Apache2__RequestUtil.h b/xs/Apache2/RequestUtil/Apache2__RequestUtil.h -index ee3f197..931af4a 100644 ---- a/xs/Apache2/RequestUtil/Apache2__RequestUtil.h -+++ b/xs/Apache2/RequestUtil/Apache2__RequestUtil.h -@@ -154,12 +154,6 @@ int mpxs_Apache2__RequestRec_location_merge(request_rec *r, -                                                     &core_module); +--  +1.7.10.2 + + +From 3d927e6284d239a3a9b4876752b974d1155b3517 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Thu, 7 Jun 2012 12:25:37 +0200 +Subject: [PATCH 18/22] Fix svav_getstr to return apr_status_t + +--- + src/modules/perl/modperl_config.c |    6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/modules/perl/modperl_config.c b/src/modules/perl/modperl_config.c +index c4ef81f..e182f2d 100644 +--- a/src/modules/perl/modperl_config.c ++++ b/src/modules/perl/modperl_config.c +@@ -479,7 +479,7 @@ typedef struct { +     PerlInterpreter *perl; + } svav_param_t; -         if (strEQ(entry->d, location)) { --            if (!entry->ap_auth_type) { --                entry->ap_auth_type = "Basic"; --            } --            if (!entry->ap_auth_name) { --                entry->ap_auth_name = apr_pstrdup(p, location); --            } -             r->per_dir_config = -                 ap_merge_per_dir_configs(p, s->lookup_defaults, sec[i]); -             return 1; -diff --git a/xs/Apache2/ServerUtil/Apache2__ServerUtil.h b/xs/Apache2/ServerUtil/Apache2__ServerUtil.h -index ced1c38..8965dad 100644 ---- a/xs/Apache2/ServerUtil/Apache2__ServerUtil.h -+++ b/xs/Apache2/ServerUtil/Apache2__ServerUtil.h -@@ -157,8 +157,8 @@ SV *mpxs_Apache2__ServerRec_get_handlers(pTHX_ server_rec *s, - #define mpxs_Apache2__ServerUtil_server(classname) modperl_global_get_server_rec() +-static void *svav_getstr(void *buf, size_t bufsiz, void *param) ++static apr_status_t svav_getstr(void *buf, size_t bufsiz, void *param) + { +     svav_param_t *svav_param = (svav_param_t *)param; +     dTHXa(svav_param->perl); +@@ -488,7 +488,7 @@ static void *svav_getstr(void *buf, size_t bufsiz, void *param) +     STRLEN n_a; - #if !defined(OS2) && !defined(WIN32) && !defined(BEOS)  && !defined(NETWARE) --#define mpxs_Apache2__ServerUtil_user_id(classname)  unixd_config.user_id --#define mpxs_Apache2__ServerUtil_group_id(classname) unixd_config.group_id -+#define mpxs_Apache2__ServerUtil_user_id(classname)  ap_unixd_config.user_id -+#define mpxs_Apache2__ServerUtil_group_id(classname) ap_unixd_config.group_id - #else - #define mpxs_Apache2__ServerUtil_user_id(classname)  0 - #define mpxs_Apache2__ServerUtil_group_id(classname) 0 -@@ -185,6 +185,13 @@ void mpxs_Apache2__ServerRec_add_config(pTHX_ server_rec *s, SV *lines) +     if (svav_param->ix > AvFILL(av)) { +-        return NULL; ++        return APR_EOF;       } - } -+#define mpxs_Apache2__ServerRec_get_server_banner         \ -+    ap_get_server_banner() -+#define mpxs_Apache2__ServerRec_get_server_description    \ -+    ap_get_server_description() -+#define mpxs_Apache2__ServerRec_get_server_version        \ -+    ap_get_server_version() -+ - static void mpxs_Apache2__ServerUtil_BOOT(pTHX) - { -     newCONSTSUB(PL_defstash, "Apache2::ServerUtil::server_root", -@@ -192,13 +199,4 @@ static void mpxs_Apache2__ServerUtil_BOOT(pTHX) +     sv = AvARRAY(av)[svav_param->ix++]; +@@ -496,7 +496,7 @@ static void *svav_getstr(void *buf, size_t bufsiz, void *param) -     newCONSTSUB(PL_defstash, "Apache2::ServerUtil::get_server_built", -                 newSVpv(ap_get_server_built(), 0)); -- --    newCONSTSUB(PL_defstash, "Apache2::ServerUtil::get_server_version", --                newSVpv(ap_get_server_version(), 0)); -- --    newCONSTSUB(PL_defstash, "Apache2::ServerUtil::get_server_banner", --                newSVpv(ap_get_server_banner(), 0)); -- --    newCONSTSUB(PL_defstash, "Apache2::ServerUtil::get_server_description", --                newSVpv(ap_get_server_description(), 0)); - } -diff --git a/xs/maps/apache2_functions.map b/xs/maps/apache2_functions.map -index 6d1f29b..27d5ef1 100644 ---- a/xs/maps/apache2_functions.map -+++ b/xs/maps/apache2_functions.map -@@ -41,7 +41,14 @@ MODULE=Apache2::RequestUtil - MODULE=Apache2::RequestUtil   PACKAGE=guess -  ap_psignature | | r, prefix - >ap_finalize_request_protocol -+#_if_ do {                                                                  \ -+          Apache2::Build->build_config                                      \ -+	      ->httpd_version =~ /^(\d+)\.(\d+)\.(\d+)/                     \ -+          ? ($1*1000+$2)*1000+$3                                            \ -+          : die "Cannot get httpd version";                                 \ -+      } < 2003000 -  ap_default_type -+#_end_ -  ap_get_server_name -  ap_get_server_port - !ap_content_type_tolower -@@ -165,6 +172,9 @@ MODULE=Apache2::ServerUtil   PACKAGE=Apache2::ServerRec BOOT=1 - MODULE=Apache2::ServerUtil   PACKAGE=Apache2::ServerUtil -  ap_exists_config_define -  ap_server_root_relative | | p, fname="" -+ ap_get_server_banner -+ ap_get_server_description -+ ap_get_server_version +     apr_cpystrn(buf, SvPVX(sv), bufsiz); - MODULE=Apache2::ServerUtil   PACKAGE=guess -  ap_error_log2stderr -@@ -175,9 +185,6 @@ MODULE=Apache2::ServerUtil   PACKAGE=guess - #however it is not exported on win32 - !ap_get_local_host - ~ap_get_server_built --~ap_get_server_version --~ap_get_server_banner --~ap_get_server_description - ~ap_server_root +-    return buf; ++    return APR_SUCCESS; + } + const char *modperl_config_insert(pTHX_ server_rec *s, +--  +1.7.10.2 + + +From 302d524a184c19936005df9d237a194829e6bfb1 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Thu, 7 Jun 2012 12:59:08 +0200 +Subject: [PATCH 19/22] Fix undefined reference to perl_module + +--- + xs/ModPerl/Const/Const.xs |   11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/xs/ModPerl/Const/Const.xs b/xs/ModPerl/Const/Const.xs +index 33a4c0c..15fa36d 100644 +--- a/xs/ModPerl/Const/Const.xs ++++ b/xs/ModPerl/Const/Const.xs +@@ -17,6 +17,17 @@ + #include "mod_perl.h" + #include "modperl_const.h" +  ++/* To define extern perl_module to something so Const.so can be loaded later */ ++module AP_MODULE_DECLARE_DATA perl_module = { ++    STANDARD20_MODULE_STUFF, ++    NULL, /* dir config creater */ ++    NULL,  /* dir merger --- default is to override */ ++    NULL, /* server config */ ++    NULL,  /* merge server config */ ++    NULL,              /* table of config file commands       */ ++    NULL,    /* register hooks */ ++}; ++ + MODULE = ModPerl::Const    PACKAGE = ModPerl::Const +  + PROTOTYPES: disable +--  +1.7.10.2 + + +From b16f7c43d01db3f4f6123a15d369d5070fcc8ac0 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Thu, 7 Jun 2012 13:31:57 +0200 +Subject: [PATCH 20/22] Find for headers also in APR_INCLUDEDIR + +--- + lib/Apache2/ParseSource.pm |    1 + + 1 file changed, 1 insertion(+) + +diff --git a/lib/Apache2/ParseSource.pm b/lib/Apache2/ParseSource.pm +index f35c2a8..2f68fa7 100644 +--- a/lib/Apache2/ParseSource.pm ++++ b/lib/Apache2/ParseSource.pm +@@ -116,6 +116,7 @@ sub scan { + sub include_dirs { +     my $self = shift; +     ($self->config->apxs('-q' => 'INCLUDEDIR'), ++     $self->config->apxs('-q' => 'APR_INCLUDEDIR'), +      $self->config->mp_include_dir); + } -diff --git a/xs/tables/current/Apache2/ConstantsTable.pm b/xs/tables/current/Apache2/ConstantsTable.pm -index 3f86493..1192611 100644 ---- a/xs/tables/current/Apache2/ConstantsTable.pm -+++ b/xs/tables/current/Apache2/ConstantsTable.pm -@@ -53,6 +53,7 @@ $Apache2::ConstantsTable = { -       'OPT_EXECCGI', -       'OPT_UNSET', -       'OPT_INCNOEXEC', -+      'OPT_INC_WITH_EXEC', -       'OPT_SYM_OWNER', -       'OPT_MULTI', -       'OPT_ALL' -diff --git a/xs/tables/current/Apache2/StructureTable.pm b/xs/tables/current/Apache2/StructureTable.pm -index af50be1..ec134b4 100644 ---- a/xs/tables/current/Apache2/StructureTable.pm -+++ b/xs/tables/current/Apache2/StructureTable.pm -@@ -2708,11 +2708,11 @@ $Apache2::StructureTable = [ -       }, -       { -         'type' => 'apr_sockaddr_t *', --        'name' => 'remote_addr' -+        'name' => 'client_addr' -       }, -       { -         'type' => 'char *', --        'name' => 'remote_ip' -+        'name' => 'client_ip' -       }, -       { -         'type' => 'char *', -@@ -2955,6 +2955,14 @@ $Apache2::StructureTable = [ -       }, -       { -         'type' => 'char *', -+        'name' => 'useragent_ip' -+      }, -+      { -+        'type' => 'apr_sockaddr_t *', -+        'name' => 'useragent_addr' -+      }, -+      { -+        'type' => 'char *', -         'name' => 'the_request' -       }, -       { -@@ -3245,10 +3253,6 @@ $Apache2::StructureTable = [ -       }, -       { -         'type' => 'int', --        'name' => 'loglevel' --      }, --      { --        'type' => 'int', -         'name' => 'is_virtual' -       }, -       { +--  +1.7.10.2 + + +From c87aca396f11277c1ef90b13cbd3d583dda86512 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Thu, 7 Jun 2012 13:35:46 +0200 +Subject: [PATCH 21/22] Include apu_errno + +--- + src/modules/perl/modperl_apr_includes.h |    1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/modules/perl/modperl_apr_includes.h b/src/modules/perl/modperl_apr_includes.h +index f5ae341..8e69776 100644 +--- a/src/modules/perl/modperl_apr_includes.h ++++ b/src/modules/perl/modperl_apr_includes.h +@@ -35,5 +35,6 @@ + #include "apr_general.h" + #include "apr_uuid.h" + #include "apr_env.h" ++#include "apu_errno.h" +  + #endif /* MODPERL_APR_INCLUDES_H */ +--  +1.7.10.2 + + +From 454581a726fe637f3d71376b47104edce6cbb195 Mon Sep 17 00:00:00 2001 +From: Jan Kaluza <hanzz.k@gmail.com> +Date: Thu, 7 Jun 2012 13:43:40 +0200 +Subject: [PATCH 22/22] Add PROXYREQ define + +--- + lib/Apache2/ParseSource.pm |    2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/Apache2/ParseSource.pm b/lib/Apache2/ParseSource.pm +index 2f68fa7..2fda9e2 100644 +--- a/lib/Apache2/ParseSource.pm ++++ b/lib/Apache2/ParseSource.pm +@@ -231,7 +231,7 @@ sub generate_cscan_file { +  + my %defines_wanted = ( +     'Apache2::Const' => { +-        common     => [qw{OK DECLINED DONE}], ++        common     => [qw{OK DECLINED DONE PROXYREQ PROXYREQ_REVERSE}], +         config     => [qw{DECLINE_CMD}], +         context    => [qw(NOT_IN_ GLOBAL_ONLY)], +         http       => [qw{HTTP_}], +--  +1.7.10.2 + diff --git a/mod_perl.spec b/mod_perl.spec index 1995fa8..e5b98a2 100644 --- a/mod_perl.spec +++ b/mod_perl.spec @@ -3,8 +3,8 @@  %{!?_httpd_mmn: %{expand: %%global _httpd_mmn %%(cat %{_includedir}/httpd/.mmn || echo missing-httpd-devel)}}  Name:           mod_perl -Version:        2.0.5 -Release:        10%{?dist} +Version:        2.0.7 +Release:        1%{?dist}  Summary:        An embedded Perl interpreter for the Apache HTTP Server  Group:          System Environment/Daemons @@ -23,6 +23,8 @@ BuildRequires:  perl-devel, perl(ExtUtils::Embed)  BuildRequires:  httpd-devel >= 2.4.0, httpd, gdbm-devel  BuildRequires:  apr-devel >= 1.2.0, apr-util-devel  BuildRequires:  perl(Data::Dumper) +BuildRequires:  perl(Data::Flow) +BuildRequires:  perl(Tie::IxHash)  Requires:       perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))  Requires:       httpd-mmn = %{_httpd_mmn}  # For Apache::SizeLimit::Core @@ -91,11 +93,22 @@ for i in devel/debug/c.pod devel/core/explained.pod user/Changes.pod; do  done  cd .. +  CFLAGS="$RPM_OPT_FLAGS -fpic" %{__perl} Makefile.PL </dev/null \ -        PREFIX=$RPM_BUILD_ROOT/%{_prefix} \ -        INSTALLDIRS=vendor \ -        MP_APXS=%{_httpd_apxs} \ -        MP_APR_CONFIG=%{_bindir}/apr-1-config +         PREFIX=$RPM_BUILD_ROOT/%{_prefix} \ +         INSTALLDIRS=vendor \ +         MP_APXS=%{_httpd_apxs} \ +         MP_APR_CONFIG=%{_bindir}/apr-1-config + +make source_scan +make xs_generate + +CFLAGS="$RPM_OPT_FLAGS -fpic" %{__perl} Makefile.PL </dev/null \ +         PREFIX=$RPM_BUILD_ROOT/%{_prefix} \ +         INSTALLDIRS=vendor \ +         MP_APXS=%{_httpd_apxs} \ +         MP_APR_CONFIG=%{_bindir}/apr-1-config +  make -C src/modules/perl %{?_smp_mflags} OPTIMIZE="$RPM_OPT_FLAGS -fpic"  make @@ -170,6 +183,18 @@ echo "%%exclude %{_mandir}/man3/Apache::Test*.3pm*" >> exclude.files  %{_mandir}/man3/Apache::Test*.3pm*  %changelog +* Fri Jun 29 2012 Remi Collet <RPMS@FamilleCollet.com> - 2.0.7-1 +- sync with rawhide, update to 2.0.7, rebuild for remi repo + +* Fri Jun 29 2012 Petr Pisar <ppisar@redhat.com> - 2.0.7-2 +- Perl 5.16 rebuild + +* Fri Jun 29 2012 Jan Kaluza <jkaluza@redhat.com> - 2.0.7-1 +- update to 2.0.7 (#830501) + +* Sun Jun 10 2012 Petr Pisar <ppisar@redhat.com> - 2.0.5-11 +- Perl 5.16 rebuild +  * Thu Apr 19 2012 Remi Collet <RPMS@FamilleCollet.com> - 2.0.5-10  - sync with rawhide, rebuild for remi repo  | 
