mail-storage-service.c revision d7ec773d995888b09c4d8c88a4b0b134a2002361
965ed6ea3fc8f7637bd0d159d2fdb283a191ce34Timo Sirainen/* Copyright (c) 2009-2010 Dovecot authors, see the included COPYING file */
b567e0172c73dcf7642462e86962060358dd5f28Timo Sirainen/* If time moves backwards more than this, kill ourself instead of sleeping. */
e82af44fe25ca9b88210f313548dc08538e4a677Timo Sirainen const char *set_cache_module, *set_cache_service;
e714eed72515794c46c6712a611e5ab924d903daTimo Sirainen struct master_service_settings_cache *set_cache;
e714eed72515794c46c6712a611e5ab924d903daTimo Sirainen const struct dynamic_settings_parser *set_cache_dyn_parsers;
965ed6ea3fc8f7637bd0d159d2fdb283a191ce34Timo Sirainen struct setting_parser_info *set_cache_dyn_parsers_parent;
965ed6ea3fc8f7637bd0d159d2fdb283a191ce34Timo Sirainen const struct setting_parser_info **set_cache_roots;
e023e3c2677ab66d7a7445eae9caf3d739e199cbTimo Sirainenstruct module *mail_storage_service_modules = NULL;
0d7d27765267594a5870892268ab345148306d49Timo Sirainenstatic void set_keyval(struct setting_parser_context *set_parser,
965ed6ea3fc8f7637bd0d159d2fdb283a191ce34Timo Sirainen const char *str;
16133a719ce8b6a5b8cedd721340cc1607c43433Timo Sirainen if (settings_parse_line(set_parser, str) < 0) {
e023e3c2677ab66d7a7445eae9caf3d739e199cbTimo Sirainenstatic bool validate_chroot(const struct mail_user_settings *user_set,
965ed6ea3fc8f7637bd0d159d2fdb283a191ce34Timo Sirainen const char *dir)
ed5e91e58dfc372c2135c55427bf6f25a7725042Timo Sirainen const char *const *chroot_dirs;
a399486f2d8d5bed51bc6344baba61a7f2b0dcdbTimo Sirainen chroot_dirs = t_strsplit(user_set->valid_chroot_dirs, ":");
a399486f2d8d5bed51bc6344baba61a7f2b0dcdbTimo Sirainen strncmp(dir, *chroot_dirs, strlen(*chroot_dirs)) == 0)
9f431ccfb6932746db56245c8a3d3415717ef545Timo Sirainenuser_reply_handle(struct mail_storage_service_user *user,
16133a719ce8b6a5b8cedd721340cc1607c43433Timo Sirainen const char **error_r)
965ed6ea3fc8f7637bd0d159d2fdb283a191ce34Timo Sirainen struct setting_parser_context *set_parser = user->set_parser;
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen unsigned int i, count;
965ed6ea3fc8f7637bd0d159d2fdb283a191ce34Timo Sirainen set_keyval(set_parser, "mail_uid", dec2str(reply->uid));
#ifdef HAVE_SETPRIORITY
} else T_BEGIN {
} T_END;
if (ret < 0) {
return ret;
const char *const **fields_r,
const char **error_r)
const char *new_username;
int ret;
if (ret > 0) {
} else if (ret == 0)
return ret;
return TRUE;
return FALSE;
return TRUE;
return TRUE;
return FALSE;
return TRUE;
const char *system_groups_user,
bool setenv_only)
if (disallow_root &&
if (keep_setuid_root) {
if (current_euid != 0) {
if (seteuid(0) < 0)
if (!setenv_only) {
const char **error_r)
static const struct var_expand_table *
return tab;
T_BEGIN {
} T_END;
if (diff > 0) {
diff++;
struct mail_storage_service_ctx *
unsigned int count;
count = 0;
return ctx;
struct auth_master_connection *
unsigned int i, count;
for (i = 0; i < count; i++) {
static struct setting_parser_info *
unsigned int i, count;
for (i = 0; i < count; i++) {
for (i = 0; i < count; i++) {
return new_parent;
const char **error_r)
i_unreached();
const char **error_r)
const char *const *userdb_fields;
error_r) < 0) {
error_r);
if (ret <= 0) {
return ret;
i_unreached();
return ret;
const char **error_r)
unsigned int len;
bool temp_priv_drop =
if (!temp_priv_drop ||
if (!temp_priv_drop) {
const char **error_r)
const char *error;
int ret;
if (ret <= 0) {
return ret;
const char *error;
&error) < 0)
const char **username_r)
const struct mail_storage_service_input *
struct setting_parser_context *
T_BEGIN {
} T_END;
return set;