mirror of
https://github.com/moparisthebest/curl
synced 2024-10-31 15:45:12 -04:00
socks.c: align SOCKS4 connection sequence with SOCKS5
Calling sscanf is not required since the raw IPv4 address is available and the protocol can be detected using ai_family.
This commit is contained in:
parent
c6b869ec79
commit
213c27e487
24
lib/socks.c
24
lib/socks.c
@ -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.",
|
||||
|
Loading…
Reference in New Issue
Block a user