From 249d948e3944eacf380e9ab8704535161d8a6603 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Mon, 17 Nov 2008 15:36:36 +0000 Subject: [PATCH] nslookup: glibc + IPv6 address of DNS server don't mix (yet) --- networking/nslookup.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/networking/nslookup.c b/networking/nslookup.c index 8a820ce37..26287114c 100644 --- a/networking/nslookup.c +++ b/networking/nslookup.c @@ -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 } -- 2.11.0