aboutsummaryrefslogtreecommitdiffstats
path: root/util/sasl/digest-md5.lua
diff options
context:
space:
mode:
Diffstat (limited to 'util/sasl/digest-md5.lua')
-rw-r--r--util/sasl/digest-md5.lua10
1 files changed, 4 insertions, 6 deletions
diff --git a/util/sasl/digest-md5.lua b/util/sasl/digest-md5.lua
index 1429a5c6..5b8f5c8a 100644
--- a/util/sasl/digest-md5.lua
+++ b/util/sasl/digest-md5.lua
@@ -28,10 +28,6 @@ module "digest-md5"
--=========================
--SASL DIGEST-MD5 according to RFC 2831
-local function digest_response()
-
- return response, A1, A2
-end
local function digest(self, message)
--TODO complete support for authzid
@@ -101,7 +97,8 @@ local function digest(self, message)
end
local function parse(data)
local message = {}
- for k, v in s_gmatch(data, [[([%w%-]+)="?([^",]*)"?,?]]) do -- FIXME The hacky regex makes me shudder
+ -- COMPAT: %z in the pattern to work around jwchat bug (sends "charset=utf-8\0")
+ for k, v in s_gmatch(data, [[([%w%-]+)="?([^",%z]*)"?,?]]) do -- FIXME The hacky regex makes me shudder
message[k] = v;
end
return message;
@@ -169,13 +166,14 @@ local function digest(self, message)
--TODO maybe realm support
self.username = response["username"];
+ local Y, state;
if self.profile.plain then
local password, state = self.profile.plain(response["username"], self.realm)
if state == nil then return "failure", "not-authorized"
elseif state == false then return "failure", "account-disabled" end
Y = md5(response["username"]..":"..response["realm"]..":"..password);
elseif self.profile["digest-md5"] then
- local Y, state = self.profile["digest-md5"](response["username"], self.realm, response["realm"], response["charset"])
+ Y, state = self.profile["digest-md5"](response["username"], self.realm, response["realm"], response["charset"])
if state == nil then return "failure", "not-authorized"
elseif state == false then return "failure", "account-disabled" end
elseif self.profile["digest-md5-test"] then