mod_mimicking: Improve error handling

This commit is contained in:
Kim Alvefur 2019-04-29 17:27:08 +02:00
parent d9d997c861
commit cdea7586e4

View file

@ -22,22 +22,34 @@ function module.load()
end
module:hook("user-registered", function(user)
skeletons:set(skeleton(user.username), { username = user.username });
local skel = skeleton(user.username);
local ok, err = skeletons:set(skel, { username = user.username });
if not ok then
module:log("error", "Unable to store mimicry data (%q => %q): %s", user.username, skel, err);
end
end);
module:hook("user-deleted", function(user)
skeletons:set(skeleton(user.username), nil);
local skel = skeleton(user.username);
local ok, err = skeletons:set(skel, nil);
if not ok and err then
module:log("error", "Unable to clear mimicry data (%q): %s", skel, err);
end
end);
module:hook("user-registering", function(user)
if skeletons:get(skeleton(user.username)) then
local existing, err = skeletons:get(skeleton(user.username));
if existing then
module:log("debug", "Attempt to register username '%s' which could be confused with '%s'", user.username, existing.username);
user.allowed = false;
elseif err then
module:log("error", "Unable to check if new username '%s' can be confused with any existing user: %s", err);
end
end);
function module.command(arg)
if (arg[1] ~= "bootstrap" or not arg[2]) then
usage("mod_mimicking bootstrap <host>", "Initialize username mimicry index");
usage("mod_mimicking bootstrap <host>", "Initialize username mimicry database");
return;
end
@ -53,7 +65,21 @@ function module.command(arg)
skeletons = storagemanager.open(host, "skeletons");
local count = 0;
for user in usermanager.users(host) do
skeletons:set(skeleton(user), { username = user });
local skel = skeleton(user);
local existing, err = skeletons:get(skel);
if existing and existing.username ~= user then
module:log("warn", "Existing usernames '%s' and '%s' are confusable", existing.username, user);
elseif err then
module:log("error", "Error checking for existing mimicry data (%q = %q): %s", user, skel, err);
end
local ok, err = skeletons:set(skel, { username = user });
if ok then
count = count + 1;
elseif err then
module:log("error", "Unable to store mimicry data (%q => %q): %s", user, skel, err);
end
end
module:log("info", "%d usernames indexed", count);
end