aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--util/sasl.lua10
-rw-r--r--util/sasl_cyrus.lua8
2 files changed, 9 insertions, 9 deletions
diff --git a/util/sasl.lua b/util/sasl.lua
index 3eb2db65..93b79a86 100644
--- a/util/sasl.lua
+++ b/util/sasl.lua
@@ -71,18 +71,16 @@ end
-- select a mechanism to use
function method:select(mechanism)
- if self.mech_i then
- return false;
+ if not self.selected and self.mechs[mechanism] then
+ self.selected = mechanism;
+ return true;
end
-
- self.mech_i = mechanisms[self:mechanisms()[mechanism] and mechanism];
- return (self.mech_i ~= nil);
end
-- feed new messages to process into the library
function method:process(message)
--if message == "" or message == nil then return "failure", "malformed-request" end
- return self.mech_i(self, message);
+ return mechanisms[self.selected](self, message);
end
-- load the mechanisms
diff --git a/util/sasl_cyrus.lua b/util/sasl_cyrus.lua
index 1f901d57..002118fd 100644
--- a/util/sasl_cyrus.lua
+++ b/util/sasl_cyrus.lua
@@ -121,8 +121,10 @@ end
-- select a mechanism to use
function method:select(mechanism)
- self.mechanism = mechanism;
- return self:mechanisms()[mechanism];
+ if not self.selected and self.mechs[mechanism] then
+ self.selected = mechanism;
+ return true;
+ end
end
-- feed new messages to process into the library
@@ -131,7 +133,7 @@ function method:process(message)
local data;
if not self.first_step_done then
- err, data = cyrussasl.server_start(self.cyrus, self.mechanism, message or "")
+ err, data = cyrussasl.server_start(self.cyrus, self.selected, message or "")
self.first_step_done = true;
else
err, data = cyrussasl.server_step(self.cyrus, message or "")