From: Pieter Lexis Date: Tue, 5 Mar 2019 15:45:35 +0000 (+0100) Subject: DNAME: skip one unneeded cache lookup X-Git-Tag: rec-4.2.0-beta1~6^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71e9cc53742cf57571276f484d21e0606e077ceb;p=thirdparty%2Fpdns.git DNAME: skip one unneeded cache lookup --- diff --git a/pdns/syncres.cc b/pdns/syncres.cc index 28216fbb0e..81fa469160 100644 --- a/pdns/syncres.cc +++ b/pdns/syncres.cc @@ -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<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()); }