commit b160929c2274a6a0b6b53a25f3a384369da60865 Author: rl1987 rl1987@sdf.lonestar.org Date: Tue May 15 11:49:07 2018 +0200
Add RESOLVE (0xF0) command to socks4_client_request --- src/trunnel/socks5.c | 12 ++++++------ src/trunnel/socks5.h | 1 + src/trunnel/socks5.trunnel | 3 ++- 3 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/trunnel/socks5.c b/src/trunnel/socks5.c index 7bc6e5fe7..1d6f56dfa 100644 --- a/src/trunnel/socks5.c +++ b/src/trunnel/socks5.c @@ -345,7 +345,7 @@ socks4_client_request_get_command(const socks4_client_request_t *inp) int socks4_client_request_set_command(socks4_client_request_t *inp, uint8_t val) { - if (! ((val == CMD_BIND || val == CMD_CONNECT || val == CMD_RESOLVE_PTR))) { + if (! ((val == CMD_BIND || val == CMD_CONNECT || val == CMD_RESOLVE || val == CMD_RESOLVE_PTR))) { TRUNNEL_SET_ERROR_CODE(inp); return -1; } @@ -413,7 +413,7 @@ socks4_client_request_check(const socks4_client_request_t *obj) return "A set function failed on this object"; if (! (obj->version == 4)) return "Integer out of bounds"; - if (! (obj->command == CMD_BIND || obj->command == CMD_CONNECT || obj->command == CMD_RESOLVE_PTR)) + if (! (obj->command == CMD_BIND || obj->command == CMD_CONNECT || obj->command == CMD_RESOLVE || obj->command == CMD_RESOLVE_PTR)) return "Integer out of bounds"; if (NULL == obj->username) return "Missing username"; @@ -696,7 +696,7 @@ socks4_client_request_encoded_len(const socks4_client_request_t *obj) /* Length of u8 version IN [4] */ result += 1;
- /* Length of u8 command IN [CMD_BIND, CMD_CONNECT, CMD_RESOLVE_PTR] */ + /* Length of u8 command IN [CMD_BIND, CMD_CONNECT, CMD_RESOLVE, CMD_RESOLVE_PTR] */ result += 1;
/* Length of u16 port */ @@ -1006,7 +1006,7 @@ socks4_client_request_encode(uint8_t *output, const size_t avail, const socks4_c trunnel_set_uint8(ptr, (obj->version)); written += 1; ptr += 1;
- /* Encode u8 command IN [CMD_BIND, CMD_CONNECT, CMD_RESOLVE_PTR] */ + /* Encode u8 command IN [CMD_BIND, CMD_CONNECT, CMD_RESOLVE, CMD_RESOLVE_PTR] */ trunnel_assert(written <= avail); if (avail - written < 1) goto truncated; @@ -1354,11 +1354,11 @@ socks4_client_request_parse_into(socks4_client_request_t *obj, const uint8_t *in if (! (obj->version == 4)) goto fail;
- /* Parse u8 command IN [CMD_BIND, CMD_CONNECT, CMD_RESOLVE_PTR] */ + /* Parse u8 command IN [CMD_BIND, CMD_CONNECT, CMD_RESOLVE, CMD_RESOLVE_PTR] */ CHECK_REMAINING(1, truncated); obj->command = (trunnel_get_uint8(ptr)); remaining -= 1; ptr += 1; - if (! (obj->command == CMD_BIND || obj->command == CMD_CONNECT || obj->command == CMD_RESOLVE_PTR)) + if (! (obj->command == CMD_BIND || obj->command == CMD_CONNECT || obj->command == CMD_RESOLVE || obj->command == CMD_RESOLVE_PTR)) goto fail;
/* Parse u16 port */ diff --git a/src/trunnel/socks5.h b/src/trunnel/socks5.h index fb3c03160..8bc5af109 100644 --- a/src/trunnel/socks5.h +++ b/src/trunnel/socks5.h @@ -11,6 +11,7 @@ #define CMD_CONNECT 1 #define CMD_BIND 2 #define CMD_UDP_ASSOCIATE 3 +#define CMD_RESOLVE 240 #define CMD_RESOLVE_PTR 241 #define ATYPE_IPV4 1 #define ATYPE_IPV6 4 diff --git a/src/trunnel/socks5.trunnel b/src/trunnel/socks5.trunnel index ab53a4315..4818d1408 100644 --- a/src/trunnel/socks5.trunnel +++ b/src/trunnel/socks5.trunnel @@ -16,6 +16,7 @@ const CMD_CONNECT = 1; const CMD_BIND = 2; const CMD_UDP_ASSOCIATE = 3; // This is a tor extension +const CMD_RESOLVE = 0xF0; const CMD_RESOLVE_PTR = 0xF1;
const ATYPE_IPV4 = 1; @@ -72,7 +73,7 @@ struct socks5_server_userpath_auth {
struct socks4_client_request { u8 version IN [4]; - u8 command IN [CMD_CONNECT,CMD_BIND,CMD_RESOLVE_PTR]; + u8 command IN [CMD_CONNECT,CMD_BIND,CMD_RESOLVE,CMD_RESOLVE_PTR]; u16 port; u32 addr; nulterm username;
tor-commits@lists.torproject.org