summaryrefslogtreecommitdiff
path: root/src/trunnel
diff options
context:
space:
mode:
authorrl1987 <rl1987@sdf.lonestar.org>2018-05-15 11:49:07 +0200
committerNick Mathewson <nickm@torproject.org>2018-07-12 11:40:49 -0400
commitb160929c2274a6a0b6b53a25f3a384369da60865 (patch)
tree6535420c512f72b9a27c657b027639ccd4e2a9bf /src/trunnel
parent9155e08450fe7a609f8223202e8aa7dfbca20a6d (diff)
downloadtor-b160929c2274a6a0b6b53a25f3a384369da60865.tar.gz
tor-b160929c2274a6a0b6b53a25f3a384369da60865.zip
Add RESOLVE (0xF0) command to socks4_client_request
Diffstat (limited to 'src/trunnel')
-rw-r--r--src/trunnel/socks5.c12
-rw-r--r--src/trunnel/socks5.h1
-rw-r--r--src/trunnel/socks5.trunnel3
3 files changed, 9 insertions, 7 deletions
diff --git a/src/trunnel/socks5.c b/src/trunnel/socks5.c
index 7bc6e5fe7c..1d6f56dfa9 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 fb3c03160a..8bc5af109f 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 ab53a4315f..4818d14087 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;