Diff

util/sasl.lua @ 3986:671a660b20f9

util.sasl: Cache the calculated mechanisms set for SASL profiles (profile.mechanisms table).
author Waqas Hussain <waqas20@gmail.com>
date Wed, 29 Dec 2010 18:45:31 +0500
parent 3550:5e5d136d9de0
child 4933:630cb694b364
line wrap: on
line diff
--- a/util/sasl.lua	Tue Dec 28 09:59:27 2010 +0500
+++ b/util/sasl.lua	Wed Dec 29 18:45:31 2010 +0500
@@ -48,13 +48,17 @@
 
 -- create a new SASL object which can be used to authenticate clients
 function new(realm, profile)
-	local mechanisms = {};
-	for backend, f in pairs(profile) do
-		if backend_mechanism[backend] then
-			for _, mechanism in ipairs(backend_mechanism[backend]) do
-				mechanisms[mechanism] = true;
+	local mechanisms = profile.mechanisms;
+	if not mechanisms then
+		mechanisms = {};
+		for backend, f in pairs(profile) do
+			if backend_mechanism[backend] then
+				for _, mechanism in ipairs(backend_mechanism[backend]) do
+					mechanisms[mechanism] = true;
+				end
 			end
 		end
+		profile.mechanisms = mechanisms;
 	end
 	return setmetatable({ profile = profile, realm = realm, mechs = mechanisms }, method);
 end