Skip to content

Commit 2146e05

Browse files
committed
Patch up base test file, these changes tested on C version, vol 2
1 parent f3955c3 commit 2146e05

File tree

10 files changed

+425
-347
lines changed

10 files changed

+425
-347
lines changed

t/Asocks5.t

Lines changed: 153 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,42 +5,154 @@ use Test::More;
55
use Proc::Daemon;
66
use constant PIDFILE => '/tmp/socksserver.pid';
77

8-
my $d = Proc::Daemon->new( pid_file => PIDFILE, work_dir => '.', );
8+
my $d = Proc::Daemon->new(
9+
pid_file => PIDFILE,
10+
work_dir => '.',
11+
);
912
die 'Already running' unless ( 0 == ( -r PIDFILE ? $d->Status(PIDFILE) : 0 ) );
1013

1114
my $k = $d->Init();
1215
unless ( 0 == $k ) {
1316
plan tests => 1;
1417
ok $k, "Started Daemon at $k";
18+
sleep 2;
19+
until (
20+
my $s = IO::Socket::Socks->new(
21+
ProxyAddr => '127.0.0.1',
22+
ProxyPort => 9051,
23+
ConnectAddr => 'nulloooooooooooo.onion',
24+
ConnectPort => '25',
25+
)
26+
)
27+
{
28+
warn $IO::Socket::Socks::SOCKS_ERROR;
29+
sleep 2;
30+
}
1531
exit 0;
1632
}
1733

18-
my ( $output, $failure_output, $todo_output, );
34+
my $output;
1935
my $builder = Test::More->builder;
2036
$builder->output( \$output );
21-
$builder->failure_output( \$failure_output );
22-
$builder->todo_output( \$todo_output );
37+
$builder->failure_output( \$output );
38+
$builder->todo_output( \$output );
2339

2440
my $tests = 0;
2541

2642
my %tree = (
43+
'manualhttpdooooo.onion:80' => sub {
44+
my $client = shift;
45+
use HTTP::Headers;
46+
my $h = HTTP::Headers->new;
47+
my ( $hname, $hdata );
48+
while ( ( $_ = <$client> ) =~ /^[\r]?$/ ) {
49+
if ( $hname != undef ) {
50+
if (/^[ \t]/) {
51+
$hdata .= $_;
52+
} else {
53+
$h->push_header( $hname => $hdata );
54+
/^([^:]*):?(.*)$/;
55+
$hname = $1;
56+
$hdata = $2;
57+
}
58+
} else {
59+
/^([^:]*):?(.*)$/;
60+
$hname = $1;
61+
$hdata = $2;
62+
}
63+
}
64+
$h->push_header( $hname => $hdata );
65+
},
66+
'perlhttpdooooooo.onion:80' => sub {
67+
my $client = shift;
68+
use HTTP::Daemon();
69+
70+
# This should not work.
71+
HTTP::Daemon::ClientConn::get_request($client);
72+
},
73+
'echooooooooooooo.onion:80' => sub {
74+
my $client = shift;
75+
my $len = 1;
76+
do {
77+
my $request = '';
78+
while ( 0 < $len && $request !~ /\n/m ) {
79+
$len = $client->read( my $b, 1 );
80+
$request .= $b;
81+
}
82+
if ( 0 < $len ) {
83+
$tests++;
84+
ok $request =~ m%HTTP/1.1\r?\n%im, 'Have HTTP 1.1';
85+
if ( $request =~ m%//[a-z2-7]{16}\\.onion%i ) {
86+
$tests++;
87+
ok $request =~ m%//[a-z2-7]{16}\\.onion/%i,
88+
'Correct hostname in request line';
89+
}
90+
}
91+
while ( 0 < $len && $request !~ /\n\r?\n/m ) {
92+
$len = $client->read( my $b, 1 );
93+
$request .= $b;
94+
}
95+
if ( 0 < $len ) {
96+
if ( $request =~ /^Host:\s*([a-z2-7]{16}\\.onion[^\r\n]*)/mi ) {
97+
$tests++;
98+
my $h = $1;
99+
ok $request =~ m%^Host:\s*[a-z2-7]{16}\\.onion\r?\n/%i,
100+
"Correct hostname in host header: $h";
101+
}
102+
if ( $request =~ /^Cookie:([^\r\n]*)/mi ) {
103+
$tests++;
104+
my $h = $1;
105+
fail "Correct cookie domain: $h";
106+
}
107+
if ( $request =~ /^Content-Length:\s*([1-9][0-9]*)/mi ) {
108+
my ( $b, $clen ) = ( undef, $1 );
109+
while ( 0 < $clen ) {
110+
$len = $client->read( $b, $clen );
111+
$request .= $b;
112+
$clen -= $len;
113+
}
114+
}
115+
}
116+
my $clen = length $request;
117+
$client->print(
118+
"HTTP/1.1 200 Success\r\nContent-Type: text/plain\r\nContent-Length: $clen\r\n\r\n$request"
119+
);
120+
} while ( 0 != $len );
121+
},
122+
'proxy2httpdooooo.onion:80' => sub {
123+
my $client = shift;
124+
125+
# Open connection to httpd and enter bi-directional pass-through.
126+
# Ends when socket closes.
127+
},
128+
'nulloooooooooooo.onion:25' => sub {
129+
my $client = shift;
130+
},
27131
'exit:25' => sub {
28132
my $client = shift;
29133
done_testing($tests);
30-
$client->send( $output . $failure_output . $todo_output );
31-
$client->close();
134+
$client->print($output);
32135
exit 0;
33136
},
34137
);
35138

36139
use IO::Socket::Socks ':constants';
37140

38-
my $s = IO::Socket::Socks->new(
39-
ProxyAddr => 'localhost',
40-
ProxyPort => 9051,
41-
Listen => 1,
42-
SocksResolve => 0,
43-
) or die $IO::Socket::Socks::SOCKS_ERROR;
141+
$IO::Socket::Socks::SOCKS4_RESOLVE = 1;
142+
$IO::Socket::Socks::SOCKS5_RESOLVE = 0;
143+
my $s;
144+
until (
145+
$s = IO::Socket::Socks->new(
146+
SocksVersion => [ 4, 5 ],
147+
ProxyAddr => '127.0.0.1',
148+
ProxyPort => 9051,
149+
Listen => 1,
150+
)
151+
)
152+
{
153+
diag $IO::Socket::Socks::SOCKS_ERROR;
154+
sleep 3;
155+
}
44156

45157
ok $s, 'Have socks server';
46158
$tests++;
@@ -49,20 +161,42 @@ while (1) {
49161
my $client = $s->accept();
50162

51163
unless ($client) {
52-
print STDERR "ERROR: $IO::Socket::Socks::SOCKS_ERROR\n";
164+
fail $IO::Socket::Socks::SOCKS_ERROR;
165+
$tests++;
53166
next;
54167
}
55168

56169
my $command = $client->command();
57170
if ( $command->[0] == CMD_CONNECT ) {
58-
59-
# Handle the CONNECT
60-
$client->command_reply( REPLY_SUCCESS, $command->[1], $command->[2] );
171+
my $host = $client->version == 4 ? "0.0.0.1" : $command->[1];
172+
if ( exists $tree{"$command->[1]:$command->[2]"} ) {
173+
174+
# Handle the CONNECT
175+
$client->command_reply(
176+
$client->version == 4 ? REQUEST_GRANTED : REPLY_SUCCESS,
177+
$host, $command->[2] );
178+
$client->autoflush(1);
179+
$tree{"$command->[1]:$command->[2]"}($client);
180+
} else {
181+
diag "Not found in tree: $command->[1]:$command->[2]";
182+
diag $client->command_reply(
183+
$client->version == 4
184+
? REQUEST_FAILED
185+
: REPLY_ADDR_NOT_SUPPORTED,
186+
$host, $command->[2]
187+
);
188+
}
189+
} else {
190+
diag 'Unknowen command from socks:';
191+
use Data::Dumper;
192+
diag Dumper $command;
193+
$client->command_reply( $client->version == 4
194+
? REQUEST_FAILED
195+
: REPLY_CMD_NOT_SUPPORTED,
196+
$command->[1], $command->[2] );
61197
}
62198

63-
$tree{"$command->[1]:$command->[2]"}($client)
64-
if ( exists $tree{"$command->[1]:$command->[2]"} );
65-
199+
sleep 2;
66200
$client->close();
67201
}
68202

t/Zsocks5.t

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use Test::More;
55
use IO::Socket::Socks;
66

77
my $s = IO::Socket::Socks->new(
8-
ProxyAddr => 'localhost',
8+
ProxyAddr => '127.0.0.1',
99
ProxyPort => 9051,
1010
ConnectAddr => 'exit',
1111
ConnectPort => '25',

t/etc/ssl/test-cert.pem

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIEJjCCAo6gAwIBAgIEWZJvqTANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAwq
3-
Lm9uaW9uLnRlc3QwHhcNMTcwODE1MDM1MTA2WhcNMjcwODEzMDM1MTEzWjAXMRUw
4-
EwYDVQQDDAwqLm9uaW9uLnRlc3QwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGK
5-
AoIBgQC7vpjg7+pDeeabQJMFGyfshrVm9XbqD6sAk446h4iSfb8ysgCRJXYeEgQP
6-
1yHfHLmDv0sw6QEfVrNQVI0Etj2SXnS6w8Npl/Ute0TazrvFVyu0kYPwEnxa0rsK
7-
FlcweU9cb5AZDRwmISmXdKZMRFr3SvIMN+tRAGG4o/8qG7kH4Wr6E8yixE43/Wcd
8-
oiy9fIxAIlW+Xe8NhoqUPLqHZbI+uM19NNkCMAC1CBCZxNSP9LabpfTD/90cALhW
9-
DULCa+JT2rz36U4H44VzAaUdTEDXaY3IyOrXHzEobO8In8t3OyisNf2kiIXcpNFB
10-
3nlM3EMiDuzjz5oTCPNYTN8xZ+sIpD+1OG6yCEsgrugaGMRHwLzYdzg8xO7f9MTB
11-
q5u9aP53VH9fWJLkrTMLSO3BErmM8EeYaMKg9iaDxaoQuT+9XzCm+fWBWJko33dB
12-
xjWC7Q+V51uTNMJYm205My1swBgpB5Pxgqh+5jD0RS14LCOaD/rwzmhCAZQQKGQ8
13-
dKyHnscCAwEAAaN6MHgwDAYDVR0TAQH/BAIwADAjBgNVHREEHDAaggwqLm9uaW9u
14-
LnRlc3SCCm9uaW9uLnRlc3QwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0PAQH/
15-
BAUDAwegADAdBgNVHQ4EFgQUxLFcUgYE9Twmzvmps9CsqLW9wVkwDQYJKoZIhvcN
16-
AQELBQADggGBACeuYbmHdhqae2Bw4KyMmf5qtIg9UxB76YlH3MaC0062bv+hO0Aw
17-
iAO+X0Lu31+eYFjdCFB1XLw88oLjOpWr9hi8ZMXl8wOEdD88QzpgDT1Jm26dI/sg
18-
h0Po0gxhODPAOCVVC8rTeAjwNTLOV5VxiULPhk0z46cCIMbi8HVwR50qgFsIiXT+
19-
FYeYre7n9R09OtRYO3VhYAKF23DuKujHw/HXVl6F40S9gErRa+MXBlGUji56j/5a
20-
NmfS8djX2yyHurfbyQ8GXJ0r/W4bW5BcuMHm4jaWIFodA9CU+DZTWMKdxE3ryvHy
21-
57SCj1Tc/ovSuWRJI7V5W7NjGCFfbrss75OCE/Ek5XgF8TzBxtvpn3I7LlfE1ymD
22-
RJcYuSjhnf5nny4Kho2NOmlgJFEN7yp0YNzVKzz+tO5+5y2xH8b171K4CzpvWLU8
23-
+FwRr+0sFpwLJYbFXAFwhatSlKWODgcUxuas8MGEKPPHCa67lzaZiMw32C6GAatZ
24-
MMq/r/FFgkbY5w==
2+
MIIDBDCCAeygAwIBAgIJAK25kuAT+ZsMMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
3+
BAMMDCoub25pb24udGVzdDAeFw0xNzA5MTEwOTQ2NDhaFw0yNzA5MDkwOTQ2NDha
4+
MBcxFTATBgNVBAMMDCoub25pb24udGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEP
5+
ADCCAQoCggEBAKrfBwR43axQKVjX3jD3dBfWnCp9vRMAV9JGHU2a/WF8gg0b1zTa
6+
/LQCcRgJFIWKaTUedC/OiVlLkx807Q34RNAglzG6auoHJoepTY50Ef+ZnCqDG+ho
7+
s2DZp7/S8xejh8liw+iIKFxFcolnms5SoluMx658BdflMJwS3zPqaVXtI7ZmgZN+
8+
X1e+orN2zbHUiORNqG1G2Bck31JbQZDgnkZxzVR9EAEm7uKFtvuONsZICMB6x+Vl
9+
dojhHQnILWaJkQ/uDUR51E+06gXQZQ85zfcrUMcpW0bUG//k2PaucG7Xt28Qp/W2
10+
ZT4rkKqMItvwSBzYNAZunlDXd/HAdIlUePECAwEAAaNTMFEwHQYDVR0OBBYEFKjx
11+
AkZaUg6nAzO0hfk66NbPIxTcMB8GA1UdIwQYMBaAFKjxAkZaUg6nAzO0hfk66NbP
12+
IxTcMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBABwIKtlImJ/S
13+
SNP0HWzxgSz5sLGWJc1Nmw2rW0nQ8u42pzAjaslwH/FPEy/A6g7S5F8FN1fua+2m
14+
pDxQmYM+bTno4mNwcATw3MCEvPjOqOdp8Di1xEj7m2jlMY2uNuKImBXsU2sgKCKw
15+
TUHAaQXya1rx/SA7CjBUrTPRfVJJAwIzYgXuzx/GvOi+c3t/uMlGz5h6DpuTcgO/
16+
YJdRbrrzKLeJjpFDBOpVhWrlUib3kCgc2pRjeuVb7Yb+ZoN9aI++wKTCS/g/LZTW
17+
4DoZQ1fWh7PBDJiDbGVeJC6fxJxVR1bTyzTwvCA7NO9541mUHwsXHBS6w0FuQiKe
18+
5pmX5LNJxlc=
2519
-----END CERTIFICATE-----

t/etc/ssl/test-dh.pem

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,3 @@
1-
2-
Recommended key length: 256 bits
3-
4-
generator:
5-
0f:83:27:2b:c7:81:92:31:a5:ed:9a:63:c7:f8:00:12
6-
28:76:d8:ad:fb:b7:67:2a:a6:6c:ab:10:9d:64:5d:6e
7-
cb:d0:7e:84:73:51:84:a3:a0:f9:bf:04:06:5e:b0:e8
8-
c7:f2:88:b6:3b:25:c4:23:8d:87:c7:ad:b0:72:28:4c
9-
7d:11:bc:cd:0d:d3:82:b4:98:b6:3b:12:b8:13:03:83
10-
05:61:29:95:b1:45:2c:e5:fd:3c:1c:67:48:01:dd:44
11-
07:68:5a:44:5b:ea:13:63:38:65:60:3d:34:0a:5c:38
12-
8c:06:a6:22:aa:e4:48:b8:14:de:a0:39:3e:e4:3c:b9
13-
0b:d0:88:fd:06:e0:32:6f:11:49:c6:a3:01:eb:17:d4
14-
54:46:2c:c2:7f:5a:80:5b:75:4a:58:4c:87:90:51:2f
15-
ce:02:d6:e7:c2:c7:7b:ea:3b:9b:72:4b:b3:3c:63:42
16-
61:fb:5c:a0:55:a3:44:fa:11:45:25:f2:ea:33:0a:ed
17-
7b:cd:71:d0:2e:c5:d6:aa:83:a0:f1:72:dd:c4:8b:00
18-
cd:2d:49:c3:fb:a3:a0:d4:7b:1f:0c:42:26:c4:ef:1a
19-
92:db:b7:8c:05:08:9e:b0:16:8e:2f:66:3d:9b:75:da
20-
d1:c8:7b:b7:57:30:ed:42:3e:3c:74:70:a2:ce:18:f7
21-
5d:e9:4a:98:0e:9a:5e:82:ee:96:e0:c2:88:55:13:44
22-
99:ea:0f:13:51:5c:d8:db:b3:d1:ed:13:9d:4c:4b:67
23-
1b:8b:78:5c:4f:5d:91:36:63:64:8c:92:12:51:01:9b
24-
99:c6:c4:ce:42:7b:53:c2:c6:46:1b:97:75:9c:0f:49
25-
85:6e:50:89:13:b8:5b:4c:80:d4:0e:2f:77:b2:f4:6c
26-
6e:4c:4a:c9:c7:78:d3:d6:43:ae:53:fa:e2:32:e8:40
27-
f9:b5:03:85:c2:2e:b8:94:29:fc:7b:78:47:c7:52:68
28-
c3:e0:81:9f:d2:2d:a9:0b:74:0b:30:c9:40:8a:14:c4
29-
30-
31-
prime:
32-
89:2d:03:7e:e1:af:b2:5b:47:8a:c3:71:8f:8c:07:c7
33-
e5:9f:80:59:82:77:c8:b3:89:5b:8c:41:36:f4:d0:25
34-
f0:70:8c:c2:cf:6f:cf:b4:95:b5:cf:0f:c7:5f:a7:63
35-
1d:b1:28:bc:3b:5b:6a:c7:5d:87:15:3d:b6:e5:db:23
36-
48:3d:fc:73:bf:1c:75:7f:d7:d8:f8:f6:0f:52:1a:07
37-
17:6c:23:16:cd:fa:a9:42:42:3e:ae:5d:04:f7:53:b5
38-
fa:4b:e9:56:41:cf:91:33:ce:13:2e:a3:c5:42:a2:56
39-
81:87:c3:3d:0d:73:89:4c:d1:2a:ef:e7:89:e1:c0:b2
40-
d8:70:f1:4e:c8:dc:f4:60:77:27:0b:99:b3:c6:dc:57
41-
98:7e:33:ef:63:49:73:95:04:73:d5:77:4c:6c:dc:de
42-
d7:e2:3e:0c:48:14:48:c6:67:73:df:06:34:0c:8c:4e
43-
0c:1c:ad:ac:57:13:be:7e:26:14:4c:c1:69:e6:88:bf
44-
74:bb:a2:b6:c0:7e:e4:72:af:59:2b:80:0f:70:75:44
45-
57:9a:46:b4:1a:fc:27:ab:23:62:66:42:2e:9c:0f:70
46-
0f:1d:cd:b3:92:d5:d1:fb:32:1f:58:65:d7:86:97:f5
47-
da:1f:25:bd:82:25:ff:4b:06:0b:1a:8d:7c:0a:7a:cf
48-
e3:5f:42:3b:81:93:23:33:07:ae:ae:29:97:e9:6b:b1
49-
43:c1:6f:68:8a:3b:f1:af:42:8a:94:87:0e:a6:da:58
50-
34:a5:70:7c:c0:73:02:2d:a7:c8:29:8f:84:db:dd:5b
51-
fa:45:67:06:a5:22:a0:ea:cb:e0:9d:fb:9d:d0:13:69
52-
f1:24:2a:c0:6e:d0:dc:86:e6:ad:26:7b:4b:19:84:16
53-
cd:63:fe:4d:e5:dc:8f:21:20:58:ab:4e:f9:27:7c:ed
54-
5f:a9:45:4e:64:ac:32:6d:84:0f:14:15:d2:59:a2:e2
55-
2c:02:73:cd:fb:48:55:d6:2b:80:3d:9b:b7:74:9c:8d
56-
57-
58-
591
-----BEGIN DH PARAMETERS-----
602
MIIDDQKCAYEAiS0DfuGvsltHisNxj4wHx+WfgFmCd8iziVuMQTb00CXwcIzCz2/P
613
tJW1zw/HX6djHbEovDtbasddhxU9tuXbI0g9/HO/HHV/19j49g9SGgcXbCMWzfqp

t/etc/ssl/test-intermediate.pem

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDBDCCAeygAwIBAgIJAK25kuAT+ZsMMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
3+
BAMMDCoub25pb24udGVzdDAeFw0xNzA5MTEwOTQ2NDhaFw0yNzA5MDkwOTQ2NDha
4+
MBcxFTATBgNVBAMMDCoub25pb24udGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEP
5+
ADCCAQoCggEBAKrfBwR43axQKVjX3jD3dBfWnCp9vRMAV9JGHU2a/WF8gg0b1zTa
6+
/LQCcRgJFIWKaTUedC/OiVlLkx807Q34RNAglzG6auoHJoepTY50Ef+ZnCqDG+ho
7+
s2DZp7/S8xejh8liw+iIKFxFcolnms5SoluMx658BdflMJwS3zPqaVXtI7ZmgZN+
8+
X1e+orN2zbHUiORNqG1G2Bck31JbQZDgnkZxzVR9EAEm7uKFtvuONsZICMB6x+Vl
9+
dojhHQnILWaJkQ/uDUR51E+06gXQZQ85zfcrUMcpW0bUG//k2PaucG7Xt28Qp/W2
10+
ZT4rkKqMItvwSBzYNAZunlDXd/HAdIlUePECAwEAAaNTMFEwHQYDVR0OBBYEFKjx
11+
AkZaUg6nAzO0hfk66NbPIxTcMB8GA1UdIwQYMBaAFKjxAkZaUg6nAzO0hfk66NbP
12+
IxTcMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBABwIKtlImJ/S
13+
SNP0HWzxgSz5sLGWJc1Nmw2rW0nQ8u42pzAjaslwH/FPEy/A6g7S5F8FN1fua+2m
14+
pDxQmYM+bTno4mNwcATw3MCEvPjOqOdp8Di1xEj7m2jlMY2uNuKImBXsU2sgKCKw
15+
TUHAaQXya1rx/SA7CjBUrTPRfVJJAwIzYgXuzx/GvOi+c3t/uMlGz5h6DpuTcgO/
16+
YJdRbrrzKLeJjpFDBOpVhWrlUib3kCgc2pRjeuVb7Yb+ZoN9aI++wKTCS/g/LZTW
17+
4DoZQ1fWh7PBDJiDbGVeJC6fxJxVR1bTyzTwvCA7NO9541mUHwsXHBS6w0FuQiKe
18+
5pmX5LNJxlc=
19+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)