From: Mukund Sivaraman Date: Wed, 19 Sep 2012 04:30:18 +0000 (+0530) Subject: [2218] Insert using the NSEC3 record's entire name into the NSEC3Data tree X-Git-Tag: trac2351_base~37^2~1^2~13^2~22^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=88871270308be3aaaeb8918c29c2b2c3ca4286e5;p=thirdparty%2Fkea.git [2218] Insert using the NSEC3 record's entire name into the NSEC3Data tree --- diff --git a/src/lib/datasrc/memory/memory_client.cc b/src/lib/datasrc/memory/memory_client.cc index d5c6a7a1ad..6096e78a19 100644 --- a/src/lib/datasrc/memory/memory_client.cc +++ b/src/lib/datasrc/memory/memory_client.cc @@ -325,12 +325,15 @@ public: } } + // Make just the NSEC3 hash label uppercase, and insert the + // entire name into the NSEC3Data ZoneTree. string fst_label = rrset->getName().split(0, 1).toText(true); transform(fst_label.begin(), fst_label.end(), fst_label.begin(), ::toupper); + const string rest = rrset->getName().split(1).toText(true); ZoneNode* node; - nsec3_data->insertName(mem_sgmt_, Name(fst_label), &node); + nsec3_data->insertName(mem_sgmt_, Name(fst_label + "." + rest), &node); RdataEncoder encoder; diff --git a/src/lib/datasrc/memory/tests/zone_finder_unittest.cc b/src/lib/datasrc/memory/tests/zone_finder_unittest.cc index bfdb6edab2..552a85a725 100644 --- a/src/lib/datasrc/memory/tests/zone_finder_unittest.cc +++ b/src/lib/datasrc/memory/tests/zone_finder_unittest.cc @@ -280,13 +280,15 @@ public: } } + // Make just the NSEC3 hash label uppercase, and insert the + // entire name into the NSEC3Data ZoneTree. string fst_label = rrset->getName().split(0, 1).toText(true); transform(fst_label.begin(), fst_label.end(), fst_label.begin(), ::toupper); + const string rest = rrset->getName().split(1).toText(true); ZoneNode *node; - nsec3_data->insertName(mem_sgmt_, Name(fst_label), &node); - + nsec3_data->insertName(mem_sgmt_, Name(fst_label + "." + rest), &node); // We assume that rrsig has already been checked to match rrset // by the caller. diff --git a/src/lib/datasrc/memory/zone_finder.cc b/src/lib/datasrc/memory/zone_finder.cc index c608beee55..52b4ff6cbb 100644 --- a/src/lib/datasrc/memory/zone_finder.cc +++ b/src/lib/datasrc/memory/zone_finder.cc @@ -663,12 +663,12 @@ InMemoryZoneFinder::findNSEC3(const isc::dns::Name& name, bool recursive) { // the deepest label one by one, until we find a name that has a matching // NSEC3 hash. for (unsigned int labels = qlabels; labels >= olabels; --labels) { - const std::string hlabel = - (nsec3_calculate_)((labels == qlabels ? - name : name.split(qlabels - labels, labels)), - nsec3_data->iterations, - nsec3_data->getSaltData(), - nsec3_data->getSaltLen()); + const std::string hlabel = (nsec3_calculate_) + ((labels == qlabels ? + name : name.split(qlabels - labels, labels)), + nsec3_data->iterations, + nsec3_data->getSaltData(), + nsec3_data->getSaltLen()); LOG_DEBUG(logger, DBG_TRACE_BASIC, DATASRC_MEM_FINDNSEC3_TRYHASH). arg(name).arg(labels).arg(hlabel); @@ -678,7 +678,8 @@ InMemoryZoneFinder::findNSEC3(const isc::dns::Name& name, bool recursive) { ZoneNode* node(NULL); ZoneChain chain; - ZoneTree::Result result = tree.find(Name(hlabel), &node, chain); + ZoneTree::Result result = + tree.find(Name(hlabel + "." + getOrigin().toText()), &node, chain); if (result == ZoneTree::EXACTMATCH) { // We found an exact match.