X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=plugins%2Fmod_auth_cyrus.lua;h=ed3d5408f573895e33d3ed2ad47c7ce4d46ef60f;hb=6d7a9cba5240a142b1a1e397e6248cf13c261cca;hp=6b34a5414a9d19464971ae012f50a3cd5b995934;hpb=a71b7ec26f362f0621c679c6312f271687b4e3f8;p=prosody.git diff --git a/plugins/mod_auth_cyrus.lua b/plugins/mod_auth_cyrus.lua index 6b34a541..ed3d5408 100644 --- a/plugins/mod_auth_cyrus.lua +++ b/plugins/mod_auth_cyrus.lua @@ -1,21 +1,19 @@ -- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain --- Copyright (C) 2010 Jeff Mitchell -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- -local log = require "util.logger".init("usermanager"); -local type = type; -local ipairs = ipairs; -local jid_bare = require "util.jid".bare; -local config = require "core.configmanager"; +local log = require "util.logger".init("auth_cyrus"); + +local usermanager_user_exists = require "core.usermanager".user_exists; local cyrus_service_realm = module:get_option("cyrus_service_realm"); local cyrus_service_name = module:get_option("cyrus_service_name"); local cyrus_application_name = module:get_option("cyrus_application_name"); +local require_provisioning = module:get_option("cyrus_require_provisioning") or false; prosody.unlock_globals(); --FIXME: Figure out why this is needed and -- why cyrussasl isn't caught by the sandbox @@ -46,6 +44,9 @@ function new_default_provider(host) end function provider.user_exists(username) + if require_provisioning then + return usermanager_user_exists(username, module.host); + end return true; end @@ -55,21 +56,15 @@ function new_default_provider(host) function provider.get_sasl_handler() local realm = module:get_option("sasl_realm") or module.host; - return new_sasl(realm); - end - - function provider.is_admin(jid) - local admins = config.get(host, "core", "admins"); - if admins ~= config.get("*", "core", "admins") and type(admins) == "table" then - jid = jid_bare(jid); - for _,admin in ipairs(admins) do - if admin == jid then return true; end + local handler = new_sasl(realm); + if require_provisioning then + function handler.require_provisioning(username) + return usermanager_user_exists(username, module.host); end - elseif admins then - log("error", "Option 'admins' for host '%s' is not a table", host); end - return is_admin(jid); -- Test whether it's a global admin instead + return handler; end + return provider; end