]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Allow disabling '$GENERATE' in ZoneParserTNG
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 30 Oct 2019 17:24:11 +0000 (18:24 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 31 Oct 2019 09:40:35 +0000 (10:40 +0100)
pdns/zoneparser-tng.cc
pdns/zoneparser-tng.hh

index b2d88b3a940fddabf0ffb24592392cbdf15f320e..3a1bc444d35302467d765ed158d915def74cc749 100644 (file)
@@ -319,6 +319,9 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment)
       d_zonename = DNSName(makeString(d_line, parts[1]));
     }
     else if(pdns_iequals(command, "$GENERATE") && parts.size() > 2) {
+      if (!d_generateEnabled) {
+        throw exception("$GENERATE is not allowed in this zone");
+      }
       // $GENERATE 1-127 $ CNAME $.0
       string range=makeString(d_line, parts[1]);
       d_templatestep=1;
index f20845371d303b40dc4466cec9118185581aea6f..437eb14a36e8d4de828aa0c8aba9ab8aa81fc4a8 100644 (file)
@@ -41,6 +41,10 @@ public:
   DNSName getZoneName();
   string getLineOfFile(); // for error reporting purposes
   pair<string,int> getLineNumAndFile(); // idem
+  void disableGenerate()
+  {
+    d_generateEnabled = false;
+  }
   void setMaxGenerateSteps(size_t max)
   {
     d_maxGenerateSteps = max;
@@ -72,6 +76,7 @@ private:
   uint32_t d_templatecounter, d_templatestop, d_templatestep;
   bool d_havedollarttl;
   bool d_fromfile;
+  bool d_generateEnabled{true};
 };
 
 #endif