From: Mark Andrews Date: Fri, 2 Aug 2002 12:16:57 +0000 (+0000) Subject: 1351. [bug] lwres_getipnodebyname() returned the wrong name X-Git-Tag: v9.2.3rc1~104^2~418 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=bb6936058eb88eadff030462a347c10895c61a9a;p=thirdparty%2Fbind9.git 1351. [bug] lwres_getipnodebyname() returned the wrong name when given a IPv4 literal, af=AF_INET6 and AI_MAPPED was set. --- diff --git a/CHANGES b/CHANGES index 92779f3eff2..3ce924e4a5e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +1351. [bug] lwres_getipnodebyname() returned the wrong name + when given a IPv4 literal, af=AF_INET6 and AI_MAPPED + was set. + 1350. [bug] dns_name_fromtext() failed to handle too many labels gracefully. diff --git a/lib/lwres/getipnode.c b/lib/lwres/getipnode.c index d82aaa12002..9caba293afa 100644 --- a/lib/lwres/getipnode.c +++ b/lib/lwres/getipnode.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: getipnode.c,v 1.33 2002/05/27 06:54:46 marka Exp $ */ +/* $Id: getipnode.c,v 1.34 2002/08/02 12:16:57 marka Exp $ */ #include @@ -138,13 +138,21 @@ lwres_getipnodebyname(const char *name, int af, int flags, int *error_num) { if (v4 == 1 || v6 == 1) { char *addr_list[2]; char *aliases[1]; + char mappedname[sizeof("::ffff:123.123.123.123")]; union { const char *const_name; char *deconst_name; } u; u.const_name = name; - he.h_name = u.deconst_name; + if (v4 == 1 && af == AF_INET6) { + strcpy(mappedname, "::ffff:"); + inet_ntop(AF_INET, (char *)&in4, + mappedname + sizeof("::ffff:") - 1, + sizeof(mappedname) - sizeof("::ffff:") + 1); + he.h_name = mappedname; + } else + he.h_name = u.deconst_name; he.h_addr_list = addr_list; he.h_addr_list[0] = (v4 == 1) ? (char *)&in4 : (char *)&in6; he.h_addr_list[1] = NULL;