return Bogus;
}
+bool SyncRes::haveExactValidationStatus(const DNSName& domain)
+{
+ if (!validationEnabled()) {
+ return false;
+ }
+ const auto& it = d_cutStates.find(domain);
+ if (it != d_cutStates.cend()) {
+ return true;
+ }
+ return false;
+}
+
vState SyncRes::getValidationStatus(const DNSName& subdomain)
{
vState result = Indeterminate;
continue;
vState recordState = getValidationStatus(auth);
- LOG(d_prefix<<": got status "<<vStates[recordState]<<" for record "<<i->first.name<<endl);
+ LOG(d_prefix<<": got initial zone status "<<vStates[recordState]<<" for record "<<i->first.name<<endl);
if (validationEnabled() && recordState == Secure) {
if (lwr.d_aabit) {
else {
LOG(d_prefix<<"Validating non-additional record for "<<i->first.name<<endl);
recordState = validateRecordsWithSigs(depth, qname, qtype, i->first.name, i->second.records, i->second.signatures);
+ /* we might have missed a cut (zone cut within the same auth servers), causing the NS query for an Insecure zone to seem Bogus during zone cut determination */
+ if (qtype == QType::NS && i->second.signatures.empty() && recordState == Bogus && haveExactValidationStatus(i->first.name) && getValidationStatus(i->first.name) == Indeterminate) {
+ recordState = Indeterminate;
+ }
}
}
}
recordState = validateRecordsWithSigs(depth, qname, qtype, i->first.name, i->second.records, i->second.signatures);
}
}
+
updateValidationState(state, recordState);
}
else {
vState getDNSKeys(const DNSName& signer, skeyset_t& keys, unsigned int depth);
void getDenialValidationState(NegCache::NegCacheEntry& ne, vState& state, const dState expectedState, bool allowOptOut);
vState getTA(const DNSName& zone, dsmap_t& ds);
+ bool haveExactValidationStatus(const DNSName& domain);
vState getValidationStatus(const DNSName& subdomain);
void computeZoneCuts(const DNSName& begin, const DNSName& end, unsigned int depth);