From 91e9f1ff85437d003a6bcf6ac54f570bce39a37d Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Tue, 24 Dec 2024 14:48:35 +0100 Subject: [PATCH] dnsdist: Add a dynamic block rules group register --- pdns/dnsdistdist/dnsdist-dynblocks.cc | 18 ++++++++++++++++++ pdns/dnsdistdist/dnsdist-dynblocks.hh | 4 ++++ pdns/dnsdistdist/dnsdist.cc | 3 +++ 3 files changed, 25 insertions(+) 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) { -- 2.47.2