]> granicus.if.org Git - pdns/commitdiff
improve bindbackend NSEC lookup
authorPeter van Dijk <peter.van.dijk@netherlabs.nl>
Mon, 5 Mar 2012 14:45:24 +0000 (14:45 +0000)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Mon, 5 Mar 2012 14:45:24 +0000 (14:45 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2473 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/backends/bind/bindbackend2.cc

index 3f7369f37c04e9c7e11a9f15dd7b5501e6d144ef..1e4bb452266e067bc1f45ce858e4527ef464d14d 100644 (file)
@@ -870,11 +870,21 @@ bool Bind2Backend::findBeforeAndAfterUnhashed(BB2DomainInfo& bbd, const std::str
   //cerr<<"Now upper bound"<<endl;
   iter = bbd.d_records->upper_bound(domain);
 
+
   if(iter == bbd.d_records->end()) {
     //cerr<<"\tFound the end, begin storage: '"<<bbd.d_records->begin()->qname<<"', '"<<bbd.d_name<<"'"<<endl;
-    after.clear(); // this does the right thing
+    after.clear(); // this does the right thing (i.e. point to apex, which is sure to have auth records)
   } else {
     //cerr<<"\tFound: '"<<(iter->qname)<<"' (nsec3hash='"<<(iter->nsec3hash)<<"')"<<endl;
+    while(!(iter->auth))
+    {
+      iter++;
+      if(iter == bbd.d_records->end())
+      {
+        after.clear();
+        break;
+      }
+    }
     after = (iter)->qname;
   }