From: Timo Sirainen Date: Wed, 9 Apr 2025 12:10:13 +0000 (+0300) Subject: config: Add CONFIG_MODULES environment to override the default module directory X-Git-Tag: 2.4.2~809 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fe0f81e1b5696a3eb774a89b4a06460b8e1442be;p=thirdparty%2Fdovecot%2Fcore.git config: Add CONFIG_MODULES environment to override the default module directory --- diff --git a/src/config/config-parser.c b/src/config/config-parser.c index 288d5923ac..91a8e93d51 100644 --- a/src/config/config-parser.c +++ b/src/config/config-parser.c @@ -3429,6 +3429,23 @@ static bool config_have_info_dependency(const struct setting_parser_info *info) return stat(path, &st) == 0; } +static void +config_parse_load_module_paths(const char *const *paths, + const struct module_dir_load_settings *mod_set) +{ + for (unsigned int i = 0; paths[i] != NULL; i++) { + const char *dir; + const char *fname = strrchr(paths[i], '/'); + if (fname == NULL) + i_fatal("Missing directory for %s", paths[i]); + dir = t_strdup_until(paths[i], fname++); + + const char *const fnames[2] = { fname, NULL }; + modules = module_dir_load_missing(modules, dir, fnames, + mod_set); + } +} + void config_parse_load_modules(bool dump_config_import) { struct module_dir_load_settings mod_set; @@ -3441,7 +3458,16 @@ void config_parse_load_modules(bool dump_config_import) i_zero(&mod_set); mod_set.abi_version = DOVECOT_ABI_VERSION; - modules = module_dir_load(CONFIG_MODULE_DIR, NULL, &mod_set); + const char *module_paths = getenv("CONFIG_MODULES"); + if (module_paths == NULL) + modules = module_dir_load(CONFIG_MODULE_DIR, NULL, &mod_set); + else { + /* Explicit list of config modules to load explicitly. + Used by Pigeonhole testsuite. */ + config_parse_load_module_paths(t_strsplit(module_paths, ":"), + &mod_set); + + } module_dir_init(modules); config_import = str_new(default_pool, 10240);