mod_storage_sql2: archive:delete() with username = true deletes for all users
[prosody.git] / plugins / mod_saslauth.lua
index 264ee96755c232365849220adb0715c7e5dc4dcf..4513c511d68d164070438aa05120f93b005e7972 100644 (file)
@@ -1,7 +1,7 @@
 -- Prosody IM
 -- Copyright (C) 2008-2010 Matthew Wild
 -- Copyright (C) 2008-2010 Waqas Hussain
--- 
+--
 -- This project is MIT/X11 licensed. Please see the
 -- COPYING file in the source package for more information.
 --
@@ -11,7 +11,6 @@
 local st = require "util.stanza";
 local sm_bind_resource = require "core.sessionmanager".bind_resource;
 local sm_make_authenticated = require "core.sessionmanager".make_authenticated;
-local s2s_make_authenticated = require "core.s2smanager".make_authenticated;
 local base64 = require "util.encodings".base64;
 
 local cert_verify_identity = require "util.x509".verify_identity;
@@ -88,9 +87,9 @@ module:hook_stanza(xmlns_sasl, "success", function (session, stanza)
        module:log("debug", "SASL EXTERNAL with %s succeeded", session.to_host);
        session.external_auth = "succeeded"
        session:reset_stream();
-       session:open_stream();
+       session:open_stream(session.from_host, session.to_host);
 
-       s2s_make_authenticated(session, session.to_host);
+       module:fire_event("s2s-authenticated", { session = session, host = session.to_host });
        return true;
 end)
 
@@ -187,7 +186,7 @@ local function s2s_external_auth(session, stanza)
 
        local domain = text ~= "" and text or session.from_host;
        module:log("info", "Accepting SASL EXTERNAL identity from %s", domain);
-       s2s_make_authenticated(session, domain);
+       module:fire_event("s2s-authenticated", { session = session, host = domain });
        session:reset_stream();
        return true
 end
@@ -243,6 +242,16 @@ module:hook("stream-features", function(event)
                        return;
                end
                origin.sasl_handler = usermanager_get_sasl_handler(module.host, origin);
+               if origin.encrypted then
+                       -- check wether LuaSec has the nifty binding to the function needed for tls-unique
+                       -- FIXME: would be nice to have this check only once and not for every socket
+                       if origin.conn:socket().getpeerfinished then
+                               origin.sasl_handler:add_cb_handler("tls-unique", function(self)
+                                       return self.userdata:getpeerfinished();
+                               end);
+                               origin.sasl_handler["userdata"] = origin.conn:socket();
+                       end
+               end
                local mechanisms = st.stanza("mechanisms", mechanisms_attr);
                for mechanism in pairs(origin.sasl_handler:mechanisms()) do
                        if mechanism ~= "PLAIN" or origin.secure or allow_unencrypted_plain_auth then