From 96465858fa1165860353dfdd4d5db348388d191e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tatuya=20JINMEI=20=E7=A5=9E=E6=98=8E=E9=81=94=E5=93=89?= Date: Sat, 13 Dec 2008 02:43:25 +0000 Subject: [PATCH] 2514. [bug] dig/host failed with -4 or -6 when resolv.conf contains a nameserver of the unsupported address family. [RT #18848] --- CHANGES | 6 +++++- bin/dig/dighost.c | 14 ++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 27700e4c6c..b97e24b0c5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,8 @@ -2513 [bug] Fix windows cli build. [RT #19062] +2514. [bug] dig/host failed with -4 or -6 when resolv.conf contains + a nameserver of the unsupported address family. + [RT #18848] + +2513. [bug] Fix windows cli build. [RT #19062] 2512. [func] Print a summary of the cached records which make up the negative response. [RT #18885] diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index d61d2c245e..d35f98e359 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dighost.c,v 1.312 2008/12/10 22:33:54 marka Exp $ */ +/* $Id: dighost.c,v 1.313 2008/12/13 02:43:25 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); @@ -1035,8 +1040,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) @@ -1047,10 +1054,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();