diff options
author | Badlop <badlop@process-one.net> | 2009-03-24 21:02:13 +0300 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2009-03-24 21:02:13 +0300 |
commit | 61691ac47d04cc3d9c4a599c512acd2fb6d92864 (patch) | |
tree | bc817d27fb3a0ae57204f6c8ff6dfc671f11a0f2 /src/ejabberd_c2s.erl | |
parent | 3e756f5d1cc50c0b189d45a419f5df76571b849c (diff) |
Merge 1998 from trunk.
* src/ejabberd_sm.erl: Partially retract SVN r1976
EJAB-300 (EJAB-890). Check default privacy list when account, not
a specific session, receives a presence subscription
stanza (EJAB-300).
* src/ejabberd_c2s.erl: Likewise
SVN Revision: 1999
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r-- | src/ejabberd_c2s.erl | 54 |
1 files changed, 16 insertions, 38 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index d7aca754b..91c257a7c 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1039,21 +1039,16 @@ handle_info({route, From, To, Packet}, StateName, StateData) -> 'unavailable'), {true, Attrs1, StateData}; 'subscribe' -> - Reason = exmpp_presence:get_status(Packet), - SRes = check_privacy_subs(in, subscribe, From, To, - Packet, Reason, StateData), + SRes = is_privacy_allow(From, To, Packet, StateData#state.privacy_list), {SRes, Attrs, StateData}; 'subscribed' -> - SRes = check_privacy_subs(in, subscribed, From, To, - Packet, <<>>, StateData), + SRes = is_privacy_allow(From, To, Packet, StateData#state.privacy_list), {SRes, Attrs, StateData}; 'unsubscribe' -> - SRes = check_privacy_subs(in, unsubscribe, From, To, - Packet, <<>>, StateData), + SRes = is_privacy_allow(From, To, Packet, StateData#state.privacy_list), {SRes, Attrs, StateData}; 'unsubscribed' -> - SRes = check_privacy_subs(in, unsubscribed, From, To, - Packet, <<>>, StateData), + SRes = is_privacy_allow(From, To, Packet, StateData#state.privacy_list), {SRes, Attrs, StateData}; _ -> case ejabberd_hooks:run_fold( @@ -1580,35 +1575,18 @@ check_privacy_route(From, StateData, FromRoute, To, Packet) -> ejabberd_router:route(FromRoute, To, Packet) end. -%% Check privacy rules for subscription requests and call the roster storage -check_privacy_subs(Dir, Type, From, To, Packet, Reason, StateData) -> - case is_privacy_allow(From, To, Dir, Packet, StateData) of - true -> - ejabberd_hooks:run_fold( - roster_in_subscription, - exmpp_jid:ldomain(To), - false, - [exmpp_jid:lnode(To), exmpp_jid:ldomain(To), From, Type, Reason]), - true; - false -> - false - end. - -%% Check if privacy rules allow this delivery, then push to roster -is_privacy_allow(From, To, Dir, Packet, StateData) -> - case ejabberd_hooks:run_fold( - privacy_check_packet, StateData#state.server, - allow, - [StateData#state.user, - StateData#state.server, - StateData#state.privacy_list, - {From, To, Packet}, - Dir]) of - deny -> - false; - allow -> - true - end. +%% Check if privacy rules allow this delivery +is_privacy_allow(From, To, Packet, PrivacyList) -> + User = exmpp_jid:lnode(To), + Server = exmpp_jid:ldomain(To), + allow == ejabberd_hooks:run_fold( + privacy_check_packet, Server, + allow, + [User, + Server, + PrivacyList, + {From, To, Packet}, + in]). presence_broadcast(StateData, From, JIDSet, Packet) -> lists:foreach(fun({U, S, R}) -> |