]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: build-mail - Use fts-settings
authorMarco Bettini <marco.bettini@open-xchange.com>
Tue, 28 Nov 2023 11:38:23 +0000 (11:38 +0000)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:11 +0000 (12:34 +0200)
src/plugins/fts/fts-build-mail.c
src/plugins/fts/fts-storage.c

index e69b287825a7c2d018e7d0a528fa472d4c19aaf8..a86dca35544aafee3ebd869788a18891c5a46905 100644 (file)
@@ -489,40 +489,40 @@ static int fts_body_parser_finish(struct fts_mail_build_context *ctx,
 }
 
 static void
-load_header_filter(const char *key, struct fts_backend *backend,
-                  ARRAY_TYPE(const_string) list, bool *matches_all_r)
+parse_header_filter(const ARRAY_TYPE(const_string) *values, pool_t pool,
+                   ARRAY_TYPE(const_string) *list_r, bool *matches_all_r)
 {
-       const char *str = mail_user_plugin_getenv(backend->ns->user, key);
-
        *matches_all_r = FALSE;
-       if (str == NULL || *str == '\0')
+       if (array_is_empty(values))
                return;
 
-       char **entries = p_strsplit_spaces(backend->header_filters.pool, str, " ");
-       for (char **entry = entries; *entry != NULL; ++entry) {
-               const char *value = str_lcase(*entry);
-               array_push_back(&list, &value);
+       const char *entry;
+       array_foreach_elem(values, entry) {
+               const char *value = p_strdup(pool, t_str_lcase(entry));
+               array_push_back(list_r, &value);
                if (*value == '*') {
                        *matches_all_r = TRUE;
                        break;
                }
        }
-       array_sort(&list, i_strcmp_p);
+       array_sort(list_r, i_strcmp_p);
 }
 
 static struct fts_header_filters *
 load_header_filters(struct fts_backend *backend)
 {
+       const struct fts_settings *set = fts_user_get_settings(backend->ns->user);
        struct fts_header_filters *filters = &backend->header_filters;
        if (!filters->loaded) {
                bool match_all;
+               /* match_all used just as dummy output here */
+               parse_header_filter(&set->header_includes, filters->pool,
+                                   &filters->includes, &match_all);
 
-               /* match_all return ignored in includes */
-               load_header_filter("fts_header_includes", backend,
-                                  filters->includes, &match_all);
+               /* match_all from this call is relevant instead */
+               parse_header_filter(&set->header_excludes, filters->pool,
+                                   &filters->excludes, &match_all);
 
-               load_header_filter("fts_header_excludes", backend,
-                                  filters->excludes, &match_all);
                filters->loaded = TRUE;
                filters->exclude_is_default = match_all;
        }
index cb7b86d599a0e76ae1320faae1464cd611e258c9..6b06d7678e60ae2e2756bdee433280a1012d06cb 100644 (file)
@@ -177,7 +177,8 @@ fts_mailbox_search_init(struct mailbox_transaction_context *t,
        ctx = fbox->module_ctx.super.search_init(t, args, sort_program,
                                                 wanted_fields, wanted_headers);
 
-       if (!fts_backend_can_lookup(flist->backend, args->args))
+       if (*fbox->set->driver == '\0' ||
+           !fts_backend_can_lookup(flist->backend, args->args))
                return ctx;
 
        fctx = i_new(struct fts_search_context, 1);
@@ -668,7 +669,7 @@ fts_transaction_commit(struct mailbox_transaction_context *t,
        int ret = 0;
        const char *error;
 
-       autoindex = fbox->set->autoindex && ft->mails_saved;
+       autoindex = ft->mails_saved && fbox->set->autoindex && *fbox->set->driver != '\0';
 
        if (fts_transaction_end(t, &error) < 0) {
                mail_storage_set_error(t->box->storage, MAIL_ERROR_TEMP,