Changeset

3549:395d5bb5266e

util.sasl, util.sasl_cyrus: Load mechanisms list early rather than lazily, as they are always loaded anyway.
author Waqas Hussain <waqas20@gmail.com>
date Tue, 02 Nov 2010 18:04:56 +0500
parents 3548:cd8d1cacc65b
children 3550:5e5d136d9de0
files util/sasl.lua util/sasl_cyrus.lua
diffstat 2 files changed, 17 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/util/sasl.lua	Tue Nov 02 15:07:25 2010 +0500
+++ b/util/sasl.lua	Tue Nov 02 18:04:56 2010 +0500
@@ -48,7 +48,15 @@
 
 -- create a new SASL object which can be used to authenticate clients
 function new(realm, profile)
-	return setmetatable({ profile = profile, realm = realm }, method);
+	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;
+			end
+		end
+	end
+	return setmetatable({ profile = profile, realm = realm, mechs = mechanisms }, method);
 end
 
 -- get a fresh clone with the same realm and profile
@@ -58,19 +66,7 @@
 
 -- get a list of possible SASL mechanims to use
 function method:mechanisms()
-	local mechanisms = self.mechs;
-	if not mechanisms then
-		mechanisms = {}
-		for backend, f in pairs(self.profile) do
-			if backend_mechanism[backend] then
-				for _, mechanism in ipairs(backend_mechanism[backend]) do
-					mechanisms[mechanism] = true;
-				end
-			end
-		end
-		self.mechs = mechanisms;
-	end
-	return mechanisms;
+	return self.mechs;
 end
 
 -- select a mechanism to use
--- a/util/sasl_cyrus.lua	Tue Nov 02 15:07:25 2010 +0500
+++ b/util/sasl_cyrus.lua	Tue Nov 02 18:04:56 2010 +0500
@@ -100,6 +100,12 @@
 	end
 
 	cyrussasl.setssf(sasl_i.cyrus, 0, 0xffffffff)
+	local mechanisms = {};
+	local cyrus_mechs = cyrussasl.listmech(sasl_i.cyrus, nil, "", " ", "");
+	for w in s_gmatch(cyrus_mechs, "[^ ]+") do
+		mechanisms[w] = true;
+	end
+	sasl_i.mechs = mechanisms;
 	return setmetatable(sasl_i, method);
 end
 
@@ -110,16 +116,7 @@
 
 -- get a list of possible SASL mechanims to use
 function method:mechanisms()
-	local mechanisms = self.mechs;
-	if not mechanisms then
-		mechanisms = {}
-		local cyrus_mechs = cyrussasl.listmech(self.cyrus, nil, "", " ", "")
-		for w in s_gmatch(cyrus_mechs, "[^ ]+") do
-			mechanisms[w] = true;
-		end
-		self.mechs = mechanisms
-	end
-	return mechanisms;
+	return self.mechs;
 end
 
 -- select a mechanism to use