From: Ensar Sarajčić Date: Wed, 5 Feb 2025 19:03:42 +0000 (+0100) Subject: Fix `DnstapLogAction` and `DnstapLogResponseAction` in YAML config X-Git-Tag: dnsdist-2.0.0-alpha1~111^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=729b7ee8f5c8d24ae6067e7ffc0f6ca405b34621;p=thirdparty%2Fpdns.git Fix `DnstapLogAction` and `DnstapLogResponseAction` in YAML config There was not option of having no alter function defined, even though it is expected by config. If it wasn't defined, it passed an invalid alter function into the action. This makes the alter function optional and properly checks if it was found in configuration. --- diff --git a/pdns/dnsdistdist/dnsdist-configuration-yaml.cc b/pdns/dnsdistdist/dnsdist-configuration-yaml.cc index 56bac8b462..d07009f9b6 100644 --- a/pdns/dnsdistdist/dnsdist-configuration-yaml.cc +++ b/pdns/dnsdistdist/dnsdist-configuration-yaml.cc @@ -1435,9 +1435,12 @@ std::shared_ptr getDnstapLogAction(const DnstapLogActionConfig if (!logger && !(dnsdist::configuration::yaml::s_inClientMode || dnsdist::configuration::yaml::s_inConfigCheckMode)) { throw std::runtime_error("Unable to find the dnstap logger named '" + std::string(config.logger_name) + "'"); } + boost::optional alterFuncHolder; dnsdist::actions::DnstapAlterFunction alterFunc; - dnsdist::configuration::yaml::getLuaFunctionFromConfiguration(alterFunc, config.alter_function_name, config.alter_function_code, config.alter_function_file, "dnstap log action"); - auto action = dnsdist::actions::getDnstapLogAction(std::string(config.identity), std::move(logger), std::move(alterFunc)); + if (dnsdist::configuration::yaml::getLuaFunctionFromConfiguration(alterFunc, config.alter_function_name, config.alter_function_code, config.alter_function_file, "dnstap log action")) { + alterFuncHolder = std::move(alterFunc); + } + auto action = dnsdist::actions::getDnstapLogAction(std::string(config.identity), std::move(logger), alterFuncHolder ? std::move(*alterFuncHolder) : std::optional()); return newDNSActionWrapper(std::move(action), config.name); #endif } @@ -1451,9 +1454,12 @@ std::shared_ptr getDnstapLogResponseAction(const Dnsta if (!logger && !(dnsdist::configuration::yaml::s_inClientMode || dnsdist::configuration::yaml::s_inConfigCheckMode)) { throw std::runtime_error("Unable to find the dnstap logger named '" + std::string(config.logger_name) + "'"); } + boost::optional alterFuncHolder; dnsdist::actions::DnstapAlterResponseFunction alterFunc; - dnsdist::configuration::yaml::getLuaFunctionFromConfiguration(alterFunc, config.alter_function_name, config.alter_function_code, config.alter_function_file, "dnstap log response action"); - auto action = dnsdist::actions::getDnstapLogResponseAction(std::string(config.identity), std::move(logger), std::move(alterFunc)); + if (dnsdist::configuration::yaml::getLuaFunctionFromConfiguration(alterFunc, config.alter_function_name, config.alter_function_code, config.alter_function_file, "dnstap log response action")) { + alterFuncHolder = std::move(alterFunc); + } + auto action = dnsdist::actions::getDnstapLogResponseAction(std::string(config.identity), std::move(logger), alterFuncHolder ? std::move(*alterFuncHolder) : std::optional()); return newDNSResponseActionWrapper(std::move(action), config.name); #endif }