191 lines
5.6 KiB
Perl
191 lines
5.6 KiB
Perl
use strict;
|
|
use warnings FATAL => 'all';
|
|
|
|
use Apache::Test;
|
|
use Apache::TestRequest;
|
|
use Apache::TestUtil;
|
|
|
|
##
|
|
## mod_access test
|
|
##
|
|
|
|
my $vars = Apache::Test::vars();
|
|
my $localhost_name = $vars->{servername};
|
|
my $remote_addr = $vars->{remote_addr};
|
|
my(@addr) = split /\./, $remote_addr;
|
|
my $addr1 = $addr[0];
|
|
my $addr2 = join '.', $addr[0], $addr[1];
|
|
|
|
my @localhost = (
|
|
'from all',
|
|
"from $localhost_name",
|
|
"from $remote_addr",
|
|
"from $addr2",
|
|
"from $remote_addr/255.255.0.0",
|
|
"from $remote_addr/16",
|
|
'from somewhere.else.com',
|
|
'from 66.6.6.6'
|
|
);
|
|
my @order = ('deny,allow', 'allow,deny', 'mutual-failure');
|
|
my @allow = @localhost;
|
|
my @deny = @localhost;
|
|
|
|
plan tests => (@order * @allow * @deny * 2) + (@order * @allow), \&need_access;
|
|
|
|
my $dir = $vars->{t_dir};
|
|
$dir .= "/htdocs/modules/access/htaccess";
|
|
|
|
sub write_htaccess {
|
|
my $conf_str = shift;
|
|
open (HT, ">$dir/.htaccess") or die "cant open htaccess: $!";
|
|
print HT $conf_str;
|
|
close (HT);
|
|
}
|
|
|
|
my ($config_string, $ok);
|
|
foreach my $order (@order) {
|
|
foreach my $allow (@allow) {
|
|
$config_string = "Order $order\nAllow $allow\n";
|
|
write_htaccess($config_string);
|
|
|
|
t_debug "---", $config_string;
|
|
|
|
if ($order eq 'deny,allow') {
|
|
|
|
## if allowing by default,
|
|
## there is no 'Deny' directive, so everything
|
|
## is allowed.
|
|
t_debug "expecting access.";
|
|
ok GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
|
|
} else {
|
|
|
|
## denying by default
|
|
|
|
if ($allow =~ /^from $addr1/
|
|
|| $allow eq "from $localhost_name"
|
|
|| $allow eq 'from all') {
|
|
|
|
## if we are explicitly allowed, its ok
|
|
t_debug "expecting access.";
|
|
ok GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
} else {
|
|
|
|
## otherwise, not ok
|
|
t_debug "expecting access denial.";
|
|
ok !GET_OK "/modules/access/htaccess/index.html";
|
|
}
|
|
}
|
|
|
|
|
|
foreach my $deny (@deny) {
|
|
$config_string = "Order $order\nDeny $deny\n";
|
|
write_htaccess($config_string);
|
|
|
|
t_debug "---", $config_string;
|
|
|
|
if ($order eq 'deny,allow') {
|
|
|
|
## allowing by default
|
|
|
|
if ($deny =~ /^from $addr1/
|
|
|| $deny eq "from $localhost_name"
|
|
|| $deny eq 'from all') {
|
|
|
|
## if we are denied explicitly
|
|
## its not ok
|
|
t_debug "expecting access denial.";
|
|
ok !GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
} else {
|
|
|
|
## otherwise, ok
|
|
t_debug "expecting access.";
|
|
ok GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
}
|
|
} else {
|
|
|
|
## if denying by default
|
|
## there is no 'Allow' directive, so
|
|
## everything is denied.
|
|
t_debug "expecting access denial.";
|
|
ok !GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
}
|
|
|
|
$config_string = "Order $order\nAllow $allow\nDeny $deny\n";
|
|
write_htaccess($config_string);
|
|
|
|
t_debug "---", $config_string;
|
|
|
|
if ($order eq 'deny,allow') {
|
|
|
|
## allowing by default
|
|
|
|
if ($allow =~ /^from $addr1/
|
|
|| $allow eq "from $localhost_name"
|
|
|| $allow eq 'from all') {
|
|
|
|
## we are explicitly allowed
|
|
## so it is ok.
|
|
t_debug "expecting access.";
|
|
ok GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
} elsif ($deny =~ /^from $addr1/
|
|
|| $deny eq "from $localhost_name"
|
|
|| $deny eq 'from all') {
|
|
|
|
## if we are not explicitly allowed
|
|
## and are explicitly denied,
|
|
## we are denied access.
|
|
t_debug "expecting access denial.";
|
|
ok !GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
} else {
|
|
|
|
## if we are not explicity allowed
|
|
## or explicitly denied,
|
|
## we get access.
|
|
t_debug "expecting access.";
|
|
ok GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
}
|
|
} else {
|
|
|
|
## denying by default
|
|
|
|
if ($deny =~ /^from $addr1/
|
|
|| $deny eq "from $localhost_name"
|
|
|| $deny eq 'from all') {
|
|
|
|
## if we are explicitly denied,
|
|
## we get no access.
|
|
t_debug "expecting access denial.";
|
|
ok !GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
} elsif ($allow =~ /^from $addr1/
|
|
|| $allow eq "from $localhost_name"
|
|
|| $allow eq 'from all') {
|
|
|
|
## if we are not explicitly denied
|
|
## and are explicitly allowed,
|
|
## we get access.
|
|
t_debug "expecting access.";
|
|
ok GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
} else {
|
|
|
|
## if we are not explicitly denied
|
|
## and not explicitly allowed,
|
|
## we get no access.
|
|
t_debug "expecting access denial.";
|
|
ok !GET_OK "/modules/access/htaccess/index.html";
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|