Mercurial > hg > nginx-tests
annotate mail_resolver.t @ 540:481d705b8610
Tests: SSL support in mail backends.
Socket is now embedded into every mail module.
Socket methods are wrapped where appropriate.
The new "SSL" extra flag specifies to accept connection over SSL.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 03 Apr 2015 00:11:38 +0300 |
parents | 847ea345becb |
children | a6764c2a9f12 |
rev | line source |
---|---|
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
355
14eba1ad0880
Tests: reduce race in mail resolver test.
Sergey Kandaurov <pluknet@nginx.com>
parents:
352
diff
changeset
|
6 # Tests for mail resolver. |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use Test::Nginx::SMTP; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 ############################################################################### |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 local $SIG{PIPE} = 'IGNORE'; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 |
355
14eba1ad0880
Tests: reduce race in mail resolver test.
Sergey Kandaurov <pluknet@nginx.com>
parents:
352
diff
changeset
|
28 my $t = Test::Nginx->new()->has(qw/mail smtp http rewrite/) |
14eba1ad0880
Tests: reduce race in mail resolver test.
Sergey Kandaurov <pluknet@nginx.com>
parents:
352
diff
changeset
|
29 ->run_daemon(\&Test::Nginx::SMTP::smtp_test_daemon); |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 $t->write_file_expand('nginx.conf', <<'EOF'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 %%TEST_GLOBALS%% |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 daemon off; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 events { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 mail { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 auth_http http://127.0.0.1:8080/mail/auth; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 smtp_auth none; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 server_name locahost; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 |
362
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
45 # prevent useless resend |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
46 resolver_timeout 1s; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
47 |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 server { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 listen 127.0.0.1:8025; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 protocol smtp; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 resolver 127.0.0.1:8081 127.0.0.1:8082 127.0.0.1:8083; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 server { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 listen 127.0.0.1:8027; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 protocol smtp; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 resolver 127.0.0.1:8082; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 server { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 listen 127.0.0.1:8028; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 protocol smtp; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 resolver 127.0.0.1:8083; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
64 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 server { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 listen 127.0.0.1:8029; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 protocol smtp; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 resolver 127.0.0.1:8084; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 } |
362
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
72 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
73 server { |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
74 listen 127.0.0.1:8030; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
75 protocol smtp; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
76 resolver 127.0.0.1:8085; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
77 } |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
78 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
79 server { |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
80 listen 127.0.0.1:8031; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
81 protocol smtp; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
82 resolver 127.0.0.1:8086; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
83 } |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
86 http { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 %%TEST_GLOBALS_HTTP%% |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 server { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 listen 127.0.0.1:8080; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
91 server_name localhost; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
92 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 location = /mail/auth { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 set $reply $http_client_host; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
95 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 if ($http_client_host !~ UNAVAIL) { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 set $reply OK; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
99 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
100 add_header Auth-Status $reply; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 add_header Auth-Server 127.0.0.1; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 add_header Auth-Port 8026; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 return 204; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
105 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
106 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 EOF |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 |
362
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
110 for (8081 .. 8086) { |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
111 $t->run_daemon(\&dns_daemon, $_, $t); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
112 } |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
113 $t->run(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
114 |
362
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
115 for (8081 .. 8086) { |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
116 $t->waitforfile($t->testdir . "/$_"); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
117 } |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 |
362
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
119 $t->plan(7); |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 ############################################################################### |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 # PTR |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 my $s = Test::Nginx::SMTP->new(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
126 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
127 $s->send('EHLO example.com'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
128 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
129 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
130 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
131 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
132 $s->send('RCPT TO:<test@example.com>'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
133 $s->ok('PTR'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
134 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
135 $s->send('QUIT'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
136 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
137 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
138 # Cached PTR prevents from querying bad ns on port 8083 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
139 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
140 $s = Test::Nginx::SMTP->new(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
141 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
142 $s->send('EHLO example.com'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
143 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
144 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
145 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
146 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
147 $s->send('RCPT TO:<test@example.com>'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
148 $s->ok('PTR cached'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
149 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
150 $s->send('QUIT'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
151 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
152 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
153 # SERVFAIL |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
154 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
155 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8027"); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
156 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 $s->send('EHLO example.com'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
160 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 $s->send('RCPT TO:<test@example.com>'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 $s->check(qr/TEMPUNAVAIL/, 'PTR SERVFAIL'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 $s->send('QUIT'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
168 # PTR with zero length RDATA |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
170 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8028"); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
171 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 $s->send('EHLO example.com'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
173 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
174 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
175 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
176 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
177 $s->send('RCPT TO:<test@example.com>'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
178 $s->check(qr/TEMPUNAVAIL/, 'PTR empty'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
179 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
180 $s->send('QUIT'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
182 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
183 # CNAME |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
185 TODO: { |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
186 local $TODO = 'support for CNAME RR'; |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
187 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
188 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8029"); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
189 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
190 $s->send('EHLO example.com'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
191 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
192 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
193 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
194 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
195 $s->send('RCPT TO:<test@example.com>'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
196 $s->ok('PTR with CNAME'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
197 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
198 $s->send('QUIT'); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
199 $s->read(); |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
200 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
201 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
202 |
362
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
203 # uncompressed answer |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
204 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
205 TODO: { |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
206 local $TODO = 'support for uncompressed name in PTR'; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
207 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
208 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8030"); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
209 $s->read(); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
210 $s->send('EHLO example.com'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
211 $s->read(); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
212 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
213 $s->read(); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
214 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
215 $s->send('RCPT TO:<test@example.com>'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
216 $s->ok('uncompressed PTR'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
217 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
218 $s->send('QUIT'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
219 $s->read(); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
220 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
221 } |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
222 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
223 TODO: { |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
224 local $TODO = 'PTR type checking'; |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
225 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
226 $s = Test::Nginx::SMTP->new(PeerAddr => "127.0.0.1:8031"); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
227 $s->read(); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
228 $s->send('EHLO example.com'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
229 $s->read(); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
230 $s->send('MAIL FROM:<test@example.com> SIZE=100'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
231 $s->read(); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
232 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
233 $s->send('RCPT TO:<test@example.com>'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
234 $s->check(qr/TEMPUNAVAIL/, 'PTR type'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
235 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
236 $s->send('QUIT'); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
237 $s->read(); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
238 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
239 } |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
240 |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
241 ############################################################################### |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
242 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
243 sub reply_handler { |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
244 my ($recv_data, $port) = @_; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
245 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
246 my (@name, @rdata); |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
247 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
248 use constant NOERROR => 0; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
249 use constant SERVFAIL => 2; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
250 use constant NXDOMAIN => 3; |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
251 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
252 use constant A => 1; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
253 use constant CNAME => 5; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
254 use constant PTR => 12; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
255 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
256 use constant IN => 1; |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
257 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
258 # default values |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
259 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
260 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
261 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
262 # decode name |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
263 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
264 my ($len, $offset) = (undef, 12); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
265 while (1) { |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
266 $len = unpack("\@$offset C", $recv_data); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
267 last if $len == 0; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
268 $offset++; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
269 push @name, unpack("\@$offset A$len", $recv_data); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
270 $offset += $len; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
271 } |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
272 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
273 $offset -= 1; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
274 my ($id, $type, $class) = unpack("n x$offset n2", $recv_data); |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
275 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
276 my $name = join('.', @name); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
277 if ($name eq 'a.example.net' && $type == A) { |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
278 push @rdata, rd_addr($ttl, '127.0.0.1'); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
279 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
280 } elsif ($name eq '1.0.0.127.in-addr.arpa' && $type == PTR) { |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
281 if ($port == 8081) { |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
282 push @rdata, rd_name(PTR, $ttl, 'a.example.net'); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
283 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
284 } elsif ($port == 8082) { |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
285 $rcode = SERVFAIL; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
286 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
287 } elsif ($port == 8083) { |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
288 # zero length RDATA |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
289 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
290 push @rdata, pack("n3N n", 0xc00c, PTR, IN, $ttl, 0); |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
291 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
292 } elsif ($port == 8084) { |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
293 # PTR answered with CNAME |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
294 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
295 push @rdata, rd_name(CNAME, $ttl, |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
296 '1.1.0.0.127.in-addr.arpa'); |
362
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
297 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
298 } elsif ($port == 8085) { |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
299 # uncompressed answer |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
300 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
301 push @rdata, pack("(w/a*)6x n2N n(w/a*)3x", |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
302 ('1', '0', '0', '127', 'in-addr', 'arpa'), |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
303 PTR, IN, $ttl, 15, ('a', 'example', 'net')); |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
304 |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
305 } elsif ($port == 8086) { |
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
306 push @rdata, rd_name(CNAME, $ttl, 'a.example.net'); |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
307 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
308 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
309 } elsif ($name eq '1.1.0.0.127.in-addr.arpa' && $type == PTR) { |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
310 push @rdata, rd_name(PTR, $ttl, 'a.example.net'); |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
311 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
312 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
313 $len = @name; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
314 pack("n6 (w/a*)$len x n2", $id, $hdr | $rcode, 1, scalar @rdata, |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
315 0, 0, @name, $type, $class) . join('', @rdata); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
316 } |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
317 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
318 sub rd_name { |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
319 my ($type, $ttl, $name) = @_; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
320 my ($rdlen, @rdname); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
321 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
322 @rdname = split /\./, $name; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
323 $rdlen = length(join '', @rdname) + @rdname + 1; |
362
8ca9c75c97d2
Tests: more resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
361
diff
changeset
|
324 pack("n3N n(w/a*)* x", 0xc00c, $type, IN, $ttl, $rdlen, @rdname); |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
325 } |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
326 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
327 sub rd_addr { |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
328 my ($ttl, $addr) = @_; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
329 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
330 my $code = 'split(/\./, $addr)'; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
331 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
332 # use a special pack string to not zero pad |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
333 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
334 return pack 'n3N', 0xc00c, A, IN, $ttl if $addr eq ''; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
335 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
336 pack 'n3N nC4', 0xc00c, A, IN, $ttl, eval "scalar $code", eval($code); |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
337 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
338 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
339 sub dns_daemon { |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
340 my ($port, $t) = @_; |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
341 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
342 my ($data, $recv_data); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
343 my $socket = IO::Socket::INET->new( |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
344 LocalAddr => '127.0.0.1', |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
345 LocalPort => $port, |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
346 Proto => 'udp', |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
347 ) |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
348 or die "Can't create listening socket: $!\n"; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
349 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
350 # signal we are ready |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
351 |
357
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
352 open my $fh, '>', $t->testdir() . '/' . $port; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
353 close $fh; |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
354 |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
355 while (1) { |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
356 $socket->recv($recv_data, 65536); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
357 $data = reply_handler($recv_data, $port); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
358 $socket->send($data); |
e0c00e695cb5
Tests: removed Net::DNS dependency.
Sergey Kandaurov <pluknet@nginx.com>
parents:
355
diff
changeset
|
359 } |
352
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
360 } |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
361 |
145c37f27c5a
Tests: added resolver tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
362 ############################################################################### |