From e24f8046706b4f9ee6d8e078e42c1563f14536a5 Mon Sep 17 00:00:00 2001 From: Pascal Bouquet Date: Mon, 15 Jun 2026 16:00:40 +0200 Subject: [PATCH] Fix: Header-Reihenfolge korrigiert und addheader-Index-Injektion gefixt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Native libmilter-Objektmethode auf 'addheader(name, value, 0)' umgestellt - Platzierungsfehler behoben: ARC- & X-ARC-Header werden nun an Index 0 (Spitze) injiziert - Chronologische Integrität der Mail-Header-Pipeline bei externer Zustellung sichergestellt" --- usr/local/bin/pyarc-milter | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/usr/local/bin/pyarc-milter b/usr/local/bin/pyarc-milter index a7e5577..a9ef564 100644 --- a/usr/local/bin/pyarc-milter +++ b/usr/local/bin/pyarc-milter @@ -98,7 +98,9 @@ class ArcMilter(Milter.Base): cv_str = cv.decode('utf-8') if isinstance(cv, bytes) else str(cv) logger.info(f"[{self.id}] Validierung für Domain '{self.from_domain}': CV={cv_str} ({comment})") - self.addheader('Authentication-Results', f"{AUTH_SERV_ID}; arc={cv_str}") + + # Korrigiert: addheader mit Index 0 fügt den Header ganz oben ein + self.addheader('Authentication-Results', f"{AUTH_SERV_ID}; arc={cv_str}", 0) is_arc_valid = (cv_str in ["pass", "none"] and "fail" not in comment.lower()) @@ -142,7 +144,9 @@ class ArcMilter(Milter.Base): srv_id=AUTH_SERV_ID.encode('utf-8') ) - for header_line in sig_headers: + # Wir kehren die Liste um, damit beim Einfügen an Index 0 + # die Reihenfolge (Seal -> Signature -> Results) logisch bleibt + for header_line in reversed(sig_headers): if b':' in header_line: name_bytes, val_bytes = header_line.split(b':', 1) name = name_bytes.decode('utf-8').strip() @@ -163,7 +167,9 @@ class ArcMilter(Milter.Base): chunks.append(remaining) folded_value = "\n\t".join(chunks) - self.addheader(name, folded_value) + + # Korrigiert: addheader mit Index 0 schiebt die Krypto-Header an die Spitze + self.addheader(name, folded_value, 0) logger.info(f"[{self.id}] Mail erfolgreich ARC-versiegelt (Domain: {sign_domain}, Selector: {selector}).") is_arc_valid = True @@ -173,7 +179,8 @@ class ArcMilter(Milter.Base): # --- 3. Einmaliges Setzen des X-ARC Headers --- already_added = any(h[0].lower() == b'x-arc' for h in self.headers) if not already_added: - self.addheader('X-ARC', 'TRUE' if is_arc_valid else 'FALSE') + # Korrigiert: Auch das X-ARC Flag wird mit Index 0 ganz oben angepinnt + self.addheader('X-ARC', 'TRUE' if is_arc_valid else 'FALSE', 0) except Exception as e: logger.error(f"[{self.id}] Fehler beim ARC-Processing: {e}", exc_info=True)