40. pepsi-stage-relay-to-maildir

Stellt in die Maildirs lokaler Benutzer zu; leitet den Rest weiter.

40.1. Rolle

pepsi-stage-relay-to-maildir ist die Stage für die lokale Zustellung. Für jeden Umschlagempfänger entscheidet sie, ob die Adresse lokal ist, und schreibt die Nachricht, falls ja, über den setuid-root pepsi-helper-maildir-writer(1)-Helper in das Maildir/new/ dieses Benutzers; jeder andere Empfänger wird zu NEXT_STAGE weitergeleitet. Referenz: pepsi-stage-relay-to-maildir(1).

40.2. Funktionen

40.2.1. Abgleich lokaler Empfänger

  • Ein Empfänger ist lokal, wenn seine Domain in LOCAL_DOMAINS ist (Standardwert [pepsi-ingress] ACCEPTED_DOMAINS), sein Postfachname auf einen passwd-Eintrag auflöst und diese uid durch TARGETS erlaubt ist.

  • TARGETS ist eine Positivliste von Benutzernamen, uids und uid-Bereichen (alice, 452, 1000-1100, 10000-); der Standardwert ist der reguläre (Nicht-System-)uid-Bereich aus /etc/login.defs. Der Helfer lehnt jede uid unterhalb von UID_MIN ohnehin ab, sodass ein hier aufgeführtes Systemkonto gebounct wird.

  • Der Postfachname ist der Local-Part mit entfernter RECIPIENT_DELIMITER-Subadresse (Standardwert +), kleingeschrieben.

40.2.2. Teilzustellung

  • Lokale Empfänger werden in ihre Maildirs geschrieben; die übrigen Empfänger werden auf einen neuen pending-Datensatz aufgeteilt, und wohin, hängt davon ab, warum sie nicht lokal sind. Ein Empfänger an der Domain eines anderen ist eine Weiterleitung und geht zu NEXT_STAGE, das den SRS-Relay-Schwanz erreichen sollte. Ein Empfänger an einer unserer LOCAL_DOMAINS, der sich zu keinem zugelassenen Konto auflöst, ist ein unbekanntes Postfach und geht zu UNKNOWN_MAILBOX_STAGE, das einen Bounce erreichen sollte — ihn stattdessen zu relayen würde unseren eigenen MX nachschlagen, diesen Host finden und die Nachricht an uns selbst zurückschicken. UNKNOWN_MAILBOX_STAGE fällt standardmäßig auf NEXT_STAGE zurück.

  • Zwei Adressen für dasselbe lokale Konto werden nur einmal zugestellt.

  • Jeder lokalen Kopie werden ein Return-Path:, ein Delivered-To:-Schleifenschutz und ein Received:-Trace-Header vorangestellt.

40.2.3. Wiederholung, Bounce und DSN

  • Der Exit-Code des Helfers entscheidet, ob eine Wiederholung helfen kann. Ein vorübergehender Fehler (eine volle Platte, ein E/A-Fehler, ein noch nicht setuid installierter Helfer) pausiert diesen Empfänger mit exponentiellem Backoff bis MAX_LIFETIME und routet ihn erst dann zu BOUNCE_STAGE; ein dauerhafter (das Postfach selbst ist unbrauchbar — falsche Eigentümerschaft oder Rechte, kein Heimatverzeichnis, keine solche uid) wird sofort gebounct, da keine Wiederholung ihn zustellen kann. Ein Bounce wird nie erneut gebounct, und das NOTIFY des Absenders wird durchgehend beachtet.

  • Ein Empfänger über seinem Kontingent (der eigene Quota-Exit des Helfers) wird gemäß [pepsi] MAILBOX_OVER_QUOTA behandelt: defer (der Standardwert) wiederholt ihn wie jeden vorübergehenden Fehler, bounce routet ihn mit einem Status 5.2.2 zu QUOTA_LIMIT_STAGE. Siehe pepsi-quota.

  • Erzeugt eine positive DSN bei erfolgreicher lokaler Zustellung, wenn [pepsi] ORIGINATE_SUCCESS_DSN gesetzt ist und der Empfänger NOTIFY=SUCCESS angefordert hat.

40.2.4. Privilegienmodell

  • Das Stage-Binärprogramm wird setgid pepsi-maildir installiert, Modus 2550 pepsi:pepsi-maildir. Der Dispatcher führt es als unprivilegierten pepsi-Benutzer aus; das setgid-Bit gewährt die effektive gid, die zum Ausführen des gruppenbeschränkten Helpers nötig ist — und nichts anderes auf dem Host erlangt diese Fähigkeit. Genau das erkauft der Modus: bei 2755 könnte jeder lokale Benutzer die Stage ausführen und dieselbe gid erben und von dort aus den setuid-root-Helper. pepsi kann das Ausführungsrecht nicht aus der Gruppe nehmen (es ist bewusst kein Mitglied), also nimmt es das Recht stattdessen aus den Eigentümerbits.

40.3. Konfiguration

[stage-<name>] mit PROGRAM = pepsi-stage-relay-to-maildir: SERVER_NAME (erforderlich), TARGETS, LOCAL_DOMAINS, RECIPIENT_DELIMITER, HELPER (Standardwert pepsi-helper-maildir-writer), NEXT_STAGE/BOUNCE_STAGE, UNKNOWN_MAILBOX_STAGE, QUOTA_LIMIT_STAGE und die Wiederholungsrichtlinie (RETRY_INITIAL/RETRY_MAX_INTERVAL/RETRY_FACTOR/MAX_LIFETIME). pepsi-setup prüft, dass UNKNOWN_MAILBOX_STAGE und QUOTA_LIMIT_STAGE echte Stages benennen. Vollständige Referenz: pepsi-stage-relay-to-maildir(1).

40.4. State

  • Eingaben: state.dsn (NOTIFY/ORCPT je Empfänger) und state.attempts (die Anzahl der Wiederholungen).

  • Ausgaben: attempts/last_error bei Pause; ein state.bounce-Objekt auf den für die Bounce-Stage eingereihten Datensätzen; das state.dsn je Empfänger wird auf jeden aufgeteilten Datensatz zugeschnitten. state.dsn/state.origin bleiben erhalten.

40.5. Siehe auch

pepsi-stage-relay-to-lmtp (die LMTP-Alternative), pepsi-stage-relay-to-smarthost, pepsi-stage-relay-to-internet, pepsi-stage-bounce, pepsi-quota, Unterstützte Funktionen, pepsi-stage-relay-to-maildir(1), pepsi-helper-maildir-writer(1).