]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add a dynamic block rules group register
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 24 Dec 2024 13:48:35 +0000 (14:48 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 16 Jan 2025 08:50:24 +0000 (09:50 +0100)
pdns/dnsdistdist/dnsdist-dynblocks.cc
pdns/dnsdistdist/dnsdist-dynblocks.hh
pdns/dnsdistdist/dnsdist.cc

index 7912689986f92e12b56561c4f097a3014e76053c..9fd8125d3c35b4fb7ec6356f4423371014add3bf 100644 (file)
@@ -1039,6 +1039,24 @@ void clearSuffixDynamicRules()
   setSuffixDynamicRules(std::move(emptySMT));
 }
 
+LockGuarded<std::vector<std::shared_ptr<DynBlockRulesGroup>>> s_registeredDynamicBlockGroups;
+
+void registerGroup(std::shared_ptr<DynBlockRulesGroup>& 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 */
index 7c240f5fd26ca1362b74f1c8aece1863aa3dc73a..7f93216d3f5aa2aabba3802b81d7e0f381eea16f 100644 (file)
@@ -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<DynBlockRulesGroup>& group);
+void runRegisteredGroups(LuaContext& luaCtx);
 }
 #endif /* DISABLE_DYNBLOCKS */
index 088f8fe46e1666603c2a37c0282d85090763ea8b..6fb77dcaf101d2fbce05079a44973bcaf47aa113 100644 (file)
@@ -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) {