summaryrefslogtreecommitdiffstats
path: root/debian/perl-framework/t/modules/access.t
blob: 0c8e34e83fbed8ac3bc2a121c1109e0da67fbbc3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
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";

                }
            }
        }
    }
}