diff --git a/smradius/modules/userdb/mod_userdb_sql.pm b/smradius/modules/userdb/mod_userdb_sql.pm index 8d3b764cd2c1b744a548310bff008ff659d7fe5e..e7ea3690f0a37d9dbee00235e250c0b5664dd443 100644 --- a/smradius/modules/userdb/mod_userdb_sql.pm +++ b/smradius/modules/userdb/mod_userdb_sql.pm @@ -68,7 +68,7 @@ sub init # Default configs... $config->{'userdb_find_query'} = ' SELECT - ID + ID, Disabled FROM @TP@users WHERE @@ -172,6 +172,13 @@ sub find # Grab record data my $row = $sth->fetchrow_hashref(); + # Dont use disabled user + my $res = isBoolean($row->{'disabled'}); + if ($res) { + $server->log(LOG_DEBUG,"[MOD_USERDB_SQL] User '".$user->{'Username'}."' is disabled"); + return MOD_RES_SKIP; + } + DBFreeRes($sth); return (MOD_RES_ACK,$row); diff --git a/smradius/util.pm b/smradius/util.pm index ad9e528d6edfa85ce827eb6c267edc44ed63d5de..189a3344cc4ca81ca827502e48fa90e714f08084 100644 --- a/smradius/util.pm +++ b/smradius/util.pm @@ -30,6 +30,7 @@ our (@ISA,@EXPORT); @EXPORT = qw( niceUndef templateReplace + isBoolean ); @@ -80,6 +81,38 @@ sub templateReplace } +## @fn isBoolean($var) +# Check if a variable is boolean +# +# @param var Variable to check +# +# @return 1, 0 or undef +sub isBoolean +{ + my $var = shift; + + + # Check if we're defined + if (!defined($var)) { + return undef; + } + + # Nuke whitespaces + $var =~ s/\s//g; + + # Allow true, on, set, enabled, 1, false, off, unset, disabled, 0 + if ($var =~ /^(?:true|on|set|enabled|1)$/i) { + return 1; + } + if ($var =~ /^(?:false|off|unset|disabled|0)$/i) { + return 0; + } + + # Invalid or unknown + return undef; +} + + 1; # vim: ts=4 diff --git a/smradiusd.conf b/smradiusd.conf index 648005fbaf33145227899fb73c1f20bca2bb0dca..a9d482d53dbbe66ad96992fd5cfea629f3d99e37 100644 --- a/smradiusd.conf +++ b/smradiusd.conf @@ -387,7 +387,7 @@ EOT userdb_find_query=<<EOT SELECT - ID + ID, Disabled FROM @TP@users WHERE