From: Paweł Chmielowski Date: Tue, 7 May 2019 09:02:53 +0000 (+0200) Subject: Make anonymous auth don't {de}register user when there are other resources X-Git-Tag: 19.05~29^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4dc85497385e33f163aedccb38c5145115521bda;p=ejabberd Make anonymous auth don't {de}register user when there are other resources This should fix issue reported in #2878 --- diff --git a/src/ejabberd_auth_anonymous.erl b/src/ejabberd_auth_anonymous.erl index 21aecc341..767d99bf2 100644 --- a/src/ejabberd_auth_anonymous.erl +++ b/src/ejabberd_auth_anonymous.erl @@ -114,10 +114,16 @@ anonymous_user_exist(User, Server) -> %% Register connection -spec register_connection(ejabberd_sm:sid(), jid(), ejabberd_sm:info()) -> ok. register_connection(_SID, - #jid{luser = LUser, lserver = LServer}, Info) -> + #jid{luser = LUser, lserver = LServer, lresource = LResource}, Info) -> case proplists:get_value(auth_module, Info) of ?MODULE -> - ejabberd_hooks:run(register_user, LServer, [LUser, LServer]); + % Register user only if we are first resource + case ejabberd_sm:get_user_resources(LUser, LServer) of + [LResource] -> + ejabberd_hooks:run(register_user, LServer, [LUser, LServer]); + _ -> + ok + end; _ -> ok end. @@ -128,7 +134,13 @@ unregister_connection(_SID, #jid{luser = LUser, lserver = LServer}, Info) -> case proplists:get_value(auth_module, Info) of ?MODULE -> - ejabberd_hooks:run(remove_user, LServer, [LUser, LServer]); + % Remove user data only if there is no more resources around + case ejabberd_sm:get_user_resources(LUser, LServer) of + [] -> + ejabberd_hooks:run(remove_user, LServer, [LUser, LServer]); + _ -> + ok + end; _ -> ok end.