diff --git a/smradius/modules/userdb/mod_userdb_sql.pm b/smradius/modules/userdb/mod_userdb_sql.pm index f5d0c8f86c45e52ebf960bbb2de0324deae3d0ff..3d23ffc42ef86e726e69139cb46e37b9209215d7 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 8757226c7e1ee7f8baae86999ce408bcf7c0ead6..b8cfedfd5dff6c4de0a9cda81c5b404cf4d32361 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) #