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
parent 3548:cd8d1cacc65b
child 3552: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)