mod_s2s, s2smanager, mod_dialback: Move addition of session.send() on s2sin to after they are authenticated (thus from mod_s2s to s2smanager). Update mod_dialback to fire route/remote directly, as session.send() is no longer available for s2sin_unauthed. Fixes #291.

vault/0.11
Matthew Wild 14 years ago
parent 6182580f65
commit b47f264e2a
  1. 9
      core/s2smanager.lua
  2. 29
      plugins/mod_dialback.lua
  3. 5
      plugins/mod_s2s/mod_s2s.lua

@ -117,10 +117,15 @@ function mark_connected(session)
local event_data = { session = session };
if session.type == "s2sout" then
prosody.events.fire_event("s2sout-established", event_data);
hosts[session.from_host].events.fire_event("s2sout-established", event_data);
hosts[from].events.fire_event("s2sout-established", event_data);
else
local host_session = hosts[to];
session.send = function(stanza)
host_session.events.fire_event("route/remote", { from_host = to, to_host = from, stanza = stanza });
end;
prosody.events.fire_event("s2sin-established", event_data);
hosts[session.to_host].events.fire_event("s2sin-established", event_data);
hosts[to].events.fire_event("s2sin-established", event_data);
end
if session.direction == "outgoing" then

@ -64,28 +64,29 @@ module:hook("stanza/jabber:server:dialback:result", function(event)
-- he wants to be identified through dialback
-- We need to check the key with the Authoritative server
local attr = stanza.attr;
origin.hosts[attr.from] = { dialback_key = stanza[1] };
local to, from = attr.to, attr.from;
if not hosts[attr.to] then
origin.hosts[from] = { dialback_key = stanza[1] };
if not hosts[to] then
-- Not a host that we serve
origin.log("info", "%s tried to connect to %s, which we don't serve", attr.from, attr.to);
origin.log("info", "%s tried to connect to %s, which we don't serve", from, to);
origin:close("host-unknown");
return true;
end
dialback_requests[attr.from.."/"..origin.streamid] = origin;
dialback_requests[from.."/"..origin.streamid] = origin;
if not origin.from_host then
-- Just used for friendlier logging
origin.from_host = attr.from;
end
if not origin.to_host then
-- Just used for friendlier logging
origin.to_host = attr.to;
end
-- COMPAT: ejabberd, gmail and perhaps others do not always set 'to' and 'from'
-- on streams. We fill in the session's to/from here instead.
if not origin.from_host then origin.from_host = from; end
if not origin.to_host then origin.to_host = to; end
origin.log("debug", "asking %s if key %s belongs to them", attr.from, stanza[1]);
origin.send(st.stanza("db:verify", { from = attr.to, to = attr.from, id = origin.streamid }):text(stanza[1]));
origin.log("debug", "asking %s if key %s belongs to them", from, stanza[1]);
module:fire_event("route/remote", {
from_host = to, to_host = from;
stanza = st.stanza("db:verify", { from = to, to = from, id = origin.streamid }):text(stanza[1]);
});
return true;
end
end);

@ -253,11 +253,6 @@ function stream_callbacks.streamopened(session, attr)
log("debug", "Sending stream features: %s", tostring(features));
send(features);
end
local host_session = hosts[to];
session.send = function(stanza)
host_session.events.fire_event("route/remote", { from_host = to, to_host = from, stanza = stanza})
end;
elseif session.direction == "outgoing" then
-- If we are just using the connection for verifying dialback keys, we won't try and auth it
if not attr.id then error("stream response did not give us a streamid!!!"); end

Loading…
Cancel
Save