# HG changeset patch # User Sebastien Decugis # Date 1243921777 -32400 # Node ID 22f29007b931623395ffa4214d8f40c0e44e9abd # Parent 316bb3f38d048ce0cbf8256555aef8a545a0bd41 Detect when extensions are loaded several times (not allowed) diff -r 316bb3f38d04 -r 22f29007b931 extensions/app_test/app_test.c --- a/extensions/app_test/app_test.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/app_test/app_test.c Tue Jun 02 14:49:37 2009 +0900 @@ -120,4 +120,4 @@ atst_serv_fini(); } -EXTENSION_API_INIT( API_MODULE_ALL, atst_entry, "app_test"); +EXTENSION_API_INIT( API_MODULE_ALL, atst_entry, "app_test", 1); diff -r 316bb3f38d04 -r 22f29007b931 extensions/dict_eap/dict_eap.c --- a/extensions/dict_eap/dict_eap.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/dict_eap/dict_eap.c Tue Jun 02 14:49:37 2009 +0900 @@ -545,4 +545,4 @@ return 0; } -EXTENSION_API_INIT(API_MODULE_DICTIONARY | API_MODULE_LOG, entry, "dict_eap"); +EXTENSION_API_INIT(API_MODULE_DICTIONARY | API_MODULE_LOG, entry, "dict_eap", 1); diff -r 316bb3f38d04 -r 22f29007b931 extensions/dict_nasreq/dict_nasreq.c --- a/extensions/dict_nasreq/dict_nasreq.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/dict_nasreq/dict_nasreq.c Tue Jun 02 14:49:37 2009 +0900 @@ -3762,4 +3762,4 @@ return 0; } -EXTENSION_API_INIT(API_MODULE_DICTIONARY | API_MODULE_LOG, entry, "dict_nasreq"); +EXTENSION_API_INIT(API_MODULE_DICTIONARY | API_MODULE_LOG, entry, "dict_nasreq", 1); diff -r 316bb3f38d04 -r 22f29007b931 extensions/radius_gw/radius_gw.c --- a/extensions/radius_gw/radius_gw.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/radius_gw/radius_gw.c Tue Jun 02 14:49:37 2009 +0900 @@ -87,10 +87,15 @@ rgw_clients_fini(); } -/* EXTENSION_API_INIT( API_MODULE_ALL, rgw_entry, "radius_gw" ); */ +/* EXTENSION_API_INIT( API_MODULE_ALL, rgw_entry, "radius_gw", 1 ); */ +static int already_loaded = 0; int waaad_ext_init(waaad_api_t * api, char * conffile) { EXTENSION_API_INIT_INTERN( API_MODULE_ALL, "radius_gw", api ); + if (already_loaded ++) { + log_error("Extension 'radius_gw' already loaded, cannot be loaded twice.\n"); + return ENOTSUP; + } waaad_api = api; return rgw_entry(conffile); } diff -r 316bb3f38d04 -r 22f29007b931 extensions/rt_any/rt_any.c --- a/extensions/rt_any/rt_any.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/rt_any/rt_any.c Tue Jun 02 14:49:37 2009 +0900 @@ -73,4 +73,4 @@ rt_out_unregister ( hdl ); } -EXTENSION_API_INIT( API_MODULE_RT | API_MODULE_LOG, entry, "rt_any"); +EXTENSION_API_INIT( API_MODULE_RT | API_MODULE_LOG, entry, "rt_any", 1); diff -r 316bb3f38d04 -r 22f29007b931 extensions/rt_debug/rt_debug.c --- a/extensions/rt_debug/rt_debug.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/rt_debug/rt_debug.c Tue Jun 02 14:49:37 2009 +0900 @@ -170,4 +170,4 @@ rt_fwd_unregister ( req ); } -EXTENSION_API_INIT(API_MODULE_MSG | API_MODULE_RT | API_MODULE_PEER | API_MODULE_DICTIONARY | API_MODULE_LOG, entry, "rt_debug"); +EXTENSION_API_INIT(API_MODULE_MSG | API_MODULE_RT | API_MODULE_PEER | API_MODULE_DICTIONARY | API_MODULE_LOG, entry, "rt_debug", 1); diff -r 316bb3f38d04 -r 22f29007b931 extensions/rt_default/rt_default.c --- a/extensions/rt_default/rt_default.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/rt_default/rt_default.c Tue Jun 02 14:49:37 2009 +0900 @@ -263,4 +263,4 @@ rtd_fini(); } -EXTENSION_API_INIT( API_MODULE_ALL, entry, "rt_default"); +EXTENSION_API_INIT( API_MODULE_ALL, entry, "rt_default", 1); diff -r 316bb3f38d04 -r 22f29007b931 extensions/sample/sample.c --- a/extensions/sample/sample.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/sample/sample.c Tue Jun 02 14:49:37 2009 +0900 @@ -112,4 +112,4 @@ return 0; } -EXTENSION_API_INIT(API_MODULE_ALL, inside_extension, "sample"); +EXTENSION_API_INIT(API_MODULE_ALL, inside_extension, "sample", 1); diff -r 316bb3f38d04 -r 22f29007b931 extensions/sec_nosec/sec_nosec.c --- a/extensions/sec_nosec/sec_nosec.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/sec_nosec/sec_nosec.c Tue Jun 02 14:49:37 2009 +0900 @@ -101,7 +101,7 @@ return 0; } -EXTENSION_API_INIT(API_MODULE_LOG | API_MODULE_CONF | API_MODULE_SECURITY, sec_nosec_main, "sec_nosec"); +EXTENSION_API_INIT(API_MODULE_LOG | API_MODULE_CONF | API_MODULE_SECURITY, sec_nosec_main, "sec_nosec", 1); /* Code that is called after the extension terminates */ void waaad_ext_fini(void) diff -r 316bb3f38d04 -r 22f29007b931 extensions/sec_tls_gnutls/sec_tls_gnutls.c --- a/extensions/sec_tls_gnutls/sec_tls_gnutls.c Tue Jun 02 14:31:42 2009 +0900 +++ b/extensions/sec_tls_gnutls/sec_tls_gnutls.c Tue Jun 02 14:49:37 2009 +0900 @@ -83,7 +83,7 @@ return 0; } -EXTENSION_API_INIT(API_MODULE_LOG | API_MODULE_CONF | API_MODULE_SECURITY, tls_main, "sec_tls_gnutls"); +EXTENSION_API_INIT(API_MODULE_LOG | API_MODULE_CONF | API_MODULE_SECURITY, tls_main, "sec_tls_gnutls", 1); /* Code that is called after the extension terminates */ void waaad_ext_fini(void) diff -r 316bb3f38d04 -r 22f29007b931 include/waaad/waaad.h --- a/include/waaad/waaad.h Tue Jun 02 14:31:42 2009 +0900 +++ b/include/waaad/waaad.h Tue Jun 02 14:49:37 2009 +0900 @@ -280,11 +280,16 @@ } -#define EXTENSION_API_INIT(flags, function, name) \ - \ -int waaad_ext_init(waaad_api_t * api, char * conffile) { \ - EXTENSION_API_INIT_INTERN( flags, name, api ); \ - return (function)(conffile); \ +#define EXTENSION_API_INIT(flags, function, name, no_double) \ +static int extension_loaded = 0; \ +int waaad_ext_init(waaad_api_t * api, char * conffile) { \ + EXTENSION_API_INIT_INTERN( flags, name, api ); \ + if (extension_loaded && no_double) { \ + log_error("Extension %s cannot be loaded twice!\n", name); \ + return ENOTSUP; \ + } \ + extension_loaded++; \ + return (function)(conffile); \ }