for(auto iter = found.first; iter != found.second; ++iter) {
auto soa = std::dynamic_pointer_cast<SOARecordContent>(iter->d_content);
- soaret = *iter;
- return soa->d_st.serial;
+ if (soa) {
+ soaret = *iter;
+ return soa->d_st.serial;
+ }
}
return 0;
}
writeRecords(fp, soarecord);
fclose(fp);
- rename( (fname+".partial").c_str(), fname.c_str());
+ if (rename( (fname+".partial").c_str(), fname.c_str()) != 0) {
+ throw std::runtime_error("Unable to move the zone file for " + zone.toLogString() + " from " + fname + ".partial to " + fname + ": " + string(strerror(errno)));
+ }
}
void loadZoneFromDisk(records_t& records, const string& fname, const DNSName& zone)
DNSResourceRecord rr;
bool seenSOA=false;
- unsigned int nrecords=0;
while(zpt.get(rr)) {
- ++nrecords;
if(rr.qtype.getCode() == QType::CNAME && rr.content.empty())
rr.content=".";
rr.qname = rr.qname.makeRelative(zone);