From: Timo Sirainen Date: Fri, 30 Jul 2010 15:17:02 +0000 (+0100) Subject: If module can't be loaded due to missing dependency, suggest a setting how to do it. X-Git-Tag: 2.0.rc4~29 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=98c3aa2587ad3e81e1548a3a4f79b2a24566cec3;p=thirdparty%2Fdovecot%2Fcore.git If module can't be loaded due to missing dependency, suggest a setting how to do it. --- diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index d559c54ec9..1f9777479e 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -711,6 +711,7 @@ mail_storage_service_load_modules(struct mail_storage_service_ctx *ctx, memset(&mod_set, 0, sizeof(mod_set)); mod_set.version = master_service_get_version_string(ctx->service); mod_set.binary_name = master_service_get_name(ctx->service); + mod_set.setting_name = "mail_plugins"; mod_set.require_init_funcs = TRUE; mod_set.debug = mail_user_set_get_mail_debug(user_info, user_set); diff --git a/src/lib/module-dir.c b/src/lib/module-dir.c index f004a8eb7c..e4c283631c 100644 --- a/src/lib/module-dir.c +++ b/src/lib/module-dir.c @@ -2,6 +2,7 @@ #include "lib.h" #include "array.h" +#include "str.h" #include "module-dir.h" #ifdef HAVE_MODULES @@ -88,11 +89,13 @@ module_check_wrong_binary_dependency(const struct module_dir_load_settings *set, } static bool -module_check_missing_plugin_dependencies(struct module *module, +module_check_missing_plugin_dependencies(const struct module_dir_load_settings *set, + struct module *module, struct module *all_modules) { const char **deps; struct module *m; + string_t *errmsg; unsigned int len; deps = dlsym(module->handle, @@ -109,9 +112,17 @@ module_check_missing_plugin_dependencies(struct module *module, break; } if (m == NULL) { - i_error("Can't load plugin %s: " - "Plugin %s must be loaded also", - module->name, *deps); + errmsg = t_str_new(128); + str_printfa(errmsg, "Can't load plugin %s: " + "Plugin %s must be loaded also", + module->name, *deps); + if (set->setting_name != NULL) { + str_printfa(errmsg, + " (you must set: %s=$%s %s)", + set->setting_name, + set->setting_name, *deps); + } + i_error("%s", str_c(errmsg)); return FALSE; } } @@ -207,7 +218,8 @@ module_load(const char *path, const char *name, module->init == NULL ? "init" : "deinit", path); failed = TRUE; } else if (!module_check_wrong_binary_dependency(set, module) || - !module_check_missing_plugin_dependencies(module, all_modules)) + !module_check_missing_plugin_dependencies(set, module, + all_modules)) failed = TRUE; if (failed) { diff --git a/src/lib/module-dir.h b/src/lib/module-dir.h index 1569417828..c4191e1e0d 100644 --- a/src/lib/module-dir.h +++ b/src/lib/module-dir.h @@ -8,6 +8,8 @@ struct module_dir_load_settings { /* Binary name used for checking if plugin is tried to be loaded for wrong binary. */ const char *binary_name; + /* Setting name used in plugin dependency error message */ + const char *setting_name; /* Require all plugins to have _init() function */ unsigned int require_init_funcs:1;