From 7d5f094a9e9099c04bc36bea0021783899516d98 Mon Sep 17 00:00:00 2001 From: bert hubert Date: Fri, 15 Apr 2016 10:23:49 +0200 Subject: [PATCH] implement getCA() for faster & native IP address extraction in Lua scripts plus document and implement faster way of loading large amounts of netmasks from file. --- docs/markdown/recursor/scripting.md | 3 ++- pdns/lua-recursor4.cc | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/markdown/recursor/scripting.md b/docs/markdown/recursor/scripting.md index 0d1fb0b78e..7bdda0a964 100644 --- a/docs/markdown/recursor/scripting.md +++ b/docs/markdown/recursor/scripting.md @@ -202,7 +202,8 @@ IP addresses are passed to Lua in native format. They can be matched against net ``` nmg = newNMG() nmg:addMask("127.0.0.0/8") -nmg:addMask({"213.244.168.0/24", "130.161.0.0/16"}) +nmg:addMasks({"213.244.168.0/24", "130.161.0.0/16"}) +nmg:addMasks(dofile("bad.ips")) -- contains return {"ip1","ip2"..} if nmg:match(dq.remote) then print("Intercepting query from ", dq.remote) diff --git a/pdns/lua-recursor4.cc b/pdns/lua-recursor4.cc index 3052e3e6dc..adc1c49840 100644 --- a/pdns/lua-recursor4.cc +++ b/pdns/lua-recursor4.cc @@ -285,6 +285,13 @@ RecursorLua4::RecursorLua4(const std::string& fname) nmg.addMask(mask); }); + d_lw->registerFunction>&)>("addMasks", [](NetmaskGroup&nmg, const vector>& masks) + { + for(const auto& mask: masks) + nmg.addMask(mask.second); + }); + + d_lw->registerFunction("match", (bool (NetmaskGroup::*)(const ComboAddress&) const)&NetmaskGroup::match); d_lw->registerFunction("toString", [](const DNSName&dn ) { return dn.toString(); }); d_lw->registerFunction("toStringNoDot", [](const DNSName&dn ) { return dn.toStringNoDot(); }); @@ -313,6 +320,15 @@ RecursorLua4::RecursorLua4(const std::string& fname) d_lw->registerFunction("getContent", [](const DNSRecord& dr) { return dr.d_content->getZoneRepresentation(); }); + d_lw->registerFunction(DNSRecord::*)()>("getCA", [](const DNSRecord& dr) { + boost::optional ret; + + if(auto rec = std::dynamic_pointer_cast(dr.d_content)) + ret=rec->getCA(53); + else if(auto rec = std::dynamic_pointer_cast(dr.d_content)) + ret=rec->getCA(53); + return ret; + }); d_lw->registerFunction("changeContent", [](DNSRecord& dr, const std::string& newContent) { dr.d_content = shared_ptr(DNSRecordContent::mastermake(dr.d_type, 1, newContent)); }); -- 2.47.2