mirror of
https://github.com/bjc/prosody.git
synced 2025-04-03 21:27:38 +03:00
mod_mimicking: Improve error handling
This commit is contained in:
parent
d9d997c861
commit
cdea7586e4
1 changed files with 31 additions and 5 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue