]> granicus.if.org Git - pdns/commitdiff
auth: bind-backend, improve the domain_id check in lookup()
authorKees Monshouwer <mind04@monshouwer.org>
Mon, 16 Jan 2017 09:19:47 +0000 (10:19 +0100)
committermind04 <mind04@monshouwer.org>
Fri, 20 Sep 2019 12:44:10 +0000 (14:44 +0200)
zone_id was not checked for a root zone and finding the right zone for a specific zone_id was super slow
With this commit, the uncached output of bind backen will increase by approximately 10%

modules/bindbackend/bindbackend2.cc

index 221508e01705638ed8c23e29aabce829bc4d592a..bfd52c1df681f396336a51bf7df1cfc1269f8043 100644 (file)
@@ -1056,17 +1056,26 @@ bool Bind2Backend::getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qn
 void Bind2Backend::lookup(const QType &qtype, const DNSName &qname, int zoneId, DNSPacket *pkt_p )
 {
   d_handle.reset();
-  DNSName domain(qname);
 
   static bool mustlog=::arg().mustDo("query-logging");
-  if(mustlog) 
-    g_log<<Logger::Warning<<"Lookup for '"<<qtype.getName()<<"' of '"<<domain<<"' within zoneID "<<zoneId<<endl;
-  bool found=false;
+
+  bool found;
+  DNSName domain;
   BB2DomainInfo bbd;
 
-  do {
-    found = safeGetBBDomainInfo(domain, &bbd);
-  } while ((!found || (zoneId != (int)bbd.d_id && zoneId != -1)) && qtype != QType::SOA && domain.chopOff());
+  if(mustlog)
+    g_log<<Logger::Warning<<"Lookup for '"<<qtype.getName()<<"' of '"<<qname<<"' within zoneID "<<zoneId<<endl;
+
+  if (zoneId >= 0) {
+    if ((found = safeGetBBDomainInfo(zoneId, &bbd))) {
+      domain = bbd.d_name;
+    }
+  } else {
+    domain = qname;
+    do {
+      found = safeGetBBDomainInfo(domain, &bbd);
+    } while (!found && qtype != QType::SOA && domain.chopOff());
+  }
 
   if(!found) {
     if(mustlog)
@@ -1077,12 +1086,9 @@ void Bind2Backend::lookup(const QType &qtype, const DNSName &qname, int zoneId,
 
   if(mustlog)
     g_log<<Logger::Warning<<"Found a zone '"<<domain<<"' (with id " << bbd.d_id<<") that might contain data "<<endl;
-    
+
   d_handle.id=bbd.d_id;
-  
-  DLOG(g_log<<"Bind2Backend constructing handle for search for "<<qtype.getName()<<" for "<<
-       qname<<endl);
-  
+
   if(domain.empty())
     d_handle.qname=qname;
   else if(qname.isPartOf(domain))