plugins/mod_auth_ldap.lua
author Kim Alvefur <zash@zash.se>
Thu, 28 Mar 2024 15:26:57 +0100
changeset 13472 98806cac64c3
parent 13228 71c28b36923f
permissions -rw-r--r--
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11841
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
-- mod_auth_ldap
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
12981
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12646
diff changeset
     3
local new_sasl = require "prosody.util.sasl".new;
11841
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local lualdap = require "lualdap";
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
local function ldap_filter_escape(s)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
	return (s:gsub("[*()\\%z]", function(c) return ("\\%02x"):format(c:byte()) end));
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
-- Config options
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
local ldap_server = module:get_option_string("ldap_server", "localhost");
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
local ldap_rootdn = module:get_option_string("ldap_rootdn", "");
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
local ldap_password = module:get_option_string("ldap_password", "");
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
local ldap_tls = module:get_option_boolean("ldap_tls");
13228
71c28b36923f mod_auth_ldap: Use enum option method
Kim Alvefur <zash@zash.se>
parents: 12981
diff changeset
    15
local ldap_scope = module:get_option_enum("ldap_scope", "subtree", "base", "onelevel");
11841
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
local ldap_filter = module:get_option_string("ldap_filter", "(uid=$user)"):gsub("%%s", "$user", 1);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
local ldap_base = assert(module:get_option_string("ldap_base"), "ldap_base is a required option for ldap");
13228
71c28b36923f mod_auth_ldap: Use enum option method
Kim Alvefur <zash@zash.se>
parents: 12981
diff changeset
    18
local ldap_mode = module:get_option_enum("ldap_mode", "bind", "getpasswd");
11841
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
local ldap_admins = module:get_option_string("ldap_admin_filter",
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
	module:get_option_string("ldap_admins")); -- COMPAT with mistake in documentation
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
local host = ldap_filter_escape(module:get_option_string("realm", module.host));
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
12646
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 11841
diff changeset
    23
if ldap_admins then
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 11841
diff changeset
    24
	module:log("error", "The 'ldap_admin_filter' option has been deprecated, "..
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 11841
diff changeset
    25
	           "and will be ignored. Equivalent functionality may be added in "..
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 11841
diff changeset
    26
	           "the future if there is demand."
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 11841
diff changeset
    27
	);
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 11841
diff changeset
    28
end
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 11841
diff changeset
    29
11841
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
-- Initiate connection
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
local ld = nil;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
module.unload = function() if ld then pcall(ld, ld.close); end end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
function ldap_do_once(method, ...)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
	if ld == nil then
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
		local err;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
		ld, err = lualdap.open_simple(ldap_server, ldap_rootdn, ldap_password, ldap_tls);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
		if not ld then return nil, err, "reconnect"; end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
	end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
	-- luacheck: ignore 411/success
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
	local success, iterator, invariant, initial = pcall(ld[method], ld, ...);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
	if not success then ld = nil; return nil, iterator, "search"; end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
	local success, dn, attr = pcall(iterator, invariant, initial);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
	if not success then ld = nil; return success, dn, "iter"; end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
	return dn, attr, "return";
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
function ldap_do(method, retry_count, ...)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    52
	local dn, attr, where;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
	for _=1,1+retry_count do
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
		dn, attr, where = ldap_do_once(method, ...);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
		if dn or not(attr) then break; end -- nothing or something found
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    56
		module:log("warn", "LDAP: %s %s (in %s)", tostring(dn), tostring(attr), where);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
		-- otherwise retry
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    58
	end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    59
	if not dn and attr then
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    60
		module:log("error", "LDAP: %s", tostring(attr));
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    61
	end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    62
	return dn, attr;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    63
end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    64
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    65
function get_user(username)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    66
	module:log("debug", "get_user(%q)", username);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    67
	return ldap_do("search", 2, {
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    68
		base = ldap_base;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    69
		scope = ldap_scope;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
		sizelimit = 1;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    71
		filter = ldap_filter:gsub("%$(%a+)", {
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    72
			user = ldap_filter_escape(username);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    73
			host = host;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    74
		});
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    75
	});
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    76
end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    78
local provider = {};
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    79
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    80
function provider.create_user(username, password) -- luacheck: ignore 212
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    81
	return nil, "Account creation not available with LDAP.";
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    82
end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    83
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    84
function provider.user_exists(username)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    85
	return not not get_user(username);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    86
end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    87
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    88
function provider.set_password(username, password)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    89
	local dn, attr = get_user(username);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    90
	if not dn then return nil, attr end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    91
	if attr.userPassword == password then return true end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    92
	return ldap_do("modify", 2, dn, { '=', userPassword = password });
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    93
end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    94
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    95
if ldap_mode == "getpasswd" then
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    96
	function provider.get_password(username)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    97
		local dn, attr = get_user(username);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    98
		if dn and attr then
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    99
			return attr.userPassword;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   100
		end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   101
	end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   102
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   103
	function provider.test_password(username, password)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   104
		return provider.get_password(username) == password;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   105
	end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   106
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   107
	function provider.get_sasl_handler()
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   108
		return new_sasl(module.host, {
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   109
			plain = function(sasl, username) -- luacheck: ignore 212/sasl
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   110
				local password = provider.get_password(username);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   111
				if not password then return "", nil; end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   112
				return password, true;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   113
			end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   114
		});
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   115
	end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   116
elseif ldap_mode == "bind" then
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   117
	local function test_password(userdn, password)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   118
		local ok, err = lualdap.open_simple(ldap_server, userdn, password, ldap_tls);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   119
		if not ok then
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   120
			module:log("debug", "ldap open_simple error: %s", err);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   121
		end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   122
		return not not ok;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   123
	end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   124
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   125
	function provider.test_password(username, password)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   126
		local dn = get_user(username);
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   127
		if not dn then return end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   128
		return test_password(dn, password)
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   129
	end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   130
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   131
	function provider.get_sasl_handler()
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   132
		return new_sasl(module.host, {
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   133
			plain_test = function(sasl, username, password) -- luacheck: ignore 212/sasl
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   134
				return provider.test_password(username, password), true;
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   135
			end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   136
		});
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   137
	end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   138
else
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   139
	module:log("error", "Unsupported ldap_mode %s", tostring(ldap_mode));
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   140
end
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   141
a37bf4497280 mod_auth_ldap: Import from prosody-modules rev f52452911187
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   142
module:provides("auth", provider);