diff --git a/pdns/dnsbackend.cc b/pdns/dnsbackend.cc index 4711bbefd3aa..5fca2b903de9 100644 --- a/pdns/dnsbackend.cc +++ b/pdns/dnsbackend.cc @@ -33,7 +33,7 @@ #include "dnspacket.hh" #include "dns.hh" -bool DNSBackend::getAuth(DNSPacket *p, SOAData *sd, const DNSName &target) +bool DNSBackend::getAuth(const DNSName &target, SOAData *sd) { return this->getSOA(target, *sd); } diff --git a/pdns/dnsbackend.hh b/pdns/dnsbackend.hh index 86639cec1ad7..16ec7c5c4a5a 100644 --- a/pdns/dnsbackend.hh +++ b/pdns/dnsbackend.hh @@ -169,7 +169,7 @@ public: virtual void getAllDomains(vector *domains, bool include_disabled=false) { } /** Determines if we are authoritative for a zone, and at what level */ - virtual bool getAuth(DNSPacket *p, SOAData *sd, const DNSName &target); + virtual bool getAuth(const DNSName &target, SOAData *sd); struct KeyData { std::string content; diff --git a/pdns/packethandler.cc b/pdns/packethandler.cc index 050f2ff3f52c..e4be541d29e0 100644 --- a/pdns/packethandler.cc +++ b/pdns/packethandler.cc @@ -1241,7 +1241,7 @@ DNSPacket *PacketHandler::doQuestion(DNSPacket *p) return r; } - if(!B.getAuth(p, &sd, target)) { + if(!B.getAuth(target, p->qtype, &sd)) { DLOG(L<setA(false); // drop AA if we never had a SOA in the first place diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index 198bb9aaeb88..008f28144458 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -255,7 +255,7 @@ void UeberBackend::getUpdatedMasters(vector* domains) } } -bool UeberBackend::getAuth(DNSPacket *p, SOAData *sd, const DNSName &target) +bool UeberBackend::getAuth(const DNSName &target, const QType& qtype, SOAData* sd, bool cachedOk) { bool found = false; int cstat; @@ -264,7 +264,7 @@ bool UeberBackend::getAuth(DNSPacket *p, SOAData *sd, const DNSName &target) do { // Check cache - if(sd->db != (DNSBackend *)-1 && (d_cache_ttl || d_negcache_ttl)) { + if(cachedOk && (d_cache_ttl || d_negcache_ttl)) { d_question.qtype = QType::SOA; d_question.qname = choppedOff; d_question.zoneId = -1; @@ -307,7 +307,7 @@ bool UeberBackend::getAuth(DNSPacket *p, SOAData *sd, const DNSName &target) break; } else { DLOG(L<getAuth(p, sd, choppedOff)) { + if((*i)->getAuth(choppedOff, sd)) { DLOG(L<qname<first = sd->qname.wirelength(); j->second = *sd; @@ -347,7 +347,7 @@ bool UeberBackend::getAuth(DNSPacket *p, SOAData *sd, const DNSName &target) } found: - if(found == (p->qtype == QType::DS)){ + if(found == (qtype == QType::DS)){ DLOG(L<qname<& new_ptrs) { for(const DNSResourceRecord& rr : new_ptrs) { - DNSPacket fakePacket(false); SOAData sd; - sd.db = (DNSBackend *)-1; // getAuth() cache bypass - fakePacket.qtype = QType::PTR; - - if (!B.getAuth(&fakePacket, &sd, rr.qname)) + if (!B.getAuth(rr.qname, QType(QType::PTR), &sd, false)) throw ApiException("Could not find domain for PTR '"+rr.qname.toString()+"' requested for '"+rr.content+"' (while saving)"); string soa_edit_api_kind;