From d6a27ec64ee6f77a00494cfa8a0001d190e537f6 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Tue, 23 Feb 2010 16:49:34 +0000 Subject: Do not kill daemon, just not use pluggable kernel interface if initialization failed --- .../plugins/kernel_pfkey/kernel_pfkey_ipsec.c | 27 +++++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c') diff --git a/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c b/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c index b64e41c56..8a7883c8a 100644 --- a/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c +++ b/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c @@ -2093,9 +2093,18 @@ METHOD(kernel_ipsec_t, bypass_socket, bool, METHOD(kernel_ipsec_t, destroy, void, private_kernel_pfkey_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_events > 0) + { + close(this->socket_events); + } this->policies->destroy_function(this->policies, (void*)policy_entry_destroy); this->mutex->destroy(this->mutex); this->mutex_pfkey->destroy(this->mutex_pfkey); @@ -2134,21 +2143,27 @@ kernel_pfkey_ipsec_t *kernel_pfkey_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, -- cgit v1.2.3