commit f3789df0b8a4094eb42264026f94b57db3bd15cd Author: Jacob Welsh AuthorDate: Wed Nov 2 18:14:14 2022 +0000 Commit: Jacob Welsh CommitDate: Wed Nov 2 20:10:49 2022 +0000 Type: dead code removal auth, dict, doveadm, lib-fs, lib-storage, login-common: remove now-unused module load points Covers 1, 2 (the blanket auth plugin loader part), 4, 6, 9 and 11 from http://fixpoint.welshcomputing.com/2022/classifying-the-dovecot-module-menagerie-by-load-point/ diff --git a/src/auth/main.c b/src/auth/main.c index 5f09fca5ca..4bdb84d6b2 100644 --- a/src/auth/main.c +++ b/src/auth/main.c @@ -155,19 +155,8 @@ static void listeners_init(void) } } -static bool auth_module_filter(const char *name, void *context ATTR_UNUSED) -{ - if (str_begins(name, "authdb_") || - str_begins(name, "mech_")) { - /* this is lazily loaded */ - return FALSE; - } - return TRUE; -} - static void main_preinit(void) { - struct module_dir_load_settings mod_set; const char *const *services; /* Load built-in SQL drivers (if any) */ @@ -183,15 +172,6 @@ static void main_preinit(void) services = read_global_settings(); - i_zero(&mod_set); - mod_set.abi_version = DOVECOT_ABI_VERSION; - mod_set.require_init_funcs = TRUE; - mod_set.debug = global_auth_settings->debug; - mod_set.filter_callback = auth_module_filter; - - modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set); - module_dir_init(modules); - if (!worker) auth_penalty = auth_penalty_init(AUTH_PENALTY_ANVIL_PATH); auth_request_stats_init(); diff --git a/src/dict/Makefile.am b/src/dict/Makefile.am index e408046361..1de912b67c 100644 --- a/src/dict/Makefile.am +++ b/src/dict/Makefile.am @@ -8,7 +8,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib-settings \ -I$(top_srcdir)/src/lib-dict \ -I$(top_srcdir)/src/lib-sql \ - -DDICT_MODULE_DIR=\""$(moduledir)/dict"\" \ -DPKG_RUNDIR=\""$(rundir)"\" \ $(BINARY_CFLAGS) diff --git a/src/dict/main.c b/src/dict/main.c index 14b1cea64f..03914c095b 100644 --- a/src/dict/main.c +++ b/src/dict/main.c @@ -8,7 +8,6 @@ #include "stats-dist.h" #include "process-title.h" #include "env-util.h" -#include "module-dir.h" #include "master-service.h" #include "master-service-settings.h" #include "sql-api.h" @@ -22,7 +21,6 @@ #include -static struct module *modules; static struct timeout *to_proctitle; static bool proctitle_updated; static struct ioloop *main_ioloop; @@ -100,7 +98,6 @@ static void main_preinit(void) static void main_init(void) { - struct module_dir_load_settings mod_set; void **sets; sets = master_service_settings_get_others(master_service); @@ -111,15 +108,6 @@ static void main_init(void) env_put("DB_CONFIG", dict_settings->dict_db_config); } - i_zero(&mod_set); - mod_set.abi_version = DOVECOT_ABI_VERSION; - mod_set.require_init_funcs = TRUE; - - modules = module_dir_load(DICT_MODULE_DIR, NULL, &mod_set); - module_dir_init(modules); - - /* Register only after loading modules. They may contain SQL drivers, - which we'll need to register. */ dict_drivers_register_all(); dict_commands_init(); dict_connections_init(); @@ -139,8 +127,6 @@ static void main_deinit(void) dict_drivers_unregister_all(); dict_commands_deinit(); - module_dir_unload(&modules); - sql_drivers_deinit(); timeout_remove(&to_proctitle); } diff --git a/src/doveadm/Makefile.am b/src/doveadm/Makefile.am index 04935ddc2c..03527633a2 100644 --- a/src/doveadm/Makefile.am +++ b/src/doveadm/Makefile.am @@ -26,7 +26,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/auth \ -I$(top_srcdir)/src/stats \ -DMODULEDIR=\""$(moduledir)"\" \ - -DAUTH_MODULE_DIR=\""$(moduledir)/auth"\" \ -DPKG_RUNDIR=\""$(rundir)"\" \ -DPKG_STATEDIR=\""$(statedir)"\" \ -DPKG_LIBEXECDIR=\""$(pkglibexecdir)"\" \ diff --git a/src/doveadm/doveadm-pw.c b/src/doveadm/doveadm-pw.c index ed85006662..9caf820d43 100644 --- a/src/doveadm/doveadm-pw.c +++ b/src/doveadm/doveadm-pw.c @@ -6,7 +6,6 @@ #include "randgen.h" #include "doveadm.h" #include "askpass.h" -#include "module-dir.h" #include #include @@ -15,8 +14,6 @@ #define DEFAULT_SCHEME "CRYPT" -static struct module *modules = NULL; - static void cmd_pw(struct doveadm_cmd_context *cctx) { const char *hash = NULL; @@ -25,21 +22,11 @@ static void cmd_pw(struct doveadm_cmd_context *cctx) const char *test_hash = NULL; bool list_schemes = FALSE, reverse_verify = FALSE; int64_t rounds_int64; - struct module_dir_load_settings mod_set; struct password_generate_params gen_params; i_zero(&gen_params); password_schemes_init(); - i_zero(&mod_set); - mod_set.abi_version = DOVECOT_ABI_VERSION; - mod_set.require_init_funcs = TRUE; - mod_set.ignore_dlopen_errors = TRUE; - mod_set.debug = doveadm_debug; - - modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, NULL, &mod_set); - module_dir_init(modules); - (void)doveadm_cmd_param_bool(cctx, "list", &list_schemes); (void)doveadm_cmd_param_str(cctx, "plaintext", &plaintext); if (doveadm_cmd_param_int64(cctx, "rounds", &rounds_int64)) { @@ -63,7 +50,6 @@ static void cmd_pw(struct doveadm_cmd_context *cctx) for (i = 0; i < count; i++) printf("%s ", schemes[i]->name); printf("\n"); - module_dir_unload(&modules); password_schemes_deinit(); return; } @@ -115,7 +101,6 @@ static void cmd_pw(struct doveadm_cmd_context *cctx) printf("{%s}%s\n", scheme, hash); } - module_dir_unload(&modules); password_schemes_deinit(); } diff --git a/src/lib-fs/Makefile.am b/src/lib-fs/Makefile.am index e5ae056c33..0b71196edb 100644 --- a/src/lib-fs/Makefile.am +++ b/src/lib-fs/Makefile.am @@ -5,7 +5,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib-test \ -I$(top_srcdir)/src/lib-dict \ -I$(top_srcdir)/src/lib-ssl-iostream \ - -DMODULE_DIR=\""$(moduledir)"\" libfs_la_SOURCES = \ fs-api.c \ diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c index 1b47ded6c5..17fbbc98d7 100644 --- a/src/lib-fs/fs-api.c +++ b/src/lib-fs/fs-api.c @@ -2,7 +2,6 @@ #include "lib.h" #include "array.h" -#include "module-dir.h" #include "llist.h" #include "str.h" #include "hash-method.h" @@ -20,7 +19,6 @@ static struct event_category event_category_fs = { struct fs_api_module_register fs_api_module_register = { 0 }; -static struct module *fs_modules = NULL; static ARRAY(const struct fs *) fs_classes; static void fs_classes_init(void); @@ -108,42 +106,6 @@ static const struct fs *fs_class_find(const char *driver) return NULL; } -static void fs_class_deinit_modules(void) -{ - module_dir_unload(&fs_modules); -} - -static const char *fs_driver_module_name(const char *driver) -{ - return t_str_replace(driver, '-', '_'); -} - -static void fs_class_try_load_plugin(const char *driver) -{ - const char *module_name = - t_strdup_printf("fs_%s", fs_driver_module_name(driver)); - struct module *module; - struct module_dir_load_settings mod_set; - const struct fs *fs_class; - - i_zero(&mod_set); - mod_set.abi_version = DOVECOT_ABI_VERSION; - mod_set.ignore_missing = TRUE; - - fs_modules = module_dir_load_missing(fs_modules, MODULE_DIR, - module_name, &mod_set); - module_dir_init(fs_modules); - - module = module_dir_find(fs_modules, module_name); - fs_class = module == NULL ? NULL : - module_get_symbol(module, t_strdup_printf( - "fs_class_%s", fs_driver_module_name(driver))); - if (fs_class != NULL) - fs_class_register(fs_class); - - lib_atexit(fs_class_deinit_modules); -} - int fs_init(const char *driver, const char *args, const struct fs_settings *set, struct fs **fs_r, const char **error_r) @@ -153,12 +115,6 @@ int fs_init(const char *driver, const char *args, fs_class = fs_class_find(driver); if (fs_class == NULL) { - T_BEGIN { - fs_class_try_load_plugin(driver); - } T_END; - fs_class = fs_class_find(driver); - } - if (fs_class == NULL) { *error_r = t_strdup_printf("Unknown fs driver: %s", driver); return -1; } diff --git a/src/lib-storage/mail-user.c b/src/lib-storage/mail-user.c index 9cf60424a5..13f3ebc37a 100644 --- a/src/lib-storage/mail-user.c +++ b/src/lib-storage/mail-user.c @@ -648,38 +648,6 @@ const char *mail_user_get_anvil_userip_ident(struct mail_user *user) str_tabescape(user->username), NULL); } -static void -mail_user_try_load_class_plugin(struct mail_user *user, const char *name) -{ - struct module_dir_load_settings mod_set; - struct module *module; - size_t name_len = strlen(name); - - i_zero(&mod_set); - mod_set.abi_version = DOVECOT_ABI_VERSION; - mod_set.binary_name = master_service_get_name(master_service); - mod_set.setting_name = ""; - mod_set.require_init_funcs = TRUE; - mod_set.debug = user->mail_debug; - - mail_storage_service_modules = - module_dir_load_missing(mail_storage_service_modules, - user->set->mail_plugin_dir, - name, &mod_set); - /* initialize the module (and only this module!) immediately so that - the class gets registered */ - for (module = mail_storage_service_modules; module != NULL; module = module->next) { - if (strncmp(module->name, name, name_len) == 0 && - strcmp(module->name + name_len, "_plugin") == 0) { - if (!module->initialized) { - module->initialized = TRUE; - module->init(module); - } - break; - } - } -} - struct mail_storage * mail_user_get_storage_class(struct mail_user *user, const char *name) { @@ -688,17 +656,10 @@ mail_user_get_storage_class(struct mail_user *user, const char *name) storage = mail_storage_find_class(name); if (storage == NULL || storage->v.alloc != NULL) return storage; - - /* it's implemented by a plugin. load it and check again. */ - mail_user_try_load_class_plugin(user, name); - - storage = mail_storage_find_class(name); - if (storage != NULL && storage->v.alloc == NULL) { - e_error(user->event, "Storage driver '%s' exists as a stub, " + /* Shouldn't be possible anymore as there are no storage driver plugins */ + e_error(user->event, "Storage driver '%s' exists as a stub, " "but its plugin couldn't be loaded", name); - return NULL; - } - return storage; + return NULL; } struct mail_user *mail_user_dup(struct mail_user *user) diff --git a/src/login-common/main.c b/src/login-common/main.c index d5622d9cfa..77309426af 100644 --- a/src/login-common/main.c +++ b/src/login-common/main.c @@ -5,7 +5,6 @@ #include "array.h" #include "str.h" #include "randgen.h" -#include "module-dir.h" #include "process-title.h" #include "restrict-access.h" #include "restrict-process-size.h" @@ -59,7 +58,6 @@ static ARRAY(struct ip_addr) login_source_ips_array; const struct ip_addr *login_source_ips; unsigned int login_source_ips_idx, login_source_ips_count; -static struct module *modules; static struct timeout *auth_client_to; static const char *post_login_socket; static bool shutting_down = FALSE; @@ -356,26 +354,6 @@ parse_login_source_ips(const char *ips_str) &login_source_ips_count); } -static void login_load_modules(void) -{ - struct module_dir_load_settings mod_set; - - if (global_login_settings->login_plugins[0] == '\0') - return; - - i_zero(&mod_set); - mod_set.abi_version = DOVECOT_ABI_VERSION; - mod_set.binary_name = login_binary->process_name; - mod_set.setting_name = "login_plugins"; - mod_set.require_init_funcs = TRUE; - mod_set.debug = login_debug; - - modules = module_dir_load(global_login_settings->login_plugin_dir, - global_login_settings->login_plugins, - &mod_set); - module_dir_init(modules); -} - static void login_ssl_init(void) { struct ssl_iostream_settings ssl_set; @@ -436,8 +414,6 @@ static void main_preinit(void) login_source_ips_idx = i_rand_limit(login_source_ips_count); } - login_load_modules(); - restrict_access_by_env(0, NULL); if (login_debug) restrict_access_allow_coredumps(TRUE); @@ -488,7 +464,6 @@ static void main_deinit(void) login_proxy_deinit(); login_binary->deinit(); - module_dir_unload(&modules); auth_client_deinit(&auth_client); master_auth_deinit(&master_auth);