From: Stephan Bosch Date: Wed, 9 Mar 2022 01:30:12 +0000 (+0100) Subject: submission-login: Add workaround for SMTP backend that is not Dovecot. X-Git-Tag: 2.3.19~48 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a987d6b01f5a4da285dd58b92f5b6d1e9d9d5981;p=thirdparty%2Fdovecot%2Fcore.git submission-login: Add workaround for SMTP backend that is not Dovecot. Adds workaround called "exotic-backend". --- diff --git a/src/submission-login/client-authenticate.c b/src/submission-login/client-authenticate.c index 18db123997..e1a5ae2c3c 100644 --- a/src/submission-login/client-authenticate.c +++ b/src/submission-login/client-authenticate.c @@ -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); diff --git a/src/submission-login/submission-login-settings.c b/src/submission-login/submission-login-settings.c index 316748f1f1..b35f97f3b1 100644 --- a/src/submission-login/submission-login-settings.c +++ b/src/submission-login/submission-login-settings.c @@ -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 } }; diff --git a/src/submission-login/submission-login-settings.h b/src/submission-login/submission-login-settings.h index 03a40a961f..57334b46d1 100644 --- a/src/submission-login/submission-login-settings.h +++ b/src/submission-login/submission-login-settings.h @@ -4,6 +4,7 @@ /* */ enum submission_login_client_workarounds { SUBMISSION_LOGIN_WORKAROUND_IMPLICIT_AUTH_EXTERNAL = BIT(0), + SUBMISSION_LOGIN_WORKAROUND_EXOTIC_BACKEND = BIT(1), }; /* */ diff --git a/src/submission/submission-settings.c b/src/submission/submission-settings.c index 0b96e1709e..6764b3d671 100644 --- a/src/submission/submission-settings.c +++ b/src/submission/submission-settings.c @@ -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 } };