diff options
author | Martin Willi <martin@revosec.ch> | 2010-02-23 16:49:34 +0000 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2010-02-26 11:44:33 +0100 |
commit | d6a27ec64ee6f77a00494cfa8a0001d190e537f6 (patch) | |
tree | af68d1c6e4ab4f1916e16f080a51118c5fadd534 /src/charon/plugins/kernel_klips/kernel_klips_ipsec.c | |
parent | 54f818590e1482eb271b01e9f462c58ec1299242 (diff) | |
download | strongswan-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.c | 28 |
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; } + |