Mercurial > prosody-modules
comparison mod_delegation/mod_delegation.lua @ 1723:ef85c42ad977
mod_delegation: fixed bad handling of error replies from managing entity
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 04 May 2015 18:44:00 +0200 |
parents | c48c7f948cfb |
children | 2440a75e868f |
comparison
equal
deleted
inserted
replaced
1722:c48c7f948cfb | 1723:ef85c42ad977 |
---|---|
181 stanza_cache[stanza.attr.from][stanza.attr.id] = nil | 181 stanza_cache[stanza.attr.from][stanza.attr.id] = nil |
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 #iq ~= 1 then | 186 if #forwarded ~= 1 or iq.name ~= "iq" or |
187 (iq.attr.type =='result' and #iq ~= 1) or | |
188 (iq.attr.type == 'error' and #iq > 2) then | |
187 module:log("warn", "ignoring invalid iq result from managing entity %s", stanza.attr.from) | 189 module:log("warn", "ignoring invalid iq result from managing entity %s", stanza.attr.from) |
188 stanza_cache[stanza.attr.from][stanza.attr.id] = nil | 190 stanza_cache[stanza.attr.from][stanza.attr.id] = nil |
189 return true | 191 return true |
190 end | 192 end |
191 | 193 |
192 local namespace = iq.tags[1].xmlns | |
193 local ns_data = ns_delegations[namespace] | |
194 local original = stanza_cache[stanza.attr.from][stanza.attr.id] | 194 local original = stanza_cache[stanza.attr.from][stanza.attr.id] |
195 stanza_cache[stanza.attr.from][stanza.attr.id] = nil | 195 stanza_cache[stanza.attr.from][stanza.attr.id] = nil |
196 | 196 -- we get namespace from original and not iq |
197 if stanza.attr.from ~= ns_data.connected or iq.attr.type ~= "result" or | 197 -- because the namespace can be lacking in case of error |
198 local namespace = original.tags[1].attr.xmlns | |
199 local ns_data = ns_delegations[namespace] | |
200 | |
201 if stanza.attr.from ~= ns_data.connected or (iq.attr.type ~= "result" and iq.attr.type ~= "error") or | |
198 iq.attr.id ~= original.attr.id or iq.attr.to ~= original.attr.from then | 202 iq.attr.id ~= original.attr.id or iq.attr.to ~= original.attr.from then |
199 module:log("warn", "ignoring forbidden iq result from managing entity %s, please check that the component is no trying to do something bad (stanza: %s)", stanza.attr.from, tostring(stanza)) | 203 module:log("warn", "ignoring forbidden iq result from managing entity %s, please check that the component is no trying to do something bad (stanza: %s)", stanza.attr.from, tostring(stanza)) |
200 module:send(st.error_reply(original, 'cancel', 'service-unavailable')) | 204 module:send(st.error_reply(original, 'cancel', 'service-unavailable')) |
201 return true | 205 return true |
202 end | 206 end |