mail-user.c revision 88b0427d90f1d3c2c5fb3171e53a505c46e2c39d
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2008-2011 Dovecot authors, see the included COPYING file */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenstruct mail_user_module_register mail_user_module_register = { 0 };
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainenstruct auth_master_connection *mail_user_auth_master_conn;
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenstatic void mail_user_deinit_base(struct mail_user *user)
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenstruct mail_user *mail_user_alloc(const char *username,
1e11a94ec50fc9b57eb2c859771c6a326ccaf86fAki Tuomi pool = pool_alloconly_create("mail user", 16*1024);
45ead232666a47819e89dc71dec57767340d0b62Timo Sirainen user->unexpanded_set = settings_dup(set_info, set, pool);
45ead232666a47819e89dc71dec57767340d0b62Timo Sirainen user->set = settings_dup(set_info, set, pool);
45ead232666a47819e89dc71dec57767340d0b62Timo Sirainen /* check settings so that the duplicated structure will again
45ead232666a47819e89dc71dec57767340d0b62Timo Sirainen contain the parsed fields */
1e11a94ec50fc9b57eb2c859771c6a326ccaf86fAki Tuomi if (!settings_check(set_info, pool, user->set, &error))
1e11a94ec50fc9b57eb2c859771c6a326ccaf86fAki Tuomi i_panic("Settings check unexpectedly failed: %s", error);
1e11a94ec50fc9b57eb2c859771c6a326ccaf86fAki Tuomi p_array_init(&user->module_contexts, user->pool, 5);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenmail_user_expand_plugins_envs(struct mail_user *user, const char **error_r)
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen unsigned int i, count;
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen if (!array_is_created(&user->set->plugin_envs))
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen envs = array_get_modifiable(&user->set->plugin_envs, &count);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen "userdb didn't return a home directory, "
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen "but plugin setting %s used it (%%h): %s",
c6be98b5270900746f35ebe28bd636019976e29eTimo Sirainen var_expand(str, envs[i+1], mail_user_var_expand_table(user));
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenint mail_user_init(struct mail_user *user, const char **error_r)
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen settings_vars_have_key(user->set_info, user->set,
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen "userdb didn't return a home directory, "
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen settings_var_expand(user->set_info, user->set,
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen user->pool, mail_user_var_expand_table(user));
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen if (mail_user_expand_plugins_envs(user, error_r) < 0)
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen mail_set = mail_user_set_get_storage_set(user);
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen user->service = master_service_get_name(master_service);
return NULL;
const struct var_expand_table *
return path;
int ret;
if (ret >= 0) {
return ret;
const char *const *plugins;
bool ret;
T_BEGIN {
} T_END;
return ret;
const char *name)
const char *const *envs;
unsigned int i, count;
return NULL;
return NULL;
return NULL;