read PDP server name from strongswan.conf

This commit is contained in:
Andreas Steffen
2012-03-13 16:27:17 +01:00
parent 4853efe891
commit d1a311f631
+29 -7
View File
@@ -43,6 +43,16 @@ struct private_tnc_pdp_t {
*/
tnc_pdp_t public;
/**
* ID of the server
*/
identification_t *server;
/**
* EAP method type to be used
*/
eap_type_t type;
/**
* IPv4 RADIUS socket
*/
@@ -226,7 +236,7 @@ static void process_eap(private_tnc_pdp_t *this, radius_message_t *request,
if (eap_type == EAP_IDENTITY)
{
identification_t *server, *peer;
identification_t *peer;
chunk_t eap_identity;
if (message.len < 5)
@@ -235,14 +245,12 @@ static void process_eap(private_tnc_pdp_t *this, radius_message_t *request,
}
eap_identity = chunk_create(message.ptr + 5, message.len - 5);
peer = identification_create_from_data(eap_identity);
server = identification_create_from_string("%any");
this->method = charon->eap->create_instance(charon->eap, EAP_MD5, 0,
EAP_SERVER, server, peer);
this->method = charon->eap->create_instance(charon->eap, this->type,
0, EAP_SERVER, this->server, peer);
peer->destroy(peer);
if (!this->method)
{
peer->destroy(peer);
server->destroy(server);
in->destroy(in);
return;
}
@@ -392,6 +400,7 @@ METHOD(tnc_pdp_t, destroy, void,
{
close(this->ipv6);
}
DESTROY_IF(this->server);
DESTROY_IF(this->signer);
DESTROY_IF(this->hasher);
DESTROY_IF(this->method);
@@ -404,12 +413,13 @@ METHOD(tnc_pdp_t, destroy, void,
tnc_pdp_t *tnc_pdp_create(u_int16_t port)
{
private_tnc_pdp_t *this;
char *secret;
char *secret, *server;
INIT(this,
.public = {
.destroy = _destroy,
},
.type = EAP_TTLS,
.ipv4 = open_socket(this, AF_INET, port),
.ipv6 = open_socket(this, AF_INET6, port),
.hasher = lib->crypto->create_hasher(lib->crypto, HASH_MD5),
@@ -435,6 +445,17 @@ tnc_pdp_t *tnc_pdp_create(u_int16_t port)
destroy(this);
return NULL;
}
server = lib->settings->get_str(lib->settings,
"charon.plugins.tnc-pdp.server", NULL);
if (!server)
{
DBG1(DBG_CFG, "missing PDP server name, PDP disabled");
destroy(this);
return NULL;
}
this->server = identification_create_from_string(server);
secret = lib->settings->get_str(lib->settings,
"charon.plugins.tnc-pdp.secret", NULL);
if (!secret)
@@ -446,6 +467,7 @@ tnc_pdp_t *tnc_pdp_create(u_int16_t port)
this->secret = chunk_create(secret, strlen(secret));
this->signer->set_key(this->signer, this->secret);
this->job = callback_job_create_with_prio((callback_job_cb_t)receive,
this, NULL, NULL, JOB_PRIO_CRITICAL);
lib->processor->queue_job(lib->processor, (job_t*)this->job);