]> granicus.if.org Git - ejabberd/commitdiff
Make anonymous auth don't {de}register user when there are other resources
authorPaweł Chmielowski <pchmielowski@process-one.net>
Tue, 7 May 2019 09:02:53 +0000 (11:02 +0200)
committerPaweł Chmielowski <pchmielowski@process-one.net>
Tue, 7 May 2019 09:02:53 +0000 (11:02 +0200)
This should fix issue reported in #2878

src/ejabberd_auth_anonymous.erl

index 21aecc341f1deea3f497f93a7c5fc11aa47b5f03..767d99bf2053bbaa86aa958fb04b901b11c7e339 100644 (file)
@@ -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.