mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-08 08:07:10 +02:00
[MEDIUM] use getaddrinfo to resolve names if gethostbyname fail
Function gethostbyname is deprecated since IEEE Std 1003.1-2008 and was replaced by getaddrinfo (available since IEEE Std 1003.1-2004). Contrary to gethostbyname, getaddrinfo is specified to support both IPv4 and IPv4 addresses. Since some libc doesn't handle getaddrinfo properly, constant USE_GETADDRINFO must be defined at compile time to enable use of getaddrinfo.
This commit is contained in:
parent
2dff0c28e8
commit
d5f4328efd
@ -265,8 +265,34 @@ struct sockaddr_storage *str2ip(const char *str)
|
|||||||
((struct sockaddr_in6 *)&sa)->sin6_addr = *(struct in6_addr *) *(he->h_addr_list);
|
((struct sockaddr_in6 *)&sa)->sin6_addr = *(struct in6_addr *) *(he->h_addr_list);
|
||||||
return &sa;
|
return &sa;
|
||||||
}
|
}
|
||||||
/* unsupported address family */
|
|
||||||
}
|
}
|
||||||
|
#ifdef USE_GETADDRINFO
|
||||||
|
else {
|
||||||
|
struct addrinfo hints, *result;
|
||||||
|
|
||||||
|
memset(&result, 0, sizeof(result));
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = AF_UNSPEC;
|
||||||
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
|
hints.ai_flags = AI_PASSIVE;
|
||||||
|
hints.ai_protocol = 0;
|
||||||
|
|
||||||
|
if (getaddrinfo(str, NULL, &hints, &result) == 0) {
|
||||||
|
sa.ss_family = result->ai_family;
|
||||||
|
switch (result->ai_family) {
|
||||||
|
case AF_INET:
|
||||||
|
memcpy((struct sockaddr_in *)&sa, result->ai_addr, result->ai_addrlen);
|
||||||
|
return &sa;
|
||||||
|
case AF_INET6:
|
||||||
|
memcpy((struct sockaddr_in6 *)&sa, result->ai_addr, result->ai_addrlen);
|
||||||
|
return &sa;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
freeaddrinfo(result);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/* unsupported address family */
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user