Skip to content
Snippets Groups Projects
Commit ef746b6c authored by Nigel Kukard's avatar Nigel Kukard
Browse files

* More work on the userdb sql module

parent a86baf9b
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,7 @@ use smradius::constants; ...@@ -26,6 +26,7 @@ use smradius::constants;
use smradius::logging; use smradius::logging;
use smradius::dblayer; use smradius::dblayer;
use smradius::util; use smradius::util;
use smradius::attributes;
# Exporter stuff # Exporter stuff
require Exporter; require Exporter;
...@@ -65,8 +66,8 @@ sub init ...@@ -65,8 +66,8 @@ sub init
$server->{'smradius'}->{'database'}->{'enabled'} = 1; $server->{'smradius'}->{'database'}->{'enabled'} = 1;
} }
#Default configs... # Default configs...
$config->{'userdb_select_query'} = ' $config->{'userdb_find_query'} = '
SELECT SELECT
ID ID
FROM FROM
...@@ -75,13 +76,32 @@ sub init ...@@ -75,13 +76,32 @@ sub init
UserName = %{authentication.User-Name} UserName = %{authentication.User-Name}
'; ';
$config->{'userdb_get_group_attributes_query'} = '
SELECT
group_attributes.Name, group_attributes.Operator, group_attributes.Value
FROM
@TP@group_attributes, @TP@users_to_groups
WHERE
users_to_groups.UserID = %{user.ID}
AND group_attributes.GroupID = users_to_groups.GroupID
';
$config->{'userdb_get_user_attributes_query'} = '
SELECT
Name, Operator, Value
FROM
@TP@users_attributes
WHERE
UserID = %{user.ID}
';
# Setup SQL queries # Setup SQL queries
if (defined($scfg->{'mod_userdb_sql'})) { if (defined($scfg->{'mod_userdb_sql'})) {
# Pull in queries # Pull in queries
if (defined($scfg->{'mod_userdb_sql'}->{'userdb_select_query'}) && if (defined($scfg->{'mod_userdb_sql'}->{'userdb_find_query'}) &&
$scfg->{'mod_userdb_sql'}->{'userdb_select_query'} ne "") { $scfg->{'mod_userdb_sql'}->{'userdb_find_query'} ne "") {
$config->{'userdb_select_query'} = $scfg->{'mod_userdb_sql'}->{'userdb_select_query'}; $config->{'userdb_find_query'} = $scfg->{'mod_userdb_sql'}->{'userdb_find_query'};
} }
} }
...@@ -101,26 +121,36 @@ sub find ...@@ -101,26 +121,36 @@ sub find
# Build template # Build template
my $template; my $template;
$server->log(LOG_DEBUG,"[MOD_USERDB_SQL] Find function called");
foreach my $attr ($packet->attributes) { foreach my $attr ($packet->attributes) {
$template->{'authentication'}->{$attr} = $packet->rawattr($attr) $template->{'authentication'}->{$attr} = $packet->rawattr($attr)
} }
$template->{'user'} = $user; $template->{'user'} = $user;
# Replace template entries # Replace template entries
my @dbDoParams = templateReplace($config->{'userdb_select_query'},$template); my @dbDoParams = templateReplace($config->{'userdb_find_query'},$template);
my $sth = DBSelect(@dbDoParams); my $sth = DBSelect(@dbDoParams);
if (!$sth) { if (!$sth) {
$server->log(LOG_ERR,"Failed to find user data: ".smradius::dblayer::Error()); $server->log(LOG_ERR,"[MOD_USERDB_SQL] Failed to find user data: ".smradius::dblayer::Error());
return -1; return MOD_RES_SKIP;
}
# Check if we got a result, if we did not NACK
my $rows = $sth->rows();
if ($rows > 1) {
$server->log(LOG_ERR,"[MOD_USERDB_SQL] More than one result returned for user '".$user->{'Username'}."'");
return MOD_RES_SKIP;
} elsif ($rows < 1) {
$server->log(LOG_DEBUG,"[MOD_USERDB_SQL] User '".$user->{'Username'}."' not found in database");
return MOD_RES_SKIP;
} }
$server->log(LOG_NOTICE,"Number of rows : ".$sth->rows()); # Grab record data
my $row = $sth->fetchrow_hashref();
# TODO: Query database and see if this user exists DBFreeRes($sth);
return MOD_RES_SKIP; return (MOD_RES_ACK,$row);
} }
...@@ -136,10 +166,51 @@ sub get ...@@ -136,10 +166,51 @@ sub get
{ {
my ($server,$user,$packet) = @_; my ($server,$user,$packet) = @_;
my $userDetails; # Build template
# TODO: Query user and get attributes, return in $userDetails hash my $template;
foreach my $attr ($packet->attributes) {
$template->{'authentication'}->{$attr} = $packet->rawattr($attr)
}
$template->{'user'}->{'Username'} = $user->{'Username'};
$template->{'user'}->{'ID'} = $user->{'_UserDB_Data'}->{'id'};
# Replace template entries
my @dbDoParams = templateReplace($config->{'userdb_get_group_attributes_query'},$template);
# Query database
my $sth = DBSelect(@dbDoParams);
if (!$sth) {
$server->log(LOG_ERR,"Failed to get group attributes: ".smradius::dblayer::Error());
return -1;
}
# Loop with group attributes
while (my $row = $sth->fetchrow_hashref()) {
addAttribute($server,$user->{'Attributes'},$row);
}
$sth->DBFreeRes();
# Replace template entries again
@dbDoParams = templateReplace($config->{'userdb_get_user_attributes_query'},$template);
# Query database
$sth = DBSelect(@dbDoParams);
if (!$sth) {
$server->log(LOG_ERR,"Failed to get user attributes: ".smradius::dblayer::Error());
return -1;
}
# Loop with group attributes
while (my $row = $sth->fetchrow_hashref()) {
addAttribute($server,$user->{'Attributes'},$row);
}
$sth->DBFreeRes();
return $userDetails; # return $userDetails;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment