From: Kees Monshouwer Date: Wed, 29 Nov 2017 23:25:10 +0000 (+0100) Subject: auth: do not waste SOA queries in getDomaininfo() for a serial we never use X-Git-Tag: dnsdist-1.3.1~168^2~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=47bddbb7cfaa02b4afbbdf1029d9188cb1b5b87a;p=thirdparty%2Fpdns.git auth: do not waste SOA queries in getDomaininfo() for a serial we never use --- diff --git a/modules/bindbackend/bindbackend2.cc b/modules/bindbackend/bindbackend2.cc index 4baab252bd..b262a03075 100644 --- a/modules/bindbackend/bindbackend2.cc +++ b/modules/bindbackend/bindbackend2.cc @@ -401,7 +401,7 @@ void Bind2Backend::getUnfreshSlaveInfos(vector *unfreshDomains) } } -bool Bind2Backend::getDomainInfo(const DNSName& domain, DomainInfo &di) +bool Bind2Backend::getDomainInfo(const DNSName& domain, DomainInfo &di, bool getSerial) { BB2DomainInfo bbd; if(!safeGetBBDomainInfo(domain, &bbd)) @@ -414,14 +414,16 @@ bool Bind2Backend::getDomainInfo(const DNSName& domain, DomainInfo &di) di.backend=this; di.kind=bbd.d_kind; di.serial=0; - try { - SOAData sd; - sd.serial=0; - - getSOA(bbd.d_name,sd); // we might not *have* a SOA yet - di.serial=sd.serial; + if(getSerial) { + try { + SOAData sd; + sd.serial=0; + + getSOA(bbd.d_name,sd); // we might not *have* a SOA yet + di.serial=sd.serial; + } + catch(...){} } - catch(...){} return true; } diff --git a/modules/bindbackend/bindbackend2.hh b/modules/bindbackend/bindbackend2.hh index a3825e025d..1f3b5cbd46 100644 --- a/modules/bindbackend/bindbackend2.hh +++ b/modules/bindbackend/bindbackend2.hh @@ -191,7 +191,7 @@ public: ~Bind2Backend(); void getUnfreshSlaveInfos(vector *unfreshDomains) override; void getUpdatedMasters(vector *changedDomains) override; - bool getDomainInfo(const DNSName &domain, DomainInfo &di) override; + bool getDomainInfo(const DNSName &domain, DomainInfo &di, bool getSerial=true ) override; time_t getCtime(const string &fname); // DNSSEC bool getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qname, DNSName& unhashed, DNSName& before, DNSName& after) override; diff --git a/modules/geoipbackend/geoipbackend.cc b/modules/geoipbackend/geoipbackend.cc index 1953da6cdf..9bf646e5f6 100644 --- a/modules/geoipbackend/geoipbackend.cc +++ b/modules/geoipbackend/geoipbackend.cc @@ -602,7 +602,7 @@ void GeoIPBackend::rediscover(string* status) { reload(); } -bool GeoIPBackend::getDomainInfo(const DNSName& domain, DomainInfo &di) { +bool GeoIPBackend::getDomainInfo(const DNSName& domain, DomainInfo &di, bool getSerial) { ReadLock rl(&s_state_lock); for(GeoIPDomain dom : s_domains) { diff --git a/modules/geoipbackend/geoipbackend.hh b/modules/geoipbackend/geoipbackend.hh index 56774da7b9..a938240c39 100644 --- a/modules/geoipbackend/geoipbackend.hh +++ b/modules/geoipbackend/geoipbackend.hh @@ -54,7 +54,7 @@ public: bool get(DNSResourceRecord &r) override; void reload() override; void rediscover(string *status = 0) override; - bool getDomainInfo(const DNSName& domain, DomainInfo &di) override; + bool getDomainInfo(const DNSName& domain, DomainInfo &di, bool getSerial=true) override; // dnssec support bool doesDNSSEC() override { return d_dnssec; }; diff --git a/modules/ldapbackend/ldapbackend.cc b/modules/ldapbackend/ldapbackend.cc index 723dba1d6f..f974b82c0d 100644 --- a/modules/ldapbackend/ldapbackend.cc +++ b/modules/ldapbackend/ldapbackend.cc @@ -675,7 +675,7 @@ void LdapBackend::setNotified( uint32_t id, uint32_t serial ) -bool LdapBackend::getDomainInfo( const DNSName& domain, DomainInfo& di ) +bool LdapBackend::getDomainInfo( const DNSName& domain, DomainInfo& di, bool getSerial ) { string filter; SOAData sd; diff --git a/modules/ldapbackend/ldapbackend.hh b/modules/ldapbackend/ldapbackend.hh index d836ce8a9c..3fb5861f96 100644 --- a/modules/ldapbackend/ldapbackend.hh +++ b/modules/ldapbackend/ldapbackend.hh @@ -152,7 +152,7 @@ class LdapBackend : public DNSBackend void lookup( const QType& qtype, const DNSName& qdomain, DNSPacket* p = 0, int zoneid = -1 ) override; bool get( DNSResourceRecord& rr ) override; - bool getDomainInfo( const DNSName& domain, DomainInfo& di ) override; + bool getDomainInfo( const DNSName& domain, DomainInfo& di, bool getSerial=true ) override; // Master backend void getUpdatedMasters( vector* domains ) override; diff --git a/modules/luabackend/luabackend.hh b/modules/luabackend/luabackend.hh index 5e1f3ac952..6d19d084af 100644 --- a/modules/luabackend/luabackend.hh +++ b/modules/luabackend/luabackend.hh @@ -68,7 +68,7 @@ public: // SLAVE BACKEND - bool getDomainInfo(const DNSName& domain, DomainInfo &di) override; + bool getDomainInfo(const DNSName& domain, DomainInfo &di, bool getSerial=true) override; bool isMaster(const DNSName& name, const string &ip) override; void getUnfreshSlaveInfos(vector* domains) override; void setFresh(uint32_t id) override; diff --git a/modules/luabackend/slave.cc b/modules/luabackend/slave.cc index 26d2a3a5ea..22d6aa672c 100644 --- a/modules/luabackend/slave.cc +++ b/modules/luabackend/slave.cc @@ -258,7 +258,7 @@ bool LUABackend::isMaster(const DNSName& domain, const string &ip) { return ok; } -bool LUABackend::getDomainInfo(const DNSName&domain, DomainInfo &di) { +bool LUABackend::getDomainInfo(const DNSName&domain, DomainInfo &di, bool getSerial) { if (f_lua_getdomaininfo == 0) return false; diff --git a/modules/opendbxbackend/odbxbackend.cc b/modules/opendbxbackend/odbxbackend.cc index ae05d5397b..7b23b47b61 100644 --- a/modules/opendbxbackend/odbxbackend.cc +++ b/modules/opendbxbackend/odbxbackend.cc @@ -93,7 +93,7 @@ OdbxBackend::~OdbxBackend() -bool OdbxBackend::getDomainInfo( const DNSName& domain, DomainInfo& di ) +bool OdbxBackend::getDomainInfo( const DNSName& domain, DomainInfo& di, bool getSerial ) { const char* tmp; @@ -119,7 +119,7 @@ bool OdbxBackend::getDomainInfo( const DNSName& domain, DomainInfo& di ) di.backend = this; di.serial = 0; - if( ( tmp = odbx_field_value( m_result, 6 ) ) != NULL ) + if( getSerial && ( tmp = odbx_field_value( m_result, 6 ) ) != NULL ) { SOAData sd; diff --git a/modules/opendbxbackend/odbxbackend.hh b/modules/opendbxbackend/odbxbackend.hh index 550e93f205..08d1c44c41 100644 --- a/modules/opendbxbackend/odbxbackend.hh +++ b/modules/opendbxbackend/odbxbackend.hh @@ -86,7 +86,7 @@ public: bool abortTransaction() override; bool isMaster( const DNSName& domain, const string& ip ) override; - bool getDomainInfo( const DNSName& domain, DomainInfo& di ) override; + bool getDomainInfo( const DNSName& domain, DomainInfo& di, bool getSerial=true ) override; bool feedRecord( const DNSResourceRecord& rr, const DNSName& ordername ) override; bool createSlaveDomain( const string& ip, const DNSName& domain, const string &nameserver, const string& account ) override; bool superMasterBackend( const string& ip, const DNSName& domain, const vector& nsset, string *nameserver, string* account, DNSBackend** ddb ) override; diff --git a/modules/remotebackend/remotebackend.cc b/modules/remotebackend/remotebackend.cc index f422fd6cbc..d8f8fdce8b 100644 --- a/modules/remotebackend/remotebackend.cc +++ b/modules/remotebackend/remotebackend.cc @@ -577,7 +577,7 @@ void RemoteBackend::parseDomainInfo(const Json &obj, DomainInfo &di) di.backend = this; } -bool RemoteBackend::getDomainInfo(const DNSName& domain, DomainInfo &di) { +bool RemoteBackend::getDomainInfo(const DNSName& domain, DomainInfo &di, bool getSerial) { if (domain.empty()) return false; Json query = Json::object{ { "method", "getDomainInfo" }, diff --git a/modules/remotebackend/remotebackend.hh b/modules/remotebackend/remotebackend.hh index efec16bfdc..2d0d1b7822 100644 --- a/modules/remotebackend/remotebackend.hh +++ b/modules/remotebackend/remotebackend.hh @@ -167,7 +167,7 @@ class RemoteBackend : public DNSBackend bool addDomainKey(const DNSName& name, const KeyData& key, int64_t& id) override; bool activateDomainKey(const DNSName& name, unsigned int id) override; bool deactivateDomainKey(const DNSName& name, unsigned int id) override; - bool getDomainInfo(const DNSName& domain, DomainInfo& di) override; + bool getDomainInfo(const DNSName& domain, DomainInfo& di, bool getSerial=true ) override; void setNotified(uint32_t id, uint32_t serial) override; bool doesDNSSEC() override; bool isMaster(const DNSName& name, const string &ip) override; diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index 21453f1699..4dbc969705 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -300,7 +300,7 @@ bool GSQLBackend::setAccount(const DNSName &domain, const string &account) return true; } -bool GSQLBackend::getDomainInfo(const DNSName &domain, DomainInfo &di) +bool GSQLBackend::getDomainInfo(const DNSName &domain, DomainInfo &di, bool getSerial) { /* fill DomainInfo from database info: id,name,master IP(s),last_check,notified_serial,type,account */ @@ -337,15 +337,17 @@ bool GSQLBackend::getDomainInfo(const DNSName &domain, DomainInfo &di) di.backend=this; di.serial = 0; - try { - SOAData sd; - if(!getSOA(domain, sd)) - g_log< *domains) override; void getUpdatedMasters(vector *updatedDomains) override; - bool getDomainInfo(const DNSName &domain, DomainInfo &di) override; + bool getDomainInfo(const DNSName &domain, DomainInfo &di, bool getSerial=true) override; void setNotified(uint32_t domain_id, uint32_t serial) override; bool setMaster(const DNSName &domain, const string &ip) override; bool setKind(const DNSName &domain, const DomainInfo::DomainKind kind) override; diff --git a/pdns/dnsbackend.hh b/pdns/dnsbackend.hh index 4b14f57b8f..2d0d178b3a 100644 --- a/pdns/dnsbackend.hh +++ b/pdns/dnsbackend.hh @@ -282,7 +282,7 @@ public: } //! if this returns true, DomainInfo di contains information about the domain - virtual bool getDomainInfo(const DNSName &domain, DomainInfo &di) + virtual bool getDomainInfo(const DNSName &domain, DomainInfo &di, bool getSerial=true) { return false; } diff --git a/pdns/packethandler.cc b/pdns/packethandler.cc index ad59c9f249..7b0d182cab 100644 --- a/pdns/packethandler.cc +++ b/pdns/packethandler.cc @@ -819,8 +819,7 @@ int PacketHandler::processNotify(DNSPacket *p) DNSBackend *db=0; DomainInfo di; - di.serial = 0; - if(!B.getDomainInfo(p->qdomain, di) || !(db=di.backend)) { + if(!B.getDomainInfo(p->qdomain, di, false) || !(db=di.backend)) { g_log<qdomain<<" from "<getRemote()<<" for which we are not authoritative"<getTSIGKeyname()); } @@ -856,9 +855,6 @@ int PacketHandler::processNotify(DNSPacket *p) return RCode::Refused; } - // ok, we've done our checks - di.backend = 0; - if(!s_forwardNotify.empty()) { set forwardNotify(s_forwardNotify); for(set::const_iterator j=forwardNotify.begin();j!=forwardNotify.end();++j) { diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index 3b7e3ff8f8..bfb5605db2 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -80,10 +80,10 @@ void UeberBackend::go(void) pthread_mutex_unlock(&d_mut); } -bool UeberBackend::getDomainInfo(const DNSName &domain, DomainInfo &di) +bool UeberBackend::getDomainInfo(const DNSName &domain, DomainInfo &di, bool getSerial) { for(vector::const_iterator i=backends.begin();i!=backends.end();++i) - if((*i)->getDomainInfo(domain, di)) + if((*i)->getDomainInfo(domain, di, getSerial)) return true; return false; } diff --git a/pdns/ueberbackend.hh b/pdns/ueberbackend.hh index 9ce54b0c1a..811152b765 100644 --- a/pdns/ueberbackend.hh +++ b/pdns/ueberbackend.hh @@ -109,7 +109,7 @@ public: void getUnfreshSlaveInfos(vector* domains); void getUpdatedMasters(vector* domains); - bool getDomainInfo(const DNSName &domain, DomainInfo &di); + bool getDomainInfo(const DNSName &domain, DomainInfo &di, bool getSerial=true); bool createDomain(const DNSName &domain); bool doesDNSSEC();