From 8cb758ae0c791866f8a6a4f76e41470754d04316 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. --- pdns/dnsdistdist/dnsdist-lua-inspection.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pdns/dnsdistdist/dnsdist-lua-inspection.cc b/pdns/dnsdistdist/dnsdist-lua-inspection.cc index f3cef29f1e..b9828e0e8a 100644 --- a/pdns/dnsdistdist/dnsdist-lua-inspection.cc +++ b/pdns/dnsdistdist/dnsdist-lua-inspection.cc @@ -1048,7 +1048,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); -- 2.47.2