]> 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)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 11 Mar 2022 07:13:57 +0000 (09:13 +0200)
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 18db1239975e1c7b97a292f4fa2f685d3db98578..e1a5ae2c3c5118d571fea6825773774b3f18140e 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 316748f1f18e379b552f2313252fd4024b188cbc..b35f97f3b1051d435578f5657284141f2d62bcc8 100644 (file)
@@ -115,6 +115,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 0b96e1709e3266a420fd9a1cf6cf7db2441f7107..6764b3d671bff9ee55294de7d8ebdbee4264857a 100644 (file)
@@ -172,6 +172,7 @@ submission_client_workaround_list[] = {
        { "mailbox-for-path",
          SUBMISSION_WORKAROUND_MAILBOX_FOR_PATH },
        { "implicit-auth-external", 0 },
+       { "exotic-backend", 0 },
        { NULL, 0 }
 };