annotate ignore_invalid_headers.t @ 1974:b5036a0f9ae0 default tip

Tests: improved compatibility when using recent "openssl" app. Starting with OpenSSL 3.0, "openssl genrsa" generates encrypted keys in PKCS#8 format instead of previously used PKCS#1 format. Further, since OpenSSL 1.1.0 such keys are using PBKDF2 hmacWithSHA256. Such keys are not supported by old SSL libraries, notably by OpenSSL before 1.0.0 (OpenSSL 0.9.8 only supports hmacWithSHA1) and by BoringSSL before May 21, 2019 (support for hmacWithSHA256 was added in 302a4dee6c), and trying to load such keys into nginx compiled with an old SSL library results in "unsupported prf" errors. To facilitate testing with old SSL libraries, keys are now generated with "openssl genrsa -traditional" if the flag is available.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 06 May 2024 00:04:26 +0300
parents 2a0a6035a1af
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for ignore_invalid_headers, underscores_in_headers directives.
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 use Socket qw/ CRLF /;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16 use MIME::Base64 qw/ encode_base64 decode_base64 /;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 BEGIN { use FindBin; chdir($FindBin::Bin); }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 use lib 'lib';
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 use Test::Nginx;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 ###############################################################################
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 select STDERR; $| = 1;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 select STDOUT; $| = 1;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
1715
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
28 my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(12)
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 ->write_file_expand('nginx.conf', <<'EOF');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 %%TEST_GLOBALS%%
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 daemon off;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 events {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 http {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 %%TEST_GLOBALS_HTTP%%
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 listen 127.0.0.1:8080;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 server_name localhost;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 ignore_invalid_headers off;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 location / {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 proxy_pass http://127.0.0.1:8085;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 location /v {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 add_header X-Cookie $http_cookie;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 server {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 listen 127.0.0.1:8081;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 server_name localhost;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 location / {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 proxy_pass http://127.0.0.1:8085;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 server {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 listen 127.0.0.1:8082;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 server_name localhost;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 underscores_in_headers on;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 location / {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 proxy_pass http://127.0.0.1:8085;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 EOF
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 $t->write_file('index.html', '');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 $t->write_file('v', '');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 $t->run_daemon(\&http_daemon);
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 $t->run()->waitforsocket('127.0.0.1:' . port(8085));
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 ###############################################################################
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 my $us = 'GET / HTTP/1.0' . CRLF
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 . 'x_foo: x-bar' . CRLF . CRLF;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 my $us2 = 'GET / HTTP/1.0' . CRLF
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 . '_foo: x-bar' . CRLF . CRLF;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 my $bad = 'GET / HTTP/1.0' . CRLF
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 . 'x.foo: x-bar' . CRLF . CRLF;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 my $bad2 = 'GET / HTTP/1.0' . CRLF
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 . '.foo: x-bar' . CRLF . CRLF;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 # ignore_invalid_headers off;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 like(get($us, 8080), qr/x-bar/, 'off - underscore');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 like(get($us2, 8080), qr/x-bar/, 'off - underscore first');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 like(get($bad, 8080), qr/x-bar/, 'off - bad');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 like(get($bad2, 8080), qr/x-bar/, 'off - bad first');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 # ignore_invalid_headers off; headers parsing post 8f55cb5c7e79
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 unlike(http('GET /v HTTP/1.0' . CRLF
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 . 'Host: localhost' . CRLF
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 . 'coo: foo' . CRLF
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107 . '</kie>: x-bar' . CRLF . CRLF), qr/x-bar/, 'off - several');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 # ignore_invalid_headers on;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 unlike(get($us, 8081), qr/x-bar/, 'on - underscore');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 unlike(get($us2, 8081), qr/x-bar/, 'on - underscore first');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 # ignore_invalid_headers on; underscores_in_headers on;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 like(get($us, 8082), qr/x-bar/, 'underscores_in_headers');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 like(get($us2, 8082), qr/x-bar/, 'underscores_in_headers - first');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118
1715
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
119 # always invalid header characters
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
120
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
121 my $bad3 = 'GET / HTTP/1.0' . CRLF
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
122 . ':foo: x-bar' . CRLF . CRLF;
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
123 my $bad4 = 'GET / HTTP/1.0' . CRLF
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
124 . ' foo: x-bar' . CRLF . CRLF;
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
125 my $bad5 = 'GET / HTTP/1.0' . CRLF
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
126 . "foo\x02: x-bar" . CRLF . CRLF;
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
127
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
128 like(http($bad3), qr/400 Bad/, 'colon first');
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
129 like(http($bad4), qr/400 Bad/, 'space');
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
130 like(http($bad5), qr/400 Bad/, 'control');
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
131
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132 ###############################################################################
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134 sub get {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 my ($msg, $port) = @_;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137 my $s = IO::Socket::INET->new('127.0.0.1:' . port($port)) or die;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138 my ($headers) = http($msg, socket => $s) =~ /X-Headers: (\w+)/;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139 decode_base64($headers);
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142 ###############################################################################
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 sub http_daemon {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145 my $once = 1;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146 my $server = IO::Socket::INET->new(
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147 Proto => 'tcp',
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 LocalHost => '127.0.0.1:' . port(8085),
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149 Listen => 5,
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150 Reuse => 1
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 )
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 or die "Can't create listening socket: $!\n";
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 local $SIG{PIPE} = 'IGNORE';
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 while (my $client = $server->accept()) {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 $client->autoflush(1);
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 my $headers = '';
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 my $uri = '';
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 while (<$client>) {
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163 $headers .= $_;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164 last if (/^\x0d?\x0a?$/);
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167 $headers = encode_base64($headers, "");
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169 print $client <<EOF;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 HTTP/1.1 200 OK
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 Connection: close
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 X-Headers: $headers
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174 EOF
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 ###############################################################################