66 session:reset_stream(); |
66 session:reset_stream(); |
67 end |
67 end |
68 end |
68 end |
69 |
69 |
70 local function credentials_callback(mechanism, ...) |
70 local function credentials_callback(mechanism, ...) |
71 if mechanism == "PLAIN" then |
71 if mechanism == "PLAIN" then |
72 local username, hostname, password = arg[1], arg[2], arg[3]; |
72 local username, hostname, password = arg[1], arg[2], arg[3]; |
73 local response = usermanager_validate_credentials(hostname, username, password, mechanism) |
73 local response = usermanager_validate_credentials(hostname, username, password, mechanism) |
74 if response == nil then return false |
74 if response == nil then return false |
75 else return response end |
75 else return response end |
76 elseif mechanism == "DIGEST-MD5" then |
76 elseif mechanism == "DIGEST-MD5" then |
77 function func(x) return x; end |
77 function func(x) return x; end |
78 local node, domain, realm, decoder = arg[1], arg[2], arg[3], arg[4]; |
78 local node, domain, realm, decoder = arg[1], arg[2], arg[3], arg[4]; |
79 local password = usermanager_get_password(node, domain) |
79 local password = usermanager_get_password(node, domain) |
80 if password then |
80 if password then |
81 if decoder then node, realm, password = decoder(node), decoder(realm), decoder(password); end |
81 if decoder then node, realm, password = decoder(node), decoder(realm), decoder(password); end |
82 return func, md5(node..":"..realm..":"..password); |
82 return func, md5(node..":"..realm..":"..password); |
83 else |
83 else |
84 return func, nil; |
84 return func, nil; |
85 end |
85 end |
86 end |
86 end |
87 end |
87 end |
88 |
88 |
89 local function sasl_handler(session, stanza) |
89 local function sasl_handler(session, stanza) |
90 if stanza.name == "auth" then |
90 if stanza.name == "auth" then |
91 -- FIXME ignoring duplicates because ejabberd does |
91 -- FIXME ignoring duplicates because ejabberd does |