--- a/certs/openssl.cnf Tue Mar 12 12:30:35 2013 +0000
+++ b/certs/openssl.cnf Sat Mar 16 18:49:14 2013 +0100
@@ -2,7 +2,7 @@
[ new_oids ]
-# RFC 3920 section 5.1.1 defines this OID
+# RFC 6120 section 13.7.1.4. defines this OID
xmppAddr = 1.3.6.1.5.5.7.8.5
# RFC 4985 defines this OID
@@ -40,7 +40,7 @@
[ subject_alternative_name ]
-# See http://tools.ietf.org/html/draft-ietf-xmpp-3920bis#section-13.7.1.2 for more info.
+# See http://tools.ietf.org/html/rfc6120#section-13.7.1.2 for more info.
DNS.0 = example.com
otherName.0 = xmppAddr;FORMAT:UTF8,UTF8:example.com
--- a/core/hostmanager.lua Tue Mar 12 12:30:35 2013 +0000
+++ b/core/hostmanager.lua Sat Mar 16 18:49:14 2013 +0100
@@ -23,6 +23,7 @@
require "core.s2smanager";
end
local incoming_s2s = _G.prosody.incoming_s2s;
+local core_route_stanza = _G.prosody.core_route_stanza;
local pairs, select = pairs, select;
local tostring, type = tostring, type;
--- a/core/rostermanager.lua Tue Mar 12 12:30:35 2013 +0000
+++ b/core/rostermanager.lua Sat Mar 16 18:49:14 2013 +0100
@@ -11,10 +11,7 @@
local log = require "util.logger".init("rostermanager");
-local setmetatable = setmetatable;
-local format = string.format;
-local pcall = pcall;
-local pairs, ipairs = pairs, ipairs;
+local pairs = pairs;
local tostring = tostring;
local hosts = hosts;
--- a/core/s2smanager.lua Tue Mar 12 12:30:35 2013 +0000
+++ b/core/s2smanager.lua Sat Mar 16 18:49:14 2013 +0100
@@ -12,7 +12,6 @@
local tostring, pairs, ipairs, getmetatable, newproxy, setmetatable
= tostring, pairs, ipairs, getmetatable, newproxy, setmetatable;
-local fire_event = prosody.events.fire_event;
local logger_init = require "util.logger".init;
local log = logger_init("s2smanager");
@@ -23,6 +22,7 @@
incoming_s2s = {};
prosody.incoming_s2s = incoming_s2s;
local incoming_s2s = incoming_s2s;
+local fire_event = prosody.events.fire_event;
module "s2smanager"
@@ -91,7 +91,7 @@
local event_data = { session = session };
if session.type == "s2sout" then
- prosody.events.fire_event("s2sout-established", event_data);
+ fire_event("s2sout-established", event_data);
hosts[from].events.fire_event("s2sout-established", event_data);
else
local host_session = hosts[to];
@@ -99,7 +99,7 @@
return host_session.events.fire_event("route/remote", { from_host = to, to_host = from, stanza = stanza });
end;
- prosody.events.fire_event("s2sin-established", event_data);
+ fire_event("s2sin-established", event_data);
hosts[to].events.fire_event("s2sin-established", event_data);
end
@@ -158,12 +158,12 @@
local event_data = { session = session, reason = reason };
if session.type == "s2sout" then
- prosody.events.fire_event("s2sout-destroyed", event_data);
+ fire_event("s2sout-destroyed", event_data);
if hosts[session.from_host] then
hosts[session.from_host].events.fire_event("s2sout-destroyed", event_data);
end
elseif session.type == "s2sin" then
- prosody.events.fire_event("s2sin-destroyed", event_data);
+ fire_event("s2sin-destroyed", event_data);
if hosts[session.to_host] then
hosts[session.to_host].events.fire_event("s2sin-destroyed", event_data);
end
--- a/plugins/mod_compression.lua Tue Mar 12 12:30:35 2013 +0000
+++ b/plugins/mod_compression.lua Sat Mar 16 18:49:14 2013 +0100
@@ -141,10 +141,7 @@
-- setup decompression for session.data
setup_decompression(session, inflate_stream);
session:reset_stream();
- local default_stream_attr = {xmlns = "jabber:server", ["xmlns:stream"] = "http://etherx.jabber.org/streams",
- ["xmlns:db"] = 'jabber:server:dialback', version = "1.0", to = session.to_host, from = session.from_host};
- session.sends2s("<?xml version='1.0'?>");
- session.sends2s(st.stanza("stream:stream", default_stream_attr):top_tag());
+ session:open_stream();
session.compressed = true;
return true;
end
--- a/plugins/mod_s2s/mod_s2s.lua Tue Mar 12 12:30:35 2013 +0000
+++ b/plugins/mod_s2s/mod_s2s.lua Sat Mar 16 18:49:14 2013 +0100
@@ -248,10 +248,7 @@
if session.secure and not session.cert_chain_status then check_cert_status(session); end
- send("<?xml version='1.0'?>");
- send(st.stanza("stream:stream", { xmlns='jabber:server',
- ["xmlns:db"]= hosts[to].modules.dialback and 'jabber:server:dialback' or nil,
- ["xmlns:stream"]='http://etherx.jabber.org/streams', id=session.streamid, from=to, to=from, version=(session.version > 0 and "1.0" or nil) }):top_tag());
+ session:open_stream()
if session.version >= 1.0 then
local features = st.stanza("stream:features");
@@ -348,8 +345,7 @@
local log = session.log or log;
if session.conn then
if session.notopen then
- session.sends2s("<?xml version='1.0'?>");
- session.sends2s(st.stanza("stream:stream", default_stream_attr):top_tag());
+ session:open_stream()
end
if reason then -- nil == no err, initiated by us, false == initiated by remote
if type(reason) == "string" then -- assume stream error
@@ -396,6 +392,27 @@
end
end
+function session_open_stream(session, from, to)
+ local from = from or session.from_host;
+ local to = to or session.to_host;
+ local attr = {
+ ["xmlns:stream"] = 'http://etherx.jabber.org/streams',
+ xmlns = 'jabber:server',
+ version = session.version and (session.version > 0 and "1.0" or nil),
+ ["xml:lang"] = 'en',
+ id = session.streamid,
+ from = from, to = to,
+ }
+ local local_host = session.direction == "outgoing" and from or to;
+ if not local_host or hosts[local_host].modules.dialback then
+ attr["xmlns:db"] = 'jabber:server:dialback';
+ end
+
+ session.sends2s("<?xml version='1.0'?>");
+ session.sends2s(st.stanza("stream:stream", attr):top_tag());
+ return true;
+end
+
-- Session initialization logic shared by incoming and outgoing
local function initialize_session(session)
local stream = new_xmpp_stream(session, stream_callbacks);
@@ -407,6 +424,8 @@
session.notopen = true;
session.stream:reset();
end
+
+ session.open_stream = session_open_stream;
local filter = session.filter;
function session.data(data)
--- a/plugins/mod_s2s/s2sout.lib.lua Tue Mar 12 12:30:35 2013 +0000
+++ b/plugins/mod_s2s/s2sout.lib.lua Sat Mar 16 18:49:14 2013 +0100
@@ -44,15 +44,9 @@
return a.priority < b.priority or (a.priority == b.priority and a.weight > b.weight);
end
-local function session_open_stream(session, from, to)
- session.sends2s(st.stanza("stream:stream", {
- xmlns='jabber:server', ["xmlns:db"]='jabber:server:dialback',
- ["xmlns:stream"]='http://etherx.jabber.org/streams',
- from=from, to=to, version='1.0', ["xml:lang"]='en'}):top_tag());
-end
-
function s2sout.initiate_connection(host_session)
initialize_filters(host_session);
+ host_session.version = 1;
host_session.open_stream = session_open_stream;
-- Kick the connection attempting machine into life
--- a/plugins/mod_saslauth.lua Tue Mar 12 12:30:35 2013 +0000
+++ b/plugins/mod_saslauth.lua Sat Mar 16 18:49:14 2013 +0100
@@ -88,11 +88,7 @@
module:log("debug", "SASL EXTERNAL with %s succeeded", session.to_host);
session.external_auth = "succeeded"
session:reset_stream();
-
- local default_stream_attr = {xmlns = "jabber:server", ["xmlns:stream"] = "http://etherx.jabber.org/streams",
- ["xmlns:db"] = 'jabber:server:dialback', version = "1.0", to = session.to_host, from = session.from_host};
- session.sends2s("<?xml version='1.0'?>");
- session.sends2s(st.stanza("stream:stream", default_stream_attr):top_tag());
+ session:open_stream();
s2s_make_authenticated(session, session.to_host);
return true;