mirror of
https://github.com/bjc/prosody.git
synced 2025-04-01 20:27:39 +03:00
util.sasl: Preserve 'userdata' field between clones
The :clean_clone() method is designed to provide a new cloned SASL handler, to be used when starting a fresh SASL negotiation on an existing connection. The userdata field is currently populated by mod_saslauth with the "read-only" information that the channel binding methods need to do their stuff. When :clean_clone() does not preserve this, it causes tracebacks in the cb profile handlers due to the property being nil. This does mean that SASL handlers should now not be reused (even when cloned) across different connections, if they ever could.
This commit is contained in:
parent
830f3e122c
commit
86341e87d3
1 changed files with 8 additions and 3 deletions
|
@ -67,7 +67,7 @@ local function registerMechanism(name, backends, f, cb_backends)
|
|||
end
|
||||
|
||||
-- create a new SASL object which can be used to authenticate clients
|
||||
local function new(realm, profile)
|
||||
local function new(realm, profile, userdata)
|
||||
local mechanisms = profile.mechanisms;
|
||||
if not mechanisms then
|
||||
mechanisms = {};
|
||||
|
@ -80,7 +80,12 @@ local function new(realm, profile)
|
|||
end
|
||||
profile.mechanisms = mechanisms;
|
||||
end
|
||||
return setmetatable({ profile = profile, realm = realm, mechs = mechanisms }, method);
|
||||
return setmetatable({
|
||||
profile = profile,
|
||||
realm = realm,
|
||||
mechs = mechanisms,
|
||||
userdata = userdata
|
||||
}, method);
|
||||
end
|
||||
|
||||
-- add a channel binding handler
|
||||
|
@ -94,7 +99,7 @@ end
|
|||
|
||||
-- get a fresh clone with the same realm and profile
|
||||
function method:clean_clone()
|
||||
return new(self.realm, self.profile)
|
||||
return new(self.realm, self.profile, self.userdata)
|
||||
end
|
||||
|
||||
-- get a list of possible SASL mechanisms to use
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue