aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/plugins/kernel_klips/kernel_klips_ipsec.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2010-02-23 16:49:34 +0000
committerMartin Willi <martin@revosec.ch>2010-02-26 11:44:33 +0100
commitd6a27ec64ee6f77a00494cfa8a0001d190e537f6 (patch)
treeaf68d1c6e4ab4f1916e16f080a51118c5fadd534 /src/charon/plugins/kernel_klips/kernel_klips_ipsec.c
parent54f818590e1482eb271b01e9f462c58ec1299242 (diff)
downloadstrongswan-d6a27ec64ee6f77a00494cfa8a0001d190e537f6.tar.bz2
strongswan-d6a27ec64ee6f77a00494cfa8a0001d190e537f6.tar.xz
Do not kill daemon, just not use pluggable kernel interface if initialization failed
Diffstat (limited to 'src/charon/plugins/kernel_klips/kernel_klips_ipsec.c')
-rw-r--r--src/charon/plugins/kernel_klips/kernel_klips_ipsec.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/charon/plugins/kernel_klips/kernel_klips_ipsec.c b/src/charon/plugins/kernel_klips/kernel_klips_ipsec.c
index c99b72133..01df4f71a 100644
--- a/src/charon/plugins/kernel_klips/kernel_klips_ipsec.c
+++ b/src/charon/plugins/kernel_klips/kernel_klips_ipsec.c
@@ -2566,9 +2566,18 @@ METHOD(kernel_ipsec_t, bypass_socket, bool,
METHOD(kernel_ipsec_t, destroy, void,
private_kernel_klips_ipsec_t *this)
{
- this->job->cancel(this->job);
- close(this->socket);
- close(this->socket_events);
+ if (this->job)
+ {
+ this->job->cancel(this->job);
+ }
+ if (this->socket > 0)
+ {
+ close(this->socket);
+ }
+ if (this->socket_evnets > 0)
+ {
+ close(this->socket_events);
+ }
this->mutex_pfkey->destroy(this->mutex_pfkey);
this->mutex->destroy(this->mutex);
this->ipsec_devices->destroy_function(this->ipsec_devices, (void*)ipsec_dev_destroy);
@@ -2616,21 +2625,27 @@ kernel_klips_ipsec_t *kernel_klips_ipsec_create()
this->socket = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);
if (this->socket <= 0)
{
- charon->kill(charon, "unable to create PF_KEY socket");
+ DBG1(DBG_KNL, "unable to create PF_KEY socket");
+ destroy(this);
+ return NULL;
}
/* create a PF_KEY socket for ACQUIRE & EXPIRE */
this->socket_events = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);
if (this->socket_events <= 0)
{
- charon->kill(charon, "unable to create PF_KEY event socket");
+ DBG1(DBG_KNL, "unable to create PF_KEY event socket");
+ destroy(this);
+ return NULL;
}
/* register the event socket */
if (register_pfkey_socket(this, SADB_SATYPE_ESP) != SUCCESS ||
register_pfkey_socket(this, SADB_SATYPE_AH) != SUCCESS)
{
- charon->kill(charon, "unable to register PF_KEY event socket");
+ DBG1(DBG_KNL, "unable to register PF_KEY event socket");
+ destroy(this);
+ return NULL;
}
this->job = callback_job_create((callback_job_cb_t)receive_events,
@@ -2639,3 +2654,4 @@ kernel_klips_ipsec_t *kernel_klips_ipsec_create()
return &this->public;
}
+