summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2008-12-29 11:11:37 +0000
committerAlexey Shchepin <alexey@process-one.net>2008-12-29 11:11:37 +0000
commitdf478a8e90fa0d44d4f0659f07016b1943a9b807 (patch)
tree3991ac7b17eaf88842e61a2822282279874621f0
parent* src/odbc/odbc_queries.erl: replaced string:join/2 function. (diff)
* src/ejabberd_c2s.erl: Bugfix in "from" attribute checking
SVN Revision: 1763
Diffstat (limited to '')
-rw-r--r--ChangeLog4
-rw-r--r--src/ejabberd_c2s.erl36
2 files changed, 21 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index 24b09e0b..f7f84b8c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-12-29 Alexey Shchepin <alexey@process-one.net>
+
+ * src/ejabberd_c2s.erl: Bugfix in "from" attribute checking
+
2008-12-29 Evgeniy Khramtsov <ekhramtsov@process-one.net>
* src/odbc/ejabberd_odbc.erl: Print meaningful error message when
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index c8ae3f18..10d323ab 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.