Init/deinit libhydra in charon and pluto.
authorTobias Brunner <tobias@strongswan.org>
Wed, 24 Mar 2010 14:22:10 +0000 (15:22 +0100)
committerTobias Brunner <tobias@strongswan.org>
Wed, 24 Mar 2010 17:53:10 +0000 (18:53 +0100)
src/charon/Makefile.am
src/charon/charon.c
src/libcharon/daemon.c
src/pluto/Makefile.am
src/pluto/plutomain.c

index 041868b..6481947 100644 (file)
@@ -3,10 +3,15 @@ ipsec_PROGRAMS = charon
 charon_SOURCES = \
 charon.c
 
-INCLUDES = -I$(top_srcdir)/src/libstrongswan -I$(top_srcdir)/src/libcharon
+INCLUDES = \
+       -I$(top_srcdir)/src/libstrongswan \
+       -I$(top_srcdir)/src/libhydra \
+       -I$(top_srcdir)/src/libcharon
+
 AM_CFLAGS = \
        -DIPSEC_DIR=\"${ipsecdir}\" \
        -DIPSEC_PIDDIR=\"${piddir}\"
+
 charon_LDADD = \
        $(top_builddir)/src/libstrongswan/libstrongswan.la \
        $(top_builddir)/src/libhydra/libhydra.la \
index 811c504..d33d00f 100644 (file)
@@ -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;
 }
 
index be9672f..3b8c8e6 100644 (file)
@@ -323,6 +323,7 @@ METHOD(daemon_t, initialize, bool,
        {
                DBG1(DBG_DMN, "integrity tests enabled:");
                DBG1(DBG_DMN, "lib    'libstrongswan': passed file and segment integrity tests");
+               DBG1(DBG_DMN, "lib    'libhydra': passed file and segment integrity tests");
                DBG1(DBG_DMN, "lib    'libcharon': passed file and segment integrity tests");
                DBG1(DBG_DMN, "daemon 'charon': passed file integrity test");
        }
index a0ab0f4..1d55d01 100644 (file)
@@ -54,13 +54,14 @@ rsaref/pkcs11t.h rsaref/pkcs11.h rsaref/unix.h rsaref/pkcs11f.h
 _pluto_adns_SOURCES = adns.c adns.h
 
 LIBSTRONGSWANDIR=$(top_builddir)/src/libstrongswan
-LIBHYDRADIR=$(top_builddir)/src/libhydra
 LIBFREESWANDIR=$(top_builddir)/src/libfreeswan
+LIBHYDRADIR=$(top_builddir)/src/libhydra
 
 INCLUDES = \
 -I${linux_headers} \
 -I$(top_srcdir)/src/libstrongswan \
 -I$(top_srcdir)/src/libfreeswan \
+-I$(top_srcdir)/src/libhydra \
 -I$(top_srcdir)/src/whack
 
 AM_CFLAGS = \
@@ -75,8 +76,8 @@ AM_CFLAGS = \
 
 pluto_LDADD = \
 $(LIBSTRONGSWANDIR)/libstrongswan.la \
-$(LIBHYDRADIR)/libhydra.la \
 $(LIBFREESWANDIR)/libfreeswan.a \
+$(LIBHYDRADIR)/libhydra.la \
 -lresolv $(PTHREADLIB) $(DLLIB)
 
 _pluto_adns_LDADD = \
index 8b922df..98195ca 100644 (file)
@@ -38,6 +38,7 @@
 
 #include <freeswan.h>
 
+#include <hydra.h>
 #include <library.h>
 #include <debug.h>
 #include <utils/enumerator.h>
@@ -273,6 +274,12 @@ int main(int argc, char **argv)
                library_deinit();
                exit(SS_RC_DAEMON_INTEGRITY);
        }
+       if (!libhydra_init())
+       {
+               libhydra_deinit();
+               library_deinit();
+               exit(SS_RC_INITIALIZATION_FAILED);
+       }
        options = options_create();
 
        /* handle arguments */
@@ -648,6 +655,7 @@ int main(int argc, char **argv)
        {
                plog("integrity tests enabled:");
                plog("lib    'libstrongswan': passed file and segment integrity tests");
+               plog("lib    'libhydra': passed file and segment integrity tests");
                plog("daemon 'pluto': passed file integrity test");
        }
 
@@ -770,6 +778,7 @@ void exit_pluto(int status)
        free_builder();
        delete_lock();
        options->destroy(options);
+       libhydra_deinit();
        library_deinit();
        close_log();
        exit(status);