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},
- {"requiredButIgnoreDNSSEC", pdns::ZoneMD::Config::RequiredButIgnoreDNSSEC},
- };
+ const map<string, pdns::ZoneMD::Config> nameToVal = {
+ {"ignore", pdns::ZoneMD::Config::Ignore},
+ {"process", pdns::ZoneMD::Config::Process},
+ {"required", pdns::ZoneMD::Config::Required},
+ };
+ if (have.count("zonemd")) {
+ string zonemdValidation = boost::get<string>(have.at("zonemd"));
auto it = nameToVal.find(zonemdValidation);
if (it == nameToVal.end()) {
throw std::runtime_error(zonemdValidation + " is not a valid value for `zonemdValidation`");
conf.d_zonemd = it->second;
}
}
+ if (have.count("zonemdDNSSEC")) {
+ string dnssec = boost::get<string>(have.at("zonemdDNSSEC"));
+ auto it = nameToVal.find(dnssec);
+ if (it == nameToVal.end()) {
+ throw std::runtime_error(dnssec + " is not a valid value for `zonemdDNSSEC`");
+ }
+ else {
+ conf.d_dnssec = it->second;
+ }
+ }
}
lci.ztcConfigs[validZoneName] = conf;
#include "axfr-retriever.hh"
#include "validate-recursor.hh"
#include "logging.hh"
-#include "threadname.hh"
#include "rec-lua-conf.hh"
#include "zonemd.hh"
#include "validate.hh"
if (config.d_zonemd != pdns::ZoneMD::Config::Ignore) {
bool validationDone, validationSuccess;
zonemd.verify(validationDone, validationSuccess);
+ d_log->info("ZONEMD digest validation", "validationDone", Logging::Loggable(validationDone),
+ "validationSuccess", Logging::Loggable(validationSuccess));
if (!validationDone) {
return pdns::ZoneMD::Result::NoValidationDone;
}
if (config.d_zonemd != pdns::ZoneMD::Config::Ignore) {
bool validationDone, validationSuccess;
zonemd.verify(validationDone, validationSuccess);
+ d_log->info("ZONEMD digest validation", "validationDone", Logging::Loggable(validationDone),
+ "validationSuccess", Logging::Loggable(validationSuccess));
if (!validationDone) {
return pdns::ZoneMD::Result::NoValidationDone;
}
dsmap_t dsmap; // Actually a set
vState dsState = sr.getDSRecords(d_zone, dsmap, false, 0);
if (dsState != vState::Secure) {
- cerr << "getDSRecords says" << dsState << endl;
- return vState::Insecure;
+ return dsState;
}
skeyset_t dnsKeys;
result = processLines(lines, config, zonemd);
}
- if (config.d_zonemd == pdns::ZoneMD::Config::RequiredWithDNSSEC && g_dnssecmode == DNSSECMode::Off) {
+ if (config.d_dnssec == pdns::ZoneMD::Config::Required && g_dnssecmode == DNSSECMode::Off) {
throw PDNSException("ZONEMD DNSSEC validation failure: dnssec is switched of but required by ZoneToCache");
}
// Validate DNSKEYs and ZONEMD, rest of records are validated on-demand by SyncRes
- if (config.d_zonemd == pdns::ZoneMD::Config::RequiredWithDNSSEC || (g_dnssecmode != DNSSECMode::Off && config.d_zonemd != pdns::ZoneMD::Config::RequiredButIgnoreDNSSEC)) {
+ if (config.d_dnssec == pdns::ZoneMD::Config::Required || (g_dnssecmode != DNSSECMode::Off && config.d_dnssec != pdns::ZoneMD::Config::Ignore)) {
size_t zonemdCount;
auto validationStatus = dnssecValidate(zonemd, zonemdCount);
- d_log->info("ZONEMD record related DNSSEC validation done", "validationStatus", Logging::Loggable(validationStatus),
+ d_log->info("ZONEMD record related DNSSEC validation", "validationStatus", Logging::Loggable(validationStatus),
"zonemdCount", Logging::Loggable(zonemdCount));
- if (config.d_zonemd == pdns::ZoneMD::Config::RequiredWithDNSSEC || g_dnssecmode == DNSSECMode::ValidateAll) {
- if (validationStatus != vState::Secure) {
- throw PDNSException("ZONEMD required DNSSEC validation failed");
- }
+ if (config.d_dnssec == pdns::ZoneMD::Config::Required && validationStatus != vState::Secure) {
+ throw PDNSException("ZONEMD required DNSSEC validation failed");
}
if (validationStatus != vState::Secure && validationStatus != vState::Insecure) {
throw PDNSException("ZONEMD record DNSSEC Validation failed");
}
}
- if (pdns::ZoneMD::validationRequired(config.d_zonemd) && result != pdns::ZoneMD::Result::OK) {
+ if (config.d_zonemd == pdns::ZoneMD::Config::Required && result != pdns::ZoneMD::Result::OK) {
// We do not accept NoValidationDone in this case
throw PDNSException("ZONEMD digest validation failure");
return;
return;
}
- if (config.d_zonemd == pdns::ZoneMD::Config::LogOnly) {
- switch (result) {
- case pdns::ZoneMD::Result::ValidationFailure:
- d_log->info("ZONEMD digest failure (ignored)");
- break;
- case pdns::ZoneMD::Result::NoValidationDone:
- d_log->info("No ZONEMD digest validation done");
- break;
- case pdns::ZoneMD::Result::OK:
- d_log->info("ZONEMD digest validation succeeded");
- break;
- }
- }
-
// Rerun, now inserting the rrsets into the cache with associated sigs
d_now = time(nullptr);
for (const auto& [key, v] : d_all) {