diff --git a/src/lib-smtp/smtp-server-cmd-rcpt.c b/src/lib-smtp/smtp-server-cmd-rcpt.c index 7b6fe66670..a3c5c27bc7 100644 --- a/src/lib-smtp/smtp-server-cmd-rcpt.c +++ b/src/lib-smtp/smtp-server-cmd-rcpt.c @@ -64,7 +64,8 @@ cmd_rcpt_completed(struct smtp_server_cmd_ctx *cmd, if (smtp_server_command_reply_is_forwarded(command)) (void)cmd_rcpt_check_state(cmd); - smtp_server_recipient_denied(rcpt); + smtp_server_recipient_denied( + rcpt, smtp_server_command_get_reply(cmd->cmd, 0)); return; } diff --git a/src/lib-smtp/smtp-server-private.h b/src/lib-smtp/smtp-server-private.h index af0f327c93..67c5773229 100644 --- a/src/lib-smtp/smtp-server-private.h +++ b/src/lib-smtp/smtp-server-private.h @@ -374,13 +374,15 @@ bool smtp_server_recipient_unref(struct smtp_server_recipient **_rcpt); void smtp_server_recipient_destroy(struct smtp_server_recipient **_rcpt); bool smtp_server_recipient_approved(struct smtp_server_recipient **_rcpt); -void smtp_server_recipient_denied(struct smtp_server_recipient *rcpt); +void smtp_server_recipient_denied(struct smtp_server_recipient *rcpt, + const struct smtp_server_reply *reply); void smtp_server_recipient_last_data(struct smtp_server_recipient *rcpt, struct smtp_server_cmd_ctx *cmd); void smtp_server_recipient_reset(struct smtp_server_recipient *rcpt); -void smtp_server_recipient_finished(struct smtp_server_recipient *rcpt); +void smtp_server_recipient_finished(struct smtp_server_recipient *rcpt, + const struct smtp_server_reply *reply); /* * Transaction diff --git a/src/lib-smtp/smtp-server-recipient.c b/src/lib-smtp/smtp-server-recipient.c index 8886e65295..d6adb6dcff 100644 --- a/src/lib-smtp/smtp-server-recipient.c +++ b/src/lib-smtp/smtp-server-recipient.c @@ -80,6 +80,17 @@ bool smtp_server_recipient_unref(struct smtp_server_recipient **_rcpt) &rcpt, SMTP_SERVER_RECIPIENT_HOOK_DESTROY)) i_unreached(); + if (!rcpt->finished) { + struct event_passthrough *e = + e = event_create_passthrough(rcpt->event)-> + set_name("smtp_server_transaction_rcpt_finished"); + e->add_int("status_code", 9000); + e->add_str("enhanced_code", "9.0.0"); + e->add_str("error", "Aborted"); + + e_debug(e->event(), "Aborted"); + } + event_unref(&rcpt->event); pool_unref(&rcpt->pool); return FALSE; @@ -97,6 +108,8 @@ bool smtp_server_recipient_approved(struct smtp_server_recipient **_rcpt) i_assert(trans != NULL); + e_debug(rcpt->event, "Approved"); + rcpt->cmd = NULL; smtp_server_transaction_add_rcpt(trans, rcpt); @@ -104,10 +117,18 @@ bool smtp_server_recipient_approved(struct smtp_server_recipient **_rcpt) _rcpt, SMTP_SERVER_RECIPIENT_HOOK_APPROVED); } -void smtp_server_recipient_denied(struct smtp_server_recipient *rcpt) +void smtp_server_recipient_denied(struct smtp_server_recipient *rcpt, + const struct smtp_server_reply *reply) { i_assert(!rcpt->finished); rcpt->finished = TRUE; + + struct event_passthrough *e = + event_create_passthrough(rcpt->event)-> + set_name("smtp_server_transaction_rcpt_finished"); + smtp_server_reply_add_to_event(reply, e); + + e_debug(e->event(), "Denied"); } void smtp_server_recipient_last_data(struct smtp_server_recipient *rcpt, @@ -121,12 +142,29 @@ void smtp_server_recipient_reset(struct smtp_server_recipient *rcpt) { i_assert(!rcpt->finished); rcpt->finished = TRUE; + + struct event_passthrough *e = + event_create_passthrough(rcpt->event)-> + set_name("smtp_server_transaction_rcpt_finished"); + e->add_int("status_code", 9000); + e->add_str("enhanced_code", "9.0.0"); + e->add_str("error", "Reset"); + + e_debug(e->event(), "Reset"); } -void smtp_server_recipient_finished(struct smtp_server_recipient *rcpt) +void smtp_server_recipient_finished(struct smtp_server_recipient *rcpt, + const struct smtp_server_reply *reply) { i_assert(!rcpt->finished); rcpt->finished = TRUE; + + struct event_passthrough *e = + event_create_passthrough(rcpt->event)-> + set_name("smtp_server_transaction_rcpt_finished"); + smtp_server_reply_add_to_event(reply, e); + + e_debug(e->event(), "Finished"); } #undef smtp_server_recipient_add_hook diff --git a/src/lib-smtp/smtp-server-transaction.c b/src/lib-smtp/smtp-server-transaction.c index d15c3fcbd3..09b3cc1815 100644 --- a/src/lib-smtp/smtp-server-transaction.c +++ b/src/lib-smtp/smtp-server-transaction.c @@ -239,7 +239,7 @@ void smtp_server_transaction_finished(struct smtp_server_transaction *trans, reply = smtp_server_command_get_reply(cmd->cmd, i); else reply = smtp_server_command_get_reply(cmd->cmd, 0); - smtp_server_recipient_finished(rcpts[i]); + smtp_server_recipient_finished(rcpts[i], reply); if (smtp_server_reply_is_success(reply)) rcpts_succeeded++;