SKEYID derivation based on libstrongswan
[strongswan.git] / src / pluto / plutomain.c
index d40f8b4..618c09b 100644 (file)
@@ -12,8 +12,6 @@
  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  * for more details.
- *
- * RCSID $Id$
  */
 
 #include <stdio.h>
@@ -40,6 +38,8 @@
 
 #include <freeswan.h>
 #include <library.h>
+#include <debug.h>
+#include <utils/enumerator.h>
 
 #include <pfkeyv2.h>
 #include <pfkey.h>
 #include "keys.h"
 #include "adns.h"       /* needs <resolv.h> */
 #include "dnskey.h"     /* needs keys.h and adns.h */
-#include "rnd.h"
 #include "state.h"
 #include "ipsec_doi.h"  /* needs demux.h and state.h */
 #include "ocsp.h"
 #include "crl.h"
 #include "fetch.h"
 #include "xauth.h"
-#include "sha1.h"
-#include "md5.h"
-#include "crypto.h"     /* requires sha1.h and md5.h */
+#include "crypto.h"
 #include "nat_traversal.h"
 #include "virtual.h"
 #include "timer.h"
+#include "vendor.h"
 
 static void usage(const char *mess)
 {
@@ -223,6 +221,24 @@ bool pkcs11_proxy = FALSE;
  */
 static const char *pkcs11_init_args = NULL;
 
+/**
+ * Log loaded plugins
+ */
+static void print_plugins()
+{
+       char buf[BUF_LEN], *plugin;
+       int len = 0;
+       enumerator_t *enumerator;
+       
+       enumerator = lib->plugins->create_plugin_enumerator(lib->plugins);
+       while (len < BUF_LEN && enumerator->enumerate(enumerator, &plugin))
+       {
+               len += snprintf(&buf[len], BUF_LEN-len, "%s ", plugin);
+       }
+       enumerator->destroy(enumerator);
+       DBG1("loaded plugins: %s", buf);
+}
+
 int main(int argc, char **argv)
 {
        bool fork_desired = TRUE;
@@ -609,11 +625,15 @@ int main(int argc, char **argv)
                , ipsec_version_code()
                , compile_time_interop_options);
 
+       /* load plugins, further infrastructure may need it */
+       lib->plugins->load(lib->plugins, IPSEC_PLUGINDIR, 
+               lib->settings->get_str(lib->settings, "pluto.load", PLUGINS));
+       print_plugins();
+
        init_nat_traversal(nat_traversal, keep_alive, force_keepalive, nat_t_spf);
        init_virtual_ip(virtual_private);
-       scx_init(pkcs11_module_path, pkcs11_init_args);   /* load and initialize PKCS #11 module */
-       xauth_init();                   /* load and initialize XAUTH module */
-       init_rnd_pool();
+       scx_init(pkcs11_module_path, pkcs11_init_args);
+       xauth_init();
        init_secret();
        init_states();
        init_crypto();
@@ -690,8 +710,7 @@ int main(int argc, char **argv)
  *  1 general discomfort
  * 10 lock file exists
  */
-void
-exit_pluto(int status)
+void exit_pluto(int status)
 {
        reset_globals();    /* needed because we may be called in odd state */
        free_preshared_secrets();
@@ -712,6 +731,7 @@ exit_pluto(int status)
        free_crypto();
        free_id();                  /* free myids */
        free_events();              /* free remaining events */
+       free_vendorid();                        /* free all vendor id records */
        delete_lock();
        library_deinit();
        close_log();