return -1;
}
ctx->settings_looked_up = TRUE;
- *parser_r = ctx->service->set_parser;
+ pool_t pool = pool_alloconly_create("mail storage service settings pool", 1024);
+ *parser_r = settings_parser_dup(ctx->service->set_parser, pool);
+ pool_unref(&pool);
return 0;
}
mail_storage_service_seteuid_root();
}
- if (input->set_parser != NULL)
- set_parser = input->set_parser;
- else if (mail_storage_service_read_settings(ctx, input,
+ pool_t user_pool = pool_alloconly_create(MEMPOOL_GROWING"mail storage service user", 1024*6);
+ if (input->set_parser != NULL) {
+ set_parser = settings_parser_dup(input->set_parser, user_pool);
+ } else if (mail_storage_service_read_settings(ctx, input,
&set_parser, error_r) < 0) {
if (ctx->config_permission_denied) {
/* just restart and maybe next time we will open the
config socket before dropping privileges */
i_fatal("%s", *error_r);
}
+ pool_unref(&user_pool);
return -1;
}
if (master_service_settings_parser_get(event, set_parser,
&mail_user_setting_parser_info,
0, &user_set, error_r) < 0) {
+ pool_unref(&user_pool);
event_unref(&event);
+ settings_parser_unref(&set_parser);
return -1;
}
/* load global plugins */
if (mail_storage_service_load_modules(ctx, user_set, error_r) < 0) {
master_service_settings_free(user_set);
+ pool_unref(&user_pool);
event_unref(&event);
+ settings_parser_unref(&set_parser);
return -1;
}
event_set_forced_debug(event,
ctx->debug || (flags & MAIL_STORAGE_SERVICE_FLAG_DEBUG) != 0);
- pool_t user_pool = pool_alloconly_create(MEMPOOL_GROWING"mail storage service user", 1024*6);
const char *session_id = input->session_id != NULL ?
p_strdup(user_pool, input->session_id) :
mail_storage_service_generate_session_id(
event_unref(&event);
pool_unref(&temp_pool);
pool_unref(&user_pool);
+ settings_parser_unref(&set_parser);
return ret;
}
event_add_str(event, "user", username);
user->input.session_create_time = input->session_create_time;
user->flags = flags;
- user->set_parser = settings_parser_dup(set_parser, user_pool);
+ user->set_parser = set_parser;
user->user_set = user_set;
user->gid_source = "mail_gid setting";
user->uid_source = "mail_uid setting";
MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND,
&user_set, &error) < 0)
i_fatal("%s", error);
+ settings_parser_unref(&set_parser);
mail_storage_service_first_init(ctx, user_set, ctx->flags);
master_service_settings_free(user_set);
static void client_read_settings(struct client *client, bool ssl)
{
struct mail_storage_service_input input;
- struct setting_parser_context *set_parser;
const char *error;
i_zero(&input);
input.username = "";
if (mail_storage_service_read_settings(storage_service, &input,
- &set_parser, &error) < 0)
+ &client->set_parser, &error) < 0)
i_fatal("%s", error);
/* create raw user before duplicating the settings parser */
client->raw_mail_user =
- raw_storage_create_from_set(storage_service, set_parser);
+ raw_storage_create_from_set(storage_service, client->set_parser);
const struct var_expand_table *tab =
mail_storage_service_get_var_expand_table(storage_service, &input);
struct event *event = event_create(client->event);
event_set_ptr(event, MASTER_SERVICE_VAR_EXPAND_TABLE, (void *)tab);
- if (master_service_settings_parser_get(event, set_parser,
+ if (master_service_settings_parser_get(event, client->set_parser,
&lda_setting_parser_info, 0,
&client->lda_set, &error) < 0 ||
- master_service_settings_parser_get(event, set_parser,
+ master_service_settings_parser_get(event, client->set_parser,
&lmtp_setting_parser_info, 0,
&client->lmtp_set, &error) < 0)
i_fatal("%s", error);
client_state_reset(client);
+ settings_parser_unref(&client->set_parser);
master_service_settings_free(client->lda_set);
master_service_settings_free(client->lmtp_set);
event_unref(&client->event);