]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
implement getCA() for faster & native IP address extraction in Lua scripts plus docum... 3726/head
authorbert hubert <bert.hubert@powerdns.com>
Fri, 15 Apr 2016 08:23:49 +0000 (10:23 +0200)
committerbert hubert <bert.hubert@powerdns.com>
Fri, 15 Apr 2016 08:23:49 +0000 (10:23 +0200)
docs/markdown/recursor/scripting.md
pdns/lua-recursor4.cc

index 0d1fb0b78e52c1aa8c328866905b7b1be61e9c5a..7bdda0a96405e7f4ea36d2e1898d8446c405081c 100644 (file)
@@ -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)
index 3052e3e6dc9dc9e2636fc5c7ddc27c5b6778ee26..adc1c49840aaa4ec6ddb2e9393c37c421fec78b5 100644 (file)
@@ -285,6 +285,13 @@ RecursorLua4::RecursorLua4(const std::string& fname)
                           nmg.addMask(mask);
                         });
 
+  d_lw->registerFunction<void(NetmaskGroup::*)(const vector<pair<unsigned int, std::string>>&)>("addMasks", [](NetmaskGroup&nmg, const vector<pair<unsigned int, std::string>>& masks)
+                        {
+                           for(const auto& mask: masks) 
+                             nmg.addMask(mask.second);
+                        });
+
+
   d_lw->registerFunction("match", (bool (NetmaskGroup::*)(const ComboAddress&) const)&NetmaskGroup::match);
   d_lw->registerFunction<string(DNSName::*)()>("toString", [](const DNSName&dn ) { return dn.toString(); });
   d_lw->registerFunction<string(DNSName::*)()>("toStringNoDot", [](const DNSName&dn ) { return dn.toStringNoDot(); });
@@ -313,6 +320,15 @@ RecursorLua4::RecursorLua4(const std::string& fname)
 
   
   d_lw->registerFunction<string(DNSRecord::*)()>("getContent", [](const DNSRecord& dr) { return dr.d_content->getZoneRepresentation(); });
+  d_lw->registerFunction<boost::optional<ComboAddress>(DNSRecord::*)()>("getCA", [](const DNSRecord& dr) { 
+      boost::optional<ComboAddress> ret;
+
+      if(auto rec = std::dynamic_pointer_cast<ARecordContent>(dr.d_content))
+        ret=rec->getCA(53);
+      else if(auto rec = std::dynamic_pointer_cast<AAAARecordContent>(dr.d_content))
+        ret=rec->getCA(53);
+      return ret;
+    });
 
 
   d_lw->registerFunction<void(DNSRecord::*)(const std::string&)>("changeContent", [](DNSRecord& dr, const std::string& newContent) { dr.d_content = shared_ptr<DNSRecordContent>(DNSRecordContent::mastermake(dr.d_type, 1, newContent)); });