[asterisk-commits] kpfleming: branch 1.4 r89325 - in /branches/1.4: build_tools/ include/asteris...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Nov 16 10:47:46 CST 2007


Author: kpfleming
Date: Fri Nov 16 10:47:46 2007
New Revision: 89325

URL: http://svn.digium.com/view/asterisk?view=rev&rev=89325
Log:
To help combat problems where people build external modules (asterisk-addons or others) and then change the build options of the Asterisk build in a way that makes the incompatible without warning, this commit introduces an MD5 signature of the important build-time options and includes that signature into modules when they are built. When the loader loads one of these modules and notices the problem, it will emit a warning to console and refuse to initialize the module, as doing so could cause the system to be unstable or even crash.

If you upgrade to this version of Asterisk, you must rebuild *all* of your modules that came from other sources before trying to run this version. If you are using Digium's G.729 binary codec module, you will need v33 or newer.

Modified:
    branches/1.4/build_tools/make_buildopts_h
    branches/1.4/include/asterisk/module.h
    branches/1.4/main/loader.c

Modified: branches/1.4/build_tools/make_buildopts_h
URL: http://svn.digium.com/view/asterisk/branches/1.4/build_tools/make_buildopts_h?view=diff&rev=89325&r1=89324&r2=89325
==============================================================================
--- branches/1.4/build_tools/make_buildopts_h (original)
+++ branches/1.4/build_tools/make_buildopts_h Fri Nov 16 10:47:46 2007
@@ -14,4 +14,7 @@
 if ${GREP} AST_DEVMODE makeopts | ${GREP} -q yes
 then
 	echo "#define AST_DEVMODE 1"
+	TMP="${TMP} AST_DEVMODE"
 fi
+BUILDSUM=`echo ${TMP} | md5sum`
+echo "#define AST_BUILDOPT_SUM {0x${BUILDSUM:0:8}, 0x${BUILDSUM:8:8}, 0x${BUILDSUM:16:8}, 0x${BUILDSUM:24:8}}"

Modified: branches/1.4/include/asterisk/module.h
URL: http://svn.digium.com/view/asterisk/branches/1.4/include/asterisk/module.h?view=diff&rev=89325&r1=89324&r2=89325
==============================================================================
--- branches/1.4/include/asterisk/module.h (original)
+++ branches/1.4/include/asterisk/module.h Fri Nov 16 10:47:46 2007
@@ -203,6 +203,7 @@
 
 	const char *key;
 	unsigned int flags;
+	unsigned int buildopt_sum[4];		/* The value of AST_BUILDOPT_SUM when this module was compiled */
 };
 
 void ast_module_register(const struct ast_module_info *);
@@ -229,7 +230,8 @@
 		AST_MODULE,				\
 		desc,					\
 		keystr,					\
-		flags_to_set				\
+		flags_to_set,				\
+		AST_BUILDOPT_SUM,			\
 	};						\
 	static void  __attribute__ ((constructor)) __reg_module(void) \
 	{ \
@@ -259,6 +261,7 @@
 		.flags = flags_to_set,				\
 		.description = desc,				\
 		.key = keystr,					\
+		.buildopt_sum = AST_BUILDOPT_SUM,		\
 		fields						\
 	};							\
 	static void  __attribute__ ((constructor)) __reg_module(void) \

Modified: branches/1.4/main/loader.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/loader.c?view=diff&rev=89325&r1=89324&r2=89325
==============================================================================
--- branches/1.4/main/loader.c (original)
+++ branches/1.4/main/loader.c Fri Nov 16 10:47:46 2007
@@ -76,6 +76,8 @@
 { 0x87, 0x76, 0x79, 0x35, 0x23, 0xea, 0x3a, 0xd3,
   0x25, 0x2a, 0xbb, 0x35, 0x87, 0xe4, 0x22, 0x24 };
 
+static unsigned int buildopt_sum[4] = AST_BUILDOPT_SUM;
+
 static unsigned int embedding = 1; /* we always start out by registering embedded modules,
 				      since they are here before we dlopen() any
 				   */
@@ -598,6 +600,8 @@
 
 static unsigned int inspect_module(const struct ast_module *mod)
 {
+	unsigned int buildopt_empty[4] = { 0, };
+
 	if (!mod->info->description) {
 		ast_log(LOG_WARNING, "Module '%s' does not provide a description.\n", mod->resource);
 		return 1;
@@ -610,6 +614,13 @@
 
 	if (verify_key((unsigned char *) mod->info->key)) {
 		ast_log(LOG_WARNING, "Module '%s' did not provide a valid license key.\n", mod->resource);
+		return 1;
+	}
+
+	if (memcmp(buildopt_empty, mod->info->buildopt_sum, sizeof(buildopt_empty)) &&
+	    memcmp(buildopt_sum, mod->info->buildopt_sum, sizeof(buildopt_sum))) {
+		ast_log(LOG_WARNING, "Module '%s' was not compiled with the same compile-time options as this version of Asterisk.\n", mod->resource);
+		ast_log(LOG_WARNING, "Module '%s' will not be initialized as it may cause instability.\n", mod->resource);
 		return 1;
 	}
 




More information about the asterisk-commits mailing list