From acf86c7a20e69db846be7613169f643fc8b04b70 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Wed, 5 Feb 2020 10:07:08 +0100 Subject: [PATCH] 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. --- pdns/dnsdist-lua-bindings-dnsquestion.cc | 39 ++++++++++++++++++++++++ 1 file changed, 39 insertions(+) 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) { -- 2.47.2