]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2343. [bug] (Seemingly) duplicate IPv6 entries could be
authorTatuya JINMEI 神明達哉 <jinmei@isc.org>
Thu, 20 Mar 2008 22:44:12 +0000 (22:44 +0000)
committerTatuya JINMEI 神明達哉 <jinmei@isc.org>
Thu, 20 Mar 2008 22:44:12 +0000 (22:44 +0000)
created in ADB. [RT #17837]

CHANGES
lib/dns/adb.c

diff --git a/CHANGES b/CHANGES
index b0096bb596de992a136493960388818c84acab60..f4c858b00430fedf60ec63938d844ec2b2f5db64 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2343.  [bug]           (Seemingly) duplicate IPv6 entries could be
+                       created in ADB. [RT #17837]
+
 2341.  [bug]           libbind: add missing -I../include for off source
                        tree builds. [RT #17606]
 
index 04f72234602e72f553e3910a06c5068faf2948d4..8b6e3e7f1269068bb841f68747b99703997aa433 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: adb.c,v 1.215.18.19 2008/02/07 23:45:56 tbox Exp $ */
+/* $Id: adb.c,v 1.215.18.20 2008/03/20 22:44:12 jinmei Exp $ */
 
 /*! \file
  *
@@ -495,6 +495,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;
@@ -519,10 +520,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);
@@ -551,7 +554,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)
@@ -564,12 +567,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);
        }