diff options
author | Martin Willi <martin@revosec.ch> | 2013-03-26 15:42:06 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-05-06 15:28:26 +0200 |
commit | 2baa7bbedb7d1ffd149fc326dfe28ed81dbcd09f (patch) | |
tree | e90b140af78971f271e0994ecf0f01c0ef29fdea /src/charon-cmd/charon-cmd.c | |
parent | 78d7a0f7e29af35902250cfd4f52bceee9a1608d (diff) | |
download | strongswan-2baa7bbedb7d1ffd149fc326dfe28ed81dbcd09f.tar.bz2 strongswan-2baa7bbedb7d1ffd149fc326dfe28ed81dbcd09f.tar.xz |
charon-cmd: load certificates and RSA private keys
Diffstat (limited to 'src/charon-cmd/charon-cmd.c')
-rw-r--r-- | src/charon-cmd/charon-cmd.c | 45 |
1 files changed, 31 insertions, 14 deletions
diff --git a/src/charon-cmd/charon-cmd.c b/src/charon-cmd/charon-cmd.c index 90cc8b6fa..4969c9645 100644 --- a/src/charon-cmd/charon-cmd.c +++ b/src/charon-cmd/charon-cmd.c @@ -34,6 +34,7 @@ #include "cmd/cmd_options.h" #include "cmd/cmd_connection.h" +#include "cmd/cmd_creds.h" /** * Loglevel configuration @@ -46,6 +47,11 @@ static level_t levels[DBG_MAX]; static cmd_connection_t *conn; /** + * Credential backend + */ +static cmd_creds_t *creds; + +/** * hook in library for debugging messages */ extern void (*dbg) (debug_t group, level_t level, char *fmt, ...); @@ -76,6 +82,14 @@ static void cleanup_conn() } /** + * Clean up credentials atexit() + */ +static void cleanup_creds() +{ + DESTROY_IF(creds); +} + +/** * Run the daemon and handle unix signals */ static int run() @@ -253,7 +267,8 @@ static void handle_arguments(int argc, char *argv[]) printf("%s, strongSwan %s\n", "charon-cmd", VERSION); exit(0); default: - if (conn->handle(conn, opt, optarg)) + if (conn->handle(conn, opt, optarg) || + creds->handle(creds, opt, optarg)) { continue; } @@ -300,24 +315,12 @@ int main(int argc, char *argv[]) { levels[group] = LEVEL_CTRL; } - conn = cmd_connection_create(); - atexit(cleanup_conn); - - handle_arguments(argc, argv); + charon->load_loggers(charon, levels, TRUE); if (!lookup_uid_gid()) { exit(SS_RC_INITIALIZATION_FAILED); } - charon->load_loggers(charon, levels, TRUE); - - if (uname(&utsname) != 0) - { - memset(&utsname, 0, sizeof(utsname)); - } - DBG1(DBG_DMN, "Starting charon-cmd IKE client (strongSwan %s, %s %s, %s)", - VERSION, utsname.sysname, utsname.release, utsname.machine); - if (!charon->initialize(charon, lib->settings->get_str(lib->settings, "charon-cmd.load", PLUGINS))) { @@ -328,6 +331,20 @@ int main(int argc, char *argv[]) exit(SS_RC_INITIALIZATION_FAILED); } + conn = cmd_connection_create(); + atexit(cleanup_conn); + creds = cmd_creds_create(); + atexit(cleanup_creds); + + handle_arguments(argc, argv); + + if (uname(&utsname) != 0) + { + memset(&utsname, 0, sizeof(utsname)); + } + DBG1(DBG_DMN, "Starting charon-cmd IKE client (strongSwan %s, %s %s, %s)", + VERSION, utsname.sysname, utsname.release, utsname.machine); + /* add handler for SEGV and ILL, * INT, TERM and HUP are handled by sigwait() in run() */ action.sa_handler = segv_handler; |