]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
pdnsutil create-zone: better error if default-soa-content is broken
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Sat, 19 Jun 2021 11:33:55 +0000 (13:33 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Thu, 24 Jun 2021 11:44:57 +0000 (13:44 +0200)
(cherry picked from commit 9b2ff836e0fb0cc82fff29577bfcf8e45e0c60ed)

pdns/pdnsutil.cc

index f27a449c081491eef98a9a2be3586c2dd26104fd..c877b1a5017e6ada843df46cb8452bcceb46ef10 100644 (file)
@@ -1394,12 +1394,6 @@ static int createZone(const DNSName &zone, const DNSName& nsname) {
     cerr << "Zone '" << zone << "' exists already" << endl;
     return EXIT_FAILURE;
   }
-  cerr<<"Creating empty zone '"<<zone<<"'"<<endl;
-  B.createDomain(zone, DomainInfo::Native, vector<ComboAddress>(), "");
-  if(!B.getDomainInfo(zone, di)) {
-    cerr << "Zone '" << zone << "' was not created!" << endl;
-    return EXIT_FAILURE;
-  }
 
   DNSResourceRecord rr;
   rr.qname = zone;
@@ -1410,8 +1404,29 @@ static int createZone(const DNSName &zone, const DNSName& nsname) {
   string soa = ::arg()["default-soa-content"];
   boost::replace_all(soa, "@", zone.toStringNoDot());
   SOAData sd;
-  fillSOAData(soa, sd);
+  try {
+    fillSOAData(soa, sd);
+  }
+  catch(const std::exception& e) {
+    cerr<<"Error while parsing default-soa-content ("<<soa<<"): "<<e.what()<<endl;
+    cerr<<"Zone not created!"<<endl;
+    return EXIT_FAILURE;
+  }
+  catch(const PDNSException& pe) {
+    cerr<<"Error while parsing default-soa-content ("<<soa<<"): "<<pe.reason<<endl;
+    cerr<<"Zone not created!"<<endl;
+    return EXIT_FAILURE;
+  }
+
   rr.content = makeSOAContent(sd)->getZoneRepresentation(true);
+
+  cerr<<"Creating empty zone '"<<zone<<"'"<<endl;
+  B.createDomain(zone, DomainInfo::Native, vector<ComboAddress>(), "");
+  if(!B.getDomainInfo(zone, di)) {
+    cerr << "Zone '" << zone << "' was not created!" << endl;
+    return EXIT_FAILURE;
+  }
+
   rr.domain_id = di.id;
   di.backend->startTransaction(zone, di.id);
   di.backend->feedRecord(rr, DNSName());