From 1796a7b5243d1523dc838a0e496a36d830937110 Mon Sep 17 00:00:00 2001 From: Robert Anderson <randerson@lbsd.net> Date: Mon, 28 Mar 2011 12:21:05 +0000 Subject: [PATCH] User data cleanup Added cleanup functionality to remove old user data if the user no longer exists --- smradius/modules/userdb/mod_userdb_sql.pm | 55 ++++++++++++++--------- smradiusd.conf | 9 ---- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/smradius/modules/userdb/mod_userdb_sql.pm b/smradius/modules/userdb/mod_userdb_sql.pm index f5d0c8f8..3d23ffc4 100644 --- a/smradius/modules/userdb/mod_userdb_sql.pm +++ b/smradius/modules/userdb/mod_userdb_sql.pm @@ -50,7 +50,10 @@ our $pluginInfo = { # Users data Users_data_set => \&data_set, - Users_data_get => \&data_get + Users_data_get => \&data_get, + + # Cleanup run by smadmin + Cleanup => \&cleanup }; # Module config @@ -142,15 +145,6 @@ sub init AND Name = %{query.Name} '; - $config->{'users_data_cleanup_query'} = ' - DELETE FROM - @TP@users_data - WHERE UserID NOT IN - ( - SELECT ID FROM users - ) - '; - # Default cache time for user data $config->{'userdb_data_cache_time'} = 300; @@ -228,16 +222,6 @@ sub init } } - if (defined($scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'}) && - $scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'} ne "") { - if (ref($scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'}) eq "ARRAY") { - $config->{'users_data_cleanup_query'} = join(' ', - @{$scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'}}); - } else { - $config->{'users_data_cleanup_query'} = $scfg->{'mod_userdb_sql'}->{'users_data_cleanup_query'}; - } - } - if (defined($scfg->{'mod_userdb_sql'}->{'userdb_data_cache_time'})) { if ($scfg->{'mod_userdb_sql'}{'userdb_data_cache_time'} =~ /^\s*(yes|true|1)\s*$/i) { # Default? @@ -531,5 +515,36 @@ sub data_get } +# Clean up of old user variables +sub cleanup +{ + my $server = shift; + + # Begin operation + DBBegin(); + + # Perform query + my $sth = DBDo(' + DELETE FROM + @TP@users_data + WHERE UserID NOT IN + ( + SELECT ID FROM users + ) + '); + + # Error and rollback + if (!$sth) { + $server->log(LOG_NOTICE,"[MOD_USERDB_SQL] Cleanup => Database has been rolled back, no records deleted"); + DBRollback(); + return; + } + + # Commit + DBCommit(); + $server->log(LOG_NOTICE,"[MOD_USERDB_SQL] Cleanup => Old user variables have been deleted"); +} + + 1; # vim: ts=4 diff --git a/smradiusd.conf b/smradiusd.conf index 8757226c..b8cfedfd 100644 --- a/smradiusd.conf +++ b/smradiusd.conf @@ -489,15 +489,6 @@ users_data_delete_query=<<EOT AND Name = %{query.Name} EOT -users_data_cleanup_query=<<EOT - DELETE FROM - @TP@users_data - WHERE UserID NOT IN - ( - SELECT ID FROM users - ) -EOT - # This is how long we going to cache the data query for # Default: 300 (seconds) # -- GitLab