From: Otto Moerbeek Date: Mon, 6 May 2024 15:04:01 +0000 (+0200) Subject: Explain two somewhat puzzling pieces of code in comments X-Git-Tag: rec-5.1.0-alpha1~9^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=266dcbcebcacc5492bb6de4431c38ff7b7e58236;p=thirdparty%2Fpdns.git Explain two somewhat puzzling pieces of code in comments --- diff --git a/pdns/recursordist/settings/cxxsupport.cc b/pdns/recursordist/settings/cxxsupport.cc index 6f206a3d7a..38c3553de8 100644 --- a/pdns/recursordist/settings/cxxsupport.cc +++ b/pdns/recursordist/settings/cxxsupport.cc @@ -634,7 +634,10 @@ std::string pdns::settings::rec::defaultsToYaml() // Should be generated auto def = [&](const string& section, const string& name, const string& type) { pdns::rust::settings::rec::Value rustvalue{}; - rustvalue.u64_val = 24; // XXX + // Dirty hack: trustanchorfile_interval is the only u64 value, set the right default for it. + // All for all other values below, the default is either an empty string or an empty vector. + // Once we get more u64 values below with different default values this hack no longer works. + rustvalue.u64_val = 24; map.emplace(std::pair{std::pair{section, name}, pdns::rust::settings::rec::OldStyle{section, name, name, type, rustvalue, false}}); }; def("dnssec", "trustanchors", "Vec"); @@ -1062,6 +1065,13 @@ namespace { void fromRustToLuaConfig(const pdns::rust::settings::rec::Dnssec& dnssec, LuaConfigItems& luaConfig) { + // This function fills a luaConfig equivalent to the given YAML config, assuming luaConfig has + // it's default content. The docs say: "If the sequence contains an entry for the root zone, the + // default root zone trust anchor is not included." By default, a newly created luaConfig has the + // TAs for the root in it. If the YAML config has an entry for these, clear them from + // luaConfig. Otherwise the default TA's would remain even if the YAML config is trying to set + // them. This code actually clears all of the TAs in luaConfig mentioned in the YAML config, but + // as the luaConfig only contains the root TAs, this is equivalent (but not *very* efficient). for (const auto& trustAnchor : dnssec.trustanchors) { auto name = DNSName(std::string(trustAnchor.name)); luaConfig.dsAnchors.erase(name);