diff options
| author | ppolvorin <pablo.polvorin@process-one.net> | 2010-11-10 13:27:47 -0300 |
|---|---|---|
| committer | ppolvorin <pablo.polvorin@process-one.net> | 2010-11-10 13:27:47 -0300 |
| commit | f4f949bd7215ef16497a580ee2bf25b66baa5d33 (patch) | |
| tree | 811a864ca2d5c7e5400a5e1df3152b85ff9b1c66 /src | |
| parent | In mod_last*:get_last_iq/4, check for user resources first to return 0 second... (diff) | |
Fix anonymous user cleanup (EJAB-883)
anonymous users table and vcards were not correctly cleaned up
after the user disconnect.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ejabberd_auth_anonymous.erl | 12 | ||||
| -rw-r--r-- | src/mod_vcard.erl | 4 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/ejabberd_auth_anonymous.erl b/src/ejabberd_auth_anonymous.erl index bd69964a4..dfde90a7e 100644 --- a/src/ejabberd_auth_anonymous.erl +++ b/src/ejabberd_auth_anonymous.erl @@ -149,6 +149,8 @@ allow_multiple_connections(Host) when is_list(Host) -> %% @doc Check if user exist in the anonymous database. anonymous_user_exist(User, Server) when is_list(User), is_list(Server) -> + anonymous_user_exist(list_to_binary(User), list_to_binary(Server)); +anonymous_user_exist(User, Server) when is_binary(User), is_binary(Server) -> LUser = exmpp_stringprep:nodeprep(User), LServer = exmpp_stringprep:nameprep(Server), US = {LUser, LServer}, @@ -165,7 +167,7 @@ anonymous_user_exist(User, Server) when is_list(User), is_list(Server) -> %% LServer = string() %% @doc Remove connection from Mnesia tables. -remove_connection(SID, LUser, LServer) when is_list(LUser), is_list(LServer) -> +remove_connection(SID, LUser, LServer) when is_binary(LUser), is_binary(LServer) -> US = {LUser, LServer}, F = fun() -> mnesia:delete_object({anonymous, US, SID}) @@ -201,8 +203,8 @@ register_connection(SID, JID, Info) when ?IS_JID(JID) -> %% @doc Remove an anonymous user from the anonymous users table. unregister_connection(SID, JID, _) when ?IS_JID(JID) -> - LUser = exmpp_jid:prep_node_as_list(JID), - LServer = exmpp_jid:prep_domain_as_list(JID), + LUser = exmpp_jid:prep_node(JID), + LServer = exmpp_jid:prep_domain(JID), purge_hook(anonymous_user_exist(LUser, LServer), LUser, LServer), remove_connection(SID, LUser, LServer). @@ -214,8 +216,8 @@ unregister_connection(SID, JID, _) when ?IS_JID(JID) -> purge_hook(false, _LUser, _LServer) -> ok; -purge_hook(true, LUser, LServer) when is_list(LUser), is_list(LServer) -> - ejabberd_hooks:run(anonymous_purge_hook, list_to_binary(LServer), [LUser, LServer]). +purge_hook(true, LUser, LServer) when is_binary(LUser), is_binary(LServer) -> + ejabberd_hooks:run(anonymous_purge_hook, LServer, [LUser, LServer]). %% --------------------------------- %% Specific anonymous auth functions diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl index 79fe4d29a..f5889ad77 100644 --- a/src/mod_vcard.erl +++ b/src/mod_vcard.erl @@ -121,6 +121,8 @@ start(Host, Opts) -> ejabberd_hooks:add(remove_user, HostB, ?MODULE, remove_user, 50), + ejabberd_hooks:add(anonymous_purge_hook, HostB, + ?MODULE, remove_user, 50), ejabberd_hooks:add(webadmin_page_host, HostB, ?MODULE, webadmin_page, 50), ejabberd_hooks:add(webadmin_user, HostB, @@ -169,6 +171,8 @@ stop(Host) -> HostB = list_to_binary(Host), ejabberd_hooks:delete(remove_user, HostB, ?MODULE, remove_user, 50), + ejabberd_hooks:delete(anonymous_purge_hook, HostB, + ?MODULE, remove_user, 50), ejabberd_hooks:delete(webadmin_page_host, HostB, ?MODULE, webadmin_page, 50), ejabberd_hooks:delete(webadmin_user, HostB, |
