From: Stephan Bosch Date: Fri, 1 Oct 2021 22:29:29 +0000 (+0200) Subject: lib-smtp: smtp-server-cmd-xclient - Parse XCLIENT SESSION field. X-Git-Tag: 2.3.18~243 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8fb86c24beb190fd6195cbb698b738c2b6fb8941;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: smtp-server-cmd-xclient - Parse XCLIENT SESSION field. --- diff --git a/src/lib-smtp/smtp-server-cmd-xclient.c b/src/lib-smtp/smtp-server-cmd-xclient.c index 91699871f0..d926b45095 100644 --- a/src/lib-smtp/smtp-server-cmd-xclient.c +++ b/src/lib-smtp/smtp-server-cmd-xclient.c @@ -183,6 +183,10 @@ void smtp_server_cmd_xclient(struct smtp_server_cmd_ctx *cmd, "Invalid PROTO parameter"); return; } + } else if (strcmp(param.keyword, "SESSION") == 0) { + if (strcasecmp(param.value, "[UNAVAILABLE]") == 0) + continue; + proxy_data->session = p_strdup(cmd->pool, param.value); } else if (strcmp(param.keyword, "TIMEOUT") == 0) { if (str_to_uint(param.value, &proxy_data->timeout_secs) < 0) { diff --git a/src/lib-smtp/smtp-server-reply.c b/src/lib-smtp/smtp-server-reply.c index 5c68df0bf3..60342db0b2 100644 --- a/src/lib-smtp/smtp-server-reply.c +++ b/src/lib-smtp/smtp-server-reply.c @@ -856,7 +856,7 @@ void smtp_server_reply_ehlo_add_vrfy(struct smtp_server_reply *reply) void smtp_server_reply_ehlo_add_xclient(struct smtp_server_reply *reply) { static const char *base_fields = - "ADDR PORT PROTO HELO LOGIN TTL TIMEOUT"; + "ADDR PORT PROTO HELO LOGIN SESSION TTL TIMEOUT"; struct smtp_server_cmd_ctx *cmd = &reply->command->context; struct smtp_server_connection *conn = cmd->conn; diff --git a/src/submission-login/client.c b/src/submission-login/client.c index bcfade61cd..c4e4b4dac8 100644 --- a/src/submission-login/client.c +++ b/src/submission-login/client.c @@ -93,7 +93,7 @@ static void submission_client_create(struct client *client, void **other_sets) { static const char *const xclient_extensions[] = - { "SESSION", "FORWARD", NULL }; + { "FORWARD", NULL }; struct submission_client *subm_client = container_of(client, struct submission_client, common); struct smtp_server_settings smtp_set; @@ -181,6 +181,10 @@ client_connection_cmd_xclient(void *context, client->common.remote_port = data->source_port; if (data->ttl_plus_1 > 0) client->common.proxy_ttl = data->ttl_plus_1 - 1; + if (data->session != NULL) { + client->common.session_id = + p_strdup(client->common.pool, data->session); + } for (i = 0; i < data->extra_fields_count; i++) { const char *name = data->extra_fields[i].name; @@ -200,11 +204,6 @@ client_connection_cmd_xclient(void *context, "Invalid FORWARD parameter"); } } - } else if (strcasecmp(name, "SESSION") == 0) { - if (client->common.session_id != NULL) - continue; - client->common.session_id = - p_strdup(client->common.pool, value); } } }