]> git.ipfire.org Git - thirdparty/pdns.git/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>
Wed, 17 Jul 2019 16:43:32 +0000 (18:43 +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 80507fb58798143caa63e88477c358d25d625acb..4b60ad0d069d78c22f313f335ea84ee14f7bcba6 100644 (file)
@@ -1045,17 +1045,26 @@ bool Bind2Backend::getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qn
 void Bind2Backend::lookup(const QType &qtype, const DNSName &qname, DNSPacket *pkt_p, int zoneId )
 {
   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)
@@ -1066,12 +1075,9 @@ void Bind2Backend::lookup(const QType &qtype, const DNSName &qname, DNSPacket *p
 
   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))