Diff

plugins/mod_saslauth.lua @ 3167:546695e80e0a

Correct out of order logic in mod_hashpassauth Make saslauth check the existence of the get_password and test_password functions to determine which authentication profile to use.
author Jeff Mitchell <jeff@jefferai.org>
date Fri, 28 May 2010 14:47:32 -0400
parent 3164:db9def53fe9c
child 3178:46f5ed897beb
line wrap: on
line diff
--- a/plugins/mod_saslauth.lua	Thu May 27 10:54:11 2010 -0400
+++ b/plugins/mod_saslauth.lua	Fri May 28 14:47:32 2010 -0400
@@ -15,6 +15,7 @@
 
 local nodeprep = require "util.encodings".stringprep.nodeprep;
 local datamanager_load = require "util.datamanager".load;
+local usermanager_get_provider = require "core.usermanager".get_provider;
 local usermanager_get_supported_methods = require "core.usermanager".get_supported_methods;
 local usermanager_user_exists = require "core.usermanager".user_exists;
 local usermanager_get_password = require "core.usermanager".get_password;
@@ -66,7 +67,7 @@
 	error("Unknown SASL backend");
 end
 
-local default_authentication_profile = {
+local getpass_authentication_profile = {
 	plain = function(username, realm)
 		local prepped_username = nodeprep(username);
 		if not prepped_username then
@@ -81,7 +82,7 @@
 	end
 };
 
-local hashpass_authentication_profile = {
+local testpass_authentication_profile = {
 	plain_test = 	function(username, password, realm)
 			local prepped_username = nodeprep(username);
 			if not prepped_username then
@@ -194,12 +195,12 @@
 		if module:get_option("anonymous_login") then
 			origin.sasl_handler = new_sasl(realm, anonymous_authentication_profile);
 		else
-			local authentication = module:get_option("authentication");
-			log("debug", "AUTH: creating handler for '%s' type", authentication);
-			if authentication == nil or authentication == "default" then
-				origin.sasl_handler = new_sasl(realm, default_authentication_profile);
-			elseif authentication == "hashpass" then
-				origin.sasl_handler = new_sasl(realm, hashpass_authentication_profile);
+			if usermanager_get_provider(realm).get_password then
+				origin.sasl_handler = new_sasl(realm, getpass_authentication_profile);
+			elseif usermanager_get_provider(realm).test_password then
+				origin.sasl_handler = new_sasl(realm, testpass_authentication_profile);
+			else
+				log("warning", "AUTH: Could not load an authentication profile for the given provider.");
 			end
 			if not (module:get_option("allow_unencrypted_plain_auth")) and not origin.secure then
 				origin.sasl_handler:forbidden({"PLAIN"});