]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-server-cmd-xclient - Parse XCLIENT SESSION field.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 1 Oct 2021 22:29:29 +0000 (00:29 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Wed, 6 Oct 2021 21:58:03 +0000 (21:58 +0000)
src/lib-smtp/smtp-server-cmd-xclient.c
src/lib-smtp/smtp-server-reply.c
src/submission-login/client.c

index 91699871f089f2b8b713c70729e5e7ae4d0d0b67..d926b45095a202e9b604218e13c5c1924f222e83 100644 (file)
@@ -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) {
index 5c68df0bf3d97466579c7e49606eb1b8159cc05b..60342db0b26fe9ccd6a8d36b224fab122b36cac6 100644 (file)
@@ -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;
 
index bcfade61cd74f60c4dc79581f937485b0944d7b3..c4e4b4dac8523e8d1b88ce681291d82f70ac8e2b 100644 (file)
@@ -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);
                }
        }
 }