Merge 0.9->trunk
authorKim Alvefur <zash@zash.se>
Sat, 16 Mar 2013 18:49:14 +0100
changeset 5352 e10f701c2082
parent 5346 b8fbb9d07efc (current diff)
parent 5351 901ed253bbf7 (diff)
child 5356 97197ca60cb2
Merge 0.9->trunk
--- 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;