From: Tatuya JINMEI 神明達哉 Date: Thu, 20 Mar 2008 19:23:42 +0000 (+0000) Subject: 2343. [bug] (Seemingly) duplicate IPv6 entries could be X-Git-Tag: v9.3.6b1~176^2~77 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=a95a9de45ca739dab17ec1263186dbaaaba50d97;p=thirdparty%2Fbind9.git 2343. [bug] (Seemingly) duplicate IPv6 entries could be created in ADB. [RT #17837] (plan to merge to 9.[345]) --- diff --git a/CHANGES b/CHANGES index 36a4813b2d6..72a96b120d0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2343. [bug] (Seemingly) duplicate IPv6 entries could be + created in ADB. [RT #17837] + 2342. [func] Use getifaddrs() if available under Linux. [RT #17224] 2341. [bug] libbind: add missing -I../include for off source diff --git a/lib/dns/adb.c b/lib/dns/adb.c index 7b3a89ff90e..2be4d4bc8ae 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: adb.c,v 1.235 2008/02/07 23:46:54 tbox Exp $ */ +/* $Id: adb.c,v 1.236 2008/03/20 19:23:42 jinmei Exp $ */ /*! \file * @@ -530,6 +530,7 @@ import_rdataset(dns_adbname_t *adbname, dns_rdataset_t *rdataset, isc_boolean_t new_addresses_added; dns_rdatatype_t rdtype; unsigned int findoptions; + dns_adbnamehooklist_t *hookhead; INSIST(DNS_ADBNAME_VALID(adbname)); adb = adbname->adb; @@ -554,10 +555,12 @@ import_rdataset(dns_adbname_t *adbname, dns_rdataset_t *rdataset, INSIST(rdata.length == 4); memcpy(&ina.s_addr, rdata.data, 4); isc_sockaddr_fromin(&sockaddr, &ina, 0); + hookhead = &adbname->v4; } else { INSIST(rdata.length == 16); memcpy(in6a.s6_addr, rdata.data, 16); isc_sockaddr_fromin6(&sockaddr, &in6a, 0); + hookhead = &adbname->v6; } INSIST(nh == NULL); @@ -586,7 +589,7 @@ import_rdataset(dns_adbname_t *adbname, dns_rdataset_t *rdataset, link_entry(adb, addr_bucket, entry); } else { - for (anh = ISC_LIST_HEAD(adbname->v4); + for (anh = ISC_LIST_HEAD(*hookhead); anh != NULL; anh = ISC_LIST_NEXT(anh, plink)) if (anh->entry == foundentry) @@ -599,12 +602,8 @@ import_rdataset(dns_adbname_t *adbname, dns_rdataset_t *rdataset, } new_addresses_added = ISC_TRUE; - if (nh != NULL) { - if (rdtype == dns_rdatatype_a) - ISC_LIST_APPEND(adbname->v4, nh, plink); - else - ISC_LIST_APPEND(adbname->v6, nh, plink); - } + if (nh != NULL) + ISC_LIST_APPEND(*hookhead, nh, plink); nh = NULL; result = dns_rdataset_next(rdataset); }