From 51b6b728f77188d3aea617b00da2e30d2c3fc40b Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Fri, 9 Jun 2017 16:56:17 +0200 Subject: [PATCH] rec: Make the zone cuts and states a member variable --- pdns/syncres.cc | 133 +++++++++++++++++++++--------------------------- pdns/syncres.hh | 32 ++++++------ 2 files changed, 73 insertions(+), 92 deletions(-) diff --git a/pdns/syncres.cc b/pdns/syncres.cc index fc986e9e5..84e988724 100644 --- a/pdns/syncres.cc +++ b/pdns/syncres.cc @@ -131,8 +131,7 @@ int SyncRes::beginResolve(const DNSName &qname, const QType &qtype, uint16_t qcl return -1; set beenthere; - SyncRes::zonesStates_t cuts; - int res=doResolve(qname, qtype, ret, 0, beenthere, state, cuts); + int res=doResolve(qname, qtype, ret, 0, beenthere, state); d_queryValidationState = state; return res; } @@ -489,7 +488,7 @@ int SyncRes::asyncresolveWrapper(const ComboAddress& ip, bool ednsMANDATORY, con * \param beenthere * \return DNS RCODE or -1 (Error) or -2 (RPZ hit) */ -int SyncRes::doResolve(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, set& beenthere, vState& state, SyncRes::zonesStates_t& cuts) +int SyncRes::doResolve(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, set& beenthere, vState& state) { string prefix; if(doLog()) { @@ -541,10 +540,10 @@ int SyncRes::doResolve(const DNSName &qname, const QType &qtype, vector SyncRes::getAddrs(const DNSName &qname, unsigned int depth, set& beenthere, zonesStates_t& cuts) +vector SyncRes::getAddrs(const DNSName &qname, unsigned int depth, set& beenthere) { typedef vector res_t; res_t res; @@ -620,7 +619,7 @@ vector SyncRes::getAddrs(const DNSName &qname, unsigned int depth, } vState newState = Indeterminate; - if(!doResolve(qname, type, res,depth+1, beenthere, newState, cuts) && !res.empty()) { // this consults cache, OR goes out + if(!doResolve(qname, type, res,depth+1, beenthere, newState) && !res.empty()) { // this consults cache, OR goes out for(res_t::const_iterator i=res.begin(); i!= res.end(); ++i) { if(i->d_type == QType::A || i->d_type == QType::AAAA) { if(auto rec = std::dynamic_pointer_cast(i->d_content)) @@ -797,7 +796,7 @@ DNSName SyncRes::getBestNSNamesFromCache(const DNSName &qname, const QType& qtyp return subdomain; } -bool SyncRes::doCNAMECacheCheck(const DNSName &qname, const QType &qtype, vector& ret, unsigned int depth, int &res, vState& state, SyncRes::zonesStates_t& cuts) +bool SyncRes::doCNAMECacheCheck(const DNSName &qname, const QType &qtype, vector& ret, unsigned int depth, int &res, vState& state) { string prefix; if(doLog()) { @@ -825,7 +824,7 @@ bool SyncRes::doCNAMECacheCheck(const DNSName &qname, const QType &qtype, vector /* This means we couldn't figure out the state when this entry was cached, most likely because we hadn't computed the zone cuts yet. */ LOG("Got Indeterminate state from the CNAME cache, validating.."<beenthere; vState cnameState = Indeterminate; - res=doResolve(std::dynamic_pointer_cast(j->d_content)->getTarget(), qtype, ret, depth+1, beenthere, cnameState, cuts); + res=doResolve(std::dynamic_pointer_cast(j->d_content)->getTarget(), qtype, ret, depth+1, beenthere, cnameState); LOG("Updating validation state for response to "<& records, const uint32 } -bool SyncRes::doCacheCheck(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, int &res, vState& state, SyncRes::zonesStates_t& cuts) +bool SyncRes::doCacheCheck(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, int &res, vState& state) { bool giveNegative=false; @@ -973,7 +972,7 @@ bool SyncRes::doCacheCheck(const DNSName &qname, const QType &qtype, vector SyncRes::retrieveAddressesForNS(const std::string& prefix, const DNSName& qname, vector::const_iterator& tns, const unsigned int depth, set& beenthere, const vector& rnameservers, NsSet& nameservers, bool& sendRDQuery, bool& pierceDontQuery, bool& flawedNSSet, zonesStates_t& cuts) +vector SyncRes::retrieveAddressesForNS(const std::string& prefix, const DNSName& qname, vector::const_iterator& tns, const unsigned int depth, set& beenthere, const vector& rnameservers, NsSet& nameservers, bool& sendRDQuery, bool& pierceDontQuery, bool& flawedNSSet) { vector result; if(!tns->empty()) { LOG(prefix< dsrecords; vState state = Indeterminate; - int rcode = doResolve(zone, QType(QType::DS), dsrecords, depth + 1, beenthere, state, cuts); + int rcode = doResolve(zone, QType(QType::DS), dsrecords, depth + 1, beenthere, state); d_skipCNAMECheck = oldSkipCNAME; d_requireAuthData = oldRequireAuthData; @@ -1369,7 +1368,7 @@ vState SyncRes::getDSRecords(const DNSName& zone, dsmap_t& ds, bool taOnly, unsi return Bogus; } -vState SyncRes::getValidationStatus(const SyncRes::zonesStates_t& cuts, const DNSName& subdomain) +vState SyncRes::getValidationStatus(const DNSName& subdomain) { vState result = Indeterminate; @@ -1378,8 +1377,8 @@ vState SyncRes::getValidationStatus(const SyncRes::zonesStates_t& cuts, const DN } DNSName name(subdomain); do { - const auto& it = cuts.find(name); - if (it != cuts.cend()) { + const auto& it = d_cutStates.find(name); + if (it != d_cutStates.cend()) { LOG("Got status "<second]<<" for name "<second; } @@ -1389,53 +1388,38 @@ vState SyncRes::getValidationStatus(const SyncRes::zonesStates_t& cuts, const DN return result; } -void SyncRes::computeZoneCuts(SyncRes::zonesStates_t& cuts, const DNSName& begin, const DNSName& end, unsigned int depth) +void SyncRes::computeZoneCuts(const DNSName& begin, const DNSName& end, unsigned int depth) { - LOG(__func__<<", from "< labelsToAdd = begin.makeRelative(end).getRawLabels(); bool oldSkipCNAME = d_skipCNAMECheck; bool oldRequireAuthData = d_requireAuthData; - bool oldComputingZoneCut = d_computingZoneCut; d_skipCNAMECheck = true; d_requireAuthData = false; - d_computingZoneCut = true; while(qname != begin) { bool foundCut = false; @@ -1452,9 +1436,8 @@ void SyncRes::computeZoneCuts(SyncRes::zonesStates_t& cuts, const DNSName& begin vState state = Indeterminate; /* temporarily mark as Indeterminate, so that we won't enter an endless loop trying to determine that zone cut again. */ - cuts[qname] = state; - SyncRes::zonesStates_t tempCuts = cuts; - int rcode = doResolve(qname, QType(QType::NS), nsrecords, depth + 1, beenthere, state, tempCuts); + d_cutStates[qname] = state; + int rcode = doResolve(qname, QType(QType::NS), nsrecords, depth + 1, beenthere, state); if (rcode == RCode::NoError && !nsrecords.empty()) { for (const auto& record : nsrecords) { @@ -1466,7 +1449,7 @@ void SyncRes::computeZoneCuts(SyncRes::zonesStates_t& cuts, const DNSName& begin if (foundCut) { LOG("- Found cut at "<& dnskeys, const std::vector >& signatures, unsigned int depth, SyncRes::zonesStates_t& cuts) +vState SyncRes::validateDNSKeys(const DNSName& zone, const std::vector& dnskeys, const std::vector >& signatures, unsigned int depth) { dsmap_t ds; if (!signatures.empty()) { DNSName signer = getSigner(signatures); if (!signer.empty() && signer.isPartOf(zone)) { - vState state = getDSRecords(signer, ds, false, depth, cuts); + vState state = getDSRecords(signer, ds, false, depth); if (state == TA) { state = Secure; @@ -1544,7 +1528,7 @@ vState SyncRes::validateDNSKeys(const DNSName& zone, const std::vector records; std::set beenthere; @@ -1554,7 +1538,7 @@ vState SyncRes::getDNSKeys(const DNSName& signer, skeyset_t& keys, unsigned int /* following CNAME might lead to us to the wrong DNSKEY */ bool oldSkipCNAME = d_skipCNAMECheck; d_skipCNAMECheck = true; - int rcode = doResolve(signer, QType(QType::DNSKEY), records, depth + 1, beenthere, state, cuts); + int rcode = doResolve(signer, QType(QType::DNSKEY), records, depth + 1, beenthere, state); d_skipCNAMECheck = oldSkipCNAME; if (rcode == RCode::NoError) { @@ -1576,7 +1560,7 @@ vState SyncRes::getDNSKeys(const DNSName& signer, skeyset_t& keys, unsigned int return Bogus; } -vState SyncRes::validateRecordsWithSigs(unsigned int depth, const DNSName& qname, const QType& qtype, const DNSName& name, const std::vector& records, const std::vector >& signatures, SyncRes::zonesStates_t& cuts) +vState SyncRes::validateRecordsWithSigs(unsigned int depth, const DNSName& qname, const QType& qtype, const DNSName& name, const std::vector& records, const std::vector >& signatures) { skeyset_t keys; if (!signatures.empty()) { @@ -1586,7 +1570,7 @@ vState SyncRes::validateRecordsWithSigs(unsigned int depth, const DNSName& qname /* we are already retrieving those keys, sorry */ return Indeterminate; } - vState state = getDNSKeys(signer, keys, depth, cuts); + vState state = getDNSKeys(signer, keys, depth); if (state != Secure) { return state; } @@ -1611,7 +1595,7 @@ vState SyncRes::validateRecordsWithSigs(unsigned int depth, const DNSName& qname return Bogus; } -RCode::rcodes_ SyncRes::updateCacheFromRecords(unsigned int depth, LWResult& lwr, const DNSName& qname, const QType& qtype, const DNSName& auth, bool wasForwarded, const boost::optional ednsmask, vState& state, SyncRes::zonesStates_t& cuts, bool& needWildcardProof) +RCode::rcodes_ SyncRes::updateCacheFromRecords(unsigned int depth, LWResult& lwr, const DNSName& qname, const QType& qtype, const DNSName& auth, bool wasForwarded, const boost::optional ednsmask, vState& state, bool& needWildcardProof) { struct CacheEntry { @@ -1749,7 +1733,7 @@ RCode::rcodes_ SyncRes::updateCacheFromRecords(unsigned int depth, LWResult& lwr continue; // vState recordState = state; - vState recordState = getValidationStatus(cuts, auth); + vState recordState = getValidationStatus(auth); LOG("Got status "<first.name<first.type == QType::DNSKEY && i->first.place == DNSResourceRecord::ANSWER) { LOG("Validating DNSKEY for "<first.name<first.name, i->second.records, i->second.signatures, depth, cuts); + recordState = validateDNSKeys(i->first.name, i->second.records, i->second.signatures, depth); } else { LOG("Validating non-additional record for "<first.name<first.name, i->second.records, i->second.signatures, cuts); + recordState = validateRecordsWithSigs(depth, qname, qtype, i->first.name, i->second.records, i->second.signatures); } } } @@ -1773,7 +1757,7 @@ RCode::rcodes_ SyncRes::updateCacheFromRecords(unsigned int depth, LWResult& lwr /* for non authoritative answer, we only care about the DS record (or lack of) */ if ((i->first.type == QType::DS || i->first.type == QType::NSEC || i->first.type == QType::NSEC3) && i->first.place == DNSResourceRecord::AUTHORITY) { LOG("Validating DS record for "<first.name<first.name, i->second.records, i->second.signatures, cuts); + recordState = validateRecordsWithSigs(depth, qname, qtype, i->first.name, i->second.records, i->second.signatures); } } updateValidationState(state, recordState); @@ -1820,7 +1804,7 @@ void SyncRes::getDenialValidationState(NegCache::NegCacheEntry& ne, vState& stat } } -bool SyncRes::processRecords(const std::string& prefix, const DNSName& qname, const QType& qtype, const DNSName& auth, LWResult& lwr, const bool sendRDQuery, vector& ret, set& nsset, DNSName& newtarget, DNSName& newauth, bool& realreferral, bool& negindic, vState& state, bool needWildcardProof, zonesStates_t& cuts) +bool SyncRes::processRecords(const std::string& prefix, const DNSName& qname, const QType& qtype, const DNSName& auth, LWResult& lwr, const bool sendRDQuery, vector& ret, set& nsset, DNSName& newtarget, DNSName& newauth, bool& realreferral, bool& negindic, vState& state, bool needWildcardProof) { bool done = false; @@ -1910,14 +1894,14 @@ bool SyncRes::processRecords(const std::string& prefix, const DNSName& qname, co rec.d_ttl = min(s_maxnegttl, rec.d_ttl); LOG(prefix<second == Indeterminate) { cut->second = state; } } else { - cuts[newauth] = state; + d_cutStates[newauth] = state; } if(!wasVariable()) { t_sstorage.negcache.add(ne); @@ -2074,7 +2058,7 @@ bool SyncRes::doResolveAtThisIP(const std::string& prefix, const DNSName& qname, return true; } -bool SyncRes::processAnswer(unsigned int depth, LWResult& lwr, const DNSName& qname, const QType& qtype, DNSName& auth, bool wasForwarded, const boost::optional ednsmask, bool sendRDQuery, NsSet &nameservers, std::vector& ret, const DNSFilterEngine& dfe, bool* gotNewServers, int* rcode, vState& state, SyncRes::zonesStates_t& cuts) +bool SyncRes::processAnswer(unsigned int depth, LWResult& lwr, const DNSName& qname, const QType& qtype, DNSName& auth, bool wasForwarded, const boost::optional ednsmask, bool sendRDQuery, NsSet &nameservers, std::vector& ret, const DNSFilterEngine& dfe, bool* gotNewServers, int* rcode, vState& state) { string prefix; if(doLog()) { @@ -2089,7 +2073,7 @@ bool SyncRes::processAnswer(unsigned int depth, LWResult& lwr, const DNSName& qn } bool needWildcardProof = false; - *rcode = updateCacheFromRecords(depth, lwr, qname, qtype, auth, wasForwarded, ednsmask, state, cuts, needWildcardProof); + *rcode = updateCacheFromRecords(depth, lwr, qname, qtype, auth, wasForwarded, ednsmask, state, needWildcardProof); if (*rcode != RCode::NoError) { return true; } @@ -2101,7 +2085,7 @@ bool SyncRes::processAnswer(unsigned int depth, LWResult& lwr, const DNSName& qn DNSName newauth; DNSName newtarget; - bool done = processRecords(prefix, qname, qtype, auth, lwr, sendRDQuery, ret, nsset, newtarget, newauth, realreferral, negindic, state, needWildcardProof, cuts); + bool done = processRecords(prefix, qname, qtype, auth, lwr, sendRDQuery, ret, nsset, newtarget, newauth, realreferral, negindic, state, needWildcardProof); if(done){ LOG(prefix< beenthere2; vState cnameState = Indeterminate; - bool oldComputingZoneCut = d_computingZoneCut; - d_computingZoneCut = false; - *rcode = doResolve(newtarget, qtype, ret, depth + 1, beenthere2, cnameState, cuts); + *rcode = doResolve(newtarget, qtype, ret, depth + 1, beenthere2, cnameState); LOG("Updating validation state for response to "<&ret, - unsigned int depth, set&beenthere, vState& state, SyncRes::zonesStates_t& cuts) + unsigned int depth, set&beenthere, vState& state) { auto luaconfsLocal = g_luaconfs.getLocal(); string prefix; @@ -2244,7 +2225,7 @@ int SyncRes::doResolveAt(NsSet &nameservers, DNSName auth, bool flawedNSSet, con lwr.d_aabit=true; /* we have received an answer, are we done ? */ - bool done = processAnswer(depth, lwr, qname, qtype, auth, false, ednsmask, sendRDQuery, nameservers, ret, luaconfsLocal->dfe, &gotNewServers, &rcode, state, cuts); + bool done = processAnswer(depth, lwr, qname, qtype, auth, false, ednsmask, sendRDQuery, nameservers, ret, luaconfsLocal->dfe, &gotNewServers, &rcode, state); if (done) { return rcode; } @@ -2254,7 +2235,7 @@ int SyncRes::doResolveAt(NsSet &nameservers, DNSName auth, bool flawedNSSet, con } else { /* if tns is empty, retrieveAddressesForNS() knows we have hardcoded servers (i.e. "forwards") */ - remoteIPs = retrieveAddressesForNS(prefix, qname, tns, depth, beenthere, rnameservers, nameservers, sendRDQuery, pierceDontQuery, flawedNSSet, cuts); + remoteIPs = retrieveAddressesForNS(prefix, qname, tns, depth, beenthere, rnameservers, nameservers, sendRDQuery, pierceDontQuery, flawedNSSet); if(remoteIPs.empty()) { LOG(prefix<dfe, &gotNewServers, &rcode, state, cuts); + bool done = processAnswer(depth, lwr, qname, qtype, auth, wasForwarded, ednsmask, sendRDQuery, nameservers, ret, luaconfsLocal->dfe, &gotNewServers, &rcode, state); if (done) { return rcode; } diff --git a/pdns/syncres.hh b/pdns/syncres.hh index cb93a320f..764856b54 100644 --- a/pdns/syncres.hh +++ b/pdns/syncres.hh @@ -702,30 +702,30 @@ private: typedef std::map zonesStates_t; int doResolveAt(NsSet &nameservers, DNSName auth, bool flawedNSSet, const DNSName &qname, const QType &qtype, vector&ret, - unsigned int depth, set&beenthere, vState& state, zonesStates_t& cuts); + unsigned int depth, set&beenthere, vState& state); bool doResolveAtThisIP(const std::string& prefix, const DNSName& qname, const QType& qtype, LWResult& lwr, boost::optional& ednsmask, const DNSName& auth, bool const sendRDQuery, const DNSName& nsName, const ComboAddress& remoteIP, bool doTCP, bool* truncated); - bool processAnswer(unsigned int depth, LWResult& lwr, const DNSName& qname, const QType& qtype, DNSName& auth, bool wasForwarded, const boost::optional ednsmask, bool sendRDQuery, NsSet &nameservers, std::vector& ret, const DNSFilterEngine& dfe, bool* gotNewServers, int* rcode, vState& state, zonesStates_t& cuts); + bool processAnswer(unsigned int depth, LWResult& lwr, const DNSName& qname, const QType& qtype, DNSName& auth, bool wasForwarded, const boost::optional ednsmask, bool sendRDQuery, NsSet &nameservers, std::vector& ret, const DNSFilterEngine& dfe, bool* gotNewServers, int* rcode, vState& state); - int doResolve(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, set& beenthere, vState& state, zonesStates_t& cuts); + int doResolve(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, set& beenthere, vState& state); bool doOOBResolve(const AuthDomain& domain, const DNSName &qname, const QType &qtype, vector&ret, int& res) const; bool doOOBResolve(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, int &res); domainmap_t::const_iterator getBestAuthZone(DNSName* qname) const; - bool doCNAMECacheCheck(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, int &res, vState& state, SyncRes::zonesStates_t& cuts); - bool doCacheCheck(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, int &res, vState& state, SyncRes::zonesStates_t& cuts); + bool doCNAMECacheCheck(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, int &res, vState& state); + bool doCacheCheck(const DNSName &qname, const QType &qtype, vector&ret, unsigned int depth, int &res, vState& state); void getBestNSFromCache(const DNSName &qname, const QType &qtype, vector&bestns, bool* flawedNSSet, unsigned int depth, set& beenthere); DNSName getBestNSNamesFromCache(const DNSName &qname, const QType &qtype, NsSet& nsset, bool* flawedNSSet, unsigned int depth, set&beenthere); inline vector shuffleInSpeedOrder(NsSet &nameservers, const string &prefix); bool moreSpecificThan(const DNSName& a, const DNSName &b) const; - vector getAddrs(const DNSName &qname, unsigned int depth, set& beenthere, zonesStates_t& cuts); + vector getAddrs(const DNSName &qname, unsigned int depth, set& beenthere); bool nameserversBlockedByRPZ(const DNSFilterEngine& dfe, const NsSet& nameservers); bool nameserverIPBlockedByRPZ(const DNSFilterEngine& dfe, const ComboAddress&); bool throttledOrBlocked(const std::string& prefix, const ComboAddress& remoteIP, const DNSName& qname, const QType& qtype, bool pierceDontQuery); - vector retrieveAddressesForNS(const std::string& prefix, const DNSName& qname, vector::const_iterator& tns, const unsigned int depth, set& beenthere, const vector& rnameservers, NsSet& nameservers, bool& sendRDQuery, bool& pierceDontQuery, bool& flawedNSSet, zonesStates_t& cuts); - RCode::rcodes_ updateCacheFromRecords(unsigned int depth, LWResult& lwr, const DNSName& qname, const QType& qtype, const DNSName& auth, bool wasForwarded, const boost::optional, vState& state, zonesStates_t& cuts, bool& needWildcardProof); - bool processRecords(const std::string& prefix, const DNSName& qname, const QType& qtype, const DNSName& auth, LWResult& lwr, const bool sendRDQuery, vector& ret, set& nsset, DNSName& newtarget, DNSName& newauth, bool& realreferral, bool& negindic, vState& state, bool needWildcardProof, zonesStates_t& cuts); + vector retrieveAddressesForNS(const std::string& prefix, const DNSName& qname, vector::const_iterator& tns, const unsigned int depth, set& beenthere, const vector& rnameservers, NsSet& nameservers, bool& sendRDQuery, bool& pierceDontQuery, bool& flawedNSSet); + RCode::rcodes_ updateCacheFromRecords(unsigned int depth, LWResult& lwr, const DNSName& qname, const QType& qtype, const DNSName& auth, bool wasForwarded, const boost::optional, vState& state, bool& needWildcardProof); + bool processRecords(const std::string& prefix, const DNSName& qname, const QType& qtype, const DNSName& auth, LWResult& lwr, const bool sendRDQuery, vector& ret, set& nsset, DNSName& newtarget, DNSName& newauth, bool& realreferral, bool& negindic, vState& state, bool needWildcardProof); bool doSpecialNamesResolve(const DNSName &qname, const QType &qtype, const uint16_t qclass, vector &ret); @@ -736,21 +736,22 @@ private: bool validationEnabled() const; uint32_t computeLowestTTD(const std::vector& records, const std::vector >& signatures, uint32_t signaturesTTL) const; void updateValidationState(vState& state, const vState stateUpdate); - vState validateRecordsWithSigs(unsigned int depth, const DNSName& qname, const QType& qtype, const DNSName& name, const std::vector& records, const std::vector >& signatures, zonesStates_t& cuts); - vState validateDNSKeys(const DNSName& zone, const std::vector& dnskeys, const std::vector >& signatures, unsigned int depth, SyncRes::zonesStates_t& cuts); - vState getDSRecords(const DNSName& zone, dsmap_t& ds, bool onlyTA, unsigned int depth, SyncRes::zonesStates_t& cuts); - vState getDNSKeys(const DNSName& signer, skeyset_t& keys, unsigned int depth, zonesStates_t& cuts); + vState validateRecordsWithSigs(unsigned int depth, const DNSName& qname, const QType& qtype, const DNSName& name, const std::vector& records, const std::vector >& signatures); + vState validateDNSKeys(const DNSName& zone, const std::vector& dnskeys, const std::vector >& signatures, unsigned int depth); + vState getDSRecords(const DNSName& zone, dsmap_t& ds, bool onlyTA, unsigned int depth); + 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); - vState getValidationStatus(const zonesStates_t& cuts, const DNSName& subdomain); + vState getValidationStatus(const DNSName& subdomain); - void computeZoneCuts(zonesStates_t& cuts, const DNSName& begin, const DNSName& end, unsigned int depth); + void computeZoneCuts(const DNSName& begin, const DNSName& end, unsigned int depth); void setUpdatingRootNS() { d_updatingRootNS = true; } + zonesStates_t d_cutStates; ostringstream d_trace; shared_ptr d_pdl; boost::optional d_incomingECS; @@ -775,7 +776,6 @@ private: bool d_wantsRPZ{true}; bool d_wasOutOfBand{false}; bool d_wasVariable{false}; - bool d_computingZoneCut{false}; LogMode d_lm; }; -- 2.49.0