aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorppolvorin <pablo.polvorin@process-one.net>2010-11-10 13:27:47 -0300
committerppolvorin <pablo.polvorin@process-one.net>2010-11-10 13:27:47 -0300
commitf4f949bd7215ef16497a580ee2bf25b66baa5d33 (patch)
tree811a864ca2d5c7e5400a5e1df3152b85ff9b1c66 /src
parentIn 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.erl12
-rw-r--r--src/mod_vcard.erl4
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,