From: Stephan Bosch Date: Wed, 13 Nov 2019 21:36:07 +0000 (+0100) Subject: lib-smtp: smtp-server-transaction - Make the recipient address used in trace headers... X-Git-Tag: 2.3.9~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a5d50b55bf6159e379f05aa52b5395784f970fe5;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: smtp-server-transaction - Make the recipient address used in trace headers configurable. --- diff --git a/src/lib-smtp/smtp-server-transaction.c b/src/lib-smtp/smtp-server-transaction.c index a8481abbc9..e674fcbee9 100644 --- a/src/lib-smtp/smtp-server-transaction.c +++ b/src/lib-smtp/smtp-server-transaction.c @@ -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 */ diff --git a/src/lib-smtp/smtp-server.h b/src/lib-smtp/smtp-server.h index d1dfc9c176..1d1eea2560 100644 --- a/src/lib-smtp/smtp-server.h +++ b/src/lib-smtp/smtp-server.h @@ -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 diff --git a/src/lmtp/lmtp-commands.c b/src/lmtp/lmtp-commands.c index 4bac980ab9..6a31213494 100644 --- a/src/lmtp/lmtp-commands.c +++ b/src/lmtp/lmtp-commands.c @@ -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)); diff --git a/src/submission/submission-commands.c b/src/submission/submission-commands.c index 6c6b90aced..53936c1613 100644 --- a/src/submission/submission-commands.c +++ b/src/submission/submission-commands.c @@ -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(