]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-server-transaction - Make the recipient address used in trace headers...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 13 Nov 2019 21:36:07 +0000 (22:36 +0100)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 25 Nov 2019 10:30:07 +0000 (12:30 +0200)
src/lib-smtp/smtp-server-transaction.c
src/lib-smtp/smtp-server.h
src/lmtp/lmtp-commands.c
src/submission/submission-commands.c

index a8481abbc93f713c2b57108fc3bd66d944d1f78b..e674fcbee987eddc094e137b972febf68ce51463 100644 (file)
@@ -294,8 +294,9 @@ void smtp_server_transaction_fail_data(struct smtp_server_transaction *trans,
        }
 }
 
-void smtp_server_transaction_write_trace_record(string_t *str,
-       struct smtp_server_transaction *trans)
+void smtp_server_transaction_write_trace_record(
+       string_t *str, struct smtp_server_transaction *trans,
+       enum smtp_server_trace_rcpt_to_address rcpt_to_address)
 {
        struct smtp_server_connection *conn = trans->conn;
        const struct smtp_server_helo_data *helo_data = &conn->helo;
@@ -305,7 +306,17 @@ void smtp_server_transaction_write_trace_record(string_t *str,
                struct smtp_server_recipient *const *rcpts =
                        array_front(&trans->rcpt_to);
 
-               rcpt_to = smtp_address_encode(rcpts[0]->path);
+               switch (rcpt_to_address) {
+               case SMTP_SERVER_TRACE_RCPT_TO_ADDRESS_NONE:
+                       break;
+               case SMTP_SERVER_TRACE_RCPT_TO_ADDRESS_FINAL:
+                       rcpt_to = smtp_address_encode(rcpts[0]->path);
+                       break;
+               case SMTP_SERVER_TRACE_RCPT_TO_ADDRESS_ORIGINAL:
+                       rcpt_to = smtp_address_encode(
+                               smtp_server_recipient_get_original(rcpts[0]));
+                       break;
+               }
        }
 
        /* from */
index d1dfc9c176fa3a1bb7bf6149e855cca93d3389c6..1d1eea256036a110e2518acd218480a85c539937 100644 (file)
@@ -127,6 +127,15 @@ void smtp_server_recipient_remove_hook(
  * Transaction
  */
 
+enum smtp_server_trace_rcpt_to_address {
+       /* Don't add recipient address to trace header. */
+       SMTP_SERVER_TRACE_RCPT_TO_ADDRESS_NONE,
+       /* Add final recipient address to trace header. */
+       SMTP_SERVER_TRACE_RCPT_TO_ADDRESS_FINAL,
+       /* Add original recipient address to trace header. */
+       SMTP_SERVER_TRACE_RCPT_TO_ADDRESS_ORIGINAL,
+};
+
 enum smtp_server_transaction_flags {
        SMTP_SERVER_TRANSACTION_FLAG_REPLY_PER_RCPT = BIT(0),
 };
@@ -165,8 +174,9 @@ void smtp_server_transaction_fail_data(
        unsigned int status, const char *enh_code,
        const char *fmt, va_list args) ATTR_FORMAT(5, 0);
 
-void smtp_server_transaction_write_trace_record(string_t *str,
-       struct smtp_server_transaction *trans);
+void smtp_server_transaction_write_trace_record(
+       string_t *str, struct smtp_server_transaction *trans,
+       enum smtp_server_trace_rcpt_to_address rcpt_to_address);
 
 /*
  * Callbacks
index 4bac980ab9e3139cf8caa180395ddc376ac009cf..6a312134941f8ac0b9ba580fb3848581dea29126 100644 (file)
@@ -114,8 +114,10 @@ cmd_data_create_added_headers(struct client *client,
 
        /* headers for local and proxied messages */
        proxy_offset = str_len(str);
-       if (client->lmtp_set->lmtp_add_received_header)
-               smtp_server_transaction_write_trace_record(str, trans);
+       if (client->lmtp_set->lmtp_add_received_header) {
+               smtp_server_transaction_write_trace_record(
+                       str, trans, SMTP_SERVER_TRACE_RCPT_TO_ADDRESS_FINAL);
+       }
 
        client->state.added_headers_local =
                p_strdup(client->state_pool, str_c(str));
index 6c6b90aced96daeabc4a66c33687d2e22c4eaa55..53936c1613a84ae9e9006a1e74d152b1e4285493 100644 (file)
@@ -242,7 +242,8 @@ int cmd_data_continue(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
 
        /* prepend our own headers */
        added_headers = t_str_new(200);
-       smtp_server_transaction_write_trace_record(added_headers, trans);
+       smtp_server_transaction_write_trace_record(
+               added_headers, trans, SMTP_SERVER_TRACE_RCPT_TO_ADDRESS_FINAL);
 
        i_stream_seek(data_input, 0);
        inputs[0] = i_stream_create_copy_from_data(