function new_hashpass_provider(host)
local provider = { name = "internal_hashed" };
- log("debug", "initializing hashpass authentication provider for host '%s'", host);
+ log("debug", "initializing internal_hashed authentication provider for host '%s'", host);
function provider.test_password(username, password)
local credentials = datamanager.load(username, host, "accounts") or {};
end
function provider.create_user(username, password)
+ if password == nil then
+ return datamanager.store(username, host, "accounts", {});
+ end
local salt = generate_uuid();
local valid, stored_key, server_key = getAuthenticationDatabaseSHA1(password, salt, iteration_count);
local stored_key_hex = to_hex(stored_key);
return datamanager.store(username, host, "accounts", {stored_key = stored_key_hex, server_key = server_key_hex, salt = salt, iteration_count = iteration_count});
end
+ function provider.delete_user(username)
+ return datamanager.store(username, host, "accounts", nil);
+ end
+
function provider.get_sasl_handler()
- local realm = module:get_option("sasl_realm") or module.host;
local testpass_authentication_profile = {
- plain_test = function(username, password, realm)
+ plain_test = function(sasl, username, password, realm)
local prepped_username = nodeprep(username);
if not prepped_username then
log("debug", "NODEprep failed on username: %s", username);
return "", nil;
end
- return usermanager.test_password(prepped_username, password, realm), true;
+ return usermanager.test_password(prepped_username, realm, password), true;
end,
- scram_sha_1 = function(username, realm)
+ scram_sha_1 = function(sasl, username, realm)
local credentials = datamanager.load(username, host, "accounts");
if not credentials then return; end
if credentials.password then
return stored_key, server_key, iteration_count, salt, true;
end
};
- return new_sasl(realm, testpass_authentication_profile);
+ return new_sasl(module.host, testpass_authentication_profile);
end
return provider;