"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/plugins/fts/fts-user.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-user.c  (dovecot-2.3.16):fts-user.c  (dovecot-2.3.17)
/* Copyright (c) 2015-2018 Dovecot authors, see the included COPYING file */ /* Copyright (c) 2015-2018 Dovecot authors, see the included COPYING file */
#include "lib.h" #include "lib.h"
#include "module-context.h" #include "module-context.h"
#include "mail-user.h" #include "mail-user.h"
#include "mail-storage-private.h"
#include "mailbox-match-plugin.h"
#include "fts-language.h" #include "fts-language.h"
#include "fts-filter.h" #include "fts-filter.h"
#include "fts-tokenizer.h" #include "fts-tokenizer.h"
#include "fts-user.h" #include "fts-user.h"
#define FTS_USER_CONTEXT(obj) \ #define FTS_USER_CONTEXT(obj) \
MODULE_CONTEXT(obj, fts_user_module) MODULE_CONTEXT(obj, fts_user_module)
struct fts_user { struct fts_user {
union mail_user_module_context module_ctx; union mail_user_module_context module_ctx;
int refcount; int refcount;
struct fts_language_list *lang_list; struct fts_language_list *lang_list;
struct fts_user_language *data_lang; struct fts_user_language *data_lang;
ARRAY_TYPE(fts_user_language) languages, data_languages; ARRAY_TYPE(fts_user_language) languages, data_languages;
struct mailbox_match_plugin *autoindex_exclude;
}; };
static MODULE_CONTEXT_DEFINE_INIT(fts_user_module, static MODULE_CONTEXT_DEFINE_INIT(fts_user_module,
&mail_user_module_register); &mail_user_module_register);
static const char *const *str_keyvalues_to_array(const char *str) static const char *const *str_keyvalues_to_array(const char *str)
{ {
const char *key, *value, *const *keyvalues; const char *key, *value, *const *keyvalues;
ARRAY_TYPE(const_string) arr; ARRAY_TYPE(const_string) arr;
unsigned int i; unsigned int i;
skipping to change at line 339 skipping to change at line 343
} }
struct fts_user_language *fts_user_get_data_lang(struct mail_user *user) struct fts_user_language *fts_user_get_data_lang(struct mail_user *user)
{ {
struct fts_user *fuser = FTS_USER_CONTEXT(user); struct fts_user *fuser = FTS_USER_CONTEXT(user);
i_assert(fuser != NULL); i_assert(fuser != NULL);
return fuser->data_lang; return fuser->data_lang;
} }
bool fts_user_autoindex_exclude(struct mailbox *box)
{
struct fts_user *fuser = FTS_USER_CONTEXT(box->storage->user);
return mailbox_match_plugin_exclude(fuser->autoindex_exclude, box);
}
static void fts_user_language_free(struct fts_user_language *user_lang) static void fts_user_language_free(struct fts_user_language *user_lang)
{ {
if (user_lang->filter != NULL) if (user_lang->filter != NULL)
fts_filter_unref(&user_lang->filter); fts_filter_unref(&user_lang->filter);
if (user_lang->index_tokenizer != NULL) if (user_lang->index_tokenizer != NULL)
fts_tokenizer_unref(&user_lang->index_tokenizer); fts_tokenizer_unref(&user_lang->index_tokenizer);
if (user_lang->search_tokenizer != NULL) if (user_lang->search_tokenizer != NULL)
fts_tokenizer_unref(&user_lang->search_tokenizer); fts_tokenizer_unref(&user_lang->search_tokenizer);
} }
static void fts_user_free(struct fts_user *fuser) static void fts_user_free(struct fts_user *fuser)
{ {
struct fts_user_language *user_lang; struct fts_user_language *user_lang;
if (fuser->lang_list != NULL) if (fuser->lang_list != NULL)
fts_language_list_deinit(&fuser->lang_list); fts_language_list_deinit(&fuser->lang_list);
array_foreach_elem(&fuser->languages, user_lang) if (array_is_created(&fuser->languages)) {
fts_user_language_free(user_lang); array_foreach_elem(&fuser->languages, user_lang)
fts_user_language_free(user_lang);
}
mailbox_match_plugin_deinit(&fuser->autoindex_exclude);
} }
int fts_mail_user_init(struct mail_user *user, const char **error_r) static int
fts_mail_user_init_libfts(struct mail_user *user, struct fts_user *fuser,
const char **error_r)
{
p_array_init(&fuser->languages, user->pool, 4);
if (fts_user_init_languages(user, fuser, error_r) < 0 ||
fts_user_init_data_language(user, fuser, error_r) < 0)
return -1;
if (fts_user_languages_fill_all(user, fuser, error_r) < 0)
return -1;
return 0;
}
int fts_mail_user_init(struct mail_user *user, bool initialize_libfts,
const char **error_r)
{ {
struct fts_user *fuser = FTS_USER_CONTEXT(user); struct fts_user *fuser = FTS_USER_CONTEXT(user);
if (fuser != NULL) { if (fuser != NULL) {
/* multiple fts plugins are loaded */ /* multiple fts plugins are loaded */
fuser->refcount++; fuser->refcount++;
return 0; return 0;
} }
fuser = p_new(user->pool, struct fts_user, 1); fuser = p_new(user->pool, struct fts_user, 1);
fuser->refcount = 1; fuser->refcount = 1;
p_array_init(&fuser->languages, user->pool, 4); if (initialize_libfts) {
if (fts_mail_user_init_libfts(user, fuser, error_r) < 0) {
if (fts_user_init_languages(user, fuser, error_r) < 0 || fts_user_free(fuser);
fts_user_init_data_language(user, fuser, error_r) < 0) { return -1;
fts_user_free(fuser); }
return -1;
}
if (fts_user_languages_fill_all(user, fuser, error_r) < 0) {
fts_user_free(fuser);
return -1;
} }
fuser->autoindex_exclude =
mailbox_match_plugin_init(user, "fts_autoindex_exclude");
MODULE_CONTEXT_SET(user, fts_user_module, fuser); MODULE_CONTEXT_SET(user, fts_user_module, fuser);
return 0; return 0;
} }
void fts_mail_user_deinit(struct mail_user *user) void fts_mail_user_deinit(struct mail_user *user)
{ {
struct fts_user *fuser = FTS_USER_CONTEXT(user); struct fts_user *fuser = FTS_USER_CONTEXT(user);
if (fuser != NULL) { if (fuser != NULL) {
 End of changes. 7 change blocks. 
13 lines changed or deleted 39 lines changed or added

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