changeset 400:22f29007b931

Detect when extensions are loaded several times (not allowed)
author Sebastien Decugis <sdecugis@nict.go.jp>
date Tue, 02 Jun 2009 14:49:37 +0900
parents 316bb3f38d04
children 860f41038ea2
files extensions/app_test/app_test.c extensions/dict_eap/dict_eap.c extensions/dict_nasreq/dict_nasreq.c extensions/radius_gw/radius_gw.c extensions/rt_any/rt_any.c extensions/rt_debug/rt_debug.c extensions/rt_default/rt_default.c extensions/sample/sample.c extensions/sec_nosec/sec_nosec.c extensions/sec_tls_gnutls/sec_tls_gnutls.c include/waaad/waaad.h
diffstat 11 files changed, 25 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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);
--- 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);
--- 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);
 }
--- 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);
--- 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);
--- 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);
--- 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);
--- 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)
--- 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)
--- 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);						\
 }														
 		
 
"Welcome to our mercurial repository"