]> granicus.if.org Git - pdns/commitdiff
ixfrdist: if zonefile is broken, remove and find another
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Thu, 17 Oct 2019 10:39:00 +0000 (12:39 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Thu, 17 Oct 2019 10:39:00 +0000 (12:39 +0200)
pdns/ixfrdist.cc

index c115b256f6385784e8c4f7a2aec511c54937efc0..5a6fc54a70d0ce4ad5e25cb239ae2e5df3a75a67 100644 (file)
@@ -282,6 +282,7 @@ void updateThread(const string& workdir, const uint16_t& keep, const uint16_t& a
     string dir = workdir + "/" + domain.toString();
     try {
       g_log<<Logger::Info<<"Trying to initially load domain "<<domain<<" from disk"<<endl;
+againserial:
       auto serial = getSerialFromDir(dir);
       shared_ptr<SOARecordContent> soa;
       uint32_t soaTTL;
@@ -290,8 +291,9 @@ void updateThread(const string& workdir, const uint16_t& keep, const uint16_t& a
         loadSOAFromDisk(domain, fname, soa, soaTTL);
         records_t records;
         if (soa == nullptr) {
-          g_log<<Logger::Error<<"Could not load SOA from disk for zone "<<domain<<", ignoring file"<<endl;
-          continue;
+          g_log<<Logger::Error<<"Could not load SOA from disk for zone "<<domain<<", removing file '"<<fname<<"'"<<endl;
+          unlink(fname.c_str());
+          goto againserial;
         }
         loadZoneFromDisk(records, fname, domain);
         auto zoneInfo = std::make_shared<ixfrinfo_t>();