diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-04-19 16:40:21 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-05-03 13:57:03 +0200 |
commit | b64f33361225849c5a31ecefdf95cc1229c7b002 (patch) | |
tree | a4b6989d3f168372141dd028803b82833063290b | |
parent | 1c7a733e366ca62215c75b3de3b39e84dde24a64 (diff) | |
download | strongswan-b64f33361225849c5a31ecefdf95cc1229c7b002.tar.bz2 strongswan-b64f33361225849c5a31ecefdf95cc1229c7b002.tar.xz |
Integrate nm plugin directly in charon-nm.
-rwxr-xr-x | configure.in | 5 | ||||
-rw-r--r-- | src/charon-nm/Makefile.am | 12 | ||||
-rw-r--r-- | src/charon-nm/charon-nm.c | 13 | ||||
-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-x | src/libcharon/Makefile.am | 7 | ||||
-rw-r--r-- | src/libcharon/plugins/nm/Makefile.am | 21 |
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} |