From 65a0789fc16dd41d24c226cce46c04e418815c1a Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Tue, 20 Aug 2024 13:04:11 +0200 Subject: [PATCH] dnsdist: Return a valid unix timestamp for Dynamic Block's `until` We internally use a timestamp obtained via `CLOCK_MONOTONIC` which is quite useless to an external observer, so convert it to a normal unix timestamp in the Lua accessor. (cherry picked from commit 8cb758ae0c791866f8a6a4f76e41470754d04316) --- pdns/dnsdist-lua-inspection.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pdns/dnsdist-lua-inspection.cc b/pdns/dnsdist-lua-inspection.cc index ba7dfdb92d..05b37978aa 100644 --- a/pdns/dnsdist-lua-inspection.cc +++ b/pdns/dnsdist-lua-inspection.cc @@ -956,7 +956,14 @@ void setupLuaInspection(LuaContext& luaCtx) /* DynBlock object accessors */ luaCtx.registerMember("reason", &DynBlock::reason); luaCtx.registerMember("domain", &DynBlock::domain); - luaCtx.registerMember("until", &DynBlock::until); + luaCtx.registerMember( + "until", [](const DynBlock& block) { + timespec nowMonotonic{}; + gettime(&nowMonotonic); + timespec nowRealTime{}; + gettime(&nowRealTime, true); + nowRealTime.tv_sec += (block.until.tv_sec - nowMonotonic.tv_sec); + return nowRealTime; }, [](DynBlock& block, [[maybe_unused]] timespec until) {}); luaCtx.registerMember("blocks", [](const DynBlock& block) { return block.blocks.load(); }, [](DynBlock& block, [[maybe_unused]] unsigned int blocks) { }); luaCtx.registerMember("action", &DynBlock::action); luaCtx.registerMember("warning", &DynBlock::warning); -- 2.47.3