]> granicus.if.org Git - pdns/commitdiff
zone2sql: support --zone without --zone-name
authorPieter Lexis <pieter.lexis@powerdns.com>
Thu, 10 Dec 2015 15:42:40 +0000 (16:42 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Thu, 10 Dec 2015 15:42:40 +0000 (16:42 +0100)
This *does* mean that $ORIGIN must be set in the zone file.

Closes #2838

pdns/zone2sql.cc
pdns/zoneparser-tng.cc
pdns/zoneparser-tng.hh

index aef679de340b819231696e9da0d05e4dd9573dd2..b38207663ffe9d5f370033a69390ed5676e4949b 100644 (file)
@@ -431,20 +431,30 @@ try
       cerr<<"\r100% done\033\133\113"<<endl;
     }
     else {
-      DNSName zonename(::arg()["zone-name"]);
+      DNSName zonename;
+      if(!::arg()["zone-name"].empty())
+        zonename = DNSName(::arg()["zone-name"]);
+
       ZoneParserTNG zpt(zonefile, zonename);
       DNSResourceRecord rr;
       startNewTransaction();
-      emitDomain(zonename.toStringNoDot());
       string comment;
       bool seenSOA=false;
+      bool haveEmittedZone = false;
       while(zpt.get(rr, &comment))  {
        if(filterDupSOA && seenSOA && rr.qtype.getCode() == QType::SOA)
          continue;
        if(rr.qtype.getCode() == QType::SOA)
          seenSOA=true;
+        if(!haveEmittedZone && !zpt.getZoneName().empty()){
+          emitDomain(zpt.getZoneName().toStringNoDot());
+          haveEmittedZone = true;
+        } else {
+          // We have no zonename yet, don't emit
+          continue;
+        }
 
-        emitRecord(zonename.toStringNoDot(), rr.qname, rr.qtype.getName(), rr.content, rr.ttl, comment);
+        emitRecord(zpt.getZoneName().toStringNoDot(), rr.qname, rr.qtype.getName(), rr.content, rr.ttl, comment);
       }
       num_domainsdone=1;
     }
index 80f8bab20a135a1d2eff9aff3d0d89325b814b9f..c5d70cd10661a5308edabf07f970b04a0347c006 100644 (file)
@@ -237,6 +237,11 @@ bool findAndElide(string& line, char c)
   return false;
 }
 
+DNSName ZoneParserTNG::getZoneName()
+{
+  return d_zonename;
+}
+
 string ZoneParserTNG::getLineOfFile()
 {
   if (d_zonedata.size() > 0)
index 2993c9fd30990de9f9083d79bafa4dd22989f173..94fea3b2e8283ba06307a2c0492f59cf8d00c98f 100644 (file)
@@ -39,6 +39,7 @@ public:
   bool get(DNSResourceRecord& rr, std::string* comment=0);
   typedef runtime_error exception;
   typedef deque<pair<string::size_type, string::size_type> > parts_t;
+  DNSName getZoneName();
   string getLineOfFile();
 private:
   bool getLine();