From 17f4d5f07e230920f57ff43480aa6a2294f1a824 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Tue, 30 Aug 2016 15:27:00 +0200 Subject: [PATCH] rec: Fix accessing an empty policyCustom, policyName from Lua Reported by @42wim (thanks!). (cherry picked from commit 98c28a684f92c052bd7fb2e4a0eb0b831ac563de) --- pdns/lua-recursor4.cc | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) 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)); } -- 2.47.2