diff options
author | Mickaël Rémond <mickael.remond@process-one.net> | 2008-12-28 12:15:51 +0000 |
---|---|---|
committer | Mickaël Rémond <mickael.remond@process-one.net> | 2008-12-28 12:15:51 +0000 |
commit | 707aa4fb8c6f6da8f8c1639acdc8c10b28f83227 (patch) | |
tree | 0cadab5a85d852c0dc6b623342820a692c3903c0 | |
parent | Use inet:gethostbyname instead of inet_res:getbyname (diff) |
* src/ejabberd_c2s.erl: We should allow use of bare resource in from by the client (partially revert r1727) (EJAB-812)
SVN Revision: 1759
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | src/ejabberd_c2s.erl | 39 |
2 files changed, 31 insertions, 13 deletions
@@ -1,3 +1,8 @@ +2008-12-28 Mickael Remond <mremond@process-one.net> + + * src/ejabberd_c2s.erl: We should allow use of bare resource in from by + the client (partially revert r1727) (EJAB-812). + 2008-12-26 Badlop <badlop@process-one.net> * src/web/ejabberd_web_admin.erl: Show in ejabberd Web Admin the diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 7fcff5b4..c8ae3f18 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1983,20 +1983,33 @@ is_ip_blacklisted({IP,_Port}) -> check_from(El, FromJID) -> case xml:get_tag_attr("from", El) of false -> - 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; - true -> + 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 -> + %% 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 + %% any good reason for now not to do it on + %% 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' end end end. |