]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
delete existing matching zones during (re)import
authorJamie (Bear) Murphy <git@jam.ie>
Wed, 16 Jul 2025 14:09:40 +0000 (15:09 +0100)
committerJamie (Bear) Murphy <git@jam.ie>
Wed, 16 Jul 2025 14:09:40 +0000 (15:09 +0100)
adds functionality to zone import script to have a delete statement. useful for testing / retesting zone imports

pdns/zone2sql.cc

index aff21524e129dc52d4186b4c79b36bf92cda1c19..82287349999a3d5a8d7f5a0537afb598060d1865 100644 (file)
@@ -114,6 +114,9 @@ static void startNewTransaction()
 static void emitDomain(const ZoneName& domain, const vector<ComboAddress>* primaries = nullptr)
 {
   string iDomain = domain.toStringRootDot();
+  if (::arg().mustDo("delete-matching-domains")) {
+    cout << "DELETE FROM domains WHERE name=" << toLower(sqlstr(iDomain)) << ";" << endl;
+  }
   if (!::arg().mustDo("secondary")) {
     cout<<"insert into domains (name,type) values ("<<toLower(sqlstr(iDomain))<<",'NATIVE');"<<endl;
   }
@@ -209,6 +212,7 @@ try
     ::arg().setSwitch("transactions","If target SQL supports it, use transactions")="no";
     ::arg().setSwitch("on-error-resume-next","Continue after errors")="no";
     ::arg().setSwitch("filter-duplicate-soa","Filter second SOA in zone")="yes";
+    ::arg().setSwitch("delete-matching-domains", "Delete existing matching domains before emitting new domain")="no";
     ::arg().set("zone","Zonefile to parse")="";
     ::arg().set("zone-name","Specify an $ORIGIN in case it is not present")="";
     ::arg().set("named-conf","Bind 8/9 named.conf to parse")="";