Use name from initialization to access settings in libcharon.
Also fixes several whitespace errors.
This commit is contained in:
@@ -202,8 +202,8 @@ METHOD(daemon_t, start, void,
|
|||||||
{
|
{
|
||||||
/* start the engine, go multithreaded */
|
/* start the engine, go multithreaded */
|
||||||
lib->processor->set_threads(lib->processor,
|
lib->processor->set_threads(lib->processor,
|
||||||
lib->settings->get_int(lib->settings, "charon.threads",
|
lib->settings->get_int(lib->settings, "%s.threads",
|
||||||
DEFAULT_THREADS));
|
DEFAULT_THREADS, charon->name));
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(daemon_t, initialize, bool,
|
METHOD(daemon_t, initialize, bool,
|
||||||
|
|||||||
@@ -529,25 +529,26 @@ receiver_t *receiver_create()
|
|||||||
.secret_offset = random() % now,
|
.secret_offset = random() % now,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (lib->settings->get_bool(lib->settings, "charon.dos_protection", TRUE))
|
if (lib->settings->get_bool(lib->settings,
|
||||||
|
"%s.dos_protection", TRUE, charon->name))
|
||||||
{
|
{
|
||||||
this->cookie_threshold = lib->settings->get_int(lib->settings,
|
this->cookie_threshold = lib->settings->get_int(lib->settings,
|
||||||
"charon.cookie_threshold", COOKIE_THRESHOLD_DEFAULT);
|
"%s.cookie_threshold", COOKIE_THRESHOLD_DEFAULT, charon->name);
|
||||||
this->block_threshold = lib->settings->get_int(lib->settings,
|
this->block_threshold = lib->settings->get_int(lib->settings,
|
||||||
"charon.block_threshold", BLOCK_THRESHOLD_DEFAULT);
|
"%s.block_threshold", BLOCK_THRESHOLD_DEFAULT, charon->name);
|
||||||
}
|
}
|
||||||
this->init_limit_job_load = lib->settings->get_int(lib->settings,
|
this->init_limit_job_load = lib->settings->get_int(lib->settings,
|
||||||
"charon.init_limit_job_load", 0);
|
"%s.init_limit_job_load", 0, charon->name);
|
||||||
this->init_limit_half_open = lib->settings->get_int(lib->settings,
|
this->init_limit_half_open = lib->settings->get_int(lib->settings,
|
||||||
"charon.init_limit_half_open", 0);
|
"%s.init_limit_half_open", 0, charon->name);
|
||||||
this->receive_delay = lib->settings->get_int(lib->settings,
|
this->receive_delay = lib->settings->get_int(lib->settings,
|
||||||
"charon.receive_delay", 0);
|
"%s.receive_delay", 0, charon->name);
|
||||||
this->receive_delay_type = lib->settings->get_int(lib->settings,
|
this->receive_delay_type = lib->settings->get_int(lib->settings,
|
||||||
"charon.receive_delay_type", 0),
|
"%s.receive_delay_type", 0, charon->name),
|
||||||
this->receive_delay_request = lib->settings->get_bool(lib->settings,
|
this->receive_delay_request = lib->settings->get_bool(lib->settings,
|
||||||
"charon.receive_delay_request", TRUE),
|
"%s.receive_delay_request", TRUE, charon->name),
|
||||||
this->receive_delay_response = lib->settings->get_int(lib->settings,
|
this->receive_delay_response = lib->settings->get_int(lib->settings,
|
||||||
"charon.receive_delay_response", TRUE),
|
"%s.receive_delay_response", TRUE, charon->name),
|
||||||
|
|
||||||
this->hasher = lib->crypto->create_hasher(lib->crypto, HASH_PREFERRED);
|
this->hasher = lib->crypto->create_hasher(lib->crypto, HASH_PREFERRED);
|
||||||
if (this->hasher == NULL)
|
if (this->hasher == NULL)
|
||||||
|
|||||||
@@ -192,13 +192,13 @@ sender_t * sender_create()
|
|||||||
.job = callback_job_create_with_prio((callback_job_cb_t)send_packets,
|
.job = callback_job_create_with_prio((callback_job_cb_t)send_packets,
|
||||||
this, NULL, NULL, JOB_PRIO_CRITICAL),
|
this, NULL, NULL, JOB_PRIO_CRITICAL),
|
||||||
.send_delay = lib->settings->get_int(lib->settings,
|
.send_delay = lib->settings->get_int(lib->settings,
|
||||||
"charon.send_delay", 0),
|
"%s.send_delay", 0, charon->name),
|
||||||
.send_delay_type = lib->settings->get_int(lib->settings,
|
.send_delay_type = lib->settings->get_int(lib->settings,
|
||||||
"charon.send_delay_type", 0),
|
"%s.send_delay_type", 0, charon->name),
|
||||||
.send_delay_request = lib->settings->get_bool(lib->settings,
|
.send_delay_request = lib->settings->get_bool(lib->settings,
|
||||||
"charon.send_delay_request", TRUE),
|
"%s.send_delay_request", TRUE, charon->name),
|
||||||
.send_delay_response = lib->settings->get_int(lib->settings,
|
.send_delay_response = lib->settings->get_int(lib->settings,
|
||||||
"charon.send_delay_response", TRUE),
|
"%s.send_delay_response", TRUE, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
lib->processor->queue_job(lib->processor, (job_t*)this->job);
|
lib->processor->queue_job(lib->processor, (job_t*)this->job);
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ android_logger_t *android_logger_create()
|
|||||||
},
|
},
|
||||||
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
||||||
.level = lib->settings->get_int(lib->settings,
|
.level = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.android.loglevel", 1),
|
"%s.plugins.android.loglevel", 1, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
|
|||||||
@@ -364,21 +364,28 @@ certexpire_export_t *certexpire_export_create()
|
|||||||
(hashtable_equals_t)equals, 32),
|
(hashtable_equals_t)equals, 32),
|
||||||
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
||||||
.local_path = lib->settings->get_str(lib->settings,
|
.local_path = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.certexpire.csv.local", NULL),
|
"%s.plugins.certexpire.csv.local",
|
||||||
|
NULL, charon->name),
|
||||||
.remote_path = lib->settings->get_str(lib->settings,
|
.remote_path = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.certexpire.csv.remote", NULL),
|
"%s.plugins.certexpire.csv.remote",
|
||||||
|
NULL, charon->name),
|
||||||
.separator = lib->settings->get_str(lib->settings,
|
.separator = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.certexpire.csv.separator", ","),
|
"%s.plugins.certexpire.csv.separator",
|
||||||
|
",", charon->name),
|
||||||
.format = lib->settings->get_str(lib->settings,
|
.format = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.certexpire.csv.format", "%d:%m:%Y"),
|
"%s.plugins.certexpire.csv.format",
|
||||||
|
"%d:%m:%Y", charon->name),
|
||||||
.fixed_fields = lib->settings->get_bool(lib->settings,
|
.fixed_fields = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.certexpire.csv.fixed_fields", TRUE),
|
"%s.plugins.certexpire.csv.fixed_fields",
|
||||||
|
TRUE, charon->name),
|
||||||
.empty_string = lib->settings->get_str(lib->settings,
|
.empty_string = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.certexpire.csv.empty_string", ""),
|
"%s.plugins.certexpire.csv.empty_string",
|
||||||
|
"", charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
cron = lib->settings->get_str(lib->settings,
|
cron = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.certexpire.csv.cron", NULL);
|
"%s.plugins.certexpire.csv.cron",
|
||||||
|
NULL, charon->name);
|
||||||
if (cron)
|
if (cron)
|
||||||
{
|
{
|
||||||
this->cron = certexpire_cron_create(cron,
|
this->cron = certexpire_cron_create(cron,
|
||||||
|
|||||||
@@ -216,11 +216,13 @@ coupling_validator_t *coupling_validator_create()
|
|||||||
},
|
},
|
||||||
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
||||||
.max_couplings = lib->settings->get_int(lib->settings,
|
.max_couplings = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.coupling.max", 1),
|
"%s.plugins.coupling.max", 1,
|
||||||
|
charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
hash = lib->settings->get_str(lib->settings,
|
hash = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.coupling.hash", "sha1");
|
"%s.plugins.coupling.hash", "sha1",
|
||||||
|
charon->name);
|
||||||
for (i = 0; i < countof(hash_types); i++)
|
for (i = 0; i < countof(hash_types); i++)
|
||||||
{
|
{
|
||||||
if (strcaseeq(hash_types[i].name, hash))
|
if (strcaseeq(hash_types[i].name, hash))
|
||||||
@@ -238,7 +240,8 @@ coupling_validator_t *coupling_validator_create()
|
|||||||
}
|
}
|
||||||
|
|
||||||
path = lib->settings->get_str(lib->settings,
|
path = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.coupling.file", NULL);
|
"%s.plugins.coupling.file", NULL,
|
||||||
|
charon->name);
|
||||||
if (!path)
|
if (!path)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "coupling file path unspecified");
|
DBG1(DBG_CFG, "coupling file path unspecified");
|
||||||
|
|||||||
@@ -704,10 +704,11 @@ dhcp_socket_t *dhcp_socket_create()
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
this->identity_lease = lib->settings->get_bool(lib->settings,
|
this->identity_lease = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.dhcp.identity_lease", FALSE);
|
"%s.plugins.dhcp.identity_lease", FALSE,
|
||||||
|
charon->name);
|
||||||
this->dst = host_create_from_string(lib->settings->get_str(lib->settings,
|
this->dst = host_create_from_string(lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.dhcp.server", "255.255.255.255"),
|
"%s.plugins.dhcp.server", "255.255.255.255",
|
||||||
DHCP_SERVER_PORT);
|
charon->name), DHCP_SERVER_PORT);
|
||||||
if (!this->dst)
|
if (!this->dst)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "configured DHCP server address invalid");
|
DBG1(DBG_CFG, "configured DHCP server address invalid");
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ plugin_t *duplicheck_plugin_create()
|
|||||||
private_duplicheck_plugin_t *this;
|
private_duplicheck_plugin_t *this;
|
||||||
|
|
||||||
if (!lib->settings->get_bool(lib->settings,
|
if (!lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.duplicheck.enable", TRUE))
|
"%s.plugins.duplicheck.enable", TRUE, charon->name))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -691,7 +691,7 @@ eap_aka_server_t *eap_aka_server_create(identification_t *server,
|
|||||||
this->permanent = peer->clone(peer);
|
this->permanent = peer->clone(peer);
|
||||||
this->use_reauth = this->use_pseudonym = this->use_permanent =
|
this->use_reauth = this->use_pseudonym = this->use_permanent =
|
||||||
lib->settings->get_bool(lib->settings,
|
lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-aka.request_identity", TRUE);
|
"%s.plugins.eap-aka.request_identity", TRUE, charon->name);
|
||||||
|
|
||||||
/* generate a non-zero identifier */
|
/* generate a non-zero identifier */
|
||||||
do {
|
do {
|
||||||
|
|||||||
@@ -160,12 +160,13 @@ eap_aka_3gpp2_card_t *eap_aka_3gpp2_card_create(eap_aka_3gpp2_functions_t *f)
|
|||||||
},
|
},
|
||||||
.f = f,
|
.f = f,
|
||||||
.seq_check = lib->settings->get_bool(lib->settings,
|
.seq_check = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-aka-3gpp2.seq_check",
|
"%s.plugins.eap-aka-3gpp2.seq_check",
|
||||||
#ifdef SEQ_CHECK /* handle legacy compile time configuration as default */
|
#ifdef SEQ_CHECK /* handle legacy compile time configuration as default */
|
||||||
TRUE),
|
TRUE,
|
||||||
#else /* !SEQ_CHECK */
|
#else /* !SEQ_CHECK */
|
||||||
FALSE),
|
FALSE,
|
||||||
#endif /* SEQ_CHECK */
|
#endif /* SEQ_CHECK */
|
||||||
|
charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
eap_aka_3gpp2_get_sqn(this->sqn, 0);
|
eap_aka_3gpp2_get_sqn(this->sqn, 0);
|
||||||
|
|||||||
@@ -218,7 +218,8 @@ METHOD(eap_method_t, process_server, status_t,
|
|||||||
password[data.len] = '\0';
|
password[data.len] = '\0';
|
||||||
|
|
||||||
service = lib->settings->get_str(lib->settings,
|
service = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-gtc.pam_service", GTC_PAM_SERVICE);
|
"%s.plugins.eap-gtc.pam_service", GTC_PAM_SERVICE,
|
||||||
|
charon->name);
|
||||||
|
|
||||||
if (!authenticate(service, user, password))
|
if (!authenticate(service, user, password))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -156,16 +156,19 @@ static eap_peap_t *eap_peap_create(private_eap_peap_t * this,
|
|||||||
tls_t *tls;
|
tls_t *tls;
|
||||||
|
|
||||||
if (is_server && !lib->settings->get_bool(lib->settings,
|
if (is_server && !lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-peap.request_peer_auth", FALSE))
|
"%s.plugins.eap-peap.request_peer_auth", FALSE,
|
||||||
|
charon->name))
|
||||||
{
|
{
|
||||||
peer = NULL;
|
peer = NULL;
|
||||||
}
|
}
|
||||||
frag_size = lib->settings->get_int(lib->settings,
|
frag_size = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-peap.fragment_size", MAX_FRAGMENT_LEN);
|
"%s.plugins.eap-peap.fragment_size", MAX_FRAGMENT_LEN,
|
||||||
|
charon->name);
|
||||||
max_msg_count = lib->settings->get_int(lib->settings,
|
max_msg_count = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-peap.max_message_count", MAX_MESSAGE_COUNT);
|
"%s.plugins.eap-peap.max_message_count", MAX_MESSAGE_COUNT,
|
||||||
|
charon->name);
|
||||||
include_length = lib->settings->get_bool(lib->settings,
|
include_length = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-peap.include_length", FALSE);
|
"%s.plugins.eap-peap.include_length", FALSE, charon->name);
|
||||||
tls = tls_create(is_server, server, peer, TLS_PURPOSE_EAP_PEAP,
|
tls = tls_create(is_server, server, peer, TLS_PURPOSE_EAP_PEAP,
|
||||||
application, NULL);
|
application, NULL);
|
||||||
this->tls_eap = tls_eap_create(EAP_PEAP, tls, frag_size, max_msg_count,
|
this->tls_eap = tls_eap_create(EAP_PEAP, tls, frag_size, max_msg_count,
|
||||||
@@ -180,7 +183,7 @@ static eap_peap_t *eap_peap_create(private_eap_peap_t * this,
|
|||||||
}
|
}
|
||||||
|
|
||||||
eap_peap_t *eap_peap_create_server(identification_t *server,
|
eap_peap_t *eap_peap_create_server(identification_t *server,
|
||||||
identification_t *peer)
|
identification_t *peer)
|
||||||
{
|
{
|
||||||
private_eap_peap_t *eap_peap;
|
private_eap_peap_t *eap_peap;
|
||||||
eap_method_t *eap_method;
|
eap_method_t *eap_method;
|
||||||
|
|||||||
@@ -91,7 +91,8 @@ static status_t start_phase2_auth(private_eap_peap_server_t *this)
|
|||||||
eap_type_t type;
|
eap_type_t type;
|
||||||
|
|
||||||
eap_type_str = lib->settings->get_str(lib->settings,
|
eap_type_str = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-peap.phase2_method", "mschapv2");
|
"%s.plugins.eap-peap.phase2_method", "mschapv2",
|
||||||
|
charon->name);
|
||||||
type = eap_type_from_string(eap_type_str);
|
type = eap_type_from_string(eap_type_str);
|
||||||
if (type == 0)
|
if (type == 0)
|
||||||
{
|
{
|
||||||
@@ -128,7 +129,7 @@ static status_t start_phase2_auth(private_eap_peap_server_t *this)
|
|||||||
static status_t start_phase2_tnc(private_eap_peap_server_t *this)
|
static status_t start_phase2_tnc(private_eap_peap_server_t *this)
|
||||||
{
|
{
|
||||||
if (this->start_phase2_tnc && lib->settings->get_bool(lib->settings,
|
if (this->start_phase2_tnc && lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-peap.phase2_tnc", FALSE))
|
"%s.plugins.eap-peap.phase2_tnc", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
DBG1(DBG_IKE, "phase2 method %N selected", eap_type_names, EAP_TNC);
|
DBG1(DBG_IKE, "phase2 method %N selected", eap_type_names, EAP_TNC);
|
||||||
this->ph2_method = charon->eap->create_instance(charon->eap, EAP_TNC,
|
this->ph2_method = charon->eap->create_instance(charon->eap, EAP_TNC,
|
||||||
@@ -197,7 +198,7 @@ METHOD(tls_application_t, process, status_t,
|
|||||||
{
|
{
|
||||||
received_type = in->get_type(in, &received_vendor);
|
received_type = in->get_type(in, &received_vendor);
|
||||||
DBG1(DBG_IKE, "received tunneled EAP-PEAP AVP [EAP/%N/%N]",
|
DBG1(DBG_IKE, "received tunneled EAP-PEAP AVP [EAP/%N/%N]",
|
||||||
eap_code_short_names, code,
|
eap_code_short_names, code,
|
||||||
eap_type_short_names, received_type);
|
eap_type_short_names, received_type);
|
||||||
if (code != EAP_RESPONSE)
|
if (code != EAP_RESPONSE)
|
||||||
{
|
{
|
||||||
@@ -209,7 +210,7 @@ METHOD(tls_application_t, process, status_t,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
DBG1(DBG_IKE, "received tunneled EAP-PEAP AVP [EAP/%N]",
|
DBG1(DBG_IKE, "received tunneled EAP-PEAP AVP [EAP/%N]",
|
||||||
eap_code_short_names, code);
|
eap_code_short_names, code);
|
||||||
|
|
||||||
/* if EAP_SUCCESS check if to continue phase2 with EAP-TNC */
|
/* if EAP_SUCCESS check if to continue phase2 with EAP-TNC */
|
||||||
return (this->phase2_result == EAP_SUCCESS && code == EAP_SUCCESS) ?
|
return (this->phase2_result == EAP_SUCCESS && code == EAP_SUCCESS) ?
|
||||||
@@ -273,7 +274,7 @@ METHOD(tls_application_t, process, status_t,
|
|||||||
|
|
||||||
/* Start Phase 2 of EAP-PEAP authentication */
|
/* Start Phase 2 of EAP-PEAP authentication */
|
||||||
if (lib->settings->get_bool(lib->settings,
|
if (lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-peap.request_peer_auth", FALSE))
|
"%s.plugins.eap-peap.request_peer_auth", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
return start_phase2_tnc(this);
|
return start_phase2_tnc(this);
|
||||||
}
|
}
|
||||||
@@ -305,7 +306,7 @@ METHOD(tls_application_t, process, status_t,
|
|||||||
/* EAP-PEAP requires the sending of an inner EAP_SUCCESS message */
|
/* EAP-PEAP requires the sending of an inner EAP_SUCCESS message */
|
||||||
this->phase2_result = EAP_SUCCESS;
|
this->phase2_result = EAP_SUCCESS;
|
||||||
this->out = eap_payload_create_code(this->phase2_result, 1 +
|
this->out = eap_payload_create_code(this->phase2_result, 1 +
|
||||||
this->ph1_method->get_identifier(this->ph1_method));
|
this->ph1_method->get_identifier(this->ph1_method));
|
||||||
return NEED_MORE;
|
return NEED_MORE;
|
||||||
case NEED_MORE:
|
case NEED_MORE:
|
||||||
break;
|
break;
|
||||||
@@ -323,7 +324,7 @@ METHOD(tls_application_t, process, status_t,
|
|||||||
/* EAP-PEAP requires the sending of an inner EAP_FAILURE message */
|
/* EAP-PEAP requires the sending of an inner EAP_FAILURE message */
|
||||||
this->phase2_result = EAP_FAILURE;
|
this->phase2_result = EAP_FAILURE;
|
||||||
this->out = eap_payload_create_code(this->phase2_result, 1 +
|
this->out = eap_payload_create_code(this->phase2_result, 1 +
|
||||||
this->ph1_method->get_identifier(this->ph1_method));
|
this->ph1_method->get_identifier(this->ph1_method));
|
||||||
return NEED_MORE;
|
return NEED_MORE;
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
@@ -423,7 +424,8 @@ eap_peap_server_t *eap_peap_server_create(identification_t *server,
|
|||||||
.start_phase2 = TRUE,
|
.start_phase2 = TRUE,
|
||||||
.start_phase2_tnc = TRUE,
|
.start_phase2_tnc = TRUE,
|
||||||
.start_phase2_id = lib->settings->get_bool(lib->settings,
|
.start_phase2_id = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-peap.phase2_piggyback", FALSE),
|
"%s.plugins.eap-peap.phase2_piggyback",
|
||||||
|
FALSE, charon->name),
|
||||||
.phase2_result = EAP_FAILURE,
|
.phase2_result = EAP_FAILURE,
|
||||||
.avp = eap_peap_avp_create(TRUE),
|
.avp = eap_peap_avp_create(TRUE),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -453,14 +453,17 @@ eap_radius_t *eap_radius_create(identification_t *server, identification_t *peer
|
|||||||
/* initially EAP_RADIUS, but is set to the method selected by RADIUS */
|
/* initially EAP_RADIUS, but is set to the method selected by RADIUS */
|
||||||
.type = EAP_RADIUS,
|
.type = EAP_RADIUS,
|
||||||
.eap_start = lib->settings->get_bool(lib->settings,
|
.eap_start = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-radius.eap_start", FALSE),
|
"%s.plugins.eap-radius.eap_start", FALSE,
|
||||||
|
charon->name),
|
||||||
.id_prefix = lib->settings->get_str(lib->settings,
|
.id_prefix = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.id_prefix", ""),
|
"%s.plugins.eap-radius.id_prefix", "",
|
||||||
|
charon->name),
|
||||||
.class_group = lib->settings->get_bool(lib->settings,
|
.class_group = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-radius.class_group", FALSE),
|
"%s.plugins.eap-radius.class_group", FALSE,
|
||||||
|
charon->name),
|
||||||
.filter_id = lib->settings->get_bool(lib->settings,
|
.filter_id = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-radius.filter_id", FALSE),
|
"%s.plugins.eap-radius.filter_id", FALSE,
|
||||||
|
charon->name),
|
||||||
);
|
);
|
||||||
this->client = eap_radius_create_client();
|
this->client = eap_radius_create_client();
|
||||||
if (!this->client)
|
if (!this->client)
|
||||||
|
|||||||
@@ -456,9 +456,11 @@ static bool open_socket(private_eap_radius_dae_t *this)
|
|||||||
|
|
||||||
host = host_create_from_string(
|
host = host_create_from_string(
|
||||||
lib->settings->get_str(lib->settings,
|
lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.dae.listen", "0.0.0.0"),
|
"%s.plugins.eap-radius.dae.listen", "0.0.0.0",
|
||||||
|
charon->name),
|
||||||
lib->settings->get_int(lib->settings,
|
lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-radius.dae.port", RADIUS_DAE_PORT));
|
"%s.plugins.eap-radius.dae.port", RADIUS_DAE_PORT,
|
||||||
|
charon->name));
|
||||||
if (!host)
|
if (!host)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "invalid RADIUS DAE listen address");
|
DBG1(DBG_CFG, "invalid RADIUS DAE listen address");
|
||||||
@@ -508,7 +510,8 @@ eap_radius_dae_t *eap_radius_dae_create(eap_radius_accounting_t *accounting)
|
|||||||
.fd = -1,
|
.fd = -1,
|
||||||
.secret = {
|
.secret = {
|
||||||
.ptr = lib->settings->get_str(lib->settings,
|
.ptr = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.dae.secret", NULL),
|
"%s.plugins.eap-radius.dae.secret", NULL,
|
||||||
|
charon->name),
|
||||||
},
|
},
|
||||||
.hasher = lib->crypto->create_hasher(lib->crypto, HASH_MD5),
|
.hasher = lib->crypto->create_hasher(lib->crypto, HASH_MD5),
|
||||||
.signer = lib->crypto->create_signer(lib->crypto, AUTH_HMAC_MD5_128),
|
.signer = lib->crypto->create_signer(lib->crypto, AUTH_HMAC_MD5_128),
|
||||||
|
|||||||
@@ -436,9 +436,11 @@ eap_radius_forward_t *eap_radius_forward_create()
|
|||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
},
|
},
|
||||||
.from_attr = parse_selector(lib->settings->get_str(lib->settings,
|
.from_attr = parse_selector(lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.forward.ike_to_radius", "")),
|
"%s.plugins.eap-radius.forward.ike_to_radius", "",
|
||||||
|
charon->name)),
|
||||||
.to_attr = parse_selector(lib->settings->get_str(lib->settings,
|
.to_attr = parse_selector(lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.forward.radius_to_ike", "")),
|
"%s.plugins.eap-radius.forward.radius_to_ike", "",
|
||||||
|
charon->name)),
|
||||||
.from = hashtable_create((hashtable_hash_t)hash,
|
.from = hashtable_create((hashtable_hash_t)hash,
|
||||||
(hashtable_equals_t)equals, 8),
|
(hashtable_equals_t)equals, 8),
|
||||||
.to = hashtable_create((hashtable_hash_t)hash,
|
.to = hashtable_create((hashtable_hash_t)hash,
|
||||||
|
|||||||
@@ -90,22 +90,23 @@ static void load_configs(private_eap_radius_plugin_t *this)
|
|||||||
int auth_port, acct_port, sockets, preference;
|
int auth_port, acct_port, sockets, preference;
|
||||||
|
|
||||||
address = lib->settings->get_str(lib->settings,
|
address = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.server", NULL);
|
"%s.plugins.eap-radius.server", NULL, charon->name);
|
||||||
if (address)
|
if (address)
|
||||||
{ /* legacy configuration */
|
{ /* legacy configuration */
|
||||||
secret = lib->settings->get_str(lib->settings,
|
secret = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.secret", NULL);
|
"%s.plugins.eap-radius.secret", NULL, charon->name);
|
||||||
if (!secret)
|
if (!secret)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "no RADUIS secret defined");
|
DBG1(DBG_CFG, "no RADUIS secret defined");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
nas_identifier = lib->settings->get_str(lib->settings,
|
nas_identifier = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.nas_identifier", "strongSwan");
|
"%s.plugins.eap-radius.nas_identifier", "strongSwan",
|
||||||
|
charon->name);
|
||||||
auth_port = lib->settings->get_int(lib->settings,
|
auth_port = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-radius.port", AUTH_PORT);
|
"%s.plugins.eap-radius.port", AUTH_PORT, charon->name);
|
||||||
sockets = lib->settings->get_int(lib->settings,
|
sockets = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-radius.sockets", 1);
|
"%s.plugins.eap-radius.sockets", 1, charon->name);
|
||||||
config = radius_config_create(address, address, auth_port, ACCT_PORT,
|
config = radius_config_create(address, address, auth_port, ACCT_PORT,
|
||||||
nas_identifier, secret, sockets, 0);
|
nas_identifier, secret, sockets, 0);
|
||||||
if (!config)
|
if (!config)
|
||||||
@@ -118,38 +119,43 @@ static void load_configs(private_eap_radius_plugin_t *this)
|
|||||||
}
|
}
|
||||||
|
|
||||||
enumerator = lib->settings->create_section_enumerator(lib->settings,
|
enumerator = lib->settings->create_section_enumerator(lib->settings,
|
||||||
"charon.plugins.eap-radius.servers");
|
"%s.plugins.eap-radius.servers", charon->name);
|
||||||
while (enumerator->enumerate(enumerator, §ion))
|
while (enumerator->enumerate(enumerator, §ion))
|
||||||
{
|
{
|
||||||
address = lib->settings->get_str(lib->settings,
|
address = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.servers.%s.address", NULL, section);
|
"%s.plugins.eap-radius.servers.%s.address", NULL,
|
||||||
|
charon->name, section);
|
||||||
if (!address)
|
if (!address)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "RADIUS server '%s' misses address, skipped", section);
|
DBG1(DBG_CFG, "RADIUS server '%s' misses address, skipped", section);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
secret = lib->settings->get_str(lib->settings,
|
secret = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.servers.%s.secret", NULL, section);
|
"%s.plugins.eap-radius.servers.%s.secret", NULL,
|
||||||
|
charon->name, section);
|
||||||
if (!secret)
|
if (!secret)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "RADIUS server '%s' misses secret, skipped", section);
|
DBG1(DBG_CFG, "RADIUS server '%s' misses secret, skipped", section);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
nas_identifier = lib->settings->get_str(lib->settings,
|
nas_identifier = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-radius.servers.%s.nas_identifier",
|
"%s.plugins.eap-radius.servers.%s.nas_identifier", "strongSwan",
|
||||||
"strongSwan", section);
|
charon->name, section);
|
||||||
auth_port = lib->settings->get_int(lib->settings,
|
auth_port = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-radius.servers.%s.auth_port",
|
"%s.plugins.eap-radius.servers.%s.auth_port",
|
||||||
lib->settings->get_int(lib->settings,
|
lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-radius.servers.%s.port",
|
"%s.plugins.eap-radius.servers.%s.port",
|
||||||
AUTH_PORT, section),
|
AUTH_PORT, charon->name, section),
|
||||||
section);
|
charon->name, section);
|
||||||
acct_port = lib->settings->get_int(lib->settings,
|
acct_port = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-radius.servers.%s.acct_port", ACCT_PORT, section);
|
"%s.plugins.eap-radius.servers.%s.acct_port", ACCT_PORT,
|
||||||
|
charon->name, section);
|
||||||
sockets = lib->settings->get_int(lib->settings,
|
sockets = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-radius.servers.%s.sockets", 1, section);
|
"%s.plugins.eap-radius.servers.%s.sockets", 1,
|
||||||
|
charon->name, section);
|
||||||
preference = lib->settings->get_int(lib->settings,
|
preference = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-radius.servers.%s.preference", 0, section);
|
"%s.plugins.eap-radius.servers.%s.preference", 0,
|
||||||
|
charon->name, section);
|
||||||
config = radius_config_create(section, address, auth_port, acct_port,
|
config = radius_config_create(section, address, auth_port, acct_port,
|
||||||
nas_identifier, secret, sockets, preference);
|
nas_identifier, secret, sockets, preference);
|
||||||
if (!config)
|
if (!config)
|
||||||
@@ -242,12 +248,12 @@ plugin_t *eap_radius_plugin_create()
|
|||||||
instance = this;
|
instance = this;
|
||||||
|
|
||||||
if (lib->settings->get_bool(lib->settings,
|
if (lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-radius.accounting", FALSE))
|
"%s.plugins.eap-radius.accounting", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
charon->bus->add_listener(charon->bus, &this->accounting->listener);
|
charon->bus->add_listener(charon->bus, &this->accounting->listener);
|
||||||
}
|
}
|
||||||
if (lib->settings->get_bool(lib->settings,
|
if (lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-radius.dae.enable", FALSE))
|
"%s.plugins.eap-radius.dae.enable", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
this->dae = eap_radius_dae_create(this->accounting);
|
this->dae = eap_radius_dae_create(this->accounting);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -604,7 +604,8 @@ eap_sim_server_t *eap_sim_server_create(identification_t *server,
|
|||||||
this->permanent = peer->clone(peer);
|
this->permanent = peer->clone(peer);
|
||||||
this->use_reauth = this->use_pseudonym = this->use_permanent =
|
this->use_reauth = this->use_pseudonym = this->use_permanent =
|
||||||
lib->settings->get_bool(lib->settings,
|
lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-sim.request_identity", TRUE);
|
"%s.plugins.eap-sim.request_identity", TRUE,
|
||||||
|
charon->name);
|
||||||
|
|
||||||
/* generate a non-zero identifier */
|
/* generate a non-zero identifier */
|
||||||
do {
|
do {
|
||||||
|
|||||||
@@ -65,7 +65,8 @@ static bool load_db(private_eap_simaka_sql_t *this,
|
|||||||
char *uri;
|
char *uri;
|
||||||
|
|
||||||
uri = lib->settings->get_str(lib->settings,
|
uri = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-simaka-sql.database", NULL);
|
"%s.plugins.eap-simaka-sql.database", NULL,
|
||||||
|
charon->name);
|
||||||
if (!uri)
|
if (!uri)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "eap-simaka-sql database URI missing");
|
DBG1(DBG_CFG, "eap-simaka-sql database URI missing");
|
||||||
@@ -78,7 +79,8 @@ static bool load_db(private_eap_simaka_sql_t *this,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
remove_used = lib->settings->get_bool(lib->settings,
|
remove_used = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-simaka-sql.remove_used", FALSE);
|
"%s.plugins.eap-simaka-sql.remove_used", FALSE,
|
||||||
|
charon->name);
|
||||||
|
|
||||||
this->provider = eap_simaka_sql_provider_create(this->db, remove_used);
|
this->provider = eap_simaka_sql_provider_create(this->db, remove_used);
|
||||||
this->card = eap_simaka_sql_card_create(this->db, remove_used);
|
this->card = eap_simaka_sql_card_create(this->db, remove_used);
|
||||||
|
|||||||
@@ -144,11 +144,13 @@ static eap_tls_t *eap_tls_create(identification_t *server,
|
|||||||
);
|
);
|
||||||
|
|
||||||
frag_size = lib->settings->get_int(lib->settings,
|
frag_size = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-tls.fragment_size", MAX_FRAGMENT_LEN);
|
"%s.plugins.eap-tls.fragment_size", MAX_FRAGMENT_LEN,
|
||||||
|
charon->name);
|
||||||
max_msg_count = lib->settings->get_int(lib->settings,
|
max_msg_count = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-tls.max_message_count", MAX_MESSAGE_COUNT);
|
"%s.plugins.eap-tls.max_message_count", MAX_MESSAGE_COUNT,
|
||||||
|
charon->name);
|
||||||
include_length = lib->settings->get_bool(lib->settings,
|
include_length = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-tls.include_length", TRUE);
|
"%s.plugins.eap-tls.include_length", TRUE, charon->name);
|
||||||
tls = tls_create(is_server, server, peer, TLS_PURPOSE_EAP_TLS, NULL, NULL);
|
tls = tls_create(is_server, server, peer, TLS_PURPOSE_EAP_TLS, NULL, NULL);
|
||||||
this->tls_eap = tls_eap_create(EAP_TLS, tls, frag_size, max_msg_count,
|
this->tls_eap = tls_eap_create(EAP_TLS, tls, frag_size, max_msg_count,
|
||||||
include_length);
|
include_length);
|
||||||
|
|||||||
@@ -147,13 +147,15 @@ static eap_tnc_t *eap_tnc_create(identification_t *server,
|
|||||||
);
|
);
|
||||||
|
|
||||||
frag_size = lib->settings->get_int(lib->settings,
|
frag_size = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-tnc.fragment_size", MAX_FRAGMENT_LEN);
|
"%s.plugins.eap-tnc.fragment_size", MAX_FRAGMENT_LEN,
|
||||||
|
charon->name);
|
||||||
max_msg_count = lib->settings->get_int(lib->settings,
|
max_msg_count = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-tnc.max_message_count", MAX_MESSAGE_COUNT);
|
"%s.plugins.eap-tnc.max_message_count", MAX_MESSAGE_COUNT,
|
||||||
|
charon->name);
|
||||||
include_length = lib->settings->get_bool(lib->settings,
|
include_length = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-tnc.include_length", TRUE);
|
"%s.plugins.eap-tnc.include_length", TRUE, charon->name);
|
||||||
protocol = lib->settings->get_str(lib->settings,
|
protocol = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-tnc.protocol", "tnccs-1.1");
|
"%s.plugins.eap-tnc.protocol", "tnccs-1.1", charon->name);
|
||||||
if (strcaseeq(protocol, "tnccs-2.0"))
|
if (strcaseeq(protocol, "tnccs-2.0"))
|
||||||
{
|
{
|
||||||
type = TNCCS_2_0;
|
type = TNCCS_2_0;
|
||||||
|
|||||||
@@ -146,16 +146,19 @@ static eap_ttls_t *eap_ttls_create(identification_t *server,
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
if (is_server && !lib->settings->get_bool(lib->settings,
|
if (is_server && !lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-ttls.request_peer_auth", FALSE))
|
"%s.plugins.eap-ttls.request_peer_auth", FALSE,
|
||||||
|
charon->name))
|
||||||
{
|
{
|
||||||
peer = NULL;
|
peer = NULL;
|
||||||
}
|
}
|
||||||
frag_size = lib->settings->get_int(lib->settings,
|
frag_size = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-ttls.fragment_size", MAX_FRAGMENT_LEN);
|
"%s.plugins.eap-ttls.fragment_size", MAX_FRAGMENT_LEN,
|
||||||
|
charon->name);
|
||||||
max_msg_count = lib->settings->get_int(lib->settings,
|
max_msg_count = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.eap-ttls.max_message_count", MAX_MESSAGE_COUNT);
|
"%s.plugins.eap-ttls.max_message_count", MAX_MESSAGE_COUNT,
|
||||||
|
charon->name);
|
||||||
include_length = lib->settings->get_bool(lib->settings,
|
include_length = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-ttls.include_length", TRUE);
|
"%s.plugins.eap-ttls.include_length", TRUE, charon->name);
|
||||||
tls = tls_create(is_server, server, peer, TLS_PURPOSE_EAP_TTLS,
|
tls = tls_create(is_server, server, peer, TLS_PURPOSE_EAP_TTLS,
|
||||||
application, NULL);
|
application, NULL);
|
||||||
this->tls_eap = tls_eap_create(EAP_TTLS, tls, frag_size, max_msg_count,
|
this->tls_eap = tls_eap_create(EAP_TTLS, tls, frag_size, max_msg_count,
|
||||||
@@ -170,7 +173,7 @@ static eap_ttls_t *eap_ttls_create(identification_t *server,
|
|||||||
}
|
}
|
||||||
|
|
||||||
eap_ttls_t *eap_ttls_create_server(identification_t *server,
|
eap_ttls_t *eap_ttls_create_server(identification_t *server,
|
||||||
identification_t *peer)
|
identification_t *peer)
|
||||||
{
|
{
|
||||||
return eap_ttls_create(server, peer, TRUE,
|
return eap_ttls_create(server, peer, TRUE,
|
||||||
&eap_ttls_server_create(server, peer)->application);
|
&eap_ttls_server_create(server, peer)->application);
|
||||||
|
|||||||
@@ -78,7 +78,8 @@ static status_t start_phase2_auth(private_eap_ttls_server_t *this)
|
|||||||
eap_type_t type;
|
eap_type_t type;
|
||||||
|
|
||||||
eap_type_str = lib->settings->get_str(lib->settings,
|
eap_type_str = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.eap-ttls.phase2_method", "md5");
|
"%s.plugins.eap-ttls.phase2_method", "md5",
|
||||||
|
charon->name);
|
||||||
type = eap_type_from_string(eap_type_str);
|
type = eap_type_from_string(eap_type_str);
|
||||||
if (type == 0)
|
if (type == 0)
|
||||||
{
|
{
|
||||||
@@ -110,7 +111,7 @@ static status_t start_phase2_auth(private_eap_ttls_server_t *this)
|
|||||||
static status_t start_phase2_tnc(private_eap_ttls_server_t *this)
|
static status_t start_phase2_tnc(private_eap_ttls_server_t *this)
|
||||||
{
|
{
|
||||||
if (this->start_phase2_tnc && lib->settings->get_bool(lib->settings,
|
if (this->start_phase2_tnc && lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-ttls.phase2_tnc", FALSE))
|
"%s.plugins.eap-ttls.phase2_tnc", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
DBG1(DBG_IKE, "phase2 method %N selected", eap_type_names, EAP_TNC);
|
DBG1(DBG_IKE, "phase2 method %N selected", eap_type_names, EAP_TNC);
|
||||||
this->method = charon->eap->create_instance(charon->eap, EAP_TNC,
|
this->method = charon->eap->create_instance(charon->eap, EAP_TNC,
|
||||||
@@ -168,7 +169,7 @@ METHOD(tls_application_t, process, status_t,
|
|||||||
code = in->get_code(in);
|
code = in->get_code(in);
|
||||||
received_type = in->get_type(in, &received_vendor);
|
received_type = in->get_type(in, &received_vendor);
|
||||||
DBG1(DBG_IKE, "received tunneled EAP-TTLS AVP [EAP/%N/%N]",
|
DBG1(DBG_IKE, "received tunneled EAP-TTLS AVP [EAP/%N/%N]",
|
||||||
eap_code_short_names, code,
|
eap_code_short_names, code,
|
||||||
eap_type_short_names, received_type);
|
eap_type_short_names, received_type);
|
||||||
if (code != EAP_RESPONSE)
|
if (code != EAP_RESPONSE)
|
||||||
{
|
{
|
||||||
@@ -234,7 +235,7 @@ METHOD(tls_application_t, process, status_t,
|
|||||||
|
|
||||||
/* Start Phase 2 of EAP-TTLS authentication */
|
/* Start Phase 2 of EAP-TTLS authentication */
|
||||||
if (lib->settings->get_bool(lib->settings,
|
if (lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-ttls.request_peer_auth", FALSE))
|
"%s.plugins.eap-ttls.request_peer_auth", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
return start_phase2_tnc(this);
|
return start_phase2_tnc(this);
|
||||||
}
|
}
|
||||||
@@ -279,7 +280,7 @@ METHOD(tls_application_t, process, status_t,
|
|||||||
DBG1(DBG_IKE, "%N method failed", eap_type_names, type);
|
DBG1(DBG_IKE, "%N method failed", eap_type_names, type);
|
||||||
}
|
}
|
||||||
return FAILED;
|
return FAILED;
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,7 +294,7 @@ METHOD(tls_application_t, build, status_t,
|
|||||||
|
|
||||||
if (this->method == NULL && this->start_phase2 &&
|
if (this->method == NULL && this->start_phase2 &&
|
||||||
lib->settings->get_bool(lib->settings,
|
lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.eap-ttls.phase2_piggyback", FALSE))
|
"%s.plugins.eap-ttls.phase2_piggyback", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
/* generate an EAP Identity request which will be piggybacked right
|
/* generate an EAP Identity request which will be piggybacked right
|
||||||
* onto the TLS Finished message thus initiating EAP-TTLS phase2
|
* onto the TLS Finished message thus initiating EAP-TTLS phase2
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ static void load_pools(private_ha_attribute_t *this)
|
|||||||
pool_t *pool;
|
pool_t *pool;
|
||||||
|
|
||||||
enumerator = lib->settings->create_key_value_enumerator(lib->settings,
|
enumerator = lib->settings->create_key_value_enumerator(lib->settings,
|
||||||
"charon.plugins.ha.pools");
|
"%s.plugins.ha.pools", charon->name);
|
||||||
while (enumerator->enumerate(enumerator, &name, &net))
|
while (enumerator->enumerate(enumerator, &name, &net))
|
||||||
{
|
{
|
||||||
net = strdup(net);
|
net = strdup(net);
|
||||||
|
|||||||
@@ -128,19 +128,19 @@ plugin_t *ha_plugin_create()
|
|||||||
bool fifo, monitor, resync;
|
bool fifo, monitor, resync;
|
||||||
|
|
||||||
local = lib->settings->get_str(lib->settings,
|
local = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.ha.local", NULL);
|
"%s.plugins.ha.local", NULL, charon->name);
|
||||||
remote = lib->settings->get_str(lib->settings,
|
remote = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.ha.remote", NULL);
|
"%s.plugins.ha.remote", NULL, charon->name);
|
||||||
secret = lib->settings->get_str(lib->settings,
|
secret = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.ha.secret", NULL);
|
"%s.plugins.ha.secret", NULL, charon->name);
|
||||||
fifo = lib->settings->get_bool(lib->settings,
|
fifo = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.ha.fifo_interface", TRUE);
|
"%s.plugins.ha.fifo_interface", TRUE, charon->name);
|
||||||
monitor = lib->settings->get_bool(lib->settings,
|
monitor = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.ha.monitor", TRUE);
|
"%s.plugins.ha.monitor", TRUE, charon->name);
|
||||||
resync = lib->settings->get_bool(lib->settings,
|
resync = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.ha.resync", TRUE);
|
"%s.plugins.ha.resync", TRUE, charon->name);
|
||||||
count = min(SEGMENTS_MAX, lib->settings->get_int(lib->settings,
|
count = min(SEGMENTS_MAX, lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.ha.segment_count", 1));
|
"%s.plugins.ha.segment_count", 1, charon->name));
|
||||||
if (!local || !remote)
|
if (!local || !remote)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "HA config misses local/remote address");
|
DBG1(DBG_CFG, "HA config misses local/remote address");
|
||||||
|
|||||||
@@ -398,9 +398,11 @@ ha_segments_t *ha_segments_create(ha_socket_t *socket, ha_kernel_t *kernel,
|
|||||||
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
||||||
.condvar = condvar_create(CONDVAR_TYPE_DEFAULT),
|
.condvar = condvar_create(CONDVAR_TYPE_DEFAULT),
|
||||||
.heartbeat_delay = lib->settings->get_int(lib->settings,
|
.heartbeat_delay = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.ha.heartbeat_delay", DEFAULT_HEARTBEAT_DELAY),
|
"%s.plugins.ha.heartbeat_delay", DEFAULT_HEARTBEAT_DELAY,
|
||||||
|
charon->name),
|
||||||
.heartbeat_timeout = lib->settings->get_int(lib->settings,
|
.heartbeat_timeout = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.ha.heartbeat_timeout", DEFAULT_HEARTBEAT_TIMEOUT),
|
"%s.plugins.ha.heartbeat_timeout", DEFAULT_HEARTBEAT_TIMEOUT,
|
||||||
|
charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (monitor)
|
if (monitor)
|
||||||
|
|||||||
@@ -230,11 +230,12 @@ led_listener_t *led_listener_create()
|
|||||||
},
|
},
|
||||||
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
||||||
.blink_time = lib->settings->get_int(lib->settings,
|
.blink_time = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.led.blink_time", 50),
|
"%s.plugins.led.blink_time", 50, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
this->activity = open_led(lib->settings->get_str(lib->settings,
|
this->activity = open_led(lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.led.activity_led", NULL), &this->activity_max);
|
"%s.plugins.led.activity_led", NULL, charon->name),
|
||||||
|
&this->activity_max);
|
||||||
set_led(this->activity, 0);
|
set_led(this->activity, 0);
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
|
|||||||
@@ -336,41 +336,42 @@ load_tester_config_t *load_tester_config_create()
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (lib->settings->get_bool(lib->settings,
|
if (lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.load-tester.request_virtual_ip", FALSE))
|
"%s.plugins.load-tester.request_virtual_ip", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
this->vip = host_create_from_string("0.0.0.0", 0);
|
this->vip = host_create_from_string("0.0.0.0", 0);
|
||||||
}
|
}
|
||||||
this->pool = lib->settings->get_str(lib->settings,
|
this->pool = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.load-tester.pool", NULL);
|
"%s.plugins.load-tester.pool", NULL, charon->name);
|
||||||
this->remote = lib->settings->get_str(lib->settings,
|
this->remote = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.load-tester.remote", "127.0.0.1");
|
"%s.plugins.load-tester.remote", "127.0.0.1", charon->name);
|
||||||
|
|
||||||
this->proposal = proposal_create_from_string(PROTO_IKE,
|
this->proposal = proposal_create_from_string(PROTO_IKE,
|
||||||
lib->settings->get_str(lib->settings,
|
lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.load-tester.proposal", "aes128-sha1-modp768"));
|
"%s.plugins.load-tester.proposal", "aes128-sha1-modp768",
|
||||||
|
charon->name));
|
||||||
if (!this->proposal)
|
if (!this->proposal)
|
||||||
{ /* fallback */
|
{ /* fallback */
|
||||||
this->proposal = proposal_create_from_string(PROTO_IKE,
|
this->proposal = proposal_create_from_string(PROTO_IKE,
|
||||||
"aes128-sha1-modp768");
|
"aes128-sha1-modp768");
|
||||||
}
|
}
|
||||||
this->ike_rekey = lib->settings->get_int(lib->settings,
|
this->ike_rekey = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.load-tester.ike_rekey", 0);
|
"%s.plugins.load-tester.ike_rekey", 0, charon->name);
|
||||||
this->child_rekey = lib->settings->get_int(lib->settings,
|
this->child_rekey = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.load-tester.child_rekey", 600);
|
"%s.plugins.load-tester.child_rekey", 600, charon->name);
|
||||||
this->dpd_delay = lib->settings->get_int(lib->settings,
|
this->dpd_delay = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.load-tester.dpd_delay", 0);
|
"%s.plugins.load-tester.dpd_delay", 0, charon->name);
|
||||||
|
|
||||||
this->initiator_auth = lib->settings->get_str(lib->settings,
|
this->initiator_auth = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.load-tester.initiator_auth", "pubkey");
|
"%s.plugins.load-tester.initiator_auth", "pubkey", charon->name);
|
||||||
this->responder_auth = lib->settings->get_str(lib->settings,
|
this->responder_auth = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.load-tester.responder_auth", "pubkey");
|
"%s.plugins.load-tester.responder_auth", "pubkey", charon->name);
|
||||||
this->initiator_id = lib->settings->get_str(lib->settings,
|
this->initiator_id = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.load-tester.initiator_id", NULL);
|
"%s.plugins.load-tester.initiator_id", NULL, charon->name);
|
||||||
this->responder_id = lib->settings->get_str(lib->settings,
|
this->responder_id = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.load-tester.responder_id", NULL);
|
"%s.plugins.load-tester.responder_id", NULL, charon->name);
|
||||||
|
|
||||||
this->port = lib->settings->get_int(lib->settings,
|
this->port = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.load-tester.dynamic_port", 0);
|
"%s.plugins.load-tester.dynamic_port", 0, charon->name);
|
||||||
|
|
||||||
this->peer_cfg = generate_config(this, 0);
|
this->peer_cfg = generate_config(this, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -321,9 +321,9 @@ load_tester_creds_t *load_tester_creds_create()
|
|||||||
char *pwd, *psk;
|
char *pwd, *psk;
|
||||||
|
|
||||||
psk = lib->settings->get_str(lib->settings,
|
psk = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.load-tester.preshared_key", default_psk);
|
"%s.plugins.load-tester.preshared_key", default_psk, charon->name);
|
||||||
pwd = lib->settings->get_str(lib->settings,
|
pwd = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.load-tester.eap_password", default_pwd);
|
"%s.plugins.load-tester.eap_password", default_pwd, charon->name);
|
||||||
|
|
||||||
INIT(this,
|
INIT(this,
|
||||||
.public = {
|
.public = {
|
||||||
|
|||||||
@@ -108,7 +108,8 @@ load_tester_listener_t *load_tester_listener_create(u_int shutdown_on)
|
|||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
},
|
},
|
||||||
.delete_after_established = lib->settings->get_bool(lib->settings,
|
.delete_after_established = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.load-tester.delete_after_established", FALSE),
|
"%s.plugins.load-tester.delete_after_established", FALSE,
|
||||||
|
charon->name),
|
||||||
.shutdown_on = shutdown_on,
|
.shutdown_on = shutdown_on,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ plugin_t *load_tester_plugin_create()
|
|||||||
u_int i, shutdown_on = 0;
|
u_int i, shutdown_on = 0;
|
||||||
|
|
||||||
if (!lib->settings->get_bool(lib->settings,
|
if (!lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.load-tester.enable", FALSE))
|
"%s.plugins.load-tester.enable", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "disabling load-tester plugin, not configured");
|
DBG1(DBG_CFG, "disabling load-tester plugin, not configured");
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -220,13 +220,13 @@ plugin_t *load_tester_plugin_create()
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
.delay = lib->settings->get_int(lib->settings,
|
.delay = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.load-tester.delay", 0),
|
"%s.plugins.load-tester.delay", 0, charon->name),
|
||||||
.iterations = lib->settings->get_int(lib->settings,
|
.iterations = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.load-tester.iterations", 1),
|
"%s.plugins.load-tester.iterations", 1, charon->name),
|
||||||
.initiators = lib->settings->get_int(lib->settings,
|
.initiators = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.load-tester.initiators", 0),
|
"%s.plugins.load-tester.initiators", 0, charon->name),
|
||||||
.init_limit = lib->settings->get_int(lib->settings,
|
.init_limit = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.load-tester.init_limit", 0),
|
"%s.plugins.load-tester.init_limit", 0, charon->name),
|
||||||
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
.mutex = mutex_create(MUTEX_TYPE_DEFAULT),
|
||||||
.condvar = condvar_create(CONDVAR_TYPE_DEFAULT),
|
.condvar = condvar_create(CONDVAR_TYPE_DEFAULT),
|
||||||
.config = load_tester_config_create(),
|
.config = load_tester_config_create(),
|
||||||
@@ -239,7 +239,7 @@ plugin_t *load_tester_plugin_create()
|
|||||||
lib->credmgr->add_set(lib->credmgr, &this->creds->credential_set);
|
lib->credmgr->add_set(lib->credmgr, &this->creds->credential_set);
|
||||||
|
|
||||||
if (lib->settings->get_bool(lib->settings,
|
if (lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.load-tester.shutdown_when_complete", 0))
|
"%s.plugins.load-tester.shutdown_when_complete", 0, charon->name))
|
||||||
{
|
{
|
||||||
shutdown_on = this->iterations * this->initiators;
|
shutdown_on = this->iterations * this->initiators;
|
||||||
}
|
}
|
||||||
@@ -247,7 +247,7 @@ plugin_t *load_tester_plugin_create()
|
|||||||
charon->bus->add_listener(charon->bus, &this->listener->listener);
|
charon->bus->add_listener(charon->bus, &this->listener->listener);
|
||||||
|
|
||||||
if (lib->settings->get_bool(lib->settings,
|
if (lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.load-tester.fake_kernel", FALSE))
|
"%s.plugins.load-tester.fake_kernel", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
hydra->kernel_interface->add_ipsec_interface(hydra->kernel_interface,
|
hydra->kernel_interface->add_ipsec_interface(hydra->kernel_interface,
|
||||||
(kernel_ipsec_constructor_t)load_tester_ipsec_create);
|
(kernel_ipsec_constructor_t)load_tester_ipsec_create);
|
||||||
|
|||||||
@@ -212,9 +212,9 @@ radattr_listener_t *radattr_listener_create()
|
|||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
},
|
},
|
||||||
.dir = lib->settings->get_str(lib->settings,
|
.dir = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.radattr.dir", NULL),
|
"%s.plugins.radattr.dir", NULL, charon->name),
|
||||||
.mid = lib->settings->get_int(lib->settings,
|
.mid = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.radattr.message_id", -1),
|
"%s.plugins.radattr.message_id", -1, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
|
|||||||
@@ -583,7 +583,7 @@ socket_default_socket_t *socket_default_socket_create()
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
.max_packet = lib->settings->get_int(lib->settings,
|
.max_packet = lib->settings->get_int(lib->settings,
|
||||||
"charon.max_packet", MAX_PACKET),
|
"%s.max_packet", MAX_PACKET, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
|||||||
@@ -610,7 +610,7 @@ socket_dynamic_socket_t *socket_dynamic_socket_create()
|
|||||||
},
|
},
|
||||||
.lock = rwlock_create(RWLOCK_TYPE_DEFAULT),
|
.lock = rwlock_create(RWLOCK_TYPE_DEFAULT),
|
||||||
.max_packet = lib->settings->get_int(lib->settings,
|
.max_packet = lib->settings->get_int(lib->settings,
|
||||||
"charon.max_packet", MAX_PACKET),
|
"%s.max_packet", MAX_PACKET, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (pipe(this->notify) != 0)
|
if (pipe(this->notify) != 0)
|
||||||
|
|||||||
@@ -657,7 +657,7 @@ socket_raw_socket_t *socket_raw_socket_create()
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
.max_packet = lib->settings->get_int(lib->settings,
|
.max_packet = lib->settings->get_int(lib->settings,
|
||||||
"charon.max_packet", MAX_PACKET),
|
"%s.max_packet", MAX_PACKET, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
this->recv4 = open_recv_socket(this, AF_INET);
|
this->recv4 = open_recv_socket(this, AF_INET);
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ sql_logger_t *sql_logger_create(database_t *db)
|
|||||||
.db = db,
|
.db = db,
|
||||||
.recursive = thread_value_create(NULL),
|
.recursive = thread_value_create(NULL),
|
||||||
.level = lib->settings->get_int(lib->settings,
|
.level = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.sql.loglevel", -1),
|
"%s.plugins.sql.loglevel", -1, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
|
|||||||
@@ -80,7 +80,8 @@ plugin_t *sql_plugin_create()
|
|||||||
char *uri;
|
char *uri;
|
||||||
private_sql_plugin_t *this;
|
private_sql_plugin_t *this;
|
||||||
|
|
||||||
uri = lib->settings->get_str(lib->settings, "charon.plugins.sql.database", NULL);
|
uri = lib->settings->get_str(lib->settings, "%s.plugins.sql.database",
|
||||||
|
NULL, charon->name);
|
||||||
if (!uri)
|
if (!uri)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "sql plugin: database URI not set");
|
DBG1(DBG_CFG, "sql plugin: database URI not set");
|
||||||
|
|||||||
@@ -1181,7 +1181,8 @@ stroke_cred_t *stroke_cred_create()
|
|||||||
lib->credmgr->add_set(lib->credmgr, &this->creds->set);
|
lib->credmgr->add_set(lib->credmgr, &this->creds->set);
|
||||||
|
|
||||||
this->force_ca_cert = lib->settings->get_bool(lib->settings,
|
this->force_ca_cert = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.stroke.ignore_missing_ca_basic_constraint", FALSE);
|
"%s.plugins.stroke.ignore_missing_ca_basic_constraint",
|
||||||
|
FALSE, charon->name);
|
||||||
|
|
||||||
load_certs(this);
|
load_certs(this);
|
||||||
load_secrets(this, SECRETS_FILE, 0, NULL);
|
load_secrets(this, SECRETS_FILE, 0, NULL);
|
||||||
|
|||||||
@@ -834,7 +834,8 @@ stroke_socket_t *stroke_socket_create()
|
|||||||
this->condvar = condvar_create(CONDVAR_TYPE_DEFAULT);
|
this->condvar = condvar_create(CONDVAR_TYPE_DEFAULT);
|
||||||
this->commands = linked_list_create();
|
this->commands = linked_list_create();
|
||||||
this->max_concurrent = lib->settings->get_int(lib->settings,
|
this->max_concurrent = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.stroke.max_concurrent", MAX_CONCURRENT_DEFAULT);
|
"%s.plugins.stroke.max_concurrent", MAX_CONCURRENT_DEFAULT,
|
||||||
|
charon->name);
|
||||||
|
|
||||||
lib->credmgr->add_set(lib->credmgr, &this->ca->set);
|
lib->credmgr->add_set(lib->credmgr, &this->ca->set);
|
||||||
lib->credmgr->add_set(lib->credmgr, &this->cred->set);
|
lib->credmgr->add_set(lib->credmgr, &this->cred->set);
|
||||||
|
|||||||
@@ -155,8 +155,8 @@ METHOD(tnc_ifmap_soap_t, newSession, bool,
|
|||||||
|
|
||||||
/* set PEP and PDP device name (defaults to IF-MAP Publisher ID) */
|
/* set PEP and PDP device name (defaults to IF-MAP Publisher ID) */
|
||||||
this->device_name = lib->settings->get_str(lib->settings,
|
this->device_name = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-ifmap.device_name",
|
"%s.plugins.tnc-ifmap.device_name",
|
||||||
this->ifmap_publisher_id);
|
this->ifmap_publisher_id, charon->name);
|
||||||
this->device_name = strdup(this->device_name);
|
this->device_name = strdup(this->device_name);
|
||||||
|
|
||||||
/* free result */
|
/* free result */
|
||||||
@@ -174,7 +174,7 @@ METHOD(tnc_ifmap_soap_t, purgePublisher, bool,
|
|||||||
axiom_attribute_t *attr;
|
axiom_attribute_t *attr;
|
||||||
|
|
||||||
/* build purgePublisher request */
|
/* build purgePublisher request */
|
||||||
ns = axiom_namespace_create(this->env, IFMAP_NS, "ifmap");
|
ns = axiom_namespace_create(this->env, IFMAP_NS, "ifmap");
|
||||||
el = axiom_element_create(this->env, NULL, "purgePublisher", ns, &request);
|
el = axiom_element_create(this->env, NULL, "purgePublisher", ns, &request);
|
||||||
attr = axiom_attribute_create(this->env, "session-id",
|
attr = axiom_attribute_create(this->env, "session-id",
|
||||||
this->session_id, NULL);
|
this->session_id, NULL);
|
||||||
@@ -510,7 +510,7 @@ METHOD(tnc_ifmap_soap_t, publish_ike_sa, bool,
|
|||||||
/**
|
/**
|
||||||
* update or delete authenticated-as metadata
|
* update or delete authenticated-as metadata
|
||||||
*/
|
*/
|
||||||
if (up)
|
if (up)
|
||||||
{
|
{
|
||||||
el = axiom_element_create(this->env, NULL, "update", NULL, &node);
|
el = axiom_element_create(this->env, NULL, "update", NULL, &node);
|
||||||
}
|
}
|
||||||
@@ -534,7 +534,7 @@ METHOD(tnc_ifmap_soap_t, publish_ike_sa, bool,
|
|||||||
/**
|
/**
|
||||||
* update or delete access-request-ip metadata
|
* update or delete access-request-ip metadata
|
||||||
*/
|
*/
|
||||||
if (up)
|
if (up)
|
||||||
{
|
{
|
||||||
el = axiom_element_create(this->env, NULL, "update", NULL, &node);
|
el = axiom_element_create(this->env, NULL, "update", NULL, &node);
|
||||||
}
|
}
|
||||||
@@ -558,7 +558,7 @@ METHOD(tnc_ifmap_soap_t, publish_ike_sa, bool,
|
|||||||
/**
|
/**
|
||||||
* update or delete authenticated-by metadata
|
* update or delete authenticated-by metadata
|
||||||
*/
|
*/
|
||||||
if (up)
|
if (up)
|
||||||
{
|
{
|
||||||
el = axiom_element_create(this->env, NULL, "update", NULL, &node);
|
el = axiom_element_create(this->env, NULL, "update", NULL, &node);
|
||||||
}
|
}
|
||||||
@@ -688,7 +688,7 @@ METHOD(tnc_ifmap_soap_t, endSession, bool,
|
|||||||
axiom_attribute_t *attr;
|
axiom_attribute_t *attr;
|
||||||
|
|
||||||
/* build endSession request */
|
/* build endSession request */
|
||||||
ns = axiom_namespace_create(this->env, IFMAP_NS, "ifmap");
|
ns = axiom_namespace_create(this->env, IFMAP_NS, "ifmap");
|
||||||
el = axiom_element_create(this->env, NULL, "endSession", ns, &request);
|
el = axiom_element_create(this->env, NULL, "endSession", ns, &request);
|
||||||
attr = axiom_attribute_create(this->env, "session-id", this->session_id, NULL);
|
attr = axiom_attribute_create(this->env, "session-id", this->session_id, NULL);
|
||||||
axiom_element_add_attribute(el, this->env, attr, request);
|
axiom_element_add_attribute(el, this->env, attr, request);
|
||||||
@@ -731,20 +731,20 @@ static bool axis2c_init(private_tnc_ifmap_soap_t *this)
|
|||||||
|
|
||||||
/* Getting configuration parameters from strongswan.conf */
|
/* Getting configuration parameters from strongswan.conf */
|
||||||
client_home = lib->settings->get_str(lib->settings,
|
client_home = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-ifmap.client_home",
|
"%s.plugins.tnc-ifmap.client_home",
|
||||||
AXIS2_GETENV("AXIS2C_HOME"));
|
AXIS2_GETENV("AXIS2C_HOME"), charon->name);
|
||||||
server = lib->settings->get_str(lib->settings,
|
server = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-ifmap.server", IFMAP_SERVER);
|
"%s.plugins.tnc-ifmap.server", IFMAP_SERVER, charon->name);
|
||||||
server_cert = lib->settings->get_str(lib->settings,
|
server_cert = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-ifmap.server_cert", NULL);
|
"%s.plugins.tnc-ifmap.server_cert", NULL, charon->name);
|
||||||
key_file = lib->settings->get_str(lib->settings,
|
key_file = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-ifmap.key_file", NULL);
|
"%s.plugins.tnc-ifmap.key_file", NULL, charon->name);
|
||||||
ssl_passphrase = lib->settings->get_str(lib->settings,
|
ssl_passphrase = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-ifmap.ssl_passphrase", NULL);
|
"%s.plugins.tnc-ifmap.ssl_passphrase", NULL, charon->name);
|
||||||
username = lib->settings->get_str(lib->settings,
|
username = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-ifmap.username", NULL);
|
"%s.plugins.tnc-ifmap.username", NULL, charon->name);
|
||||||
password = lib->settings->get_str(lib->settings,
|
password = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-ifmap.password", NULL);
|
"%s.plugins.tnc-ifmap.password", NULL, charon->name);
|
||||||
|
|
||||||
if (!server_cert)
|
if (!server_cert)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ METHOD(imc_manager_t, get_preferred_language, char*,
|
|||||||
private_tnc_imc_manager_t *this)
|
private_tnc_imc_manager_t *this)
|
||||||
{
|
{
|
||||||
return lib->settings->get_str(lib->settings,
|
return lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-imc.preferred_language", "en");
|
"%s.plugins.tnc-imc.preferred_language", "en", charon->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(imc_manager_t, notify_connection_change, void,
|
METHOD(imc_manager_t, notify_connection_change, void,
|
||||||
|
|||||||
@@ -452,7 +452,8 @@ imv_manager_t* tnc_imv_manager_create(void)
|
|||||||
|
|
||||||
policy = enum_from_name(recommendation_policy_names,
|
policy = enum_from_name(recommendation_policy_names,
|
||||||
lib->settings->get_str(lib->settings,
|
lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-imv.recommendation_policy", "default"));
|
"%s.plugins.tnc-imv.recommendation_policy", "default",
|
||||||
|
charon->name));
|
||||||
this->policy = (policy != -1) ? policy : RECOMMENDATION_POLICY_DEFAULT;
|
this->policy = (policy != -1) ? policy : RECOMMENDATION_POLICY_DEFAULT;
|
||||||
DBG1(DBG_TNC, "TNC recommendation policy is '%N'",
|
DBG1(DBG_TNC, "TNC recommendation policy is '%N'",
|
||||||
recommendation_policy_names, this->policy);
|
recommendation_policy_names, this->policy);
|
||||||
|
|||||||
@@ -524,7 +524,7 @@ static job_requeue_t receive(private_tnc_pdp_t *this)
|
|||||||
if (request)
|
if (request)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "received RADIUS %N from client '%H'",
|
DBG1(DBG_CFG, "received RADIUS %N from client '%H'",
|
||||||
radius_message_code_names, request->get_code(request), source);
|
radius_message_code_names, request->get_code(request), source);
|
||||||
|
|
||||||
if (request->verify(request, NULL, this->secret, this->hasher,
|
if (request->verify(request, NULL, this->secret, this->hasher,
|
||||||
this->signer))
|
this->signer))
|
||||||
@@ -608,7 +608,7 @@ tnc_pdp_t *tnc_pdp_create(u_int16_t port)
|
|||||||
}
|
}
|
||||||
|
|
||||||
server = lib->settings->get_str(lib->settings,
|
server = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-pdp.server", NULL);
|
"%s.plugins.tnc-pdp.server", NULL, charon->name);
|
||||||
if (!server)
|
if (!server)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "missing PDP server name, PDP disabled");
|
DBG1(DBG_CFG, "missing PDP server name, PDP disabled");
|
||||||
@@ -618,7 +618,7 @@ tnc_pdp_t *tnc_pdp_create(u_int16_t port)
|
|||||||
this->server = identification_create_from_string(server);
|
this->server = identification_create_from_string(server);
|
||||||
|
|
||||||
secret = lib->settings->get_str(lib->settings,
|
secret = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-pdp.secret", NULL);
|
"%s.plugins.tnc-pdp.secret", NULL, charon->name);
|
||||||
if (!secret)
|
if (!secret)
|
||||||
{
|
{
|
||||||
DBG1(DBG_CFG, "missing RADIUS secret, PDP disabled");
|
DBG1(DBG_CFG, "missing RADIUS secret, PDP disabled");
|
||||||
@@ -629,7 +629,7 @@ tnc_pdp_t *tnc_pdp_create(u_int16_t port)
|
|||||||
this->signer->set_key(this->signer, this->secret);
|
this->signer->set_key(this->signer, this->secret);
|
||||||
|
|
||||||
eap_type_str = lib->settings->get_str(lib->settings,
|
eap_type_str = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.tnc-pdp.method", "ttls");
|
"%s.plugins.tnc-pdp.method", "ttls", charon->name);
|
||||||
this->type = eap_type_from_string(eap_type_str);
|
this->type = eap_type_from_string(eap_type_str);
|
||||||
if (this->type == 0)
|
if (this->type == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ plugin_t *tnc_pdp_plugin_create()
|
|||||||
int port;
|
int port;
|
||||||
|
|
||||||
port = lib->settings->get_int(lib->settings,
|
port = lib->settings->get_int(lib->settings,
|
||||||
"charon.plugins.tnc_pdp.port", RADIUS_PORT);
|
"%s.plugins.tnc_pdp.port", RADIUS_PORT, charon->name);
|
||||||
|
|
||||||
INIT(this,
|
INIT(this,
|
||||||
.public = {
|
.public = {
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ whitelist_listener_t *whitelist_listener_create()
|
|||||||
.ids = hashtable_create((hashtable_hash_t)hash,
|
.ids = hashtable_create((hashtable_hash_t)hash,
|
||||||
(hashtable_equals_t)equals, 32),
|
(hashtable_equals_t)equals, 32),
|
||||||
.enabled = lib->settings->get_bool(lib->settings,
|
.enabled = lib->settings->get_bool(lib->settings,
|
||||||
"charon.plugins.whitelist.enable", FALSE),
|
"%s.plugins.whitelist.enable", FALSE, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
|
|||||||
@@ -223,7 +223,8 @@ METHOD(xauth_method_t, process, status_t,
|
|||||||
}
|
}
|
||||||
|
|
||||||
name = lib->settings->get_str(lib->settings,
|
name = lib->settings->get_str(lib->settings,
|
||||||
"charon.plugins.xauth-eap.backend", "radius");
|
"%s.plugins.xauth-eap.backend", "radius",
|
||||||
|
charon->name);
|
||||||
type = eap_type_from_string(name);
|
type = eap_type_from_string(name);
|
||||||
if (!type)
|
if (!type)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2090,9 +2090,9 @@ ike_sa_t * ike_sa_create(ike_sa_id_t *ike_sa_id, bool initiator,
|
|||||||
.peer_addresses = linked_list_create(),
|
.peer_addresses = linked_list_create(),
|
||||||
.attributes = linked_list_create(),
|
.attributes = linked_list_create(),
|
||||||
.keepalive_interval = lib->settings->get_time(lib->settings,
|
.keepalive_interval = lib->settings->get_time(lib->settings,
|
||||||
"charon.keep_alive", KEEPALIVE_INTERVAL),
|
"%s.keep_alive", KEEPALIVE_INTERVAL, charon->name),
|
||||||
.flush_auth_cfg = lib->settings->get_bool(lib->settings,
|
.flush_auth_cfg = lib->settings->get_bool(lib->settings,
|
||||||
"charon.flush_auth_cfg", FALSE),
|
"%s.flush_auth_cfg", FALSE, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (version == IKEV2)
|
if (version == IKEV2)
|
||||||
|
|||||||
@@ -1982,13 +1982,15 @@ ike_sa_manager_t *ike_sa_manager_create()
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->table_size = get_nearest_powerof2(lib->settings->get_int(lib->settings,
|
this->table_size = get_nearest_powerof2(lib->settings->get_int(
|
||||||
"charon.ikesa_table_size", DEFAULT_HASHTABLE_SIZE));
|
lib->settings, "%s.ikesa_table_size",
|
||||||
|
DEFAULT_HASHTABLE_SIZE, charon->name));
|
||||||
this->table_size = max(1, min(this->table_size, MAX_HASHTABLE_SIZE));
|
this->table_size = max(1, min(this->table_size, MAX_HASHTABLE_SIZE));
|
||||||
this->table_mask = this->table_size - 1;
|
this->table_mask = this->table_size - 1;
|
||||||
|
|
||||||
this->segment_count = get_nearest_powerof2(lib->settings->get_int(lib->settings,
|
this->segment_count = get_nearest_powerof2(lib->settings->get_int(
|
||||||
"charon.ikesa_table_segments", DEFAULT_SEGMENT_COUNT));
|
lib->settings, "%s.ikesa_table_segments",
|
||||||
|
DEFAULT_SEGMENT_COUNT, charon->name));
|
||||||
this->segment_count = max(1, min(this->segment_count, this->table_size));
|
this->segment_count = max(1, min(this->segment_count, this->table_size));
|
||||||
this->segment_mask = this->segment_count - 1;
|
this->segment_mask = this->segment_count - 1;
|
||||||
|
|
||||||
@@ -2028,6 +2030,6 @@ ike_sa_manager_t *ike_sa_manager_create()
|
|||||||
}
|
}
|
||||||
|
|
||||||
this->reuse_ikesa = lib->settings->get_bool(lib->settings,
|
this->reuse_ikesa = lib->settings->get_bool(lib->settings,
|
||||||
"charon.reuse_ikesa", TRUE);
|
"%s.reuse_ikesa", TRUE, charon->name);
|
||||||
return &this->public;
|
return &this->public;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1140,7 +1140,8 @@ METHOD(task_manager_t, process_message, status_t,
|
|||||||
job = (job_t*)delete_ike_sa_job_create(ike_sa_id, FALSE);
|
job = (job_t*)delete_ike_sa_job_create(ike_sa_id, FALSE);
|
||||||
lib->scheduler->schedule_job(lib->scheduler, job,
|
lib->scheduler->schedule_job(lib->scheduler, job,
|
||||||
lib->settings->get_int(lib->settings,
|
lib->settings->get_int(lib->settings,
|
||||||
"charon.half_open_timeout", HALF_OPEN_IKE_SA_TIMEOUT));
|
"%s.half_open_timeout", HALF_OPEN_IKE_SA_TIMEOUT,
|
||||||
|
charon->name));
|
||||||
}
|
}
|
||||||
this->ike_sa->update_hosts(this->ike_sa, me, other, TRUE);
|
this->ike_sa->update_hosts(this->ike_sa, me, other, TRUE);
|
||||||
charon->bus->message(charon->bus, msg, TRUE, TRUE);
|
charon->bus->message(charon->bus, msg, TRUE, TRUE);
|
||||||
@@ -1511,11 +1512,11 @@ task_manager_v1_t *task_manager_v1_create(ike_sa_t *ike_sa)
|
|||||||
.active_tasks = linked_list_create(),
|
.active_tasks = linked_list_create(),
|
||||||
.passive_tasks = linked_list_create(),
|
.passive_tasks = linked_list_create(),
|
||||||
.retransmit_tries = lib->settings->get_int(lib->settings,
|
.retransmit_tries = lib->settings->get_int(lib->settings,
|
||||||
"charon.retransmit_tries", RETRANSMIT_TRIES),
|
"%s.retransmit_tries", RETRANSMIT_TRIES, charon->name),
|
||||||
.retransmit_timeout = lib->settings->get_double(lib->settings,
|
.retransmit_timeout = lib->settings->get_double(lib->settings,
|
||||||
"charon.retransmit_timeout", RETRANSMIT_TIMEOUT),
|
"%s.retransmit_timeout", RETRANSMIT_TIMEOUT, charon->name),
|
||||||
.retransmit_base = lib->settings->get_double(lib->settings,
|
.retransmit_base = lib->settings->get_double(lib->settings,
|
||||||
"charon.retransmit_base", RETRANSMIT_BASE),
|
"%s.retransmit_base", RETRANSMIT_BASE, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!this->rng)
|
if (!this->rng)
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ METHOD(task_t, build, status_t,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
strongswan = lib->settings->get_bool(lib->settings,
|
strongswan = lib->settings->get_bool(lib->settings,
|
||||||
"charon.send_vendor_id", FALSE);
|
"%s.send_vendor_id", FALSE, charon->name);
|
||||||
for (i = 0; i < countof(vendor_ids); i++)
|
for (i = 0; i < countof(vendor_ids); i++)
|
||||||
{
|
{
|
||||||
if (vendor_ids[i].send ||
|
if (vendor_ids[i].send ||
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ static void schedule_inactivity_timeout(private_quick_mode_t *this)
|
|||||||
if (timeout)
|
if (timeout)
|
||||||
{
|
{
|
||||||
close_ike = lib->settings->get_bool(lib->settings,
|
close_ike = lib->settings->get_bool(lib->settings,
|
||||||
"charon.inactivity_close_ike", FALSE);
|
"%s.inactivity_close_ike", FALSE, charon->name);
|
||||||
lib->scheduler->schedule_job(lib->scheduler, (job_t*)
|
lib->scheduler->schedule_job(lib->scheduler, (job_t*)
|
||||||
inactivity_job_create(this->child_sa->get_reqid(this->child_sa),
|
inactivity_job_create(this->child_sa->get_reqid(this->child_sa),
|
||||||
timeout, close_ike), timeout);
|
timeout, close_ike), timeout);
|
||||||
|
|||||||
@@ -1078,7 +1078,8 @@ METHOD(task_manager_t, process_message, status_t,
|
|||||||
job = (job_t*)delete_ike_sa_job_create(ike_sa_id, FALSE);
|
job = (job_t*)delete_ike_sa_job_create(ike_sa_id, FALSE);
|
||||||
lib->scheduler->schedule_job(lib->scheduler, job,
|
lib->scheduler->schedule_job(lib->scheduler, job,
|
||||||
lib->settings->get_int(lib->settings,
|
lib->settings->get_int(lib->settings,
|
||||||
"charon.half_open_timeout", HALF_OPEN_IKE_SA_TIMEOUT));
|
"%s.half_open_timeout", HALF_OPEN_IKE_SA_TIMEOUT,
|
||||||
|
charon->name));
|
||||||
}
|
}
|
||||||
this->ike_sa->set_statistic(this->ike_sa, STAT_INBOUND,
|
this->ike_sa->set_statistic(this->ike_sa, STAT_INBOUND,
|
||||||
time_monotonic(NULL));
|
time_monotonic(NULL));
|
||||||
@@ -1473,11 +1474,11 @@ task_manager_v2_t *task_manager_v2_create(ike_sa_t *ike_sa)
|
|||||||
.active_tasks = linked_list_create(),
|
.active_tasks = linked_list_create(),
|
||||||
.passive_tasks = linked_list_create(),
|
.passive_tasks = linked_list_create(),
|
||||||
.retransmit_tries = lib->settings->get_int(lib->settings,
|
.retransmit_tries = lib->settings->get_int(lib->settings,
|
||||||
"charon.retransmit_tries", RETRANSMIT_TRIES),
|
"%s.retransmit_tries", RETRANSMIT_TRIES, charon->name),
|
||||||
.retransmit_timeout = lib->settings->get_double(lib->settings,
|
.retransmit_timeout = lib->settings->get_double(lib->settings,
|
||||||
"charon.retransmit_timeout", RETRANSMIT_TIMEOUT),
|
"%s.retransmit_timeout", RETRANSMIT_TIMEOUT, charon->name),
|
||||||
.retransmit_base = lib->settings->get_double(lib->settings,
|
.retransmit_base = lib->settings->get_double(lib->settings,
|
||||||
"charon.retransmit_base", RETRANSMIT_BASE),
|
"%s.retransmit_base", RETRANSMIT_BASE, charon->name),
|
||||||
);
|
);
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ static void schedule_inactivity_timeout(private_child_create_t *this)
|
|||||||
if (timeout)
|
if (timeout)
|
||||||
{
|
{
|
||||||
close_ike = lib->settings->get_bool(lib->settings,
|
close_ike = lib->settings->get_bool(lib->settings,
|
||||||
"charon.inactivity_close_ike", FALSE);
|
"%s.inactivity_close_ike", FALSE, charon->name);
|
||||||
lib->scheduler->schedule_job(lib->scheduler, (job_t*)
|
lib->scheduler->schedule_job(lib->scheduler, (job_t*)
|
||||||
inactivity_job_create(this->child_sa->get_reqid(this->child_sa),
|
inactivity_job_create(this->child_sa->get_reqid(this->child_sa),
|
||||||
timeout, close_ike), timeout);
|
timeout, close_ike), timeout);
|
||||||
@@ -881,7 +881,7 @@ static void handle_child_sa_failure(private_child_create_t *this,
|
|||||||
{
|
{
|
||||||
if (message->get_exchange_type(message) == IKE_AUTH &&
|
if (message->get_exchange_type(message) == IKE_AUTH &&
|
||||||
lib->settings->get_bool(lib->settings,
|
lib->settings->get_bool(lib->settings,
|
||||||
"charon.close_ike_on_child_failure", FALSE))
|
"%s.close_ike_on_child_failure", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
/* we delay the delete for 100ms, as the IKE_AUTH response must arrive
|
/* we delay the delete for 100ms, as the IKE_AUTH response must arrive
|
||||||
* first */
|
* first */
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ struct private_ike_auth_t {
|
|||||||
static bool multiple_auth_enabled()
|
static bool multiple_auth_enabled()
|
||||||
{
|
{
|
||||||
return lib->settings->get_bool(lib->settings,
|
return lib->settings->get_bool(lib->settings,
|
||||||
"charon.multiple_authentication", TRUE);
|
"%s.multiple_authentication", TRUE, charon->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -398,7 +398,8 @@ static void build_certreqs(private_ike_cert_pre_t *this, message_t *message)
|
|||||||
{
|
{
|
||||||
message->add_payload(message, (payload_t*)req);
|
message->add_payload(message, (payload_t*)req);
|
||||||
|
|
||||||
if (lib->settings->get_bool(lib->settings, "charon.hash_and_url", FALSE))
|
if (lib->settings->get_bool(lib->settings,
|
||||||
|
"%s.hash_and_url", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
message->add_notify(message, FALSE, HTTP_CERT_LOOKUP_SUPPORTED,
|
message->add_notify(message, FALSE, HTTP_CERT_LOOKUP_SUPPORTED,
|
||||||
chunk_empty);
|
chunk_empty);
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ METHOD(task_t, build, status_t,
|
|||||||
private_ike_vendor_t *this, message_t *message)
|
private_ike_vendor_t *this, message_t *message)
|
||||||
{
|
{
|
||||||
if (lib->settings->get_bool(lib->settings,
|
if (lib->settings->get_bool(lib->settings,
|
||||||
"charon.send_vendor_id", FALSE))
|
"%s.send_vendor_id", FALSE, charon->name))
|
||||||
{
|
{
|
||||||
vendor_id_payload_t *vid;
|
vendor_id_payload_t *vid;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user