aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon-cmd/charon-cmd.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2013-03-26 15:42:06 +0100
committerMartin Willi <martin@revosec.ch>2013-05-06 15:28:26 +0200
commit2baa7bbedb7d1ffd149fc326dfe28ed81dbcd09f (patch)
treee90b140af78971f271e0994ecf0f01c0ef29fdea /src/charon-cmd/charon-cmd.c
parent78d7a0f7e29af35902250cfd4f52bceee9a1608d (diff)
downloadstrongswan-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.c45
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;