]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts-flatcurve: Ensure that mailbox parameters are always truncated before changing
authorMichael M Slusarz <michael.slusarz@open-xchange.com>
Mon, 17 Mar 2025 00:59:38 +0000 (17:59 -0700)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 3 Sep 2025 09:02:45 +0000 (09:02 +0000)
src/plugins/fts-flatcurve/fts-backend-flatcurve-xapian.cc
src/plugins/fts-flatcurve/fts-backend-flatcurve.c
src/plugins/fts-flatcurve/fts-backend-flatcurve.h

index aa65b3e5445accb3464dfc8baba6d5e99671afa3..32f79f40cafa00e1e768cf4be246afe6f26a748b 100644 (file)
@@ -257,8 +257,9 @@ void fts_flatcurve_xapian_deinit(struct flatcurve_fts_backend *backend)
 
                void *key, *val;
                while (hash_table_iterate(iter, x->optimize, &key, &val)) {
-                       str_append(backend->boxname, (const char *)key);
-                       str_append(backend->db_path, (const char *)val);
+                       fts_backend_flatcurve_set_mailbox_params(
+                               backend, (const char *)key,
+                               (const char *)val, FALSE, NULL);
 
                        if (fts_flatcurve_xapian_optimize_box(
                                backend, &error) < 0)
index c44707584fe5569922502e021ec235cef08eac29..e02bae005c1063b5aabd6d745a3757d168b889d8 100644 (file)
@@ -67,6 +67,14 @@ fts_backend_flatcurve_init(struct fts_backend *_backend, const char **error_r)
        return fts_backend_flatcurve_close_mailbox(backend, error_r);
 }
 
+static void
+fts_backend_flatcurve_clear_mailbox_params(struct flatcurve_fts_backend *backend)
+{
+       str_truncate(backend->boxname, 0);
+       str_truncate(backend->db_path, 0);
+       str_truncate(backend->volatile_dir, 0);
+}
+
 int
 fts_backend_flatcurve_close_mailbox(struct flatcurve_fts_backend *backend,
                                    const char **error_r)
@@ -75,10 +83,7 @@ fts_backend_flatcurve_close_mailbox(struct flatcurve_fts_backend *backend,
        int ret = 0;
        if (str_len(backend->boxname) > 0) {
                ret = fts_flatcurve_xapian_close(backend, error_r);
-
-               str_truncate(backend->boxname, 0);
-               str_truncate(backend->db_path, 0);
-               str_truncate(backend->volatile_dir, 0);
+               fts_backend_flatcurve_clear_mailbox_params(backend);
        }
 
        event_set_append_log_prefix(backend->event, FTS_FLATCURVE_DEBUG_PREFIX);
@@ -141,21 +146,36 @@ fts_backend_flatcurve_set_mailbox(struct flatcurve_fts_backend *backend,
                return -1;
        }
 
-       str_append(backend->boxname, box->vname);
-       str_printfa(backend->db_path, "%s/%s/", path, FTS_FLATCURVE_LABEL);
-
        storage = mailbox_get_storage(box);
        backend->parsed_lock_method = storage->set->parsed_lock_method;
 
        user = mail_storage_get_user(storage);
        volatile_dir = mail_user_get_volatile_dir(user);
-       if (volatile_dir != NULL)
-               str_append(backend->volatile_dir, volatile_dir);
+
+       fts_backend_flatcurve_set_mailbox_params(backend, box->vname, path,
+                                                TRUE, volatile_dir);
 
        fts_flatcurve_xapian_set_mailbox(backend);
        return 0;
 }
 
+void
+fts_backend_flatcurve_set_mailbox_params(struct flatcurve_fts_backend *backend,
+                                        const char *box, const char *path,
+                                        bool append_path_label,
+                                        const char *volatile_dir)
+{
+       if (str_len(backend->boxname) > 0)
+               fts_backend_flatcurve_clear_mailbox_params(backend);
+
+       str_append(backend->boxname, box);
+       str_append(backend->db_path, path);
+       if (append_path_label)
+               str_printfa(backend->db_path, "/%s/", FTS_FLATCURVE_LABEL);
+       if (volatile_dir != NULL)
+               str_append(backend->volatile_dir, volatile_dir);
+}
+
 static int
 fts_backend_flatcurve_get_last_uid(struct fts_backend *_backend,
                                   struct mailbox *box, uint32_t *last_uid_r)
index 68abc4778ce6d90ecba09cd2eaf989bb27ef2878..2ae557bdc780728dd5c3f85a52c9a33212c73dae 100644 (file)
@@ -12,6 +12,8 @@
 
 struct flatcurve_fts_backend {
        struct fts_backend backend;
+       /* MUST use fts_backend_flatcurve_set_mailbox_params() to set these
+        * values. */
        string_t *boxname, *db_path, *volatile_dir;
 
        struct event *event;
@@ -58,6 +60,11 @@ struct flatcurve_fts_result {
 int
 fts_backend_flatcurve_set_mailbox(struct flatcurve_fts_backend *backend,
                                   struct mailbox *box, const char **error_r);
+void
+fts_backend_flatcurve_set_mailbox_params(struct flatcurve_fts_backend *backend,
+                                        const char *box, const char *path,
+                                        bool append_path_label,
+                                        const char *volatile_dir);
 int
 fts_backend_flatcurve_close_mailbox(struct flatcurve_fts_backend *backend,
                                    const char **error_r);