From fcc5097d0e8e6a5f2245f0736769710ed902ef63 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Sun, 26 Jul 2026 22:53:10 +0200 Subject: [PATCH] Report relayhost preparation failures --- src/agents/smtp/smtpc.c | 46 +++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/src/agents/smtp/smtpc.c b/src/agents/smtp/smtpc.c index a6a0efa..74073a9 100755 --- a/src/agents/smtp/smtpc.c +++ b/src/agents/smtp/smtpc.c @@ -864,6 +864,7 @@ DeliverRelay(SMTPClient *queue, RecipStruct *recipient, CURLcode code = CURLE_FAILED_INIT; long response = 0; BOOL success = FALSE; + BongoMailAuthStatus senderStatus; recipient->Result = DELIVER_TRY_LATER; if (route == NULL || route->host == NULL || route->host[0] == '\0' || @@ -877,13 +878,26 @@ DeliverRelay(SMTPClient *queue, RecipStruct *recipient, strcmp(route->tlsSecurityLevel, "none") == 0) || strpbrk(route->host, "/?#@\r\n") != NULL || ((route->username == NULL || route->username[0] == '\0') != - (route->password == NULL || route->password[0] == '\0')) || - GetEnvelopeSender(queue, rewrittenSender, sizeof(rewrittenSender), - &envelopeSender) != BONGO_MAILAUTH_OK) goto done; + (route->password == NULL || route->password[0] == '\0'))) { + Log(LOG_ERROR, "Invalid relay route for message %s", + queue != NULL && queue->qID != NULL ? queue->qID : "(unknown)"); + goto done; + } + senderStatus = GetEnvelopeSender( + queue, rewrittenSender, sizeof(rewrittenSender), &envelopeSender); + if (senderStatus != BONGO_MAILAUTH_OK) { + Log(LOG_ERROR, + "Cannot prepare relay envelope sender for message %s (status %d)", + queue->qID, (int)senderStatus); + goto done; + } if (!BongoMailboxDomainToASCII( envelopeSender, canonicalSender, sizeof(canonicalSender)) || !BongoMailboxDomainToASCII( recipient->To, canonicalRecipient, sizeof(canonicalRecipient))) { + Log(LOG_ERROR, + "Cannot canonicalize relay envelope for message %s to %s", + queue->qID, recipient->To); recipient->Result = DELIVER_FAILURE; goto done; } @@ -894,6 +908,8 @@ DeliverRelay(SMTPClient *queue, RecipStruct *recipient, if (requiresSMTPUTF8 && (!SMTPStringIsValidUTF8(envelopeSender) || !SMTPStringIsValidUTF8(canonicalRecipient))) { + Log(LOG_ERROR, "Invalid UTF-8 relay envelope for message %s", + queue->qID); recipient->Result = DELIVER_FAILURE; goto done; } @@ -907,6 +923,8 @@ DeliverRelay(SMTPClient *queue, RecipStruct *recipient, (requiresSMTPUTF8 || (queue->flags & MSG_FLAG_ENCODING_8BITM)) ? " BODY=8BITMIME" : ""); if (written < 0 || (size_t) written >= sizeof(curlMailFrom)) { + Log(LOG_ERROR, "Relay MAIL FROM is too long for message %s", + queue->qID); recipient->Result = DELIVER_FAILURE; goto done; } @@ -914,12 +932,28 @@ DeliverRelay(SMTPClient *queue, RecipStruct *recipient, } if (snprintf(url, sizeof(url), "%s://%s:%d", route->tlsWrapperMode ? "smtps" : "smtp", - route->host, route->port) >= (int) sizeof(url)) goto done; + route->host, route->port) >= (int) sizeof(url)) { + Log(LOG_ERROR, "Relay URL is too long for message %s", queue->qID); + goto done; + } message = tmpfile(); - if (message == NULL || QueueMessageToFile(queue, message, &messageSize) != 0) goto done; + if (message == NULL) { + Log(LOG_ERROR, "Cannot allocate relay message file for queue %s", + queue->qID); + goto done; + } + if (QueueMessageToFile(queue, message, &messageSize) != 0) { + Log(LOG_ERROR, "Cannot retrieve relay message body for queue %s", + queue->qID); + goto done; + } curl = curl_easy_init(); recipients = curl_slist_append(recipients, canonicalRecipient); - if (curl == NULL || recipients == NULL) goto done; + if (curl == NULL || recipients == NULL) { + Log(LOG_ERROR, "Cannot initialize relay transport for queue %s", + queue->qID); + goto done; + } curl_easy_setopt(curl, CURLOPT_URL, url); if (route->username != NULL && route->username[0] != '\0') { curl_easy_setopt(curl, CURLOPT_USERNAME, route->username);