From 39deb9c502d0d83242b88c92f902314affce8f82 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sat, 21 Jun 2025 16:34:03 +0200 Subject: [PATCH] lib-smtp: smtp-client-transaction - Prevent logging a spurious abort event for an approved recipient --- src/lib-smtp/smtp-client-private.h | 1 + src/lib-smtp/smtp-client-transaction.c | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/lib-smtp/smtp-client-private.h b/src/lib-smtp/smtp-client-private.h index 7d58c7875f..f226ac2ee8 100644 --- a/src/lib-smtp/smtp-client-private.h +++ b/src/lib-smtp/smtp-client-private.h @@ -91,6 +91,7 @@ struct smtp_client_transaction_rcpt { bool external_pool:1; bool queued:1; bool finished:1; + bool discarded:1; }; struct smtp_client_transaction { diff --git a/src/lib-smtp/smtp-client-transaction.c b/src/lib-smtp/smtp-client-transaction.c index 0112021f3c..eb5ed75ed7 100644 --- a/src/lib-smtp/smtp-client-transaction.c +++ b/src/lib-smtp/smtp-client-transaction.c @@ -223,7 +223,7 @@ smtp_client_transaction_rcpt_free( trans->rcpts_count--; } - if (!rcpt->finished) { + if (!rcpt->finished && !rcpt->discarded) { struct smtp_reply failure; trans->rcpts_aborted++; @@ -247,6 +247,19 @@ smtp_client_transaction_rcpt_free( } } +static void +smtp_client_transaction_rcpt_discard( + struct smtp_client_transaction_rcpt **_rcpt) +{ + struct smtp_client_transaction_rcpt *rcpt = *_rcpt; + + if (rcpt == NULL) + return; + + rcpt->discarded = TRUE; + smtp_client_transaction_rcpt_free(_rcpt); +} + static void smtp_client_transaction_rcpt_approved( struct smtp_client_transaction_rcpt **_rcpt) @@ -285,8 +298,8 @@ smtp_client_transaction_rcpt_approved( rcpt->event = prcpt->event; event_ref(rcpt->event); - /* Free the old object, thereby removing it from the queue */ - smtp_client_transaction_rcpt_free(&prcpt); + /* Discard the old object, thereby removing it from the queue */ + smtp_client_transaction_rcpt_discard(&prcpt); } /* Recipient is approved */ -- 2.47.3