From: Remi Gacogne Date: Thu, 2 Jan 2020 10:52:14 +0000 (+0100) Subject: rec: An Opt-Out NSEC3 RR only proves that there is no secure delegation X-Git-Tag: auth-4.3.0-beta1~40^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=18c8faae6c67f734583c5c881d0d083d3253b49e;p=thirdparty%2Fpdns.git rec: An Opt-Out NSEC3 RR only proves that there is no secure delegation --- diff --git a/pdns/syncres.cc b/pdns/syncres.cc index 4e031a002a..e4a3b962ee 100644 --- a/pdns/syncres.cc +++ b/pdns/syncres.cc @@ -1417,7 +1417,7 @@ void SyncRes::computeNegCacheValidationStatus(const NegCache::NegCacheEntry* ne, vState neValidationState = ne->d_validationState; dState expectedState = res == RCode::NXDomain ? NXDOMAIN : NXQTYPE; dState denialState = getDenialValidationState(*ne, state, expectedState, false); - updateDenialValidationState(neValidationState, ne->d_name, state, denialState, expectedState, qtype == QType::DS); + updateDenialValidationState(neValidationState, ne->d_name, state, denialState, expectedState, qtype == QType::DS || expectedState == NXDOMAIN); } if (state != Indeterminate) { /* validation succeeded, let's update the cache entry so we don't have to validate again */ @@ -2826,8 +2826,21 @@ void SyncRes::updateDenialValidationState(vState& neValidationState, const DNSNa else { if (denialState == OPTOUT && allowOptOut) { LOG(d_prefix<<"OPT-out denial found for "<d_flags & 1) { + if ((qtype == QType::DS || qtype == 0) && nsec3->d_flags & 1) { LOG(" but is opt-out!"); isOptOut = true; }