File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / lighttpd / tests / core-condition.t
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Nov 2 10:35:00 2016 UTC (7 years, 8 months ago) by misho
Branches: lighttpd, MAIN
CVS tags: v1_4_41p8, HEAD
lighttpd 1.4.41

    1: #!/usr/bin/env perl
    2: BEGIN {
    3: 	# add current source dir to the include-path
    4: 	# we need this for make distcheck
    5: 	(my $srcdir = $0) =~ s,/[^/]+$,/,;
    6: 	unshift @INC, $srcdir;
    7: }
    8: 
    9: use strict;
   10: use IO::Socket;
   11: use Test::More tests => 21;
   12: use LightyTest;
   13: 
   14: my $tf = LightyTest->new();
   15: my $t;
   16: 
   17: $tf->{CONFIGFILE} = 'condition.conf';
   18: ok($tf->start_proc == 0, "Starting lighttpd") or die();
   19: 
   20: $t->{REQUEST}  = ( <<EOF
   21: GET /index.html HTTP/1.0
   22: Host: www.example.org
   23: EOF
   24:  );
   25: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_1" } ];
   26: ok($tf->handle_http($t) == 0, 'config deny');
   27: 
   28: $t->{REQUEST}  = ( <<EOF
   29: GET /index.html HTTP/1.0
   30: Host: test1.example.org
   31: EOF
   32:  );
   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');
   35: 
   36: $t->{REQUEST}  = ( <<EOF
   37: GET /index.html HTTP/1.0
   38: Host: test2.example.org
   39: EOF
   40:  );
   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');
   43: 
   44: $t->{REQUEST}  = ( <<EOF
   45: GET /index.html HTTP/1.0
   46: Host: test3.example.org
   47: EOF
   48:  );
   49: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_5" } ];
   50: ok($tf->handle_http($t) == 0, 'nesting');
   51: 
   52: $t->{REQUEST}  = ( <<EOF
   53: GET /subdir/index.html HTTP/1.0
   54: Host: test4.example.org
   55: EOF
   56:  );
   57: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_7" } ];
   58: ok($tf->handle_http($t) == 0, 'url subdir');
   59: 
   60: $t->{REQUEST}  = ( <<EOF
   61: GET /subdir/../css/index.html HTTP/1.0
   62: Host: test4.example.org
   63: EOF
   64:  );
   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');
   67: 
   68: $t->{REQUEST}  = ( <<EOF
   69: GET / HTTP/1.0
   70: EOF
   71:  );
   72: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Server' => 'Apache 1.3.29' } ];
   73: ok($tf->handle_http($t) == 0, 'condition: handle if before else branches');
   74: 
   75: $t->{REQUEST}  = ( <<EOF
   76: GET /show/other/server-tag HTTP/1.0
   77: EOF
   78:  );
   79: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Server' => 'special tag' } ];
   80: ok($tf->handle_http($t) == 0, 'condition: handle if before else branches #2');
   81: 
   82: ok($tf->stop_proc == 0, "Stopping lighttpd");
   83: 
   84: $tf->{CONFIGFILE} = 'lighttpd.conf';
   85: ok($tf->start_proc == 0, "Starting lighttpd") or die();
   86: 
   87: $t->{REQUEST}  = ( <<EOF
   88: GET /nofile.png HTTP/1.0
   89: Host: referer.example.org
   90: EOF
   91:  );
   92: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
   93: ok($tf->handle_http($t) == 0, 'condition: Referer - no referer');
   94: 
   95: $t->{REQUEST}  = ( <<EOF
   96: GET /nofile.png HTTP/1.0
   97: Host: referer.example.org
   98: Referer: http://referer.example.org/
   99: EOF
  100:  );
  101: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
  102: ok($tf->handle_http($t) == 0, 'condition: Referer - referer matches regex');
  103: 
  104: $t->{REQUEST}  = ( <<EOF
  105: GET /image.jpg HTTP/1.0
  106: Host: www.example.org
  107: EOF
  108:  );
  109: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
  110: ok($tf->handle_http($t) == 0, 'condition: Referer - no referer');
  111: 
  112: $t->{REQUEST}  = ( <<EOF
  113: GET /image.jpg HTTP/1.0
  114: Host: www.example.org
  115: Referer: http://referer.example.org/
  116: EOF
  117:  );
  118: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
  119: ok($tf->handle_http($t) == 0, 'condition: Referer - referer matches regex');
  120: 
  121: $t->{REQUEST}  = ( <<EOF
  122: GET /image.jpg HTTP/1.0
  123: Host: www.example.org
  124: Referer: http://evil-referer.example.org/
  125: EOF
  126:  );
  127: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
  128: ok($tf->handle_http($t) == 0, 'condition: Referer - referer doesn\'t match');
  129: 
  130: $t->{REQUEST} = ( <<EOF
  131: GET /nofile HTTP/1.1
  132: Host: bug255.example.org
  133: 
  134: GET /nofile HTTP/1.1
  135: Host: bug255.example.org
  136: Connection: close
  137: EOF
  138:  );
  139: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 403 },  { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 403 } ];
  140: ok($tf->handle_http($t) == 0, 'remote ip cache (#255)');
  141: 
  142: $t->{REQUEST}  = ( <<EOF
  143: GET /empty-ref.noref HTTP/1.0
  144: Cookie: empty-ref
  145: EOF
  146:  );
  147: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
  148: ok($tf->handle_http($t) == 0, 'condition: $HTTP["referer"] == "" and Referer is no set');
  149: 
  150: $t->{REQUEST}  = ( <<EOF
  151: GET /empty-ref.noref HTTP/1.0
  152: Cookie: empty-ref
  153: Referer:
  154: EOF
  155:  );
  156: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
  157: ok($tf->handle_http($t) == 0, 'condition: $HTTP["referer"] == "" and Referer is empty');
  158: 
  159: $t->{REQUEST}  = ( <<EOF
  160: GET /empty-ref.noref HTTP/1.0
  161: Cookie: empty-ref
  162: Referer: foobar
  163: EOF
  164:  );
  165: $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
  166: ok($tf->handle_http($t) == 0, 'condition: $HTTP["referer"] == "" and Referer: foobar');
  167: 
  168: ok($tf->stop_proc == 0, "Stopping lighttpd");

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>