From: Christian Hofstaedtler Date: Thu, 6 Oct 2016 17:32:37 +0000 (+0200) Subject: Auth: drop broken support for packet-specific SOA replies from backends X-Git-Tag: rec-4.1.0-alpha1~21^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=94bfa5b667e38d329a9e14cace668167214d4509;p=thirdparty%2Fpdns.git Auth: drop broken support for packet-specific SOA replies from backends --- diff --git a/docs/markdown/appendix/backend-writers-guide.md b/docs/markdown/appendix/backend-writers-guide.md index 547c9e8aef..f61e4d2543 100644 --- a/docs/markdown/appendix/backend-writers-guide.md +++ b/docs/markdown/appendix/backend-writers-guide.md @@ -34,7 +34,7 @@ Implementing a backend consists of inheriting from the DNSBackend class. For rea virtual void lookup(const QType &qtype, const string &qdomain, DNSPacket *pkt_p=0, int zoneId=-1)=0; virtual bool list(const string &target, int domain_id)=0; virtual bool get(DNSResourceRecord &r)=0; - virtual bool getSOA(const string &name, SOAData &soadata, DNSPacket *p=0); + virtual bool getSOA(const DNSName &name, SOAData &soadata); }; ``` diff --git a/modules/luabackend/luabackend.hh b/modules/luabackend/luabackend.hh index 05234fea39..498fee6f58 100644 --- a/modules/luabackend/luabackend.hh +++ b/modules/luabackend/luabackend.hh @@ -58,7 +58,7 @@ public: void lookup(const QType &qtype, const DNSName &qname, DNSPacket *p, int domain_id) override; bool get(DNSResourceRecord &rr) override; //! fills the soadata struct with the SOA details. Returns false if there is no SOA. - bool getSOA(const DNSName &name, SOAData &soadata, DNSPacket *p=0) override; + bool getSOA(const DNSName &name, SOAData &soadata); // MASTER BACKEND diff --git a/modules/luabackend/minimal.cc b/modules/luabackend/minimal.cc index aadb8f0bd5..8c44a3a482 100644 --- a/modules/luabackend/minimal.cc +++ b/modules/luabackend/minimal.cc @@ -176,12 +176,10 @@ bool LUABackend::get(DNSResourceRecord &rr) { return !rr.content.empty(); } -bool LUABackend::getSOA(const DNSName &name, SOAData &soadata, DNSPacket *p) { +bool LUABackend::getSOA(const DNSName &name, SOAData &soadata) { if (logging) L << Logger::Info << backend_name << "(getsoa) BEGIN" << endl; - dnspacket = p; - lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_getsoa); lua_pushstring(lua, name.toString().c_str()); @@ -190,14 +188,10 @@ bool LUABackend::getSOA(const DNSName &name, SOAData &soadata, DNSPacket *p) { string e = backend_name + lua_tostring(lua, -1); lua_pop(lua, 1); - dnspacket = NULL; - throw runtime_error(e); return false; } - dnspacket = NULL; - size_t returnedwhat = lua_type(lua, -1); if (returnedwhat != LUA_TTABLE) { lua_pop(lua, 1 ); diff --git a/modules/mydnsbackend/mydnsbackend.cc b/modules/mydnsbackend/mydnsbackend.cc index 0d405e417e..db4751c469 100644 --- a/modules/mydnsbackend/mydnsbackend.cc +++ b/modules/mydnsbackend/mydnsbackend.cc @@ -210,7 +210,7 @@ bool MyDNSBackend::list(const DNSName &target, int zoneId, bool include_disabled return true; } -bool MyDNSBackend::getSOA(const DNSName& name, SOAData& soadata, DNSPacket*) { +bool MyDNSBackend::getSOA(const DNSName& name, SOAData& soadata) { string query; SSqlStatement::row_t rrow; diff --git a/modules/mydnsbackend/mydnsbackend.hh b/modules/mydnsbackend/mydnsbackend.hh index 0ee6afa134..52aaf9fcdd 100644 --- a/modules/mydnsbackend/mydnsbackend.hh +++ b/modules/mydnsbackend/mydnsbackend.hh @@ -39,7 +39,7 @@ public: void lookup(const QType &, const DNSName &qdomain, DNSPacket *p=0, int zoneId=-1) override; bool list(const DNSName &target, int domain_id, bool include_disabled=false) override; bool get(DNSResourceRecord &r) override; - bool getSOA(const DNSName& name, SOAData& soadata, DNSPacket*) override; + bool getSOA(const DNSName& name, SOAData& soadata) override; void getAllDomains(vector *domains, bool include_disabled=false) override; private: SMySQL *d_db; diff --git a/modules/opendbxbackend/odbxbackend.cc b/modules/opendbxbackend/odbxbackend.cc index e7c459ae80..06fb890a89 100644 --- a/modules/opendbxbackend/odbxbackend.cc +++ b/modules/opendbxbackend/odbxbackend.cc @@ -179,7 +179,7 @@ bool OdbxBackend::getDomainInfo( const DNSName& domain, DomainInfo& di ) -bool OdbxBackend::getSOA( const DNSName& domain, SOAData& sd, DNSPacket* p ) +bool OdbxBackend::getSOA( const DNSName& domain, SOAData& sd) { const char* tmp; diff --git a/modules/opendbxbackend/odbxbackend.hh b/modules/opendbxbackend/odbxbackend.hh index 3d5a43a603..97cae12070 100644 --- a/modules/opendbxbackend/odbxbackend.hh +++ b/modules/opendbxbackend/odbxbackend.hh @@ -77,7 +77,7 @@ public: ~OdbxBackend(); void lookup( const QType& qtype, const DNSName& qdomain, DNSPacket* p = 0, int zoneid = -1 ) override; - bool getSOA( const DNSName& domain, SOAData& sd, DNSPacket* p ) override; + bool getSOA( const DNSName& domain, SOAData& sd ) override; bool list( const DNSName& target, int domain_id, bool include_disabled=false ) override; bool get( DNSResourceRecord& rr ) override; diff --git a/pdns/dnsbackend.cc b/pdns/dnsbackend.cc index 6e70015602..4711bbefd3 100644 --- a/pdns/dnsbackend.cc +++ b/pdns/dnsbackend.cc @@ -35,7 +35,7 @@ bool DNSBackend::getAuth(DNSPacket *p, SOAData *sd, const DNSName &target) { - return this->getSOA(target, *sd, p); + return this->getSOA(target, *sd); } void DNSBackend::setArgPrefix(const string &prefix) @@ -214,9 +214,9 @@ vectorBackendMakerClass::all(bool metadataOnly) \param domain Domain we want to get the SOA details of \param sd SOAData which is filled with the SOA details */ -bool DNSBackend::getSOA(const DNSName &domain, SOAData &sd, DNSPacket *p) +bool DNSBackend::getSOA(const DNSName &domain, SOAData &sd) { - this->lookup(QType(QType::SOA),domain,p); + this->lookup(QType(QType::SOA),domain); DNSResourceRecord rr; rr.auth = true; diff --git a/pdns/dnsbackend.hh b/pdns/dnsbackend.hh index e3d6242a75..86639cec1a 100644 --- a/pdns/dnsbackend.hh +++ b/pdns/dnsbackend.hh @@ -125,7 +125,7 @@ public: virtual ~DNSBackend(){}; //! fills the soadata struct with the SOA details. Returns false if there is no SOA. - virtual bool getSOA(const DNSName &name, SOAData &soadata, DNSPacket *p=0); + virtual bool getSOA(const DNSName &name, SOAData &soadata); //! Calculates a SOA serial for the zone and stores it in the third argument. virtual bool calculateSOASerial(const DNSName& domain, const SOAData& sd, time_t& serial); diff --git a/pdns/packethandler.cc b/pdns/packethandler.cc index 01036d29d1..1f2ca8fda8 100644 --- a/pdns/packethandler.cc +++ b/pdns/packethandler.cc @@ -396,7 +396,7 @@ int PacketHandler::doAdditionalProcessingAndDropAA(DNSPacket *p, DNSPacket *r, c !(i->dr.d_type==QType::MX || i->dr.d_type==QType::NS || i->dr.d_type==QType::SRV)) continue; - if(r->d.aa && i->dr.d_name.countLabels() && i->dr.d_type==QType::NS && !B.getSOA(i->dr.d_name,sd,p) && !retargeted) { // drop AA in case of non-SOA-level NS answer, except for root referral + if(r->d.aa && i->dr.d_name.countLabels() && i->dr.d_type==QType::NS && !B.getSOA(i->dr.d_name,sd) && !retargeted) { // drop AA in case of non-SOA-level NS answer, except for root referral r->setA(false); // i->d_place=DNSResourceRecord::AUTHORITY; // XXX FIXME } diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index cb5eac570e..198bb9aaeb 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -359,7 +359,7 @@ found: return found; } -bool UeberBackend::getSOA(const DNSName &domain, SOAData &sd, DNSPacket *p) +bool UeberBackend::getSOA(const DNSName &domain, SOAData &sd) { d_question.qtype=QType::SOA; d_question.qname=domain; @@ -378,17 +378,17 @@ bool UeberBackend::getSOA(const DNSName &domain, SOAData &sd, DNSPacket *p) } // not found in neg. or pos. cache, look it up - return getSOAUncached(domain, sd, p); + return getSOAUncached(domain, sd); } -bool UeberBackend::getSOAUncached(const DNSName &domain, SOAData &sd, DNSPacket *p) +bool UeberBackend::getSOAUncached(const DNSName &domain, SOAData &sd) { d_question.qtype=QType::SOA; d_question.qname=domain; d_question.zoneId=-1; for(vector::const_iterator i=backends.begin();i!=backends.end();++i) - if((*i)->getSOA(domain, sd, p)) { + if((*i)->getSOA(domain, sd)) { if( d_cache_ttl ) { DNSZoneRecord rr; rr.dr.d_name = sd.qname; diff --git a/pdns/ueberbackend.hh b/pdns/ueberbackend.hh index 37ab30d884..ece0192470 100644 --- a/pdns/ueberbackend.hh +++ b/pdns/ueberbackend.hh @@ -99,8 +99,8 @@ public: void lookup(const QType &, const DNSName &qdomain, DNSPacket *pkt_p=0, int zoneId=-1); bool getAuth(DNSPacket *p, SOAData *sd, const DNSName &target); - bool getSOA(const DNSName &domain, SOAData &sd, DNSPacket *p=0); - bool getSOAUncached(const DNSName &domain, SOAData &sd, DNSPacket *p=0); // same, but ignores cache + bool getSOA(const DNSName &domain, SOAData &sd); + bool getSOAUncached(const DNSName &domain, SOAData &sd); // same, but ignores cache bool get(DNSZoneRecord &r); void getAllDomains(vector *domains, bool include_disabled=false);