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