]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1351. [bug] lwres_getipnodebyname() returned the wrong name
authorMark Andrews <marka@isc.org>
Fri, 2 Aug 2002 12:16:57 +0000 (12:16 +0000)
committerMark Andrews <marka@isc.org>
Fri, 2 Aug 2002 12:16:57 +0000 (12:16 +0000)
                        when given a IPv4 literal, af=AF_INET6 and AI_MAPPED
                        was set.

CHANGES
lib/lwres/getipnode.c

diff --git a/CHANGES b/CHANGES
index 92779f3eff2768b9839a544fbdcdbe07d385d2e4..3ce924e4a5eada48d7f95ea2f7b26232c60c7d89 100644 (file)
--- 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.
 
index d82aaa12002a3b6e3122c3309fa8978f3cdda594..9caba293afac1c98e55b65cfafd02a33caf57397 100644 (file)
@@ -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 <config.h>
 
@@ -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;