mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-22 16:20:52 +01:00
* src/ejabberd_c2s.erl: Enforce privacy rules also for
subscription requests (EJAB-300) * src/ejabberd_sm.erl: Likewise SVN Revision: 1976
This commit is contained in:
parent
d6820f2c2d
commit
56c33e994d
@ -1,5 +1,9 @@
|
|||||||
2009-03-07 Badlop <badlop@process-one.net>
|
2009-03-07 Badlop <badlop@process-one.net>
|
||||||
|
|
||||||
|
* src/ejabberd_c2s.erl: Enforce privacy rules also for
|
||||||
|
subscription requests (EJAB-300)
|
||||||
|
* src/ejabberd_sm.erl: Likewise
|
||||||
|
|
||||||
* src/mod_privacy.erl: Temporary workaround to inconsistency
|
* src/mod_privacy.erl: Temporary workaround to inconsistency
|
||||||
* src/mod_privacy_odbc.erl: Likewise
|
* src/mod_privacy_odbc.erl: Likewise
|
||||||
|
|
||||||
|
@ -1039,13 +1039,22 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
|
|||||||
'unavailable'),
|
'unavailable'),
|
||||||
{true, Attrs1, StateData};
|
{true, Attrs1, StateData};
|
||||||
'subscribe' ->
|
'subscribe' ->
|
||||||
{true, Attrs, StateData};
|
Reason = exmpp_presence:get_status(Packet),
|
||||||
|
SRes = check_privacy_subs(in, subscribe, From, To,
|
||||||
|
Packet, Reason, StateData),
|
||||||
|
{SRes, Attrs, StateData};
|
||||||
'subscribed' ->
|
'subscribed' ->
|
||||||
{true, Attrs, StateData};
|
SRes = check_privacy_subs(in, subscribed, From, To,
|
||||||
|
Packet, <<>>, StateData),
|
||||||
|
{SRes, Attrs, StateData};
|
||||||
'unsubscribe' ->
|
'unsubscribe' ->
|
||||||
{true, Attrs, StateData};
|
SRes = check_privacy_subs(in, unsubscribe, From, To,
|
||||||
|
Packet, <<>>, StateData),
|
||||||
|
{SRes, Attrs, StateData};
|
||||||
'unsubscribed' ->
|
'unsubscribed' ->
|
||||||
{true, Attrs, StateData};
|
SRes = check_privacy_subs(in, unsubscribed, From, To,
|
||||||
|
Packet, <<>>, StateData),
|
||||||
|
{SRes, Attrs, StateData};
|
||||||
_ ->
|
_ ->
|
||||||
case ejabberd_hooks:run_fold(
|
case ejabberd_hooks:run_fold(
|
||||||
privacy_check_packet, StateData#state.server,
|
privacy_check_packet, StateData#state.server,
|
||||||
@ -1571,6 +1580,36 @@ check_privacy_route(From, StateData, FromRoute, To, Packet) ->
|
|||||||
ejabberd_router:route(FromRoute, To, Packet)
|
ejabberd_router:route(FromRoute, To, Packet)
|
||||||
end.
|
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.
|
||||||
|
|
||||||
presence_broadcast(StateData, From, JIDSet, Packet) ->
|
presence_broadcast(StateData, From, JIDSet, Packet) ->
|
||||||
lists:foreach(fun({U, S, R}) ->
|
lists:foreach(fun({U, S, R}) ->
|
||||||
FJID = exmpp_jid:make_jid(U, S, R),
|
FJID = exmpp_jid:make_jid(U, S, R),
|
||||||
|
@ -422,34 +422,13 @@ do_route(From, To, Packet) ->
|
|||||||
{Pass, _Subsc} =
|
{Pass, _Subsc} =
|
||||||
case exmpp_presence:get_type(Packet) of
|
case exmpp_presence:get_type(Packet) of
|
||||||
'subscribe' ->
|
'subscribe' ->
|
||||||
Reason = exmpp_presence:get_status(Packet),
|
{true, true};
|
||||||
{ejabberd_hooks:run_fold(
|
|
||||||
roster_in_subscription,
|
|
||||||
exmpp_jid:ldomain(To),
|
|
||||||
false,
|
|
||||||
[exmpp_jid:lnode(To), exmpp_jid:ldomain(To), From, subscribe, Reason]),
|
|
||||||
true};
|
|
||||||
'subscribed' ->
|
'subscribed' ->
|
||||||
{ejabberd_hooks:run_fold(
|
{true, true};
|
||||||
roster_in_subscription,
|
|
||||||
exmpp_jid:ldomain(To),
|
|
||||||
false,
|
|
||||||
[exmpp_jid:lnode(To), exmpp_jid:ldomain(To), From, subscribed, <<>>]),
|
|
||||||
true};
|
|
||||||
'unsubscribe' ->
|
'unsubscribe' ->
|
||||||
{ejabberd_hooks:run_fold(
|
{true, true};
|
||||||
roster_in_subscription,
|
|
||||||
exmpp_jid:ldomain(To),
|
|
||||||
false,
|
|
||||||
[exmpp_jid:lnode(To), exmpp_jid:ldomain(To), From, unsubscribe, <<>>]),
|
|
||||||
true};
|
|
||||||
'unsubscribed' ->
|
'unsubscribed' ->
|
||||||
{ejabberd_hooks:run_fold(
|
{true, true};
|
||||||
roster_in_subscription,
|
|
||||||
exmpp_jid:ldomain(To),
|
|
||||||
false,
|
|
||||||
[exmpp_jid:lnode(To), exmpp_jid:ldomain(To), From, unsubscribed, <<>>]),
|
|
||||||
true};
|
|
||||||
_ ->
|
_ ->
|
||||||
{true, false}
|
{true, false}
|
||||||
end,
|
end,
|
||||||
|
Loading…
Reference in New Issue
Block a user