"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/plugins/fts/fts-storage.c" between
dovecot-2.3.16.tar.gz and dovecot-2.3.17.tar.gz

About: Dovecot is an IMAP and POP3 server, written with security primarily in mind.

fts-storage.c  (dovecot-2.3.16):fts-storage.c  (dovecot-2.3.17)
/* Copyright (c) 2006-2018 Dovecot authors, see the included COPYING file */ /* Copyright (c) 2006-2018 Dovecot authors, see the included COPYING file */
#include "lib.h" #include "lib.h"
#include "array.h"
#include "net.h" #include "net.h"
#include "str.h" #include "str.h"
#include "strescape.h" #include "strescape.h"
#include "write-full.h" #include "write-full.h"
#include "wildcard-match.h"
#include "mail-search-build.h" #include "mail-search-build.h"
#include "mail-storage-private.h" #include "mail-storage-private.h"
#include "mailbox-list-private.h" #include "mailbox-list-private.h"
#include "fts-api-private.h" #include "fts-api-private.h"
#include "fts-tokenizer.h" #include "fts-tokenizer.h"
#include "fts-indexer.h" #include "fts-indexer.h"
#include "fts-build-mail.h" #include "fts-build-mail.h"
#include "fts-search-serialize.h" #include "fts-search-serialize.h"
#include "fts-plugin.h" #include "fts-plugin.h"
#include "fts-user.h"
#include "fts-storage.h" #include "fts-storage.h"
#define FTS_CONTEXT(obj) \ #define FTS_CONTEXT(obj) \
MODULE_CONTEXT(obj, fts_storage_module) MODULE_CONTEXT(obj, fts_storage_module)
#define FTS_CONTEXT_REQUIRE(obj) \ #define FTS_CONTEXT_REQUIRE(obj) \
MODULE_CONTEXT_REQUIRE(obj, fts_storage_module) MODULE_CONTEXT_REQUIRE(obj, fts_storage_module)
#define FTS_MAIL_CONTEXT(obj) \ #define FTS_MAIL_CONTEXT(obj) \
MODULE_CONTEXT_REQUIRE(obj, fts_mail_module) MODULE_CONTEXT_REQUIRE(obj, fts_mail_module)
#define FTS_LIST_CONTEXT(obj) \ #define FTS_LIST_CONTEXT(obj) \
MODULE_CONTEXT(obj, fts_mailbox_list_module) MODULE_CONTEXT(obj, fts_mailbox_list_module)
skipping to change at line 793 skipping to change at line 792
{ {
struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction ); struct fts_transaction_context *ft = FTS_CONTEXT_REQUIRE(ctx->transaction );
struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box); struct fts_mailbox *fbox = FTS_CONTEXT_REQUIRE(ctx->transaction->box);
if (fbox->module_ctx.super.copy(ctx, mail) < 0) if (fbox->module_ctx.super.copy(ctx, mail) < 0)
return -1; return -1;
ft->mails_saved = TRUE; ft->mails_saved = TRUE;
return 0; return 0;
} }
static const char *const *fts_exclude_get_patterns(struct mail_user *user)
{
ARRAY_TYPE(const_string) patterns;
const char *str;
char set_name[21 + MAX_INT_STRLEN];
unsigned int i;
str = mail_user_plugin_getenv(user, "fts_autoindex_exclude");
if (str == NULL)
return NULL;
t_array_init(&patterns, 16);
for (i = 2; str != NULL; i++) {
array_push_back(&patterns, &str);
if (i_snprintf(set_name, sizeof(set_name),
"fts_autoindex_exclude%u", i) < 0)
i_unreached();
str = mail_user_plugin_getenv(user, set_name);
}
array_append_zero(&patterns);
return array_front(&patterns);
}
static bool fts_autoindex_exclude_match(struct mailbox *box)
{
const char *const *exclude_list;
unsigned int i;
const struct mailbox_settings *set;
const char *const *special_use;
struct mail_user *user = box->storage->user;
exclude_list = fts_exclude_get_patterns(user);
if (exclude_list == NULL)
return FALSE;
set = mailbox_settings_find(mailbox_get_namespace(box),
mailbox_get_vname(box));
special_use = set == NULL ? NULL :
t_strsplit_spaces(set->special_use, " ");
for (i = 0; exclude_list[i] != NULL; i++) {
if (exclude_list[i][0] == '\\') {
/* \Special-use flag */
if (special_use != NULL &&
str_array_icase_find(special_use, exclude_list[i]))
return TRUE;
} else {
/* mailbox name with wildcards */
if (wildcard_match(box->name, exclude_list[i]))
return TRUE;
}
}
return FALSE;
}
void fts_mailbox_allocated(struct mailbox *box) void fts_mailbox_allocated(struct mailbox *box)
{ {
struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list); struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list);
struct mailbox_vfuncs *v = box->vlast; struct mailbox_vfuncs *v = box->vlast;
struct fts_mailbox *fbox; struct fts_mailbox *fbox;
if (flist == NULL || flist->failed) if (flist == NULL || flist->failed)
return; return;
fbox = p_new(box->pool, struct fts_mailbox, 1); fbox = p_new(box->pool, struct fts_mailbox, 1);
fbox->module_ctx.super = *v; fbox->module_ctx.super = *v;
box->vlast = &fbox->module_ctx.super; box->vlast = &fbox->module_ctx.super;
fbox->fts_mailbox_excluded = fts_autoindex_exclude_match(box); fbox->fts_mailbox_excluded = fts_user_autoindex_exclude(box);
v->get_status = fts_mailbox_get_status; v->get_status = fts_mailbox_get_status;
v->search_init = fts_mailbox_search_init; v->search_init = fts_mailbox_search_init;
v->search_next_nonblock = fts_mailbox_search_next_nonblock; v->search_next_nonblock = fts_mailbox_search_next_nonblock;
v->search_next_update_seq = fts_mailbox_search_next_update_seq; v->search_next_update_seq = fts_mailbox_search_next_update_seq;
v->search_deinit = fts_mailbox_search_deinit; v->search_deinit = fts_mailbox_search_deinit;
v->transaction_begin = fts_transaction_begin; v->transaction_begin = fts_transaction_begin;
v->transaction_rollback = fts_transaction_rollback; v->transaction_rollback = fts_transaction_rollback;
v->transaction_commit = fts_transaction_commit; v->transaction_commit = fts_transaction_commit;
v->sync_notify = fts_mailbox_sync_notify; v->sync_notify = fts_mailbox_sync_notify;
 End of changes. 5 change blocks. 
58 lines changed or deleted 2 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)