diff options
author | Xin LI <delphij@FreeBSD.org> | 2011-05-11 21:52:26 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2011-05-11 21:52:26 +0000 |
commit | 59c7ad52aaa5b26e503871334672af0f58f9c2e8 (patch) | |
tree | 2ada676374f8a269621594f3e6db578572546407 /contrib/netcat/socks.c | |
parent | b2901e999b720aa72b85f9e30763007c76bebecd (diff) | |
parent | c98f06c929bb8c8a81b4254bebab2fb08a98b6ce (diff) | |
download | src-59c7ad52aaa5b26e503871334672af0f58f9c2e8.tar.gz src-59c7ad52aaa5b26e503871334672af0f58f9c2e8.zip |
Notes
Diffstat (limited to 'contrib/netcat/socks.c')
-rw-r--r-- | contrib/netcat/socks.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/contrib/netcat/socks.c b/contrib/netcat/socks.c index b38dff741e19..cb31a3c610ea 100644 --- a/contrib/netcat/socks.c +++ b/contrib/netcat/socks.c @@ -1,4 +1,4 @@ -/* $OpenBSD: socks.c,v 1.18 2010/04/20 07:26:35 nicm Exp $ */ +/* $OpenBSD: socks.c,v 1.19 2011/02/12 15:54:18 okan Exp $ */ /* * Copyright (c) 1999 Niklas Hallqvist. All rights reserved. @@ -222,11 +222,25 @@ socks_connect(const char *host, const char *port, if (cnt != wlen) err(1, "write failed (%zu/%zu)", cnt, wlen); - cnt = atomicio(read, proxyfd, buf, 10); - if (cnt != 10) - err(1, "read failed (%zu/10)", cnt); + cnt = atomicio(read, proxyfd, buf, 4); + if (cnt != 4) + err(1, "read failed (%zu/4)", cnt); if (buf[1] != 0) errx(1, "connection failed, SOCKS error %d", buf[1]); + switch (buf[3]) { + case SOCKS_IPV4: + cnt = atomicio(read, proxyfd, buf + 4, 6); + if (cnt != 6) + err(1, "read failed (%zd/6)", cnt); + break; + case SOCKS_IPV6: + cnt = atomicio(read, proxyfd, buf + 4, 18); + if (cnt != 18) + err(1, "read failed (%zd/18)", cnt); + break; + default: + errx(1, "connection failed, unsupported address type"); + } } else if (socksv == 4) { /* This will exit on lookup failure */ decode_addrport(host, port, (struct sockaddr *)&addr, |