From: Remi Gacogne Date: Tue, 24 Dec 2024 13:48:35 +0000 (+0100) Subject: dnsdist: Add a dynamic block rules group register X-Git-Tag: dnsdist-2.0.0-alpha1~160^2~38 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=91e9f1ff85437d003a6bcf6ac54f570bce39a37d;p=thirdparty%2Fpdns.git dnsdist: Add a dynamic block rules group register --- diff --git a/pdns/dnsdistdist/dnsdist-dynblocks.cc b/pdns/dnsdistdist/dnsdist-dynblocks.cc index 7912689986..9fd8125d3c 100644 --- a/pdns/dnsdistdist/dnsdist-dynblocks.cc +++ b/pdns/dnsdistdist/dnsdist-dynblocks.cc @@ -1039,6 +1039,24 @@ void clearSuffixDynamicRules() setSuffixDynamicRules(std::move(emptySMT)); } +LockGuarded>> s_registeredDynamicBlockGroups; + +void registerGroup(std::shared_ptr& group) +{ + s_registeredDynamicBlockGroups.lock()->push_back(group); +} + +void runRegisteredGroups(LuaContext& luaCtx) +{ + // only used to make sure we hold the Lua context lock + (void)luaCtx; + timespec now{}; + gettime(&now); + for (auto& group : *s_registeredDynamicBlockGroups.lock()) { + group->apply(now); + } +} + } #endif /* DISABLE_DYNBLOCKS */ diff --git a/pdns/dnsdistdist/dnsdist-dynblocks.hh b/pdns/dnsdistdist/dnsdist-dynblocks.hh index 7c240f5fd2..7f93216d3f 100644 --- a/pdns/dnsdistdist/dnsdist-dynblocks.hh +++ b/pdns/dnsdistdist/dnsdist-dynblocks.hh @@ -26,6 +26,7 @@ #include "dolog.hh" #include "dnsdist-rings.hh" +#include "gettime.hh" #include "statnode.hh" extern "C" @@ -465,5 +466,8 @@ void setClientAddressDynamicRules(ClientAddressDynamicRules&& rules); void setSuffixDynamicRules(SuffixDynamicRules&& rules); void clearClientAddressDynamicRules(); void clearSuffixDynamicRules(); + +void registerGroup(std::shared_ptr& group); +void runRegisteredGroups(LuaContext& luaCtx); } #endif /* DISABLE_DYNBLOCKS */ diff --git a/pdns/dnsdistdist/dnsdist.cc b/pdns/dnsdistdist/dnsdist.cc index 088f8fe46e..6fb77dcaf1 100644 --- a/pdns/dnsdistdist/dnsdist.cc +++ b/pdns/dnsdistdist/dnsdist.cc @@ -2228,6 +2228,9 @@ static void maintThread() (*maintenanceCallback)(); } dnsdist::lua::hooks::runMaintenanceHooks(*lua); +#if !defined(DISABLE_DYNBLOCKS) + dnsdist::DynamicBlocks::runRegisteredGroups(*lua); +#endif /* DISABLE_DYNBLOCKS */ secondsToWaitLog = 0; } catch (const std::exception& e) {