nslookup: glibc + IPv6 address of DNS server don't mix (yet)
authorDenis Vlasenko <vda.linux@googlemail.com>
Mon, 17 Nov 2008 15:36:36 +0000 (15:36 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Mon, 17 Nov 2008 15:36:36 +0000 (15:36 -0000)
networking/nslookup.c

index 8a820ce37cb4329cbd042d7f43c9db37a7a7ad72..26287114caee6b83c1c01de0633048979872a329 100644 (file)
@@ -133,14 +133,19 @@ static void set_default_dns(const char *server)
                _res.nsaddr_list[0] = lsa->u.sin;
        }
 #if ENABLE_FEATURE_IPV6
-// Hoping libc will handle an IPv4 address there too,
-// if it so happens that family is indeed AF_INET
-//     if (lsa->u.sa.sa_family == AF_INET6) {
+       /* Hoped libc can cope with IPv4 address there too.
+        * No such luck, glibc 2.4 segfaults even with IPv6,
+        * maybe I misunderstand how to make glibc use IPv6 addr?
+        * (uclibc 0.9.31+ should work) */
+       if (lsa->u.sa.sa_family == AF_INET6) {
+               // glibc neither SEGVs nor sends any dgrams with this
+               // (strace shows no socket ops):
+               //_res.nscount = 0;
                _res._u._ext.nscount = 1;
                /* store a pointer to part of malloc'ed lsa */
                _res._u._ext.nsaddrs[0] = &lsa->u.sin6;
                /* must not free(lsa)! */
-//     }
+       }
 #endif
 }