GetClientQuery
SQL query, and the results of that
query are used to add details of RADIUS Clients that Radiator will respond
to. If you wish, you can have some client details in your Radiator
configuration file, and some in ClientListSQL
(although this might be confusing to future administrators).ClientListSQL
.DBSource
. The database can store all the same
parameters that are used to configure a
<Client>
clause. For more information, see
Section 3.14. <Client xxxxxx>. The recommend
configuration with Radiator 4.24 and later is to use
ClientColumnDef
with
GetClientQuery
. For more information about
ClientColumDef, see Section 3.16.2. ClientColumnDef.GetClientQuery
works with the sample database schemas
provided in the goodies/
of your Radiator
distribution. GetClientQuery
defaults
to:select NASIDENTIFIER,SECRET,IGNOREACCTSIGNATURE,DUPINTERVAL, DEFAULTREALM,NASTYPE,SNMPCOMMUNITY,LIVINGSTONOFFS, LIVINGSTONHOLE,FRAMEDGROUPBASEADDRESS, FRAMEDGROUPMAXPORTSPERCLASSC,REWRITEUSERNAME, NOIGNOREDUPLICATES,PREHANDLERHOOK from RADCLIENTLIST
ClientColumnDef
is not configured, the other
fields must occur in the given order. When they occur, they are used to
initialise the Client
parameter of the same name as
shown above. The FRAMEDGROUPBASEADDRESS
column may
contain multiple comma-separated base addresses. The
PREHANDLERHOOK
column can contain either the text of
a hook or a hook filename in the form
‘file:/path/to/hook
’. You can customise the
GetClientQuery
select clause to have additional
fields. If they are present in the result of
GetClientQuery
, they are used as described below.
Field number 0 as the first field, so for example
Identifier
, field 14 has an index of 14, but is the
15th entry in the returned array.Identifier
field as field 14DefaultReply
as field 15FramedGroup
as field 16StripFromReply
as field 17AllowInReply
as field 18AddToReply
as field 19AddToReplyIfNotExist
as field 20DynamicReply
as field 21AddToRequest
as field 22StripFromRequest
as field 23AddToRequestIfNotExist
as field 24ClientHook
as field 25UseContentsForDuplicateDetection
as field
26IgnoreAcctSignature,UseOldAscendPasswords,StatusServerShowClientDetails
",
it sets the IgnoreAcctSignature
,
UseOldAscendPasswords
, and
StatusServerShowClientDetails
flag parameters in
the resulting Client
.TACACSPLUSKey
as field 28# Our custom client table only has NAS identifier, # shared secret and default realm in it: GetClientQuery select NAME,SECRET,NULL,NULL,DREALM from CLIENTSHere is the same example with
ClientColumnDef
:
# We do not need to pad with NULL columns GetClientQuery select NAME,SECRET,DREALM from CLIENTS ClientColumnDef 0, Name ClientColumnDef 1, Secret ClientColumnDef 2, DefaultRealm
GetClientQuery
and the parameters used to define a Client. If
ClientColumnDef
is not specified, the mapping is the
default as described in Section 3.16.1. GetClientQueryClientColumnDef
is:ClientColumnDef n,clientparamname
n
is the column number of the fields as returned by
GetClientQuery
(starting at 0
), and
clientparamname
is the name of the Client clause
parameter or special value GENERIC
.ClientColumnDef
parameters. The only ones that must
be provided are for Name
and Secret
. If
the specified column has NULL value, then the matching
clientparamname
will not be set and will assume its
default value according to the normal behaviour of the Client
clause.clientparamname
GENERIC
indicates that the column is a list of comma
separated clientparamname=value
pairs. For examples
of this format, see AuthColumnDef in AuthBy
SQLgoodies/
of your Radiator
distribution.GetClientQuery select NASIDENTIFIER, SECRET from RADCLIENTLIST ClientColumnDef 0, Name ClientColumnDef 1, Secret
Identifier
parameter, see Section 3.14.14. Identifier. Column
3
must contain name=value
pairs, for
example:
StatusServer=minimal,RequireMessageAuthenticator=1
.GetClientQuery select NASIDENTIFIER, SECRET, CLIENT_IDENTIFIER, GENERIC \ from RADCLIENTLIST ClientColumnDef 0, Name ClientColumnDef 1, Secret ClientColumnDef 2, Identifier ClientColumnDef 3, GENERIC
# Reread the client list every hour RefreshPeriod 3600
func()
to configure the database
connection in customised ways. The hook is called with 2 arguments. The
first is a reference to the clause object that is making the connection.
The second argument is the DBH handle to the newly connected
database.ConnectionHook sub {$_[1]->func(-access_mode => 'read_write',\ -isolation_level => 'read_committed',\ -lock_resolution => 'wait',\ 'ib_set_tx_param')}
$object
,
$dbsource
, $dbusername
,
$dbauth
. $object
is the SqlDb
object trying to connect. The other parameters are the currently used
values for DBSource
, DBUsername
,
and DBAuth
.ConnectionAttemptFailedHook sub { \ my $self = $_[0]; my $dbsource = $_[1]; \ my $dbusername = $_[2]; my $dbauth = $_[3]; \ $self->log($main::LOG_ERR, "Could not connect to SQL database with DBI->connect \ $dbsource, $dbusername, $dbauth: $@ $DBI::errstr"); }
$object
. $object
is
the SqlDb object that was trying to connect.NoConnectionsHook sub { \ my $self = $_[0]; \ $self->log($main::LOG_ERR, "Could not connect to any SQL database"); }
RefreshPeriod
and global FarmSize
parameters are configured.# Reread the client list every hour, use 30 second offset between each worker RefreshPeriod 3600 FarmWorkerSpacing 30