[git commit] inet: adjust handling of cacnonname in getaddrinfo

Bernhard Reutner-Fischer rep.dot.nop at gmail.com
Tue Apr 17 09:06:27 UTC 2012


commit: http://git.uclibc.org/uClibc/commit/?id=97214b87d6317d75e9a7f6dd69148724c2675e4b
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/master

Posix says that canonname should use the text representation of an IP address
when a numerical nodename given
See: http://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html

Signed-off-by: Ed Wildgoose <lists at wildgooses.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
---
 libc/inet/getaddrinfo.c |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/libc/inet/getaddrinfo.c b/libc/inet/getaddrinfo.c
index e7511f6..fe0d942 100644
--- a/libc/inet/getaddrinfo.c
+++ b/libc/inet/getaddrinfo.c
@@ -628,13 +628,20 @@ gaih_inet(const char *name, const struct gaih_service *service,
 		char buffer[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
 
 		while (at2 != NULL) {
-			if (req->ai_flags & AI_CANONNAME) {
+			c = inet_ntop(at2->family, at2->addr, buffer, sizeof(buffer));
+			if (c) {
+				namelen = strlen(c) + 1;
+			} else if (req->ai_flags & AI_CANONNAME) {
 				struct hostent *h = NULL;
 				int herrno;
 				struct hostent th;
 				size_t tmpbuflen = 512;
 				char *tmpbuf;
 
+				/* Hint says numeric, but address is not */
+				if (req->ai_flags & AI_NUMERICHOST)
+					return -EAI_NONAME;
+
 				do {
 					tmpbuflen *= 2;
 					tmpbuf = alloca(tmpbuflen);
@@ -656,9 +663,7 @@ gaih_inet(const char *name, const struct gaih_service *service,
 					return -EAI_SYSTEM;
 				}
 
-				if (h == NULL)
-					c = inet_ntop(at2->family, at2->addr, buffer, sizeof(buffer));
-				else
+				if (h != NULL)
 					c = h->h_name;
 
 				if (c == NULL)


More information about the uClibc-cvs mailing list