From 5c8dc908d0709d534d3e76d69d49209ab719c6ac Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Thu, 3 Mar 2016 18:12:06 +0100 Subject: library: Add option to register additional namespaces before calling library_init() Because settings are already accessed in library_init(), calling add_fallback() externally after calling library_init() is not ideal. This way namespaces already serve as fallback while library_init() is executed and they are also in the correct order so that libstrongswan is always the last root section. --- src/libstrongswan/library.c | 33 ++++++++++++++++++++++++++++++++- src/libstrongswan/library.h | 12 +++++++++++- 2 files changed, 43 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/libstrongswan/library.c b/src/libstrongswan/library.c index dc73ccc68..e130b93ee 100644 --- a/src/libstrongswan/library.c +++ b/src/libstrongswan/library.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Tobias Brunner + * Copyright (C) 2009-2016 Tobias Brunner * Copyright (C) 2008 Martin Willi * Hochschule fuer Technik Rapperswil * @@ -61,6 +61,31 @@ struct private_library_t { refcount_t ref; }; +#define MAX_NAMESPACES 5 + +/** + * Additional namespaces registered using __atrribute__((constructor)) + */ +static char *namespaces[MAX_NAMESPACES]; +static int ns_count; + +/** + * Described in header + */ +void library_add_namespace(char *ns) +{ + if (ns_count < MAX_NAMESPACES - 1) + { + namespaces[ns_count] = ns; + ns_count++; + } + else + { + fprintf(stderr, "failed to register additional namespace alias, please " + "increase MAX_NAMESPACES"); + } +} + /** * library instance */ @@ -248,6 +273,7 @@ bool library_init(char *settings, const char *namespace) { private_library_t *this; printf_hook_t *pfh; + int i; if (lib) { /* already initialized, increase refcount */ @@ -311,6 +337,11 @@ bool library_init(char *settings, const char *namespace) (hashtable_equals_t)equals, 4); this->public.settings = settings_create(this->public.conf); + /* add registered aliases */ + for (i = 0; i < ns_count; ++i) + { + lib->settings->add_fallback(lib->settings, lib->ns, namespaces[i]); + } /* all namespace settings may fall back to libstrongswan */ lib->settings->add_fallback(lib->settings, lib->ns, "libstrongswan"); diff --git a/src/libstrongswan/library.h b/src/libstrongswan/library.h index 3a6dd1ba4..08316fd13 100644 --- a/src/libstrongswan/library.h +++ b/src/libstrongswan/library.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2014 Tobias Brunner + * Copyright (C) 2010-2016 Tobias Brunner * Copyright (C) 2008 Martin Willi * Hochschule fuer Technik Rapperswil * @@ -276,4 +276,14 @@ void library_deinit(); */ extern library_t *lib; +/** + * Add additional names used as alias for the namespace registered with + * library_init(). + * + * To be called from __attribute__((constructor)) functions. + * + * @param ns additional namespace + */ +void library_add_namespace(char *ns); + #endif /** LIBRARY_H_ @}*/ -- cgit v1.2.3 From bc4e689db1116290ebee471baa25ae7802c676f7 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 8 Feb 2016 17:19:20 +0100 Subject: charon-systemd: Inherit all settings from the charon section Our default config files are very charon specific. So to avoid confusion when only charon-systemd is installed we just default to all settings defined for charon. Since charon-systemd probably won't be used together with charon this should not cause conflicts (settings may still be overridden via the charon-systemd section). --- src/charon-systemd/charon-systemd.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src') diff --git a/src/charon-systemd/charon-systemd.c b/src/charon-systemd/charon-systemd.c index a83db5ac4..5c7bbd779 100644 --- a/src/charon-systemd/charon-systemd.c +++ b/src/charon-systemd/charon-systemd.c @@ -324,6 +324,15 @@ static plugin_feature_t features[] = { PLUGIN_PROVIDE(CUSTOM, "systemd-journal"), }; +/** + * Add namespace alias + */ +static void __attribute__ ((constructor))register_namespace() +{ + /* inherit settings from charon */ + library_add_namespace("charon"); +} + /** * Main function, starts the daemon. */ -- cgit v1.2.3 From 2e190dca041a02877b9d639b92c00344c01c0743 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 8 Feb 2016 17:22:23 +0100 Subject: charon-svc: Inherit all settings from the charon section Same as with charon-systemd. --- src/charon-svc/charon-svc.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src') diff --git a/src/charon-svc/charon-svc.c b/src/charon-svc/charon-svc.c index 522cd127e..823b366c0 100644 --- a/src/charon-svc/charon-svc.c +++ b/src/charon-svc/charon-svc.c @@ -188,6 +188,15 @@ static int service_wait() return 0; } +/** + * Add namespace alias + */ +static void __attribute__ ((constructor))register_namespace() +{ + /* inherit settings from charon */ + library_add_namespace("charon"); +} + /** * Initialize and run charon using a wait function */ -- cgit v1.2.3