]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
add showDynBlocks(), add way to add message for block reason
authorbert hubert <bert.hubert@netherlabs.nl>
Sun, 29 Nov 2015 20:44:08 +0000 (21:44 +0100)
committerbert hubert <bert.hubert@netherlabs.nl>
Sun, 29 Nov 2015 20:44:08 +0000 (21:44 +0100)
pdns/dnsdist-lua2.cc
pdns/dnsdist.cc
pdns/dnsdist.hh

index 435852b2b4a8b7423315b66d4ed4df34340dc05c..21c627122c1e29fa87044340be71aa8d6f48d283 100644 (file)
@@ -102,24 +102,35 @@ map<ComboAddress,int> exceedRespByterate(int rate, int seconds)
 
 void moreLua()
 {
+  typedef NetmaskTree<string> nmts_t;
   g_lua.writeFunction("newCA", [](const std::string& name) { return ComboAddress(name); });
-  g_lua.writeFunction("newNMG", []() { return NetmaskGroup(); });
-  g_lua.registerFunction<void(NetmaskGroup::*)(const ComboAddress&)>("add", 
-                                                                    [](NetmaskGroup& s, const ComboAddress& ca) { s.addMask(Netmask(ca)); });
-
-  g_lua.writeFunction("setDynBlockNMG", [](const NetmaskGroup& nmg) {
+  g_lua.writeFunction("newNMG", []() { return nmts_t(); });
+  g_lua.registerFunction<void(nmts_t::*)(const ComboAddress&, const std::string&)>("add", 
+                                                              [](nmts_t& s, const ComboAddress& ca, const std::string& msg) 
+                                                              { 
+                                                                s.insert(Netmask(ca)).second=msg; 
+                                                              });
+
+  g_lua.writeFunction("setDynBlockNMG", [](const nmts_t& nmg) {
       g_dynblockNMG.setState(nmg);
     });
 
-  g_lua.registerFunction<void(NetmaskGroup::*)(const map<ComboAddress,int>&)>("add", 
-                                                                             [](NetmaskGroup& s, const map<ComboAddress,int>& m) { 
+  g_lua.writeFunction("showDynBlocks", []() {
+      auto slow = g_dynblockNMG.getCopy();
+      for(const auto& e: slow) {
+       g_outputBuffer+=e->first.toString()+"\t"+e->second+"\n";
+      }
+    });
+
+  g_lua.registerFunction<void(nmts_t::*)(const map<ComboAddress,int>&, const std::string&)>("add", 
+                                                                       [](nmts_t& s, const map<ComboAddress,int>& m, const std::string& msg) { 
                                                                                for(const auto& capair : m)
-                                                                                 s.addMask(Netmask(capair.first)); 
+                                                                                 s.insert(Netmask(capair.first)).second=msg;
                                                                              });
 
 
-  g_lua.registerFunction<bool(NetmaskGroup::*)(const ComboAddress&)>("match", 
-                                                                    [](NetmaskGroup& s, const ComboAddress& ca) { return s.match(ca); });
+  g_lua.registerFunction<bool(nmts_t::*)(const ComboAddress&)>("match", 
+                                                                    [](nmts_t& s, const ComboAddress& ca) { return s.match(ca); });
 
   g_lua.writeFunction("exceedServfails", [](unsigned int rate, int seconds) {
       return exceedRCode(rate, seconds, RCode::ServFail);
index 763bbfbbd7851dffa28d63780ae1a5ac4e737c46..3c05ffdad83e72dfcb41215ead519e3953d6f576 100644 (file)
@@ -101,7 +101,7 @@ GlobalStateHolder<vector<pair<std::shared_ptr<DNSRule>, std::shared_ptr<DNSActio
 Rings g_rings;
 
 GlobalStateHolder<servers_t> g_dstates;
-GlobalStateHolder<NetmaskGroup> g_dynblockNMG;
+GlobalStateHolder<NetmaskTree<string>> g_dynblockNMG;
 int g_tcpRecvTimeout{2};
 int g_tcpSendTimeout{2};
 
index 0e97c7b544216c3b6674c663f3316f36d4c9bccb..7d358fbaeccb4efe300cd5c6d3e6bff1f17cec86 100644 (file)
@@ -13,7 +13,7 @@
 void* carbonDumpThread();
 uint64_t uptimeOfProcess(const std::string& str);
 
-extern GlobalStateHolder<NetmaskGroup> g_dynblockNMG;
+extern GlobalStateHolder<NetmaskTree<string>> g_dynblockNMG;
 struct DNSDistStats
 {
   using stat_t=std::atomic<uint64_t>; // aww yiss ;-)