X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=lib%2Ffake-getaddrinfo.c;h=14420b586d0ff261743f2aa65a7f228368ff9faa;hp=0c9fae94dda83b5d18f67256cf9b1c372b29a87f;hb=e8f08ced76bf1b9a94dd0dc874ad22761ad8900b;hpb=03995ca52ee31ed505902a3c8c3d1119988c8497 diff --git a/lib/fake-getaddrinfo.c b/lib/fake-getaddrinfo.c index 0c9fae94..14420b58 100644 --- a/lib/fake-getaddrinfo.c +++ b/lib/fake-getaddrinfo.c @@ -14,6 +14,7 @@ #include "ipv4.h" #include "ipv6.h" #include "fake-getaddrinfo.h" +#include "xalloc.h" #ifndef HAVE_GAI_STRERROR char *gai_strerror(int ecode) @@ -23,6 +24,8 @@ char *gai_strerror(int ecode) return "No address associated with hostname"; case EAI_MEMORY: return "Memory allocation failure"; + case EAI_FAMILY: + return "Address family not supported"; default: return "Unknown error"; } @@ -67,6 +70,9 @@ int getaddrinfo(const char *hostname, const char *servname, const struct addrinf int i; uint16_t port = 0; + if(hints && hints->ai_family != AF_INET && hints->ai_family != AF_UNSPEC) + return EAI_FAMILY; + if (servname) port = htons(atoi(servname)); @@ -82,7 +88,7 @@ int getaddrinfo(const char *hostname, const char *servname, const struct addrinf hp = gethostbyname(hostname); - if(!hp || !hp->h_addr_list[0]) + if(!hp || !hp->h_addr_list || !hp->h_addr_list[0]) return EAI_NODATA; for (i = 0; hp->h_addr_list[i]; i++) {