TLS reports being issued for sent TLS reports (infinite loop) (closes #1301)

This commit is contained in:
mdecimus 2025-06-02 12:18:51 +02:00
parent d1f5010378
commit 01ca8e2e3b
3 changed files with 6 additions and 3 deletions

View file

@ -42,7 +42,7 @@ use crate::{
}; };
use super::{NextHop, TlsStrategy, lookup::ToNextHop, mta_sts, session::SessionParams}; use super::{NextHop, TlsStrategy, lookup::ToNextHop, mta_sts, session::SessionParams};
use crate::queue::{Domain, Error, QueueEnvelope, QueuedMessage, Status}; use crate::queue::{Domain, Error, FROM_REPORT, QueueEnvelope, QueuedMessage, Status};
impl QueuedMessage { impl QueuedMessage {
pub fn try_deliver(self, server: Server) { pub fn try_deliver(self, server: Server) {
@ -300,7 +300,7 @@ impl QueuedMessage {
interval @ (AggregateFrequency::Hourly interval @ (AggregateFrequency::Hourly
| AggregateFrequency::Daily | AggregateFrequency::Daily
| AggregateFrequency::Weekly) | AggregateFrequency::Weekly)
if is_smtp => if is_smtp && (message.flags & FROM_REPORT == 0) =>
{ {
let time = Instant::now(); let time = Instant::now();
match server match server

View file

@ -121,6 +121,8 @@ pub struct Recipient {
pub orcpt: Option<String>, pub orcpt: Option<String>,
} }
pub const FROM_REPORT: u64 = 1 << 32;
pub const RCPT_DSN_SENT: u64 = 1 << 32; pub const RCPT_DSN_SENT: u64 = 1 << 32;
pub const RCPT_STATUS_CHANGED: u64 = 2 << 32; pub const RCPT_STATUS_CHANGED: u64 = 2 << 32;

View file

@ -25,7 +25,7 @@ use tokio::io::{AsyncRead, AsyncWrite};
use crate::{ use crate::{
core::Session, core::Session,
inbound::DkimSign, inbound::DkimSign,
queue::{DomainPart, Message, MessageSource, spool::SmtpSpool}, queue::{DomainPart, FROM_REPORT, Message, MessageSource, spool::SmtpSpool},
}; };
pub mod analysis; pub mod analysis;
@ -149,6 +149,7 @@ impl SmtpReporting for Server {
} }
// Queue message // Queue message
message.flags |= FROM_REPORT;
message message
.queue( .queue(
signature.as_deref(), signature.as_deref(),