From: Mukund Sivaraman Date: Wed, 3 Oct 2012 16:53:23 +0000 (+0530) Subject: [2268] Remove duplicate copies of NSEC3 check code X-Git-Tag: trac2402_base~70 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e01716291c402d11710387fa6a9b2cfcd8e3953f;p=thirdparty%2Fkea.git [2268] Remove duplicate copies of NSEC3 check code --- diff --git a/src/lib/datasrc/memory/zone_data_updater.cc b/src/lib/datasrc/memory/zone_data_updater.cc index 473a276c79..f7042630d4 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 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 T& nsec3_rdata = + dynamic_cast( 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(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( - 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& 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(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 0b496c0e54..f7df6f7927 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 + 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,