From: Remi Gacogne Date: Fri, 1 Dec 2017 18:23:01 +0000 (+0100) Subject: dnsdist: Add missing LuaAction and LuaResponseAction X-Git-Tag: dnsdist-1.3.0~190^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a2ff35e3c3fbca200350a2b3c3965bd12b415c48;p=pdns dnsdist: Add missing LuaAction and LuaResponseAction --- diff --git a/pdns/dnsdist-lua.cc b/pdns/dnsdist-lua.cc index 571c78a08..74dbad58e 100644 --- a/pdns/dnsdist-lua.cc +++ b/pdns/dnsdist-lua.cc @@ -790,6 +790,11 @@ vector> setupLua(bool client, const std::string& confi }); }); + g_lua.writeFunction("LuaAction", [](LuaAction::func_t func) { + setLuaSideEffect(); + return std::shared_ptr(new LuaAction(func)); + }); + g_lua.writeFunction("addLuaResponseAction", [](luadnsrule_t var, LuaResponseAction::func_t func) { setLuaSideEffect(); auto rule=makeRule(var); @@ -799,6 +804,11 @@ vector> setupLua(bool client, const std::string& confi }); }); + g_lua.writeFunction("LuaResponseAction", [](LuaResponseAction::func_t func) { + setLuaSideEffect(); + return std::shared_ptr(new LuaResponseAction(func)); + }); + g_lua.writeFunction("NoRecurseAction", []() { return std::shared_ptr(new NoRecurseAction); }); diff --git a/pdns/dnsdistdist/docs/rules-actions.rst b/pdns/dnsdistdist/docs/rules-actions.rst index 64f7b7fc8..7e1e6e3fe 100644 --- a/pdns/dnsdistdist/docs/rules-actions.rst +++ b/pdns/dnsdistdist/docs/rules-actions.rst @@ -651,6 +651,22 @@ The following actions exist. :param bool append: Append to the log. Default false :param bool buffered: Use buffered I/O. default true +.. function:: LuaAction(function) + + Invoke a Lua function that accepts a :class:`DNSQuestion`. + + The ``function`` should return a :ref:`DNSAction`. + + :param string function: the name of a Lua function + +.. function:: LuaResponseAction(function) + + Invoke a Lua function that accepts a :class:`DNSResponse`. + + The ``function`` should return a :ref:`DNSResponseAction`. + + :param string function: the name of a Lua function + .. function:: MacAddrAction(option) Add the source MAC address to the query as EDNS0 option ``option``. diff --git a/regression-tests.dnsdist/test_Advanced.py b/regression-tests.dnsdist/test_Advanced.py index 9fbb1b877..6583155a2 100644 --- a/regression-tests.dnsdist/test_Advanced.py +++ b/regression-tests.dnsdist/test_Advanced.py @@ -1196,7 +1196,7 @@ class TestAdvancedLuaDO(DNSDistTest): end return DNSAction.None, "" end - addLuaAction(AllRule(), nxDOLua) + addAction(AllRule(), LuaAction(nxDOLua)) newServer{address="127.0.0.1:%s"} """ @@ -1249,7 +1249,7 @@ class TestAdvancedLuaRefused(DNSDistTest): function refuse(dq) return DNSAction.Refused, "" end - addLuaAction(AllRule(), refuse) + addAction(AllRule(), LuaAction(refuse)) newServer{address="127.0.0.1:%s"} """ @@ -1288,7 +1288,7 @@ class TestAdvancedLuaTruncated(DNSDistTest): end return DNSAction.None, "" end - addLuaAction(AllRule(), trunc) + addAction(AllRule(), LuaAction(trunc)) newServer{address="127.0.0.1:%s"} """ @@ -1455,7 +1455,7 @@ class TestAdvancedGetLocalPort(DNSDistTest): local port = dq.localaddr:getPort() return DNSAction.Spoof, "port-was-"..port..".local-port.advanced.tests.powerdns.com." end - addLuaAction("local-port.advanced.tests.powerdns.com.", answerBasedOnLocalPort) + addAction("local-port.advanced.tests.powerdns.com.", LuaAction(answerBasedOnLocalPort)) newServer{address="127.0.0.1:%s"} """ @@ -1489,7 +1489,7 @@ class TestAdvancedGetLocalPortOnAnyBind(DNSDistTest): local port = dq.localaddr:getPort() return DNSAction.Spoof, "port-was-"..port..".local-port-any.advanced.tests.powerdns.com." end - addLuaAction("local-port-any.advanced.tests.powerdns.com.", answerBasedOnLocalPort) + addAction("local-port-any.advanced.tests.powerdns.com.", LuaAction(answerBasedOnLocalPort)) newServer{address="127.0.0.1:%s"} """ _dnsDistListeningAddr = "0.0.0.0" diff --git a/regression-tests.dnsdist/test_Caching.py b/regression-tests.dnsdist/test_Caching.py index a46a40f72..175d4166c 100644 --- a/regression-tests.dnsdist/test_Caching.py +++ b/regression-tests.dnsdist/test_Caching.py @@ -14,7 +14,7 @@ class TestCaching(DNSDistTest): dq.skipCache = true return DNSAction.None, "" end - addLuaAction("nocachevialua.cache.tests.powerdns.com.", skipViaLua) + addAction("nocachevialua.cache.tests.powerdns.com.", LuaAction(skipViaLua)) newServer{address="127.0.0.1:%s"} """ diff --git a/regression-tests.dnsdist/test_EdnsClientSubnet.py b/regression-tests.dnsdist/test_EdnsClientSubnet.py index d537e86e9..747837f65 100644 --- a/regression-tests.dnsdist/test_EdnsClientSubnet.py +++ b/regression-tests.dnsdist/test_EdnsClientSubnet.py @@ -564,7 +564,7 @@ class TestECSDisabledByRuleOrLua(DNSDistTest): dq.useECS = false return DNSAction.None, "" end - addLuaAction("disabledvialua.ecsrules.tests.powerdns.com.", disableECSViaLua) + addAction("disabledvialua.ecsrules.tests.powerdns.com.", LuaAction(disableECSViaLua)) """ def testWithECSNotDisabled(self): @@ -672,7 +672,7 @@ class TestECSOverrideSetByRuleOrLua(DNSDistTest): dq.ecsOverride = true return DNSAction.None, "" end - addLuaAction("overriddenvialua.ecsrules.tests.powerdns.com.", overrideECSViaLua) + addAction("overriddenvialua.ecsrules.tests.powerdns.com.", LuaAction(overrideECSViaLua)) """ def testWithECSOverrideNotSet(self): @@ -786,7 +786,7 @@ class TestECSPrefixLengthSetByRuleOrLua(DNSDistTest): dq.ecsPrefixLength = 32 return DNSAction.None, "" end - addLuaAction("overriddenprefixlengthvialua.ecsrules.tests.powerdns.com.", overrideECSPrefixLengthViaLua) + addAction("overriddenprefixlengthvialua.ecsrules.tests.powerdns.com.", LuaAction(overrideECSPrefixLengthViaLua)) """ def testWithECSPrefixLengthNotOverridden(self): diff --git a/regression-tests.dnsdist/test_Protobuf.py b/regression-tests.dnsdist/test_Protobuf.py index e740e34b8..8eb55360e 100644 --- a/regression-tests.dnsdist/test_Protobuf.py +++ b/regression-tests.dnsdist/test_Protobuf.py @@ -115,7 +115,7 @@ class TestProtobuf(DNSDistTest): newServer{address="127.0.0.1:%s", useClientSubnet=true} rl = newRemoteLogger('127.0.0.1:%s') - addLuaAction(AllRule(), alterLuaFirst) -- Add tags to DNSQuery first + addAction(AllRule(), LuaAction(alterLuaFirst)) -- Add tags to DNSQuery first addAction(AllRule(), RemoteLogAction(rl, alterProtobufQuery)) -- Send protobuf message before lookup diff --git a/regression-tests.dnsdist/test_Responses.py b/regression-tests.dnsdist/test_Responses.py index 1982b60d5..a1f907292 100644 --- a/regression-tests.dnsdist/test_Responses.py +++ b/regression-tests.dnsdist/test_Responses.py @@ -168,7 +168,7 @@ class TestResponseRuleEditTTL(DNSDistTest): return DNSAction.None, "" end - addLuaResponseAction(AllRule(), editTTLFunc) + addResponseAction(AllRule(), LuaResponseAction(editTTLFunc)) """ def testTTLEdited(self): diff --git a/regression-tests.dnsdist/test_Spoofing.py b/regression-tests.dnsdist/test_Spoofing.py index ad67dcae6..f1f4c5ab7 100644 --- a/regression-tests.dnsdist/test_Spoofing.py +++ b/regression-tests.dnsdist/test_Spoofing.py @@ -281,8 +281,8 @@ class TestSpoofingLuaSpoof(DNSDistTest): function spoof2rule(dq) return DNSAction.Spoof, "spoofedcname.spoofing.tests.powerdns.com." end - addLuaAction("luaspoof1.spoofing.tests.powerdns.com.", spoof1rule) - addLuaAction("luaspoof2.spoofing.tests.powerdns.com.", spoof2rule) + addAction("luaspoof1.spoofing.tests.powerdns.com.", LuaAction(spoof1rule)) + addAction("luaspoof2.spoofing.tests.powerdns.com.", LuaAction(spoof2rule)) newServer{address="127.0.0.1:%s"} """ @@ -407,7 +407,7 @@ class TestSpoofingLuaWithStatistics(DNSDistTest): return DNSAction.Spoof, "192.0.2.0" end end - addLuaAction("luaspoofwithstats.spoofing.tests.powerdns.com.", spoof1rule) + addAction("luaspoofwithstats.spoofing.tests.powerdns.com.", LuaAction(spoof1rule)) newServer{address="127.0.0.1:%s"} """