From 3b81c6790284e686c20322cc34d4db6215af48ae Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Thu, 2 Jan 2020 11:52:14 +0100 Subject: [PATCH] rec: An Opt-Out NSEC3 RR only proves that there is no secure delegation (cherry picked from commit 18c8faae6c67f734583c5c881d0d083d3253b49e) --- pdns/syncres.cc | 24 ++++++++++++++++++++---- pdns/validate.cc | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/pdns/syncres.cc b/pdns/syncres.cc index 39e3a0959c..c56d1664a9 100644 --- a/pdns/syncres.cc +++ b/pdns/syncres.cc @@ -1214,7 +1214,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 */ @@ -2604,8 +2604,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; } -- 2.47.2