Software /
code /
prosody
Comparison
plugins/mod_saslauth.lua @ 595:08ed4fa2f89d
Latin1 support for SASL DIGEST-MD5 (initial commit)
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sun, 07 Dec 2008 23:43:08 +0500 |
parent | 565:3a49d85cafbc |
child | 599:30655c5cc531 |
comparison
equal
deleted
inserted
replaced
592:c6e2c727d0cc | 595:08ed4fa2f89d |
---|---|
39 local new_sasl = require "util.sasl".new; | 39 local new_sasl = require "util.sasl".new; |
40 | 40 |
41 local function build_reply(status, ret, err_msg) | 41 local function build_reply(status, ret, err_msg) |
42 local reply = st.stanza(status, {xmlns = xmlns_sasl}); | 42 local reply = st.stanza(status, {xmlns = xmlns_sasl}); |
43 if status == "challenge" then | 43 if status == "challenge" then |
44 log("challenge", ret or ""); | |
44 reply:text(base64.encode(ret or "")); | 45 reply:text(base64.encode(ret or "")); |
45 elseif status == "failure" then | 46 elseif status == "failure" then |
46 reply:tag(ret):up(); | 47 reply:tag(ret):up(); |
47 if err_msg then reply:tag("text"):text(err_msg); end | 48 if err_msg then reply:tag("text"):text(err_msg); end |
48 elseif status == "success" then | 49 elseif status == "success" then |
50 log("success", ret or ""); | |
49 reply:text(base64.encode(ret or "")); | 51 reply:text(base64.encode(ret or "")); |
50 else | 52 else |
51 error("Unknown sasl status: "..status); | 53 error("Unknown sasl status: "..status); |
52 end | 54 end |
53 return reply; | 55 return reply; |
63 session:reset_stream(); | 65 session:reset_stream(); |
64 end | 66 end |
65 end | 67 end |
66 | 68 |
67 local function password_callback(node, host, mechanism, raw_host) | 69 local function password_callback(node, host, mechanism, raw_host) |
68 local password = (datamanager.load(node, host, "accounts") or {}).password; -- FIXME handle hashed passwords | 70 log("host", host); |
71 log("raw_host", raw_host); | |
72 local password = (datamanager.load(node, raw_host, "accounts") or {}).password; -- FIXME handle hashed passwords | |
69 local func = function(x) return x; end; | 73 local func = function(x) return x; end; |
70 if password then | 74 if password then |
71 if mechanism == "PLAIN" then | 75 if mechanism == "PLAIN" then |
72 return func, password; | 76 return func, password; |
73 elseif mechanism == "DIGEST-MD5" then | 77 elseif mechanism == "DIGEST-MD5" then |
74 return func, md5(node..":"..raw_host..":"..password); | 78 return func, md5(node..":"..host..":"..password); |
75 end | 79 end |
76 end | 80 end |
77 return func, nil; | 81 return func, nil; |
78 end | 82 end |
79 | 83 |
85 return; -- FIXME ignoring out of order stanzas because ejabberd does | 89 return; -- FIXME ignoring out of order stanzas because ejabberd does |
86 end | 90 end |
87 local text = stanza[1]; | 91 local text = stanza[1]; |
88 if text then | 92 if text then |
89 text = base64.decode(text); | 93 text = base64.decode(text); |
94 log("recieved", text); | |
90 if not text then | 95 if not text then |
91 session.sasl_handler = nil; | 96 session.sasl_handler = nil; |
92 session.send(build_reply("failure", "incorrect-encoding")); | 97 session.send(build_reply("failure", "incorrect-encoding")); |
93 return; | 98 return; |
94 end | 99 end |