Newline at end of file for sessionmanager
[prosody.git] / plugins / mod_saslauth.lua
index 7cb93c462524627c4004297cc1f46fa0e9e1bcc6..bea1012ab533ad9b8a44437669536df60c58ce5b 100644 (file)
@@ -41,11 +41,13 @@ local new_sasl = require "util.sasl".new;
 local function build_reply(status, ret, err_msg)
        local reply = st.stanza(status, {xmlns = xmlns_sasl});
        if status == "challenge" then
+               log("challenge", ret or "");
                reply:text(base64.encode(ret or ""));
        elseif status == "failure" then
                reply:tag(ret):up();
                if err_msg then reply:tag("text"):text(err_msg); end
        elseif status == "success" then
+               log("success", ret or "");
                reply:text(base64.encode(ret or ""));
        else
                error("Unknown sasl status: "..status);
@@ -64,13 +66,14 @@ local function handle_status(session, status)
        end
 end
 
-local function password_callback(node, host, mechanism)
+local function password_callback(node, host, mechanism, decoder)
        local password = (datamanager.load(node, host, "accounts") or {}).password; -- FIXME handle hashed passwords
        local func = function(x) return x; end;
        if password then
                if mechanism == "PLAIN" then
                        return func, password;
                elseif mechanism == "DIGEST-MD5" then
+                       if decoder then node, host, password = decoder(node), decoder(host), decoder(password); end
                        return func, md5(node..":"..host..":"..password);
                end
        end
@@ -87,6 +90,7 @@ function sasl_handler(session, stanza)
        local text = stanza[1];
        if text then
                text = base64.decode(text);
+               log("recieved", text);
                if not text then
                        session.sasl_handler = nil;
                        session.send(build_reply("failure", "incorrect-encoding"));