]> granicus.if.org Git - ejabberd/commitdiff
* src/odbc/odbc_queries.erl: Fix removal of private_storage of an
authorBadlop <badlop@process-one.net>
Tue, 23 Dec 2008 00:48:09 +0000 (00:48 +0000)
committerBadlop <badlop@process-one.net>
Tue, 23 Dec 2008 00:48:09 +0000 (00:48 +0000)
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

SVN Revision: 1742

ChangeLog
src/mod_privacy.erl
src/mod_privacy_odbc.erl
src/odbc/odbc_queries.erl

index b68fd6eb850825a9b2dd8bd03d61708c77a47324..7cb4969b5cb9266eb4d5b6d2b5285fe4c3b62436 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-12-23  Badlop  <badlop@process-one.net>
+
+       * 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 <christophe.romain@process-one.net>
+
+
 2008-12-19  Christophe Romain <christophe.romain@process-one.net>
 
        * src/mod_pubsub/mod_pubsub.erl: Fix send_last_published_item issue
index 4de51b26082fb7124915898a71194ac000ae3604..6d6c64cf4a2d8e4077c2c11bf9dcbd1abe19add5 100644 (file)
@@ -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
index 11e3956eb4b98407b8b12d3c882521d74b9fb607..b5ad6544b86547d2e63074a057c4c945b8faedb7 100644 (file)
@@ -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, "';"]).
index c9f6819bedff44387dd46f4f9a7107bf747e3137..a2fb0ae415227f365e6bc8f7443bcac9284377f5 100644 (file)
@@ -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, "';"]).