mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
Fix: send back correct IPv6 SOCKS5 connect reply
For a client using a SocksPort connection and IPv6, the connect reply from tor daemon did not handle AF_INET6 thus sending back the wrong payload to the client. A changes file is provided and this fixes #10987 Signed-off-by: David Goulet <dgoulet@ev0ke.net>
This commit is contained in:
parent
e616f5b513
commit
1532cff2ce
5
changes/bug10987
Normal file
5
changes/bug10987
Normal file
@ -0,0 +1,5 @@
|
||||
o Minor bugfixes
|
||||
- Fix IPv6 support when using the SocksPort with SOCKS5. Fixes bug10987.
|
||||
Using IPv6 through a SOCKS5 using the SocksPort option will now work
|
||||
with this fix. This part of the code has never been updated to support
|
||||
IPv6 thus this does not fix a previously introduced regression.
|
@ -2273,13 +2273,24 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
|
||||
/* leave version, destport, destip zero */
|
||||
connection_write_to_buf(buf, SOCKS4_NETWORK_LEN, ENTRY_TO_CONN(conn));
|
||||
} else if (conn->socks_request->socks_version == 5) {
|
||||
buf[0] = 5; /* version 5 */
|
||||
buf[1] = (char)status;
|
||||
buf[2] = 0;
|
||||
buf[3] = 1; /* ipv4 addr */
|
||||
memset(buf+4,0,6); /* Set external addr/port to 0.
|
||||
The spec doesn't seem to say what to do here. -RD */
|
||||
connection_write_to_buf(buf,10,ENTRY_TO_CONN(conn));
|
||||
size_t buf_len;
|
||||
memset(buf,0,sizeof(buf));
|
||||
if (tor_addr_family(&conn->edge_.base_.addr) == AF_INET) {
|
||||
buf[0] = 5; /* version 5 */
|
||||
buf[1] = (char)status;
|
||||
buf[2] = 0;
|
||||
buf[3] = 1; /* ipv4 addr */
|
||||
/* 4 bytes for the header, 2 bytes for the port and 4 for the address. */
|
||||
buf_len = 10;
|
||||
} else { /* AF_INET6. */
|
||||
buf[0] = 5; /* version 5 */
|
||||
buf[1] = (char)status;
|
||||
buf[2] = 0;
|
||||
buf[3] = 4; /* ipv6 addr */
|
||||
/* 4 bytes for the header, 2 bytes for the port and 16 for the address. */
|
||||
buf_len = 22;
|
||||
}
|
||||
connection_write_to_buf(buf,buf_len,ENTRY_TO_CONN(conn));
|
||||
}
|
||||
/* If socks_version isn't 4 or 5, don't send anything.
|
||||
* This can happen in the case of AP bridges. */
|
||||
|
Loading…
Reference in New Issue
Block a user