aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWaqas Hussain <waqas20@gmail.com>2010-07-03 18:11:28 +0500
committerWaqas Hussain <waqas20@gmail.com>2010-07-03 18:11:28 +0500
commitb45ab38e21d7c915975a69e52bd565e6cdb75e66 (patch)
treef69201438d1595dcc2c49fa01fd1f474feeee35d
parentafd2f3da8a34282e02e744cd1b13c62e66d613ae (diff)
downloadprosody-b45ab38e21d7c915975a69e52bd565e6cdb75e66.tar.gz
prosody-b45ab38e21d7c915975a69e52bd565e6cdb75e66.zip
xmppcomponent_listener: Don't validate to/from on non-stanzas, fixes component auth.
-rw-r--r--net/xmppcomponent_listener.lua38
1 files changed, 20 insertions, 18 deletions
diff --git a/net/xmppcomponent_listener.lua b/net/xmppcomponent_listener.lua
index 2d6d7de8..2bf77fb6 100644
--- a/net/xmppcomponent_listener.lua
+++ b/net/xmppcomponent_listener.lua
@@ -99,26 +99,28 @@ function stream_callbacks.handlestanza(session, stanza)
if not stanza.attr.xmlns and stanza.name == "handshake" then
stanza.attr.xmlns = xmlns_component;
end
- local from = stanza.attr.from;
- if from then
- if session.component_validate_from then
- local _, domain = jid_split(stanza.attr.from);
- if domain ~= session.host then
- -- Return error
- session:close{
- condition = "invalid-from";
- text = "Component tried to send from address <"..tostring(from)
- .."> which is not in domain <"..tostring(session.host)..">";
- };
- return;
+ if not stanza.attr.xmlns or stanza.attr.xmlns == "jabber:client" then
+ local from = stanza.attr.from;
+ if from then
+ if session.component_validate_from then
+ local _, domain = jid_split(stanza.attr.from);
+ if domain ~= session.host then
+ -- Return error
+ session:close{
+ condition = "invalid-from";
+ text = "Component tried to send from address <"..tostring(from)
+ .."> which is not in domain <"..tostring(session.host)..">";
+ };
+ return;
+ end
end
- end
- else
+ else
stanza.attr.from = session.host;
- end
- if not stanza.attr.to then
- session.send(st.error_reply(stanza, "modify", "bad-request", "Components MUST specify a 'to' address on stanzas"));
- return;
+ end
+ if not stanza.attr.to then
+ session.send(st.error_reply(stanza, "modify", "bad-request", "Components MUST specify a 'to' address on stanzas"));
+ return;
+ end
end
return core_process_stanza(session, stanza);
end