Skip to content

Commit

Permalink
socks.c: align SOCKS4 connection sequence with SOCKS5
Browse files Browse the repository at this point in the history
Calling sscanf is not required since the raw IPv4 address is
available and the protocol can be detected using ai_family.
  • Loading branch information
mback2k committed Aug 20, 2016
1 parent c6b869e commit 213c27e
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions lib/socks.c
Expand Up @@ -170,24 +170,26 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
hp=dns->addr;
if(hp) {
char buf[64];
unsigned short ip[4];
Curl_printable_address(hp, buf, sizeof(buf));

if(4 == sscanf(buf, "%hu.%hu.%hu.%hu",
&ip[0], &ip[1], &ip[2], &ip[3])) {
/* Set DSTIP */
socksreq[4] = (unsigned char)ip[0];
socksreq[5] = (unsigned char)ip[1];
socksreq[6] = (unsigned char)ip[2];
socksreq[7] = (unsigned char)ip[3];
if(hp->ai_family == AF_INET) {
struct sockaddr_in *saddr_in;

saddr_in = (struct sockaddr_in*)(void*)hp->ai_addr;
socksreq[4] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[0];
socksreq[5] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[1];
socksreq[6] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[2];
socksreq[7] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[3];

infof(data, "SOCKS4 connect to IPv4 %s (locally resolved)\n", buf);
}
else
else {
hp = NULL; /* fail! */

infof(data, "SOCKS4 connect to %s (locally resolved)\n", buf);
failf(data, "SOCKS4 connection to %s not supported\n", buf);
}

Curl_resolv_unlock(data, dns); /* not used anymore from now on */

}
if(!hp) {
failf(data, "Failed to resolve \"%s\" for SOCKS4 connect.",
Expand Down

0 comments on commit 213c27e

Please sign in to comment.