aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/tnc_imv/tnc_imv_manager.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-11-14 16:17:57 +0100
committerMartin Willi <martin@revosec.ch>2012-11-30 15:48:13 +0100
commitbe18ee8123d6de3984a04f9feb1e457b7c45b0b5 (patch)
tree7cf126df9b6facdc899cf77ae0f7cb0b118317ab /src/libcharon/plugins/tnc_imv/tnc_imv_manager.c
parentfd885fd390756eb396a48e4cb27e447cf40b0ae5 (diff)
downloadstrongswan-be18ee8123d6de3984a04f9feb1e457b7c45b0b5.tar.bz2
strongswan-be18ee8123d6de3984a04f9feb1e457b7c45b0b5.tar.xz
If adding an IMC/IMV fails, terminate() it only if it has been initialize()d
Diffstat (limited to 'src/libcharon/plugins/tnc_imv/tnc_imv_manager.c')
-rw-r--r--src/libcharon/plugins/tnc_imv/tnc_imv_manager.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/libcharon/plugins/tnc_imv/tnc_imv_manager.c b/src/libcharon/plugins/tnc_imv/tnc_imv_manager.c
index a8c0c0390..c5bb5fffe 100644
--- a/src/libcharon/plugins/tnc_imv/tnc_imv_manager.c
+++ b/src/libcharon/plugins/tnc_imv/tnc_imv_manager.c
@@ -67,10 +67,9 @@ METHOD(imv_manager_t, add, bool,
{
TNC_Version version;
- /* Initialize the IMV module */
imv->set_id(imv, this->next_imv_id);
if (imv->initialize(imv->get_id(imv), TNC_IFIMV_VERSION_1,
- TNC_IFIMV_VERSION_1, &version) != TNC_RESULT_SUCCESS)
+ TNC_IFIMV_VERSION_1, &version) != TNC_RESULT_SUCCESS)
{
DBG1(DBG_TNC, "IMV \"%s\" failed to initialize", imv->get_name(imv));
return FALSE;
@@ -78,15 +77,18 @@ METHOD(imv_manager_t, add, bool,
this->imvs->insert_last(this->imvs, imv);
this->next_imv_id++;
- if (imv->provide_bind_function(imv->get_id(imv), TNC_TNCS_BindFunction)
- != TNC_RESULT_SUCCESS)
+ if (imv->provide_bind_function(imv->get_id(imv),
+ TNC_TNCS_BindFunction) != TNC_RESULT_SUCCESS)
{
- DBG1(DBG_TNC, "IMV \"%s\" could failed to obtain bind function",
- imv->get_name(imv));
+ if (imv->terminate)
+ {
+ imv->terminate(imv->get_id(imv));
+ }
+ DBG1(DBG_TNC, "IMV \"%s\" failed to obtain bind function",
+ imv->get_name(imv));
this->imvs->remove_last(this->imvs, (void**)&imv);
return FALSE;
}
-
return TRUE;
}
@@ -123,12 +125,6 @@ METHOD(imv_manager_t, load, bool,
}
if (!add(this, imv))
{
- if (imv->terminate &&
- imv->terminate(imv->get_id(imv)) != TNC_RESULT_SUCCESS)
- {
- DBG1(DBG_TNC, "IMV \"%s\" not terminated successfully",
- imv->get_name(imv));
- }
imv->destroy(imv);
return FALSE;
}