#734 Multiple TACACS+/RADIUS servers now supported

This commit is contained in:
Oliver Gorwits
2020-07-10 22:18:29 +01:00
parent b6465abe66
commit 31fc6e1ee5
4 changed files with 49 additions and 5 deletions

View File

@@ -151,6 +151,42 @@ else {
config->{'domain_suffix'} = qr//;
}
# convert radius and tacacs from single to lists
if (ref {} eq ref setting('radius')
and exists setting('radius')->{'secret'}) {
my $servers = (ref [] eq ref setting('radius')->{'server'}
? setting('radius')->{'server'} : [setting('radius')->{'server'}]);
config->{'radius'} = [
Secret => setting('radius')->{'secret'},
NodeList => $servers,
];
}
if (ref {} eq ref setting('tacacs')
and exists setting('tacacs')->{'key'}) {
config->{'tacacs'} = [
Host => setting('tacacs')->{'server'},
Key => setting('tacacs')->{'key'} || setting('tacacs')->{'secret'},
Port => (setting('tacacs')->{'port'} || 'tacacs'),
Timeout => (setting('tacacs')->{'timeout'} || 15),
];
}
elsif (ref [] eq ref setting('tacacs')) {
my @newservers = ();
foreach my $server (@{ setting('tacacs') }) {
push @newservers, [
Host => $server->{'server'},
Key => $server->{'key'} || $server->{'secret'},
Port => ($server->{'port'} || 'tacacs'),
Timeout => ($server->{'timeout'} || 15),
];
}
config->{'tacacs'} = [ @newservers ];
}
# support unordered dictionary as if it were a single item list
if (ref {} eq ref setting('device_identity')) {
config->{'device_identity'} = [ setting('device_identity') ];