Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2009-03-03 22:32:48 +0300
committerBadlop <badlop@process-one.net>2009-03-03 22:32:48 +0300
commit5bfdb71b4c850abafa8bececefc4d8987827373c (patch)
treecc20801a7c96db6dcf8a3a3edd19af7d74d99ea1 /src/ejabberd_c2s.erl
parent890b1c4f600515cb9f78aa818dad815e9fd8c5e3 (diff)
Merge 1881 from trunk.
* src/mod_privacy.erl: Privacy List: deny presence-out all + send presence to: presence is sent (EJAB-255) * src/ejabberd_c2s.erl: Likewise SVN Revision: 1948
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl53
1 files changed, 30 insertions, 23 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 614a4e4e4..6fd3254a4 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -877,8 +877,8 @@ session_established2(El, StateData) ->
user_send_packet,
Server,
[FromJID, ToJID, NewEl]),
- ejabberd_router:route(
- FromJID, ToJID, NewEl),
+ check_privacy_route(FromJID, StateData, FromJID,
+ ToJID, NewEl),
StateData
end;
#xmlel{ns = ?NS_JABBER_CLIENT, name = 'message'} ->
@@ -1500,16 +1500,16 @@ presence_update(From, Packet, StateData) ->
%% User sends a directed presence packet
presence_track(From, To, Packet, StateData) ->
LTo = jlib:short_prepd_jid(To),
- BFrom = exmpp_jid:jid_to_bare_jid(From),
case exmpp_presence:get_type(Packet) of
'unavailable' ->
- ejabberd_router:route(From, To, Packet),
+ check_privacy_route(From, StateData, From, To, Packet),
I = remove_element(LTo, StateData#state.pres_i),
A = remove_element(LTo, StateData#state.pres_a),
StateData#state{pres_i = I,
pres_a = A};
'invisible' ->
ejabberd_router:route(From, To, Packet),
+ check_privacy_route(From, StateData, From, To, Packet),
I = ?SETS:add_element(LTo, StateData#state.pres_i),
A = remove_element(LTo, StateData#state.pres_a),
StateData#state{pres_i = I,
@@ -1518,52 +1518,59 @@ presence_track(From, To, Packet, StateData) ->
ejabberd_hooks:run(roster_out_subscription,
StateData#state.server,
[StateData#state.user, StateData#state.server, To, subscribe]),
- ejabberd_router:route(BFrom, To, Packet),
+ check_privacy_route(From, StateData, exmpp_jid:jid_to_bare_jid(From),
+ To, Packet),
StateData;
'subscribed' ->
ejabberd_hooks:run(roster_out_subscription,
StateData#state.server,
[StateData#state.user, StateData#state.server, To, subscribed]),
- ejabberd_router:route(BFrom, To, Packet),
+ check_privacy_route(From, StateData, exmpp_jid:jid_to_bare_jid(From),
+ To, Packet),
StateData;
'unsubscribe' ->
ejabberd_hooks:run(roster_out_subscription,
StateData#state.server,
[StateData#state.user, StateData#state.server, To, unsubscribe]),
- ejabberd_router:route(BFrom, To, Packet),
+ check_privacy_route(From, StateData, exmpp_jid:jid_to_bare_jid(From),
+ To, Packet),
StateData;
'unsubscribed' ->
ejabberd_hooks:run(roster_out_subscription,
StateData#state.server,
[StateData#state.user, StateData#state.server, To, unsubscribed]),
- ejabberd_router:route(BFrom, To, Packet),
+ check_privacy_route(From, StateData, exmpp_jid:jid_to_bare_jid(From),
+ To, Packet),
StateData;
'error' ->
- ejabberd_router:route(From, To, Packet),
+ check_privacy_route(From, StateData, From, To, Packet),
StateData;
'probe' ->
- ejabberd_router:route(From, To, Packet),
+ check_privacy_route(From, StateData, From, To, 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},
- out]) of
- deny ->
- ok;
- allow ->
- ejabberd_router:route(From, To, Packet)
- end,
+ check_privacy_route(From, StateData, From, To, Packet),
I = remove_element(LTo, StateData#state.pres_i),
A = ?SETS:add_element(LTo, StateData#state.pres_a),
StateData#state{pres_i = I,
pres_a = A}
end.
+check_privacy_route(From, StateData, FromRoute, To, Packet) ->
+ 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},
+ out]) of
+ deny ->
+ ok;
+ allow ->
+ ejabberd_router:route(FromRoute, To, Packet)
+ end.
+
presence_broadcast(StateData, From, JIDSet, Packet) ->
lists:foreach(fun({U, S, R}) ->
FJID = exmpp_jid:make_jid(U, S, R),