]> git.proxmox.com Git - pmg-log-tracker.git/commitdiff
Introduce before queue dstatus
authorStoiko Ivanov <s.ivanov@proxmox.com>
Thu, 30 Apr 2020 15:01:49 +0000 (17:01 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 6 May 2020 11:12:13 +0000 (13:12 +0200)
Currently the status of a before queue filtered mail is the status of the
downstream delivery in case the downstream rejects or defers a mail.

This information is too little to distinguish between a mail which went
through the rule-system, and a locally generated one
(e.g. bounce or spamreport).

By introducing 3 new distinct dstatus values we can use the information to
correctly display the status of a mail in the GUI.

Reviewed-By: Mira Limbeck <m.limbeck@proxmox.com>
Tested-By: Mira Limbeck <m.limbeck@proxmox.com>
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
src/main.rs
tests/test_output_before_queue
tests/test_output_before_queue_host
tests/test_output_before_queue_qid

index 7c4b71a5730929737932f0ce639133c382d6fba2..64f3e47e5ad413106419899bf9d2dd871b231b80 100644 (file)
@@ -427,10 +427,23 @@ fn handle_lmtp_message(msg: &[u8], parser: &mut Parser, complete_line: &[u8]) {
         None => return,
     };
 
+    let mut dstatus = DStatus::Dsn(dsn);
+
+    // the dsn (enhanced status code can only have a class of 2, 4 or 5
+    // see https://tools.ietf.org/html/rfc3463
+    if qe.borrow_mut().bq_filtered {
+        dstatus = match dsn {
+            2 => DStatus::BqPass,
+            4 => DStatus::BqDefer,
+            5 => DStatus::BqReject,
+            _ => return,
+        }
+
+    }
     qe.borrow_mut().add_to_entry(
         to,
         relay,
-        DStatus::Dsn(dsn),
+        dstatus,
         parser.current_record_state.timestamp,
     );
 
@@ -761,6 +774,9 @@ enum DStatus {
     Block,
     Greylist,
     Noqueue,
+    BqPass,
+    BqDefer,
+    BqReject,
     Dsn(u32),
 }
 
@@ -779,6 +795,9 @@ impl std::fmt::Display for DStatus {
             DStatus::Block => 'B',
             DStatus::Greylist => 'G',
             DStatus::Noqueue => 'N',
+            DStatus::BqPass => 'P',
+            DStatus::BqDefer => 'D',
+            DStatus::BqReject => 'R',
             DStatus::Dsn(v) => std::char::from_digit(*v, 10).unwrap(),
         };
         write!(f, "{}", c)
index 46e90dc80e040587a9c3c9e60a986471a051a1c7..e51710d2d175501291f2ba1024a339e112432cda 100644 (file)
@@ -48,10 +48,10 @@ CTIME: 5FDCCD39
 SIZE: 7298
 CLIENT: localhost.localdomain[127.0.0.1],
 MSGID: <xyz>
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test4@localhost> (192.168.22.40[192.168.22.40]:25)
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test3@localhost> (192.168.22.40[192.168.22.40]:25)
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test2@localhost> (192.168.22.40[192.168.22.40]:25)
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test1@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test4@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test3@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test2@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test1@localhost> (192.168.22.40[192.168.22.40]:25)
 SMTP:
 L0000001C Dec 18 15:36:32 proxmox-new postfix/smtpd[29902]: connect from test.localdomain[192.168.22.40]
 L0000001D Dec 18 15:36:33 proxmox-new postfix/smtpd[29902]: NOQUEUE: client=test.localdomain[192.168.22.40]
index 31d70bf5f97d3ba8b694cf65d0451fa275d2d92f..bf80fd13f92ee660b59c59a962d930c1cc3f22b2 100644 (file)
@@ -49,10 +49,10 @@ CTIME: 5FDCCD39
 SIZE: 7298
 CLIENT: localhost.localdomain[127.0.0.1],
 MSGID: <xyz>
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test4@localhost> (192.168.22.40[192.168.22.40]:25)
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test3@localhost> (192.168.22.40[192.168.22.40]:25)
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test2@localhost> (192.168.22.40[192.168.22.40]:25)
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test1@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test4@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test3@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test2@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test1@localhost> (192.168.22.40[192.168.22.40]:25)
 SMTP:
 L0000001C Dec 18 15:36:32 proxmox-new postfix/smtpd[29902]: connect from test.localdomain[192.168.22.40]
 L0000001D Dec 18 15:36:33 proxmox-new postfix/smtpd[29902]: NOQUEUE: client=test.localdomain[192.168.22.40]
index 256287c54f34c51adb8aced92a411129f97dea13..31deb90435a1725777d2062140c5431699b18089 100644 (file)
@@ -10,10 +10,10 @@ CTIME: 5FDCCD39
 SIZE: 7298
 CLIENT: localhost.localdomain[127.0.0.1],
 MSGID: <xyz>
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test4@localhost> (192.168.22.40[192.168.22.40]:25)
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test3@localhost> (192.168.22.40[192.168.22.40]:25)
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test2@localhost> (192.168.22.40[192.168.22.40]:25)
-TO:5FDCCC85:1C6B541C5D:A: from <test@test.localdomain> to <test1@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test4@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test3@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test2@localhost> (192.168.22.40[192.168.22.40]:25)
+TO:5FDCCC85:1C6B541C5D:P: from <test@test.localdomain> to <test1@localhost> (192.168.22.40[192.168.22.40]:25)
 SMTP:
 L0000001C Dec 18 15:36:32 proxmox-new postfix/smtpd[29902]: connect from test.localdomain[192.168.22.40]
 L0000001D Dec 18 15:36:33 proxmox-new postfix/smtpd[29902]: NOQUEUE: client=test.localdomain[192.168.22.40]