3 # add current source dir to the include-path
4 # we need this for make distcheck
5 (my $srcdir = $0) =~ s
,/[^/]+$,/,;
11 use Test
::More tests
=> 19;
14 my $tf = LightyTest
->new();
17 $tf->{CONFIGFILE
} = 'condition.conf';
18 ok
($tf->start_proc == 0, "Starting lighttpd") or die();
20 $t->{REQUEST
} = ( <<EOF
21 GET /index.html HTTP/1.0
25 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_1" } ];
26 ok
($tf->handle_http($t) == 0, 'config deny');
28 $t->{REQUEST
} = ( <<EOF
29 GET /index.html HTTP/1.0
30 Host: test1.example.org
33 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_2" } ];
34 ok
($tf->handle_http($t) == 0, '2nd child of chaining');
36 $t->{REQUEST
} = ( <<EOF
37 GET /index.html HTTP/1.0
38 Host: test2.example.org
41 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_3" } ];
42 ok
($tf->handle_http($t) == 0, '3rd child of chaining');
44 $t->{REQUEST
} = ( <<EOF
45 GET /index.html HTTP/1.0
46 Host: test3.example.org
49 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_5" } ];
50 ok
($tf->handle_http($t) == 0, 'nesting');
52 $t->{REQUEST
} = ( <<EOF
53 GET /subdir/index.html HTTP/1.0
54 Host: test4.example.org
57 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_7" } ];
58 ok
($tf->handle_http($t) == 0, 'url subdir');
60 $t->{REQUEST
} = ( <<EOF
61 GET /subdir/../css/index.html HTTP/1.0
62 Host: test4.example.org
65 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_6" } ];
66 ok
($tf->handle_http($t) == 0, 'url subdir with path traversal');
68 ok
($tf->stop_proc == 0, "Stopping lighttpd");
70 $tf->{CONFIGFILE
} = 'lighttpd.conf';
71 ok
($tf->start_proc == 0, "Starting lighttpd") or die();
73 $t->{REQUEST
} = ( <<EOF
74 GET /nofile.png HTTP/1.0
75 Host: referer.example.org
78 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
79 ok
($tf->handle_http($t) == 0, 'condition: Referer - no referer');
81 $t->{REQUEST
} = ( <<EOF
82 GET /nofile.png HTTP/1.0
83 Host: referer.example.org
84 Referer: http://referer.example.org/
87 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
88 ok
($tf->handle_http($t) == 0, 'condition: Referer - referer matches regex');
90 $t->{REQUEST
} = ( <<EOF
91 GET /image.jpg HTTP/1.0
95 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
96 ok
($tf->handle_http($t) == 0, 'condition: Referer - no referer');
98 $t->{REQUEST
} = ( <<EOF
99 GET /image.jpg HTTP/1.0
100 Host: www.example.org
101 Referer: http://referer.example.org/
104 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
105 ok
($tf->handle_http($t) == 0, 'condition: Referer - referer matches regex');
107 $t->{REQUEST
} = ( <<EOF
108 GET /image.jpg HTTP/1.0
109 Host: www.example.org
110 Referer: http://evil-referer.example.org/
113 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
114 ok
($tf->handle_http($t) == 0, 'condition: Referer - referer doesn\'t match');
116 $t->{REQUEST
} = ( <<EOF
118 Host: bug255.example.org
121 Host: bug255.example.org
125 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 403 }, { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 403 } ];
126 ok
($tf->handle_http($t) == 0, 'remote ip cache (#255)');
128 $t->{REQUEST
} = ( <<EOF
129 GET /empty-ref.noref HTTP/1.0
133 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
134 ok
($tf->handle_http($t) == 0, 'condition: $HTTP["referer"] == "" and Referer is no set');
136 $t->{REQUEST
} = ( <<EOF
137 GET /empty-ref.noref HTTP/1.0
142 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
143 ok
($tf->handle_http($t) == 0, 'condition: $HTTP["referer"] == "" and Referer is empty');
145 $t->{REQUEST
} = ( <<EOF
146 GET /empty-ref.noref HTTP/1.0
151 $t->{RESPONSE
} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
152 ok
($tf->handle_http($t) == 0, 'condition: $HTTP["referer"] == "" and Referer: foobar');
154 ok
($tf->stop_proc == 0, "Stopping lighttpd");