From 8bc047262bad20c8255bc003dcb9e3485fefeedc Mon Sep 17 00:00:00 2001 From: Karl Fleischmann Date: Tue, 16 Jan 2024 13:31:14 +0100 Subject: [PATCH] imap-login: Convert imap_id_send to a strlist setting --- src/imap-login/imap-login-cmd-id.c | 5 ++++- src/imap-login/imap-login-settings.c | 12 ++++++++++-- src/imap-login/imap-login-settings.h | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/imap-login/imap-login-cmd-id.c b/src/imap-login/imap-login-cmd-id.c index 273a171c53..77ce670b81 100644 --- a/src/imap-login/imap-login-cmd-id.c +++ b/src/imap-login/imap-login-cmd-id.c @@ -287,6 +287,8 @@ static void cmd_id_copy_params(struct imap_client *client, static void cmd_id_finish(struct imap_client *client) { + const char *id_param_string; + if (!client->id_logged) { client->id_logged = TRUE; @@ -299,9 +301,10 @@ static void cmd_id_finish(struct imap_client *client) } } + id_param_string = t_array_const_string_join(&client->set->imap_id_send, " "); client_send_raw(&client->common, t_strdup_printf("* ID %s\r\n", - imap_id_reply_generate(client->set->imap_id_send))); + imap_id_reply_generate(id_param_string))); const char *msg = "ID completed."; if (client->common.connection_trusted) { if (client->cmd_id->params->multiplex && diff --git a/src/imap-login/imap-login-settings.c b/src/imap-login/imap-login-settings.c index ff42607f2c..1d8746cfa1 100644 --- a/src/imap-login/imap-login-settings.c +++ b/src/imap-login/imap-login-settings.c @@ -52,25 +52,33 @@ const struct setting_keyvalue imap_login_service_settings_defaults[] = { static const struct setting_define imap_login_setting_defines[] = { DEF(STR, imap_capability), - DEF(STR, imap_id_send), DEF(BOOL, imap_literal_minus), DEF(BOOL, imap_id_retain), + { .type = SET_STRLIST, .key = "imap_id_send", + .offset = offsetof(struct imap_login_settings, imap_id_send) }, + SETTING_DEFINE_LIST_END }; static const struct imap_login_settings imap_login_default_settings = { .imap_capability = "", - .imap_id_send = "name *", + .imap_id_send = ARRAY_INIT, .imap_literal_minus = FALSE, .imap_id_retain = FALSE, }; +static const struct setting_keyvalue imap_login_default_settings_keyvalue[] = { + { "imap_id_send/name", DOVECOT_NAME }, + { NULL, NULL }, +}; + const struct setting_parser_info imap_login_setting_parser_info = { .name = "imap_login", .defines = imap_login_setting_defines, .defaults = &imap_login_default_settings, + .default_settings = imap_login_default_settings_keyvalue, .struct_size = sizeof(struct imap_login_settings), .pool_offset1 = 1 + offsetof(struct imap_login_settings, pool), diff --git a/src/imap-login/imap-login-settings.h b/src/imap-login/imap-login-settings.h index e85b0ff403..cfdf5b843e 100644 --- a/src/imap-login/imap-login-settings.h +++ b/src/imap-login/imap-login-settings.h @@ -4,7 +4,7 @@ struct imap_login_settings { pool_t pool; const char *imap_capability; - const char *imap_id_send; + ARRAY_TYPE(const_string) imap_id_send; bool imap_literal_minus; bool imap_id_retain; }; -- 2.47.3