aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/charon-tkm/src/charon-tkm.c12
-rw-r--r--src/charon-tkm/src/tkm/tkm.c21
-rw-r--r--src/charon-tkm/tests/test_runner.c10
3 files changed, 37 insertions, 6 deletions
diff --git a/src/charon-tkm/src/charon-tkm.c b/src/charon-tkm/src/charon-tkm.c
index 8731d7831..3e52fa47d 100644
--- a/src/charon-tkm/src/charon-tkm.c
+++ b/src/charon-tkm/src/charon-tkm.c
@@ -32,7 +32,7 @@
#include <utils/backtrace.h>
#include <threading/thread.h>
-#include <tkm/client.h>
+#include "tkm.h"
/**
* PID file, in which charon-tkm stores its process id
@@ -294,8 +294,12 @@ int main(int argc, char *argv[])
goto deinit;
}
- /* initialize TKM client lib */
- tkmlib_init();
+ /* initialize TKM client */
+ if (!tkm_init())
+ {
+ DBG1(DBG_DMN, "init of TKM client failed - aborting %s", dmn_name);
+ goto deinit;
+ }
/* add handler for SEGV and ILL,
* INT and TERM are handled by sigwait() in run() */
@@ -320,11 +324,11 @@ int main(int argc, char *argv[])
unlink_pidfile();
status = 0;
- tkmlib_final();
deinit:
libcharon_deinit();
libhydra_deinit();
library_deinit();
+ tkm_deinit();
return status;
}
diff --git a/src/charon-tkm/src/tkm/tkm.c b/src/charon-tkm/src/tkm/tkm.c
index 1e61f882b..ebff089e5 100644
--- a/src/charon-tkm/src/tkm/tkm.c
+++ b/src/charon-tkm/src/tkm/tkm.c
@@ -14,8 +14,13 @@
* for more details.
*/
+#include <tkm/client.h>
+#include <tkm/constants.h>
+
#include "tkm.h"
+#define IKE_SOCKET "/tmp/tkm.rpc.ike"
+
typedef struct private_tkm_t private_tkm_t;
/**
@@ -41,6 +46,20 @@ bool tkm_init()
{
private_tkm_t *this;
+ /* initialize TKM client library */
+ tkmlib_init();
+ if (ike_init(IKE_SOCKET) != TKM_OK)
+ {
+ tkmlib_final();
+ return FALSE;
+ }
+
+ if (ike_tkm_reset() != TKM_OK)
+ {
+ tkmlib_final();
+ return FALSE;
+ }
+
INIT(this,
.public = {
.idmgr = tkm_id_manager_create(),
@@ -62,6 +81,8 @@ void tkm_deinit()
}
private_tkm_t *this = (private_tkm_t*)tkm;
this->public.idmgr->destroy(this->public.idmgr);
+
+ tkmlib_final();
free(this);
tkm = NULL;
}
diff --git a/src/charon-tkm/tests/test_runner.c b/src/charon-tkm/tests/test_runner.c
index 61c252416..c16ad35b1 100644
--- a/src/charon-tkm/tests/test_runner.c
+++ b/src/charon-tkm/tests/test_runner.c
@@ -14,12 +14,17 @@
* for more details.
*/
-#include <stdlib.h>
-
+#include "tkm.h"
#include "test_runner.h"
int main(void)
{
+ if (!tkm_init())
+ {
+ fprintf(stderr, "Could not connect to TKM, aborting tests\n");
+ return EXIT_FAILURE;
+ }
+
int number_failed;
Suite *s = suite_create("TKM tests");
suite_add_tcase(s, make_id_manager_tests());
@@ -30,6 +35,7 @@ int main(void)
srunner_run_all(sr, CK_NORMAL);
number_failed = srunner_ntests_failed(sr);
+ tkm_deinit();
srunner_free(sr);
return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;