}
}
-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;
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 */
* 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),
};
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
/* 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));
/* 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(