Software / code / prosody
Comparison
core/stanza_router.lua @ 145:fbb3a4ff9cf1 s2s
dialback keys now verified
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 24 Oct 2008 03:06:55 +0100 |
| parent | 144:ed78c1a0401e |
| child | 146:3826ca244eb6 |
comparison
equal
deleted
inserted
replaced
| 144:ed78c1a0401e | 145:fbb3a4ff9cf1 |
|---|---|
| 9 | 9 |
| 10 local st = require "util.stanza"; | 10 local st = require "util.stanza"; |
| 11 local send = require "core.sessionmanager".send_to_session; | 11 local send = require "core.sessionmanager".send_to_session; |
| 12 local send_s2s = require "core.s2smanager".send_to_host; | 12 local send_s2s = require "core.s2smanager".send_to_host; |
| 13 local user_exists = require "core.usermanager".user_exists; | 13 local user_exists = require "core.usermanager".user_exists; |
| 14 | |
| 15 local s2s_verify_dialback = require "core.s2smanager".verify_dialback; | |
| 16 local format = string.format; | |
| 17 local tostring = tostring; | |
| 14 | 18 |
| 15 local jid_split = require "util.jid".split; | 19 local jid_split = require "util.jid".split; |
| 16 local print = print; | 20 local print = print; |
| 17 | 21 |
| 18 function core_process_stanza(origin, stanza) | 22 function core_process_stanza(origin, stanza) |
| 31 and stanza.tags[1].attr.xmlns == "urn:ietf:params:xml:ns:xmpp-bind") then | 35 and stanza.tags[1].attr.xmlns == "urn:ietf:params:xml:ns:xmpp-bind") then |
| 32 error("Client MUST bind resource after auth"); | 36 error("Client MUST bind resource after auth"); |
| 33 end | 37 end |
| 34 | 38 |
| 35 local to = stanza.attr.to; | 39 local to = stanza.attr.to; |
| 36 stanza.attr.from = origin.full_jid; -- quick fix to prevent impersonation (FIXME this would be incorrect when the origin is not c2s) | |
| 37 -- TODO also, stazas should be returned to their original state before the function ends | 40 -- TODO also, stazas should be returned to their original state before the function ends |
| 41 if origin.type == "c2s" then | |
| 42 stanza.attr.from = origin.full_jid; -- quick fix to prevent impersonation (FIXME this would be incorrect when the origin is not c2s) | |
| 43 end | |
| 38 | 44 |
| 39 -- TODO presence subscriptions | |
| 40 if not to then | 45 if not to then |
| 41 core_handle_stanza(origin, stanza); | 46 core_handle_stanza(origin, stanza); |
| 42 elseif hosts[to] and hosts[to].type == "local" then | 47 elseif hosts[to] and hosts[to].type == "local" then |
| 43 core_handle_stanza(origin, stanza); | 48 core_handle_stanza(origin, stanza); |
| 44 elseif stanza.name == "iq" and not select(3, jid_split(to)) then | 49 elseif stanza.name == "iq" and not select(3, jid_split(to)) then |
| 88 end | 93 end |
| 89 else | 94 else |
| 90 log("debug", "Routing stanza to local"); | 95 log("debug", "Routing stanza to local"); |
| 91 handle_stanza(session, stanza); | 96 handle_stanza(session, stanza); |
| 92 end | 97 end |
| 98 elseif origin.type == "s2sin_unauthed" then | |
| 99 if stanza.name == "verify" and stanza.attr.xmlns == "jabber:server:dialback" then | |
| 100 log("debug", "verifying dialback key..."); | |
| 101 local attr = stanza.attr; | |
| 102 print(tostring(attr.to), tostring(attr.from)) | |
| 103 print(tostring(origin.to_host), tostring(origin.from_host)) | |
| 104 -- FIXME: Grr, ejabberd breaks this one too?? it is black and white in XEP-220 example 34 | |
| 105 --if attr.from ~= origin.to_host then error("invalid-from"); end | |
| 106 local type = "invalid"; | |
| 107 if s2s_verify_dialback(attr.id, attr.from, attr.to, stanza[1]) then | |
| 108 type = "valid" | |
| 109 end | |
| 110 origin.send(format("<db:verify from='%s' to='%s' id='%s' type='%s'>%s</db:verify>", attr.to, attr.from, attr.id, type, stanza[1])); | |
| 111 end | |
| 112 else | |
| 113 log("warn", "Unhandled origin: %s", origin.type); | |
| 93 end | 114 end |
| 94 end | 115 end |
| 95 | 116 |
| 96 -- TODO: Does this function belong here? | 117 -- TODO: Does this function belong here? |
| 97 function is_authorized_to_see_presence(origin, username, host) | 118 function is_authorized_to_see_presence(origin, username, host) |