Software /
code /
prosody-modules
Comparison
mod_delegation/mod_delegation.lua @ 1724:2440a75e868f
mod_delegation: managing_ent_* now stop event propagation + forwarded <iq/> xmlns check
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 07 May 2015 22:40:58 +0200 |
parent | 1723:ef85c42ad977 |
child | 1774:7bfc23b2c038 |
comparison
equal
deleted
inserted
replaced
1723:ef85c42ad977 | 1724:2440a75e868f |
---|---|
182 return true | 182 return true |
183 end | 183 end |
184 | 184 |
185 local iq = forwarded.tags[1] | 185 local iq = forwarded.tags[1] |
186 if #forwarded ~= 1 or iq.name ~= "iq" or | 186 if #forwarded ~= 1 or iq.name ~= "iq" or |
187 iq.attr.xmlns ~= 'jabber:client' or | |
187 (iq.attr.type =='result' and #iq ~= 1) or | 188 (iq.attr.type =='result' and #iq ~= 1) or |
188 (iq.attr.type == 'error' and #iq > 2) then | 189 (iq.attr.type == 'error' and #iq > 2) then |
189 module:log("warn", "ignoring invalid iq result from managing entity %s", stanza.attr.from) | 190 module:log("warn", "ignoring invalid iq result from managing entity %s", stanza.attr.from) |
190 stanza_cache[stanza.attr.from][stanza.attr.id] = nil | 191 stanza_cache[stanza.attr.from][stanza.attr.id] = nil |
191 return true | 192 return true |
192 end | 193 end |
194 | |
195 iq.attr.xmlns = nil | |
193 | 196 |
194 local original = stanza_cache[stanza.attr.from][stanza.attr.id] | 197 local original = stanza_cache[stanza.attr.from][stanza.attr.id] |
195 stanza_cache[stanza.attr.from][stanza.attr.id] = nil | 198 stanza_cache[stanza.attr.from][stanza.attr.id] = nil |
196 -- we get namespace from original and not iq | 199 -- we get namespace from original and not iq |
197 -- because the namespace can be lacking in case of error | 200 -- because the namespace can be lacking in case of error |
206 end | 209 end |
207 | 210 |
208 -- at this point eveything is checked, | 211 -- at this point eveything is checked, |
209 -- and we (hopefully) can send the the result safely | 212 -- and we (hopefully) can send the the result safely |
210 module:send(iq) | 213 module:send(iq) |
214 return true | |
211 end | 215 end |
212 | 216 |
213 function managing_ent_error(event) | 217 function managing_ent_error(event) |
214 local stanza = event.stanza | 218 local stanza = event.stanza |
215 if stanza.attr.to ~= module.host then | 219 if stanza.attr.to ~= module.host then |
220 module:unhook("iq-error/host/"..stanza.attr.id, managing_ent_error) | 224 module:unhook("iq-error/host/"..stanza.attr.id, managing_ent_error) |
221 local original = stanza_cache[stanza.attr.from][stanza.attr.id] | 225 local original = stanza_cache[stanza.attr.from][stanza.attr.id] |
222 stanza_cache[stanza.attr.from][stanza.attr.id] = nil | 226 stanza_cache[stanza.attr.from][stanza.attr.id] = nil |
223 module:log("warn", "Got an error after forwarding stanza to "..stanza.attr.from) | 227 module:log("warn", "Got an error after forwarding stanza to "..stanza.attr.from) |
224 module:send(st.error_reply(original, 'cancel', 'service-unavailable')) | 228 module:send(st.error_reply(original, 'cancel', 'service-unavailable')) |
229 return true | |
225 end | 230 end |
226 | 231 |
227 local function forward_iq(stanza, ns_data) | 232 local function forward_iq(stanza, ns_data) |
228 local to_jid = ns_data.connected | 233 local to_jid = ns_data.connected |
229 stanza.attr.xmlns = 'jabber:client' | 234 stanza.attr.xmlns = 'jabber:client' |