Index: contrib/bind/bin/dig/dig.c diff -u contrib/bind/bin/dig/dig.c.orig contrib/bind/bin/dig/dig.c --- contrib/bind/bin/dig/dig.c.orig Tue Mar 5 19:41:44 2002 +++ contrib/bind/bin/dig/dig.c Thu Mar 14 02:39:50 2002 @@ -208,7 +208,7 @@ static int eecode = 0; static FILE * qfp; static char *defsrv, *srvmsg; -static char defbuf[40] = "default -- "; +static char defbuf[NI_MAXHOST + 11] = "default -- "; static char srvbuf[60]; static char myhostname[MAXHOSTNAMELEN]; static struct sockaddr_in myaddress; @@ -302,7 +302,23 @@ myaddress.sin_family = AF_INET; myaddress.sin_addr.s_addr = INADDR_ANY; myaddress.sin_port = 0; /*INPORT_ANY*/; - defsrv = strcat(defbuf, inet_ntoa(res.nsaddr.sin_addr)); + if (res._u._ext.ext != NULL) { + struct sockaddr *sa; + socklen_t salen; + char hbuf[NI_MAXHOST]; + + /* It should be &res._u._ext.ext->nsaddrs[0]. */ + sa = (struct sockaddr *)res._u._ext.ext; + + if (sa->sa_family == AF_INET6) + salen = sizeof(struct sockaddr_in6); + else + salen = sizeof(struct sockaddr_in); + getnameinfo(sa, salen, hbuf, sizeof(hbuf), NULL, 0, + NI_NUMERICHOST | NI_WITHSCOPEID); + defsrv = strcat(defbuf, hbuf); + } else + defsrv = strcat(defbuf, inet_ntoa(res.nsaddr.sin_addr)); res_x = res; /* @@ -754,6 +770,7 @@ if (inet_aton(srv, &addr)) { res.nscount = 1; res.nsaddr.sin_addr = addr; + res.nsaddr.sin_family = AF_INET; srvmsg = strcat(srvbuf, srv); } else { res_t = res; @@ -780,6 +797,9 @@ *addr && (res.nscount < MAXNS); addr++) { res.nsaddr_list[ + res.nscount + ].sin_family = hp->h_addrtype; + res.nsaddr_list[ res.nscount++ ].sin_addr.s_addr = **addr; } @@ -799,6 +819,8 @@ int i; for (i = 0; i < res.nscount; i++) { + if (res.nsaddr_list[i].sin_family == 0) + continue; res.nsaddr_list[i].sin_family = AF_INET; res.nsaddr_list[i].sin_port = port; } @@ -811,6 +833,8 @@ for (i = 0; i < res.nscount; i++) { int x; + if (res.nsaddr_list[i].sin_family == 0) + continue; if (keyfile) x = printZone(xfr, domain, &res.nsaddr_list[i], Index: contrib/bind/bin/nslookup/main.c diff -u contrib/bind/bin/nslookup/main.c.orig contrib/bind/bin/nslookup/main.c --- contrib/bind/bin/nslookup/main.c.orig Tue Mar 5 19:41:49 2002 +++ contrib/bind/bin/nslookup/main.c Wed Mar 13 21:16:16 2002 @@ -275,6 +275,7 @@ if (inet_aton(*++argv, &addr)) { res.nscount = 1; res.nsaddr.sin_addr = addr; + res.nsaddr.sin_family = AF_INET; } else { hp = gethostbyname(*argv); if (hp == NULL) { @@ -286,6 +287,7 @@ for (i = 0; i < MAXNS && hp->h_addr_list[i] != NULL; i++) { memcpy(&res.nsaddr_list[i].sin_addr, hp->h_addr_list[i], hp->h_length); + res.nsaddr_list[i].sin_family = hp->h_addrtype; } res.nscount = i; } @@ -297,6 +299,8 @@ LocalServer(defaultPtr); } else { for (i = 0; i < res.nscount; i++) { + if (res.nsaddr_list[i].sin_family == 0) + continue; if (res.nsaddr_list[i].sin_addr.s_addr == INADDR_ANY) { LocalServer(defaultPtr); break;