]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
If module can't be loaded due to missing dependency, suggest a setting how to do it.
authorTimo Sirainen <tss@iki.fi>
Fri, 30 Jul 2010 15:17:02 +0000 (16:17 +0100)
committerTimo Sirainen <tss@iki.fi>
Fri, 30 Jul 2010 15:17:02 +0000 (16:17 +0100)
src/lib-storage/mail-storage-service.c
src/lib/module-dir.c
src/lib/module-dir.h

index d559c54ec9363e47afa46422c6db44828ed4e94a..1f9777479e57115b3648994fb4d6138908ec2320 100644 (file)
@@ -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);
 
index f004a8eb7c75cc50952272afe310ac3e469e391e..e4c283631c4e8391ab8b726949237a47278610d3 100644 (file)
@@ -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) {
index 1569417828ad15c16b1616f8441d4a81221c6e31..c4191e1e0dbfcdfe642f14da26b13fcbc7306db1 100644 (file)
@@ -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 <plugin_name>_init() function */
        unsigned int require_init_funcs:1;