Mercurial > prosody-hg
comparison plugins/mod_saslauth.lua @ 3551:4fba723ab235
mod_saslauth: Moved SASL mechanism selection and CDATA handling into separate functions.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Tue, 02 Nov 2010 21:19:50 +0500 |
| parents | cd8d1cacc65b |
| children | 8ad09efc19cc |
comparison
equal
deleted
inserted
replaced
| 3550:5e5d136d9de0 | 3551:4fba723ab235 |
|---|---|
| 70 end | 70 end |
| 71 end | 71 end |
| 72 return status, ret, err_msg; | 72 return status, ret, err_msg; |
| 73 end | 73 end |
| 74 | 74 |
| 75 local function sasl_process_cdata(session, stanza) | |
| 76 local text = stanza[1]; | |
| 77 if text then | |
| 78 text = base64.decode(text); | |
| 79 --log("debug", "AUTH: %s", text:gsub("[%z\001-\008\011\012\014-\031]", " ")); | |
| 80 if not text then | |
| 81 session.sasl_handler = nil; | |
| 82 session.send(build_reply("failure", "incorrect-encoding")); | |
| 83 return true; | |
| 84 end | |
| 85 end | |
| 86 local status, ret, err_msg = session.sasl_handler:process(text); | |
| 87 status, ret, err_msg = handle_status(session, status, ret, err_msg); | |
| 88 local s = build_reply(status, ret, err_msg); | |
| 89 log("debug", "sasl reply: %s", tostring(s)); | |
| 90 session.send(s); | |
| 91 return true; | |
| 92 end | |
| 93 | |
| 75 local function sasl_handler(event) | 94 local function sasl_handler(event) |
| 76 local session, stanza = event.origin, event.stanza; | 95 local session, stanza = event.origin, event.stanza; |
| 77 if session.type ~= "c2s_unauthed" then return; end | 96 if session.type ~= "c2s_unauthed" then return; end |
| 78 | 97 |
| 79 if stanza.name == "auth" then | 98 if stanza.name == "auth" then |
| 98 return true; | 117 return true; |
| 99 end | 118 end |
| 100 elseif not session.sasl_handler then | 119 elseif not session.sasl_handler then |
| 101 return true; -- FIXME ignoring out of order stanzas because ejabberd does | 120 return true; -- FIXME ignoring out of order stanzas because ejabberd does |
| 102 end | 121 end |
| 103 local text = stanza[1]; | 122 return sasl_process_cdata(session, stanza); |
| 104 if text then | |
| 105 text = base64.decode(text); | |
| 106 --log("debug", "AUTH: %s", text:gsub("[%z\001-\008\011\012\014-\031]", " ")); | |
| 107 if not text then | |
| 108 session.sasl_handler = nil; | |
| 109 session.send(build_reply("failure", "incorrect-encoding")); | |
| 110 return true; | |
| 111 end | |
| 112 end | |
| 113 local status, ret, err_msg = session.sasl_handler:process(text); | |
| 114 status, ret, err_msg = handle_status(session, status, ret, err_msg); | |
| 115 local s = build_reply(status, ret, err_msg); | |
| 116 log("debug", "sasl reply: %s", tostring(s)); | |
| 117 session.send(s); | |
| 118 return true; | |
| 119 end | 123 end |
| 120 | 124 |
| 121 module:hook("stanza/urn:ietf:params:xml:ns:xmpp-sasl:auth", sasl_handler); | 125 module:hook("stanza/urn:ietf:params:xml:ns:xmpp-sasl:auth", sasl_handler); |
| 122 module:hook("stanza/urn:ietf:params:xml:ns:xmpp-sasl:response", sasl_handler); | 126 module:hook("stanza/urn:ietf:params:xml:ns:xmpp-sasl:response", sasl_handler); |
| 123 module:hook("stanza/urn:ietf:params:xml:ns:xmpp-sasl:abort", function(event) | 127 module:hook("stanza/urn:ietf:params:xml:ns:xmpp-sasl:abort", function(event) |
