From 6bfcf6b6b8d9ad5144d2f03c37297c637d4f22d9 Mon Sep 17 00:00:00 2001 From: Marco Bettini Date: Tue, 28 Nov 2023 11:38:23 +0000 Subject: [PATCH] fts: build-mail - Use fts-settings --- src/plugins/fts/fts-build-mail.c | 30 +++++++++++++++--------------- src/plugins/fts/fts-storage.c | 5 +++-- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/plugins/fts/fts-build-mail.c b/src/plugins/fts/fts-build-mail.c index e69b287825..a86dca3554 100644 --- a/src/plugins/fts/fts-build-mail.c +++ b/src/plugins/fts/fts-build-mail.c @@ -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; } diff --git a/src/plugins/fts/fts-storage.c b/src/plugins/fts/fts-storage.c index cb7b86d599..6b06d7678e 100644 --- a/src/plugins/fts/fts-storage.c +++ b/src/plugins/fts/fts-storage.c @@ -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, -- 2.47.3