]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts-flatcurve: Delay reading settings until flatcurve backend is actually attempted...
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 18 Mar 2024 21:32:07 +0000 (23:32 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:39:58 +0000 (10:39 +0200)
It's not an error to load fts_flatcurve plugin, even if it doesn't end up
being configured.

src/plugins/fts-flatcurve/fts-backend-flatcurve.c
src/plugins/fts-flatcurve/fts-flatcurve-plugin.c
src/plugins/fts-flatcurve/fts-flatcurve-plugin.h

index 110c499dd1794020321bad60cf8722a228d4fa11..ef729720435fd5e93acfc8e22afeb1a5ae87f076 100644 (file)
@@ -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);
index f9078929bc1849d5b0e910e51c5ceaa04f0987c9..017a44f621a8a191ea25e97a0a9cd93d6f29a860 100644 (file)
@@ -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);
index 8d80266fe29051f71f8c99ec968094e18dd16e5d..37c1d4b952a7916f543edfdf46a0a42171ff0914 100644 (file)
@@ -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);