diff options
author | Tobias Brunner <tobias@strongswan.org> | 2010-03-24 15:22:10 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2010-03-24 18:53:10 +0100 |
commit | 52bff307e108cfd87343fc87ffffb4e94df67dbd (patch) | |
tree | b3a6f73bd9bb0cd29f1461ef05fd1c5ea8e20816 /src/charon/charon.c | |
parent | f9b1db1631804f102dd4430a53b7264f98d38c29 (diff) | |
download | strongswan-52bff307e108cfd87343fc87ffffb4e94df67dbd.tar.bz2 strongswan-52bff307e108cfd87343fc87ffffb4e94df67dbd.tar.xz |
Init/deinit libhydra in charon and pluto.
Diffstat (limited to 'src/charon/charon.c')
-rw-r--r-- | src/charon/charon.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/src/charon/charon.c b/src/charon/charon.c index 811c5042f..d33d00f7f 100644 --- a/src/charon/charon.c +++ b/src/charon/charon.c @@ -31,6 +31,7 @@ #include <pwd.h> #include <grp.h> +#include <hydra.h> #include <daemon.h> #include <library.h> @@ -268,7 +269,7 @@ int main(int argc, char *argv[]) struct sigaction action; bool use_syslog = FALSE; level_t levels[DBG_MAX]; - int group; + int group, status = SS_RC_INITIALIZATION_FAILED; /* logging for library during initialization, as we have no bus yet */ dbg = dbg_stderr; @@ -288,14 +289,20 @@ int main(int argc, char *argv[]) exit(SS_RC_DAEMON_INTEGRITY); } - if (!libcharon_init()) + if (!libhydra_init()) { dbg_stderr(1, "initialization failed - aborting charon"); - libcharon_deinit(); + libhydra_deinit(); library_deinit(); exit(SS_RC_INITIALIZATION_FAILED); } + if (!libcharon_init()) + { + dbg_stderr(1, "initialization failed - aborting charon"); + goto deinit; + } + /* use CTRL loglevel for default */ for (group = 0; group < DBG_MAX; group++) { @@ -351,34 +358,27 @@ int main(int argc, char *argv[]) if (!lookup_uid_gid()) { dbg_stderr(1, "invalid uid/gid - aborting charon"); - libcharon_deinit(); - library_deinit(); - exit(SS_RC_INITIALIZATION_FAILED); + goto deinit; } /* initialize daemon */ if (!charon->initialize(charon, use_syslog, levels)) { DBG1(DBG_DMN, "initialization failed - aborting charon"); - libcharon_deinit(); - library_deinit(); - exit(SS_RC_INITIALIZATION_FAILED); + goto deinit; } if (check_pidfile()) { DBG1(DBG_DMN, "charon already running (\""PID_FILE"\" exists)"); - libcharon_deinit(); - library_deinit(); - exit(-1); + status = -1; + goto deinit; } if (!drop_capabilities()) { DBG1(DBG_DMN, "capability dropping failed - aborting charon"); - libcharon_deinit(); - library_deinit(); - exit(SS_RC_INITIALIZATION_FAILED); + goto deinit; } /* add handler for SEGV and ILL, @@ -404,11 +404,13 @@ int main(int argc, char *argv[]) run(); /* normal termination, cleanup and exit */ - libcharon_deinit(); - library_deinit(); - unlink(PID_FILE); + status = 0; - return 0; +deinit: + libcharon_deinit(); + libhydra_deinit(); + library_deinit(); + return status; } |