From: Remi Gacogne Date: Wed, 5 Feb 2020 09:07:08 +0000 (+0100) Subject: dnsdist: Add getTag()/setTag() Lua bindings for a DNSResponse X-Git-Tag: auth-4.3.0-beta2~41^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F8782%2Fhead;p=thirdparty%2Fpdns.git dnsdist: Add getTag()/setTag() Lua bindings for a DNSResponse LuaWrapper doesn't support inheritance, so even though DNSResponse inherits from the DNSQuestion object the bindings are not inherited. --- diff --git a/pdns/dnsdist-lua-bindings-dnsquestion.cc b/pdns/dnsdist-lua-bindings-dnsquestion.cc index fee1626cb8..1b4709cbfc 100644 --- a/pdns/dnsdist-lua-bindings-dnsquestion.cc +++ b/pdns/dnsdist-lua-bindings-dnsquestion.cc @@ -96,6 +96,7 @@ void setupLuaBindingsDNSQuestion() } #endif /* HAVE_NET_SNMP */ }); + g_lua.registerFunction("setTag", [](DNSQuestion& dq, const std::string& strLabel, const std::string& strValue) { if(dq.qTag == nullptr) { dq.qTag = std::make_shared(); @@ -169,6 +170,44 @@ void setupLuaBindingsDNSQuestion() } return true; }); + + g_lua.registerFunction("setTag", [](DNSResponse& dr, const std::string& strLabel, const std::string& strValue) { + if(dr.qTag == nullptr) { + dr.qTag = std::make_shared(); + } + dr.qTag->insert({strLabel, strValue}); + }); + + g_lua.registerFunction>)>("setTagArray", [](DNSResponse& dr, const vector>&tags) { + if (!dr.qTag) { + dr.qTag = std::make_shared(); + } + + for (const auto& tag : tags) { + dr.qTag->insert({tag.first, tag.second}); + } + }); + g_lua.registerFunction("getTag", [](const DNSResponse& dr, const std::string& strLabel) { + if (!dr.qTag) { + return string(); + } + + std::string strValue; + const auto it = dr.qTag->find(strLabel); + if (it == dr.qTag->cend()) { + return string(); + } + return it->second; + }); + g_lua.registerFunction("getTagArray", [](const DNSResponse& dr) { + if (!dr.qTag) { + QTag empty; + return empty; + } + + return *dr.qTag; + }); + g_lua.registerFunction("sendTrap", [](const DNSResponse& dr, boost::optional reason) { #ifdef HAVE_NET_SNMP if (g_snmpAgent && g_snmpTrapsEnabled) {