25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-22 16:20:52 +01:00

Don't let privacy list prevent local roster update

This commit is contained in:
Holger Weiss 2017-12-23 22:45:01 +01:00
parent 5e4c547856
commit b54e1e49ba

View File

@ -646,35 +646,39 @@ route_probe_reply(_, _) ->
process_presence_out(#{user := User, server := Server, lserver := LServer, process_presence_out(#{user := User, server := Server, lserver := LServer,
jid := JID, lang := Lang, pres_a := PresA} = State, jid := JID, lang := Lang, pres_a := PresA} = State,
#presence{from = From, to = To, type = Type} = Pres) -> #presence{from = From, to = To, type = Type} = Pres) ->
LTo = jid:tolower(To), if Type == subscribe; Type == subscribed;
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 -> Type == unsubscribe; Type == unsubscribed ->
Access = gen_mod:get_module_opt(LServer, mod_roster, access, all), Access = gen_mod:get_module_opt(LServer, mod_roster, access, all),
MyBareJID = jid:remove_resource(JID), MyBareJID = jid:remove_resource(JID),
case acl:match_rule(LServer, Access, MyBareJID) of case acl:match_rule(LServer, Access, MyBareJID) of
deny -> deny ->
ErrText = <<"Access denied by service policy">>, AccessErrTxt = <<"Access denied by service policy">>,
Err = xmpp:err_forbidden(ErrText, Lang), AccessErr = xmpp:err_forbidden(AccessErrTxt, Lang),
send_error(State, Pres, Err); send_error(State, Pres, AccessErr);
allow -> allow ->
ejabberd_hooks:run(roster_out_subscription, ejabberd_hooks:run(roster_out_subscription,
LServer, LServer,
[User, Server, To, Type]), [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), BareFrom = jid:remove_resource(From),
ejabberd_router:route(xmpp:set_from_to(Pres, BareFrom, To)), ejabberd_router:route(xmpp:set_from_to(Pres, BareFrom, To)),
State State;
end;
allow when Type == error; Type == probe -> allow when Type == error; Type == probe ->
ejabberd_router:route(Pres), ejabberd_router:route(Pres),
State; State;
allow -> allow ->
ejabberd_router:route(Pres), ejabberd_router:route(Pres),
LTo = jid:tolower(To),
LBareTo = jid:remove_resource(LTo), LBareTo = jid:remove_resource(LTo),
LBareFrom = jid:remove_resource(jid:tolower(From)), LBareFrom = jid:remove_resource(jid:tolower(From)),
if LBareTo /= LBareFrom -> if LBareTo /= LBareFrom ->