Comparison

plugins/mod_dialback.lua @ 4848:f7a4920aed6b

mod_dialback: Final sweep to get nameprep + error handling in order (hopefully)
author Matthew Wild <mwild1@gmail.com>
date Fri, 11 May 2012 02:04:29 +0100
parent 4847:7a7cc4d98faf
child 4851:8e3992ae7bf5
comparison
equal deleted inserted replaced
4847:7a7cc4d98faf 4848:f7a4920aed6b
63 63
64 if origin.type == "s2sin_unauthed" or origin.type == "s2sin" then 64 if origin.type == "s2sin_unauthed" or origin.type == "s2sin" then
65 -- he wants to be identified through dialback 65 -- he wants to be identified through dialback
66 -- We need to check the key with the Authoritative server 66 -- We need to check the key with the Authoritative server
67 local attr = stanza.attr; 67 local attr = stanza.attr;
68 local to, from = attr.to, attr.from; 68 local to, from = nameprep(attr.to), nameprep(attr.from);
69
70 origin.hosts[from] = { dialback_key = stanza[1] };
71 69
72 if not hosts[to] then 70 if not hosts[to] then
73 -- Not a host that we serve 71 -- Not a host that we serve
74 origin.log("info", "%s tried to connect to %s, which we don't serve", from, to); 72 origin.log("info", "%s tried to connect to %s, which we don't serve", from, to);
75 origin:close("host-unknown"); 73 origin:close("host-unknown");
76 return true; 74 return true;
75 elseif not from then
76 origin:close("improper-addressing");
77 end 77 end
78
79 origin.hosts[from] = { dialback_key = stanza[1] };
78 80
79 dialback_requests[from.."/"..origin.streamid] = origin; 81 dialback_requests[from.."/"..origin.streamid] = origin;
80 82
81 -- COMPAT: ejabberd, gmail and perhaps others do not always set 'to' and 'from' 83 -- COMPAT: ejabberd, gmail and perhaps others do not always set 'to' and 'from'
82 -- on streams. We fill in the session's to/from here instead. 84 -- on streams. We fill in the session's to/from here instead.
83 if not origin.from_host then 85 if not origin.from_host then
84 origin.from_host = nameprep(attr.from); 86 origin.from_host = from;
85 if not origin.from_host then
86 origin.log("debug", "We need to know where to connect but remote server blindly refuses to tell us and to comply to specs, closing connection.");
87 origin:close("invalid-from");
88 end
89 end 87 end
90 if not origin.to_host then 88 if not origin.to_host then
91 origin.to_host = nameprep(attr.to); 89 origin.to_host = nameprep(attr.to);
92 end 90 end
93 91
94 if not origin.from_host or not origin.to_host then
95 origin.log("debug", "Improper addressing supplied, no to or from?");
96 origin:close("improper-addressing");
97 end
98
99 origin.log("debug", "asking %s if key %s belongs to them", from, stanza[1]); 92 origin.log("debug", "asking %s if key %s belongs to them", from, stanza[1]);
100 module:fire_event("route/remote", { 93 module:fire_event("route/remote", {
101 from_host = to, to_host = from; 94 from_host = to, to_host = from;
102 stanza = st.stanza("db:verify", { from = to, to = from, id = origin.streamid }):text(stanza[1]); 95 stanza = st.stanza("db:verify", { from = to, to = from, id = origin.streamid }):text(stanza[1]);
103 }); 96 });