eap-radius: Add support to specify and bind a specific source address
Using a specific address can be useful in scenarios where dynamic routing could change the path to the RADIUS server and a changing source address is a problem for the server. Closes strongswan/strongswan#2598
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Tobias Brunner
|
||||
* Copyright (C) 2013-2025 Tobias Brunner
|
||||
* Copyright (C) 2009 Martin Willi
|
||||
*
|
||||
* Copyright (C) secunet Security Networks AG
|
||||
@@ -119,7 +119,7 @@ static void load_configs(private_eap_radius_plugin_t *this)
|
||||
{
|
||||
enumerator_t *enumerator;
|
||||
radius_config_t *config;
|
||||
char *nas_identifier, *secret, *address, *section;
|
||||
char *nas_identifier, *secret, *address, *source, *section;
|
||||
int auth_port, acct_port, sockets, preference;
|
||||
u_int retransmit_tries;
|
||||
double retransmit_timeout, retransmit_base;
|
||||
@@ -135,6 +135,8 @@ static void load_configs(private_eap_radius_plugin_t *this)
|
||||
DBG1(DBG_CFG, "no RADIUS secret defined");
|
||||
return;
|
||||
}
|
||||
source = lib->settings->get_str(lib->settings,
|
||||
"%s.plugins.eap-radius.source", NULL, lib->ns);
|
||||
nas_identifier = lib->settings->get_str(lib->settings,
|
||||
"%s.plugins.eap-radius.nas_identifier", "strongSwan",
|
||||
lib->ns);
|
||||
@@ -150,7 +152,7 @@ static void load_configs(private_eap_radius_plugin_t *this)
|
||||
retransmit_base = lib->settings->get_double(lib->settings,
|
||||
"%s.plugins.eap-radius.retransmit_base", 1.4, lib->ns);
|
||||
|
||||
config = radius_config_create(address, address, auth_port, ACCT_PORT,
|
||||
config = radius_config_create(address, address, source, auth_port, ACCT_PORT,
|
||||
nas_identifier, secret, sockets, 0,
|
||||
retransmit_tries, retransmit_timeout,
|
||||
retransmit_base);
|
||||
@@ -183,6 +185,11 @@ static void load_configs(private_eap_radius_plugin_t *this)
|
||||
DBG1(DBG_CFG, "RADIUS server '%s' misses secret, skipped", section);
|
||||
continue;
|
||||
}
|
||||
source = lib->settings->get_str(lib->settings,
|
||||
"%s.plugins.eap-radius.servers.%s.source",
|
||||
lib->settings->get_str(lib->settings,
|
||||
"%s.plugins.eap-radius.source", NULL, lib->ns),
|
||||
lib->ns, section);
|
||||
nas_identifier = lib->settings->get_str(lib->settings,
|
||||
"%s.plugins.eap-radius.servers.%s.nas_identifier",
|
||||
lib->settings->get_str(lib->settings,
|
||||
@@ -228,7 +235,7 @@ static void load_configs(private_eap_radius_plugin_t *this)
|
||||
"%s.plugins.eap-radius.servers.%s.preference", 0,
|
||||
lib->ns, section);
|
||||
|
||||
config = radius_config_create(section, address, auth_port, acct_port,
|
||||
config = radius_config_create(section, address, source, auth_port, acct_port,
|
||||
nas_identifier, secret, sockets, preference,
|
||||
retransmit_tries, retransmit_timeout,
|
||||
retransmit_base);
|
||||
|
||||
Reference in New Issue
Block a user