From: Timo Sirainen Date: Tue, 7 Feb 2023 23:11:53 +0000 (+0200) Subject: lib-storage, global: mail_storage_service_read_settings() - Return duplicated parser X-Git-Tag: 2.4.0~2254 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3480ff902536261fb45e80174e60317561c223e9;p=thirdparty%2Fdovecot%2Fcore.git lib-storage, global: mail_storage_service_read_settings() - Return duplicated parser This will simplify following changes. --- diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index 7b933b95ee..cce1b32ab0 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -1037,7 +1037,9 @@ int mail_storage_service_read_settings(struct mail_storage_service_ctx *ctx, 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; } @@ -1194,15 +1196,17 @@ mail_storage_service_lookup_real(struct mail_storage_service_ctx *ctx, 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; } @@ -1236,7 +1240,9 @@ mail_storage_service_lookup_real(struct mail_storage_service_ctx *ctx, 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; } @@ -1248,7 +1254,9 @@ mail_storage_service_lookup_real(struct mail_storage_service_ctx *ctx, /* 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; } @@ -1258,7 +1266,6 @@ mail_storage_service_lookup_real(struct mail_storage_service_ctx *ctx, 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( @@ -1283,6 +1290,7 @@ mail_storage_service_lookup_real(struct mail_storage_service_ctx *ctx, event_unref(&event); pool_unref(&temp_pool); pool_unref(&user_pool); + settings_parser_unref(&set_parser); return ret; } event_add_str(event, "user", username); @@ -1305,7 +1313,7 @@ mail_storage_service_lookup_real(struct mail_storage_service_ctx *ctx, 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"; @@ -1618,6 +1626,7 @@ void mail_storage_service_init_settings(struct mail_storage_service_ctx *ctx, 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); diff --git a/src/lmtp/lmtp-client.c b/src/lmtp/lmtp-client.c index 978fdf6759..485e467e54 100644 --- a/src/lmtp/lmtp-client.c +++ b/src/lmtp/lmtp-client.c @@ -100,7 +100,6 @@ static void client_load_modules(struct client *client) 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); @@ -113,22 +112,22 @@ static void client_read_settings(struct client *client, bool ssl) 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); @@ -267,6 +266,7 @@ client_default_destroy(struct client *client) 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); diff --git a/src/lmtp/lmtp-client.h b/src/lmtp/lmtp-client.h index 9373f7b4b7..dd83350d00 100644 --- a/src/lmtp/lmtp-client.h +++ b/src/lmtp/lmtp-client.h @@ -72,6 +72,7 @@ struct client { struct lmtp_client_vfuncs v; struct event *event; + struct setting_parser_context *set_parser; const struct lda_settings *lda_set; const struct lmtp_settings *lmtp_set; diff --git a/src/plugins/quota/quota-status.c b/src/plugins/quota/quota-status.c index 34147c1ee7..7e4d5a9628 100644 --- a/src/plugins/quota/quota-status.c +++ b/src/plugins/quota/quota-status.c @@ -321,6 +321,7 @@ static void main_init(void) value = mail_user_set_plugin_getenv(mail_set, "quota_status_nouser"); nouser_reply = i_strdup(value != NULL ? value : "REJECT Unknown user"); master_service_settings_free(mail_set); + settings_parser_unref(&set_parser); } static void main_deinit(void)