diff --git a/ChangeLog b/ChangeLog index b68fd6eb8..7cb4969b5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-12-23 Badlop + + * src/odbc/odbc_queries.erl: Fix removal of private_storage of an + account when the account is removed + + * src/mod_privacy.erl: Remove privacy lists of an account when the + account is removed (EJAB-720) + * src/mod_privacy_odbc.erl: Likewise + +2008-12-19 Christophe Romain + + 2008-12-19 Christophe Romain * src/mod_pubsub/mod_pubsub.erl: Fix send_last_published_item issue diff --git a/src/mod_privacy.erl b/src/mod_privacy.erl index 4de51b260..6d6c64cf4 100644 --- a/src/mod_privacy.erl +++ b/src/mod_privacy.erl @@ -35,6 +35,7 @@ process_iq_get/5, get_user_list/3, check_packet/6, + remove_user/2, updated_list/3]). -include("ejabberd.hrl"). @@ -57,6 +58,8 @@ start(Host, Opts) -> ?MODULE, check_packet, 50), ejabberd_hooks:add(privacy_updated_list, Host, ?MODULE, updated_list, 50), + ejabberd_hooks:add(remove_user, Host, + ?MODULE, remove_user, 50), gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_PRIVACY, ?MODULE, process_iq, IQDisc). @@ -71,6 +74,8 @@ stop(Host) -> ?MODULE, check_packet, 50), ejabberd_hooks:delete(privacy_updated_list, Host, ?MODULE, updated_list, 50), + ejabberd_hooks:delete(remove_user, Host, + ?MODULE, remove_user, 50), gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_PRIVACY). process_iq(_From, _To, IQ) -> @@ -659,6 +664,16 @@ is_type_match(Type, Value, JID, Subscription, Groups) -> end. +remove_user(User, Server) -> + LUser = jlib:nodeprep(User), + LServer = jlib:nameprep(Server), + F = fun() -> + mnesia:delete({privacy, + {LUser, LServer}}) + end, + mnesia:transaction(F). + + updated_list(_, #userlist{name = OldName} = Old, #userlist{name = NewName} = New) -> @@ -670,7 +685,6 @@ updated_list(_, end. - update_table() -> Fields = record_info(fields, privacy), case mnesia:table_info(privacy, attributes) of diff --git a/src/mod_privacy_odbc.erl b/src/mod_privacy_odbc.erl index 11e3956eb..b5ad6544b 100644 --- a/src/mod_privacy_odbc.erl +++ b/src/mod_privacy_odbc.erl @@ -35,6 +35,7 @@ process_iq_get/5, get_user_list/3, check_packet/6, + remove_user/2, updated_list/3]). -include("ejabberd.hrl"). @@ -53,6 +54,8 @@ start(Host, Opts) -> ?MODULE, check_packet, 50), ejabberd_hooks:add(privacy_updated_list, Host, ?MODULE, updated_list, 50), + ejabberd_hooks:add(remove_user, Host, + ?MODULE, remove_user, 50), gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_PRIVACY, ?MODULE, process_iq, IQDisc). @@ -67,6 +70,8 @@ stop(Host) -> ?MODULE, check_packet, 50), ejabberd_hooks:delete(privacy_updated_list, Host, ?MODULE, updated_list, 50), + ejabberd_hooks:delete(remove_user, Host, + ?MODULE, remove_user, 50), gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_PRIVACY). process_iq(_From, _To, IQ) -> @@ -658,6 +663,12 @@ is_type_match(Type, Value, JID, Subscription, Groups) -> end. +remove_user(User, Server) -> + LUser = jlib:nodeprep(User), + LServer = jlib:nameprep(Server), + sql_del_privacy_lists(LUser, LServer). + + updated_list(_, #userlist{name = OldName} = Old, #userlist{name = NewName} = New) -> @@ -873,3 +884,16 @@ sql_set_privacy_list(ID, RItems) -> ") " "values ('", ID, "', ", Items, ");"]) end, RItems). + +sql_del_privacy_lists(LUser, LServer) -> + Username = ejabberd_odbc:escape(LUser), + Server = ejabberd_odbc:escape(LServer), + ejabberd_odbc:sql_query( + LServer, + ["delete from privacy_list where username='", Username, "';"]), + ejabberd_odbc:sql_query( + LServer, + ["delete from privacy_list_data where value='", Username++"@"++Server, "';"]), + ejabberd_odbc:sql_query( + LServer, + ["delete from privacy_default_list where username='", Username, "';"]). diff --git a/src/odbc/odbc_queries.erl b/src/odbc/odbc_queries.erl index c9f6819be..a2fb0ae41 100644 --- a/src/odbc/odbc_queries.erl +++ b/src/odbc/odbc_queries.erl @@ -376,7 +376,7 @@ get_private_data(LServer, Username, LXMLNS) -> "namespace='", LXMLNS, "';"]). del_user_private_storage(LServer, Username) -> - ejabberd_odbc:sql_transaction( + ejabberd_odbc:sql_query( LServer, ["delete from private_storage where username='", Username, "';"]).