aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_c2s.erl
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2017-12-23 22:45:01 +0100
committerHolger Weiss <holger@zedat.fu-berlin.de>2017-12-23 22:45:01 +0100
commitb54e1e49ba6794725bead67d530b50ab89ce078b (patch)
treece720965db45196c253983874482d80f0c21b08f /src/ejabberd_c2s.erl
parentmod_muc_admin: Fix last timestamp retrieval (diff)
Don't let privacy list prevent local roster update
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index a49987feb..6794ef163 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -646,35 +646,39 @@ route_probe_reply(_, _) ->
process_presence_out(#{user := User, server := Server, lserver := LServer,
jid := JID, lang := Lang, pres_a := PresA} = State,
#presence{from = From, to = To, type = Type} = Pres) ->
- LTo = jid:tolower(To),
- case privacy_check_packet(State, Pres, out) of
- deny ->
- ErrText = <<"Your active privacy list has denied "
- "the routing of this stanza.">>,
- Err = xmpp:err_not_acceptable(ErrText, Lang),
- send_error(State, Pres, Err);
- allow when Type == subscribe; Type == subscribed;
- Type == unsubscribe; Type == unsubscribed ->
+ if Type == subscribe; Type == subscribed;
+ Type == unsubscribe; Type == unsubscribed ->
Access = gen_mod:get_module_opt(LServer, mod_roster, access, all),
MyBareJID = jid:remove_resource(JID),
case acl:match_rule(LServer, Access, MyBareJID) of
deny ->
- ErrText = <<"Access denied by service policy">>,
- Err = xmpp:err_forbidden(ErrText, Lang),
- send_error(State, Pres, Err);
+ AccessErrTxt = <<"Access denied by service policy">>,
+ AccessErr = xmpp:err_forbidden(AccessErrTxt, Lang),
+ send_error(State, Pres, AccessErr);
allow ->
ejabberd_hooks:run(roster_out_subscription,
LServer,
- [User, Server, To, Type]),
- BareFrom = jid:remove_resource(From),
- ejabberd_router:route(xmpp:set_from_to(Pres, BareFrom, To)),
- State
+ [User, Server, To, Type])
end;
+ true -> ok
+ end,
+ case privacy_check_packet(State, Pres, out) of
+ deny ->
+ PrivErrTxt = <<"Your active privacy list has denied "
+ "the routing of this stanza.">>,
+ PrivErr = xmpp:err_not_acceptable(PrivErrTxt, Lang),
+ send_error(State, Pres, PrivErr);
+ allow when Type == subscribe; Type == subscribed;
+ Type == unsubscribe; Type == unsubscribed ->
+ BareFrom = jid:remove_resource(From),
+ ejabberd_router:route(xmpp:set_from_to(Pres, BareFrom, To)),
+ State;
allow when Type == error; Type == probe ->
ejabberd_router:route(Pres),
State;
allow ->
ejabberd_router:route(Pres),
+ LTo = jid:tolower(To),
LBareTo = jid:remove_resource(LTo),
LBareFrom = jid:remove_resource(jid:tolower(From)),
if LBareTo /= LBareFrom ->