diff options
-rw-r--r-- | certs/openssl.cnf | 4 | ||||
-rw-r--r-- | core/hostmanager.lua | 1 | ||||
-rw-r--r-- | core/rostermanager.lua | 5 | ||||
-rw-r--r-- | core/s2smanager.lua | 10 | ||||
-rw-r--r-- | net/http.lua | 7 | ||||
-rw-r--r-- | plugins/mod_compression.lua | 5 | ||||
-rw-r--r-- | plugins/mod_s2s/mod_s2s.lua | 31 | ||||
-rw-r--r-- | plugins/mod_s2s/s2sout.lib.lua | 8 | ||||
-rw-r--r-- | plugins/mod_saslauth.lua | 6 |
9 files changed, 43 insertions, 34 deletions
diff --git a/certs/openssl.cnf b/certs/openssl.cnf index db1640b9..091409c4 100644 --- a/certs/openssl.cnf +++ b/certs/openssl.cnf @@ -2,7 +2,7 @@ oid_section = new_oids [ 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 @@ subjectAltName = @subject_alternative_name [ 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 diff --git a/core/hostmanager.lua b/core/hostmanager.lua index cee4a1d6..7c9298cd 100644 --- a/core/hostmanager.lua +++ b/core/hostmanager.lua @@ -23,6 +23,7 @@ if not _G.prosody.incoming_s2s then 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; diff --git a/core/rostermanager.lua b/core/rostermanager.lua index fdb890f9..f14bb435 100644 --- a/core/rostermanager.lua +++ b/core/rostermanager.lua @@ -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; diff --git a/core/s2smanager.lua b/core/s2smanager.lua index 6049e12e..86389d8d 100644 --- a/core/s2smanager.lua +++ b/core/s2smanager.lua @@ -12,7 +12,6 @@ local hosts = hosts; 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 @@ local prosody = _G.prosody; 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 @@ function mark_connected(session) 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 @@ function mark_connected(session) 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 @@ function destroy_session(session, reason) 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 diff --git a/net/http.lua b/net/http.lua index 273eee09..a1e4e523 100644 --- a/net/http.lua +++ b/net/http.lua @@ -188,7 +188,12 @@ function request(u, ex, callback) return nil, err; end - req.handler, req.conn = server.wrapclient(conn, req.host, port, listener, "*a", using_https and { mode = "client", protocol = "sslv23" }); + local sslctx = false; + if using_https then + sslctx = ex and ex.sslctx or { mode = "client", protocol = "sslv23", options = { "no_sslv2" } }; + end + + req.handler, req.conn = server.wrapclient(conn, req.host, port, listener, "*a", sslctx); req.write = function (...) return req.handler:write(...); end req.callback = function (content, code, request, response) log("debug", "Calling callback, status %s", code or "---"); return select(2, xpcall(function () return callback(content, code, request, response) end, handleerr)); end diff --git a/plugins/mod_compression.lua b/plugins/mod_compression.lua index 67a88eb9..44bc05fe 100644 --- a/plugins/mod_compression.lua +++ b/plugins/mod_compression.lua @@ -141,10 +141,7 @@ module:hook("stanza/http://jabber.org/protocol/compress:compressed", function(ev -- 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 diff --git a/plugins/mod_s2s/mod_s2s.lua b/plugins/mod_s2s/mod_s2s.lua index 6d4900fa..8d99b855 100644 --- a/plugins/mod_s2s/mod_s2s.lua +++ b/plugins/mod_s2s/mod_s2s.lua @@ -248,10 +248,7 @@ function stream_callbacks.streamopened(session, attr) 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 function session_close(session, reason, remote_reason) 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 @@ local function session_close(session, reason, remote_reason) 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 @@ local function initialize_session(session) session.notopen = true; session.stream:reset(); end + + session.open_stream = session_open_stream; local filter = session.filter; function session.data(data) diff --git a/plugins/mod_s2s/s2sout.lib.lua b/plugins/mod_s2s/s2sout.lib.lua index 07623968..5ebbee8e 100644 --- a/plugins/mod_s2s/s2sout.lib.lua +++ b/plugins/mod_s2s/s2sout.lib.lua @@ -44,15 +44,9 @@ local function compare_srv_priorities(a,b) 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 diff --git a/plugins/mod_saslauth.lua b/plugins/mod_saslauth.lua index f6abd3b8..264ee967 100644 --- a/plugins/mod_saslauth.lua +++ b/plugins/mod_saslauth.lua @@ -88,11 +88,7 @@ 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(); - - 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; |