From: Timo Sirainen Date: Mon, 18 Mar 2024 21:32:07 +0000 (+0200) Subject: fts-flatcurve: Delay reading settings until flatcurve backend is actually attempted... X-Git-Tag: 2.4.0~627 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b4ca8f7e58a0a7561a314fe733c65914966d9046;p=thirdparty%2Fdovecot%2Fcore.git fts-flatcurve: Delay reading settings until flatcurve backend is actually attempted to be used It's not an error to load fts_flatcurve plugin, even if it doesn't end up being configured. --- diff --git a/src/plugins/fts-flatcurve/fts-backend-flatcurve.c b/src/plugins/fts-flatcurve/fts-backend-flatcurve.c index 110c499dd1..ef72972043 100644 --- a/src/plugins/fts-flatcurve/fts-backend-flatcurve.c +++ b/src/plugins/fts-flatcurve/fts-backend-flatcurve.c @@ -42,13 +42,10 @@ fts_backend_flatcurve_init(struct fts_backend *_backend, const char **error_r) { struct flatcurve_fts_backend *backend = container_of(_backend, struct flatcurve_fts_backend, backend); - struct fts_flatcurve_user *fuser = - FTS_FLATCURVE_USER_CONTEXT(_backend->ns->user); + struct fts_flatcurve_user *fuser; - if (fuser == NULL) { - *error_r = "Invalid fts-flatcurve settings"; + if (fts_flatcurve_mail_user_get(_backend->ns->user, &fuser, error_r) < 0) return -1; - } backend->boxname = str_new(backend->pool, 128); backend->db_path = str_new(backend->pool, 256); diff --git a/src/plugins/fts-flatcurve/fts-flatcurve-plugin.c b/src/plugins/fts-flatcurve/fts-flatcurve-plugin.c index f9078929bc..017a44f621 100644 --- a/src/plugins/fts-flatcurve/fts-flatcurve-plugin.c +++ b/src/plugins/fts-flatcurve/fts-flatcurve-plugin.c @@ -24,27 +24,37 @@ static void fts_flatcurve_mail_user_deinit(struct mail_user *user) fuser->module_ctx.super.deinit(user); } -static void fts_flatcurve_mail_user_created(struct mail_user *user) +int fts_flatcurve_mail_user_get(struct mail_user *user, + struct fts_flatcurve_user **fuser_r, + const char **error_r) { - struct mail_user_vfuncs *v = user->vlast; - struct fts_flatcurve_user *fuser; - const char *error; + struct fts_flatcurve_user *fuser = FTS_FLATCURVE_USER_CONTEXT(user); struct fts_flatcurve_settings *set; if (settings_get(user->event, &fts_flatcurve_setting_parser_info, 0, - &set, &error) < 0) { - e_error(user->event, "%s", error); - return; - } + &set, error_r) < 0) + return -1; - if (fts_mail_user_init(user, TRUE, &error) < 0) { - e_error(user->event, FTS_FLATCURVE_DEBUG_PREFIX "%s", error); + /* Reference the user even when fuser is already initialized */ + if (fts_mail_user_init(user, TRUE, error_r) < 0) { settings_free(set); - return; + return -1; } + if (fuser->set == NULL) + fuser->set = set; + else + settings_free(set); + + *fuser_r = fuser; + return 0; +} + +static void fts_flatcurve_mail_user_created(struct mail_user *user) +{ + struct fts_flatcurve_user *fuser; + struct mail_user_vfuncs *v = user->vlast; fuser = p_new(user->pool, struct fts_flatcurve_user, 1); - fuser->set = set; fuser->module_ctx.super = *v; user->vlast = &fuser->module_ctx.super; v->deinit = fts_flatcurve_mail_user_deinit; @@ -55,7 +65,7 @@ static struct mail_storage_hooks fts_backend_mail_storage_hooks = { .mail_user_created = fts_flatcurve_mail_user_created }; -void fts_flatcurve_plugin_init(struct module *module) +void fts_flatcurve_plugin_init(struct module *module ATTR_UNUSED) { fts_backend_register(&fts_backend_flatcurve); mail_storage_hooks_add(module, &fts_backend_mail_storage_hooks); diff --git a/src/plugins/fts-flatcurve/fts-flatcurve-plugin.h b/src/plugins/fts-flatcurve/fts-flatcurve-plugin.h index 8d80266fe2..37c1d4b952 100644 --- a/src/plugins/fts-flatcurve/fts-flatcurve-plugin.h +++ b/src/plugins/fts-flatcurve/fts-flatcurve-plugin.h @@ -24,6 +24,10 @@ struct fts_flatcurve_user { extern struct fts_backend fts_backend_flatcurve; extern MODULE_CONTEXT_DEFINE(fts_flatcurve_user_module, &mail_user_module_register); +int fts_flatcurve_mail_user_get(struct mail_user *user, + struct fts_flatcurve_user **fuser_r, + const char **error_r); + void fts_flatcurve_plugin_init(struct module *module); void fts_flatcurve_plugin_deinit(void);