From 10d0bfdab42e8e97cee3f2e84503a29a24c20139 Mon Sep 17 00:00:00 2001 From: CurlyMoo <CurlyMoo@users.noreply.github.com> Date: Tue, 27 Jan 2015 22:45:34 +0100 Subject: [PATCH] Replace obsolete gethostbyname by getaddrinfo This also protect against the latest glibc bug --- mongoose.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/mongoose.c b/mongoose.c index 0cacdfed4..a560ca0aa 100644 --- a/mongoose.c +++ b/mongoose.c @@ -593,14 +593,28 @@ int ns_socketpair(sock_t sp[2]) { // TODO(lsm): use non-blocking resolver static int ns_resolve2(const char *host, struct in_addr *ina) { - struct hostent *he; - if ((he = gethostbyname(host)) == NULL) { - DBG(("gethostbyname(%s) failed: %s", host, strerror(errno))); - } else { - memcpy(ina, he->h_addr_list[0], sizeof(*ina)); - return 1; - } - return 0; + int rv = 0; + struct addrinfo hints, *servinfo, *p; + struct sockaddr_in *h = NULL; + char *ip = malloc(17); + memset(ip, '\0', 17); + + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + + if((rv = getaddrinfo(host, NULL , NULL, &servinfo)) != 0) { + + return 0; + } + + for(p = servinfo; p != NULL; p = p->ai_next) { + memcpy(&h, &p->ai_addr, sizeof(struct sockaddr_in *)); + memcpy(ina, &h->sin_addr, sizeof(ina)); + } + + freeaddrinfo(servinfo); + return 1; } // Resolve FDQN "host", store IP address in the "ip". -- GitLab