BIND 10 trac2268, updated. e01716291c402d11710387fa6a9b2cfcd8e3953f [2268] Remove duplicate copies of NSEC3 check code

BIND 10 source code commits bind10-changes at lists.isc.org
Wed Oct 3 16:55:46 UTC 2012


The branch, trac2268 has been updated
       via  e01716291c402d11710387fa6a9b2cfcd8e3953f (commit)
      from  b3d273056fa988f289ae4bf3f0a677808613b97b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit e01716291c402d11710387fa6a9b2cfcd8e3953f
Author: Mukund Sivaraman <muks at isc.org>
Date:   Wed Oct 3 22:23:23 2012 +0530

    [2268] Remove duplicate copies of NSEC3 check code

-----------------------------------------------------------------------

Summary of changes:
 src/lib/datasrc/memory/zone_data_updater.cc |   56 ++++++++-------------------
 src/lib/datasrc/memory/zone_data_updater.h  |    2 +
 2 files changed, 19 insertions(+), 39 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/memory/zone_data_updater.cc b/src/lib/datasrc/memory/zone_data_updater.cc
index 473a276..f704263 100644
--- a/src/lib/datasrc/memory/zone_data_updater.cc
+++ b/src/lib/datasrc/memory/zone_data_updater.cc
@@ -229,12 +229,12 @@ ZoneDataUpdater::validate(const isc::dns::ConstRRsetPtr rrset) const {
     }
 }
 
+template <typename T>
 void
-ZoneDataUpdater::addNSEC3(const ConstRRsetPtr rrset,
-                          const ConstRRsetPtr rrsig) {
+ZoneDataUpdater::setupNSEC3(const ConstRRsetPtr rrset) {
     // We know rrset has exactly one RDATA
-    const generic::NSEC3& nsec3_rdata =
-        dynamic_cast<const generic::NSEC3&>(
+    const T& nsec3_rdata =
+        dynamic_cast<const T&>(
             rrset->getRdataIterator()->getCurrent());
 
     NSEC3Data* nsec3_data = zone_data_.getNSEC3Data();
@@ -251,17 +251,25 @@ ZoneDataUpdater::addNSEC3(const ConstRRsetPtr rrset,
             (nsec3_rdata.getIterations() != nsec3_data->iterations) ||
             (salt_data_2.size() != salt_len)) {
             isc_throw(AddError,
-                      "NSEC3 with inconsistent parameters: " <<
-                      rrset->toText());
+                      rrset->getType() << " with inconsistent parameters: "
+                      << rrset->toText());
         }
 
         if ((salt_len > 0) &&
             (std::memcmp(&salt_data_2[0], salt_data, salt_len) != 0)) {
             isc_throw(AddError,
-                      "NSEC3 with inconsistent parameters: " <<
-                      rrset->toText());
+                      rrset->getType() << " with inconsistent parameters: "
+                      << rrset->toText());
         }
     }
+}
+
+void
+ZoneDataUpdater::addNSEC3(const ConstRRsetPtr rrset,
+                          const ConstRRsetPtr rrsig) {
+    setupNSEC3<generic::NSEC3>(rrset);
+
+    NSEC3Data* nsec3_data = zone_data_.getNSEC3Data();
 
     ZoneNode* node;
     nsec3_data->insertName(mem_sgmt_, rrset->getName(), &node);
@@ -336,37 +344,7 @@ ZoneDataUpdater::addRdataSet(const ConstRRsetPtr rrset,
         // parameters.
         if (rrset->getType() == RRType::NSEC3PARAM() &&
             rrset->getName() == zone_name_) {
-            // We know rrset has exactly one RDATA
-            const generic::NSEC3PARAM& param =
-                dynamic_cast<const generic::NSEC3PARAM&>(
-                    rrset->getRdataIterator()->getCurrent());
-
-            NSEC3Data* nsec3_data = zone_data_.getNSEC3Data();
-            if (nsec3_data == NULL) {
-                nsec3_data = NSEC3Data::create(mem_sgmt_, param);
-                zone_data_.setNSEC3Data(nsec3_data);
-                zone_data_.setSigned(true);
-            } else {
-                size_t salt_len = nsec3_data->getSaltLen();
-                const uint8_t* salt_data = nsec3_data->getSaltData();
-                const std::vector<uint8_t>& salt_data_2 = param.getSalt();
-
-                if ((param.getHashalg() != nsec3_data->hashalg) ||
-                    (param.getIterations() != nsec3_data->iterations) ||
-                    (salt_data_2.size() != salt_len)) {
-                    isc_throw(AddError,
-                              "NSEC3PARAM with inconsistent parameters: "
-                              << rrset->toText());
-                }
-
-                if ((salt_len > 0) &&
-                    (std::memcmp(&salt_data_2[0],
-                                 salt_data, salt_len) != 0)) {
-                    isc_throw(AddError,
-                              "NSEC3PARAM with inconsistent parameters: "
-                              << rrset->toText());
-                }
-            }
+            setupNSEC3<generic::NSEC3PARAM>(rrset);
         } else if (rrset->getType() == RRType::NSEC()) {
             // If it is NSEC signed zone, we mark the zone as signed
             // (conceptually "signed" is a broader notion but our
diff --git a/src/lib/datasrc/memory/zone_data_updater.h b/src/lib/datasrc/memory/zone_data_updater.h
index 0b496c0..f7df6f7 100644
--- a/src/lib/datasrc/memory/zone_data_updater.h
+++ b/src/lib/datasrc/memory/zone_data_updater.h
@@ -109,6 +109,8 @@ private:
     // the strong exception guarantee.
     void validate(const isc::dns::ConstRRsetPtr rrset) const;
 
+    template <typename T>
+    void setupNSEC3(const isc::dns::ConstRRsetPtr rrset);
     void addNSEC3(const isc::dns::ConstRRsetPtr rrset,
                   const isc::dns::ConstRRsetPtr rrsig);
     void addRdataSet(const isc::dns::ConstRRsetPtr rrset,



More information about the bind10-changes mailing list