From fbdca370588dff6ed47a79fd46caec60a190e747 Mon Sep 17 00:00:00 2001 From: Bert Hubert Date: Mon, 3 Sep 2007 11:08:50 +0000 Subject: [PATCH] fix use of 'original' zone state instead of a safe copy in Bind2Backend::getUpdatedMasters, issue spotted by Stefan Schmidt plus s/Master/Slave/ in a somewhat important place git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1089 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- pdns/backends/bind/bindbackend2.cc | 11 ++++++----- pdns/backends/gsql/gsqlbackend.cc | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/pdns/backends/bind/bindbackend2.cc b/pdns/backends/bind/bindbackend2.cc index 40fa9c218..0895e3dc8 100644 --- a/pdns/backends/bind/bindbackend2.cc +++ b/pdns/backends/bind/bindbackend2.cc @@ -225,10 +225,9 @@ bool Bind2Backend::feedRecord(const DNSResourceRecord &r) void Bind2Backend::getUpdatedMasters(vector *changedDomains) { SOAData soadata; + shared_ptr state = s_state; - // Lock l(&s_state_lock); // we don't really change the zone map, just flip a bit - - for(id_zone_map_t::iterator i = s_state->id_zone_map.begin(); i != s_state->id_zone_map.end() ; ++i) { + for(id_zone_map_t::const_iterator i = state->id_zone_map.begin(); i != state->id_zone_map.end() ; ++i) { if(!i->second.d_masters.empty()) continue; soadata.serial=0; @@ -243,8 +242,10 @@ void Bind2Backend::getUpdatedMasters(vector *changedDomains) di.last_check=i->second.d_lastcheck; di.backend=this; di.kind=DomainInfo::Master; - if(!i->second.d_lastnotified) // don't do notification storm on startup - i->second.d_lastnotified=soadata.serial; + if(!i->second.d_lastnotified) { // don't do notification storm on startup + Lock l(&s_state_lock); + s_state->id_zone_map[i->first].d_lastnotified=soadata.serial; + } else if(soadata.serial!=i->second.d_lastnotified) changedDomains->push_back(di); diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index aa8cb1cf5..d228be30f 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -110,7 +110,7 @@ bool GSQLBackend::getDomainInfo(const string &domain, DomainInfo &di) di.kind=DomainInfo::Slave; } else if(iequals(type,"MASTER")) - di.kind=DomainInfo::Slave; + di.kind=DomainInfo::Master; else di.kind=DomainInfo::Native; -- 2.49.0