diff options
Diffstat (limited to 'debian/perl-framework')
334 files changed, 2401 insertions, 1344 deletions
diff --git a/debian/perl-framework/Apache-Test/Changes b/debian/perl-framework/Apache-Test/Changes index d9202ff..ec0c6ef 100644 --- a/debian/perl-framework/Apache-Test/Changes +++ b/debian/perl-framework/Apache-Test/Changes @@ -6,7 +6,51 @@ Changes - Apache::Test change logfile =over 3 -=item 1.41-dev +=item 1.44-dev + +=item 1.43 Nov 7 2021 + +Our implementation of "which" should not search +for a program in the elements of PATH when program +already contains a path. [rjung] + +Fix hash generation when the openssl command +was overwritten with the environment variable +"APACHE_TEST_OPENSSL_CMD". [rjung] + +Add new config option limitrequestline needed +when the local directory paths are long. [rjung] + +=item 1.42 Aug 28 2019 + +Fix loading apache_test_config.pm for recent perls in which '.' is +no longer in @INC by default. [Steve Hay] + +=item 1.41 Jul 11 2019 + +Set DefaultStateDir for > 2.5.1 and add -t_state to override. [jorton] + +Inherit config via IncludeOptional as well as Include. [jorton] + +Increase size of MinSpare, MaxSpare and MaxClients to improve httpd test +framework runs with worker and preform MPMs. [rjung] + +Changed the openssl version detection to work with other *SSL libraries. +[icing] + +Switch test framework from using Net::SSL for +raw TLS sockets to IO::Socket::SSL. [rjung] + +Fix mod_ssl tests under OpenSSL 1.1.1 / TLSv1.3. [jorton] + +Add cwd to generated lib path in TEST script since Perl >=5.26 don't +do that any more. [jorton] + +Override loglevel to trace8 if running in 2.4. [covener] + +Allow an empty PREFIX. [sf] + +Add need_min_apache_fix(). [covener] =item 1.40 Sep 6 2016 @@ -585,7 +629,7 @@ not required between runs. [Geoffrey Young] Apache::TestSmoke imrovements: [Stas] o the command line option -iterations=N should always be respected - (previously it was internally overridden for order!='random'). + (previously it was internally overriden for order!='random'). o since IPC::Run3 broke the Ctrl-C handler, we started to loose any intermediate results, should the run be aborted. So for now, try to always store those results in the temp file: @@ -1111,7 +1155,7 @@ filename and the line number the function was called from. If the with the name of the subroutine the function was called from. [Stas] add support for a new env var APACHE_TEST_TRACE_LEVEL, used to -override the tracing level. It propogates the overridden (either by env +override the tracing level. It propogates the overriden (either by env var APACHE_TEST_TRACE_LEVEL or -trace option) value to the server-side, so we can use Apache::TestTrace in mod_perl handlers, and be able enable/disable tracing from the commmand line. This way we diff --git a/debian/perl-framework/Apache-Test/Makefile.PL b/debian/perl-framework/Apache-Test/Makefile.PL index 713b136..2cfec1a 100644 --- a/debian/perl-framework/Apache-Test/Makefile.PL +++ b/debian/perl-framework/Apache-Test/Makefile.PL @@ -46,17 +46,6 @@ finddepth(sub { push @scripts, "$File::Find::dir/$1"; }, '.'); -my $has_mp; -eval { require mod_perl2 }; -if ($@) { - eval { require mod_perl }; - if (!$@) { - $has_mp = 1; - } -} else { - $has_mp = 2; -} - for (@scripts) { Apache::TestMM::generate_script($_); } @@ -74,6 +63,11 @@ my %prereq = ( 'Cwd' => '2.06', ); +# Apache::TestServer uses Win32::Process on Windows. +if ($^O =~ /MSWin32/i) { + $prereq{'Win32::Process'} = '0' +} + # Apache-Test/META.yml is excluded from mp2 distro to make PAUSE # indexer happy, but then perl Makefile.PL complains about a missing # META.yml, so autogenerate it if it wasn't in the distro diff --git a/debian/perl-framework/Apache-Test/RELEASE b/debian/perl-framework/Apache-Test/RELEASE index fa10838..0ec2b46 100644 --- a/debian/perl-framework/Apache-Test/RELEASE +++ b/debian/perl-framework/Apache-Test/RELEASE @@ -15,7 +15,7 @@ Instructions for Apache-Test Release Manager tags, so keep that in mind. b. commit Changes - % svn ci -m "1.41 rc1" Changes + % svn ci -m "1.44 rc1" Changes c. nuke any preinstalled Apache-Test libs and run 'make test' @@ -37,7 +37,7 @@ Instructions for Apache-Test Release Manager (or maybe longer to give most people a chance to catch up). no need to tag this package - Subject: [RELEASE CANDIDATE] Apache-Test-1.41 RC\d+ + Subject: [RELEASE CANDIDATE] Apache-Test-1.44 RC\d+ a. if problems are detected during stage 2, repeat stages 1 and 2. @@ -54,7 +54,7 @@ Instructions for Apache-Test Release Manager % make -n tag c. commit Changes - % svn ci -m "1.41 release" Changes + % svn ci -m "1.44 release" Changes d. tag % make tag @@ -73,9 +73,8 @@ Instructions for Apache-Test Release Manager o test-dev/perl.apache.org o dev/perl.apache.org o modperl/perl.apache.org - o announce/apache.org - Subject: [ANNOUNCE] Apache-Test-1.41 + Subject: [ANNOUNCE] Apache-Test-1.44 include: - MD5 sig (as it comes from CPAN upload announce). @@ -88,11 +87,11 @@ Instructions for Apache-Test Release Manager b. edit ./Changes: - start a new item with incremented version + '-dev' - =item 1.42-dev + =item 1.45-dev c. bump up version numbers in this file to make it easier to do the next release. % perl -pi.bak -e 's/(\d+)\.(\d+)/join(".", $1, $2+1)/eg' RELEASE d. commit Changes - % svn ci -m "start 1.41-dev cycle" Changes RELEASE lib/Apache/Test.pm + % svn ci -m "start 1.44-dev cycle" Changes RELEASE lib/Apache/Test.pm diff --git a/debian/perl-framework/Apache-Test/lib/Apache/Test.pm b/debian/perl-framework/Apache-Test/lib/Apache/Test.pm index e748c83..b18de11 100644 --- a/debian/perl-framework/Apache-Test/lib/Apache/Test.pm +++ b/debian/perl-framework/Apache-Test/lib/Apache/Test.pm @@ -37,7 +37,7 @@ BEGIN { use vars qw(@ISA @EXPORT %EXPORT_TAGS $VERSION %SubTests @SkipReasons); -$VERSION = '1.41'; +$VERSION = '1.44'; my @need = qw(need_lwp need_http11 need_cgi need_access need_auth need_module need_apache need_min_apache_version need_min_apache_fix diff --git a/debian/perl-framework/Apache-Test/lib/Apache/TestCommon.pm b/debian/perl-framework/Apache-Test/lib/Apache/TestCommon.pm index e65d1d3..9722bc2 100644 --- a/debian/perl-framework/Apache-Test/lib/Apache/TestCommon.pm +++ b/debian/perl-framework/Apache-Test/lib/Apache/TestCommon.pm @@ -53,7 +53,7 @@ sub run_write_test { $received += length $chunk; }); - ok t_cmp($length, $received, 'bytes in body'); + ok t_cmp($received, $length, 'bytes in body'); } } } diff --git a/debian/perl-framework/Apache-Test/lib/Apache/TestConfig.pm b/debian/perl-framework/Apache-Test/lib/Apache/TestConfig.pm index ad0b02c..274f1a0 100644 --- a/debian/perl-framework/Apache-Test/lib/Apache/TestConfig.pm +++ b/debian/perl-framework/Apache-Test/lib/Apache/TestConfig.pm @@ -59,41 +59,44 @@ use Apache::TestRun (); use vars qw(%Usage); %Usage = ( - top_dir => 'top-level directory (default is $PWD)', - t_dir => 'the t/ test directory (default is $top_dir/t)', - t_conf => 'the conf/ test directory (default is $t_dir/conf)', - t_logs => 'the logs/ test directory (default is $t_dir/logs)', - t_pid_file => 'location of the pid file (default is $t_logs/httpd.pid)', - t_conf_file => 'test httpd.conf file (default is $t_conf/httpd.conf)', - src_dir => 'source directory to look for mod_foos.so', - serverroot => 'ServerRoot (default is $t_dir)', - documentroot => 'DocumentRoot (default is $ServerRoot/htdocs', - port => 'Port [port_number|select] (default ' . DEFAULT_PORT . ')', - servername => 'ServerName (default is localhost)', - user => 'User to run test server as (default is $USER)', - group => 'Group to run test server as (default is $GROUP)', - bindir => 'Apache bin/ dir (default is apxs -q BINDIR)', - sbindir => 'Apache sbin/ dir (default is apxs -q SBINDIR)', - httpd => 'server to use for testing (default is $bindir/httpd)', - target => 'name of server binary (default is apxs -q TARGET)', - apxs => 'location of apxs (default is from Apache2::BuildConfig)', - startup_timeout => 'seconds to wait for the server to start (default is 60)', - httpd_conf => 'inherit config from this file (default is apxs derived)', - httpd_conf_extra=> 'inherit additional config from this file', - minclients => 'minimum number of concurrent clients (default is 1)', - maxclients => 'maximum number of concurrent clients (default is minclients+1)', - perlpod => 'location of perl pod documents (for testing downloads)', - proxyssl_url => 'url for testing ProxyPass / https (default is localhost)', - sslca => 'location of SSL CA (default is $t_conf/ssl/ca)', - sslcaorg => 'SSL CA organization to use for tests (default is asf)', - sslproto => 'SSL/TLS protocol version(s) to test', - libmodperl => 'path to mod_perl\'s .so (full or relative to LIBEXECDIR)', - defines => 'values to add as -D defines (for example, "VAR1 VAR2")', + top_dir => 'top-level directory (default is $PWD)', + t_dir => 'the t/ test directory (default is $top_dir/t)', + t_conf => 'the conf/ test directory (default is $t_dir/conf)', + t_logs => 'the logs/ test directory (default is $t_dir/logs)', + t_state => 'the state/ test directory (default is $t_dir/state)', + t_pid_file => 'location of the pid file (default is $t_logs/httpd.pid)', + t_conf_file => 'test httpd.conf file (default is $t_conf/httpd.conf)', + src_dir => 'source directory to look for mod_foos.so', + serverroot => 'ServerRoot (default is $t_dir)', + documentroot => 'DocumentRoot (default is $ServerRoot/htdocs', + port => 'Port [port_number|select] (default ' . DEFAULT_PORT . ')', + servername => 'ServerName (default is localhost)', + user => 'User to run test server as (default is $USER)', + group => 'Group to run test server as (default is $GROUP)', + bindir => 'Apache bin/ dir (default is apxs -q BINDIR)', + sbindir => 'Apache sbin/ dir (default is apxs -q SBINDIR)', + httpd => 'server to use for testing (default is $bindir/httpd)', + target => 'name of server binary (default is apxs -q TARGET)', + apxs => 'location of apxs (default is from Apache2::BuildConfig)', + startup_timeout => 'seconds to wait for the server to start (default is 60)', + httpd_conf => 'inherit config from this file (default is apxs derived)', + httpd_conf_extra => 'inherit additional config from this file', + minclients => 'minimum number of concurrent clients (default is 1)', + maxclients => 'maximum number of concurrent clients (default is minclients+1)', + threadsperchild => 'number of threads per child when using threaded MPMs (default is 10)', + limitrequestline => 'global LimitRequestLine setting (default is 128)', + perlpod => 'location of perl pod documents (for testing downloads)', + proxyssl_url => 'url for testing ProxyPass / https (default is localhost)', + sslca => 'location of SSL CA (default is $t_conf/ssl/ca)', + sslcaorg => 'SSL CA organization to use for tests (default is asf)', + sslproto => 'SSL/TLS protocol version(s) to test', + libmodperl => 'path to mod_perl\'s .so (full or relative to LIBEXECDIR)', + defines => 'values to add as -D defines (for example, "VAR1 VAR2")', (map { $_ . '_module_name', "$_ module name"} qw(cgi ssl thread access auth php)), ); my %filepath_conf_opts = map { $_ => 1 } - qw(top_dir t_dir t_conf t_logs t_pid_file t_conf_file src_dir serverroot + qw(top_dir t_dir t_conf t_logs t_state t_pid_file t_conf_file src_dir serverroot documentroot bindir sbindir httpd apxs httpd_conf httpd_conf_extra perlpod sslca libmodperl); @@ -298,9 +301,7 @@ sub new { $vars->{sslca} ||= catfile $vars->{t_conf}, 'ssl', 'ca'; $vars->{sslcaorg} ||= 'asf'; - if (!defined($vars->{sslproto})) { - require Apache::TestSSLCA; - + if (!defined($vars->{sslproto}) and eval { require Apache::TestSSLCA; 1; }) { $vars->{sslproto} = Apache::TestSSLCA::sslproto(); } else { @@ -308,6 +309,7 @@ sub new { } $vars->{t_logs} ||= catfile $vars->{serverroot}, 'logs'; + $vars->{t_state} ||= catfile $vars->{serverroot}, 'state'; $vars->{t_conf_file} ||= catfile $vars->{t_conf}, 'httpd.conf'; $vars->{t_pid_file} ||= catfile $vars->{t_logs}, 'httpd.pid'; @@ -326,6 +328,7 @@ sub new { $vars->{group} ||= $self->default_group; $vars->{serveradmin} ||= $self->default_serveradmin; + $vars->{threadsperchild} ||= 10; $vars->{minclients} ||= 1; $vars->{maxclients_preset} = $vars->{maxclients} || 0; # if maxclients wasn't explicitly passed try to @@ -338,13 +341,36 @@ sub new { $vars->{maxclients_preset} < $vars->{minclients}) { $vars->{minclients} = $vars->{maxclients_preset}; } + if ($vars->{minclients} < 2) { + $vars->{maxspare} = 2; + } else { + $vars->{maxspare} = $vars->{minclients}; + } + if ($vars->{maxclients} < $vars->{maxspare} + 1) { + $vars->{maxclients} = $vars->{maxspare} + 1; + } + + # for threaded mpms MinClients and MaxClients must be a + # multiple of ThreadsPerChild + { + use integer; + $vars->{minclientsthreadedmpm} = ($vars->{minclients} + $vars->{threadsperchild} - 1) / + $vars->{threadsperchild} * $vars->{threadsperchild}; + $vars->{maxclientsthreadedmpm} = ($vars->{maxclients} + $vars->{threadsperchild} - 1) / + $vars->{threadsperchild} * $vars->{threadsperchild}; + $vars->{maxsparethreadedmpm} = ($vars->{maxspare} + $vars->{threadsperchild} - 1) / + $vars->{threadsperchild} * $vars->{threadsperchild}; + $vars->{startserversthreadedmpm} = $vars->{minclientsthreadedmpm} / $vars->{threadsperchild}; + } + if ($vars->{maxsparethreadedmpm} < 2 * $vars->{threadsperchild}) { + $vars->{maxsparethreadedmpm} = 2 * $vars->{threadsperchild}; + } + if ($vars->{maxclientsthreadedmpm} < $vars->{maxsparethreadedmpm} + $vars->{threadsperchild}) { + $vars->{maxclientsthreadedmpm} = $vars->{maxsparethreadedmpm} + $vars->{threadsperchild}; + } - # for threaded mpms MaxClients must be a multiple of - # ThreadsPerChild (i.e. maxclients % minclients == 0) - # so unless -maxclients was explicitly specified use a double of - # minclients - $vars->{maxclientsthreadedmpm} = - $vars->{maxclients_preset} || $vars->{minclients} * 2; + $vars->{limitrequestline} ||= 128; + $vars->{limitrequestlinex2} = 2 * $vars->{limitrequestline}; $vars->{proxy} ||= 'off'; $vars->{proxyssl_url} ||= ''; @@ -524,6 +550,15 @@ sub configure_proxy { unless ($vars->{maxclients_preset}) { $vars->{minclients}++; $vars->{maxclients}++; + $vars->{maxspare}++; + $vars->{startserversthreadedmpm} ++; + $vars->{minclientsthreadedmpm} += $vars->{threadsperchild}; + $vars->{maxclientsthreadedmpm} += $vars->{threadsperchild}; + $vars->{maxsparethreadedmpm} += $vars->{threadsperchild}; + #In addition allow for some backend processes + #in keep-alive state. For threaded MPMs we + #already should be fine. + $vars->{maxclients} += 3; } $vars->{proxy} = $self->{vhosts}->{'mod_proxy'}->{hostport}; return $vars->{proxy}; @@ -1409,6 +1444,15 @@ sub check_vars { unless ($vars->{maxclients_preset}) { $vars->{minclients}++; $vars->{maxclients}++; + $vars->{maxspare}++; + $vars->{startserversthreadedmpm} ++; + $vars->{minclientsthreadedmpm} += $vars->{threadsperchild}; + $vars->{maxclientsthreadedmpm} += $vars->{threadsperchild}; + $vars->{maxsparethreadedmpm} += $vars->{threadsperchild}; + #In addition allow for some backend processes + #in keep-alive state. For threaded MPMs we + #already should be fine. + $vars->{maxclients} += 3; } } } @@ -1571,6 +1615,7 @@ sub generate_httpd_conf { $self->generate_index_html; $self->gendir($vars->{t_logs}); + $self->gendir($vars->{t_state}); $self->gendir($vars->{t_conf}); my @very_last_postamble = (); @@ -1737,6 +1782,11 @@ sub which { return undef unless $program; + # No need to search PATH components + # if $program already contains a path + return $program if !OSX and !WINFU and + $program =~ /\// and -f $program and -x $program; + my @dirs = File::Spec->path(); require Config; @@ -2166,6 +2216,11 @@ LogLevel debug DefaultRunTimeDir "@t_logs@" LogLevel trace8 </IfVersion> +<IfVersion > 2.4.34> +<IfDirective DefaultStateDir> + DefaultStateDir "@t_state@" +</IfDirective> +</IfVersion> </IfModule> <IfModule mod_log_config.c> @@ -2194,10 +2249,10 @@ HostnameLookups Off LockFile @t_logs@/accept.lock </IfVersion> </IfModule> - StartServers 1 - MinSpareThreads @MinClients@ - MaxSpareThreads @MinClients@ - ThreadsPerChild @MinClients@ + StartServers @StartServersThreadedMPM@ + MinSpareThreads @ThreadsPerChild@ + MaxSpareThreads @MaxSpareThreadedMPM@ + ThreadsPerChild @ThreadsPerChild@ MaxClients @MaxClientsThreadedMPM@ MaxRequestsPerChild 0 </IfModule> @@ -2210,8 +2265,8 @@ HostnameLookups Off </IfModule> NumServers 1 StartThreads @MinClients@ - MinSpareThreads @MinClients@ - MaxSpareThreads @MinClients@ + MinSpareThreads 1 + MaxSpareThreads @MaxSpare@ MaxThreadsPerChild @MaxClients@ MaxRequestsPerChild 0 </IfModule> @@ -2223,8 +2278,8 @@ HostnameLookups Off </IfVersion> </IfModule> StartServers @MinClients@ - MinSpareServers @MinClients@ - MaxSpareServers @MinClients@ + MinSpareServers 1 + MaxSpareServers @MaxSpare@ MaxClients @MaxClients@ MaxRequestsPerChild 0 </IfModule> @@ -2232,8 +2287,8 @@ HostnameLookups Off <IfDefine APACHE1> LockFile @t_logs@/accept.lock StartServers @MinClients@ - MinSpareServers @MinClients@ - MaxSpareServers @MinClients@ + MinSpareServers 1 + MaxSpareServers @MaxSpare@ MaxClients @MaxClients@ MaxRequestsPerChild 0 </IfDefine> diff --git a/debian/perl-framework/Apache-Test/lib/Apache/TestConfigParse.pm b/debian/perl-framework/Apache-Test/lib/Apache/TestConfigParse.pm index fa26f34..60e12e3 100644 --- a/debian/perl-framework/Apache-Test/lib/Apache/TestConfigParse.pm +++ b/debian/perl-framework/Apache-Test/lib/Apache/TestConfigParse.pm @@ -342,7 +342,7 @@ sub inherit_config_file_or_directory { (my $directive, $_) = split /\s+/, $_, 2; - if ($directive eq "Include") { + if ($directive eq "Include" or $directive eq "IncludeOptional") { foreach my $include (glob($self->server_file_rel2abs($_))) { $self->inherit_config_file_or_directory($include); } diff --git a/debian/perl-framework/Apache-Test/lib/Apache/TestRun.pm b/debian/perl-framework/Apache-Test/lib/Apache/TestRun.pm index f398eb5..515f69a 100644 --- a/debian/perl-framework/Apache-Test/lib/Apache/TestRun.pm +++ b/debian/perl-framework/Apache-Test/lib/Apache/TestRun.pm @@ -776,7 +776,7 @@ sub detect_relocation { return unless -e $config_file; my %inc = %INC; - eval { require "$config_file" }; + eval { require "./$config_file" }; %INC = %inc; # be stealth warn($@), return if $@; diff --git a/debian/perl-framework/Apache-Test/lib/Apache/TestRunPHP.pm b/debian/perl-framework/Apache-Test/lib/Apache/TestRunPHP.pm index df01bc4..d2965ba 100644 --- a/debian/perl-framework/Apache-Test/lib/Apache/TestRunPHP.pm +++ b/debian/perl-framework/Apache-Test/lib/Apache/TestRunPHP.pm @@ -234,7 +234,7 @@ what this means, but it isn't important to understand the gory details. instead, it is sufficient to understand that when C<Apache::Test> calls C<bar.php> it feeds the results directly to C<Test::Harness>, a module that comes with every Perl installation, and C<Test::Harness> expects -what it receives to be formatted in a very specific way. by itself, all +what it receives to be formated in a very specific way. by itself, all of this is pretty useless, so C<Apache::Test> provides PHP testers with something much better. here is a much better example: diff --git a/debian/perl-framework/Apache-Test/lib/Apache/TestSSLCA.pm b/debian/perl-framework/Apache-Test/lib/Apache/TestSSLCA.pm index 3f1a24a..ca37f16 100644 --- a/debian/perl-framework/Apache-Test/lib/Apache/TestSSLCA.pm +++ b/debian/perl-framework/Apache-Test/lib/Apache/TestSSLCA.pm @@ -23,7 +23,7 @@ use DirHandle (); use File::Path (); use File::Copy 'cp'; use File::Basename; -use Net::SSLeay; +use File::Spec::Functions qw(devnull); use Apache::TestConfig (); use Apache::TestTrace; @@ -73,6 +73,7 @@ if (Apache::Test::normalize_vstring($version) < my $sslproto = "all"; +eval { require Net::SSLeay; }; if (Apache::Test::normalize_vstring($version) >= Apache::Test::normalize_vstring("1.1.1") && !defined(&Net::SSLeay::CTX_set_post_handshake_auth)) { @@ -293,8 +294,20 @@ nsComment = This Is A Comment 1.3.6.1.4.1.18060.12.0 = DER:0c064c656d6f6e73 subjectAltName = email:\$mail$san_msupn +[ client_ext ] +extendedKeyUsage = clientAuth + [ server_ext ] subjectAltName = DNS:\$CN$san_dnssrv +extendedKeyUsage = serverAuth +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +[ ca_ext ] +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid:always,issuer +basicConstraints = critical,CA:true + EOF return $file; @@ -325,7 +338,7 @@ sub new_ca { join ':', dn_oneline('client_snakeoil'), $basic_auth_password); - openssl req => "-new -x509 -keyout $cakey -out $cacert $days", + openssl req => "-new -x509 -extensions ca_ext -keyout $cakey -out $cacert $days", config('ca'); export_cert('ca'); #useful for importing into IE @@ -366,7 +379,8 @@ sub sign_cert { my $name = shift; my $exts = ''; - $exts = ' -extensions client_ok_ext' if $name =~ /client_ok/; + $exts = ' -extensions client_ext' if $name =~ /client/; + $exts .= ' -extensions client_ok_ext' if $name =~ /client_ok/; $exts = ' -extensions server_ext' if $name =~ /server/; @@ -422,7 +436,7 @@ sub hash_certs { for my $file ($dh->read) { next unless $file =~ /\.cr[tl]$/; - chomp(my $hash = `openssl $type -noout -hash < $file`); + chomp(my $hash = `$openssl $type -noout -hash < $file`); next unless $hash; my $symlink = "$hash.r$n"; $n++; @@ -572,9 +586,10 @@ sub gendir { } sub version { - my $version = qx($openssl version); - return $1 if $version =~ /^OpenSSL (\S+) /; - return 0; + my $devnull = devnull(); + my $version = qx($openssl version 2>$devnull); + return $1 if $version =~ /^\S+SSL (\S+)/; + die "FATAL: unable to determine openssl version via `$openssl version` from: $version"; } sub dgst { diff --git a/debian/perl-framework/Apache-Test/lib/Apache/TestTrace.pm b/debian/perl-framework/Apache-Test/lib/Apache/TestTrace.pm index 19c5b29..00426ea 100644 --- a/debian/perl-framework/Apache-Test/lib/Apache/TestTrace.pm +++ b/debian/perl-framework/Apache-Test/lib/Apache/TestTrace.pm @@ -126,9 +126,9 @@ sub nc_trace { } sub trace_level { - # overridden by user/-trace + # overriden by user/-trace (defined $Level && $levels{$Level}) || - # or overridden by env var + # or overriden by env var (exists $ENV{APACHE_TEST_TRACE_LEVEL} && $levels{$ENV{APACHE_TEST_TRACE_LEVEL}}) || # or default diff --git a/debian/perl-framework/Makefile.PL b/debian/perl-framework/Makefile.PL index 86e0355..ece2205 100644 --- a/debian/perl-framework/Makefile.PL +++ b/debian/perl-framework/Makefile.PL @@ -22,6 +22,26 @@ finddepth(sub { Apache::TestMM::filter_args(); +# Temporary workaround to allow passing +# arguments to "perl Makefile.PL" +# that should go to t/TEST but are not yet +# supported in an Apache::Test release. +# Code borrowed from Apache::TestMM::filter_args(). +my %local_args = ( + limitrequestline => 'Value for LimitRequestLine', + limitrequestlinex2 => 'Twice the value for LimitRequestLine', +); +my($argv, $args_vars) = Apache::TestConfig::filter_args(\@ARGV, \%local_args); +@ARGV = @$argv; +# Merge given vars with default values +my %local_vars = ( + limitrequestline => '128', + limitrequestlinex2 => '256', +); +map {$local_vars{$_} = $args_vars->{$_}} keys %$args_vars; + +push(@Apache::TestMM::Argv, %local_vars); + for my $script (@scripts) { Apache::TestMM::generate_script($script); } diff --git a/debian/perl-framework/NOTICE b/debian/perl-framework/NOTICE index 9038837..b823d44 100644 --- a/debian/perl-framework/NOTICE +++ b/debian/perl-framework/NOTICE @@ -1,5 +1,5 @@ Apache HTTP Server Test Framework -Copyright 2018 The Apache Software Foundation. +Copyright 2020 The Apache Software Foundation. This product includes software developed at The Apache Software Foundation (http://www.apache.org/). diff --git a/debian/perl-framework/README b/debian/perl-framework/README index 24d2ab6..639d684 100644 --- a/debian/perl-framework/README +++ b/debian/perl-framework/README @@ -29,18 +29,16 @@ http://svn.apache.org/viewvc/perl/modperl/docs/trunk/src/docs/general/testing/te To run the tests for all Apache web server modules, some additional CPAN modules will be required. If the tests don't work, make sure that you have up to date versions of each of these perl modules: -- HTTP::DAV (DAV tests) -- DateTime (mod_include tests) -- Time::HiRes -- Protocol::HTTP2::Client and AnyEvent (mod_http2 tests) -- Test -- Test::Harness -- Crypt::SSLeay -- Net::SSLeay -- IO::Socket::SSL -- IO::Socket::IP -- IO::Select -- LWP::Protocol::https + +``` +cpan App::cpanminus +cpanm Bundle::ApacheTest \ + HTTP::DAV DateTime Time::HiRes \ + Test::Harness Crypt::SSLeay Net::SSLeay IO::Socket::SSL \ + IO::Socket::IP IO::Select LWP::Protocol::https AnyEvent \ + AnyEvent::WebSocket::Client LWP::Protocol::AnyEvent::http FCGI +``` + Quick Start ----------- diff --git a/debian/perl-framework/STATUS b/debian/perl-framework/STATUS index f1fb35d..9975ca7 100644 --- a/debian/perl-framework/STATUS +++ b/debian/perl-framework/STATUS @@ -1,5 +1,5 @@ httpd-test/perl-framework STATUS: -*-text-*- -Last modified at [$Date: 2018-10-10 16:23:46 +0200 (Wed, 10 Oct 2018) $] +Last modified at [$Date: 2018-10-10 18:23:46 +0400 (Wed, 10 Oct 2018) $] Stuff to do: * finish the t/TEST exit code issue (ORed with 0x2C if diff --git a/debian/perl-framework/c-modules/echo_post/mod_echo_post.c b/debian/perl-framework/c-modules/echo_post/mod_echo_post.c index 0461735..ebda4d5 100644 --- a/debian/perl-framework/c-modules/echo_post/mod_echo_post.c +++ b/debian/perl-framework/c-modules/echo_post/mod_echo_post.c @@ -66,7 +66,7 @@ static int echo_post_handler(request_rec *r) "[mod_echo_post] read %ld bytes (wanted %d, remaining=%ld)", nrd, sizeof(buff), r->remaining); #else - ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, + ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r, "[mod_echo_post] read %ld bytes (wanted %" APR_SIZE_T_FMT ", remaining=%" APR_OFF_T_FMT ")", nrd, sizeof(buff), r->remaining); diff --git a/debian/perl-framework/c-modules/test_pass_brigade/mod_test_pass_brigade.c b/debian/perl-framework/c-modules/test_pass_brigade/mod_test_pass_brigade.c index 07a9fce..99bc95a 100644 --- a/debian/perl-framework/c-modules/test_pass_brigade/mod_test_pass_brigade.c +++ b/debian/perl-framework/c-modules/test_pass_brigade/mod_test_pass_brigade.c @@ -38,10 +38,10 @@ static int test_pass_brigade_handler(request_rec *r) httpd_test_split_qs_numbers(r, &buff_size, &remaining, NULL); - fprintf(stderr, "[mod_test_pass_brigade] " - "going to echo %" APR_SIZE_T_FMT " bytes with " - "buffer size=%" APR_SIZE_T_FMT "\n", - remaining, buff_size); + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, + "going to echo %" APR_SIZE_T_FMT " bytes with " + "buffer size=%" APR_SIZE_T_FMT "", + remaining, buff_size); buff = malloc(buff_size); memset(buff, 'a', buff_size); @@ -50,35 +50,51 @@ static int test_pass_brigade_handler(request_rec *r) while (total < remaining) { int left = (remaining - total); int len = left <= buff_size ? left : buff_size; - apr_bucket *bucket = apr_bucket_heap_create(buff, len, NULL, - c->bucket_alloc); + apr_bucket *bucket = apr_bucket_transient_create(buff, len, + c->bucket_alloc); apr_status_t status; apr_brigade_cleanup(bb); APR_BRIGADE_INSERT_TAIL(bb, bucket); + if (len + total == remaining) { + bucket = apr_bucket_eos_create(c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, bucket); + +#if 0 + /* ###### A FLUSH should not be strictly necessary here + * but inserting one apears to work around intermittent + * failures when running t/apache/pass_brigade.t under + * worker. */ + bucket = apr_bucket_flush_create(c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, bucket); +#endif + + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, + "[mod_test_pass_brigade] sending EOS"); + } status = ap_pass_brigade(r->output_filters->next, bb); if (status != APR_SUCCESS) { apr_brigade_destroy(bb); - ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, - status, r->server, - "[mod_test_pass_brigade] ap_pass_brigade failed"); + ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, + "[mod_test_pass_brigade] ap_pass_brigade failed"); free(buff); return HTTP_INTERNAL_SERVER_ERROR; } total += len; - fprintf(stderr, "[mod_test_pass_brigade] wrote %d of %d bytes\n", - len, len); + ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r, + "[mod_test_pass_brigade] wrote %d of %d bytes", + len, len); } apr_brigade_destroy(bb); - fprintf(stderr, - "[mod_test_pass_brigade] done writing %" APR_SIZE_T_FMT - " of %" APR_SIZE_T_FMT " bytes\n", - total, remaining); + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, + "[mod_test_pass_brigade] done writing %" APR_SIZE_T_FMT + " of %" APR_SIZE_T_FMT " bytes", + total, remaining); free(buff); return OK; diff --git a/debian/perl-framework/c-modules/test_rwrite/mod_test_rwrite.c b/debian/perl-framework/c-modules/test_rwrite/mod_test_rwrite.c index 5675edd..64f1542 100644 --- a/debian/perl-framework/c-modules/test_rwrite/mod_test_rwrite.c +++ b/debian/perl-framework/c-modules/test_rwrite/mod_test_rwrite.c @@ -36,8 +36,9 @@ static int test_rwrite_handler(request_rec *r) httpd_test_split_qs_numbers(r, &buff_size, &remaining, NULL); - fprintf(stderr, "[mod_test_rwrite] going to echo %" APR_SIZE_T_FMT " bytes\n", - remaining); + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, + "[mod_test_rwrite] going to echo %" APR_SIZE_T_FMT " bytes", + remaining); buff = malloc(buff_size); memset(buff, 'a', buff_size); @@ -48,14 +49,14 @@ static int test_rwrite_handler(request_rec *r) long nrd = ap_rwrite(buff, len, r); total += nrd; - fprintf(stderr, "[mod_test_rwrite] wrote %ld of %d bytes\n", - nrd, len); + ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r, + "[mod_test_rwrite] wrote %ld of %d bytes", nrd, len); } - - fprintf(stderr, - "[mod_test_rwrite] done writing %" APR_SIZE_T_FMT - " of %" APR_SIZE_T_FMT " bytes\n", - total, remaining); + + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, + "[mod_test_rwrite] done writing %" APR_SIZE_T_FMT + " of %" APR_SIZE_T_FMT " bytes", + total, remaining); free(buff); return OK; diff --git a/debian/perl-framework/c-modules/test_session/mod_test_session.c b/debian/perl-framework/c-modules/test_session/mod_test_session.c index c9e0ea2..4099cbe 100644 --- a/debian/perl-framework/c-modules/test_session/mod_test_session.c +++ b/debian/perl-framework/c-modules/test_session/mod_test_session.c @@ -34,7 +34,7 @@ SessionMaxAge 100 </Location> <IfModule mod_version.c> - <IfVersion >= 2.5.0> + <IfVersion >= 2.4.41> <Location /sessiontest/on/expire/cache> SessionExpiryUpdateInterval 50 </Location> diff --git a/debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c b/debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c index a7177a1..c9bc762 100644 --- a/debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c +++ b/debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c @@ -114,7 +114,7 @@ static int test_ssl_ext_lookup(request_rec *r) static int test_ssl_var_lookup(request_rec *r) { - char *value; + const char *value; if (strcmp(r->handler, "test-ssl-var-lookup")) { return DECLINED; diff --git a/debian/perl-framework/scripts/httpd-sub.ldif b/debian/perl-framework/scripts/httpd-sub.ldif new file mode 100644 index 0000000..7908cb6 --- /dev/null +++ b/debian/perl-framework/scripts/httpd-sub.ldif @@ -0,0 +1,15 @@ +dn: cn=httpd,dc=example,dc=com +objectClass: applicationProcess +objectClass: simpleSecurityObject +cn: httpd +description: Service Account for httpd +userPassword: mod_authnz_ldap + +dn: ou=dept,dc=example,dc=com +ou: dept +objectClass: organizationalUnit + +# Group +dn: cn=Subgroup,ou=dept,dc=example,dc=com +objectClass: groupOfUniqueNames +uniqueMember: uid=beta,dc=example,dc=com diff --git a/debian/perl-framework/scripts/httpd.ldif b/debian/perl-framework/scripts/httpd.ldif new file mode 100644 index 0000000..b9211ee --- /dev/null +++ b/debian/perl-framework/scripts/httpd.ldif @@ -0,0 +1,56 @@ +dn: cn=httpd,dc=example,dc=com +objectClass: applicationProcess +objectClass: simpleSecurityObject +cn: httpd +description: Service Account for httpd +userPassword: mod_authnz_ldap + +dn: uid=alpha,dc=example,dc=com +objectClass: inetOrgPerson +cn: Alpha Person +givenName: Alpha +sn: Person +uid: alpha +roomnumber: 42 +userPassword: Alpha + +dn: uid=beta,dc=example,dc=com +objectClass: inetOrgPerson +cn: Beta Person +givenName: Beta +sn: Person +uid: beta +roomnumber: 41 +userPassword: Beta + +dn: uid=gamma,dc=example,dc=com +objectClass: inetOrgPerson +cn: Gamma Person +givenName: Gamma +sn: Person +uid: gamma +roomnumber: 101 +userPassword: Gamma + +dn: uid=delta,dc=example,dc=com +objectClass: inetOrgPerson +cn: Delta Person +givenName: Delta +sn: Person +uid: delta +roomnumber: 43 +userPassword: Delta + +# Group +dn: cn=Group One, dc=example,dc=com +objectClass: groupOfUniqueNames +uniqueMember: uid=alpha,dc=example,dc=com +uniqueMember: uid=beta,dc=example,dc=com +uniqueMember: uid=delta,dc=example,dc=com + +# Referral +dn: ou=dept,dc=example,dc=com +objectClass: referral +objectClass: extensibleObject +ou: dept +ref: ldap://localhost:8390/ou=dept,dc=example,dc=com diff --git a/debian/perl-framework/scripts/ldap-init.sh b/debian/perl-framework/scripts/ldap-init.sh new file mode 100755 index 0000000..148a9d0 --- /dev/null +++ b/debian/perl-framework/scripts/ldap-init.sh @@ -0,0 +1,28 @@ +#!/bin/bash -ex +DOCKER=${DOCKER:-`which docker 2>/dev/null || which podman 2>/dev/null`} +cid1=`${DOCKER} run -d -p 8389:389 httpd_ldap` +cid2=`${DOCKER} run -d -p 8390:389 httpd_ldap` +sleep 5 + +# For the CentOS slapd configuration, load some default schema: +if ${DOCKER} exec -i $cid1 test -f /etc/centos-release; then + ${DOCKER} exec -i $cid1 /usr/bin/ldapadd -Y EXTERNAL -H ldapi:// < scripts/slapd-config.ldif + ${DOCKER} exec -i $cid2 /usr/bin/ldapadd -Y EXTERNAL -H ldapi:// < scripts/slapd-config.ldif + + for sc in cosine inetorgperson nis; do + fn=/etc/openldap/schema/${sc}.ldif + ${DOCKER} exec -i $cid1 /usr/bin/ldapadd -Y EXTERNAL -H ldapi:// -f ${fn} + ${DOCKER} exec -i $cid2 /usr/bin/ldapadd -Y EXTERNAL -H ldapi:// -f ${fn} + done + + ldapadd -x -H ldap://localhost:8390 -D cn=admin,dc=example,dc=com -w travis < scripts/suffix.ldif + ldapadd -x -H ldap://localhost:8389 -D cn=admin,dc=example,dc=com -w travis < scripts/suffix.ldif +fi + +# Disable anonymous bind; must be done as an authenticated local user +# hence via ldapadd -Y EXTERNAL within the container. +${DOCKER} exec -i $cid1 /usr/bin/ldapadd -Y EXTERNAL -H ldapi:// < scripts/non-anon.ldif +${DOCKER} exec -i $cid2 /usr/bin/ldapadd -Y EXTERNAL -H ldapi:// < scripts/non-anon.ldif + +ldapadd -x -H ldap://localhost:8389 -D cn=admin,dc=example,dc=com -w travis < scripts/httpd.ldif +ldapadd -x -H ldap://localhost:8390 -D cn=admin,dc=example,dc=com -w travis < scripts/httpd-sub.ldif diff --git a/debian/perl-framework/scripts/memcached-init.sh b/debian/perl-framework/scripts/memcached-init.sh new file mode 100755 index 0000000..f90f055 --- /dev/null +++ b/debian/perl-framework/scripts/memcached-init.sh @@ -0,0 +1,8 @@ +#!/bin/bash -ex +DOCKER=${DOCKER:-`which docker 2>/dev/null || which podman 2>/dev/null`} +${DOCKER} build -t httpd_memcached - <<EOF +FROM quay.io/centos/centos:stream8 +RUN yum install -y memcached +CMD /usr/bin/memcached -u memcached -v +EOF +${DOCKER} run -d -p 11211:11211 httpd_memcached diff --git a/debian/perl-framework/scripts/non-anon.ldif b/debian/perl-framework/scripts/non-anon.ldif new file mode 100644 index 0000000..535312c --- /dev/null +++ b/debian/perl-framework/scripts/non-anon.ldif @@ -0,0 +1,14 @@ +dn: cn=config +changetype: modify +add: olcDisallows +olcDisallows: bind_anon + +dn: cn=config +changetype: modify +add: olcRequires +olcRequires: authc + +dn: olcDatabase={-1}frontend,cn=config +changetype: modify +add: olcRequires +olcRequires: authc diff --git a/debian/perl-framework/scripts/redis-init.sh b/debian/perl-framework/scripts/redis-init.sh new file mode 100755 index 0000000..f950138 --- /dev/null +++ b/debian/perl-framework/scripts/redis-init.sh @@ -0,0 +1,8 @@ +#!/bin/bash -ex +DOCKER=${DOCKER:-`which docker 2>/dev/null || which podman 2>/dev/null`} +${DOCKER} build -t httpd_redis - <<EOF +FROM quay.io/centos/centos:stream8 +RUN yum install -y redis +CMD /usr/bin/redis-server +EOF +${DOCKER} run -d -p 6379:6379 httpd_redis diff --git a/debian/perl-framework/scripts/slapd-config.ldif b/debian/perl-framework/scripts/slapd-config.ldif new file mode 100644 index 0000000..fa9763e --- /dev/null +++ b/debian/perl-framework/scripts/slapd-config.ldif @@ -0,0 +1,10 @@ +dn: olcDatabase={2}hdb,cn=config +changetype: modify +replace: olcSuffix +olcSuffix: dc=example,dc=com +- +replace: olcRootDN +olcRootDN: cn=admin,dc=example,dc=com +- +add: olcRootPW +olcRootPW: travis diff --git a/debian/perl-framework/scripts/suffix.ldif b/debian/perl-framework/scripts/suffix.ldif new file mode 100644 index 0000000..bf5cbdb --- /dev/null +++ b/debian/perl-framework/scripts/suffix.ldif @@ -0,0 +1,5 @@ +dn: dc=example,dc=com +objectClass: organization +objectClass: dcObject +dc: example +o: Example Organization diff --git a/debian/perl-framework/t/ab/base.t b/debian/perl-framework/t/ab/base.t index 722c714..fe565f6 100644 --- a/debian/perl-framework/t/ab/base.t +++ b/debian/perl-framework/t/ab/base.t @@ -29,14 +29,14 @@ sub run_and_gather_output { my $ab_path = catfile $vars->{bindir}, "ab"; my $http_url = Apache::TestRequest::module2url("core", {scheme => 'http', path => '/'}); -my $http_results = run_and_gather_output("$ab_path -B 127.0.0.1 -q -n 10 $http_url"); -ok ($http_results->{status} == 0); -ok (scalar(@{$http_results->{stderr}}) == 0); +my $http_results = run_and_gather_output("ASAN_OPTIONS='detect_leaks=0' $ab_path -B 127.0.0.1 -q -n 10 $http_url"); +ok $http_results->{status}, 0; +ok scalar(@{$http_results->{stderr}}), 0; if ($vars->{ssl_module_name}) { my $https_url = Apache::TestRequest::module2url($vars->{ssl_module_name}, {scheme => 'https', path => '/'}); - my $https_results = run_and_gather_output("$ab_path -B 127.0.0.1 -q -n 10 $https_url"); - ok ($https_results->{status} == 0); + my $https_results = run_and_gather_output("ASAN_OPTIONS='detect_leaks=0' $ab_path -B 127.0.0.1 -q -n 10 $https_url"); + ok $https_results->{status}, 0; ok (scalar(@{$https_results->{stderr}}), 0, "https had stderr output:" . Dumper $https_results->{stderr}); diff --git a/debian/perl-framework/t/apache/expr.t b/debian/perl-framework/t/apache/expr.t index 58c4a57..7d62bc0 100644 --- a/debian/perl-framework/t/apache/expr.t +++ b/debian/perl-framework/t/apache/expr.t @@ -268,6 +268,8 @@ if (have_min_apache_version("2.5")) { [ "'email:<redacted2>' -in split s/$SAN_split/\$1/, $SAN_list_one" => 0 ], [ "'IP Address:%{REMOTE_ADDR}' -in split/, /, join $SAN_list_one" => 1 ], + [ "replace(%{REQUEST_METHOD}, 'E', 'O') == 'GOT'" => 1], + [ "replace(%{REQUEST_METHOD}, 'E', 'O') == 'GET'" => 0], )); } diff --git a/debian/perl-framework/t/apache/expr_string.t b/debian/perl-framework/t/apache/expr_string.t index a9115ee..4682d4a 100644 --- a/debian/perl-framework/t/apache/expr_string.t +++ b/debian/perl-framework/t/apache/expr_string.t @@ -3,10 +3,12 @@ use warnings FATAL => 'all'; use Apache::Test; use Apache::TestRequest; -use Apache::TestUtil qw(t_write_file t_start_error_log_watch t_finish_error_log_watch); +use Apache::TestUtil qw(t_write_file t_start_error_log_watch t_finish_error_log_watch t_cmp); use File::Spec; +use Time::HiRes qw(usleep); + # test ap_expr Apache::TestRequest::user_agent(keep_alive => 1); @@ -62,6 +64,8 @@ foreach my $t (@test_cases) { 'SomeHeader' => 'SomeValue', 'User-Agent' => 'SomeAgent', 'Referer' => 'SomeReferer'); + ### Sleep here, attempt to avoid intermittent failures. + usleep(250000); my @loglines = t_finish_error_log_watch(); my @evalerrors = grep {/(?:internal evaluation error|flex scanner jammed)/i @@ -97,8 +101,7 @@ foreach my $t (@test_cases) { [ ]\(log_transaction) # trailing hook info (LogLevel debug and higher) }x ) { my $result = $1; - print "Got '$result', expected '$expect'\n"; - ok($result eq $expect); + ok t_cmp($result, $expect, "log message @msg didn't match"); } else { print "Can't extract expr result from log message:\n@msg\n"; diff --git a/debian/perl-framework/t/apache/hostcheck.t b/debian/perl-framework/t/apache/hostcheck.t index a295af7..62bb38d 100644 --- a/debian/perl-framework/t/apache/hostcheck.t +++ b/debian/perl-framework/t/apache/hostcheck.t @@ -21,7 +21,7 @@ my @test_cases = ( [ "GET / HTTP/1.1\r\nHost: nvh-strict\r\n\r\n" => 200, 200, "NVH matches"], [ "GET / HTTP/1.1\r\nHost: nvh-strict:1\r\n\r\n" => 200, 200, "NVH matches port ignored"], ); -plan tests => scalar(@test_cases) * 2, need_min_apache_version('2.5.1'); +plan tests => scalar(@test_cases) * 2, need_min_apache_version('2.4.49'); foreach my $vhosts ((["default" => 1], ["core" => 2])) { @@ -41,11 +41,10 @@ foreach my $vhosts ((["default" => 1], ["core" => 2])) { next; } + print "# SENDING to " . peer($sock) . "\n# $req\n"; $sock->print($req); $sock->shutdown(1); - sleep(0.1); $req = escape($req); - print "# SENDING to " . peer($sock) . "\n# $req\n"; my $response_data = ""; my $buf; diff --git a/debian/perl-framework/t/apache/leaks.t b/debian/perl-framework/t/apache/leaks.t index 99ce600..bb7b329 100644 --- a/debian/perl-framework/t/apache/leaks.t +++ b/debian/perl-framework/t/apache/leaks.t @@ -9,61 +9,55 @@ my $url = "/memory_track"; my $init_iters = 2000; my $iters = 500; +my $active = GET_RC($url) == 200; + my $num_tests = $init_iters + $iters * 2; -plan tests => $num_tests; +plan tests => $num_tests, + need { "mod_memory_track not activated" => $active }; ### this doesn't seem sufficient to force all requests over a single ### persistent connection any more, is there a better trick? Apache::TestRequest::user_agent(keep_alive => 1); Apache::TestRequest::scheme('http'); -my $r = GET $url; +my $cid = -1; +my $mem; -if ($r->code != 200) { - # these tests will be skipped for async MPMs or with an APR not - # built with --enable-pool-debug. - skip "mod_memory_track not activated" foreach (1..$num_tests); +# initial iterations should get workers to steady-state memory use. +foreach (1..$init_iters) { + ok t_cmp(GET_RC($url), 200, "200 response"); } -else { - my $cid = -1; - my $mem; - - # initial iterations should get workers to steady-state memory use. - foreach (1..$init_iters) { - ok t_cmp(GET_RC($url), 200, "200 response"); - } - # now test whether c->pool memory is increasing for further - # requests on a given conn_rec (matched by id)... could track them - # all with a bit more effort. - foreach (1..$iters) { - $r = GET $url; +# now test whether c->pool memory is increasing for further +# requests on a given conn_rec (matched by id)... could track them +# all with a bit more effort. +foreach (1..$iters) { + my $r = GET $url; - print "# iter $_\n"; - - ok t_cmp($r->code, 200, "got response"); + print "# iter $_\n"; + + ok t_cmp($r->code, 200, "got response"); - my $content = $r->content; - chomp $content; - my ($key, $id, $bytes) = split ',', $content; + my $content = $r->content; + chomp $content; + my ($key, $id, $bytes) = split ',', $content; - print "# $key, $id, $bytes\n"; + print "# $key, $id, $bytes\n"; - if ($cid == -1) { - $cid = $id; - $mem = $bytes; - ok 1; - } - elsif ($cid != $id) { - skip "using wrong connection"; - } - elsif ($bytes > $mem) { - print "# error: pool memory increased from $mem to $bytes!\n"; - ok 0; - } - else { - ok 1; - } + if ($cid == -1) { + $cid = $id; + $mem = $bytes; + ok 1; + } + elsif ($cid != $id) { + skip "using wrong connection"; + } + elsif ($bytes > $mem) { + print "# error: pool memory increased from $mem to $bytes!\n"; + ok 0; + } + else { + ok 1; } } diff --git a/debian/perl-framework/t/apache/limits.t b/debian/perl-framework/t/apache/limits.t index 124f731..a475f82 100644 --- a/debian/perl-framework/t/apache/limits.t +++ b/debian/perl-framework/t/apache/limits.t @@ -12,7 +12,7 @@ use Apache::TestUtil; # # These values are chosen to exceed the limits in extra.conf, namely: # -# LimitRequestLine 128 +# LimitRequestLine @limitrequestline@ # LimitRequestFieldSize 1024 # LimitRequestFields 32 # <Directory @SERVERROOT@/htdocs/apache/limits> @@ -20,10 +20,12 @@ use Apache::TestUtil; # </Directory> # +my $limitrequestlinex2 = Apache::Test::config()->{vars}->{limitrequestlinex2}; + my @conditions = qw(requestline fieldsize fieldcount bodysize merged_fieldsize); my %params = ('requestline-succeed' => "/apache/limits/", - 'requestline-fail' => ("/apache/limits/" . ('a' x 256)), + 'requestline-fail' => ("/apache/limits/" . ('a' x $limitrequestlinex2)), 'fieldsize-succeed' => 'short value', 'fieldsize-fail' => ('a' x 2048), 'fieldcount-succeed' => 1, diff --git a/debian/perl-framework/t/apache/mergeslashes.t b/debian/perl-framework/t/apache/mergeslashes.t new file mode 100644 index 0000000..850fc93 --- /dev/null +++ b/debian/perl-framework/t/apache/mergeslashes.t @@ -0,0 +1,117 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestRequest; +use Apache::TestUtil; +use MIME::Base64; +use Data::Dumper; +use HTTP::Response; +use Socket; + +# undef: HTTPD should drop connection without error message + +my @test_cases = ( + # request, status code global, status code 'mergeslashes off' VH, msg + [ "GET /authz_core/a/b/c/index.html HTTP/1.1\r\nHost: merge-default\r\nConnection: close\r\n\r\n" => 403, "exact match"], + [ "GET //authz_core/a/b/c/index.html HTTP/1.1\r\nHost: merge-default\r\nConnection: close\r\n\r\n" => 403, "merged even at front"], + [ "GET ///authz_core/a/b/c/index.html HTTP/1.1\r\nHost: merge-default\r\nConnection: close\r\n\r\n" => 403, "merged even at front"], + [ "GET /authz_core/a/b/c//index.html HTTP/1.1\r\nHost: merge-default\r\nConnection: close\r\n\r\n" => 403, "c// should be merged"], + [ "GET /authz_core/a//b/c/index.html HTTP/1.1\r\nHost: merge-default\r\nConnection: close\r\n\r\n" => 403, "a// should be merged"], + [ "GET /authz_core/a//b/c/index.html HTTP/1.1\r\nHost: merge-disabled\r\nConnection: close\r\n\r\n" => 403, "a// matches locationmatch"], + [ "GET /authz_core/a/b/c//index.html HTTP/1.1\r\nHost: merge-disabled\r\nConnection: close\r\n\r\n" => 200, "c// doesn't match locationmatch"], + [ "GET /authz_core/a/b/d/index.html HTTP/1.1\r\nHost: merge-disabled\r\nConnection: close\r\n\r\n" => 403, "baseline failed", need_min_apache_version('2.4.47')], + [ "GET /authz_core/a/b//d/index.html HTTP/1.1\r\nHost: merge-disabled\r\nConnection: close\r\n\r\n" => 403, "b//d not merged for Location with OFF",need_min_apache_version('2.4.47')], +); + +plan tests => scalar(@test_cases), need_min_apache_version('2.4.39'); + + + foreach my $t (@test_cases) { + my $req = $t->[0]; + my $expect = $t->[1]; + my $desc = $t->[2]; + my $cond = $t->[3]; + my $decoded; + + if (defined($cond) && !$cond) { + skip("n/a"); + } + + my $sock = Apache::TestRequest::vhost_socket("core"); + if (!$sock) { + print "# failed to connect\n"; + ok(0); + next; + } + + $sock->print($req); + sleep(0.1); + $req = escape($req); + print "# SENDING to " . peer($sock) . "\n# $req\n"; + + my $response_data = ""; + my $buf; + while ($sock->read($buf, 10000) > 0) { + $response_data .= $buf; + } + my $response = HTTP::Response->parse($response_data); + if ($decoded) { + $response_data =~ s/<title>.*/.../s; + my $out = escape($response_data); + $out =~ s{\\n}{\\n\n# }g; + print "# RESPONSE:\n# $out\n"; + } + if (! defined $response) { + die "HTTP::Response->parse failed"; + } + my $rc = $response->code; + if (! defined $rc) { + if (! defined $expect) { + print "# expecting dropped connection and HTTPD dropped connection\n"; + ok(1); + } + else { + print "# expecting $expect, but HTTPD dropped the connection\n"; + ok(0); + } + } + elsif ($expect > 100) { + print "# expected $expect, got " . $response->code . " for $desc\n"; + ok ($response->code, $expect, $desc ); + } + elsif ($expect == 90) { + print "# expecting headerless HTTP/0.9 body, got response\n"; + ok (1); + } + elsif ($expect) { + print "# expecting success, got ", $rc, ": $desc\n"; + ok ($rc >= 200 && $rc < 400); + } + else { + print "# expecting error, got ", $rc, ": $desc\n"; + ok ($rc >= 400); + } + } + +sub escape +{ + my $in = shift; + $in =~ s{\\}{\\\\}g; + $in =~ s{\r}{\\r}g; + $in =~ s{\n}{\\n}g; + $in =~ s{\t}{\\t}g; + $in =~ s{([\x00-\x1f])}{sprintf("\\x%02x", ord($1))}ge; + return $in; +} + +sub peer +{ + my $sock = shift; + my $hersockaddr = getpeername($sock); + return "<disconnected>" if !$hersockaddr; + my ($port, $iaddr) = sockaddr_in($hersockaddr); + my $herhostname = gethostbyaddr($iaddr, AF_INET); + my $herstraddr = inet_ntoa($iaddr); + return "$herstraddr:$port"; +} diff --git a/debian/perl-framework/t/apache/pr64339.t b/debian/perl-framework/t/apache/pr64339.t new file mode 100644 index 0000000..00097e6 --- /dev/null +++ b/debian/perl-framework/t/apache/pr64339.t @@ -0,0 +1,46 @@ + +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestUtil; +use Apache::TestRequest; + +my @testcases = ( + # Backend sends Content-Type: application/xml; charset=utf-8 + ['/doc.xml', "application/xml; charset=utf-8", "fóó\n" ], + + # Backend sends Content-Type: application/foo+xml; charset=utf-8 + ['/doc.fooxml', "application/foo+xml; charset=utf-8", "fóó\n" ], + + # Backend sends Content-Type: application/notreallyxml (no charset) + # This should NOT be transformed or have a charset added. + ['/doc.notxml', "application/notreallyxml", "f\xf3\xf3\n" ], + + # Sent with charset=ISO-8859-1 - should be transformed to utf-8 + ['/doc.isohtml', "text/html;charset=utf-8", "<html><body><p>fóó\n</p></body></html>" ], +); + +# mod_xml2enc on trunk behaves quite differently to the 2.4.x version +# after r1785780, and does NOT transform the response body. Unclear if +# this is a regression, so restricting this test to 2.4.x (for now). + +if (have_min_apache_version('2.5.0')) { + print "1..0 # skip: Test only valid for 2.4.x"; + exit 0; +} + +if (not have_min_apache_version('2.4.59')) { + print "1..0 # skip: Test not valid before 2.4.59"; + exit 0; +} + +plan tests => (3*scalar @testcases), need [qw(xml2enc alias proxy_html proxy)]; + +foreach my $t (@testcases) { + my $r = GET("/modules/xml2enc/front".$t->[0]); + + ok t_cmp($r->code, 200, "fetching ".$t->[0]); + ok t_cmp($r->header('Content-Type'), $t->[1], "content-type header test for ".$t->[0]); + ok t_cmp($r->content, $t->[2], "content test for ".$t->[0]); +} diff --git a/debian/perl-framework/t/apache/teclchunk.t b/debian/perl-framework/t/apache/teclchunk.t new file mode 100644 index 0000000..b804368 --- /dev/null +++ b/debian/perl-framework/t/apache/teclchunk.t @@ -0,0 +1,57 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestUtil; +use Apache::TestCommon (); +use Apache::TestRequest (); + +my $module = 'default'; + +if (!have_min_apache_version('2.5.0')) { + print "1..0 # skip: Not supported yet"; + exit 0; +} + +plan tests => 4, ['echo_post_chunk']; + +my $sock = Apache::TestRequest::vhost_socket($module); +ok $sock; + +Apache::TestRequest::socket_trace($sock); +$sock->print("POST /echo_post_chunk HTTP/1.1\r\n"); +$sock->print("Host: localhost\r\n"); +$sock->print("Content-Length: 77\r\n"); +$sock->print("Transfer-Encoding: chunked\r\n"); +$sock->print("\r\n"); +$sock->print("0\r\n"); +$sock->print("X-Chunk-Trailer: $$\r\n"); +$sock->print("\r\n"); +$sock->print("GET /i_do_not_exist_in_your_wildest_imagination HTTP/1.1\r\n"); +$sock->print("Host: localhost\r\n"); + +# Read the status line +chomp(my $response = Apache::TestRequest::getline($sock) || ''); +$response =~ s/\s$//; +ok t_cmp($response, "HTTP/1.1 200 OK", "response codes"); + +# Read the rest +do { + chomp($response = Apache::TestRequest::getline($sock)); + $response =~ s/\s$//; +} +while ($response ne ""); + +# Do the next request... that MUST fail. +$sock->print("\r\n"); +$sock->print("\r\n"); + +# read the trailer (pid) +$response = Apache::TestRequest::getline($sock); +chomp($response) if (defined($response)); +ok t_cmp($response, "$$", "trailer (pid)"); + +# Make sure we have not received a 404. +chomp($response = Apache::TestRequest::getline($sock) || 'NO'); +$response =~ s/\s$//; +ok t_cmp($response, "NO", "no response"); diff --git a/debian/perl-framework/t/conf/core.conf.in b/debian/perl-framework/t/conf/core.conf.in index 10e411f..c82f375 100644 --- a/debian/perl-framework/t/conf/core.conf.in +++ b/debian/perl-framework/t/conf/core.conf.in @@ -2,10 +2,11 @@ # will be converted to a set of NVH'es on the same dynamic port, so they # are collected here. +MaxMemFree 1 <VirtualHost strict-default:core> ServerName default-strict - <IfVersion >= 2.5.1> + <IfVersion >= 2.4.49> # StrictHostCheck can only be configure globally or in a "default" vhost StrictHostCheck ON </IfVersion> @@ -15,3 +16,40 @@ ServerAlias nvh-strict-alias # Implicitly StrictHostCheck ON from default VH above </VirtualHost> + +# MergeSlashes +<IfVersion >= 2.4.39> + <VirtualHost merge-default:core> + ServerName merge-default + <Directory @DocumentRoot@/authz_core/> + require all granted + </Directory> + <LocationMatch ^/authz_core/a/b/c/index.html> + require all denied + </LocationMatch> + </virtualHost> + <VirtualHost merge-disabled:core> + ServerName merge-disabled + MergeSlashes OFF + <Directory @DocumentRoot@/authz_core/> + require all granted + </Directory> + <LocationMatch ^/authz_core/a/b/c/index.html> + require all denied + </LocationMatch> + <LocationMatch ^/authz_core/a//b/c/index.html> + require all denied + </LocationMatch> + <Location /authz_core/a/b/d> + require all denied + </Location> + <ifModule rewrite_module> + <Location /CVE-2020-1927/> + RewriteEngine ON + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L] + </Location> + </ifModule> + </virtualHost> +</IfVersion> + diff --git a/debian/perl-framework/t/conf/extra.conf.in b/debian/perl-framework/t/conf/extra.conf.in index abb699f..2719985 100644 --- a/debian/perl-framework/t/conf/extra.conf.in +++ b/debian/perl-framework/t/conf/extra.conf.in @@ -97,6 +97,7 @@ AddLanguage fr .fr AddLanguage de .de AddLanguage fu .fu + AddLanguage zh-TW .zh-TW AddHandler type-map .var </IfModule> @@ -111,22 +112,27 @@ <Directory @SERVERROOT@/htdocs/modules/negotiation/en> Options +MultiViews - LanguagePriority en fr de fu + LanguagePriority en fr de fu zh-TW </Directory> <Directory @SERVERROOT@/htdocs/modules/negotiation/de> Options +MultiViews - LanguagePriority de en fr fu + LanguagePriority de en fr fu zh-TW </Directory> <Directory @SERVERROOT@/htdocs/modules/negotiation/fr> Options +MultiViews - LanguagePriority fr en de fu + LanguagePriority fr en de fu zh-TW </Directory> <Directory @SERVERROOT@/htdocs/modules/negotiation/fu> Options +MultiViews - LanguagePriority fu fr en de + LanguagePriority fu fr en de zh-TW + </Directory> + + <Directory @SERVERROOT@/htdocs/modules/negotiation/zh-TW> + Options +MultiViews + LanguagePriority zh-TW fr fu en de </Directory> <IfDefine APACHE2> @@ -248,7 +254,7 @@ ### Proxy pass-through to env.pl RewriteRule ^/modules/rewrite/proxy2/(.*)$ http://@SERVERNAME@:@PORT@/modules/cgi/$1 [L,P] - + ### Pass-through conditional on QUERY_STRING RewriteCond %{QUERY_STRING} horse=trigger RewriteRule ^/modules/rewrite/proxy3/(.*)$ http://@SERVERNAME@:@PORT@/modules/cgi/$1 [L,P] @@ -256,6 +262,42 @@ ### Redirect, server context RewriteRule ^/modules/rewrite/redirect.html$ http://@SERVERNAME@:@PORT@/foobar.html [L,R=301] + RewriteRule ^/modules/rewrite/cookie/$ - [CO=NAME3:VAL:localhost:86400:/0:secure:httponly] + RewriteRule ^/modules/rewrite/cookie/0 - [CO=NAME3:VAL:localhost:86400:/0:secure:httponly:0] + RewriteRule ^/modules/rewrite/cookie/false - [CO=NAME3:VAL:localhost:86400:/0:secure:httponly:false] + RewriteRule ^/modules/rewrite/cookie/lax - [CO=NAME3:VAL:localhost:86400:/0:secure:httponly:lax] + RewriteRule ^/modules/rewrite/cookie/none - [CO=NAME3:VAL:localhost:86400:/0:secure:httponly:none] + RewriteRule ^/modules/rewrite/cookie/foo - [CO=NAME3:VAL:localhost:86400:/0:secure:httponly:foo] + + RewriteRule ^/modules/rewrite/escaping/local/(.*) /?$1 + RewriteRule ^/modules/rewrite/escaping/local_b/(.*) /?$1 [B] + RewriteRule ^/modules/rewrite/escaping/local_b_justslash/(.*) /?$1 [B=/] + + RewriteRule ^/modules/rewrite/escaping/qsd-like/(.*) /$1? [R] + RewriteRule ^/modules/rewrite/escaping/qsd-like-plus-qsa/(.*) /$1? [R,QSA] + RewriteRule ^/modules/rewrite/escaping/qsd-like-plus-qsa-qsl/(.*) /$1? [R,QSA,QSL] + + <IfVersion >= 2.4.57> + RewriteRule ^/modules/rewrite/escaping/local_bctls/(.*) /?$1 [BCTLS] + RewriteRule ^/modules/rewrite/escaping/local_bctls_andslash/(.*) /?$1 [B=/,BCTLS] + RewriteRule ^/modules/rewrite/escaping/local_bctls_nospace/(.*) /?$1 "[BCTLS,BNE= ?]" + RewriteRule ^/modules/rewrite/escaping/local_b_noslash/(.*) /?$1 [B,BNE=/] + </IfVersion> + RewriteRule ^/modules/rewrite/escaping/redir/(.*) http://@SERVERNAME@:@PORT@/?$1 [R] + RewriteRule ^/modules/rewrite/escaping/redir_ne/(.*) http://@SERVERNAME@:@PORT@/?$1 [R,NE] + RewriteRule ^/modules/rewrite/escaping/proxy/(.*) http://@SERVERNAME@:@PORT@/?$1 [P] + RewriteRule ^/modules/rewrite/escaping/proxy_ne/(.*) http://@SERVERNAME@:@PORT@/?$1 [P,NE] + <LocationMatch ^/modules/rewrite/escaping/fixups/> + RewriteRule local/(.*) /?$1 + RewriteRule redir/(.*) http://@SERVERNAME@:@PORT@/?$1 [R] + RewriteRule redir_ne/(.*) http://@SERVERNAME@:@PORT@/?$1 [R,NE] + RewriteRule proxy/(.*) http://@SERVERNAME@:@PORT@/?$1 [P] + RewriteRule proxy_ne/(.*) http://@SERVERNAME@:@PORT@/?$1 [P,NE] + </LocationMatch> + + <Location /modules/rewrite/escaping> + Header always set rewritten-query "expr=%{QUERY_STRING}" + </Location> <VirtualHost cve_2011_3368_rewrite> DocumentRoot @SERVERROOT@/htdocs/modules/proxy RewriteEngine On @@ -266,10 +308,10 @@ <IfVersion >= 2.4> <Location /modules/rewrite/pr60478-rewrite-loop> # This pair of RewriteRules will loop but should eventually 500 once we - # reach LimitRequestLine * 2 bytes. (In this case, 128 * 2 = 256.) + # reach LimitRequestLine * 2 bytes. (In this case, @limitrequestline@ * 2 = @limitrequestlinex2@.) RewriteRule ^(.*)X(.*)$ $1x$2 # Don't run the test machine out of memory on failure, just stop the loop - RewriteCond expr "util_strlen(%{REQUEST_FILENAME}) -lt 257" + RewriteCond expr "util_strlen(%{REQUEST_FILENAME}) -le @limitrequestlinex2@" RewriteRule X - [N] </Location> </IfVersion> @@ -283,6 +325,8 @@ ProxyPass /reverse/notproxy/ ! ProxyPass /reverse/ http://@SERVERNAME@:@PORT@/ ProxyPassReverse /reverse/ http://@SERVERNAME@:@PORT@/ + ProxyPassMatch ^/reverse-match/(.*)$ http://@SERVERNAME@:@PORT@/$1 + ProxyPassMatch ^/reverse-slash(/.*)?$ http://@SERVERNAME@:@PORT@$1 ProxyPassReverseCookieDomain local remote ProxyPassReverseCookiePath /local /remote <IfVersion >= 2.4.7> @@ -334,12 +378,7 @@ AddHandler cgi-script .sh AddHandler cgi-script .pl ScriptLog @SERVERROOT@/logs/mod_cgi.log - <IfModule mod_cgi.c> - ScriptLogLength 40960 - </IfModule> - <IfModule !mod_cgi.c> - ScriptLogLength 8192 - </IfModule> + ScriptLogLength 40960 ScriptLogBuffer 256 <Directory @SERVERROOT@/htdocs/modules/cgi> @@ -417,6 +456,24 @@ </IfDefine> </IfModule> + +<IfVersion >= 2.5.1> + <Location /redirect_relative/default> + Redirect /out-default + </Location> + <Location /redirect_relative/on> + RedirectRelative ON + Redirect /out-on + </Location> + <Location /redirect_relative/off> + RedirectRelative OFF + Redirect /out-off + </Location> + <Location /redirect_relative/off/fail> + Redirect fail-to-construct-url + </Location> +</IfVersion> + Alias /manual @inherit_documentroot@/manual <Location /manual> Order deny,allow @@ -465,6 +522,14 @@ Alias /manual @inherit_documentroot@/manual <IfModule mod_dir.c> <Directory @SERVERROOT@/htdocs/modules/dir/htaccess> + DirectorySlash OFF + </Directory> + <IfVersion >= 2.5.1> + <Directory @SERVERROOT@/htdocs/modules/dir/htaccess/sub> + DirectorySlash NotFound + </Directory> + </IfVersion> + <Directory @SERVERROOT@/htdocs/modules/dir/htaccess> AllowOverride Indexes </Directory> </IfModule> @@ -506,7 +571,9 @@ Alias /manual @inherit_documentroot@/manual ## <IfModule mod_dav.c> - DAVLockDB @SERVERROOT@/logs/davlock.db + <IfVersion < 2.5.1> + DAVLockDB @SERVERROOT@/logs/davlock.db + </IfVersion> <Directory @SERVERROOT@/htdocs/modules/dav> DAV On @@ -532,7 +599,7 @@ Alias /manual @inherit_documentroot@/manual ## LimitRequest* directive testing ## -LimitRequestLine 128 +LimitRequestLine @limitrequestline@ LimitRequestFieldSize 1024 LimitRequestFields 32 <Directory @SERVERROOT@/htdocs/apache/limits> @@ -739,6 +806,46 @@ LimitRequestFields 32 </IfModule> </IfDefine> +## +## Configuration for t/modules/ldap.t. +## +<IfDefine LDAP> + Alias /modules/ldap/simple @DocumentRoot@ + Alias /modules/ldap/group @DocumentRoot@ + Alias /modules/ldap/refer @DocumentRoot@ + + # Simple user lookup + <Location /modules/ldap/simple> + AuthLDAPURL "ldap://localhost:8389/dc=example,dc=com?uid" + AuthLDAPBindDN "cn=httpd,dc=example,dc=com" + AuthLDAPBindPassword mod_authnz_ldap + AuthType Basic + AuthName ldap-simple@httpd.apache.org + AuthBasicProvider ldap + Require valid-user + </Location> + # Static group configuration + <Location /modules/ldap/group> + AuthLDAPURL "ldap://localhost:8389/dc=example,dc=com?uid" + AuthLDAPBindDN "cn=httpd,dc=example,dc=com" + AuthLDAPBindPassword mod_authnz_ldap + AuthType Basic + AuthName ldap-group@httpd.apache.org + AuthBasicProvider ldap + Require ldap-group cn=Group One,dc=example,dc=com + </Location> + # Referral configuration -- the second user is only found if + # httpd follows the referral. + <Location /modules/ldap/refer> + AuthLDAPURL "ldap://localhost:8389/dc=example,dc=com?uid" + AuthLDAPBindDN "cn=httpd,dc=example,dc=com" + AuthLDAPBindPassword mod_authnz_ldap + AuthType Basic + AuthName ldap-refer@httpd.apache.org + AuthBasicProvider ldap + Require ldap-group cn=Subgroup,ou=dept,dc=example,dc=com + </Location> +</IfDefine> ## ## ErrorDocument handling @@ -828,16 +935,27 @@ LimitRequestFields 32 <Directory @SERVERROOT@/htdocs/modules/filter/bytype> <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE application/xml + AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css </IfModule> <IfModule mod_case_filter.c> AddOutputFilterByType CASEFILTER application/xml + AddOutputFilterByType CASEFILTER text/xml AddOutputFilterByType CASEFILTER text/plain </IfModule> </Directory> </IfModule> ## +## mod_dumpio configuration +## +<IfModule mod_dumpio.c> + DumpIOInput on + DumpIOOutput on + LogLevel dumpio:trace7 +</IfModule> + +## ## LogLevel configuration ## <IfDefine APACHE2> @@ -1061,6 +1179,14 @@ LimitRequestFields 32 LuaHookTranslateName @SERVERROOT@/htdocs/modules/lua/translate.lua translate_name2 # default: LuaInherit parent-first </Location> + + # Filtering tests + LuaOutputFilter LUA_OUTPUT @SERVERROOT@/htdocs/modules/lua/filters.lua output_filter + Alias /modules/lua/filtered @DocumentRoot@ + <Location /modules/lua/filtered/> + SetOutputFilter LUA_OUTPUT + </Location> + </IfModule> # @@ -1255,9 +1381,22 @@ LimitRequestFields 32 <Directory @SERVERROOT@/htdocs/modules/allowmethods> Options +Indexes </Directory> + <IfVersion >= 2.5.1> + <Directory @SERVERROOT@/htdocs/modules/allowmethods/NoPost> + AllowMethods -POST + </Directory> + </IfVersion> <Directory @SERVERROOT@/htdocs/modules/allowmethods/Get> AllowMethods GET </Directory> + <IfVersion >= 2.5.1> + <Directory @SERVERROOT@/htdocs/modules/allowmethods/Get/post> + AllowMethods +POST + </Directory> + <Directory @SERVERROOT@/htdocs/modules/allowmethods/Get/none> + AllowMethods -GET + </Directory> + </IfVersion> <Directory @SERVERROOT@/htdocs/modules/allowmethods/Head> AllowMethods HEAD </Directory> @@ -1318,3 +1457,85 @@ LimitRequestFields 32 CheckCaseOnly on </Directory> </IfModule> + +<IfModule mod_actions.c> + ScriptAlias /cgi_mod_actions @SERVERROOT@/htdocs/modules/cgi + <Location /mod_actions> + SetHandler my-handler + Action my-handler "/cgi_mod_actions/perl_echo.pl" virtual + </Location> + + <Directory @SERVERROOT@/htdocs/modules/actions/action> + AddHandler my-file-type1 .xyz1 + Action my-file-type1 "/cgi_mod_actions/perl_echo.pl" + AddHandler my-file-type2 .xyz2 + Action my-file-type2 "/cgi_mod_actions/perl_echo.pl" virtual + </Directory> + + <Directory @SERVERROOT@/htdocs/modules/actions/script> + Script GET "/cgi_mod_actions/perl_echo.pl" + Script POST "/cgi_mod_actions/perl_post.pl" + </Directory> +</IfModule> + +<IfModule mod_heartbeat.c> + <IfModule mod_heartmonitor.c> + HeartbeatListen 239.0.0.1:27999 + HeartbeatAddress 239.0.0.1:27999 + </IfModule> +</IfModule> + +# +# t/modules/sed.t test config +# +<IfModule mod_sed.c> + AliasMatch /apache/sed/[^/]+/(.*) @DocumentRoot@/$1 + + <Location /apache/sed-echo> + SetHandler echo_post + SetInputFilter sed + </Location> + + <Location /apache/sed/> + AddOutputFilter sed .html + </Location> + + <Location /apache/sed/out-foo> + OutputSed "s/foo/bar/g" + </Location> + <Location /apache/sed-echo/input> + InputSed "s/foo/bar/g" + </Location> + <Location /apache/sed-echo/out-foo-grow> + SetOutputFilter sed + OutputSed "s/foo/barbarbarbar/g" + </Location> +</IfModule> + +# +# t/apache/pr64339.t test configuration +# +<IfModule mod_xml2enc.c> + <IfModule mod_proxy_html.c> + <IfModule mod_proxy.c> + Alias /modules/xml2enc/back @SERVERROOT@/htdocs/modules/xml2enc + Alias /modules/xml2enc/back/iso @SERVERROOT@/htdocs/modules/xml2enc + <Location /modules/xml2enc/back> + AddType application/foo+xml fooxml + AddType application/notreallyxml notxml + AddType application/xml xml + AddType text/html isohtml + AddCharset ISO-8859-1 .isohtml + AddCharset UTF-8 .xml + AddCharset UTF-8 .fooxml + </Location> + <Location /modules/xml2enc/front> + ProxyHTMLEnable on + # mod_proxy_html needs some configuration. + ProxyHTMLURLMap / /blah + ProxyHTMLLinks a href + ProxyPass http://@SERVERNAME@:@PORT@/modules/xml2enc/back + </Location> + </IfModule> + </IfModule> +</IfModule> diff --git a/debian/perl-framework/t/conf/http2.conf.in b/debian/perl-framework/t/conf/http2.conf.in deleted file mode 100644 index 2e6ca67..0000000 --- a/debian/perl-framework/t/conf/http2.conf.in +++ /dev/null @@ -1,105 +0,0 @@ -## -## mod_http2 test config -## - -<IfDefine APACHE2> - <IfModule http2_module> - - LogLevel http2:debug - - <VirtualHost h2c> - Protocols h2c http/1.1 - - <IfModule @CGI_MODULE@> - <Directory @SERVERROOT@/htdocs/modules/h2> - Options +ExecCGI - AddHandler cgi-script .pl - - </Directory> - </IfModule> - - <Location /modules/h2/hello.pl> - </Location> - <IfModule mod_rewrite.c> - RewriteEngine on - RewriteRule ^/modules/h2/latest.tar.gz$ /modules/h2/xxx-1.0.2a.tar.gz [R=302,NC] - </IfModule> - - </VirtualHost> - - <IfModule @ssl_module@> - - <VirtualHost @SERVERNAME@:h2> - Protocols h2 http/1.1 - H2Direct on - - SSLEngine on - SSLCACertificateFile @SSLCA@/asf/certs/ca.crt - SSLCACertificatePath @ServerRoot@/conf/ssl - SSLCARevocationFile @SSLCA@/asf/crl/ca-bundle.crl - SSLCARevocationCheck chain - - # taken from https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations - # - SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK - SSLProtocol All -SSLv2 -SSLv3 - SSLOptions +StdEnvVars - - <IfVersion >= 2.4.18> - # need this off as long as we ran on old openssl - H2ModernTLSOnly off - </IfVersion> - - <IfModule @CGI_MODULE@> - <Directory @SERVERROOT@/htdocs/modules/h2> - Options +ExecCGI - AddHandler cgi-script .pl - </Directory> - </IfModule> - - <Location /modules/h2/hello.pl> - </Location> - <IfModule mod_rewrite.c> - RewriteEngine on - RewriteRule ^/modules/h2/latest.tar.gz$ /modules/h2/xxx-1.0.2a.tar.gz [R=302,NC] - </IfModule> - - </VirtualHost> - - <VirtualHost noh2.example.org:h2> - Protocols http/1.1 - H2Direct off - </VirtualHost> - - <VirtualHost test.example.org:h2> - Protocols h2 http/1.1 - H2Direct on - - SSLEngine on - SSLCACertificateFile @SSLCA@/asf/certs/ca.crt - SSLCACertificatePath @ServerRoot@/conf/ssl - SSLCARevocationFile @SSLCA@/asf/crl/ca-bundle.crl - SSLCARevocationCheck chain - - # taken from https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations - # - SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK - SSLProtocol All -SSLv2 -SSLv3 - SSLOptions +StdEnvVars - - </VirtualHost> - - <VirtualHost test2.example.org:h2> - Protocols http/1.1 h2 - H2Direct on - </VirtualHost> - - <VirtualHost test-ser.example.org:h2> - </VirtualHost> - - </ifModule> - - </IfModule> - -</IfDefine> - diff --git a/debian/perl-framework/t/conf/include.conf.in b/debian/perl-framework/t/conf/include.conf.in index 7e686b9..349f565 100644 --- a/debian/perl-framework/t/conf/include.conf.in +++ b/debian/perl-framework/t/conf/include.conf.in @@ -46,6 +46,11 @@ Options Includes </Directory> + <Directory @SERVERROOT@/htdocs/modules/include/mod_request> + Options Includes + KeptBodySize 32 + </Directory> + <IfDefine APACHE2> <IfModule mod_bucketeer.c> <Directory @SERVERROOT@/htdocs/modules/include/bucketeer> diff --git a/debian/perl-framework/t/conf/proxy.conf.in b/debian/perl-framework/t/conf/proxy.conf.in index 5f740cd..a199ca8 100644 --- a/debian/perl-framework/t/conf/proxy.conf.in +++ b/debian/perl-framework/t/conf/proxy.conf.in @@ -6,6 +6,11 @@ ProxyRequests On </VirtualHost> + <IfVersion >= 2.4.49> + # Test the mapping. + ProxyPass /mapping http://@SERVERNAME@:@PORT@/servlet mapping=servlet + </IfVersion> + </IfModule> <IfModule mod_proxy_hcheck.c> @@ -24,51 +29,51 @@ </VirtualHost> <VirtualHost proxy_http_balancer> + + <IfModule mod_lbmethod_byrequests.c> <Proxy balancer://foo1> BalancerMember http://@SERVERNAME@:@PROXY_HTTP_BAL1_PORT@ loadfactor=1 BalancerMember http://@SERVERNAME@:@PROXY_HTTP_BAL2_PORT@ loadfactor=1 </Proxy> + ProxySet balancer://foo1 lbmethod=byrequests + <Location /baltest1> + ProxyPass balancer://foo1/ + </Location> + </IfModule> + <IfModule mod_lbmethod_bytraffic.c> <Proxy balancer://foo2> BalancerMember http://@SERVERNAME@:@PROXY_HTTP_BAL1_PORT@ loadfactor=1 BalancerMember http://@SERVERNAME@:@PROXY_HTTP_BAL2_PORT@ loadfactor=1 </Proxy> + ProxySet balancer://foo2 lbmethod=bytraffic + <Location /baltest2> + ProxyPass balancer://foo2/ + </Location> + </IfModule> + <IfModule mod_lbmethod_bybusyness.c> <Proxy balancer://foo3> BalancerMember http://@SERVERNAME@:@PROXY_HTTP_BAL1_PORT@ loadfactor=1 BalancerMember http://@SERVERNAME@:@PROXY_HTTP_BAL2_PORT@ loadfactor=1 </Proxy> + ProxySet balancer://foo3 lbmethod=bybusyness + <Location /baltest3> + ProxyPass balancer://foo3/ + </Location> + </IfModule> + <IfModule mod_lbmethod_heartbeat.c> <Proxy balancer://foo4> BalancerMember http://@SERVERNAME@:@PROXY_HTTP_BAL1_PORT@ loadfactor=1 BalancerMember http://@SERVERNAME@:@PROXY_HTTP_BAL2_PORT@ loadfactor=1 </Proxy> - - ProxySet balancer://foo1 lbmethod=byrequests - ProxySet balancer://foo2 lbmethod=bytraffic - ProxySet balancer://foo3 lbmethod=bybusyness - <IfVersion >= 2.3.0> - ProxySet balancer://foo4 lbmethod=heartbeat - </IfVersion> - - <Location /baltest1> - ProxyPass balancer://foo1/ - </Location> - - <Location /baltest2> - ProxyPass balancer://foo2/ - </Location> - - <Location /baltest3> - ProxyPass balancer://foo3/ + ProxySet balancer://foo4 lbmethod=heartbeat + <Location /baltest4> + # TODO heartbeat needs additional configuration to have it work + ProxyPass balancer://foo4/ </Location> - - <IfVersion >= 2.3.0> - <Location /baltest4> - # TODO heartbeat needs additional configuration to have it work - ProxyPass balancer://foo4/ - </Location> - </IfVersion> + </IfModule> ## PR 45434 tests <Proxy balancer://pr45434> @@ -78,6 +83,22 @@ ProxyPass /pr45434 balancer://pr45434/alias ProxyPassReverse /pr45434 balancer://pr45434/alias + <Proxy balancer://failover> + BalancerMember http://@SERVERNAME@:@NextAvailablePort@ loadfactor=1 retry=1ms + BalancerMember http://@SERVERNAME@:@PROXY_HTTP_BAL1_PORT@ loadfactor=1 status=H + </Proxy> + ProxyPassMatch ^/baltest_echo_post balancer://failover/echo_post + + ## Test "dynamic balancer + <Proxy balancer://dynproxy> + ProxySet growth=10 + </Proxy> + <Location /balancer-manager> + SetHandler balancer-manager + Allow from all + </Location> + ProxyPass /dynproxy balancer://dynproxy/ + </VirtualHost> </IfModule> @@ -161,6 +182,9 @@ </VirtualHost> + + ProxyPass /proxy/wsoc ws://@SERVERNAME@:@PORT@/modules/lua/websockets.lua + </IfModule> <IfModule mod_rewrite.c> diff --git a/debian/perl-framework/t/conf/ssl/proxyssl.conf.in b/debian/perl-framework/t/conf/ssl/proxyssl.conf.in index dc18fdf..161385b 100644 --- a/debian/perl-framework/t/conf/ssl/proxyssl.conf.in +++ b/debian/perl-framework/t/conf/ssl/proxyssl.conf.in @@ -51,6 +51,66 @@ ProxyPass / https://@proxyssl_url@/ ProxyPassReverse / https://@proxyssl_url@/ + + ProxyPass /proxy/wsoc wss://localhost:@proxy_https_https_port@/modules/lua/websockets.lua + </VirtualHost> + + #here we can test http <-> https using SSLProxyMachine* inside <Proxy> + <VirtualHost proxy_http_https_proxy_section> + #these are not on by default in the 1.x based mod_ssl + <IfDefine APACHE2> + SSLProxyEngine On + + SSLProxyProtocol All + SSLProxyCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL + + SSLProxyCACertificateFile @SSLCA@/asf/certs/ca.crt + SSLProxyCACertificatePath @ServerRoot@/conf/ssl + SSLProxyCARevocationFile @SSLCA@/asf/crl/ca-bundle.crl + <IfVersion >= 2.3.15> + SSLProxyCARevocationCheck chain + </IfVersion> + SSLProxyVerify on + SSLProxyVerifyDepth 10 + </IfDefine> + + + ProxyPass / https://@proxyssl_url@/ + ProxyPassReverse / https://@proxyssl_url@/ + <IfDefine APACHE2> + <Proxy https://@proxyssl_url@> + SSLProxyMachineCertificateFile @SSLCA@/asf/proxy/client_ok.pem + #SSLProxyMachineCertificatePath @SSLCA@/asf/proxy + </Proxy> + </IfDefine> + </VirtualHost> + + + #here we can test https <-> https using SSLProxyMachine* inside <Proxy> + <VirtualHost proxy_https_https_proxy_section> + SSLEngine on + + #these are not on by default in the 1.x based mod_ssl + <IfDefine APACHE2> + SSLProxyEngine On + SSLProxyCACertificateFile @SSLCA@/asf/certs/ca.crt + SSLProxyVerify on + SSLProxyCARevocationPath @SSLCA@/asf/crl + <IfVersion >= 2.3.15> + SSLProxyCARevocationCheck chain + </IfVersion> + </IfDefine> + + + ProxyPass / https://@proxyssl_url@/ + ProxyPassReverse / https://@proxyssl_url@/ + <IfDefine APACHE2> + <Proxy https://@proxyssl_url@> + # ensure that client_ok.pem is picked first: + SSLProxyMachineCertificateFile @SSLCA@/asf/proxy/client_ok.pem + SSLProxyMachineCertificatePath @SSLCA@/asf/proxy + </Proxy> + </IfDefine> </VirtualHost> #here we can test https <-> http @@ -60,7 +120,6 @@ ProxyPass / http://@servername@:@port@/ ProxyPassReverse / http://@servername@:@port@/ </VirtualHost> - </IfModule> </IfModule> diff --git a/debian/perl-framework/t/conf/ssl/ssl.conf.in b/debian/perl-framework/t/conf/ssl/ssl.conf.in index f796b34..6fadf33 100644 --- a/debian/perl-framework/t/conf/ssl/ssl.conf.in +++ b/debian/perl-framework/t/conf/ssl/ssl.conf.in @@ -5,11 +5,12 @@ AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl - SSLSessionCache none - #XXX: would be nice to test these - #SSLSessionCache shm:@ServerRoot@/logs/ssl_scache(512000) - #SSLSessionCache dbm:@ServerRoot@/logs/ssl_scache - #SSLSessionCacheTimeout 300 + <IfDefine TEST_SSL_SESSCACHE> + SSLSessionCache ${SSL_SESSCACHE} + </IfDefine> + <IfDefine !TEST_SSL_SESSCACHE> + SSLSessionCache none + </IfDefine> <IfVersion < 2.3.4> #SSLMutex file:@ServerRoot@/logs/ssl_mutex @@ -87,6 +88,15 @@ SSLVerifyDepth 10 </Location> + # t/ssl/pha.t + <Location /require/small> + SSLVerifyClient require + SSLVerifyDepth 10 + + SSLRenegBufferSize 10 + </Location> + Alias /require/small @DocumentRoot@/modules/cgi + #t/ssl/require.t Alias /require/asf @DocumentRoot@ Alias /require/snakeoil @DocumentRoot@ diff --git a/debian/perl-framework/t/filter/case.t b/debian/perl-framework/t/filter/case.t index 8037789..9bd6915 100644 --- a/debian/perl-framework/t/filter/case.t +++ b/debian/perl-framework/t/filter/case.t @@ -9,7 +9,7 @@ my %urls = ( mod_php4 => '/php/hello.php', mod_cgi => '/modules/cgi/perl.pl', mod_test_rwrite => '/test_rwrite', - mod_alias => '/getfiles-perl-pod/perlsub.pod', + mod_alias => '/getfiles-perl-pod/perlsub.pod', # requires perl-doc on Ubuntu ); my @filter = ('X-AddOutputFilter' => 'CaseFilter'); #mod_client_add_filter @@ -29,6 +29,7 @@ for my $module (sort keys %urls) { print "# testing $module with $urls{$module}\n"; print "# expected 200\n"; print "# received ".$r->code."\n"; + print "# body: ".$r->content."\n"; verify($r); } diff --git a/debian/perl-framework/t/htdocs/modules/h2/files/empty.txt b/debian/perl-framework/t/htdocs/modules/actions/action/dummy.txt index e69de29..e69de29 100644 --- a/debian/perl-framework/t/htdocs/modules/h2/files/empty.txt +++ b/debian/perl-framework/t/htdocs/modules/actions/action/dummy.txt diff --git a/debian/perl-framework/t/htdocs/modules/actions/script/dummy.txt b/debian/perl-framework/t/htdocs/modules/actions/script/dummy.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/actions/script/dummy.txt diff --git a/debian/perl-framework/t/htdocs/modules/allowmethods/Get/none/.empty b/debian/perl-framework/t/htdocs/modules/allowmethods/Get/none/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/allowmethods/Get/none/.empty diff --git a/debian/perl-framework/t/htdocs/modules/allowmethods/Get/post/foo.txt b/debian/perl-framework/t/htdocs/modules/allowmethods/Get/post/foo.txt new file mode 100644 index 0000000..5716ca5 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/allowmethods/Get/post/foo.txt @@ -0,0 +1 @@ +bar diff --git a/debian/perl-framework/t/htdocs/modules/allowmethods/NoPost/.empty b/debian/perl-framework/t/htdocs/modules/allowmethods/NoPost/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/allowmethods/NoPost/.empty diff --git a/debian/perl-framework/t/htdocs/modules/allowmethods/Post/reset/.empty b/debian/perl-framework/t/htdocs/modules/allowmethods/Post/reset/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/allowmethods/Post/reset/.empty diff --git a/debian/perl-framework/t/htdocs/modules/cgi/perl_post.pl.PL b/debian/perl-framework/t/htdocs/modules/cgi/perl_post.pl.PL new file mode 100755 index 0000000..e19d204 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/cgi/perl_post.pl.PL @@ -0,0 +1,23 @@ +local ($buffer, @pairs, $pair, $name, $value); + +print "Content-type: text/plain\n\n"; + +$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; +print "$ENV{'REQUEST_METHOD'}\n"; + +# Read in text +if ($ENV{'REQUEST_METHOD'} eq "POST") { + read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); +} else { + $buffer = $ENV{'QUERY_STRING'}; +} + +# Split information into name/value pairs +@pairs = split(/&/, $buffer); +foreach $pair (@pairs) { + ($name, $value) = split(/=/, $pair); + $value =~ tr/+/ /; + $value =~ s/%(..)/pack("C", hex($1))/eg; + + print "$name: $value\n"; +} diff --git a/debian/perl-framework/t/htdocs/modules/dir/htaccess/sub1/index.html b/debian/perl-framework/t/htdocs/modules/dir/htaccess/sub1/index.html new file mode 100644 index 0000000..be1a204 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/dir/htaccess/sub1/index.html @@ -0,0 +1 @@ +dir index diff --git a/debian/perl-framework/t/htdocs/modules/h2/001.html b/debian/perl-framework/t/htdocs/modules/h2/001.html deleted file mode 100755 index 184952d..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/001.html +++ /dev/null @@ -1,10 +0,0 @@ -<!DOCTYPE HTML>
- <html>
- <head>
- <title>HTML/2.0 Test File: 001</title>
- </head>
- <body>
- <p><h1>HTML/2.0 Test File: 001</h1></p>
- <p>This file only contains a simple HTML structure with plain text.</p>
- </body>
-</html>
diff --git a/debian/perl-framework/t/htdocs/modules/h2/002.jpg b/debian/perl-framework/t/htdocs/modules/h2/002.jpg Binary files differdeleted file mode 100755 index 3feefb0..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/002.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/003.html b/debian/perl-framework/t/htdocs/modules/h2/003.html deleted file mode 100755 index d5b08c5..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/003.html +++ /dev/null @@ -1,11 +0,0 @@ -<!DOCTYPE HTML>
- <html>
- <head>
- <title>HTML/2.0 Test File: 003</title>
- </head>
- <body>
- <p><h1>HTML/2.0 Test File: 003</h1></p>
- <p>This is a text HTML file with a big image:</p>
- <p><img src="003/003_img.jpg" alt="GSMA Logo" style="width:269px;height:249px"></p>
- </body>
-</html>
diff --git a/debian/perl-framework/t/htdocs/modules/h2/003/003_img.jpg b/debian/perl-framework/t/htdocs/modules/h2/003/003_img.jpg Binary files differdeleted file mode 100755 index 3feefb0..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/003/003_img.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004.html b/debian/perl-framework/t/htdocs/modules/h2/004.html deleted file mode 100755 index 768cb82..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004.html +++ /dev/null @@ -1,23 +0,0 @@ -<html>
- <head>
- <title>HTML/2.0 Test File: 004</title>
- </head>
- <body>
- <p><h1>HTML/2.0 Test File: 004</h1>
- This file contains plain text with a bunch of images.<br>
- <img src="004/gophertiles_142.jpg" height="32" width="32"><img src="004/gophertiles_084.jpg" height="32" width="32"><img src="004/gophertiles_052.jpg" height="32" width="32"><img src="004/gophertiles_077.jpg" height="32" width="32"><img src="004/gophertiles_030.jpg" height="32" width="32"><img src="004/gophertiles_027.jpg" height="32" width="32"><img src="004/gophertiles_039.jpg" height="32" width="32"><img src="004/gophertiles_025.jpg" height="32" width="32"><img src="004/gophertiles_017.jpg" height="32" width="32"><img src="004/gophertiles_179.jpg" height="32" width="32"><img src="004/gophertiles_032.jpg" height="32" width="32"><img src="004/gophertiles_161.jpg" height="32" width="32"><img src="004/gophertiles_088.jpg" height="32" width="32"><img src="004/gophertiles_022.jpg" height="32" width="32"><img src="004/gophertiles_146.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_102.jpg" height="32" width="32"><img src="004/gophertiles_009.jpg" height="32" width="32"><img src="004/gophertiles_132.jpg" height="32" width="32"><img src="004/gophertiles_137.jpg" height="32" width="32"><img src="004/gophertiles_055.jpg" height="32" width="32"><img src="004/gophertiles_036.jpg" height="32" width="32"><img src="004/gophertiles_127.jpg" height="32" width="32"><img src="004/gophertiles_145.jpg" height="32" width="32"><img src="004/gophertiles_147.jpg" height="32" width="32"><img src="004/gophertiles_153.jpg" height="32" width="32"><img src="004/gophertiles_105.jpg" height="32" width="32"><img src="004/gophertiles_103.jpg" height="32" width="32"><img src="004/gophertiles_033.jpg" height="32" width="32"><img src="004/gophertiles_054.jpg" height="32" width="32"><img src="004/gophertiles_015.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_016.jpg" height="32" width="32"><img src="004/gophertiles_072.jpg" height="32" width="32"><img src="004/gophertiles_115.jpg" height="32" width="32"><img src="004/gophertiles_108.jpg" height="32" width="32"><img src="004/gophertiles_148.jpg" height="32" width="32"><img src="004/gophertiles_070.jpg" height="32" width="32"><img src="004/gophertiles_083.jpg" height="32" width="32"><img src="004/gophertiles_118.jpg" height="32" width="32"><img src="004/gophertiles_053.jpg" height="32" width="32"><img src="004/gophertiles_021.jpg" height="32" width="32"><img src="004/gophertiles_059.jpg" height="32" width="32"><img src="004/gophertiles_130.jpg" height="32" width="32"><img src="004/gophertiles_163.jpg" height="32" width="32"><img src="004/gophertiles_098.jpg" height="32" width="32"><img src="004/gophertiles_064.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_018.jpg" height="32" width="32"><img src="004/gophertiles_058.jpg" height="32" width="32"><img src="004/gophertiles_167.jpg" height="32" width="32"><img src="004/gophertiles_082.jpg" height="32" width="32"><img src="004/gophertiles_056.jpg" height="32" width="32"><img src="004/gophertiles_180.jpg" height="32" width="32"><img src="004/gophertiles_046.jpg" height="32" width="32"><img src="004/gophertiles_093.jpg" height="32" width="32"><img src="004/gophertiles_106.jpg" height="32" width="32"><img src="004/gophertiles_065.jpg" height="32" width="32"><img src="004/gophertiles_175.jpg" height="32" width="32"><img src="004/gophertiles_139.jpg" height="32" width="32"><img src="004/gophertiles_101.jpg" height="32" width="32"><img src="004/gophertiles_099.jpg" height="32" width="32"><img src="004/gophertiles_051.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_140.jpg" height="32" width="32"><img src="004/gophertiles_134.jpg" height="32" width="32"><img src="004/gophertiles_149.jpg" height="32" width="32"><img src="004/gophertiles_049.jpg" height="32" width="32"><img src="004/gophertiles_095.jpg" height="32" width="32"><img src="004/gophertiles_075.jpg" height="32" width="32"><img src="004/gophertiles_066.jpg" height="32" width="32"><img src="004/gophertiles_090.jpg" height="32" width="32"><img src="004/gophertiles_035.jpg" height="32" width="32"><img src="004/gophertiles_114.jpg" height="32" width="32"><img src="004/gophertiles_160.jpg" height="32" width="32"><img src="004/gophertiles_079.jpg" height="32" width="32"><img src="004/gophertiles_062.jpg" height="32" width="32"><img src="004/gophertiles_096.jpg" height="32" width="32"><img src="004/gophertiles_100.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_104.jpg" height="32" width="32"><img src="004/gophertiles_057.jpg" height="32" width="32"><img src="004/gophertiles_037.jpg" height="32" width="32"><img src="004/gophertiles_086.jpg" height="32" width="32"><img src="004/gophertiles_168.jpg" height="32" width="32"><img src="004/gophertiles_138.jpg" height="32" width="32"><img src="004/gophertiles_045.jpg" height="32" width="32"><img src="004/gophertiles_141.jpg" height="32" width="32"><img src="004/gophertiles_029.jpg" height="32" width="32"><img src="004/gophertiles_165.jpg" height="32" width="32"><img src="004/gophertiles_110.jpg" height="32" width="32"><img src="004/gophertiles_063.jpg" height="32" width="32"><img src="004/gophertiles_158.jpg" height="32" width="32"><img src="004/gophertiles_122.jpg" height="32" width="32"><img src="004/gophertiles_068.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_170.jpg" height="32" width="32"><img src="004/gophertiles_120.jpg" height="32" width="32"><img src="004/gophertiles_117.jpg" height="32" width="32"><img src="004/gophertiles_031.jpg" height="32" width="32"><img src="004/gophertiles_113.jpg" height="32" width="32"><img src="004/gophertiles_074.jpg" height="32" width="32"><img src="004/gophertiles_129.jpg" height="32" width="32"><img src="004/gophertiles_019.jpg" height="32" width="32"><img src="004/gophertiles_060.jpg" height="32" width="32"><img src="004/gophertiles_109.jpg" height="32" width="32"><img src="004/gophertiles_080.jpg" height="32" width="32"><img src="004/gophertiles_097.jpg" height="32" width="32"><img src="004/gophertiles_116.jpg" height="32" width="32"><img src="004/gophertiles_085.jpg" height="32" width="32"><img src="004/gophertiles_050.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_151.jpg" height="32" width="32"><img src="004/gophertiles_094.jpg" height="32" width="32"><img src="004/gophertiles_067.jpg" height="32" width="32"><img src="004/gophertiles_128.jpg" height="32" width="32"><img src="004/gophertiles_034.jpg" height="32" width="32"><img src="004/gophertiles_135.jpg" height="32" width="32"><img src="004/gophertiles_012.jpg" height="32" width="32"><img src="004/gophertiles_010.jpg" height="32" width="32"><img src="004/gophertiles_152.jpg" height="32" width="32"><img src="004/gophertiles_171.jpg" height="32" width="32"><img src="004/gophertiles_087.jpg" height="32" width="32"><img src="004/gophertiles_126.jpg" height="32" width="32"><img src="004/gophertiles_048.jpg" height="32" width="32"><img src="004/gophertiles_023.jpg" height="32" width="32"><img src="004/gophertiles_078.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_071.jpg" height="32" width="32"><img src="004/gophertiles_131.jpg" height="32" width="32"><img src="004/gophertiles_073.jpg" height="32" width="32"><img src="004/gophertiles_143.jpg" height="32" width="32"><img src="004/gophertiles_173.jpg" height="32" width="32"><img src="004/gophertiles_154.jpg" height="32" width="32"><img src="004/gophertiles_061.jpg" height="32" width="32"><img src="004/gophertiles_178.jpg" height="32" width="32"><img src="004/gophertiles_013.jpg" height="32" width="32"><img src="004/gophertiles_028.jpg" height="32" width="32"><img src="004/gophertiles_157.jpg" height="32" width="32"><img src="004/gophertiles_038.jpg" height="32" width="32"><img src="004/gophertiles_069.jpg" height="32" width="32"><img src="004/gophertiles_174.jpg" height="32" width="32"><img src="004/gophertiles_076.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_155.jpg" height="32" width="32"><img src="004/gophertiles_107.jpg" height="32" width="32"><img src="004/gophertiles_136.jpg" height="32" width="32"><img src="004/gophertiles_144.jpg" height="32" width="32"><img src="004/gophertiles_091.jpg" height="32" width="32"><img src="004/gophertiles_024.jpg" height="32" width="32"><img src="004/gophertiles_014.jpg" height="32" width="32"><img src="004/gophertiles_159.jpg" height="32" width="32"><img src="004/gophertiles_011.jpg" height="32" width="32"><img src="004/gophertiles_176.jpg" height="32" width="32"><img src="004/gophertiles_162.jpg" height="32" width="32"><img src="004/gophertiles_156.jpg" height="32" width="32"><img src="004/gophertiles_081.jpg" height="32" width="32"><img src="004/gophertiles_119.jpg" height="32" width="32"><img src="004/gophertiles_026.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_133.jpg" height="32" width="32"><img src="004/gophertiles_020.jpg" height="32" width="32"><img src="004/gophertiles_044.jpg" height="32" width="32"><img src="004/gophertiles_125.jpg" height="32" width="32"><img src="004/gophertiles_150.jpg" height="32" width="32"><img src="004/gophertiles_172.jpg" height="32" width="32"><img src="004/gophertiles_002.jpg" height="32" width="32"><img src="004/gophertiles_169.jpg" height="32" width="32"><img src="004/gophertiles_007.jpg" height="32" width="32"><img src="004/gophertiles_008.jpg" height="32" width="32"><img src="004/gophertiles_042.jpg" height="32" width="32"><img src="004/gophertiles_041.jpg" height="32" width="32"><img src="004/gophertiles_166.jpg" height="32" width="32"><img src="004/gophertiles_005.jpg" height="32" width="32"><img src="004/gophertiles_089.jpg" height="32" width="32"><br>
- <img src="004/gophertiles_177.jpg" height="32" width="32"><img src="004/gophertiles_092.jpg" height="32" width="32"><img src="004/gophertiles_043.jpg" height="32" width="32"><img src="004/gophertiles_111.jpg" height="32" width="32"><img src="004/gophertiles_047.jpg" height="32" width="32"><img src="004/gophertiles.jpg" height="32" width="32"><img src="004/gophertiles_006.jpg" height="32" width="32"><img src="004/gophertiles_121.jpg" height="32" width="32"><img src="004/gophertiles_004.jpg" height="32" width="32"><img src="004/gophertiles_124.jpg" height="32" width="32"><img src="004/gophertiles_123.jpg" height="32" width="32"><img src="004/gophertiles_112.jpg" height="32" width="32"><img src="004/gophertiles_040.jpg" height="32" width="32"><img src="004/gophertiles_164.jpg" height="32" width="32"><img src="004/gophertiles_003.jpg" height="32" width="32"><br>
- <hr>This page is developed using this template:<a href="https://http2.golang.org/">HTTP/2 demo server</a>
- </p>
- </body>
-</html>
\ No newline at end of file diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles.jpg Binary files differdeleted file mode 100755 index e45ac3b..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_002.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_002.jpg Binary files differdeleted file mode 100755 index 91121de..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_002.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_003.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_003.jpg Binary files differdeleted file mode 100755 index a26648f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_003.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_004.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_004.jpg Binary files differdeleted file mode 100755 index 1d2db98..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_004.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_005.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_005.jpg Binary files differdeleted file mode 100755 index 05a298c..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_005.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_006.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_006.jpg Binary files differdeleted file mode 100755 index 54a4920..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_006.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_007.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_007.jpg Binary files differdeleted file mode 100755 index 526f850..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_007.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_008.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_008.jpg Binary files differdeleted file mode 100755 index 35f5a2f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_008.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_009.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_009.jpg Binary files differdeleted file mode 100755 index 96ec2b8..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_009.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_010.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_010.jpg Binary files differdeleted file mode 100755 index 95a9509..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_010.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_011.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_011.jpg Binary files differdeleted file mode 100755 index 65701ed..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_011.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_012.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_012.jpg Binary files differdeleted file mode 100755 index 6242fa6..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_012.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_013.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_013.jpg Binary files differdeleted file mode 100755 index 8096ab2..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_013.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_014.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_014.jpg Binary files differdeleted file mode 100755 index e027312..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_014.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_015.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_015.jpg Binary files differdeleted file mode 100755 index a27076d..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_015.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_016.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_016.jpg Binary files differdeleted file mode 100755 index 04b20db..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_016.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_017.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_017.jpg Binary files differdeleted file mode 100755 index 9b6e44b..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_017.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_018.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_018.jpg Binary files differdeleted file mode 100755 index 209b6fd..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_018.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_019.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_019.jpg Binary files differdeleted file mode 100755 index 3bc23a3..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_019.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_020.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_020.jpg Binary files differdeleted file mode 100755 index ba04297..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_020.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_021.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_021.jpg Binary files differdeleted file mode 100755 index f5a422f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_021.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_022.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_022.jpg Binary files differdeleted file mode 100755 index cb49051..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_022.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_023.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_023.jpg Binary files differdeleted file mode 100755 index 7e83a7e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_023.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_024.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_024.jpg Binary files differdeleted file mode 100755 index 87c711b..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_024.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_025.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_025.jpg Binary files differdeleted file mode 100755 index c42eb3c..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_025.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_026.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_026.jpg Binary files differdeleted file mode 100755 index 29f9da6..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_026.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_027.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_027.jpg Binary files differdeleted file mode 100755 index 6ceccde..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_027.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_028.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_028.jpg Binary files differdeleted file mode 100755 index 6e3cb34..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_028.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_029.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_029.jpg Binary files differdeleted file mode 100755 index dac302b..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_029.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_030.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_030.jpg Binary files differdeleted file mode 100755 index 4299071..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_030.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_031.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_031.jpg Binary files differdeleted file mode 100755 index 739924f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_031.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_032.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_032.jpg Binary files differdeleted file mode 100755 index 4685513..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_032.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_033.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_033.jpg Binary files differdeleted file mode 100755 index 26ea0e1..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_033.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_034.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_034.jpg Binary files differdeleted file mode 100755 index f02930e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_034.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_035.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_035.jpg Binary files differdeleted file mode 100755 index 8b6bde8..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_035.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_036.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_036.jpg Binary files differdeleted file mode 100755 index 23ac1c0..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_036.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_037.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_037.jpg Binary files differdeleted file mode 100755 index 6de6681..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_037.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_038.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_038.jpg Binary files differdeleted file mode 100755 index aea11a3..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_038.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_039.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_039.jpg Binary files differdeleted file mode 100755 index bb54d13..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_039.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_040.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_040.jpg Binary files differdeleted file mode 100755 index 91591af..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_040.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_041.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_041.jpg Binary files differdeleted file mode 100755 index 96b13dd..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_041.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_042.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_042.jpg Binary files differdeleted file mode 100755 index 0ef80f1..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_042.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_043.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_043.jpg Binary files differdeleted file mode 100755 index c3828a7..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_043.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_044.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_044.jpg Binary files differdeleted file mode 100755 index 036ec10..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_044.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_045.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_045.jpg Binary files differdeleted file mode 100755 index 03f5413..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_045.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_046.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_046.jpg Binary files differdeleted file mode 100755 index 8353e24..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_046.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_047.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_047.jpg Binary files differdeleted file mode 100755 index 86e4d88..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_047.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_048.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_048.jpg Binary files differdeleted file mode 100755 index 8f308ed..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_048.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_049.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_049.jpg Binary files differdeleted file mode 100755 index bf22844..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_049.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_050.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_050.jpg Binary files differdeleted file mode 100755 index 65addde..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_050.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_051.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_051.jpg Binary files differdeleted file mode 100755 index aabb52b..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_051.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_052.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_052.jpg Binary files differdeleted file mode 100755 index 3d4bad8..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_052.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_053.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_053.jpg Binary files differdeleted file mode 100755 index d30c4d0..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_053.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_054.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_054.jpg Binary files differdeleted file mode 100755 index c27a34c..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_054.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_055.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_055.jpg Binary files differdeleted file mode 100755 index bac6e3f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_055.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_056.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_056.jpg Binary files differdeleted file mode 100755 index 246624e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_056.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_057.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_057.jpg Binary files differdeleted file mode 100755 index 0122037..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_057.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_058.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_058.jpg Binary files differdeleted file mode 100755 index 71f602f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_058.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_059.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_059.jpg Binary files differdeleted file mode 100755 index 78b0dd1..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_059.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_060.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_060.jpg Binary files differdeleted file mode 100755 index b2c699c..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_060.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_061.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_061.jpg Binary files differdeleted file mode 100755 index 082fe53..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_061.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_062.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_062.jpg Binary files differdeleted file mode 100755 index 9b3bd8a..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_062.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_063.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_063.jpg Binary files differdeleted file mode 100755 index 34bbfc5..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_063.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_064.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_064.jpg Binary files differdeleted file mode 100755 index ac0ddc7..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_064.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_065.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_065.jpg Binary files differdeleted file mode 100755 index f85dce5..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_065.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_066.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_066.jpg Binary files differdeleted file mode 100755 index 616dd5c..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_066.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_067.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_067.jpg Binary files differdeleted file mode 100755 index bbbaecf..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_067.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_068.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_068.jpg Binary files differdeleted file mode 100755 index d0b6a18..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_068.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_069.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_069.jpg Binary files differdeleted file mode 100755 index 27e1abc..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_069.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_070.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_070.jpg Binary files differdeleted file mode 100755 index de1a15e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_070.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_071.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_071.jpg Binary files differdeleted file mode 100755 index 40912e3..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_071.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_072.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_072.jpg Binary files differdeleted file mode 100755 index ef01d06..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_072.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_073.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_073.jpg Binary files differdeleted file mode 100755 index 3298be7..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_073.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_074.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_074.jpg Binary files differdeleted file mode 100755 index 28fb75c..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_074.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_075.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_075.jpg Binary files differdeleted file mode 100755 index 1f70c5e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_075.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_076.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_076.jpg Binary files differdeleted file mode 100755 index d929f53..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_076.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_077.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_077.jpg Binary files differdeleted file mode 100755 index 49c8ca1..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_077.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_078.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_078.jpg Binary files differdeleted file mode 100755 index a21dd87..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_078.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_079.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_079.jpg Binary files differdeleted file mode 100755 index bfbd4c2..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_079.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_080.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_080.jpg Binary files differdeleted file mode 100755 index 6ff068c..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_080.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_081.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_081.jpg Binary files differdeleted file mode 100755 index dd615c7..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_081.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_082.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_082.jpg Binary files differdeleted file mode 100755 index 0c28382..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_082.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_083.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_083.jpg Binary files differdeleted file mode 100755 index 5512c16..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_083.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_084.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_084.jpg Binary files differdeleted file mode 100755 index d08ac7b..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_084.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_085.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_085.jpg Binary files differdeleted file mode 100755 index c098f72..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_085.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_086.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_086.jpg Binary files differdeleted file mode 100755 index 203e41d..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_086.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_087.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_087.jpg Binary files differdeleted file mode 100755 index b664135..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_087.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_088.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_088.jpg Binary files differdeleted file mode 100755 index e211d21..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_088.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_089.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_089.jpg Binary files differdeleted file mode 100755 index 00c4730..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_089.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_090.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_090.jpg Binary files differdeleted file mode 100755 index 7203f10..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_090.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_091.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_091.jpg Binary files differdeleted file mode 100755 index f57baa9..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_091.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_092.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_092.jpg Binary files differdeleted file mode 100755 index cba16c6..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_092.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_093.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_093.jpg Binary files differdeleted file mode 100755 index 6d4c1a5..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_093.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_094.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_094.jpg Binary files differdeleted file mode 100755 index a5f6a2a..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_094.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_095.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_095.jpg Binary files differdeleted file mode 100755 index d213fe5..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_095.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_096.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_096.jpg Binary files differdeleted file mode 100755 index 0fd51eb..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_096.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_097.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_097.jpg Binary files differdeleted file mode 100755 index 2b706cc..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_097.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_098.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_098.jpg Binary files differdeleted file mode 100755 index 7861f2a..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_098.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_099.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_099.jpg Binary files differdeleted file mode 100755 index be10042..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_099.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_100.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_100.jpg Binary files differdeleted file mode 100755 index 8687873..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_100.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_101.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_101.jpg Binary files differdeleted file mode 100755 index fe4b56a..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_101.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_102.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_102.jpg Binary files differdeleted file mode 100755 index d888f6c..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_102.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_103.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_103.jpg Binary files differdeleted file mode 100755 index 4ebf13d..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_103.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_104.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_104.jpg Binary files differdeleted file mode 100755 index b4dc051..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_104.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_105.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_105.jpg Binary files differdeleted file mode 100755 index 4f3c5a1..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_105.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_106.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_106.jpg Binary files differdeleted file mode 100755 index 51d6742..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_106.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_107.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_107.jpg Binary files differdeleted file mode 100755 index ef986b7..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_107.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_108.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_108.jpg Binary files differdeleted file mode 100755 index 8901141..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_108.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_109.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_109.jpg Binary files differdeleted file mode 100755 index a946a2b..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_109.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_110.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_110.jpg Binary files differdeleted file mode 100755 index 35d542c..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_110.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_111.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_111.jpg Binary files differdeleted file mode 100755 index 0ec9641..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_111.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_112.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_112.jpg Binary files differdeleted file mode 100755 index 530739a..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_112.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_113.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_113.jpg Binary files differdeleted file mode 100755 index 0537d7f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_113.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_114.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_114.jpg Binary files differdeleted file mode 100755 index 9ecb936..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_114.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_115.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_115.jpg Binary files differdeleted file mode 100755 index 221e6f4..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_115.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_116.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_116.jpg Binary files differdeleted file mode 100755 index 0de1084..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_116.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_117.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_117.jpg Binary files differdeleted file mode 100755 index 8ebd1ea..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_117.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_118.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_118.jpg Binary files differdeleted file mode 100755 index 246d055..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_118.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_119.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_119.jpg Binary files differdeleted file mode 100755 index 8d92e15..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_119.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_120.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_120.jpg Binary files differdeleted file mode 100755 index 8ebef73..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_120.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_121.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_121.jpg Binary files differdeleted file mode 100755 index e7a3772..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_121.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_122.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_122.jpg Binary files differdeleted file mode 100755 index 6a57fc8..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_122.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_123.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_123.jpg Binary files differdeleted file mode 100755 index b941523..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_123.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_124.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_124.jpg Binary files differdeleted file mode 100755 index 9dddf38..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_124.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_125.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_125.jpg Binary files differdeleted file mode 100755 index d2e479e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_125.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_126.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_126.jpg Binary files differdeleted file mode 100755 index 32fc518..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_126.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_127.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_127.jpg Binary files differdeleted file mode 100755 index c5f71cc..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_127.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_128.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_128.jpg Binary files differdeleted file mode 100755 index d899e3d..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_128.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_129.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_129.jpg Binary files differdeleted file mode 100755 index 3508872..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_129.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_130.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_130.jpg Binary files differdeleted file mode 100755 index b26d716..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_130.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_131.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_131.jpg Binary files differdeleted file mode 100755 index 56a27d4..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_131.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_132.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_132.jpg Binary files differdeleted file mode 100755 index b34a2f0..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_132.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_133.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_133.jpg Binary files differdeleted file mode 100755 index b5dc4da..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_133.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_134.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_134.jpg Binary files differdeleted file mode 100755 index 24d6866..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_134.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_135.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_135.jpg Binary files differdeleted file mode 100755 index f0c27c8..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_135.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_136.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_136.jpg Binary files differdeleted file mode 100755 index d3b3b28..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_136.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_137.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_137.jpg Binary files differdeleted file mode 100755 index 7e78d35..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_137.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_138.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_138.jpg Binary files differdeleted file mode 100755 index 5a0024e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_138.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_139.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_139.jpg Binary files differdeleted file mode 100755 index e0e16bc..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_139.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_140.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_140.jpg Binary files differdeleted file mode 100755 index b9c54c4..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_140.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_141.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_141.jpg Binary files differdeleted file mode 100755 index f62eada..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_141.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_142.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_142.jpg Binary files differdeleted file mode 100755 index 6085722..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_142.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_143.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_143.jpg Binary files differdeleted file mode 100755 index f533fe5..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_143.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_144.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_144.jpg Binary files differdeleted file mode 100755 index bcc5602..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_144.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_145.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_145.jpg Binary files differdeleted file mode 100755 index 3b9402e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_145.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_146.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_146.jpg Binary files differdeleted file mode 100755 index f2f049b..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_146.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_147.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_147.jpg Binary files differdeleted file mode 100755 index 06fc738..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_147.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_148.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_148.jpg Binary files differdeleted file mode 100755 index e094d96..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_148.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_149.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_149.jpg Binary files differdeleted file mode 100755 index 26ab8d7..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_149.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_150.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_150.jpg Binary files differdeleted file mode 100755 index 02ca417..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_150.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_151.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_151.jpg Binary files differdeleted file mode 100755 index 78fe841..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_151.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_152.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_152.jpg Binary files differdeleted file mode 100755 index 9cfa47a..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_152.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_153.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_153.jpg Binary files differdeleted file mode 100755 index 0a67731..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_153.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_154.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_154.jpg Binary files differdeleted file mode 100755 index 9a38955..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_154.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_155.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_155.jpg Binary files differdeleted file mode 100755 index 5a10b47..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_155.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_156.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_156.jpg Binary files differdeleted file mode 100755 index 809d5f9..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_156.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_157.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_157.jpg Binary files differdeleted file mode 100755 index 8c852e2..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_157.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_158.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_158.jpg Binary files differdeleted file mode 100755 index 5ef80f7..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_158.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_159.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_159.jpg Binary files differdeleted file mode 100755 index 2fe485f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_159.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_160.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_160.jpg Binary files differdeleted file mode 100755 index 072cfc6..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_160.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_161.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_161.jpg Binary files differdeleted file mode 100755 index cd66e83..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_161.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_162.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_162.jpg Binary files differdeleted file mode 100755 index 6af87e8..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_162.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_163.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_163.jpg Binary files differdeleted file mode 100755 index 1a903c3..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_163.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_164.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_164.jpg Binary files differdeleted file mode 100755 index 71694cf..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_164.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_165.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_165.jpg Binary files differdeleted file mode 100755 index 084c64a..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_165.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_166.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_166.jpg Binary files differdeleted file mode 100755 index 6554740..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_166.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_167.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_167.jpg Binary files differdeleted file mode 100755 index ef2d248..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_167.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_168.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_168.jpg Binary files differdeleted file mode 100755 index fda5636..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_168.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_169.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_169.jpg Binary files differdeleted file mode 100755 index 7b53b20..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_169.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_170.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_170.jpg Binary files differdeleted file mode 100755 index 271c69d..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_170.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_171.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_171.jpg Binary files differdeleted file mode 100755 index a52ac34..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_171.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_172.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_172.jpg Binary files differdeleted file mode 100755 index 7438a7e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_172.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_173.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_173.jpg Binary files differdeleted file mode 100755 index d91d538..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_173.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_174.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_174.jpg Binary files differdeleted file mode 100755 index 3901ca5..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_174.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_175.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_175.jpg Binary files differdeleted file mode 100755 index 106900d..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_175.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_176.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_176.jpg Binary files differdeleted file mode 100755 index c4a54bf..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_176.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_177.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_177.jpg Binary files differdeleted file mode 100755 index d214f26..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_177.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_178.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_178.jpg Binary files differdeleted file mode 100755 index be6cb55..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_178.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_179.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_179.jpg Binary files differdeleted file mode 100755 index 516faa1..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_179.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_180.jpg b/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_180.jpg Binary files differdeleted file mode 100755 index 67bf870..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/004/gophertiles_180.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/006.html b/debian/perl-framework/t/htdocs/modules/h2/006.html deleted file mode 100755 index 6b73025..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/006.html +++ /dev/null @@ -1,23 +0,0 @@ -<!DOCTYPE HTML>
- <html>
- <head>
- <title>HTML/2.0 Test File: 006</title>
- <link rel="stylesheet" type="text/css" href="006/006.css">
- <script type="text/javascript" src="006/006.js"></script>
- </head>
- <body>
- <h1>HTML/2.0 Test File: 006</h1>
- <div class="listTitle">This page contains:
- <ul class="listElements">
- <li>HTML
- <li>CSS
- <li>JavaScript
- </ul>
- </div>
- <div class="listTitle">
- <script type="text/javascript">
- mainJavascript();
- </script>
- </div>
- </body>
-</html>
\ No newline at end of file diff --git a/debian/perl-framework/t/htdocs/modules/h2/006/006.css b/debian/perl-framework/t/htdocs/modules/h2/006/006.css deleted file mode 100755 index de6aa5f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/006/006.css +++ /dev/null @@ -1,21 +0,0 @@ -@CHARSET "ISO-8859-1";
-body{
- background:HoneyDew;
-}
-p{
-color:#0000FF;
-text-align:left;
-}
-
-h1{
-color:#FF0000;
-text-align:center;
-}
-
-.listTitle{
- font-size:large;
-}
-
-.listElements{
- color:#3366FF
-}
\ No newline at end of file diff --git a/debian/perl-framework/t/htdocs/modules/h2/006/006.js b/debian/perl-framework/t/htdocs/modules/h2/006/006.js deleted file mode 100755 index b450067..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/006/006.js +++ /dev/null @@ -1,31 +0,0 @@ -/**
- * JavaScript Functions File
- */
-function returnDate()
-{
- var currentDate;
- currentDate=new Date();
- var dateString=(currentDate.getMonth()+1)+'/'+currentDate.getDate()+'/'+currentDate.getFullYear();
- return dateString;
-}
-
-function returnHour()
-{
- var currentDate;
- currentDate=new Date();
- var hourString=currentDate.getHours()+':'+currentDate.getMinutes()+':'+currentDate.getSeconds();
- return hourString;
-}
-
-function javaScriptMessage(){
- return 'This section is generated under JavaScript:<br>';
-}
-
-function mainJavascript(){
- document.write(javaScriptMessage())
- document.write('<ul class="listElements">');
- document.write('<li>Current date (dd/mm/yyyy): ' + returnDate());
- document.write('<br>');
- document.write('<li>Current time (hh:mm:ss): '+returnHour());
- document.write('</ul>');
-}
\ No newline at end of file diff --git a/debian/perl-framework/t/htdocs/modules/h2/007.html b/debian/perl-framework/t/htdocs/modules/h2/007.html deleted file mode 100755 index 4db93e4..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/007.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE html>
-<html>
-<head>
-<meta charset="ISO-8859-1">
-<title>HTML/2.0 Test File: 007</title>
-</head>
-<body>
- <h1>HTML/2.0 Test File: 007</h1>
- <div><p>This page is used to send data from the client to the server:</p>
- <FORM ACTION="007/007.py" METHOD="post" ENCTYPE="multipart/form-data">
- <input type="hidden" name="pageName" value="007.html">
- Name:<input type="text" name="pName" value="Write your name here." size="30" maxlength="30"><br>
- Age:<input type="text" name="pAge" value="00" size="2" maxlength="2"><br>
- Gender: Male<input type="radio" name="pGender" VALUE="Male">
- Female<input type="radio" name="pGender" VALUE="Female"><br>
- <input type="submit" name="userForm" value="Send">
- <input type="reset" value="Clear">
- </FORM>
- </div>
-</body>
-</html>
\ No newline at end of file diff --git a/debian/perl-framework/t/htdocs/modules/h2/007/007.py b/debian/perl-framework/t/htdocs/modules/h2/007/007.py deleted file mode 100755 index 02b5466..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/007/007.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import cgi, sys -import cgitb; cgitb.enable() - -print "Content-Type: text/html;charset=UTF-8" -print - -print """\ - <!DOCTYPE html><html><head> - <title>HTML/2.0 Test File: 007 (received data)</title></head> - <body><h1>HTML/2.0 Test File: 007</h1>""" - -# alternative output: parsed form params <-> plain POST body -parseContent = True # <-> False - -if parseContent: - print '<h2>Data processed:</h2><ul>' - form = cgi.FieldStorage() - for name in form: - print '<li>', name, ': ', form[name].value, '</li>' - print '</ul>' -else: - print '<h2>POST data output:</h2><div><pre>' - data = sys.stdin.read() - print data - print '</pre></div>' - -print '</body></html>'
\ No newline at end of file diff --git a/debian/perl-framework/t/htdocs/modules/h2/009.py b/debian/perl-framework/t/htdocs/modules/h2/009.py deleted file mode 100755 index 8fd9095..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/009.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import cgi, sys, time -import cgitb; cgitb.enable() - -print "Content-Type: text/html;charset=UTF-8" -print - -print """\ - <!DOCTYPE html><html><head> - <title>HTML/2.0 Test File: 009 (server time)</title></head> - <body><h1>HTML/2.0 Test File: 009</h1> - <p>60 seconds of server time, one by one.</p>""" - -for i in range(60): - s = time.strftime("%Y-%m-%d %H:%M:%S") - print "<div>", s, "</div>" - sys.stdout.flush() - time.sleep(1) - -print "<p>done.</p></body></html>"
\ No newline at end of file diff --git a/debian/perl-framework/t/htdocs/modules/h2/hello.pl b/debian/perl-framework/t/htdocs/modules/h2/hello.pl deleted file mode 100755 index 688b102..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/hello.pl +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env perl - -use Env; - -print "Content-Type: text/html\n"; -print "\n"; - -#my $ssl_protocol = $ENV{'SSL_TLS_SNI'}; -print <<EOF -<html><body> -<h2>Hello World!</h2> -</body></html> -EOF diff --git a/debian/perl-framework/t/htdocs/modules/h2/index.html b/debian/perl-framework/t/htdocs/modules/h2/index.html deleted file mode 100644 index aa11d4f..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/index.html +++ /dev/null @@ -1,45 +0,0 @@ -<html> - <head> - <title>mod_h2 test site</title> - </head> - <body> - <h1>mod_h2 test site</h1> - <p></p> - <h2>served directly</h2> - <ul> - <li><a href="001.html">01: html</a></li> - <li><a href="002.jpg">02: image</a></li> - <li><a href="003.html">03: html+image</a></li> - <li><a href="004.html">04: tiled image</a></li> - <li><a href="005.txt">05: large text</a></li> - <li><a href="006.html">06: html/js/css</a></li> - <li><a href="007.html">07: form submit</a></li> - <li><a href="upload.py">08: upload</a></li> - <li><a href="009.py">09: small chunks</a></li> - </ul> - <h2>mod_proxyied</h2> - <ul> - <li><a href="proxy/001.html">01: html</a></li> - <li><a href="proxy/002.jpg">02: image</a></li> - <li><a href="proxy/003.html">03: html+image</a></li> - <li><a href="proxy/004.html">04: tiled image</a></li> - <li><a href="proxy/005.txt">05: large text</a></li> - <li><a href="proxy/006.html">06: html/js/css</a></li> - <li><a href="proxy/007.html">07: form submit</a></li> - <li><a href="proxy/upload.py">08: upload</a></li> - <li><a href="proxy/009.py">09: small chunks</a></li> - </ul> - <h2>mod_rewritten</h2> - <ul> - <li><a href="rewrite/001.html">01: html</a></li> - <li><a href="rewrite/002.jpg">02: image</a></li> - <li><a href="rewrite/003.html">03: html+image</a></li> - <li><a href="rewrite/004.html">04: tiled image</a></li> - <li><a href="rewrite/005.txt">05: large text</a></li> - <li><a href="rewrite/006.html">06: html/js/css</a></li> - <li><a href="rewrite/007.html">07: form submit</a></li> - <li><a href="rewrite/upload.py">08: upload</a></li> - <li><a href="rewrite/009.py">09: small chunks</a></li> - </ul> - </body> -</html>
\ No newline at end of file diff --git a/debian/perl-framework/t/htdocs/modules/h2/index.jpg b/debian/perl-framework/t/htdocs/modules/h2/index.jpg Binary files differdeleted file mode 100755 index 246624e..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/index.jpg +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/h2/info.php b/debian/perl-framework/t/htdocs/modules/h2/info.php deleted file mode 100644 index 640e4f2..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/info.php +++ /dev/null @@ -1,3 +0,0 @@ -<?php - phpinfo(); -?>
\ No newline at end of file diff --git a/debian/perl-framework/t/htdocs/modules/h2/necho.pl b/debian/perl-framework/t/htdocs/modules/h2/necho.pl deleted file mode 100755 index bc9b6c0..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/necho.pl +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env perl - -use Env; - -my $query = $ENV{QUERY_STRING}; - -if ($query) { - $query =~ /count=([0-9]+)/; - my $count = $1; - $query =~ /text=([^&]+)/; - my $text = $1; - - print "Status: 200\n"; - print "Content-Type: text/plain\n"; - print "\n"; - foreach my $i (1..$count) { - print $text; - } -} -else { - print "Status: 400 Parameter Missing\n"; - print "Content-Type: text/plain\n"; - print "\n"; - print <<EOF; -<html><body> -<p>No query was specified.</p> -</body></html> -EOF -} diff --git a/debian/perl-framework/t/htdocs/modules/h2/upload.pl b/debian/perl-framework/t/htdocs/modules/h2/upload.pl deleted file mode 100755 index 71880f1..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/upload.pl +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python -import cgi, os -import cgitb; cgitb.enable() - -status = '200 Ok' - -try: # Windows needs stdio set for binary mode. - import msvcrt - msvcrt.setmode (0, os.O_BINARY) # stdin = 0 - msvcrt.setmode (1, os.O_BINARY) # stdout = 1 -except ImportError: - pass - -form = cgi.FieldStorage() - -# Test if the file was uploaded -if 'file' in form: - # A nested FieldStorage instance holds the file - fileitem = form['file'] - - # strip leading path from file name to avoid directory traversal attacks - fn = os.path.basename(fileitem.filename) - open('./files/' + fn, 'wb').write(fileitem.file.read()) - message = 'The file "' + fn + '" was uploaded successfully' - -elif 'remove' in form: - remove = form['remove'].value - try: - fn = os.path.basename(remove) - os.remove('./files/' + fn) - message = 'The file "' + fn + '" was removed successfully' - except OSError, e: - message = 'Error removing ' + fn + ': ' + e.strerror - status = '404 File Not Found' -else: - message = '''\ - Upload File<form method="POST" enctype="multipart/form-data"> - <input type="file" name="file"> - <button type="submit">Upload</button></form> - ''' - -print "Status: %s" % (status,) -print """\ - Content-Type: text/html\n - <html><body> - <p>%s</p> - </body></html>""" % (message,) diff --git a/debian/perl-framework/t/htdocs/modules/h2/upload.py b/debian/perl-framework/t/htdocs/modules/h2/upload.py deleted file mode 100755 index 71880f1..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/upload.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python -import cgi, os -import cgitb; cgitb.enable() - -status = '200 Ok' - -try: # Windows needs stdio set for binary mode. - import msvcrt - msvcrt.setmode (0, os.O_BINARY) # stdin = 0 - msvcrt.setmode (1, os.O_BINARY) # stdout = 1 -except ImportError: - pass - -form = cgi.FieldStorage() - -# Test if the file was uploaded -if 'file' in form: - # A nested FieldStorage instance holds the file - fileitem = form['file'] - - # strip leading path from file name to avoid directory traversal attacks - fn = os.path.basename(fileitem.filename) - open('./files/' + fn, 'wb').write(fileitem.file.read()) - message = 'The file "' + fn + '" was uploaded successfully' - -elif 'remove' in form: - remove = form['remove'].value - try: - fn = os.path.basename(remove) - os.remove('./files/' + fn) - message = 'The file "' + fn + '" was removed successfully' - except OSError, e: - message = 'Error removing ' + fn + ': ' + e.strerror - status = '404 File Not Found' -else: - message = '''\ - Upload File<form method="POST" enctype="multipart/form-data"> - <input type="file" name="file"> - <button type="submit">Upload</button></form> - ''' - -print "Status: %s" % (status,) -print """\ - Content-Type: text/html\n - <html><body> - <p>%s</p> - </body></html>""" % (message,) diff --git a/debian/perl-framework/t/htdocs/modules/h2/xxx-1.0.2a.tar.gz b/debian/perl-framework/t/htdocs/modules/h2/xxx-1.0.2a.tar.gz Binary files differdeleted file mode 100644 index f025d43..0000000 --- a/debian/perl-framework/t/htdocs/modules/h2/xxx-1.0.2a.tar.gz +++ /dev/null diff --git a/debian/perl-framework/t/htdocs/modules/include/comment.shtml b/debian/perl-framework/t/htdocs/modules/include/comment.shtml new file mode 100755 index 0000000..b278735 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/include/comment.shtml @@ -0,0 +1,5 @@ +No +<!--#comment blah blah blah ... --> +comment +<!--#comment blah blah blah ... --> +here diff --git a/debian/perl-framework/t/htdocs/modules/include/mod_request/echo.shtml b/debian/perl-framework/t/htdocs/modules/include/mod_request/echo.shtml new file mode 100755 index 0000000..b211acf --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/include/mod_request/echo.shtml @@ -0,0 +1 @@ +<!--#echo var="DOCUMENT_NAME" --> diff --git a/debian/perl-framework/t/htdocs/modules/include/mod_request/post.shtml b/debian/perl-framework/t/htdocs/modules/include/mod_request/post.shtml new file mode 100755 index 0000000..a6721e3 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/include/mod_request/post.shtml @@ -0,0 +1 @@ +<!--#include virtual="/modules/cgi/perl_post.pl?$QUERY_STRING"--> diff --git a/debian/perl-framework/t/htdocs/modules/lua/filters.lua b/debian/perl-framework/t/htdocs/modules/lua/filters.lua new file mode 100644 index 0000000..4236ecc --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/lua/filters.lua @@ -0,0 +1,16 @@ +--[[ + Example output filter that escapes all HTML entities in the output +]]-- +function output_filter(r) + coroutine.yield("prefix\n") + while bucket do -- For each bucket, do... + if string.len(bucket) > 0 then + local output = "bucket:" .. bucket .. "\n" + coroutine.yield(output) -- Send converted data down the chain + else + coroutine.yield("") -- Send converted data down the chain + end + end + coroutine.yield("suffix\n") + -- No more buckets available. +end diff --git a/debian/perl-framework/t/htdocs/modules/lua/websockets.lua b/debian/perl-framework/t/htdocs/modules/lua/websockets.lua new file mode 100644 index 0000000..6e6d5ba --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/lua/websockets.lua @@ -0,0 +1,18 @@ +function handle(r) +if r:wsupgrade() then -- if we can upgrade: + while true do + local line, isFinal = r:wsread() + local len = string.len(line); + r:debug(string.format("writing line of len %d: %s", len, line)) + if len >= 1024 then + r:debug("writing line ending in '" .. string.sub(line, -127, -1) .. "'") + end + r:wswrite(line) + if line == "quit" then + r:wsclose() -- goodbye! + break + end + + end +end +end diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/de/compressed/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/de/compressed/index.html.zh-TW new file mode 100755 index 0000000..453658e --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/de/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/de/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/de/index.html.zh-TW new file mode 100755 index 0000000..f653cbe --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/de/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/de/two/index.zh-TW.html b/debian/perl-framework/t/htdocs/modules/negotiation/de/two/index.zh-TW.html new file mode 100755 index 0000000..f4f6298 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/de/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/de/two/map.var b/debian/perl-framework/t/htdocs/modules/negotiation/de/two/map.var index 6b6abcf..1069a10 100644 --- a/debian/perl-framework/t/htdocs/modules/negotiation/de/two/map.var +++ b/debian/perl-framework/t/htdocs/modules/negotiation/de/two/map.var @@ -15,3 +15,7 @@ Content-Language: fr URI: index.fu.html Content-Type: text/html Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/en/compressed/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/en/compressed/index.html.zh-TW new file mode 100755 index 0000000..453658e --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/en/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/en/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/en/index.html.zh-TW new file mode 100755 index 0000000..f653cbe --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/en/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/en/two/index.zh-TW.html b/debian/perl-framework/t/htdocs/modules/negotiation/en/two/index.zh-TW.html new file mode 100755 index 0000000..f4f6298 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/en/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/en/two/map.var b/debian/perl-framework/t/htdocs/modules/negotiation/en/two/map.var index 6b6abcf..1069a10 100644 --- a/debian/perl-framework/t/htdocs/modules/negotiation/en/two/map.var +++ b/debian/perl-framework/t/htdocs/modules/negotiation/en/two/map.var @@ -15,3 +15,7 @@ Content-Language: fr URI: index.fu.html Content-Type: text/html Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/fr/compressed/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/fr/compressed/index.html.zh-TW new file mode 100755 index 0000000..453658e --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/fr/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/fr/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/fr/index.html.zh-TW new file mode 100755 index 0000000..f653cbe --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/fr/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/fr/two/index.zh-TW.html b/debian/perl-framework/t/htdocs/modules/negotiation/fr/two/index.zh-TW.html new file mode 100755 index 0000000..f4f6298 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/fr/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/fr/two/map.var b/debian/perl-framework/t/htdocs/modules/negotiation/fr/two/map.var index 6b6abcf..1069a10 100644 --- a/debian/perl-framework/t/htdocs/modules/negotiation/fr/two/map.var +++ b/debian/perl-framework/t/htdocs/modules/negotiation/fr/two/map.var @@ -15,3 +15,7 @@ Content-Language: fr URI: index.fu.html Content-Type: text/html Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/fu/compressed/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/fu/compressed/index.html.zh-TW new file mode 100755 index 0000000..453658e --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/fu/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/fu/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/fu/index.html.zh-TW new file mode 100755 index 0000000..f653cbe --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/fu/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/fu/two/index.zh-TW.html b/debian/perl-framework/t/htdocs/modules/negotiation/fu/two/index.zh-TW.html new file mode 100755 index 0000000..f4f6298 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/fu/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/fu/two/map.var b/debian/perl-framework/t/htdocs/modules/negotiation/fu/two/map.var index 6b6abcf..1069a10 100644 --- a/debian/perl-framework/t/htdocs/modules/negotiation/fu/two/map.var +++ b/debian/perl-framework/t/htdocs/modules/negotiation/fu/two/map.var @@ -15,3 +15,7 @@ Content-Language: fr URI: index.fu.html Content-Type: text/html Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.de b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.de new file mode 100755 index 0000000..555bd83 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.de @@ -0,0 +1 @@ +index.html.de.gz diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.en b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.en new file mode 100755 index 0000000..b0d750c --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.en @@ -0,0 +1 @@ +index.html.en.gz diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fr b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fr new file mode 100755 index 0000000..3a8b0bd --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fr @@ -0,0 +1 @@ +index.html.fr.gz diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fu b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fu new file mode 100755 index 0000000..c0b85df --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fu @@ -0,0 +1 @@ +index.html.fu.gz diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.zh-TW new file mode 100755 index 0000000..453658e --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.de b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.de new file mode 100755 index 0000000..1d9a5e8 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.de @@ -0,0 +1 @@ +index.html.de diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.en b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.en new file mode 100755 index 0000000..d288e3c --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.en @@ -0,0 +1 @@ +index.html.en diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.fr b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.fr new file mode 100755 index 0000000..e739edd --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.fr @@ -0,0 +1 @@ +index.html.fr diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.fu b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.fu new file mode 100755 index 0000000..c0b6f1f --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.fu @@ -0,0 +1 @@ +index.html.fu diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.zh-TW b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.zh-TW new file mode 100755 index 0000000..f653cbe --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.de.html b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.de.html new file mode 100755 index 0000000..075f6bc --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.de.html @@ -0,0 +1 @@ +index.de.html diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.en.html b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.en.html new file mode 100755 index 0000000..35c0623 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.en.html @@ -0,0 +1 @@ +index.en.html diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.fr.html b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.fr.html new file mode 100755 index 0000000..8c756a7 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.fr.html @@ -0,0 +1 @@ +index.fr.html diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.fu.html b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.fu.html new file mode 100755 index 0000000..72eb5ef --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.fu.html @@ -0,0 +1 @@ +index.fu.html diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.zh-TW.html b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.zh-TW.html new file mode 100755 index 0000000..f4f6298 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/map.var b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/map.var new file mode 100755 index 0000000..1069a10 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/negotiation/zh-TW/two/map.var @@ -0,0 +1,21 @@ +URI: index.html + +URI: index.en.html +Content-Type: text/html +Content-Language: en + +URI: index.de.html +Content-Type: text/html +Content-Language: de + +URI: index.fr.html +Content-Type: text/html +Content-Language: fr + +URI: index.fu.html +Content-Type: text/html +Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/debian/perl-framework/t/htdocs/modules/substitute/.empty b/debian/perl-framework/t/htdocs/modules/substitute/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/substitute/.empty diff --git a/debian/perl-framework/t/htdocs/modules/xml2enc/doc.fooxml b/debian/perl-framework/t/htdocs/modules/xml2enc/doc.fooxml new file mode 100644 index 0000000..612ba3c --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/xml2enc/doc.fooxml @@ -0,0 +1 @@ +fóó diff --git a/debian/perl-framework/t/htdocs/modules/xml2enc/doc.isohtml b/debian/perl-framework/t/htdocs/modules/xml2enc/doc.isohtml new file mode 100644 index 0000000..9a07943 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/xml2enc/doc.isohtml @@ -0,0 +1 @@ +fóó diff --git a/debian/perl-framework/t/htdocs/modules/xml2enc/doc.notxml b/debian/perl-framework/t/htdocs/modules/xml2enc/doc.notxml new file mode 100644 index 0000000..9a07943 --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/xml2enc/doc.notxml @@ -0,0 +1 @@ +fóó diff --git a/debian/perl-framework/t/htdocs/modules/xml2enc/doc.xml b/debian/perl-framework/t/htdocs/modules/xml2enc/doc.xml new file mode 100644 index 0000000..612ba3c --- /dev/null +++ b/debian/perl-framework/t/htdocs/modules/xml2enc/doc.xml @@ -0,0 +1 @@ +fóó diff --git a/debian/perl-framework/t/htdocs/servlet/mapping.html b/debian/perl-framework/t/htdocs/servlet/mapping.html new file mode 100644 index 0000000..f0b7bc7 --- /dev/null +++ b/debian/perl-framework/t/htdocs/servlet/mapping.html @@ -0,0 +1 @@ +hello servlet diff --git a/debian/perl-framework/t/modules/actions.t b/debian/perl-framework/t/modules/actions.t new file mode 100644 index 0000000..337d4d8 --- /dev/null +++ b/debian/perl-framework/t/modules/actions.t @@ -0,0 +1,59 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestRequest; +use Apache::TestUtil; + +## +## mod_action tests +## +my @tests_action = ( + [ "mod_actions/", 200, "nada"], # Handler for this location + + [ "modules/actions/action/test.xyz", 404], # No handler for .xyz + [ "modules/actions/action/test.xyz1", 404], # Handler for .xyz1, but not virtual + [ "modules/actions/action/test.xyz22", 404], # No Handler for .xyz2x (but one for .xyz2) + + [ "modules/actions/action/test.xyz2", 200, "nada"], # Handler for .xyz2, and virtual +); + +my @tests_script = ( + [ "modules/actions/script/test.x", 404], + [ "modules/actions/script/test.x?foo=bar", 200, "foo=bar"], +); + +my $r; + +plan tests => scalar @tests_action*2 + scalar @tests_script*(2+2+1), need_module('mod_actions'); + +foreach my $test (@tests_action) { + $r = GET($test->[0]); + ok t_cmp($r->code, $test->[1]); + if ($test->[1] == 200) { + ok t_cmp($r->content, $test->[2]); + } + else { + skip "RC=404, no need to check content", 1; + } +} + +foreach my $test (@tests_script) { + $r = GET($test->[0]); + ok t_cmp($r->code, $test->[1]); + if ($test->[1] == 200) { + ok t_cmp($r->content, $test->[2]); + } + else { + skip "RC=404, no need to check content", 1; + } + + $r = POST($test->[0], content => "foo2=bar2"); + ok t_cmp($r->code, 200); + ok t_cmp($r->content, "POST\nfoo2: bar2\n"); + + # Method not allowed + $r = PUT($test->[0], content => "foo2=bar2"); + ok t_cmp($r->code, 405); +} + diff --git a/debian/perl-framework/t/modules/alias.t b/debian/perl-framework/t/modules/alias.t index a605966..957fccc 100644 --- a/debian/perl-framework/t/modules/alias.t +++ b/debian/perl-framework/t/modules/alias.t @@ -35,6 +35,14 @@ my %rm_rc = ( f => '403' ); + +my %relative_redirects = ( + "/redirect_relative/default" => "^http", # URL should be absolute + "/redirect_relative/on" => "^/out-on", # URL should be relative + "/redirect_relative/off" => "^http", # URL should be absolute + "/redirect_relative/off/fail" => undef, # 500 due to invalid URL +); + #XXX: find something that'll on other platforms (/bin/sh aint it) my $script_tests = WINFU ? 0 : 4 + have_min_apache_version("2.4.19"); @@ -44,6 +52,10 @@ my $tests = 12 + have_min_apache_version("2.4.19") * 10 + (keys %rm_rc) * (1 + have_min_apache_version("2.4.19")) * 10 + $script_tests; +if (have_min_apache_version("2.5.1")) { + $tests += (keys %relative_redirects)*2; +} + #LWP required to follow redirects plan tests => $tests, need need_module('alias'), need_lwp; @@ -207,3 +219,22 @@ ok t_cmp((GET_RC "/aliascgi-nada"), ## clean up ## t_rmtree("$vars->{t_logs}/mod_cgi.log"); + + +if (have_min_apache_version("2.5.1")) { + my ($path, $regex); + while (($path, $regex) = each (%relative_redirects)) { + local $Apache::TestRequest::RedirectOK = 0; + my $r; + $r = GET($path); + if (defined($regex)) { + ok t_cmp($r->code, "302"); + ok t_cmp($r->header("Location"), qr/$regex/, "failure on $path"); + } + else { + ok t_cmp($r->code, "500"); + ok t_cmp($r->header("Location"), undef, "failure on $path"); + } + } +} + diff --git a/debian/perl-framework/t/modules/allowmethods.t b/debian/perl-framework/t/modules/allowmethods.t index 6e2e815..d012554 100644 --- a/debian/perl-framework/t/modules/allowmethods.t +++ b/debian/perl-framework/t/modules/allowmethods.t @@ -9,6 +9,7 @@ my $r; my $get = "Get"; my $head = "Head"; my $post = "Post"; +my $options = "Options"; ## ## mod_allowmethods test @@ -25,11 +26,26 @@ my @test_cases = ( [ $post, $post, 200 ], ); +my @new_test_cases = ( + [ $get, $post . '/reset', 200 ], + [ $post, $get . '/post', 200 ], + [ $get, $get . '/post', 200 ], + [ $options, $get . '/post', 405 ], + [ $get, $get . '/none', 405 ], + [ $get, "NoPost", 200 ], + [ $post, "NoPost", 405 ], + [ $options, "NoPost" , 200 ], +); + +if (have_min_apache_version('2.5.1')) { + push(@test_cases, @new_test_cases); +} + plan tests => (scalar @test_cases), have_module 'allowmethods'; foreach my $case (@test_cases) { my ($fct, $allowed, $rc) = @{$case}; - + if ($fct eq $get) { $r = GET('/modules/allowmethods/' . $allowed . '/'); } @@ -39,7 +55,10 @@ foreach my $case (@test_cases) { elsif ($fct eq $post) { $r = POST('/modules/allowmethods/' . $allowed . '/foo.txt'); } + elsif ($fct eq $options) { + $r = OPTIONS('/modules/allowmethods/' . $allowed . '/'); + } - ok t_cmp($r->code, $rc, $fct . " - When " . $allowed . " is allowed."); + ok t_cmp($r->code, $rc, "$fct request to /$allowed responds $rc"); } - + diff --git a/debian/perl-framework/t/modules/autoindex.t b/debian/perl-framework/t/modules/autoindex.t index acd9656..76c9af4 100644 --- a/debian/perl-framework/t/modules/autoindex.t +++ b/debian/perl-framework/t/modules/autoindex.t @@ -122,8 +122,17 @@ foreach my $fancy (0,1) { sub ai_test ($$$$) { my ($htconf,$c,$o,$t_uri) = @_; - my $html_head = <<HEAD; -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> + my $html_head; + + if (have_min_apache_version('2.5.1')) { + $html_head = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'; + } + else { + $html_head = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'; + } + + $html_head .= <<HEAD; + <html> <head> <title>Index of $uri_prefix</title> diff --git a/debian/perl-framework/t/modules/brotli.t b/debian/perl-framework/t/modules/brotli.t index fcbed74..0f9dc13 100644 --- a/debian/perl-framework/t/modules/brotli.t +++ b/debian/perl-framework/t/modules/brotli.t @@ -5,49 +5,86 @@ use Apache::Test; use Apache::TestUtil; use Apache::TestRequest; -plan tests => 10, need_module 'brotli', need_module 'alias'; +my @qvalue = ( + [ '' , 1], + [ ' ' , 1], + [ ';' , 1], + [';q=' , 1], + [';q=0' , 0], + [';q=0.' , 0], + [';q=0.0' , 0], + [';q=0.00' , 0], + [';q=0.000' , 0], + [';q=0.0000' , 1], # invalid qvalue format +); + +plan tests => (6 * scalar @qvalue) + 4, need_module 'brotli', need_module 'alias'; my $r; -# GET request against the location with Brotli. -$r = GET("/only_brotli/index.html", "Accept-Encoding" => "br"); -ok t_cmp($r->code, 200); -ok t_cmp($r->header("Content-Encoding"), "br", "response Content-Encoding is OK"); -if (!defined($r->header("Content-Length"))) { - t_debug "Content-Length was expected"; - ok 0; -} -if (!defined($r->header("ETag"))) { - t_debug "ETag field was expected"; - ok 0; -} +foreach my $q (@qvalue) { + # GET request against the location with Brotli. + print "qvalue: " . $q->[0] . "\n"; + $r = GET("/only_brotli/index.html", "Accept-Encoding" => "br" . $q->[0]); + ok t_cmp($r->code, 200); + if ($q->[1] == 1) { + ok t_cmp($r->header("Content-Encoding"), "br", "response Content-Encoding is OK"); + } + else { + ok t_cmp($r->header("Content-Encoding"), undef, "response without Content-Encoding is OK"); + } + + if (!defined($r->header("Content-Length"))) { + t_debug "Content-Length was expected"; + ok 0; + } + if (!defined($r->header("ETag"))) { + t_debug "ETag field was expected"; + ok 0; + } -# GET request for a zero-length file. -$r = GET("/only_brotli/zero.txt", "Accept-Encoding" => "br"); -ok t_cmp($r->code, 200); -ok t_cmp($r->header("Content-Encoding"), "br", "response Content-Encoding is OK"); -if (!defined($r->header("Content-Length"))) { - t_debug "Content-Length was expected"; - ok 0; -} -if (!defined($r->header("ETag"))) { - t_debug "ETag field was expected"; - ok 0; -} + # GET request for a zero-length file. + print "qvalue: " . $q->[0] . "\n"; + $r = GET("/only_brotli/zero.txt", "Accept-Encoding" => "br" . $q->[0]); + ok t_cmp($r->code, 200); + if ($q->[1] == 1) { + ok t_cmp($r->header("Content-Encoding"), "br", "response Content-Encoding is OK"); + } + else { + ok t_cmp($r->header("Content-Encoding"), undef, "response without Content-Encoding is OK"); + } -# HEAD request against the location with Brotli. -$r = HEAD("/only_brotli/index.html", "Accept-Encoding" => "br"); -ok t_cmp($r->code, 200); -ok t_cmp($r->header("Content-Encoding"), "br", "response Content-Encoding is OK"); -if (!defined($r->header("Content-Length"))) { - t_debug "Content-Length was expected"; - ok 0; -} -if (!defined($r->header("ETag"))) { - t_debug "ETag field was expected"; - ok 0; + if (!defined($r->header("Content-Length"))) { + t_debug "Content-Length was expected"; + ok 0; + } + if (!defined($r->header("ETag"))) { + t_debug "ETag field was expected"; + ok 0; + } + + # HEAD request against the location with Brotli. + print "qvalue: " . $q->[0] . "\n"; + $r = HEAD("/only_brotli/index.html", "Accept-Encoding" => "br" . $q->[0]); + ok t_cmp($r->code, 200); + if ($q->[1] == 1) { + ok t_cmp($r->header("Content-Encoding"), "br", "response Content-Encoding is OK"); + } + else { + ok t_cmp($r->header("Content-Encoding"), undef, "response without Content-Encoding is OK"); + } + + if (!defined($r->header("Content-Length"))) { + t_debug "Content-Length was expected"; + ok 0; + } + if (!defined($r->header("ETag"))) { + t_debug "ETag field was expected"; + ok 0; + } } + if (have_module('deflate')) { # GET request against the location with fallback to deflate (test that # Brotli is chosen due to the order in SetOutputFilter). diff --git a/debian/perl-framework/t/modules/cgi.t b/debian/perl-framework/t/modules/cgi.t index d191d8d..9b6edc2 100644 --- a/debian/perl-framework/t/modules/cgi.t +++ b/debian/perl-framework/t/modules/cgi.t @@ -9,10 +9,7 @@ use File::stat; my $have_apache_2 = have_apache 2; my $have_apache_2050 = have_min_apache_version "2.0.50"; -my $script_log_length = 8192; -if (have_module 'mod_cgi') { - $script_log_length = 40960; -} +my $script_log_length = 40960; ## mod_cgi test ## @@ -21,12 +18,7 @@ if (have_module 'mod_cgi') { ## AddHandler cgi-script .sh ## AddHandler cgi-script .pl ## ScriptLog logs/mod_cgi.log -## <IfModule mod_cgi.c> -## ScriptLogLength 40960 -## </IfModule mod_cgi> -## <IfModule !mod_cgi.c> -## ScriptLogLength 8192 -## </IfModule mod_cgi> +## ScriptLogLength 40960 ## ScriptLogBuffer 256 ## <Directory @SERVERROOT@/htdocs/modules/cgi> ## Options +ExecCGI @@ -191,9 +183,8 @@ foreach my $length (@post_content) { $actual = POST_RC "$path/bogus-perl.pl", content => "$content"x$length; print "# posted content (length $length) to bogus-perl.pl\n"; - print "# got return code of: $actual, expecting: $expected\n"; ## should get rc 500 - ok ($actual eq $expected); + ok t_cmp($actual, $expected, "POST to $path/bogus-perl.pl [content: $content x $length]"); if (-e $cgi_log) { ## cgi log should be bigger. @@ -206,7 +197,7 @@ foreach my $length (@post_content) { ## should not fall in here at this point, ## but just in case... print "# verifying log did not increase in size...\n"; - ok ($$stat[7] eq $log_size); + ok t_cmp($$stat[7], $log_size, "log size should not have increased"); } $log_size = $$stat[7]; diff --git a/debian/perl-framework/t/modules/deflate.t b/debian/perl-framework/t/modules/deflate.t index c107b14..3b368ce 100644 --- a/debian/perl-framework/t/modules/deflate.t +++ b/debian/perl-framework/t/modules/deflate.t @@ -21,7 +21,7 @@ my @server_bucketeer_uri = ("/modules/deflate/bucketeer/P.txt", ); my $cgi_tests = 3; -my $tests_per_uri = 3; +my $tests_per_uri = 4; my $tests = $tests_per_uri * (@server_deflate_uris + @server_bucketeer_uri) + $cgi_tests; my $vars = Apache::Test::vars(); my $module = 'default'; @@ -33,6 +33,9 @@ print "testing $module\n"; my @deflate_headers; push @deflate_headers, "Accept-Encoding" => "gzip"; +my @deflate_headers_q0; +push @deflate_headers_q0, "Accept-Encoding" => "gzip;q=0"; + my @inflate_headers; push @inflate_headers, "Content-Encoding" => "gzip"; @@ -47,11 +50,13 @@ for my $server_deflate_uri (@server_deflate_uris) { my $original_str = GET_BODY($server_deflate_uri); my $deflated_str = GET_BODY($server_deflate_uri, @deflate_headers); + my $deflated_str_q0 = GET_BODY($server_deflate_uri, @deflate_headers_q0); my $inflated_str = POST_BODY($server_inflate_uri, @inflate_headers, content => $deflated_str); ok $original_str eq $inflated_str; + ok $original_str eq $deflated_str_q0; my $resp = POST($server_inflate_uri, @inflate_headers, content => "foo123456789012346"); if (have_min_apache_version("2.5")) { diff --git a/debian/perl-framework/t/modules/dir.t b/debian/perl-framework/t/modules/dir.t index 1b93423..51e632e 100644 --- a/debian/perl-framework/t/modules/dir.t +++ b/debian/perl-framework/t/modules/dir.t @@ -20,7 +20,7 @@ sub my_chomp { $actual =~ s/[\r\n]+$//s; } -plan tests => @bad_index * @index * 5 + @bad_index + 5, need_module 'dir'; +plan tests => @bad_index * @index * 5 + @bad_index + 5 + 3, need_module 'dir'; foreach my $bad_index (@bad_index) { @@ -91,6 +91,21 @@ $actual = GET_BODY $url; my_chomp(); ok ($actual eq $expected); +# DirectorySlash stuff +my $res = GET "/modules/dir", redirect_ok => 0; +ok ($res->code == 301); +$res = GET "/modules/dir/htaccess", redirect_ok => 0; +ok ($res->code == 403); + +if (!have_min_apache_version('2.5.1')) { + skip("missing DirectorySlash NotFound"); +} +else { + $res = GET "/modules/dir/htaccess/sub", redirect_ok => 0; + ok ($res->code == 404); +} + + sub write_htaccess { my $string = shift; diff --git a/debian/perl-framework/t/modules/headers.t b/debian/perl-framework/t/modules/headers.t index 3504a33..4892b95 100644 --- a/debian/perl-framework/t/modules/headers.t +++ b/debian/perl-framework/t/modules/headers.t @@ -2,6 +2,7 @@ use strict; use warnings FATAL => 'all'; use Apache::Test; +use Apache::TestUtil; use Apache::TestRequest; ## @@ -11,11 +12,138 @@ use Apache::TestRequest; my $htdocs = Apache::Test::vars('documentroot'); my $htaccess = "$htdocs/modules/headers/htaccess/.htaccess"; my @header_types = ('set', 'append', 'add', 'unset'); - + +my @testcases = ( + ## htaccess + ## Header to set in the request + ## Expected result + + # echo + [ + "Header echo Test-Header\nHeader echo ^Aaa\$\nHeader echo ^Aa\$", + [ 'Test-Header' => 'value', 'Aaa' => 'b' , 'Aa' => 'bb' ], + [ 'Test-Header' => 'value', 'Aaa' => 'b' , 'Aa' => 'bb' ], + ], + [ + "Header echo Test-Header\nHeader echo XXX\nHeader echo ^Aa\$", + [ 'Test-Header' => 'foo', 'aaa' => 'b', 'aa' => 'bb' ], + [ 'Test-Header' => 'foo', 'aa' => 'bb' ], + ], + [ + "Header echo Test-Header.*", # regex + [ 'Test-Header' => 'foo', 'Test-Header1' => 'value1', 'Test-Header2' => 'value2' ], + [ 'Test-Header' => 'foo', 'Test-Header1' => 'value1', 'Test-Header2' => 'value2' ], + ], + # edit + [ + "Header echo Test-Header\nHeader edit Test-Header foo bar", # sizeof(foo) = sizeof(bar) + [ 'Test-Header' => 'foofoo' ], + [ 'Test-Header' => 'barfoo' ], + ], + [ + "Header echo Test-Header\nHeader edit Test-Header foo2 bar", # sizeof(foo2) > sizeof(bar) + [ 'Test-Header' => 'foo2foo2' ], + [ 'Test-Header' => 'barfoo2' ], + ], + [ + "Header echo Test-Header\nHeader edit Test-Header foo bar2", # sizeof(foo) < sizeof(bar2) + [ 'Test-Header' => 'foofoo' ], + [ 'Test-Header' => 'bar2foo' ], + ], + # edit* + [ + "Header echo Test-Header\nHeader edit* Test-Header foo bar", # sizeof(foo) = sizeof(bar) + [ 'Test-Header' => 'foofoo' ], + [ 'Test-Header' => 'barbar' ], + ], + [ + "Header echo Test-Header\nHeader edit* Test-Header foo2 bar", # sizeof(foo2) > sizeof(bar) + [ 'Test-Header' => 'foo2foo2' ], + [ 'Test-Header' => 'barbar' ], + ], + [ + "Header echo Test-Header\nHeader edit* Test-Header foo bar2", # sizeof(foo) < sizeof(bar2) + [ 'Test-Header' => 'foofoo' ], + [ 'Test-Header' => 'bar2bar2' ], + ], + # merge + [ + "Header merge Test-Header foo", # missing header + [ ], + [ 'Test-Header' => 'foo' ], + ], + [ + "Header echo Test-Header\nHeader merge Test-Header foo", # already existing, same value + [ 'Test-Header' => 'foo' ], + [ 'Test-Header' => 'foo' ], + ], + [ + "Header echo Test-Header\nHeader merge Test-Header foo", # already existing, same value, but with "" + [ 'Test-Header' => '"foo"' ], + [ 'Test-Header' => '"foo", foo' ], + ], + [ + "Header echo Test-Header\nHeader merge Test-Header bar", # already existing, different value + [ 'Test-Header' => 'foo' ], + [ 'Test-Header' => 'foo, bar' ], + ], + # setifempty + [ + "Header echo Test-Header\nHeader setifempty Test-Header bar", # already existing + [ 'Test-Header' => 'foo' ], + [ 'Test-Header' => 'foo' ], + ], + [ + "Header echo Test-Header\nHeader setifempty Test-Header2 bar", # missing header + [ 'Test-Header' => 'foo' ], + [ 'Test-Header' => 'foo', 'Test-Header2' => 'bar' ], + ], + # env= + [ + "SetEnv MY_ENV\nHeader set Test-Header foo env=MY_ENV", # env defined + [ ], + [ 'Test-Header' => 'foo' ], + ], + [ + "Header set Test-Header foo env=!MY_ENV", # env NOT defined + [ ], + [ 'Test-Header' => 'foo' ], + ], + # expr= + [ + "Header set Test-Header foo \"expr=%{REQUEST_URI} =~ m#htaccess#\"", # expr + [ ], + [ 'Test-Header' => 'foo' ], + ], +); +if (have_min_apache_version('2.5.1')) { + push(@testcases, + ( + # edit* + [ + "Header echo Test-Header\nHeader edit* Test-Header (?<=a)(ba) cd", # lookbehind + [ 'Test-Header' => 'ababa' ], + [ 'Test-Header' => 'acdcd' ], + ], + [ + "Header echo Test-Header\nHeader edit* Test-Header ^ foo", # empty match (no infinite loop!) + [ 'Test-Header' => 'bar' ], + [ 'Test-Header' => 'foobar' ], + ], + [ + "Header echo Test-Header\nHeader edit* Test-Header ^(.*)\$ \$1;httpOnly;secure", # empty header/match (no infinite loop!) + [ 'Test-Header' => '' ], + [ 'Test-Header' => ';httpOnly;secure' ], + ], + ) + ); +} + plan tests => - @header_types**4 + @header_types**3 + @header_types**2 + @header_types**1, + @header_types**4 + @header_types**3 + @header_types**2 + @header_types**1 + scalar @testcases * 2, have_module 'headers'; +# Test various configurations foreach my $header1 (@header_types) { ok test_header($header1); @@ -37,6 +165,13 @@ foreach my $header1 (@header_types) { } +# Test some other Header directives, including regex +my $ua = LWP::UserAgent->new(); +my $hostport = Apache::TestRequest::hostport(); +foreach my $t (@testcases) { + test_header2($t); +} + ## clean up ## unlink $htaccess; @@ -157,3 +292,42 @@ sub test_header { } } + +sub test_header2 { + my @test = @_; + my $h = HTTP::Headers->new; + + print "\n\n\n"; + for (my $i = 0; $i < scalar @{$test[0][1]}; $i += 2) { + print "Header sent n°" . $i/2 . ":\n"; + print " header: " . $test[0][1][$i] . "\n"; + print " value: " . $test[0][1][$i+1] . "\n"; + $h->header($test[0][1][$i] => $test[0][1][$i+1]); + } + + open (HT, ">$htaccess"); + print HT $test[0][0]; + close(HT); + + ## + my $r = HTTP::Request->new('GET', "http://$hostport/modules/headers/htaccess/", $h); + my $res = $ua->request($r); + ok t_cmp($res->code, 200, "Checking return code is '200'"); + + my $isok = 1; + for (my $i = 0; $i < scalar @{$test[0][2]}; $i += 2) { + print "\n"; + print "Header received n°" . $i/2 . ":\n"; + print " header: " . $test[0][2][$i] . "\n"; + print " expected: " . $test[0][2][$i+1] . "\n"; + if ($res->header($test[0][2][$i])) { + print " received: " . $res->header($test[0][2][$i]) . "\n"; + } else { + print " received: <undefined>\n"; + } + $isok = $isok && $res->header($test[0][2][$i]) && $test[0][2][$i+1] eq $res->header($test[0][2][$i]); + } + print "\nResponse received is:\n" . $res->as_string; + + ok $isok; +} diff --git a/debian/perl-framework/t/modules/heartbeat.t b/debian/perl-framework/t/modules/heartbeat.t new file mode 100644 index 0000000..d9f6f18 --- /dev/null +++ b/debian/perl-framework/t/modules/heartbeat.t @@ -0,0 +1,30 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestRequest; +use Apache::TestUtil qw/t_start_error_log_watch t_finish_error_log_watch/; + +my $r; +my $line; +my $count = 0; +my $nb_seconds = 5; +# Because of timing, we may see less than what could be expected +my $nb_expected = $nb_seconds - 2; + +plan tests => 1, sub { need_module('mod_heartbeat', 'mod_heartmonitor') && !need_apache_mpm('prefork') }; + +# Give some time to the heart to beat a few times +t_start_error_log_watch(); +sleep($nb_seconds); +my @loglines = t_finish_error_log_watch(); + +# Heartbeat sent by mod_heartbeat and received by mod_heartmonitor are logged with DEBUG AH02086 message +foreach $line (@loglines) { + if ($line =~ "AH02086") { + $count++; + } +} + +print "Expecting at least " . $nb_expected . " heartbeat ; Seen: " . $count . "\n"; +ok($count >= $nb_expected); diff --git a/debian/perl-framework/t/modules/http2.t b/debian/perl-framework/t/modules/http2.t deleted file mode 100644 index d58f52f..0000000 --- a/debian/perl-framework/t/modules/http2.t +++ /dev/null @@ -1,528 +0,0 @@ -use strict; -use warnings FATAL => 'all'; - -use Net::SSLeay; -use Apache::Test; -use Apache::TestRequest; -use Apache::TestUtil; -use Apache::TestConfig (); - -my $tls_version_suite = 4; -my $num_suite = 24; -my $vhost_suite = 4; - -my $total_tests = 2 * $num_suite + $vhost_suite + $tls_version_suite; - -Net::SSLeay::initialize(); - -my $sni_available = Net::SSLeay::OPENSSL_VERSION_NUMBER() >= 0x01000000; -my $alpn_available = $sni_available && exists &Net::SSLeay::CTX_set_alpn_protos; - -plan tests => $total_tests, need 'Protocol::HTTP2::Client', - need_module 'http2', need_min_apache_version('2.4.17'); - -# Check support for TLSv1_2 and later - -my $tls_modern = 1; - -Apache::TestRequest::set_ca_cert(); -my $sock = Apache::TestRequest::vhost_socket('h2'); -ok ($sock && $sock->connected); - -my $req = "GET / HTTP/1.1\r\n". - "Host: " . Apache::TestRequest::hostport() . "\r\n". - "\r\n"; - -ok $sock->print($req); - -my $line = Apache::TestRequest::getline($sock) || ''; - -ok t_cmp($line, qr{^HTTP/1\.. 200}, "read first response-line"); - -my $tls_version = $sock->get_sslversion(); - -ok t_cmp($tls_version, qr{^(SSL|TLSv\d(_\d)?$)}, "TLS version in use"); - -if ($tls_version =~ /^(SSL|TLSv1(|_0|_1)$)/) { - print STDOUT "Disabling TLS tests due to TLS version $tls_version\n"; - $tls_modern = 0; -} - -Apache::TestRequest::module("http2"); - -my $config = Apache::Test::config(); -my $host = $config->{vhosts}->{h2c}->{servername}; -my $port = $config->{vhosts}->{h2c}->{port}; - -my $shost = $config->{vhosts}->{h2}->{servername}; -my $sport = $config->{vhosts}->{h2}->{port}; -my $serverdir = $config->{vars}->{t_dir}; -my $htdocs = $serverdir . "/htdocs"; - -require Protocol::HTTP2::Client; -use AnyEvent; -use AnyEvent::Socket; -use AnyEvent::Handle; -use Net::SSLeay; -use AnyEvent::TLS; -use Carp qw( croak ); - -no warnings 'redefine'; -no strict 'refs'; -{ - my $old_ref = \&{ 'AnyEvent::TLS::new' }; - *{ 'AnyEvent::TLS::new' } = sub { - my ( $class, %param ) = @_; - - my $self = $old_ref->( $class, %param ); - - $self->{host_name} = $param{host_name} - if exists $param{host_name}; - - $self; - }; -} - -{ - my $old_ref = \&{ 'AnyEvent::TLS::_get_session' }; - *{ 'AnyEvent::TLS::_get_session' } = sub($$;$$) { - my ($self, $mode, $ref, $cn) = @_; - - my $session = $old_ref->( @_ ); - - if ( $mode eq 'connect' ) { - if ( $self->{host_name} ) { - print 'setting host_name to ' . $self->{host_name}; - Net::SSLeay::set_tlsext_host_name( $session, $self->{host_name} ); - } - } - - $session; - }; -} - - -sub connect_and_do { - my %args = ( - @_ - ); - my $scheme = $args{ctx}->{scheme}; - my $host = $args{ctx}->{host}; - my $port = $args{ctx}->{port}; - my $client = $args{ctx}->{client}; - my $host_name = $args{ctx}->{host_name}; - my $w = AnyEvent->condvar; - - tcp_connect $host, $port, sub { - my ($fh) = @_ or do { - print "connection failed: $!\n"; - $w->send; - return; - }; - - my $tls; - my $tls_ctx; - if ($scheme eq 'https') { - $tls = "connect"; - eval { - # ALPN (Net-SSLeay > 1.55, openssl >= 1.0.1) - if ( $alpn_available ) { - $tls_ctx = AnyEvent::TLS->new( method => "TLSv1_2", - host_name => $host_name ); - Net::SSLeay::CTX_set_alpn_protos( $tls_ctx->ctx, ['h2'] ); - } - else { - $tls_ctx = AnyEvent::TLS->new( host_name => $host_name ); - } - }; - if ($@) { - print "Some problem with SSL CTX: $@\n"; - $w->send; - return; - } - } - - my $handle; - $handle = AnyEvent::Handle->new( - fh => $fh, - tls => $tls, - tls_ctx => $tls_ctx, - autocork => 1, - on_error => sub { - $_[0]->destroy; - print "connection error\n"; - $w->send; - }, - on_eof => sub { - $handle->destroy; - $w->send; - } - ); - - # First write preface to peer - while ( my $frame = $client->next_frame ) { - $handle->push_write($frame); - } - - $handle->on_read(sub { - my $handle = shift; - - $client->feed( $handle->{rbuf} ); - $handle->{rbuf} = undef; - - while ( my $frame = $client->next_frame ) { - $handle->push_write($frame); - } - - # Terminate connection if all done - $handle->push_shutdown if $client->shutdown; - }); - }; - $w->recv; - -} - -################################################################################ -# -# Add a request to the client, will be started whenever a STREAM to -# the server is available. -# -sub add_request { - my ($scheme, $client, $host, $port); - my %args = ( - method => 'GET', - headers => [], - rc => 200, - on_done => sub { - my %args = ( @_ ); - my $ctx = $args{ctx}; - my $req = $args{request}; - my $resp = $args{response}; - my $hr = $resp->{headers}; - my %headers = @$hr; - ok t_cmp($headers{':status'}, $req->{rc}, - "$req->{method} $ctx->{scheme}://$ctx->{host}:$ctx->{port}$req->{path}"); - }, - @_ - ); - $client = $args{ctx}->{client}; - $scheme = $args{ctx}->{scheme}; - $host = $args{ctx}->{host}; - $port = $args{ctx}->{port}; - - $client->request( - ':scheme' => $scheme, - ':authority' => $args{authority} || $host . ':' . $port, - ':path' => $args{path}, - ':method' => $args{method}, - headers => $args{headers}, - on_done => sub { - my ($headers, $data) = @_; - $args{on_done}( - ctx => $args{ctx}, - request => \%args, - response => { headers => \@$headers, data => $data } - ); - } - ); -} - -################################################################################ -# -# Add a list of request that will be processed in order. Only when the previous -# request is done, will a new one be started. -# -sub add_sequential { - my ($scheme, $client, $host, $port); - my %args = ( @_ ); - my $ctx = $args{ctx}; - my $requests = $args{requests}; - - $client = $args{ctx}->{client}; - $scheme = $args{ctx}->{scheme}; - $host = $args{ctx}->{host}; - $port = $args{ctx}->{port}; - - my $request = shift @$requests; - - if ($request) { - my %r = ( - method => 'GET', - headers => [], - rc => 200, - on_done => sub { - my %args = ( @_ ); - my $ctx = $args{ctx}; - my $req = $args{request}; - my $resp = $args{response}; - my $hr = $resp->{headers}; - my %headers = @$hr; - ok t_cmp($headers{':status'}, $req->{rc}, - "$req->{method} $ctx->{scheme}://$ctx->{host}:$ctx->{port}$req->{path}"); - }, - %$request - ); - - print "test case: $r{descr}: $r{method} $ctx->{scheme}://$ctx->{host}:$ctx->{port}$r{path}\n"; - $client->request( - ':scheme' => $scheme, - ':authority' => $r{authority} || $host . ':' . $port, - ':path' => $r{path}, - ':method' => $r{method}, - headers => $r{headers}, - on_done => sub { - my ($headers, $data) = @_; - $r{on_done}( - ctx => ${ctx}, - request => \%r, - response => { headers => \@$headers, data => $data } - ); - add_sequential( - ctx => $ctx, - requests => $requests - ); - } - ); - } -} - -sub cmp_content_length { - my %args = ( @_ ); - my $ctx = $args{ctx}; - my $req = $args{request}; - my $resp = $args{response}; - my $hr = $resp->{headers}; - my %headers = @$hr; - ok t_cmp($headers{':status'}, $req->{rc}, "response status"); - ok t_cmp(length $resp->{data}, $req->{content_length}, "content-length"); -} - -sub cmp_content { - my %args = ( @_ ); - my $ctx = $args{ctx}; - my $req = $args{request}; - my $resp = $args{response}; - my $hr = $resp->{headers}; - my %headers = @$hr; - ok t_cmp($headers{':status'}, $req->{rc}, "response status"); - ok t_cmp($resp->{data}, $req->{content}, "content comparision"); -} - -sub cmp_file_response { - my %args = ( @_ ); - my $ctx = $args{ctx}; - my $req = $args{request}; - my $resp = $args{response}; - my $hr = $resp->{headers}; - my %headers = @$hr; - ok t_cmp($headers{':status'}, $req->{rc}, "response status"); - open(FILE, "<$htdocs$req->{path}") or die "cannot open $req->{path}"; - undef $/; - my $content = <FILE>; - close(FILE); - ok t_is_equal($resp->{data}, $content); -} - -sub check_redir { - my %args = ( @_ ); - my $ctx = $args{ctx}; - my $req = $args{request}; - my $resp = $args{response}; - my $hr = $resp->{headers}; - my %headers = @$hr; - ok t_cmp($headers{':status'}, 302, "response status"); - ok t_cmp( - $headers{location}, - "$ctx->{scheme}://$ctx->{host}:$ctx->{port}$req->{redir_path}", - "location header" - ); -} - -################################################################################ -# -# Perform common tests to h2c + h2 hosts -# -sub do_common { - my %args = ( - scheme => 'http', - host => 'localhost', - port => 80, - @_ - ); - my $true_tls = ($args{scheme} eq 'https' and $sni_available); - - $args{client} = Protocol::HTTP2::Client->new( upgrade => 0 ); - - my $r = [ - { - descr => 'TC0001, expecting 200', - path => '/' - }, - { - descr => 'TC0002, expecting 404', - rc => 404, - path => '/not_here' - }, - { - descr => 'TC0005, cmp index.html file', - path => '/modules/h2/index.html', - on_done => \&cmp_file_response - }, - { - descr => 'TC0006, cmp image file', - path => '/modules/h2/003/003_img.jpg', - on_done => \&cmp_file_response - }, - ]; - - if (have_module 'mod_rewrite') { - push @$r, { - descr => 'TC0007, rewrite handling', - path => '/modules/h2/latest.tar.gz', - redir_path => "/modules/h2/xxx-1.0.2a.tar.gz", - on_done => \&check_redir - } - } - else { - skip "skipping test as mod_rewrite not available" foreach(1..2); - } - - if (have_cgi) { - # my $sni_host = $true_tls? 'localhost' : ''; - my $content = <<EOF; -<html><body> -<h2>Hello World!</h2> -</body></html> -EOF - - push @$r, { - descr => 'TC0008, hello.pl with ssl vars', - path => '/modules/h2/hello.pl', - content => $content, - on_done => \&cmp_content, - }; - - $content = <<EOF; -<html><body> -<p>No query was specified.</p> -</body></html> -EOF - push @$r, { - descr => 'TC0009, necho.pl without arguments', - path => '/modules/h2/necho.pl', - content => $content, - rc => 400, - on_done => \&cmp_content, - }; - push @$r, { - descr => 'TC0010, necho.pl 2x10', - path => '/modules/h2/necho.pl?count=2&text=0123456789', - content => "01234567890123456789", - on_done => \&cmp_content, - }; - push @$r, { - descr => 'TC0011, necho.pl 10x10', - path => '/modules/h2/necho.pl?count=10&text=0123456789', - content_length => 100, - on_done => \&cmp_content_length, - }; - push @$r, { - descr => 'TC0012, necho.pl 100x10', - path => '/modules/h2/necho.pl?count=100&text=0123456789', - content_length => 1000, - on_done => \&cmp_content_length, - }; - push @$r, { - descr => 'TC0013, necho.pl 1000x10', - path => '/modules/h2/necho.pl?count=1000&text=0123456789', - content_length => 10000, - on_done => \&cmp_content_length, - }; - push @$r, { - descr => 'TC0014, necho.pl 10000x10', - path => '/modules/h2/necho.pl?count=10000&text=0123456789', - content_length => 100000, - on_done => \&cmp_content_length, - }; - push @$r, { - descr => 'TC0015, necho.pl 100000x10', - path => '/modules/h2/necho.pl?count=100000&text=0123456789', - content_length => 1000000, - on_done => \&cmp_content_length, - }; - } - else { - skip "skipping test as mod_cgi not available" foreach(1..1); - } - - add_sequential( - ctx => \%args, - requests => $r - ); - connect_and_do( ctx => \%args ); -} - -################################################################################ -# -# Perform tests for virtual host setups, requires a client with SNI+ALPN -# -sub do_vhosts { - my %args = ( - scheme => 'http', - host => 'localhost', - port => 80, - @_ - ); - $args{client} = Protocol::HTTP2::Client->new( upgrade => 0 ); - - my $r = [ - { - descr => 'VHOST000, expecting 200', - path => '/' - }, - { - descr => 'VHOST001, expect 404 or 421 (using Host:)', - rc => 404, - path => '/misdirected', - header => [ 'host' => 'noh2.example.org' . $args{port} ] - }, - { - descr => 'VHOST002, expect 421 (using :authority)', - rc => 421, - path => '/misdirected', - authority => 'noh2.example.org:' . $args{port} - }, - { - descr => 'VHOST003, expect 421 ', - rc => (have_min_apache_version('2.4.18')? 404 : 421), - path => '/misdirected', - authority => 'test.example.org:' . $args{port} - }, - ]; - - add_sequential( - ctx => \%args, - requests => $r - ); - connect_and_do( ctx => \%args ); -} - -################################################################################ -# -# Bring it on -# -do_common( 'scheme' => 'http', 'host' => $host, 'port' => $port ); -if ($tls_modern) { - do_common( 'scheme' => 'https', 'host' => $shost, 'port' => $sport ); -} else { - skip "skipping test as TLS version '$tls_version' is not supported" foreach(1..$num_suite); -} -if ($sni_available) { - if ($tls_modern) { - do_vhosts( 'scheme' => 'https', 'host' => $shost, 'port' => $sport, host_name => "$shost:${sport}" ); - } else { - skip "skipping test as TLS version '$tls_version' is not supported" foreach(1..$vhost_suite); - } -} else { - skip "skipping test as SNI not available" foreach(1..$vhost_suite); -} diff --git a/debian/perl-framework/t/modules/include.t b/debian/perl-framework/t/modules/include.t index 64b2fdc..9ff2411 100644 --- a/debian/perl-framework/t/modules/include.t +++ b/debian/perl-framework/t/modules/include.t @@ -28,6 +28,7 @@ my $htdocs = Apache::Test::vars('documentroot'); my %test = ( "echo.shtml" => "echo.shtml", "set.shtml" => "set works", +"comment.shtml" => "No comment here", "include1.shtml" => "inc-two.shtml body include.shtml body", "include2.shtml" => "inc-two.shtml body include.shtml body", "include3.shtml" => "inc-two.shtml body inc-one.shtml body ". @@ -96,6 +97,10 @@ my %test = ( "virtualq.shtml?foo=bar" => "foo=bar pass inc-two.shtml body foo=bar", # PR#12655 "inc-nego.shtml" => "index.html.en", # requires mod_negotiation +"mod_request/echo.shtml"=> "echo.shtml", +"mod_request/post.shtml?foo=bar&foo2=bar2" + => "GET foo: bar foo2: bar2", +"mod_request/post.shtml"=> "POST foo: bar foo2: bar2", # will be twice, only the first one succeed ); my %ap_expr_test = ( @@ -227,15 +232,16 @@ unless ($have_apache_2) { push @todo, (scalar keys %tests) + 1; } -# in addition to %tests, there are 1 fsize and 1 flastmod test, +# in addition to %tests, there are 1 mod_request expected failure, +# 1 fsize and 1 flastmod test, # 1 GET test, 2 query string tests, 14 XBitHack tests and 14 # tests that use mod_bucketeer to construct brigades for mod_include -my $tests = (scalar keys %tests) + @patterns + 1 + 1 + 1 + 2 + 14 + 14; +my $tests = (scalar keys %tests) + 1 + @patterns + 1 + 1 + 1 + 2 + 14 + 14; plan tests => $tests, todo => \@todo, - need need_lwp, need_module 'include'; + need 'DateTime', need_lwp, need_module 'include'; foreach $doc (sort keys %tests) { # do as much from %test as we can @@ -267,6 +273,35 @@ foreach $doc (sort keys %tests) { skip "Skipping 'exec cgi' test; no cgi module.", 1; } } + elsif ($doc =~ m/mod_request.*\?/) { + # param in the url ==> use GET + if (have_cgi) { + ok t_cmp(super_chomp(GET_BODY "$dir$doc"), + $tests{$doc}, + "GET $dir$doc" + ); + } + else { + skip "Skipping 'exec cgi' test; no cgi module.", 1; + } + } + elsif ($doc =~ m/mod_request/) { + # no param in the url ==> use POST with a content + if (have_cgi) { + ok t_cmp(super_chomp(POST_BODY "$dir$doc", content => "foo=bar&foo2=bar2"), + $tests{$doc}, + "POST $dir$doc" + ); + if ($doc =~ m/mod_request.*post/) { + # KeptBodySize is 32 + my $r = POST("$dir$doc", content => "foo=bar&foo2=bar2&foo3=bar3&foo4=bar4"); + ok t_cmp($r->code, 413, "sizeof(body) > KeptBodySize"); + } + } + else { + skip "Skipping 'exec cgi' test; no cgi module.", 2; + } + } else { ok t_cmp(super_chomp(GET_BODY "$dir$doc"), $tests{$doc}, @@ -311,6 +346,10 @@ unless(eval "require POSIX") { else { # use DateTime and avoid the system locale messing things up use DateTime; + # Only for checking, whether system strftime supports %s + use POSIX; + my $strftime_gnu = (POSIX::strftime("%s", gmtime()) eq '%s' ? 0 : 1); + my $result = super_chomp(GET_BODY "${dir}file.shtml"); $result = single_space($result); @@ -325,8 +364,8 @@ else { my $expected = join ' ' => $dt->strftime("%A, %B %e, %G"), $dt->strftime("%A, %B %e, %G"), - $dt->strftime("%s"), - $dt->strftime("%s"); + $strftime_gnu ? $dt->strftime("%s") : '%s', + $strftime_gnu ? $dt->strftime("%s") : '%s'; # trim output $expected = single_space($expected); diff --git a/debian/perl-framework/t/modules/info.t b/debian/perl-framework/t/modules/info.t index cbc4d6e..21cee4e 100644 --- a/debian/perl-framework/t/modules/info.t +++ b/debian/perl-framework/t/modules/info.t @@ -31,7 +31,7 @@ foreach (split /\n/, $info) { foreach (sort keys %$mods) { ($mods->{$_} && !$config->should_skip_module($_)) or next; - if ($_ =~ /^mod_mpm_(eventopt|event|prefork|worker)\.c$/) { + if ($_ =~ /^mod_mpm_(eventopt|event|motorz|prefork|worker)\.c$/) { push(@expected,"$1.c"); } elsif ($_ eq 'mod_mpm_simple.c') { push(@expected,'simple_api.c'); diff --git a/debian/perl-framework/t/modules/ldap.t b/debian/perl-framework/t/modules/ldap.t new file mode 100644 index 0000000..d3bb8e9 --- /dev/null +++ b/debian/perl-framework/t/modules/ldap.t @@ -0,0 +1,52 @@ +use strict; +use warnings FATAL => 'all'; + +# +# To run tests for mod_authnz_ldap: +# +# a) run an LDAP server with root DN of dc=example,dc=com on localhost port 8389 +# b) populate the directory with the LDIF from scripts/httpd.ldif +# c) configure & run the test suite passing "--defines LDAP" to ./t/TEST +# + +use Apache::Test; +use Apache::TestRequest; +use Apache::TestUtil; +use Apache::TestConfig; + +my $defs = Apache::Test->vars('defines'); +my $ldap_defined = $defs =~ /LDAP/; + +# URL -> username, password, expected-status +my @cases = ( + ['/modules/ldap/simple/' => '', '', 401], + ['/modules/ldap/simple/' => 'alpha', 'badpass', 401], + ['/modules/ldap/simple/' => 'alpha', 'Alpha', 200], + ['/modules/ldap/simple/' => 'gamma', 'Gamma', 200], + ['/modules/ldap/group/' => 'gamma', 'Gamma', 401], + ['/modules/ldap/group/' => 'delta', 'Delta', 200], + ['/modules/ldap/refer/' => 'alpha', 'Alpha', 401], + ['/modules/ldap/refer/' => 'beta', 'Beta', 200], +); + +plan tests => scalar @cases, + need need_module('authnz_ldap'), { "LDAP testing not configured" => $ldap_defined }; + +foreach my $t (@cases) { + my $url = $t->[0]; + my $username = $t->[1]; + my $password = $t->[2]; + my $response; + my $creds; + + if ($username) { + $response = GET $url, username => $username, password => $password; + $creds = "$username/$password"; + } + else { + $response = GET $url; + $creds = "no credentials"; + } + + ok t_cmp($response->code, $t->[3], "test for $url with $creds"); +} diff --git a/debian/perl-framework/t/modules/lua.t b/debian/perl-framework/t/modules/lua.t index 9eb5b4f..9e6836d 100644 --- a/debian/perl-framework/t/modules/lua.t +++ b/debian/perl-framework/t/modules/lua.t @@ -41,6 +41,8 @@ my @ts = ( { url => "$pfx/setheaderfromparam.lua?HeaderName=foo&HeaderValue=bar", rcontent => "Header set", headers => { "foo" => "bar" } }, + { url => "$pfx/filtered/foobar.html", + rcontent => "prefix\nbucket:foobar\nsuffix\n" }, ); plan tests => 4 * scalar @ts, need 'lua'; diff --git a/debian/perl-framework/t/modules/negotiation.t b/debian/perl-framework/t/modules/negotiation.t index 0081ce0..9218aa1 100644 --- a/debian/perl-framework/t/modules/negotiation.t +++ b/debian/perl-framework/t/modules/negotiation.t @@ -7,8 +7,12 @@ use Apache::TestUtil; ## mod_negotiation test (see extra.conf.in) -my ($en, $fr, $de, $fu, $bu) = qw(en fr de fu bu); +my ($en, $fr, $de, $fu, $bu, $zh) = qw(en fr de fu bu zh-TW); + my @language = ($en, $fr, $de, $fu); +if (have_min_apache_version("2.4.38")) { + push @language, $zh; +} my @ct_tests = ( # [ Accept header, Expected response ] diff --git a/debian/perl-framework/t/modules/proxy.t b/debian/perl-framework/t/modules/proxy.t index af822cd..0a81f4f 100644 --- a/debian/perl-framework/t/modules/proxy.t +++ b/debian/perl-framework/t/modules/proxy.t @@ -7,16 +7,45 @@ use Apache::TestUtil; use Apache::TestConfig (); use Misc; -my $num_tests = 31; +my $num_tests = 46; plan tests => $num_tests, need need_module 'proxy', need_module 'setenvif'; Apache::TestRequest::module("proxy_http_reverse"); Apache::TestRequest::user_agent(requests_redirectable => 0); my $r = GET("/reverse/"); -ok t_cmp($r->code, 200, "reverse proxy to index.html"); +ok t_cmp($r->code, 200, "reverse proxy"); ok t_cmp($r->content, qr/^welcome to /, "reverse proxied body"); +$r = GET("/reverse/index.html"); +ok t_cmp($r->code, 200, "reverse proxy to index.html"); +ok t_cmp($r->content, qr/^welcome to /, "reverse proxied body to index.html"); + +if (have_min_apache_version('2.4.49')) { + $r = GET("/reverse-match/"); + ok t_cmp($r->code, 200, "reverse proxy match"); + ok t_cmp($r->content, qr/^welcome to /, "reverse proxied body match"); + + $r = GET("/reverse-match/index.html"); + ok t_cmp($r->code, 200, "reverse proxy match to index.html"); + ok t_cmp($r->content, qr/^welcome to /, "reverse proxied body match to index.html"); +} +else { + skip "skipping reverse-match test with httpd <2.5.1" foreach (1..4); +} + +$r = GET("/reverse-slash"); +ok t_cmp($r->code, 200, "reverse proxy match no slash"); +ok t_cmp($r->content, qr/^welcome to /, "reverse proxied body no slash"); + +$r = GET("/reverse-slash/"); +ok t_cmp($r->code, 200, "reverse proxy match w/ slash"); +ok t_cmp($r->content, qr/^welcome to /, "reverse proxied body w/ slash"); + +$r = GET("/reverse-slash/index.html"); +ok t_cmp($r->code, 200, "reverse proxy match w/ slash to index.html"); +ok t_cmp($r->content, qr/^welcome to /, "reverse proxied body w/ slash to index.html"); + if (have_min_apache_version('2.4.0')) { $r = GET("/reverse/locproxy/"); ok t_cmp($r->code, 200, "reverse Location-proxy to index.html"); @@ -188,3 +217,17 @@ else { skip "skipping UDS tests with httpd < 2.4.7" foreach (1..2); } +if (have_min_apache_version('2.4.49')) { + + $r = GET("/notexisting/../mapping/mapping.html"); + ok t_cmp($r->code, 200, "proxy mapping=servlet map it to /servlet/mapping.html"); + + $r = GET("/notexisting/..;/mapping/mapping.html"); + ok t_cmp($r->code, 200, "proxy mapping=servlet map it to /servlet/mapping.html"); + + $r = GET("/mapping/mapping.html"); + ok t_cmp($r->code, 200, "proxy to /servlet/mapping.html"); +} +else { + skip "skipping tests with mapping=servlet" foreach (1..3); +} diff --git a/debian/perl-framework/t/modules/proxy_balancer.t b/debian/perl-framework/t/modules/proxy_balancer.t index a16521b..ee31507 100644 --- a/debian/perl-framework/t/modules/proxy_balancer.t +++ b/debian/perl-framework/t/modules/proxy_balancer.t @@ -6,22 +6,120 @@ use Apache::TestRequest; use Apache::TestUtil; use Apache::TestConfig (); -plan tests => 3, need 'proxy_balancer', 'proxy_http'; +my @echos = ('A'x8, 'A'x64, 'A'x2048, 'A'x4096); + +my $skipbodyfailover = !need_min_apache_version("2.4.42"); +my $referertest = 0; + +if (have_min_apache_version("2.4.41")) { + $referertest = 2; +} + +plan tests => 6+(2*scalar @echos)+$referertest, need 'proxy_balancer', 'proxy_http'; Apache::TestRequest::module("proxy_http_balancer"); Apache::TestRequest::user_agent(requests_redirectable => 0); +# Extract the nonce from response to the URL +sub GetNonce { + my $url = shift; + my $balancer = shift; + my $r; + $r = GET($url); + my $NONCE; + foreach my $query ( split( /\?b=/, $r->content ) ){ + if ($query =~ m/$balancer/) { + foreach my $var ( split( /&/, $query ) ){ + if ($var =~ m/nonce=/) { + foreach my $nonce ( split( /nonce=/, $var ) ){ + my $ind = index ($nonce, "\""); + $nonce = substr($nonce, 0, ${ind}); + if ( $nonce =~ m/^[0-9a-fA-F-]+$/ ) { + $NONCE = $nonce; + last; + } + } + last; + } + } + last; + } + } + return $NONCE; +} + +my $r; + +if (have_module('lbmethod_byrequests')) { + $r = GET("/baltest1/index.html"); + ok t_cmp($r->code, 200, "Balancer did not die"); +} else { + skip "skipping tests without mod_lbmethod_byrequests" foreach (1..1); +} + +if (have_module('lbmethod_bytraffic')) { + $r = GET("/baltest2/index.html"); + ok t_cmp($r->code, 200, "Balancer did not die"); +} else { + skip "skipping tests without mod_lbmethod_bytraffic" foreach (1..1); +} + +if (have_module('lbmethod_bybusyness')) { + $r = GET("/baltest3/index.html"); + ok t_cmp($r->code, 200, "Balancer did not die"); +} else { + skip "skipping tests without mod_lbmethod_bybusyness" foreach (1..1); +} + +if (have_module('lbmethod_heartbeat')) { + #$r = GET("/baltest4/index.html"); + #ok t_cmp($r->code, 200, "Balancer did not die"); +} else { + #skip "skipping tests without mod_lbmethod_heartbeat" foreach (1..1); +} + -my $r = GET("/baltest1/index.html"); -ok t_cmp($r->code, 200, "Balancer did not die"); -$r = GET("/baltest2/index.html"); -ok t_cmp($r->code, 200, "Balancer did not die"); +# PR63891 +foreach my $t (@echos) { + $r = POST "/baltest_echo_post", content => $t; + skip $skipbodyfailover, t_cmp($r->code, 200, "failed over"); + skip $skipbodyfailover, t_cmp($r->content, $t, "response body echoed"); +} + +# test dynamic part +$r = GET("/balancer-manager"); +ok t_cmp($r->code, 200, "Can't find balancer-manager"); + +# get the nonce and add a worker +my $result = GetNonce("/balancer-manager", "dynproxy"); -$r = GET("/baltest3/index.html"); -ok t_cmp($r->code, 200, "Balancer did not die"); +my $query = "b_lbm=byrequests&b_tmo=0&b_max=0&b_sforce=0&b_ss=&b_nwrkr=ajp%3A%2F%2F%5B0%3A0%3A0%3A0%3A0%3A0%3A0%3A1%5D%3A8080&b_wyes=1&b=dynproxy&nonce=" . $result; +my @proxy_balancer_headers; +my $vars = Apache::Test::vars(); +push @proxy_balancer_headers, "Referer" => "http://" . $vars->{servername} . ":" . $vars->{port} . "/balancer-manager"; + +# First try without the referer it should fail. +if (have_min_apache_version("2.4.41")) { + $r = POST("/balancer-manager", content => $query); + ok t_cmp($r->code, 200, "request failed"); + ok !t_cmp($r->content, qr/ajp/, "AJP worker created"); +} -if (have_min_apache_version("2.3.0")) { - # $r = GET("/baltest4/index.html"); - # ok t_cmp($r->code, 200, "Balancer did not die"); +# Try with the referer and http (byrequests) +if (have_min_apache_version("2.4.49") && have_module('lbmethod_byrequests')) { + $r = GET("/dynproxy"); + ok t_cmp($r->code, 503, "request should fail for /dynproxy"); + # create it + $query = 'b_lbm=byrequests&b_tmo=0&b_max=0&b_sforce=0&b_ss=&b_nwrkr=http%3A%2F%2F' . $vars->{servername} . '%3A' . $vars->{port} . '&b_wyes=1&b=dynproxy&nonce=' . $result; + $r = POST("/balancer-manager", content => $query, @proxy_balancer_headers); + # enable it. + $query = 'w=http%3A%2F%2F' . $vars->{servername} . '%3A' . $vars->{port} . '&b=dynproxy&w_status_D=0&nonce=' . $result; + $r = POST("/balancer-manager", content => $query, @proxy_balancer_headers); + # make a query + $r = GET("/dynproxy"); + ok t_cmp($r->code, 200, "request failed to /dynproxy"); +} else { + skip "skipping tests without lbmethod_byrequests"; + skip "skipping tests without lbmethod_byrequests"; } diff --git a/debian/perl-framework/t/modules/proxy_fcgi.t b/debian/perl-framework/t/modules/proxy_fcgi.t index 1577497..2f62580 100644 --- a/debian/perl-framework/t/modules/proxy_fcgi.t +++ b/debian/perl-framework/t/modules/proxy_fcgi.t @@ -129,8 +129,16 @@ sub run_fcgi_envvar_request $envs{$components[0]} = $components[1]; } - # Rejoin the child FCGI process. - waitpid($child, 0) unless ($fcgi_port <= 0) ; + if ($fcgi_port > 0) { + if ($r->code eq '500') { + # Unknown failure, probably the request didn't hit the FCGI child + # process, so it will hang waiting for our request + kill 'TERM', $child; + } else { + # Rejoin the child FCGI process. + waitpid($child, 0); + } + } return \%envs; } diff --git a/debian/perl-framework/t/modules/proxy_websockets.t b/debian/perl-framework/t/modules/proxy_websockets.t new file mode 100644 index 0000000..f2d6558 --- /dev/null +++ b/debian/perl-framework/t/modules/proxy_websockets.t @@ -0,0 +1,81 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestRequest; +use Apache::TestUtil; +use Apache::TestConfig (); + +# not reliable, hangs for some people: +# my @test_cases = ( "ping0", "ping1" x 10, "ping2" x 100, "ping3" x 1024, "ping4" x 4096, "sendquit"); +my @test_cases = ( "ping0", "ping1" x 10, "ping2" x 100, "ping3" x 1024, "sendquit"); +my $total_tests = 2; + +plan tests => $total_tests, need 'AnyEvent::WebSocket::Client', + need_module('proxy_http', 'lua'), need_min_apache_version('2.4.47'); + +require AnyEvent; +require AnyEvent::WebSocket::Client; + +my $config = Apache::Test::config(); +my $hostport = Apache::TestRequest::hostport(); + +my $client = AnyEvent::WebSocket::Client->new(timeout => 5); + +my $quit_program = AnyEvent->condvar; + +my $responses = 0; +my $surprised = 0; + +$client->connect("ws://$hostport/proxy/wsoc")->cb(sub { + our $connection = eval { shift->recv }; + t_debug("wsoc connected"); + if($@) { + # handle error... + warn $@; + $quit_program->send(); + return; + } + + + # AnyEvent::WebSocket::Connection does not pass the PONG message down to the callback + # my $actualpingmsg = AnyEvent::WebSocket::Message->new(opcode => 0x09, body => "xxx"); + # $connection->send($actualpingmsg); + + foreach (@test_cases){ + $connection->send($_); + } + + $connection->on(finish => sub { + t_debug("finish"); + }); + + # recieve message from the websocket... + $connection->on(each_message => sub { + # $connection is the same connection object + # $message isa AnyEvent::WebSocket::Message + my($connection, $message) = @_; + $responses++; + t_debug("wsoc msg received: " . substr($message->body, 0, 5). " opcode " . $message->opcode); + if ("sendquit" eq $message->body) { + $connection->send('quit'); + t_debug("closing"); + $connection->close; # doesn't seem to close TCP. + $quit_program->send(); + } + elsif ($message->body =~ /^ping(\d)/) { + my $offset = $1; + if ($message->body ne $test_cases[$offset]) { + $surprised++; + } + } + else { + $surprised++; + } + }); + +}); + +$quit_program->recv; +ok t_cmp($surprised, 0); +ok t_cmp($responses, scalar(@test_cases) ); diff --git a/debian/perl-framework/t/modules/proxy_websockets_ssl.t b/debian/perl-framework/t/modules/proxy_websockets_ssl.t new file mode 100644 index 0000000..793ff48 --- /dev/null +++ b/debian/perl-framework/t/modules/proxy_websockets_ssl.t @@ -0,0 +1,86 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestRequest; +use Apache::TestUtil; +use Apache::TestConfig (); + +# my @test_cases = ( "ping0", "ping1" x 10, "ping2" x 100, "ping3" x 1024, "ping4" x 4000, "sendquit"); +my @test_cases = ( "ping0", "ping1" x 10, "ping2" x 100, "ping3" x 1024, "sendquit"); +my $total_tests = 2; + +plan tests => $total_tests, need 'AnyEvent::WebSocket::Client', + need_module('ssl', 'proxy_http', 'lua'), need_min_apache_version('2.4.47'); + +require AnyEvent; +require AnyEvent::WebSocket::Client; + +my $config = Apache::Test::config(); +#my $hostport = $config->{vhosts}->{proxy_https_https}->{hostport}; +my $hostport = $config->{vhosts}->{$config->{vars}->{ssl_module_name}}->{hostport}; +my $client = AnyEvent::WebSocket::Client->new(timeout => 5, ssl_ca_file => $config->{vars}->{sslca} . "/" . $config->{vars}->{sslcaorg} . "/certs/ca.crt"); + +my $quit_program = AnyEvent->condvar; + +my $responses = 0; +my $surprised = 0; + +t_debug("wss://$hostport/modules/lua/websockets.lua"); + +# $client->connect("wss://$hostport/proxy/wsoc")->cb(sub { +$client->connect("wss://$hostport/modules/lua/websockets.lua")->cb(sub { + our $connection = eval { shift->recv }; + t_debug("wsoc connected"); + if($@) { + # handle error... + warn $@; + $quit_program->send(); + return; + } + + + # AnyEvent::WebSocket::Connection does not pass the PONG message down to the callback + # my $actualpingmsg = AnyEvent::WebSocket::Message->new(opcode => 0x09, body => "xxx"); + # $connection->send($actualpingmsg); + + foreach (@test_cases){ + $connection->send($_); + } + + $connection->on(finish => sub { + t_debug("finish"); + $quit_program->send(); + }); + + # recieve message from the websocket... + $connection->on(each_message => sub { + # $connection is the same connection object + # $message isa AnyEvent::WebSocket::Message + my($connection, $message) = @_; + $responses++; + t_debug("wsoc msg received: " . substr($message->body, 0, 5). " opcode " . $message->opcode); + if ("sendquit" eq $message->body) { + $connection->send('quit'); + t_debug("closing"); + $connection->close; # doesn't seem to close TCP. + $quit_program->send(); + } + elsif ($message->body =~ /^ping(\d)/) { + my $offset = $1; + if ($message->body ne $test_cases[$offset]) { + t_debug("wrong data"); + $surprised++; + } + } + else { + $surprised++; + } + }); + +}); + +$quit_program->recv; +ok t_cmp($surprised, 0); +# We don't expect the 20k over SSL to work, and we won't read the "sendquit" echoed back either. +ok t_cmp($responses, scalar(@test_cases)); diff --git a/debian/perl-framework/t/modules/rewrite.t b/debian/perl-framework/t/modules/rewrite.t index f566535..4673431 100644 --- a/debian/perl-framework/t/modules/rewrite.t +++ b/debian/perl-framework/t/modules/rewrite.t @@ -15,6 +15,49 @@ my @url = qw(forbidden gone perm temp); my @todo; my $r; +my @redirects_all = ( + ["/modules/rewrite/escaping/qsd-like/foo", "/foo\$", have_min_apache_version('2.4.57')], # PR66547 + ["/modules/rewrite/escaping/qsd-like-plus-qsa/foo?preserve-me", "/foo\\?preserve-me\$", have_min_apache_version('2.5.1')], # PR66672 + ["/modules/rewrite/escaping/qsd-like-plus-qsa-qsl/foo/%3fbar/?preserve-me", "/foo/%3fbar/\\?preserve-me\$", have_min_apache_version('2.5.1')], # PR66672 + ); + +my @escapes = ( + # rewrite to local/PT is not escaped + [ "/modules/rewrite/escaping/local/foo%20bar" => 403], + # rewrite to redir escape opted out + [ "/modules/rewrite/escaping/redir_ne/foo%20bar" => 403], + # rewrite never escapes proxy targets, even though [NE] is kind or repurposed. + [ "/modules/rewrite/escaping/proxy/foo%20bar" => 403], + [ "/modules/rewrite/escaping/proxy_ne/foo%20bar" => 403], + + [ "/modules/rewrite/escaping/fixups/local/foo%20bar" => 403], + [ "/modules/rewrite/escaping/fixups/redir_ne/foo%20bar" => 403], + [ "/modules/rewrite/escaping/fixups/proxy/foo%20bar" => 403], + [ "/modules/rewrite/escaping/fixups/proxy_ne/foo%20bar" => 403], +); +if (have_min_apache_version('2.4.57')) { + push(@escapes, ( + # rewrite to redir escaped by default + [ "/modules/rewrite/escaping/redir/foo%20bar" => 302], + [ "/modules/rewrite/escaping/fixups/redir/foo%20bar" => 302], + )); +} + +my @bflags = ( + # t/conf/extra.conf.in + [ "/modules/rewrite/escaping/local_b/foo/bar/%20baz%0d" => "foo%2fbar%2f+baz%0d"], # this is why [B] sucks + [ "/modules/rewrite/escaping/local_b_justslash/foo/bar/%20baz/" => "foo%2fbar%2f baz%2f"], # test basic B=/ +); +if (have_min_apache_version('2.4.57')) { + # [BCTLS] / [BNE] + push(@bflags, ( + [ "/modules/rewrite/escaping/local_bctls/foo/bar/%20baz/%0d" => "foo/bar/+baz/%0d"], # spaces and ctls only + [ "/modules/rewrite/escaping/local_bctls_nospace/foo/bar/%20baz/%0d" => "foo/bar/ baz/%0d"], # ctls but keep space + [ "/modules/rewrite/escaping/local_bctls_andslash/foo/bar/%20baz/%0d" => "foo%2fbar%2f+baz%2f%0d"], # not realistic, but opt in to slashes + [ "/modules/rewrite/escaping/local_b_noslash/foo/bar/%20baz/%0d" => "foo/bar/+baz/%0d"], # negate something from [B] + )); +} + if (!have_min_apache_version('2.4.19')) { # PR 50447, server context push @todo, 26 @@ -26,8 +69,11 @@ if (!have_min_apache_version('2.4')) { # Specific tests for PR 58231 my $vary_header_tests = (have_min_apache_version("2.4.30") ? 9 : 0) + (have_min_apache_version("2.4.29") ? 4 : 0); +my $cookie_tests = have_min_apache_version("2.4.47") ? 6 : 0; +my @redirects = map {$_->[2] ? $_ : ()} @redirects_all; -plan tests => @map * @num + 16 + $vary_header_tests, todo => \@todo, need_module 'rewrite'; +plan tests => @map * @num + 16 + $vary_header_tests + $cookie_tests + scalar(@escapes) + scalar(@redirects) + scalar(@bflags), + todo => \@todo, need_module 'rewrite'; foreach (@map) { foreach my $n (@num) { @@ -128,6 +174,7 @@ if (have_min_apache_version('2.4')) { if (have_min_apache_version("2.4.29")) { # PR 58231: Vary:Host header (was) mistakenly added to the response + # XXX: If LWP uses http2, this can result in "Host: localhost, test1" $r = GET("/modules/rewrite/vary1.html", "Host" => "test1"); ok t_cmp($r->content, qr/VARY2/, "Correct internal redirect happened, OK"); ok t_cmp($r->header("Vary"), qr/(?!.*Host.*)/, "Vary:Host header not added, OK"); @@ -168,3 +215,46 @@ if (have_min_apache_version("2.4.30")) { ok t_cmp($r->content, qr/VARY4/, "Correct internal redirect happened, OK"); ok t_cmp($r->header("Vary"), qr/(?!.*Host.*)/, "Vary:Host header not added, OK"); } + +if (have_min_apache_version("2.4.47")) { + $r = GET("/modules/rewrite/cookie/"); + ok t_cmp($r->header("Set-Cookie"), qr/(?!.*SameSite=.*)/, "samesite not present with no arg"); + $r = GET("/modules/rewrite/cookie/0"); + ok t_cmp($r->header("Set-Cookie"), qr/(?!.*SameSite=.*)/, "samesite not present with 0"); + $r = GET("/modules/rewrite/cookie/false"); + ok t_cmp($r->header("Set-Cookie"), qr/(?!.*SameSite=.*)/, "samesite not present with false"); + $r = GET("/modules/rewrite/cookie/none"); + ok t_cmp($r->header("Set-Cookie"), qr/SameSite=none/, "samesite=none"); + $r = GET("/modules/rewrite/cookie/lax"); + ok t_cmp($r->header("Set-Cookie"), qr/SameSite=lax/, "samesite=lax"); + $r = GET("/modules/rewrite/cookie/foo"); + ok t_cmp($r->header("Set-Cookie"), qr/SameSite=foo/, "samesite=foo"); +} + + +foreach my $t (@escapes) { + my $url= $t->[0]; + my $expect = $t->[1]; + t_debug "Check $url for $expect\n"; + $r = GET($url, redirect_ok => 0); + ok t_cmp $r->code, $expect; +} +foreach my $t (@bflags) { + my $url= $t->[0]; + my $expect= $t->[1]; + t_debug "Check $url for $expect\n"; + $r = GET($url, redirect_ok => 0); + t_debug("rewritten query '" . $r->header("rewritten-query") . "'"); + ok t_cmp $r->header("rewritten-query"), $expect; +} + +foreach my $t (@redirects) { + my $url= $t->[0]; + my $expect= $t->[1]; + t_debug "Check $url for redir $expect\n"; + $r = GET($url, redirect_ok => 0); + my $loc = $r->header("location"); + t_debug " redirect is $loc"; + ok $loc =~ /$expect/; +} + diff --git a/debian/perl-framework/t/modules/sed.t b/debian/perl-framework/t/modules/sed.t new file mode 100644 index 0000000..6ab1ee1 --- /dev/null +++ b/debian/perl-framework/t/modules/sed.t @@ -0,0 +1,48 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestRequest; +use Apache::TestUtil; + +my @ts = ( + # see t/conf/extra.conf.in + { url => "/apache/sed/out-foo/foobar.html", content => 'barbar', msg => "sed output filter", code => '200' }, + # error after status sent + { url => "/apache/sed-echo/out-foo-grow/foobar.html", content => "", msg => "sed output filter too large", code => '200', body=>"foo" x (8192*1024), resplen=>0}, + { url => "/apache/sed-echo/input", content => 'barbar', msg => "sed input filter", code => '200', body=>"foobar" }, + { url => "/apache/sed-echo/input", content => undef, msg => "sed input filter", code => '200', body=>"foo" x (1024)}, + # fixme: returns 400 default error doc for some people instead + # { url => "/apache/sed-echo/input", content => '!!!ERROR!!!', msg => "sed input filter", code => '200', skippable=>true body=>"foo" x (1024*4096)} +); + +my $tests = 2*scalar @ts; + +plan tests => $tests, need 'LWP::Protocol::AnyEvent::http', need_module('sed'); + +# Hack to allow streaming of data in/out of mod_echo +require LWP::Protocol::AnyEvent::http; + +for my $t (@ts) { + my $req; + if (defined($t->{'body'})) { + t_debug "posting body of size ". length($t->{'body'}); + $req = POST $t->{'url'}, content => $t->{'body'}; + t_debug "... posted body of size ". length($t->{'body'}); + } + else { + $req = GET $t->{'url'}; + } + t_debug "Content Length " . length $req->content; + ok t_cmp($req->code, $t->{'code'}, "status code for " . $t->{'url'}); + if (defined($t->{content})) { + my $content = $req->content; + chomp($content); + ok t_cmp($content, $t->{content}, $t->{msg}); + } + else { + ok "no body check"; + } +} + + diff --git a/debian/perl-framework/t/modules/session.t b/debian/perl-framework/t/modules/session.t index 91428fe..617239c 100644 --- a/debian/perl-framework/t/modules/session.t +++ b/debian/perl-framework/t/modules/session.t @@ -24,7 +24,7 @@ my @todo = ( ); # Until the fix for PR 57300 is backported, sessions are always saved. -if (!have_min_apache_version('2.5')) { +if (!have_min_apache_version('2.4.41')) { my @todo_backport = ( 8, 18, 38, 43, 48, 58, 63, 133 ); push(@todo, @todo_backport); } @@ -172,8 +172,8 @@ check_get 'Keep non-expired session', check_post 'Session writable after expired', '/on/expire?expiry=1', $create_session, $session, 1, 1; -# SessionExpiryUpdateInterval directive - new in 2.5 -if (have_module('version') && have_min_apache_version('2.5')) { +# SessionExpiryUpdateInterval directive - new in 2.4.41 +if (have_module('version') && have_min_apache_version('2.4.41')) { my $max_expiry = expiry_from_seconds(time() + 100); my $threshold_expiry = expiry_from_seconds(time() + 40); diff --git a/debian/perl-framework/t/modules/setenvif.t b/debian/perl-framework/t/modules/setenvif.t index 82c4bf4..cb561c2 100644 --- a/debian/perl-framework/t/modules/setenvif.t +++ b/debian/perl-framework/t/modules/setenvif.t @@ -167,10 +167,16 @@ write_htaccess("SetEnvIfExpr \"%{REQUEST_URI} =~ /\.\(sh\)tmlXXX\$/\" VAR_ONE=\$ $body = GET_BODY $page; ok t_cmp($body, "1:(none)\n2:(none)\n3:(none)\n"); -## test SetEnvIfExpr with replacement when regex is REQUIRED to NOT match ## -write_htaccess("SetEnvIfExpr \"%{REQUEST_URI} !~ /\.\(sh\)tmlXXX\$/\" VAR_ONE=\$0 VAR_TWO=\$1"); -$body = GET_BODY $page; -ok t_cmp($body, "1:\$0\n2:\$1\n3:(none)\n"); +if (need_min_apache_version("2.4.38")) { + ## test SetEnvIfExpr with replacement when regex is REQUIRED to NOT match ## + write_htaccess("SetEnvIfExpr \"%{REQUEST_URI} !~ /\.\(sh\)tmlXXX\$/\" VAR_ONE=\$0 VAR_TWO=\$1"); + $body = GET_BODY $page; + ok t_cmp($body, "1:\$0\n2:\$1\n3:(none)\n"); +} +else { + # Skip for versions without r1786235 backported + skip "skipping inverted match test with version <2.4.38" +} ## i think this should work, but it doesnt. ## leaving it commented now pending investigation. diff --git a/debian/perl-framework/t/modules/speling.t b/debian/perl-framework/t/modules/speling.t index 25eb54e..85af159 100644 --- a/debian/perl-framework/t/modules/speling.t +++ b/debian/perl-framework/t/modules/speling.t @@ -2,8 +2,8 @@ use strict; use warnings FATAL => 'all'; use Apache::Test; -use Apache::TestUtil; use Apache::TestRequest; +use Apache::TestUtil; my @testcasespaths = ( ['/modules/speling/nocase/'], @@ -17,7 +17,6 @@ my @testcases = ( ['goood.html', "insertion", 301, 404], ['godo.html', "transposition", 301, 404], ['go_d.html', "wrong character", 301, 404], - ['GOOD.html', "case", 301, 301], ['good.wrong_ext', "wrong extension", 300, 300], ['GOOD.wrong_ext', "NC wrong extension", 300, 300], @@ -26,9 +25,15 @@ my @testcases = ( ['dogo.html', "double transposition", 404, 404], ['XooX.html', "double wrong character", 404, 404], - ['several0.html', "multiple choise", 300, 404], + ['several0.html', "multiple choice", 300, 404], ); +# macOS HFS is case-insensitive but case-preserving so the below tests +# would cause misleading failures +if ($^O ne "darwin") { + push (@testcases, ['GOOD.html', "case", 301, 301]); +} + plan tests => scalar @testcasespaths * scalar @testcases * 2, need 'mod_speling'; my $r; @@ -40,6 +45,7 @@ local $Apache::TestRequest::RedirectOK = 0; foreach my $p (@testcasespaths) { foreach my $t (@testcases) { ## + #local $Apache::TestRequest::RedirectOK = 0; $r = GET($p->[0] . $t->[0]); # Checking for return code diff --git a/debian/perl-framework/t/modules/substitute.t b/debian/perl-framework/t/modules/substitute.t index cc8c153..0f111c0 100644 --- a/debian/perl-framework/t/modules/substitute.t +++ b/debian/perl-framework/t/modules/substitute.t @@ -15,6 +15,8 @@ my $B = chr(0x02); my $F = chr(0x06); my $P = chr(0x10); +my @simple_cases = (); + my @test_cases = ( [ "f${B}o${P}ofoo" => 's/foo/bar/' ], [ "f${B}o${P}ofoo" => 's/fo/fa/', 's/fao/bar/' ], @@ -40,7 +42,10 @@ if (have_min_apache_version("2.3.5")) { [ "foobar" => 's/(oo)b/\d$1/' ]; } -plan tests => scalar @test_cases, +if (have_min_apache_version("2.4.42")) { + push @simple_cases, [ "foo\nbar" => 's/foo.*/XXX$0XXX', "XXXfooXXX\nbar" ], +} +plan tests => scalar @test_cases + scalar @simple_cases, need need_lwp, need_module('mod_substitute'), need_module('mod_bucketeer'); @@ -84,6 +89,18 @@ foreach my $t (@test_cases) { ok($ok); } +foreach my $t (@simple_cases) { + my ($content, $rule, $expect) = @{$t}; + write_testfile($content); + write_htaccess($rule); + my $response = GET('/modules/substitute/test.txt'); + my $rc = $response->code; + my $got = $response->content; + my $ok = ($rc == 200) && ($got eq $expect); + print "got $rc '$got'", ($ok ? ": OK\n" : ", expected '$expect'\n"); + + ok($ok); +} exit 0; ### sub routines diff --git a/debian/perl-framework/t/modules/usertrack.t b/debian/perl-framework/t/modules/usertrack.t index 449d5b5..d9f62da 100644 --- a/debian/perl-framework/t/modules/usertrack.t +++ b/debian/perl-framework/t/modules/usertrack.t @@ -15,7 +15,7 @@ my @testcases = ( my $iters = 100; my %cookiex = (); -plan tests => (scalar (@testcases) * 2 + 2) * $iters + 1, need 'mod_usertrack'; +plan tests => (scalar (@testcases) * 2 + 2) * $iters + 1 + 3, need 'mod_usertrack'; foreach (1..$iters) { my $nb_req = 1; @@ -60,3 +60,15 @@ foreach (1..$iters) { # Check the overall number of cookies generated ok ((scalar (keys %cookiex)) == ($iters * 2)); + +# Check that opt-in flags aren't set +my $r = GET("/modules/usertrack/foo.html"); +ok t_cmp($r->code, 200, "Checking return code is '200'"); +# Checking for content +my $setcookie = $r->header('Set-Cookie'); +t_debug("$setcookie"); +ok defined $setcookie; +$setcookie =~ m/(Secure|HTTPonly|SameSite)/i; +ok t_cmp($1, undef); + + diff --git a/debian/perl-framework/t/php-fpm/log/.empty b/debian/perl-framework/t/php-fpm/log/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debian/perl-framework/t/php-fpm/log/.empty diff --git a/debian/perl-framework/t/php-fpm/pools/www/.empty b/debian/perl-framework/t/php-fpm/pools/www/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debian/perl-framework/t/php-fpm/pools/www/.empty diff --git a/debian/perl-framework/t/php-fpm/run/.empty b/debian/perl-framework/t/php-fpm/run/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debian/perl-framework/t/php-fpm/run/.empty diff --git a/debian/perl-framework/t/php-fpm/var/log/.empty b/debian/perl-framework/t/php-fpm/var/log/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debian/perl-framework/t/php-fpm/var/log/.empty diff --git a/debian/perl-framework/t/security/CVE-2009-3555.t b/debian/perl-framework/t/security/CVE-2009-3555.t index 636fee5..bd0c413 100644 --- a/debian/perl-framework/t/security/CVE-2009-3555.t +++ b/debian/perl-framework/t/security/CVE-2009-3555.t @@ -18,6 +18,12 @@ Apache::TestRequest::set_client_cert("client_ok"); Apache::TestRequest::module('mod_ssl'); my $sock = Apache::TestRequest::vhost_socket('mod_ssl'); + +if ($sock && $sock->connected && $sock->get_sslversion() eq "TLSv1_3") { + skip "Skipping test for TLSv1.3" foreach(1..4); + exit; +} + ok $sock && $sock->connected; diff --git a/debian/perl-framework/t/ssl/ocsp.t b/debian/perl-framework/t/ssl/ocsp.t index 9e0d776..8ec8505 100644 --- a/debian/perl-framework/t/ssl/ocsp.t +++ b/debian/perl-framework/t/ssl/ocsp.t @@ -30,24 +30,35 @@ my $r; sok { $r = GET $url, cert => undef; - my $message = $r->message() || ''; + my $message = $r->content() || ''; my $warning = $r->header('Client-Warning') || ''; + print "warning: $warning\n"; + print "message: $message"; + print "response:\n"; print $r->as_string; $r->code == 500 && $warning =~ 'Internal response' && - $message =~ /alert handshake failure|read failed/; + $message =~ /alert handshake failure|read failed|closed connection without sending any data/; }; sok { $r = GET $url, cert => 'client_ok'; + my $warning = $r->header('Client-Warning') || ''; + my $message = $r->content() || ''; + print "warning: $warning\n"; + print "message: $message"; + print "response:\n"; print $r->as_string; $r->code == 200; }; sok { $r = GET $url, cert => 'client_revoked'; - my $message = $r->message() || ''; + my $message = $r->content() || ''; my $warning = $r->header('Client-Warning') || ''; + print "warning: $warning\n"; + print "message: $message"; + print "response:\n"; print $r->as_string; $r->code == 500 && $warning =~ 'Internal response' && - $message =~ /alert certificate revoked|read failed/; + $message =~ /alert certificate revoked|read failed|closed connection without sending any data/; }; diff --git a/debian/perl-framework/t/ssl/pha.t b/debian/perl-framework/t/ssl/pha.t new file mode 100644 index 0000000..2e2a763 --- /dev/null +++ b/debian/perl-framework/t/ssl/pha.t @@ -0,0 +1,47 @@ +use strict; +use warnings FATAL => 'all'; + +use Apache::Test; +use Apache::TestRequest; +use Apache::TestUtil; +use IO::Socket::SSL; + +# This is the equivalent of pr12355.t for TLSv1.3. + +Apache::TestRequest::user_agent(ssl_opts => {SSL_version => 'TLSv13'}); +Apache::TestRequest::scheme('https'); +Apache::TestRequest::user_agent_keepalive(1); + +my $r = GET "/"; + +if (!$r->is_success) { + print "1..0 # skip: TLSv1.3 not supported"; + exit 0; +} + +if (!defined &IO::Socket::SSL::can_pha || !IO::Socket::SSL::can_pha()) { + print "1..0 # skip: PHA not supported by IO::Socket::SSL < 2.061"; + exit 0; +} + +plan tests => 4, need_min_apache_version("2.4.47"); + +$r = GET("/verify/", cert => undef); +ok t_cmp($r->code, 403, "access must be denied without client certificate"); + +# SSLRenegBufferSize 10 for this location which should mean a 413 +# error. +$r = POST("/require/small/perl_echo.pl", content => 'y'x101, + cert => 'client_ok'); +ok t_cmp($r->code, 413, "PHA reneg body buffer size restriction works"); + +# Reset to use a new connection. +Apache::TestRequest::user_agent(reset => 1); +Apache::TestRequest::user_agent(ssl_opts => {SSL_version => 'TLSv13'}); +Apache::TestRequest::scheme('https'); + +$r = POST("/verify/modules/cgi/perl_echo.pl", content => 'x'x10000, + cert => 'client_ok'); + +ok t_cmp($r->code, 200, "PHA works with POST body"); +ok t_cmp($r->content, $r->request->content, "request body matches response"); diff --git a/debian/perl-framework/t/ssl/pr12355.t b/debian/perl-framework/t/ssl/pr12355.t index 51be00f..8444b3f 100644 --- a/debian/perl-framework/t/ssl/pr12355.t +++ b/debian/perl-framework/t/ssl/pr12355.t @@ -7,11 +7,26 @@ use Apache::TestUtil; plan tests => 10, need 'ssl', need_min_apache_version('2.0'); -Apache::TestRequest::user_agent( ssl_opts => { SSL_cipher_list => 'ALL'}); -Apache::TestRequest::user_agent_keepalive(1); +my $r; + +Apache::TestRequest::user_agent(ssl_opts => {SSL_version => 'TLSv13'}); Apache::TestRequest::scheme('https'); -my $r; +$r = GET "/"; +my $tls13_works = $r->is_success; + +# Forget the above user agent settings, start fresh +Apache::TestRequest::user_agent(reset => 1); + +# If TLS 1.3 worked, downgrade to TLS 1.2, otherwise use what works. +if ($tls13_works) { + t_debug "Downgrading to TLSv12"; + Apache::TestRequest::user_agent(ssl_opts => {SSL_cipher_list => 'ALL', SSL_version => 'TLSv12'}); +} else { + Apache::TestRequest::user_agent(ssl_opts => {SSL_cipher_list => 'ALL'}); +} +Apache::TestRequest::user_agent_keepalive(1); +Apache::TestRequest::scheme('https'); # Send a series of POST requests with varying size request bodies. # Alternate between the location which requires a AES128-SHA ciphersuite diff --git a/debian/perl-framework/t/ssl/pr43738.t b/debian/perl-framework/t/ssl/pr43738.t index 0814a39..6bf9ccf 100644 --- a/debian/perl-framework/t/ssl/pr43738.t +++ b/debian/perl-framework/t/ssl/pr43738.t @@ -9,11 +9,26 @@ plan tests => 4, need 'ssl', need_module('actions'), need_min_apache_version('2.2.7'); -Apache::TestRequest::user_agent( ssl_opts => { SSL_cipher_list => 'ALL'}); -Apache::TestRequest::user_agent_keepalive(1); +my $r; + +Apache::TestRequest::user_agent(ssl_opts => {SSL_version => 'TLSv13'}); Apache::TestRequest::scheme('https'); -my $r; +$r = GET "/"; +my $tls13_works = $r->is_success; + +# Forget the above user agent settings, start fresh +Apache::TestRequest::user_agent(reset => 1); + +# If TLS 1.3 worked, downgrade to TLS 1.2, otherwise use what works. +if ($tls13_works) { + t_debug "Downgrading to TLSv12"; + Apache::TestRequest::user_agent(ssl_opts => {SSL_cipher_list => 'ALL', SSL_version => 'TLSv12'}); +} else { + Apache::TestRequest::user_agent(ssl_opts => {SSL_cipher_list => 'ALL'}); +} +Apache::TestRequest::user_agent_keepalive(1); +Apache::TestRequest::scheme('https'); # Variation of the PR 12355 test which breaks per PR 43738. diff --git a/debian/perl-framework/t/ssl/proxy.t b/debian/perl-framework/t/ssl/proxy.t index bbeddb6..bec84b4 100644 --- a/debian/perl-framework/t/ssl/proxy.t +++ b/debian/perl-framework/t/ssl/proxy.t @@ -7,14 +7,18 @@ use Apache::TestUtil; use Apache::TestCommon (); my %frontend = ( - proxy_http_https => 'http', - proxy_https_https => 'https', - proxy_https_http => 'https', + proxy_http_https => 'http', + proxy_https_https => 'https', + proxy_https_http => 'https', + proxy_http_https_proxy_section => 'http', + proxy_https_https_proxy_section => 'https', ); my %backend = ( - proxy_http_https => 'https', - proxy_https_https => 'https', - proxy_https_http => 'http', + proxy_http_https => 'https', + proxy_https_https => 'https', + proxy_https_http => 'http', + proxy_http_https_proxy_section => 'https', + proxy_https_https_proxy_section => 'https', ); my $num_modules = scalar keys %frontend; diff --git a/debian/perl-framework/t/ssl/varlookup.t b/debian/perl-framework/t/ssl/varlookup.t index 126d442..e00a143 100644 --- a/debian/perl-framework/t/ssl/varlookup.t +++ b/debian/perl-framework/t/ssl/varlookup.t @@ -103,6 +103,10 @@ if (not have_min_apache_version('2.4.32')) { @vars = grep(!/_RAW/, @vars); } +if (not have_min_apache_version('2.5.1')) { + @vars = grep(!/_B64CERT/, @vars); +} + plan tests => scalar (@vars), need need_lwp, need_module('test_ssl'); for my $key (@vars) { @@ -254,7 +258,8 @@ SSL_CLIENT_A_KEY 'rsaEncryption' SSL_SERVER_A_KEY qr(^[rd]saEncryption$) SSL_CLIENT_CERT qr(^-----BEGIN CERTIFICATE-----) SSL_SERVER_CERT qr(^-----BEGIN CERTIFICATE-----) -#SSL_CLIENT_CERT_CHAINn +SSL_CLIENT_B64CERT qr(^[a-zA-Z0-9+/]{64,}={0,2}$) +SSL_SERVER_B64CERT qr(^[a-zA-Z0-9+/]{64,}={0,2}$) SSL_CLIENT_VERIFY 'SUCCESS' SSL_VERSION_LIBRARY SSL_VERSION_INTERFACE |