/* NOTE: if more user initialization is added, add it also to
mail_user_dup() */
- mail_user = mail_user_alloc(user->input.username, user->user_info,
- user->user_set);
+ mail_user = mail_user_alloc_nodup_set(user->input.username,
+ user->user_info, user->user_set);
mail_user->_service_user = user;
mail_user_set_home(mail_user, *home == '\0' ? NULL : home);
mail_user_set_vars(mail_user, ctx->service->name,
return -1;
}
}
+
*mail_user_r = mail_user;
return 0;
}
{
}
-struct mail_user *mail_user_alloc(const char *username,
- const struct setting_parser_info *set_info,
- const struct mail_user_settings *set)
+static struct mail_user *
+mail_user_alloc_int(const char *username,
+ const struct setting_parser_info *set_info,
+ const struct mail_user_settings *set, pool_t pool)
{
struct mail_user *user;
const char *error;
- pool_t pool;
i_assert(username != NULL);
i_assert(*username != '\0');
- pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024);
user = p_new(pool, struct mail_user, 1);
user->pool = pool;
user->refcount = 1;
user->username = p_strdup(pool, username);
user->set_info = set_info;
- user->unexpanded_set = settings_dup(set_info, set, pool);
+ user->unexpanded_set = set;
user->set = settings_dup_with_pointers(set_info, user->unexpanded_set, pool);
user->service = master_service_get_name(master_service);
user->default_normalizer = uni_utf8_to_decomposed_titlecase;
return user;
}
+struct mail_user *
+mail_user_alloc_nodup_set(const char *username,
+ const struct setting_parser_info *set_info,
+ const struct mail_user_settings *set)
+{
+ pool_t pool;
+
+ pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024);
+ return mail_user_alloc_int(username, set_info, set, pool);
+}
+
+struct mail_user *mail_user_alloc(const char *username,
+ const struct setting_parser_info *set_info,
+ const struct mail_user_settings *set)
+{
+ pool_t pool;
+
+ pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024);
+ return mail_user_alloc_int(username, set_info,
+ settings_dup(set_info, set, pool), pool);
+}
+
static void
mail_user_expand_plugins_envs(struct mail_user *user)
{
struct mail_user *mail_user_alloc(const char *username,
const struct setting_parser_info *set_info,
const struct mail_user_settings *set);
+struct mail_user *
+mail_user_alloc_nodup_set(const char *username,
+ const struct setting_parser_info *set_info,
+ const struct mail_user_settings *set);
/* Returns -1 if settings were invalid. */
int mail_user_init(struct mail_user *user, const char **error_r);