mail-user.c revision ff4ba036fcdf28d4a1a7e3c1c6c0c71793547bd6
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen/* Copyright (c) 2008-2017 Dovecot authors, see the included COPYING file */
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainenstruct mail_user_module_register mail_user_module_register = { 0 };
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainenstruct auth_master_connection *mail_user_auth_master_conn;
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainenstatic void mail_user_deinit_base(struct mail_user *user)
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen mail_storage_service_user_unref(&user->_service_user);
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainenstatic void mail_user_deinit_pre_base(struct mail_user *user ATTR_UNUSED)
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainenstatic void mail_user_stats_fill_base(struct mail_user *user ATTR_UNUSED,
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainenstatic struct mail_user *
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen const struct mail_user_settings *set, pool_t pool)
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen user->set = settings_dup_with_pointers(set_info, user->unexpanded_set, pool);
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen user->service = master_service_get_name(master_service);
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen user->default_normalizer = uni_utf8_to_decomposed_titlecase;
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen /* check settings so that the duplicated structure will again
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen contain the parsed fields */
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen if (!settings_check(set_info, pool, user->set, &error))
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen i_panic("Settings check unexpectedly failed: %s", error);
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen user->v.deinit_pre = mail_user_deinit_pre_base;
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen user->v.stats_fill = mail_user_stats_fill_base;
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen p_array_init(&user->module_contexts, user->pool, 5);
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainenmail_user_alloc_nodup_set(const char *username,
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024);
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen return mail_user_alloc_int(username, set_info, set, pool);
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainenstruct mail_user *mail_user_alloc(const char *username,
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024);
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen return mail_user_alloc_int(username, set_info,
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainenmail_user_expand_plugins_envs(struct mail_user *user)
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen unsigned int i, count;
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen if (!array_is_created(&user->set->plugin_envs))
9761e0036c87f459abe040632e1252f794ffe5f7Timo Sirainen envs = array_get_modifiable(&user->set->plugin_envs, &count);
&error) <= 0) {
bool need_home_dir;
&error) <= 0) {
return NULL;
const struct var_expand_table *
const char *username =
const char **value_r,
T_BEGIN {
} T_END;
return path;
int ret;
if (ret > 0) {
return ret;
return TRUE;
home++;
return TRUE;
&error) <= 0) {
return FALSE;
return TRUE;
int ret;
} else if (ret == 0) {
const char *const *plugins;
bool ret;
T_BEGIN {
} T_END;
return ret;
const char *name)
return FALSE;
switch (env[0]) {
return FALSE;
return TRUE;
const char *name)
const char *const *envs;
unsigned int i, count;
return NULL;
return NULL;
unsigned int lock_secs,
bool created;
int ret;
if (ret == 0) {
return NULL;
struct mail_storage *
return storage;
return NULL;
return storage;
return user2;