]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
DNAME: skip one unneeded cache lookup
authorPieter Lexis <pieter.lexis@powerdns.com>
Tue, 5 Mar 2019 15:45:35 +0000 (16:45 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Tue, 5 Mar 2019 15:45:35 +0000 (16:45 +0100)
pdns/syncres.cc

index 28216fbb0e49b954bb914f95f13db9ea1e3edbc4..81fa4691600818168641c45aa4f38061c851c92e 100644 (file)
@@ -952,13 +952,14 @@ bool SyncRes::doCNAMECacheCheck(const DNSName &qname, const QType &qtype, vector
     do {
       dnameName.prependRawLabel(labels.back());
       labels.pop_back();
+      if (dnameName == qname && qtype != QType::DNAME) { // The client does not want a DNAME, but we've reached the QNAME already. So there is no match
+        break;
+      }
       LOG(prefix<<qname<<": Looking for DNAME cache hit of '"<<dnameName<<"|DNAME"<<"'"<<endl);
       if (t_RC->get(d_now.tv_sec, dnameName, QType(QType::DNAME), !wasForwardRecurse && d_requireAuthData, &cset, d_cacheRemote, d_doDNSSEC ? &signatures : nullptr, d_doDNSSEC ? &authorityRecs : nullptr, &d_wasVariable, &state, &wasAuth) > 0) {
-        if (dnameName != qname && qtype != QType::DNAME) {
-          foundName = dnameName;
-          foundQT = QType(QType::DNAME);
-          break;
-        }
+        foundName = dnameName;
+        foundQT = QType(QType::DNAME);
+        break;
       }
     } while(!labels.empty());
   }