]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Add ZONEMD config processing in Lua config
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 18 Jan 2022 10:12:16 +0000 (11:12 +0100)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Fri, 21 Jan 2022 11:06:01 +0000 (12:06 +0100)
pdns/rec-lua-conf.cc
pdns/recursordist/rec-zonetocache.cc
pdns/zonemd.hh

index f754a9e12212aaadd2892b492fbe45fd75082497..713740e725ef1b8912a5ed8e619577a997bcf640 100644 (file)
@@ -444,6 +444,23 @@ void loadRecursorLuaConfig(const std::string& fname, luaConfigDelayedThreads& de
         if (have.count("retryOnErrorPeriod")) {
           conf.d_retryOnError = boost::get<uint32_t>(have.at("retryOnErrorPeriod"));
         }
+        if (have.count("zonemdValidation")) {
+          string zonemdValidation = boost::get<string>(have.at("zonemdValidation"));
+          const map<string, pdns::ZoneMD::Config> nameToVal = {
+            { "ignore",  pdns::ZoneMD::Config::Ignore},
+            { "process",  pdns::ZoneMD::Config::Process},
+            { "logonly",  pdns::ZoneMD::Config::LogOnly},
+            { "required",  pdns::ZoneMD::Config::Required},
+            { "requiredWithDNSSEC",  pdns::ZoneMD::Config::RequiredWithDNSSEC},
+            { "requiredIgnoreDNSSEC",  pdns::ZoneMD::Config::RequiredIgnoreDNSSEC},
+            };
+          auto it = nameToVal.find(zonemdValidation);
+          if (it == nameToVal.end()) {
+            throw std::runtime_error(zonemdValidation + " is not a valid value for `zonemdValidation`");
+          } else {
+            conf.d_zonemd = it->second;
+          }
+        }
       }
 
       delayedThreads.ztcConfigs.push_back(conf);
index 57fc96e3fd1bb24334cc659e2c82b505cbbcff73..15d63954584b6e20cd3410d186e0a55ee262f401 100644 (file)
@@ -264,7 +264,7 @@ void ZoneData::ZoneToCache(const RecZoneToCache::Config& config, uint64_t config
     result = processLines(lines, config);
   }
 
-  if (config.d_zonemd == pdns::ZoneMD::Config::Required && result != pdns::ZoneMD::Result::OK) {
+  if (pdns::ZoneMD::validationRequired(config.d_zonemd) && result != pdns::ZoneMD::Result::OK) {
     // We do not accept NoValidationDone in this case
     throw PDNSException("ZoneMD validation failure");
     return;
index 2daeea94bdbf7e21f391ae7a473e50cbc5571f7d..6f8de71d14610f47dc7e9f81f6ca3937efa130f6 100644 (file)
@@ -60,6 +60,11 @@ public:
   void readRecord(const DNSRecord& record);
   void verify(bool& validationDone, bool& validationOK);
 
+  static bool validationRequired(Config config)
+  {
+    return config == Config::Required || config == Config::RequiredWithDNSSEC || config == Config::RequiredIgnoreDNSSEC;
+  }
+
 private:
   typedef std::pair<DNSName, QType> RRSetKey_t;
   typedef std::vector<std::shared_ptr<DNSRecordContent>> RRVector_t;