Comparison

util/sasl.lua @ 477:a5d48260c191

Merfe from Tobias
author Matthew Wild <mwild1@gmail.com>
date Sat, 29 Nov 2008 15:14:59 +0000
parent 476:4744735a0a5e
child 495:abc4fd4d262a
comparison
equal deleted inserted replaced
471:727d7bd97cd2 477:a5d48260c191
9 local string = string 9 local string = string
10 local math = require "math" 10 local math = require "math"
11 local type = type 11 local type = type
12 local error = error 12 local error = error
13 local print = print 13 local print = print
14 local idna_ascii = require "util.encodings".idna.to_ascii
14 15
15 module "sasl" 16 module "sasl"
16 17
17 local function new_plain(realm, password_handler) 18 local function new_plain(realm, password_handler)
18 local object = { mechanism = "PLAIN", realm = realm, password_handler = password_handler} 19 local object = { mechanism = "PLAIN", realm = realm, password_handler = password_handler}
128 local password_encoding, Y = self.password_handler(response["username"], response["realm"], "DIGEST-MD5") 129 local password_encoding, Y = self.password_handler(response["username"], response["realm"], "DIGEST-MD5")
129 if Y == nil then return "failure", "not-authorized" 130 if Y == nil then return "failure", "not-authorized"
130 elseif Y == false then return "failure", "account-disabled" end 131 elseif Y == false then return "failure", "account-disabled" end
131 132
132 local A1 = Y..":"..response["nonce"]..":"..response["cnonce"]--:authzid 133 local A1 = Y..":"..response["nonce"]..":"..response["cnonce"]--:authzid
133 local A2 = "AUTHENTICATE:"..protocol.."/"..domain 134 local A2 = "AUTHENTICATE:"..protocol.."/"..idna_ascii(domain)
134 135
135 local HA1 = md5(A1, true) 136 local HA1 = md5(A1, true)
136 local HA2 = md5(A2, true) 137 local HA2 = md5(A2, true)
137 138
138 local KD = HA1..":"..response["nonce"]..":"..response["nc"]..":"..response["cnonce"]..":"..response["qop"]..":"..HA2 139 local KD = HA1..":"..response["nonce"]..":"..response["nc"]..":"..response["cnonce"]..":"..response["qop"]..":"..HA2
139 local response_value = md5(KD, true) 140 local response_value = md5(KD, true)
140 141
141 if response_value == response["response"] then 142 if response_value == response["response"] then
142 -- calculate rspauth 143 -- calculate rspauth
143 A2 = ":"..protocol.."/"..domain 144 A2 = ":"..protocol.."/"..idna_ascii(domain)
144 145
145 HA1 = md5(A1, true) 146 HA1 = md5(A1, true)
146 HA2 = md5(A2, true) 147 HA2 = md5(A2, true)
147 148
148 KD = HA1..":"..response["nonce"]..":"..response["nc"]..":"..response["cnonce"]..":"..response["qop"]..":"..HA2 149 KD = HA1..":"..response["nonce"]..":"..response["nc"]..":"..response["cnonce"]..":"..response["qop"]..":"..HA2