From: Remi Gacogne Date: Tue, 30 Aug 2016 13:27:00 +0000 (+0200) Subject: rec: Fix accessing an empty policyCustom, policyName from Lua X-Git-Tag: rec-4.0.3~4^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F4418%2Fhead;p=thirdparty%2Fpdns.git rec: Fix accessing an empty policyCustom, policyName from Lua Reported by @42wim (thanks!). (cherry picked from commit 98c28a684f92c052bd7fb2e4a0eb0b831ac563de) --- diff --git a/pdns/lua-recursor4.cc b/pdns/lua-recursor4.cc index 81525eef3a..47ba21a178 100644 --- a/pdns/lua-recursor4.cc +++ b/pdns/lua-recursor4.cc @@ -373,14 +373,24 @@ RecursorLua4::RecursorLua4(const std::string& fname) d_lw->registerMember("udpCallback", &DNSQuestion::udpCallback); d_lw->registerMember("wantsRPZ", &DNSQuestion::wantsRPZ); d_lw->registerMember("appliedPolicy", &DNSQuestion::appliedPolicy); - d_lw->registerMember("policyName", &DNSFilterEngine::Policy::d_name); + d_lw->registerMember("policyName", + [](const DNSFilterEngine::Policy& pol) -> std::string { + if(pol.d_name) + return *pol.d_name; + return std::string(); + }, + [](DNSFilterEngine::Policy& pol, const std::string& name) { + pol.d_name = std::make_shared(name); + }); d_lw->registerMember("policyKind", &DNSFilterEngine::Policy::d_kind); d_lw->registerMember("policyTTL", &DNSFilterEngine::Policy::d_ttl); - d_lw->registerMember("policyCustom", - [](const DNSFilterEngine::Policy& pol) -> string { - return pol.d_custom->getZoneRepresentation(); + d_lw->registerMember("policyCustom", + [](const DNSFilterEngine::Policy& pol) -> std::string { + if(pol.d_custom) + return pol.d_custom->getZoneRepresentation(); + return std::string(); }, - [](DNSFilterEngine::Policy& pol, string content) { + [](DNSFilterEngine::Policy& pol, const std::string& content) { // Only CNAMES for now, when we ever add a d_custom_type, there will be pain pol.d_custom = shared_ptr(DNSRecordContent::mastermake(QType::CNAME, 1, content)); }