BUG/MEDIUM: str2ip: make getaddrinfo() consider local address selection policy

When first parameter to getaddrinfo() is not NULL (it is always not NULL
in str2ip()), on Linux AI_PASSIVE value for ai_flags is ignored. On
FreeBSD, when AI_PASSIVE is specified and hostname parameter is not NULL,
getaddrinfo() ignores local address selection policy, always returning
AAAA record. Pass zero ai_flags to behave correctly on FreeBSD, this
change should be no-op for Linux.

This fix should be backported to 1.5 as well, after some observation
period.
This commit is contained in:
Dmitry Sivachenko 2015-10-02 01:01:58 +02:00 committed by Willy Tarreau
parent 43885c728e
commit eab7f3996f

View File

@ -665,7 +665,7 @@ struct sockaddr_storage *str2ip2(const char *str, struct sockaddr_storage *sa, i
memset(&hints, 0, sizeof(hints));
hints.ai_family = sa->ss_family ? sa->ss_family : AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE;
hints.ai_flags = 0;
hints.ai_protocol = 0;
if (getaddrinfo(str, NULL, &hints, &result) == 0) {