diff options
author | delano <delano@solutious.com> | 2009-08-12 19:14:02 -0400 |
---|---|---|
committer | delano <delano@solutious.com> | 2009-08-12 19:14:02 -0400 |
commit | d5a6437256ae524bd7048f9225635d9fb9c6b264 (patch) | |
tree | 698d0f3d9fb4bd44aa1e34e0577487bb11b4ae6d /lib/net/ssh/proxy | |
parent | 833147e0525f0b25bc6ecea99bf1e59c2c3c22ee (diff) | |
download | net-ssh-d5a6437256ae524bd7048f9225635d9fb9c6b264.tar.gz |
Re-added refactored fix for hanging in ServerVersion#negotiate! when using SOCKS5 proxy [Gerald Talton]. Closes GH-9
Diffstat (limited to 'lib/net/ssh/proxy')
-rw-r--r-- | lib/net/ssh/proxy/socks5.rb | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/lib/net/ssh/proxy/socks5.rb b/lib/net/ssh/proxy/socks5.rb index 2d6918a..7fc0600 100644 --- a/lib/net/ssh/proxy/socks5.rb +++ b/lib/net/ssh/proxy/socks5.rb @@ -94,11 +94,24 @@ module Net packet << [port].pack("n") socket.send packet, 0 - - version, reply, = socket.recv(4).unpack("C*") - len = socket.recv(1).getbyte(0) - socket.recv(len + 2) - + + version, reply, = socket.recv(2).unpack("C*") + socket.recv(1) + address_type = socket.recv(1).getbyte(0) + case address_type + when 1 + socket.recv(4) # get four bytes for IPv4 address + when 3 + len = socket.recv(1).getbyte(0) + hostname = socket.recv(len) + when 4 + ipv6addr hostname = socket.recv(16) + else + socket.close + raise ConnectionError, "Illegal response type" + end + portnum = socket.recv(2) + unless reply == SUCCESS socket.close raise ConnectError, "#{reply}" |