]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
submission-login: Add workaround for SMTP backend that is not Dovecot.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 9 Mar 2022 01:30:12 +0000 (02:30 +0100)
committerStephan Bosch <stephan.bosch@open-xchange.com>
Thu, 10 Mar 2022 17:07:50 +0000 (18:07 +0100)
Adds workaround called "exotic-backend".

src/submission-login/client-authenticate.c
src/submission-login/submission-login-settings.c
src/submission-login/submission-login-settings.h
src/submission/submission-settings.c

index afd086c9c752bdfd768243b4e1816bffc60a2cbc..d8a27bd47faf47eb01d1c404b17dc271028ec65c 100644 (file)
@@ -22,7 +22,11 @@ static void cmd_helo_reply(struct submission_client *subm_client,
                           struct smtp_server_cmd_helo *data)
 {
        struct client *client = &subm_client->common;
+       const struct submission_login_settings *set = subm_client->set;
        enum smtp_capability backend_caps = subm_client->backend_capabilities;
+       bool exotic_backend =
+               HAS_ALL_BITS(set->parsed_workarounds,
+                            SUBMISSION_LOGIN_WORKAROUND_EXOTIC_BACKEND);
        struct smtp_server_reply *reply;
 
        reply = smtp_server_reply_create_ehlo(cmd->cmd);
@@ -50,26 +54,37 @@ static void cmd_helo_reply(struct submission_client *subm_client,
                if ((backend_caps & SMTP_CAPABILITY_BINARYMIME) != 0 &&
                    (backend_caps & SMTP_CAPABILITY_CHUNKING) != 0)
                        smtp_server_reply_ehlo_add(reply, "BINARYMIME");
-               smtp_server_reply_ehlo_add_param(reply,
-                       "BURL", "imap");
-               smtp_server_reply_ehlo_add(reply,
-                       "CHUNKING");
+               if (!exotic_backend ||
+                   (backend_caps & SMTP_CAPABILITY_BURL) != 0) {
+                       smtp_server_reply_ehlo_add_param(reply, "BURL", "imap");
+               }
+               if (!exotic_backend ||
+                   (backend_caps & SMTP_CAPABILITY_CHUNKING) != 0) {
+                       smtp_server_reply_ehlo_add(reply,
+                               "CHUNKING");
+               }
                if ((backend_caps & SMTP_CAPABILITY_DSN) != 0)
                        smtp_server_reply_ehlo_add(reply, "DSN");
-               smtp_server_reply_ehlo_add(reply,
-                       "ENHANCEDSTATUSCODES");
+               if (!exotic_backend ||
+                   (backend_caps & SMTP_CAPABILITY_ENHANCEDSTATUSCODES) != 0) {
+                       smtp_server_reply_ehlo_add(
+                               reply, "ENHANCEDSTATUSCODES");
+               }
 
                if (subm_client->set->submission_max_mail_size > 0) {
                        smtp_server_reply_ehlo_add_param(reply,
                                "SIZE", "%"PRIuUOFF_T,
                                subm_client->set->submission_max_mail_size);
-               } else {
+               } else if (!exotic_backend ||
+                          (backend_caps & SMTP_CAPABILITY_SIZE) != 0) {
                        smtp_server_reply_ehlo_add(reply, "SIZE");
                }
 
                if (client_is_tls_enabled(client) && !client->tls)
                        smtp_server_reply_ehlo_add(reply, "STARTTLS");
-               smtp_server_reply_ehlo_add(reply, "PIPELINING");
+               if (!exotic_backend ||
+                   (backend_caps & SMTP_CAPABILITY_PIPELINING) != 0)
+                       smtp_server_reply_ehlo_add(reply, "PIPELINING");
                if ((backend_caps & SMTP_CAPABILITY_VRFY) != 0)
                        smtp_server_reply_ehlo_add(reply, "VRFY");
                smtp_server_reply_ehlo_add_xclient(reply);
index d5384d2bc6fc7579ecbdd2738ed493a68ff5b35f..5616fd17661feb951a291a237058ef6494923a76 100644 (file)
@@ -127,6 +127,8 @@ submission_login_client_workaround_list[] = {
        { "mailbox-for-path", 0 },
        { "implicit-auth-external",
          SUBMISSION_LOGIN_WORKAROUND_IMPLICIT_AUTH_EXTERNAL },
+       { "exotic-backend",
+         SUBMISSION_LOGIN_WORKAROUND_EXOTIC_BACKEND },
        { NULL, 0 }
 };
 
index 03a40a961ff815f9ca78fb41c1f3643d1ef6ff45..57334b46d1e8e0965ffb0959b460bf2fe964fc44 100644 (file)
@@ -4,6 +4,7 @@
 /* <settings checks> */
 enum submission_login_client_workarounds {
        SUBMISSION_LOGIN_WORKAROUND_IMPLICIT_AUTH_EXTERNAL      = BIT(0),
+       SUBMISSION_LOGIN_WORKAROUND_EXOTIC_BACKEND              = BIT(1),
 };
 /* </settings checks> */
 
index 7a4d60d020b806a1aa5e43f54c946a3ba18ea90c..86b92d724af918a97bb78de6f4423825bd98b578 100644 (file)
@@ -176,6 +176,7 @@ submission_client_workaround_list[] = {
        { "mailbox-for-path",
          SUBMISSION_WORKAROUND_MAILBOX_FOR_PATH },
        { "implicit-auth-external", 0 },
+       { "exotic-backend", 0 },
        { NULL, 0 }
 };