aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-04-19 16:40:21 +0200
committerTobias Brunner <tobias@strongswan.org>2012-05-03 13:57:03 +0200
commitb64f33361225849c5a31ecefdf95cc1229c7b002 (patch)
treea4b6989d3f168372141dd028803b82833063290b
parent1c7a733e366ca62215c75b3de3b39e84dde24a64 (diff)
downloadstrongswan-b64f33361225849c5a31ecefdf95cc1229c7b002.tar.bz2
strongswan-b64f33361225849c5a31ecefdf95cc1229c7b002.tar.xz
Integrate nm plugin directly in charon-nm.
-rwxr-xr-xconfigure.in5
-rw-r--r--src/charon-nm/Makefile.am12
-rw-r--r--src/charon-nm/charon-nm.c13
-rw-r--r--src/charon-nm/nm/nm_backend.c (renamed from src/libcharon/plugins/nm/nm_plugin.c)57
-rw-r--r--src/charon-nm/nm/nm_backend.h (renamed from src/libcharon/plugins/nm/nm_plugin.h)33
-rw-r--r--src/charon-nm/nm/nm_creds.c (renamed from src/libcharon/plugins/nm/nm_creds.c)0
-rw-r--r--src/charon-nm/nm/nm_creds.h (renamed from src/libcharon/plugins/nm/nm_creds.h)0
-rw-r--r--src/charon-nm/nm/nm_handler.c (renamed from src/libcharon/plugins/nm/nm_handler.c)0
-rw-r--r--src/charon-nm/nm/nm_handler.h (renamed from src/libcharon/plugins/nm/nm_handler.h)0
-rw-r--r--src/charon-nm/nm/nm_service.c (renamed from src/libcharon/plugins/nm/nm_service.c)2
-rw-r--r--src/charon-nm/nm/nm_service.h (renamed from src/libcharon/plugins/nm/nm_service.h)0
-rwxr-xr-xsrc/libcharon/Makefile.am7
-rw-r--r--src/libcharon/plugins/nm/Makefile.am21
13 files changed, 66 insertions, 84 deletions
diff --git a/configure.in b/configure.in
index 786d47cbc..43f664056 100755
--- a/configure.in
+++ b/configure.in
@@ -37,7 +37,7 @@ ARG_WITH_SUBST([ipsecdir], [${libexecdir%/}/ipsec], [set installation
ARG_WITH_SUBST([ipseclibdir], [${libdir%/}/ipsec], [set installation path for ipsec libraries])
ARG_WITH_SUBST([plugindir], [${ipseclibdir%/}/plugins], [set the installation path of plugins])
ARG_WITH_SUBST([imcvdir], [${ipseclibdir%/}/imcvs], [set the installation path of IMC and IMV dynamic librariers])
-ARG_WITH_SUBST([nm-ca-dir], [/usr/share/ca-certificates], [directory the NM plugin uses to look up trusted root certificates])
+ARG_WITH_SUBST([nm-ca-dir], [/usr/share/ca-certificates], [directory the NM backend uses to look up trusted root certificates])
ARG_WITH_SUBST([linux-headers], [\${top_srcdir}/src/include], [set directory of linux header files to use])
ARG_WITH_SUBST([routing-table], [220], [set routing table to use for IPsec routes])
ARG_WITH_SUBST([routing-table-prio], [220], [set priority for IPsec routing table])
@@ -890,7 +890,6 @@ ADD_PLUGIN([tnccs-11], [c charon])
ADD_PLUGIN([tnccs-dynamic], [c charon])
ADD_PLUGIN([medsrv], [c charon])
ADD_PLUGIN([medcli], [c charon])
-ADD_PLUGIN([nm], [c charon])
ADD_PLUGIN([dhcp], [c charon])
ADD_PLUGIN([android], [c charon])
ADD_PLUGIN([ha], [c charon])
@@ -972,7 +971,6 @@ dnl ==============
AM_CONDITIONAL(USE_STROKE, test x$stroke = xtrue)
AM_CONDITIONAL(USE_MEDSRV, test x$medsrv = xtrue)
AM_CONDITIONAL(USE_MEDCLI, test x$medcli = xtrue)
-AM_CONDITIONAL(USE_NM, test x$nm = xtrue)
AM_CONDITIONAL(USE_UCI, test x$uci = xtrue)
AM_CONDITIONAL(USE_ANDROID, test x$android = xtrue)
AM_CONDITIONAL(USE_MAEMO, test x$maemo = xtrue)
@@ -1215,7 +1213,6 @@ AC_OUTPUT(
src/libcharon/plugins/sql/Makefile
src/libcharon/plugins/medsrv/Makefile
src/libcharon/plugins/medcli/Makefile
- src/libcharon/plugins/nm/Makefile
src/libcharon/plugins/addrblock/Makefile
src/libcharon/plugins/uci/Makefile
src/libcharon/plugins/ha/Makefile
diff --git a/src/charon-nm/Makefile.am b/src/charon-nm/Makefile.am
index 41c94b7ee..80fc13ba1 100644
--- a/src/charon-nm/Makefile.am
+++ b/src/charon-nm/Makefile.am
@@ -1,20 +1,26 @@
ipsec_PROGRAMS = charon-nm
charon_nm_SOURCES = \
-charon-nm.c
+charon-nm.c \
+nm/nm_backend.c nm/nm_backend.h \
+nm/nm_creds.c nm/nm_creds.h \
+nm/nm_handler.c nm/nm_handler.h \
+nm/nm_service.c nm/nm_service.h
INCLUDES = \
-I$(top_srcdir)/src/libstrongswan \
-I$(top_srcdir)/src/libhydra \
- -I$(top_srcdir)/src/libcharon
+ -I$(top_srcdir)/src/libcharon \
+ ${nm_CFLAGS}
AM_CFLAGS = \
-DIPSEC_DIR=\"${ipsecdir}\" \
-DIPSEC_PIDDIR=\"${piddir}\" \
+ -DNM_CA_DIR=\"${nm_ca_dir}\" \
-DPLUGINS=\""${nm_plugins}\""
charon_nm_LDADD = \
$(top_builddir)/src/libstrongswan/libstrongswan.la \
$(top_builddir)/src/libhydra/libhydra.la \
$(top_builddir)/src/libcharon/libcharon.la \
- -lm $(PTHREADLIB) $(DLLIB)
+ -lm $(PTHREADLIB) $(DLLIB) ${nm_LIBS}
diff --git a/src/charon-nm/charon-nm.c b/src/charon-nm/charon-nm.c
index 8b73f6a76..16b0ed856 100644
--- a/src/charon-nm/charon-nm.c
+++ b/src/charon-nm/charon-nm.c
@@ -31,6 +31,8 @@
#include <utils/backtrace.h>
#include <threading/thread.h>
+#include <nm/nm_backend.h>
+
/**
* Hook in library for debugging messages
*/
@@ -270,10 +272,17 @@ int main(int argc, char *argv[])
goto deinit;
}
+ /* load NM backend */
+ if (!nm_backend_init())
+ {
+ DBG1(DBG_DMN, "failed to initialize NetworkManager backend - aborting charon-nm");
+ goto deinit_nm;
+ }
+
if (!drop_capabilities())
{
DBG1(DBG_DMN, "capability dropping failed - aborting charon-nm");
- goto deinit;
+ goto deinit_nm;
}
/* add handler for SEGV and ILL,
@@ -299,6 +308,8 @@ int main(int argc, char *argv[])
status = 0;
+deinit_nm:
+ nm_backend_deinit();
deinit:
libcharon_deinit();
libhydra_deinit();
diff --git a/src/libcharon/plugins/nm/nm_plugin.c b/src/charon-nm/nm/nm_backend.c
index 84b7c810a..19382a028 100644
--- a/src/libcharon/plugins/nm/nm_plugin.c
+++ b/src/charon-nm/nm/nm_backend.c
@@ -1,4 +1,5 @@
/*
+ * Copyright (C) 2012 Tobias Brunner
* Copyright (C) 2008-2009 Martin Willi
* Hochschule fuer Technik Rapperswil
*
@@ -13,7 +14,6 @@
* for more details.
*/
-#include "nm_plugin.h"
#include "nm_service.h"
#include "nm_creds.h"
#include "nm_handler.h"
@@ -24,17 +24,12 @@
#define CAP_DAC_OVERRIDE 1
-typedef struct private_nm_plugin_t private_nm_plugin_t;
+typedef struct nm_backend_t nm_backend_t;
/**
- * private data of nm plugin
+ * Data for the NetworkManager backend.
*/
-struct private_nm_plugin_t {
-
- /**
- * implements plugin interface
- */
- nm_plugin_t public;
+struct nm_backend_t {
/**
* NetworkManager service (VPNPlugin)
@@ -58,24 +53,31 @@ struct private_nm_plugin_t {
};
/**
+ * Global (but private) instance of the NM backend.
+ */
+static nm_backend_t *nm_backend = NULL;
+
+/**
* NM plugin processing routine, creates and handles NMVPNPlugin
*/
-static job_requeue_t run(private_nm_plugin_t *this)
+static job_requeue_t run(nm_backend_t *this)
{
this->loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(this->loop);
return JOB_REQUEUE_NONE;
}
-METHOD(plugin_t, get_name, char*,
- private_nm_plugin_t *this)
+/*
+ * see header file
+ */
+void nm_backend_deinit()
{
- return "nm";
-}
+ nm_backend_t *this = nm_backend;
-METHOD(plugin_t, destroy, void,
- private_nm_plugin_t *this)
-{
+ if (!this)
+ {
+ return;
+ }
if (this->loop)
{
if (g_main_loop_is_running(this->loop))
@@ -93,14 +95,16 @@ METHOD(plugin_t, destroy, void,
this->creds->destroy(this->creds);
this->handler->destroy(this->handler);
free(this);
+
+ nm_backend = NULL;
}
/*
* see header file
*/
-plugin_t *nm_plugin_create()
+bool nm_backend_init()
{
- private_nm_plugin_t *this;
+ nm_backend_t *this;
g_type_init ();
if (!g_thread_supported())
@@ -109,25 +113,19 @@ plugin_t *nm_plugin_create()
}
INIT(this,
- .public = {
- .plugin = {
- .get_name = _get_name,
- .reload = (void*)return_false,
- .destroy = _destroy,
- },
- },
.creds = nm_creds_create(),
.handler = nm_handler_create(),
);
this->plugin = nm_strongswan_plugin_new(this->creds, this->handler);
+ nm_backend = this;
hydra->attributes->add_handler(hydra->attributes, &this->handler->handler);
lib->credmgr->add_set(lib->credmgr, &this->creds->set);
if (!this->plugin)
{
DBG1(DBG_CFG, "DBUS binding failed");
- destroy(this);
- return NULL;
+ nm_backend_deinit();
+ return FALSE;
}
/* bypass file permissions to read from users ssh-agent */
@@ -136,7 +134,6 @@ plugin_t *nm_plugin_create()
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)run,
this, NULL, NULL, JOB_PRIO_CRITICAL));
-
- return &this->public.plugin;
+ return TRUE;
}
diff --git a/src/libcharon/plugins/nm/nm_plugin.h b/src/charon-nm/nm/nm_backend.h
index b64b3edf6..bff9d4d6f 100644
--- a/src/libcharon/plugins/nm/nm_plugin.h
+++ b/src/charon-nm/nm/nm_backend.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Martin Willi
+ * Copyright (C) 2012 Tobias Brunner
* Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
@@ -14,29 +14,28 @@
*/
/**
+ * @defgroup charon-nm charon-nm
+ *
* @defgroup nm nm
- * @ingroup cplugins
+ * @ingroup charon-nm
*
- * @defgroup nm_plugin nm_plugin
+ * @defgroup nm_backend nm_backend
* @{ @ingroup nm
*/
-#ifndef NM_PLUGIN_H_
-#define NM_PLUGIN_H_
-
-#include <plugins/plugin.h>
-
-typedef struct nm_plugin_t nm_plugin_t;
+#ifndef NM_BACKEND_H_
+#define NM_BACKEND_H_
/**
- * NetworkManager integration plugin.
+ * Initialize the NetworkManager backend.
+ *
+ * @return TRUE, if initialization was successful
*/
-struct nm_plugin_t {
+bool nm_backend_init();
- /**
- * implements plugin interface
- */
- plugin_t plugin;
-};
+/**
+ * Deinitialize the NetworkManager backend.
+ */
+void nm_backend_deinit();
-#endif /** NM_PLUGIN_H_ @}*/
+#endif /** NM_BACKEND_H_ @}*/
diff --git a/src/libcharon/plugins/nm/nm_creds.c b/src/charon-nm/nm/nm_creds.c
index f8fae9504..f8fae9504 100644
--- a/src/libcharon/plugins/nm/nm_creds.c
+++ b/src/charon-nm/nm/nm_creds.c
diff --git a/src/libcharon/plugins/nm/nm_creds.h b/src/charon-nm/nm/nm_creds.h
index 91f645c7e..91f645c7e 100644
--- a/src/libcharon/plugins/nm/nm_creds.h
+++ b/src/charon-nm/nm/nm_creds.h
diff --git a/src/libcharon/plugins/nm/nm_handler.c b/src/charon-nm/nm/nm_handler.c
index 408129ebe..408129ebe 100644
--- a/src/libcharon/plugins/nm/nm_handler.c
+++ b/src/charon-nm/nm/nm_handler.c
diff --git a/src/libcharon/plugins/nm/nm_handler.h b/src/charon-nm/nm/nm_handler.h
index bb35ce767..bb35ce767 100644
--- a/src/libcharon/plugins/nm/nm_handler.h
+++ b/src/charon-nm/nm/nm_handler.h
diff --git a/src/libcharon/plugins/nm/nm_service.c b/src/charon-nm/nm/nm_service.c
index d51b699ae..64da53f79 100644
--- a/src/libcharon/plugins/nm/nm_service.c
+++ b/src/charon-nm/nm/nm_service.c
@@ -668,7 +668,7 @@ static void nm_strongswan_plugin_init(NMStrongswanPlugin *plugin)
priv = NM_STRONGSWAN_PLUGIN_GET_PRIVATE(plugin);
priv->plugin = NM_VPN_PLUGIN(plugin);
- memset(&priv->listener.log, 0, sizeof(listener_t));
+ memset(&priv->listener, 0, sizeof(listener_t));
priv->listener.child_updown = child_updown;
priv->listener.ike_rekey = ike_rekey;
}
diff --git a/src/libcharon/plugins/nm/nm_service.h b/src/charon-nm/nm/nm_service.h
index 828d1a452..828d1a452 100644
--- a/src/libcharon/plugins/nm/nm_service.h
+++ b/src/charon-nm/nm/nm_service.h
diff --git a/src/libcharon/Makefile.am b/src/libcharon/Makefile.am
index 8b16de187..e31d532ab 100755
--- a/src/libcharon/Makefile.am
+++ b/src/libcharon/Makefile.am
@@ -444,13 +444,6 @@ if MONOLITHIC
endif
endif
-if USE_NM
- SUBDIRS += plugins/nm
-if MONOLITHIC
- libcharon_la_LIBADD += plugins/nm/libstrongswan-nm.la
-endif
-endif
-
if USE_DHCP
SUBDIRS += plugins/dhcp
if MONOLITHIC
diff --git a/src/libcharon/plugins/nm/Makefile.am b/src/libcharon/plugins/nm/Makefile.am
deleted file mode 100644
index 8e12a72be..000000000
--- a/src/libcharon/plugins/nm/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-
-INCLUDES = -I$(top_srcdir)/src/libstrongswan -I$(top_srcdir)/src/libhydra \
- -I$(top_srcdir)/src/libcharon ${nm_CFLAGS}
-
-AM_CFLAGS = -rdynamic \
- -DNM_CA_DIR=\"${nm_ca_dir}\"
-
-if MONOLITHIC
-noinst_LTLIBRARIES = libstrongswan-nm.la
-else
-plugin_LTLIBRARIES = libstrongswan-nm.la
-endif
-
-libstrongswan_nm_la_SOURCES = \
- nm_plugin.h nm_plugin.c \
- nm_service.h nm_service.c \
- nm_creds.h nm_creds.c \
- nm_handler.h nm_handler.c
-
-libstrongswan_nm_la_LDFLAGS = -module -avoid-version
-libstrongswan_nm_la_LIBADD = ${nm_LIBS}