mod_auth_internal_hashed: Fixed SCRAM-SHA-1 mechanism to not traceback on non-existen...
[prosody.git] / util / sasl_cyrus.lua
index 7d35b5e4866ababb2bbd88fba6c1cbc64959bbdb..f5bfcbe9f4ea749a387d9df660e95c0dd0eeee26 100644 (file)
@@ -129,20 +129,22 @@ end
 
 -- get a list of possible SASL mechanims to use
 function method:mechanisms()
-       local mechanisms = {}
-       local cyrus_mechs = cyrussasl.listmech(self.cyrus, nil, "", " ", "")
-       for w in s_gmatch(cyrus_mechs, "[^ ]+") do
-               mechanisms[w] = true;
+       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
-       self.mechs = mechanisms
-       return array.collect(keys(mechanisms));
+       return mechanisms;
 end
 
 -- select a mechanism to use
 function method:select(mechanism)
        self.mechanism = mechanism;
-       if not self.mechs then self:mechanisms(); end
-       return self.mechs[mechanism];
+       return self:mechanisms()[mechanism];
 end
 
 -- feed new messages to process into the library