diff --git a/smradius/modules/accounting/mod_accounting_sql.pm b/smradius/modules/accounting/mod_accounting_sql.pm index a36762826ac55b4ee04267a6d036c07ff73d491f..fb9d473533749bad85735ac39dfa28d313c42110 100644 --- a/smradius/modules/accounting/mod_accounting_sql.pm +++ b/smradius/modules/accounting/mod_accounting_sql.pm @@ -166,19 +166,39 @@ sub init # Pull in queries if (defined($scfg->{'mod_accounting_sql'}->{'accounting_start_query'}) && $scfg->{'mod_accounting_sql'}->{'accounting_start_query'} ne "") { - $config->{'accounting_start_query'} = $scfg->{'mod_accounting_sql'}->{'accounting_start_query'}; + if (ref($scfg->{'mod_accounting_sql'}->{'accounting_start_query'}) eq "ARRAY") { + $config->{'accounting_start_query'} = join(' ', + @{$scfg->{'mod_accounting_sql'}->{'accounting_start_query'}}); + } else { + $config->{'accounting_start_query'} = $scfg->{'mod_accounting_sql'}->{'accounting_start_query'}; + } } if (defined($scfg->{'mod_accounting_sql'}->{'accounting_update_query'}) && $scfg->{'mod_accounting_sql'}->{'accounting_update_query'} ne "") { - $config->{'accounting_update_query'} = $scfg->{'mod_accounting_sql'}->{'accounting_update_query'}; + if (ref($scfg->{'mod_accounting_sql'}->{'accounting_update_query'}) eq "ARRAY") { + $config->{'accounting_update_query'} = join(' ', + @{$scfg->{'mod_accounting_sql'}->{'accounting_update_query'}}); + } else { + $config->{'accounting_update_query'} = $scfg->{'mod_accounting_sql'}->{'accounting_update_query'}; + } } if (defined($scfg->{'mod_accounting_sql'}->{'accounting_stop_query'}) && $scfg->{'mod_accounting_sql'}->{'accounting_stop_query'} ne "") { - $config->{'accounting_stop_query'} = $scfg->{'mod_accounting_sql'}->{'accounting_stop_query'}; + if (ref($scfg->{'mod_accounting_sql'}->{'accounting_stop_query'}) eq "ARRAY") { + $config->{'accounting_stop_query'} = join(' ', + @{$scfg->{'mod_accounting_sql'}->{'accounting_stop_query'}}); + } else { + $config->{'accounting_stop_query'} = $scfg->{'mod_accounting_sql'}->{'accounting_stop_query'}; + } } if (defined($scfg->{'mod_accounting_sql'}->{'get_usage_query'}) && $scfg->{'mod_accounting_sql'}->{'get_usage_query'} ne "") { - $config->{'get_usage_query'} = $scfg->{'mod_accounting_sql'}->{'get_usage_query'}; + if (ref($scfg->{'mod_accounting_sql'}->{'get_usage_query'}) eq "ARRAY") { + $config->{'get_usage_query'} = join(' ', + @{$scfg->{'mod_accounting_sql'}->{'get_usage_query'}}); + } else { + $config->{'get_usage_query'} = $scfg->{'mod_accounting_sql'}->{'get_usage_query'}; + } } } } diff --git a/smradius/modules/config/mod_config_sql.pm b/smradius/modules/config/mod_config_sql.pm index 1ca90b298e4a85b0557350fdbdd8b4db14bf7db5..52350e20d752cc9b4a4694678651349c333bb511 100644 --- a/smradius/modules/config/mod_config_sql.pm +++ b/smradius/modules/config/mod_config_sql.pm @@ -78,7 +78,11 @@ sub init # Pull in queries if (defined($scfg->{'mod_config_sql'}->{'get_config_query'}) && $scfg->{'mod_config_sql'}->{'get_config_query'} ne "") { - $config->{'get_config_query'} = $scfg->{'mod_config_sql'}->{'get_config_query'}; + if (ref($scfg->{'mod_config_sql'}->{'get_config_query'}) eq "ARRAY") { + $config->{'get_config_query'} = join(' ',@{$scfg->{'mod_config_sql'}->{'get_config_query'}}); + } else { + $config->{'get_config_query'} = $scfg->{'mod_config_sql'}->{'get_config_query'}; + } } } @@ -98,26 +102,23 @@ sub getConfig my ($server,$user,$packet) = @_; - # Attributes to return - my %configAttributes = (); - # Replace template entries my @dbDoParams = $config->{'get_config_query'}; # Query database my $sth = DBSelect(@dbDoParams); if (!$sth) { $server->log(LOG_ERR,"Failed to get config attributes: ".smradius::dblayer::Error()); - return -1; + return MOD_RES_NACK; } # Loop with user attributes while (my $row = $sth->fetchrow_hashref()) { - addAttribute($server,\%configAttributes,hashifyLCtoMC($row,qw(Name Operator Value))); + processConfigAttribute($server,$user->{'ConfigAttributes'},hashifyLCtoMC($row,qw(Name Operator Value))); } DBFreeRes($sth); - return \%configAttributes; + return MOD_RES_ACK; } diff --git a/smradius/modules/userdb/mod_userdb_sql.pm b/smradius/modules/userdb/mod_userdb_sql.pm index d0774859c39502d83bba81c0176d944253bb9a18..985a5cea4cf3632ff75e6808e4e0f3df90b68603 100644 --- a/smradius/modules/userdb/mod_userdb_sql.pm +++ b/smradius/modules/userdb/mod_userdb_sql.pm @@ -81,7 +81,7 @@ sub init FROM @TP@group_attributes, @TP@users_to_groups WHERE - users_to_groups.UserID = %{userdb.ID} + users_to_groups.UserID = %{userdb.id} AND group_attributes.GroupID = users_to_groups.GroupID '; @@ -100,17 +100,33 @@ sub init # Pull in queries if (defined($scfg->{'mod_userdb_sql'}->{'userdb_find_query'}) && $scfg->{'mod_userdb_sql'}->{'userdb_find_query'} ne "") { - $config->{'userdb_find_query'} = $scfg->{'mod_userdb_sql'}->{'userdb_find_query'}; + if (ref($scfg->{'mod_userdb_sql'}->{'userdb_find_query'}) eq "ARRAY") { + $config->{'userdb_find_query'} = join(' ', @{$scfg->{'mod_userdb_sql'}->{'userdb_find_query'}}); + } else { + $config->{'userdb_find_query'} = $scfg->{'mod_userdb_sql'}->{'userdb_find_query'}; + } } if (defined($scfg->{'mod_userdb_sql'}->{'userdb_get_group_attributes_query'}) && $scfg->{'mod_userdb_sql'}->{'userdb_get_group_attributes_query'} ne "") { - $config->{'userdb_get_group_attributes_query'} = $scfg->{'mod_userdb_sql'}->{'userdb_get_group_attributes_query'}; + if (ref($scfg->{'mod_userdb_sql'}->{'userdb_get_group_attributes_query'}) eq "ARRAY") { + $config->{'userdb_get_group_attributes_query'} = join(' ', + @{$scfg->{'mod_userdb_sql'}->{'userdb_get_group_attributes_query'}}); + } else { + $config->{'userdb_get_group_attributes_query'} = + $scfg->{'mod_userdb_sql'}->{'userdb_get_group_attributes_query'}; + } } if (defined($scfg->{'mod_userdb_sql'}->{'userdb_get_user_attributes_query'}) && $scfg->{'mod_userdb_sql'}->{'userdb_get_user_attributes_query'} ne "") { - $config->{'userdb_get_user_attributes_query'} = $scfg->{'mod_userdb_sql'}->{'userdb_get_user_attributes_query'}; + if (ref($scfg->{'mod_userdb_sql'}->{'userdb_get_user_attributes_query'}) eq "ARRAY") { + $config->{'userdb_get_user_attributes_query'} = join(' ', + @{$scfg->{'mod_userdb_sql'}->{'userdb_get_user_attributes_query'}}); + } else { + $config->{'userdb_get_user_attributes_query'} = + $scfg->{'mod_userdb_sql'}->{'userdb_get_user_attributes_query'}; + } } } } @@ -180,7 +196,7 @@ sub get $template->{'request'}->{$attr} = $packet->rawattr($attr) } # Add in userdb data - foreach my $item ($user->{'_UserDB_Data'}) { + foreach my $item (keys %{$user->{'_UserDB_Data'}}) { $template->{'userdb'}->{$item} = $user->{'_UserDB_Data'}->{$item}; } @@ -189,6 +205,7 @@ sub get # Replace template entries my @dbDoParams = templateReplace($config->{'userdb_get_group_attributes_query'},$template); + # Query database my $sth = DBSelect(@dbDoParams); if (!$sth) { diff --git a/smradiusd b/smradiusd index b6b913e716affc0444f9feeb858ca98f90247cc3..b6a57744c0d8987f9b5fdd217ac83c99fe052ef9 100755 --- a/smradiusd +++ b/smradiusd @@ -494,20 +494,24 @@ sub process_request { if ($module->{'Config_get'}) { # Get result from config module - $self->log(LOG_INFO,"[SMRADIUS] FIND: Trying plugin '".$module->{'Name'}."' for incoming connection"); - my ($configData) = $module->{'Config_get'}($self,$user,$pkt); - # If we got some config back, process it - if ($configData) { - # Loop with attributes we got from the user - foreach my $attrName (keys %{$configData}) { - # Loop with operators - foreach my $attrOp (keys %{$configData->{$attrName}}) { - # Grab attribute - my $attr = $configData->{$attrName}->{$attrOp}; - # Process attribute - my $res = processConfigAttribute($self,$user->{'ConfigAttributes'},$attr); - } - } + $self->log(LOG_INFO,"[SMRADIUS] CONFIG: Trying plugin '".$module->{'Name'}."' for incoming connection"); + my $res = $module->{'Config_get'}($self,$user,$pkt); + + # Check result + if (!defined($res)) { + $self->log(LOG_DEBUG,"[SMRADIUS] CONFIG: Error with plugin '".$module->{'Name'}."'"); + + # Check if we skipping this plugin + } elsif ($res == MOD_RES_SKIP) { + $self->log(LOG_DEBUG,"[SMRADIUS] CONFIG: Skipping '".$module->{'Name'}."'"); + + # Check if we got a positive result back + } elsif ($res == MOD_RES_ACK) { + $self->log(LOG_NOTICE,"[SMRADIUS] CONFIG: Configuration retrieved from '".$module->{'Name'}."'"); + + # Check if we got a negative result back + } elsif ($res == MOD_RES_NACK) { + $self->log(LOG_NOTICE,"[SMRADIUS] CONFIG: Configuration problem when using '".$module->{'Name'}."'"); } } } @@ -866,6 +870,7 @@ sub process_request { } } } +use Data::Dumper; print ( STDERR "ATTRIBUTES: ".Dumper($user->{'ConfigAttributes'}) ); $udp_packet = auth_resp($resp->pack, getAttributeValue($user->{'ConfigAttributes'},"SMRadius-Config-Secret")); $server->{'client'}->send($udp_packet);