From 962f64a86451617425d2c9fb91c0f9e01a0a54ae Mon Sep 17 00:00:00 2001 From: Robert Anderson <randerson@lbsd.net> Date: Fri, 6 Mar 2009 14:39:49 +0000 Subject: [PATCH] Initial support for user database --- smradius/modules/userdb/mod_userdb_sql.pm | 47 +++++++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/smradius/modules/userdb/mod_userdb_sql.pm b/smradius/modules/userdb/mod_userdb_sql.pm index df0fd06d..90a66ef8 100644 --- a/smradius/modules/userdb/mod_userdb_sql.pm +++ b/smradius/modules/userdb/mod_userdb_sql.pm @@ -24,7 +24,8 @@ use warnings; # Modules we need use smradius::constants; use smradius::logging; - +use smradius::dblayer; +use smradius::util; # Exporter stuff require Exporter; @@ -47,14 +48,15 @@ our $pluginInfo = { User_get => \&get, }; - +# Module config +my $config; ## @internal # Initialize module sub init { my $server = shift; - my $config = $server->{'config'}; + my $scfg = $server->{'inifile'}; # Enable support for database @@ -62,9 +64,28 @@ sub init $server->log(LOG_NOTICE,"[MOD_USERDB_SQL] Enabling database support."); $server->{'smradius'}->{'database'}->{'enabled'} = 1; } -} + #Default configs... + $config->{'userdb_select_query'} = ' + SELECT + ID + FROM + @TP@users + WHERE + UserName = %{authentication.User-Name} + '; + + # Setup SQL queries + if (defined($scfg->{'mod_userdb_sql'})) { + # Pull in queries + if (defined($scfg->{'mod_userdb_sql'}->{'userdb_select_query'}) && + $scfg->{'mod_userdb_sql'}->{'userdb_select_query'} ne "") { + $config->{'userdb_select_query'} = $scfg->{'mod_userdb_sql'}->{'userdb_select_query'}; + + } + } +} ## @find # Try find a user @@ -78,6 +99,24 @@ sub find { my ($server,$user,$packet) = @_; + # Build template + my $template; + $server->log(LOG_DEBUG,"[MOD_USERDB_SQL] Find function called"); + foreach my $attr ($packet->attributes) { + $template->{'authentication'}->{$attr} = $packet->rawattr($attr) + } + $template->{'user'} = $user; + + # Replace template entries + my @dbDoParams = templateReplace($config->{'userdb_select_query'},$template); + + my $sth = DBSelect(@dbDoParams); + if (!$sth) { + $server->log(LOG_ERR,"Failed to find user data: ".smradius::dblayer::Error()); + return -1; + } + + $server->log(LOG_NOTICE,"Number of rows : ".$sth->rows()); # TODO: Query database and see if this user exists -- GitLab