]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lmtp: lmtp-proxy - Add lmtp_verbose_replies setting.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 7 Dec 2021 00:51:45 +0000 (01:51 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 10 Jan 2022 06:31:48 +0000 (06:31 +0000)
It causes the proxy to return errors with full details in replies to the LMTP
client.

src/lmtp/lmtp-proxy.c
src/lmtp/lmtp-settings.c
src/lmtp/lmtp-settings.h

index 7c5cb960e711b66c3eb7e857d6198651632d9021..18f8458d7717d091f05b523fc582968dc719c0f6 100644 (file)
@@ -229,6 +229,7 @@ lmtp_proxy_get_connection(struct lmtp_proxy *proxy,
        };
        struct smtp_client_settings lmtp_set;
        struct smtp_server_transaction *trans = proxy->trans;
+       struct client *client = proxy->client;
        struct lmtp_proxy_connection *conn;
        enum smtp_client_connection_ssl_mode ssl_mode;
        struct ssl_iostream_settings ssl_set;
@@ -265,6 +266,7 @@ lmtp_proxy_get_connection(struct lmtp_proxy *proxy,
        lmtp_set.peer_trusted = !conn->set.proxy_not_trusted;
        lmtp_set.forced_capabilities = SMTP_CAPABILITY__ORCPT;
        lmtp_set.mail_send_broken_path = TRUE;
+       lmtp_set.verbose_user_errors = client->lmtp_set->lmtp_verbose_replies;
 
        if (conn->set.hostip.family != 0) {
                conn->lmtp_conn = smtp_client_connection_create_ip(
@@ -297,9 +299,18 @@ static void
 lmtp_proxy_handle_connection_error(struct lmtp_proxy_recipient *lprcpt,
                                   const struct smtp_reply *reply)
 {
-       struct smtp_server_recipient *rcpt = lprcpt->rcpt->rcpt;
+       struct lmtp_recipient *lrcpt = lprcpt->rcpt;
+       struct client *client = lrcpt->client;
+       struct smtp_server_recipient *rcpt = lrcpt->rcpt;
        const char *detail = "";
 
+       if (client->lmtp_set->lmtp_verbose_replies) {
+               smtp_server_command_fail(rcpt->cmd->cmd, 451, "4.4.0",
+                                        "Proxy failed: %s",
+                                        smtp_reply_log(reply));
+               return;
+       }
+
        switch (reply->status) {
        case SMTP_CLIENT_COMMAND_ERROR_ABORTED:
                break;
index 5cec2bea5ad0202745f166470c51b19b3327cf24..1d9ecb25468a01fb87e65197afb8f3fd582767fb 100644 (file)
@@ -63,6 +63,7 @@ static const struct setting_define lmtp_setting_defines[] = {
        DEF(BOOL, lmtp_save_to_detail_mailbox),
        DEF(BOOL, lmtp_rcpt_check_quota),
        DEF(BOOL, lmtp_add_received_header),
+       DEF(BOOL, lmtp_verbose_replies),
        DEF(UINT, lmtp_user_concurrency_limit),
        DEF(ENUM, lmtp_hdr_delivery_address),
        DEF(STR_VARS, lmtp_rawlog_dir),
@@ -84,6 +85,7 @@ static const struct lmtp_settings lmtp_default_settings = {
        .lmtp_save_to_detail_mailbox = FALSE,
        .lmtp_rcpt_check_quota = FALSE,
        .lmtp_add_received_header = TRUE,
+       .lmtp_verbose_replies = FALSE,
        .lmtp_user_concurrency_limit = 0,
        .lmtp_hdr_delivery_address = "final:none:original",
        .lmtp_rawlog_dir = "",
index 6b7bcc54a1f599a90a0812d758c81c3a01384d4f..3b2eaa33803611551f3e57932a1d1b0f49d9a622 100644 (file)
@@ -23,6 +23,7 @@ struct lmtp_settings {
        bool lmtp_save_to_detail_mailbox;
        bool lmtp_rcpt_check_quota;
        bool lmtp_add_received_header;
+       bool lmtp_verbose_replies;
        unsigned int lmtp_user_concurrency_limit;
        const char *lmtp_hdr_delivery_address;
        const char *lmtp_rawlog_dir;