mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel)
Otherwise the global event handlers accumulate, one added each time
logging is reoladed, and each invocation of the signal or event triggers
one dump of each created ringbuffer.
local st = require "util.stanza";
local nodeprep = require "util.encodings".stringprep.nodeprep;
local block_users = module:get_option_set("block_registrations_users", {
"abuse", "admin", "administrator", "hostmaster", "info", "news",
"noc", "operator", "owner", "postmaster", "register", "registration",
"root", "security", "service", "signup", "support", "sysadmin",
"sysop", "system", "test", "trouble", "webmaster", "www", "xmpp",
});
local block_patterns = module:get_option_set("block_registrations_matching", {});
local require_pattern = module:get_option_string("block_registrations_require");
function is_blocked(username)
-- Check if the username is simply blocked
if block_users:contains(username) then return true; end
for pattern in block_patterns do
if username:find(pattern) then
return true;
end
end
-- Not blocked, but check that username matches allowed pattern
if require_pattern and not username:match(require_pattern) then
return true;
end
end
module:hook("user-registering", function(event)
local username = event.username;
if is_blocked(username) then
event.allowed = false;
return true;
end
end, 10);