From c47252aea1e76414316b06f59b3493c1aaa2127c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20K=C3=B6hler?= Date: Fri, 5 Nov 2010 03:29:32 +0100 Subject: [PATCH] Use c2s state data as user and server in ejabberd_c2s:is_privacy_allow is_privacy_allow is only used in ejabberd_c2s:handle_info/3 to determine for a few presence types whether the packet is allowed to be forwarded to the user's client. This only makes sense if To#jid.user and To#jid.server match StateData#state.user and StateData#state.server. Also, add the atom in as parameter to a new argument Dir of is_privacy_allow and extract from that function privacy_check_packet(StateData, From, To, Packet, Dir) which runs the privavcy check without converting allow/deny to true/false. --- src/ejabberd_c2s.erl | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 788c7d69e..a487664fa 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1156,16 +1156,16 @@ handle_info({route, From, To, Packet}, StateName, StateData) -> Attrs1 = lists:keydelete("type", 1, Attrs), {true, [{"type", "unavailable"} | Attrs1], StateData}; "subscribe" -> - SRes = is_privacy_allow(From, To, Packet, StateData#state.privacy_list), + SRes = is_privacy_allow(StateData, From, To, Packet, in), {SRes, Attrs, StateData}; "subscribed" -> - SRes = is_privacy_allow(From, To, Packet, StateData#state.privacy_list), + SRes = is_privacy_allow(StateData, From, To, Packet, in), {SRes, Attrs, StateData}; "unsubscribe" -> - SRes = is_privacy_allow(From, To, Packet, StateData#state.privacy_list), + SRes = is_privacy_allow(StateData, From, To, Packet, in), {SRes, Attrs, StateData}; "unsubscribed" -> - SRes = is_privacy_allow(From, To, Packet, StateData#state.privacy_list), + SRes = is_privacy_allow(StateData, From, To, Packet, in), {SRes, Attrs, StateData}; _ -> case ejabberd_hooks:run_fold( @@ -1824,18 +1824,19 @@ check_privacy_route(From, StateData, FromRoute, To, Packet) -> ejabberd_router:route(FromRoute, To, Packet) end. +privacy_check_packet(StateData, From, To, Packet, Dir) -> + 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]). + %% Check if privacy rules allow this delivery -is_privacy_allow(From, To, Packet, PrivacyList) -> - User = To#jid.user, - Server = To#jid.server, - allow == ejabberd_hooks:run_fold( - privacy_check_packet, Server, - allow, - [User, - Server, - PrivacyList, - {From, To, Packet}, - in]). +is_privacy_allow(StateData, From, To, Packet, Dir) -> + allow == privacy_check_packet(StateData, From, To, Packet, Dir). presence_broadcast(StateData, From, JIDSet, Packet) -> lists:foreach(fun(JID) ->