Fix: Header-Reihenfolge korrigiert und addheader-Index-Injektion gefixt
- 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"
This commit is contained in:
@@ -98,7 +98,9 @@ class ArcMilter(Milter.Base):
|
|||||||
cv_str = cv.decode('utf-8') if isinstance(cv, bytes) else str(cv)
|
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})")
|
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())
|
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')
|
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:
|
if b':' in header_line:
|
||||||
name_bytes, val_bytes = header_line.split(b':', 1)
|
name_bytes, val_bytes = header_line.split(b':', 1)
|
||||||
name = name_bytes.decode('utf-8').strip()
|
name = name_bytes.decode('utf-8').strip()
|
||||||
@@ -163,7 +167,9 @@ class ArcMilter(Milter.Base):
|
|||||||
chunks.append(remaining)
|
chunks.append(remaining)
|
||||||
|
|
||||||
folded_value = "\n\t".join(chunks)
|
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}).")
|
logger.info(f"[{self.id}] Mail erfolgreich ARC-versiegelt (Domain: {sign_domain}, Selector: {selector}).")
|
||||||
is_arc_valid = True
|
is_arc_valid = True
|
||||||
@@ -173,7 +179,8 @@ class ArcMilter(Milter.Base):
|
|||||||
# --- 3. Einmaliges Setzen des X-ARC Headers ---
|
# --- 3. Einmaliges Setzen des X-ARC Headers ---
|
||||||
already_added = any(h[0].lower() == b'x-arc' for h in self.headers)
|
already_added = any(h[0].lower() == b'x-arc' for h in self.headers)
|
||||||
if not already_added:
|
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:
|
except Exception as e:
|
||||||
logger.error(f"[{self.id}] Fehler beim ARC-Processing: {e}", exc_info=True)
|
logger.error(f"[{self.id}] Fehler beim ARC-Processing: {e}", exc_info=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user