From: Remi Gacogne Date: Mon, 18 Feb 2019 15:16:04 +0000 (+0100) Subject: auth: Catch exception when parsing a zone's SOA in getUnfreshSlaveInfos() X-Git-Tag: auth-4.2.0-beta1^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a6037f784da39d9cd784226fcc1a278383eb99a1;p=pdns auth: Catch exception when parsing a zone's SOA in getUnfreshSlaveInfos() --- diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index f010a1728..be803b88f 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -338,36 +338,46 @@ void GSQLBackend::getUnfreshSlaveInfos(vector *unfreshDomains) } vector allSlaves; - int numanswers=d_result.size(); - for(int n=0;n masters; + stringtok(masters, row[2], ", \t"); + for(const auto& m : masters) + sd.masters.emplace_back(m, 53); + + sd.last_check=pdns_stou(row[3]); + sd.backend=this; + sd.kind=DomainInfo::Slave; + allSlaves.push_back(sd); } catch (...) { continue; } - - vector masters; - stringtok(masters, d_result[n][2], ", \t"); - for(const auto& m : masters) - sd.masters.emplace_back(m, 53); - - sd.last_check=pdns_stou(d_result[n][3]); - sd.backend=this; - sd.kind=DomainInfo::Slave; - allSlaves.push_back(sd); } - for(vector::iterator i=allSlaves.begin();i!=allSlaves.end();++i) { - SOAData sdata; - sdata.serial=0; - sdata.refresh=0; - getSOA(i->zone,sdata); - if((time_t)(i->last_check+sdata.refresh) < time(0)) { - i->serial=sdata.serial; - unfreshDomains->push_back(*i); + for (auto& slave : allSlaves) { + try { + SOAData sdata; + sdata.serial=0; + sdata.refresh=0; + getSOA(slave.zone, sdata); + if(static_cast(slave.last_check + sdata.refresh) < time(nullptr)) { + slave.serial=sdata.serial; + unfreshDomains->push_back(slave); + } + } + catch(const std::exception& exp) { + g_log<