From: Tatuya JINMEI 神明達哉 Date: Sat, 13 Dec 2008 04:43:52 +0000 (+0000) Subject: 2514. [bug] dig/host failed with -4 or -6 when resolv.conf contains X-Git-Tag: v9.4.3-P1~1^5~86 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=a195cf4e3c33bc55eb0831c4a2bb32f82bdd6403;p=thirdparty%2Fbind9.git 2514. [bug] dig/host failed with -4 or -6 when resolv.conf contains a nameserver of the unsupported address family. [RT #18848] --- diff --git a/CHANGES b/CHANGES index fd47819784b..624b0c363ee 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +2514. [bug] dig/host failed with -4 or -6 when resolv.conf contains + a nameserver of the unsupported address family. + [RT #18848] + 2511. [cleanup] dns_rdata_tofmttext() add const to linebreak. [RT #18885] diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 8d24a18c173..5790d442061 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dighost.c,v 1.259.18.50 2008/12/10 23:25:40 marka Exp $ */ +/* $Id: dighost.c,v 1.259.18.51 2008/12/13 04:43:52 jinmei Exp $ */ /*! \file * \note @@ -583,6 +583,11 @@ copy_server_list(lwres_conf_t *confdata, dig_serverlist_t *dest) { for (i = 0; i < confdata->nsnext; i++) { af = addr2af(confdata->nameservers[i].family); + if (af == AF_INET && !have_ipv4) + continue; + if (af == AF_INET6 && !have_ipv6) + continue; + lwres_net_ntop(af, confdata->nameservers[i].address, tmp, sizeof(tmp)); newsrv = make_server(tmp, tmp); @@ -1033,8 +1038,10 @@ setup_system(void) { debug("ndots is %d.", ndots); } + copy_server_list(lwconf, &server_list); + /* If we don't find a nameserver fall back to localhost */ - if (lwconf->nsnext == 0) { + if (ISC_LIST_EMPTY(server_list)) { if (have_ipv4) { lwresult = add_nameserver(lwconf, "127.0.0.1", AF_INET); if (lwresult != ISC_R_SUCCESS) @@ -1045,10 +1052,9 @@ setup_system(void) { if (lwresult != ISC_R_SUCCESS) fatal("add_nameserver failed"); } - } - if (ISC_LIST_EMPTY(server_list)) copy_server_list(lwconf, &server_list); + } #ifdef WITH_IDN initialize_idn();