]> 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:45:17 +0000 (22:45 +0000)
committerTatuya JINMEI 神明達哉 <jinmei@isc.org>
Thu, 20 Mar 2008 22:45:17 +0000 (22:45 +0000)
created in ADB. [RT #17837]

CHANGES
lib/dns/adb.c

diff --git a/CHANGES b/CHANGES
index d997c46c22ff75a2089dc070e122a65eec23302f..ef0755e4e34b5406609d0c8a90f1dabed5065410 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2343.  [bug]           (Seemingly) duplicate IPv6 entries could be
+                       created in ADB. [RT #17837]
+
        --- 9.3.5rc2 released ---
 
 2338.  [bug]           check_ds() could be called with a non DS rdataset.
index 0f01eed46abf5d69dd4d9f66cfb8e5e139f116e4..65d49cca147cbafdcba69f07edb269c73ca5c473 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: adb.c,v 1.181.2.11.2.30 2007/09/11 02:22:36 marka Exp $ */
+/* $Id: adb.c,v 1.181.2.11.2.31 2008/03/20 22:45:17 jinmei Exp $ */
 
 /*
  * Implementation notes
@@ -488,6 +488,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;
@@ -512,10 +513,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);
@@ -544,7 +547,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)
@@ -557,12 +560,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);
        }