namespace dnsdist::lua::hooks
{
+using MaintenanceCallback = std::function<void()>;
+using TicketsKeyAddedHook = std::function<void(const char*, size_t)>;
+
static LockGuarded<std::vector<MaintenanceCallback>> s_maintenanceHooks;
void runMaintenanceHooks(const LuaContext& context)
}
}
-void addMaintenanceCallback(const LuaContext& context, MaintenanceCallback callback)
+static void addMaintenanceCallback(const LuaContext& context, MaintenanceCallback callback)
{
(void)context;
s_maintenanceHooks.lock()->push_back(std::move(callback));
s_maintenanceHooks.lock()->clear();
}
-void setTicketsKeyAddedHook(const LuaContext& context, const TicketsKeyAddedHook& hook)
+static void setTicketsKeyAddedHook(const LuaContext& context, const TicketsKeyAddedHook& hook)
{
TLSCtx::setTicketsKeyAddedHook([hook](const std::string& key) {
try {
hook(key.c_str(), key.size());
}
catch (const std::exception& exp) {
- warnlog("Error calling the Lua hook after new tickets key has been added", exp.what());
+ warnlog("Error calling the Lua hook after new tickets key has been added: %s", exp.what());
}
});
}
namespace dnsdist::lua::hooks
{
-using MaintenanceCallback = std::function<void()>;
-using TicketsKeyAddedHook = std::function<void(const char*, size_t)>;
-
void runMaintenanceHooks(const LuaContext& context);
-void addMaintenanceCallback(const LuaContext& context, MaintenanceCallback callback);
-void setTicketsKeyAddedHook(const LuaContext& context, const TicketsKeyAddedHook& hook);
void clearMaintenanceHooks();
void setupLuaHooks(LuaContext& luaCtx);
}
.. function:: setTicketsKeyAddedHook(callback)
- .. versionadded:: 1.9.0
+ .. versionadded:: 1.9.6
Set a Lua function that will be called everytime a new tickets key is added. The function receives:
auto key = d_ticketKeys.read_lock()->front();
auto keyContent = key->content();
TLSCtx::getTicketsKeyAddedHook()(keyContent);
+ // fills mem with 0's
+ OPENSSL_cleanse(keyContent.data(), keyContent.size());
}
}
if (d_key.data != nullptr && d_key.size > 0) {
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
result.append(reinterpret_cast<const char*>(d_key.data), d_key.size);
+ safe_memory_lock(result.data(), result.size());
}
return result;
}
auto ticketsKey = *(d_ticketsKey.read_lock());
auto content = ticketsKey->content();
TLSCtx::getTicketsKeyAddedHook()(content);
+ safe_memory_release(content.data(), content.size());
}
}
void rotateTicketsKey(time_t now) override