From df478a8e90fa0d44d4f0659f07016b1943a9b807 Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Mon, 29 Dec 2008 11:11:37 +0000 Subject: [PATCH] * src/ejabberd_c2s.erl: Bugfix in "from" attribute checking SVN Revision: 1763 --- ChangeLog | 4 ++++ src/ejabberd_c2s.erl | 36 +++++++++++++++++------------------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 24b09e0b7..f7f84b8c2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-12-29 Alexey Shchepin + + * src/ejabberd_c2s.erl: Bugfix in "from" attribute checking + 2008-12-29 Evgeniy Khramtsov * src/odbc/ejabberd_odbc.erl: Print meaningful error message when diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index c8ae3f188..10d323ab7 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1983,14 +1983,21 @@ is_ip_blacklisted({IP,_Port}) -> check_from(El, FromJID) -> case xml:get_tag_attr("from", El) of false -> - jlib:replace_from(FromJID, El); - {value, JIDElString} -> - JIDEl = jlib:string_to_jid(JIDElString), - case JIDEl#jid.lresource of - "" -> - %% Matching JID: The stanza is ok - if JIDEl#jid.luser == FromJID#jid.luser andalso - JIDEl#jid.lserver == FromJID#jid.lserver -> + El; + {value, SJID} -> + JID = jlib:string_to_jid(SJID), + case JID of + error -> + 'invalid-from'; + #jid{} -> + if + (JID#jid.luser == FromJID#jid.luser) and + (JID#jid.lserver == FromJID#jid.lserver) and + (JID#jid.lresource == FromJID#jid.lresource) -> + El; + (JID#jid.luser == FromJID#jid.luser) and + (JID#jid.lserver == FromJID#jid.lserver) and + (JID#jid.lresource == "") -> %% We force the resource on the from attribute in the packet. %% This is strictly needed only for IQ (to %% reply to the client), but I do not see @@ -1998,18 +2005,9 @@ check_from(El, FromJID) -> %% all packets. %% Need to be changed to support multiple %% resource binding per connection. - jlib:replace_from(FromJID, El); - true -> - 'invalid-from' - end; - _ -> - %% Matching JID: The stanza is ok - if JIDEl#jid.luser == FromJID#jid.luser andalso - JIDEl#jid.lserver == FromJID#jid.lserver andalso - JIDEl#jid.lresource == FromJID#jid.lresource -> El; - true -> - 'invalid-from' + true -> + 'invalid-from' end end end.