Report relayhost preparation failures
Debian Trixie package bundle / packages (push) Successful in 22m23s
Debian Trixie package bundle / packages (push) Successful in 22m23s
This commit is contained in:
+40
-6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user