Only call mod_roster when the user is in a local vhost, fixing EJAB-869

This commit is contained in:
Badlop 2010-12-23 21:05:21 +01:00
parent 980d9c37ea
commit 4b0a7fe307
1 changed files with 15 additions and 7 deletions

View File

@ -367,14 +367,22 @@ in_subscription(Acc, User, Server, JID, Type, _Reason) ->
process_subscription(in, User, Server, JID, Type, Acc).
out_subscription(UserFrom, ServerFrom, JIDTo, unsubscribed) ->
%% Remove pending out subscription
{UserTo, ServerTo, _} = jlib:short_prepd_bare_jid(JIDTo),
JIDFrom = exmpp_jid:make(UserFrom, UserTo),
mod_roster:out_subscription(UserTo, ServerTo, JIDFrom, unsubscribe),
%% Remove pending in subscription
mod_roster:in_subscription(aaaa, UserFrom, ServerFrom, JIDTo, unsubscribe, ""),
case ejabberd_hosts:registered(binary_to_list(ServerTo)) of
true ->
%% Remove pending out subscription
JIDFrom = exmpp_jid:make(UserFrom, ServerFrom),
mod_roster:out_subscription(UserTo, ServerTo, JIDFrom, unsubscribe);
false ->
ok
end,
case ejabberd_hosts:registered(binary_to_list(ServerFrom)) of
true ->
%% Remove pending in subscription
mod_roster:in_subscription(aaaa, UserFrom, ServerFrom, JIDTo, unsubscribe, "");
false ->
ok
end,
process_subscription(out, UserFrom, ServerFrom, JIDTo, unsubscribed, false);
out_subscription(User, Server, JID, Type) ->
process_subscription(out, User, Server, JID, Type, false).