From: bert hubert Date: Sun, 29 Nov 2015 20:44:08 +0000 (+0100) Subject: add showDynBlocks(), add way to add message for block reason X-Git-Tag: dnsdist-1.0.0-alpha1~170^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6da5d9888f8da8097dc52b8fd03fccc15fc71dcf;p=thirdparty%2Fpdns.git add showDynBlocks(), add way to add message for block reason --- diff --git a/pdns/dnsdist-lua2.cc b/pdns/dnsdist-lua2.cc index 435852b2b4..21c627122c 100644 --- a/pdns/dnsdist-lua2.cc +++ b/pdns/dnsdist-lua2.cc @@ -102,24 +102,35 @@ map exceedRespByterate(int rate, int seconds) void moreLua() { + typedef NetmaskTree nmts_t; g_lua.writeFunction("newCA", [](const std::string& name) { return ComboAddress(name); }); - g_lua.writeFunction("newNMG", []() { return NetmaskGroup(); }); - g_lua.registerFunction("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("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&)>("add", - [](NetmaskGroup& s, const map& 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&, const std::string&)>("add", + [](nmts_t& s, const map& 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("match", - [](NetmaskGroup& s, const ComboAddress& ca) { return s.match(ca); }); + g_lua.registerFunction("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); diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index 763bbfbbd7..3c05ffdad8 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -101,7 +101,7 @@ GlobalStateHolder, std::shared_ptr g_dstates; -GlobalStateHolder g_dynblockNMG; +GlobalStateHolder> g_dynblockNMG; int g_tcpRecvTimeout{2}; int g_tcpSendTimeout{2}; diff --git a/pdns/dnsdist.hh b/pdns/dnsdist.hh index 0e97c7b544..7d358fbaec 100644 --- a/pdns/dnsdist.hh +++ b/pdns/dnsdist.hh @@ -13,7 +13,7 @@ void* carbonDumpThread(); uint64_t uptimeOfProcess(const std::string& str); -extern GlobalStateHolder g_dynblockNMG; +extern GlobalStateHolder> g_dynblockNMG; struct DNSDistStats { using stat_t=std::atomic; // aww yiss ;-)