Add RESOLVE (0xF0) command to socks4_client_request

This commit is contained in:
rl1987 2018-05-15 11:49:07 +02:00 committed by Nick Mathewson
parent 9155e08450
commit b160929c22
3 changed files with 9 additions and 7 deletions

View File

@ -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 */

View File

@ -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

View File

@ -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;