From e274bba23dd22c043a70999117e9befb9e6f0fb6 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Mon, 2 Jun 2014 17:38:15 +0100 Subject: [PATCH] Addition of checks to confirm modules report the expected API implementation --- server/core/load_utils.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/server/core/load_utils.c b/server/core/load_utils.c index 8bf157e9c..93406ae16 100644 --- a/server/core/load_utils.c +++ b/server/core/load_utils.c @@ -147,7 +147,43 @@ MODULE_INFO *mod_info = NULL; if ((sym = dlsym(dlhandle, "info")) != NULL) { + int fatal = 0; mod_info = sym; + if (strcmp(type, MODULE_PROTOCOL) == 0 + && mod_info->modapi != MODULE_API_PROTOCOL) + { + LOGIF(LE, (skygw_log_write_flush( + LOGFILE_ERROR, + "Module '%s' does not implement " + "the protocol API.\n", + module))); + fatal = 1; + } + if (strcmp(type, MODULE_ROUTER) == 0 + && mod_info->modapi != MODULE_API_ROUTER) + { + LOGIF(LE, (skygw_log_write_flush( + LOGFILE_ERROR, + "Module '%s' does not implement " + "the router API.\n", + module))); + fatal = 1; + } + if (strcmp(type, MODULE_MONITOR) == 0 + && mod_info->modapi != MODULE_API_MONITOR) + { + LOGIF(LE, (skygw_log_write_flush( + LOGFILE_ERROR, + "Module '%s' does not implement " + "the monitor API.\n", + module))); + fatal = 1; + } + if (fatal) + { + dlclose(dlhandle); + return NULL; + } } if ((sym = dlsym(dlhandle, "GetModuleObject")) == NULL)