Report relayhost preparation failures
Debian Trixie package bundle / packages (push) Successful in 22m23s

This commit is contained in:
Mario Fetka
2026-07-26 22:53:10 +02:00
parent 45623e3e87
commit fcc5097d0e
+40 -6
View File
@@ -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);