]> granicus.if.org Git - pdns/commitdiff
dnsdist: Add missing LuaAction and LuaResponseAction
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 1 Dec 2017 18:23:01 +0000 (19:23 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 1 Dec 2017 18:23:01 +0000 (19:23 +0100)
pdns/dnsdist-lua.cc
pdns/dnsdistdist/docs/rules-actions.rst
regression-tests.dnsdist/test_Advanced.py
regression-tests.dnsdist/test_Caching.py
regression-tests.dnsdist/test_EdnsClientSubnet.py
regression-tests.dnsdist/test_Protobuf.py
regression-tests.dnsdist/test_Responses.py
regression-tests.dnsdist/test_Spoofing.py

index 571c78a089f69d1cd9807db8e573d01de2df85f5..74dbad58e7e21b521716ed7d19c9b6147c875d2f 100644 (file)
@@ -790,6 +790,11 @@ vector<std::function<void(void)>> setupLua(bool client, const std::string& confi
                          });
                      });
 
+  g_lua.writeFunction("LuaAction", [](LuaAction::func_t func) {
+      setLuaSideEffect();
+      return std::shared_ptr<DNSAction>(new LuaAction(func));
+    });
+
   g_lua.writeFunction("addLuaResponseAction", [](luadnsrule_t var, LuaResponseAction::func_t func) {
       setLuaSideEffect();
       auto rule=makeRule(var);
@@ -799,6 +804,11 @@ vector<std::function<void(void)>> setupLua(bool client, const std::string& confi
         });
     });
 
+  g_lua.writeFunction("LuaResponseAction", [](LuaResponseAction::func_t func) {
+      setLuaSideEffect();
+      return std::shared_ptr<DNSResponseAction>(new LuaResponseAction(func));
+    });
+
   g_lua.writeFunction("NoRecurseAction", []() {
       return std::shared_ptr<DNSAction>(new NoRecurseAction);
     });
index 64f7b7fc8ab19902cc03eef90e733a94b0dd8c0a..7e1e6e3fe330844ea2627f635cef00c61cdb8012 100644 (file)
@@ -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``.
index 9fbb1b87702ad634ccf0cfa33ac71b8764484b9f..6583155a2a1ca47c7996636db4316a3a1e78a1e4 100644 (file)
@@ -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"
index a46a40f724ea48527423774e1b663d8e0603f9c9..175d4166c0ea64362241f01cbb7c906cdbe978d0 100644 (file)
@@ -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"}
     """
 
index d537e86e9b8fd0378bf6d8460320b4439741edd5..747837f65ff5cbbc5f8f726a8af5e85c51d8e175 100644 (file)
@@ -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):
index e740e34b812d094ac8fc66b212137e54df5298a2..8eb55360e1d914090605d0b49fed21220bf5863e 100644 (file)
@@ -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
 
index 1982b60d5bcc390697ddcbd807e7ce47af20d05a..a1f9072929c01b92beb2b17ef8317f88e963c224 100644 (file)
@@ -168,7 +168,7 @@ class TestResponseRuleEditTTL(DNSDistTest):
       return DNSAction.None, ""
     end
 
-    addLuaResponseAction(AllRule(), editTTLFunc)
+    addResponseAction(AllRule(), LuaResponseAction(editTTLFunc))
     """
 
     def testTTLEdited(self):
index ad67dcae6db0a256c33271af052881dde3f93d20..f1f4c5ab72af84655de19c31e41aa9ef9f6e3fac 100644 (file)
@@ -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"}
     """