From: Remi Gacogne Date: Wed, 24 Feb 2021 09:50:38 +0000 (+0100) Subject: rec: Clean up the wildcard denial validation code X-Git-Tag: dnsdist-1.6.0-alpha2~12^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5de1b16e0ada0e7bf74915c0282d2ab2f5b486ce;p=thirdparty%2Fpdns.git rec: Clean up the wildcard denial validation code --- diff --git a/pdns/validate.cc b/pdns/validate.cc index a1618617c6..4fd9817638 100644 --- a/pdns/validate.cc +++ b/pdns/validate.cc @@ -244,8 +244,9 @@ bool isNSEC3AncestorDelegation(const DNSName& signer, const DNSName& owner, cons signer.countLabels() < owner.countLabels(); } -static bool provesNoDataWildCard(const DNSName& qname, const uint16_t qtype, const cspmap_t& validrrsets) +static bool provesNoDataWildCard(const DNSName& qname, const uint16_t qtype, const DNSName& closestEncloser, const cspmap_t& validrrsets) { + const DNSName wildcard = g_wildcarddnsname + closestEncloser; LOG("Trying to prove that there is no data in wildcard for "<d_next); - if (closestEncloser.countLabels() >= qname.countLabels()) { - continue; - } - DNSName wildcard = g_wildcarddnsname + closestEncloser; LOG("Comparing owner: "<d_next)) { @@ -525,7 +515,12 @@ dState getDenial(const cspmap_t &validrrsets, const DNSName& qname, const uint16 needWildcardProof = false; } - if (!needWildcardProof || provesNoWildCard(qname, qtype, validrrsets)) { + if (!needWildcardProof) { + return dState::NXQTYPE; + } + + DNSName closestEncloser = getClosestEncloserFromNSEC(qname, owner, nsec->d_next); + if (provesNoWildCard(qname, qtype, closestEncloser, validrrsets)) { return dState::NXQTYPE; } @@ -557,15 +552,16 @@ dState getDenial(const cspmap_t &validrrsets, const DNSName& qname, const uint16 } LOG("but we do need a wildcard proof so "); + DNSName closestEncloser = getClosestEncloserFromNSEC(qname, owner, nsec->d_next); if (wantsNoDataProof) { LOG("looking for NODATA proof"<