85.1.18. pepsi-stage-aliases¶
expand message recipients through an alias mapping file
- Section du manuel:
1
85.1.18.1.1. Nom¶
pepsi-stage-aliases - l’étape d’expansion d’alias / de listes de diffusion du pipeline Pepsi.
85.1.18.1.2. Synopsis¶
pepsi-stage-aliases [GLOBAL-OPTIONS] worker
85.1.18.1.3. Description¶
pepsi-stage-aliases est un programme d’étape exécuté par pepsi-dispatch(1). Il charge une ligne pepsi.workqueue (refusant d’agir sauf si son status est running), lit sa section [stage-<stage>] et réécrit les destinataires d’enveloppe du message à travers la table d’alias nommée par ALIASES. Chaque destinataire qui correspond à une entrée de la table est remplacé par les adresses cibles de cette entrée ; les destinataires qui ne correspondent à rien sont laissés inchangés. La liste de destinataires résultante est dédupliquée sans tenir compte de la casse de sorte que chaque adresse ne soit remise qu’au plus une fois, et le message est avancé vers NEXT_STAGE.
L’étape ne charge que l’enveloppe et state — jamais les en-têtes ni le corps. Lorsqu’aucun destinataire ne correspond à la table (et qu’aucun doublon n’est supprimé), le message est avancé inchangé.
85.1.18.1.4. Fichier d’alias¶
ALIASES nomme un fichier de table lisible par un humain, analysé comme une table Postfix virtual(5). Chaque ligne non vide associe une clé à une ou plusieurs adresses cibles
# comments begin with '#'; blank lines are ignored
postmaster@example.com alice@example.com
staff@example.com bob@example.com, carol@partner.example
@example.net ops@example.com
sales-*@example.org sales@example.com
La clé (côté gauche) est le premier champ délimité par des espaces : une adresse complète, un attrape-tout @domain, ou un motif joker * (un glob * tel que *@example.org ou sales-*@example.org). Les cibles (côté droit) sont séparées par des virgules et/ou des espaces et sont conservées verbatim — elles peuvent être locales ou distantes, mais ne peuvent pas contenir de joker. Une ligne avec une clé mais sans cibles est ignorée (un destinataire n’est jamais silencieusement supprimé). Si la même clé apparaît deux fois, la dernière ligne l’emporte.
Comme dans virtual(5), une ligne dont le premier caractère est un blanc prolonge la correspondance précédente au lieu d’en commencer une nouvelle, de sorte qu’une longue liste de cibles peut être repliée sur plusieurs lignes ; les lignes vides et les lignes entièrement de commentaire intercalées ne rompent pas une telle continuation. Un # ne commence un commentaire qu’au début d’un champ (au début de la ligne, ou après un blanc), de sorte que bug#42@example.com est une clé ordinaire plutôt qu’une clé tronquée.
Avertissement
Les jokers sont des globs, pas des expressions régulières. * correspond à toute suite de caractères et tout autre caractère — un . compris — est littéral. Pour aliaser un domaine entier, écrivez *@example.net (ou l’attrape-tout @example.net) ; .*@example.net est une expression régulière et, lu comme un glob, exige un point initial : il ne correspond donc à aucune adresse réelle et tout message vers ce domaine passe sans être aliasé. (Les motifs pepsi.whitelist de pepsi-whitelist(1) sont des ERE POSIX ; cette table ne l’est pas.) La vérification de syntaxe de pepsi-setup comme l’analyseur de table de l’étape elle-même rejettent ou signalent une clé qui ressemble à une expression régulière et nomment le glob que vous vouliez probablement.
Le fichier est lu en mémoire et relu seulement lorsque son identité change — heure de modification, taille et inode, de sorte qu’un remplacement préservant la mtime (cp -p, une sauvegarde restaurée) est également remarqué — et un worker occupé ne le ré-analyse donc pas pour chaque message. Un fichier manquant est une table vide (aucun alias configuré). Un fichier qui existe mais ne peut pas être lu (permissions, erreur d’E/S) est une erreur : le message est mis en pause et réessayé à intervalles croissants, comme pour toute autre défaillance de l’hôte, plutôt que remis sans résolution des alias – une entrée postmaster@ ou fourre-tout qui ne s’appliquerait pas en silence le remettrait au mauvais destinataire ou le ferait rebondir. Le fichier illisible n’est pas mis en cache, de sorte que la tentative suivante le relit. pepsi-setup vérifie la syntaxe du fichier ALIASES au moment de l’installation lorsqu’il existe, et écrit un modèle de départ commenté lorsqu’il n’existe pas (voir pepsi-setup(1)) ; une ligne malformée y est signalée comme un avertissement avant le déploiement plutôt que seulement à l’exécution, jamais comme une erreur fatale.
85.1.18.1.5. Correspondance et expansion¶
Un destinataire est mis en minuscules et recherché verbatim ; en cas d’absence, la clé attrape-tout @domain de son domaine est essayée, et enfin toute clé joker * — le joker correspondant le plus spécifique l’emporte (un sales-*@example.org étroit bat un *@example.org large, qui bat un * nu ; les égalités sont départagées de façon déterministe). Le détail de sous-adresse (+tag) n’est pas retiré, de sorte qu’une adresse de liste spécifique telle que list+announce@example.com peut être aliasée à elle seule.
L’expansion est transitive : lorsqu’une cible d’alias est elle-même une clé, elle est développée à son tour, de sorte que les listes de distribution imbriquées se résolvent en leurs adresses feuilles. Une boucle — un alias qui se réfère à lui-même directement ou via une chaîne — est rompue en résolvant la clé répétée en son adresse littérale plutôt qu’en récursant à l’infini. Une chaîne de plus de 32 sauts est arrêtée de la même manière (l’adresse est remise littéralement, avec un avertissement), de sorte qu’une table générée ne peut pas déborder la pile du worker.
85.1.18.1.6. Notifications d’état de remise¶
state.dsn.rcpt est parallèle à la liste des destinataires ; il est donc reconstruit au même pas que les destinataires réécrits. Une cible développée hérite du NOTIFY du destinataire d’origine dont elle provient, tout mot-clé SUCCESS retiré (RFC 3461 §5.2.7.3(c) : sinon une seule soumission à un alias de cinq membres susciterait cinq DSN positifs pour un seul destinataire et divulguerait la composition de l’alias ; un NOTIFY qui n’était que SUCCESS devient NEVER) et, suivant la même section, porte un ORCPT pointant vers le destinataire d’origine (son ORCPT existant s’il en avait un, sinon rfc822;<original-recipient>). Un destinataire qui n’a pas été développé conserve son entrée DSN inchangée. Les RET/ENVID au niveau du message et toutes les autres clés de state sont préservés.
85.1.18.1.7. Configuration¶
Les options résident dans la propre section [stage-<name>] de l’étape (PROGRAM = pepsi-stage-aliases) : le chemin du fichier de table ALIASES et le NEXT_STAGE vers lequel le message développé avance. Les deux sont obligatoires — l’étape fait avancer chaque message qu’elle voit, de sorte que pepsi-setup rejette une section à laquelle l’un ou l’autre manque. Elles sont documentées dans pepsi.conf(5).
85.1.18.1.8. État¶
Entrées : le rcpt_to d’enveloppe et le state.dsn.rcpt par destinataire.
Sorties : un rcpt_to réécrit et un state.dsn.rcpt correspondant, écrits uniquement lorsque la liste de destinataires a réellement changé (un alias s’est appliqué, ou un doublon a été retiré) ; aucun autre state n’est touché. La disposition de l’état est décrite dans pepsi.state(7).
Transitions : avance vers NEXT_STAGE (la seule transition) ; l’étape ne met jamais en pause, n’échoue, ne réachemine ni ne termine.
85.1.18.1.9. Commandes¶
- worker
Exécuté comme un worker persistant de pepsi-dispatch(1), lisant les identifiants de message sur l’entrée standard. C’est ainsi que le dispatcher exécute l’étape en production.
85.1.18.1.10. Options globales¶
- -c FILE, –config FILE
Lit la configuration depuis FILE au lieu de parcourir les emplacements par défaut.
- -L LOGLEVEL, –log LOGLEVEL
Règle la verbosité de journalisation (par défaut
info).- -v, –verbose
Affiche les messages de journal de toutes les sources.
- -h, –help ; -V, –version
Affiche un résumé d’utilisation / la version et quitte.
85.1.18.1.11. Code de sortie¶
- 0
Le message a été traité (avancé vers NEXT_STAGE).
- 1
Une erreur s’est produite (message introuvable ou non
running, une étape mal configurée — par exemple un ALIASES ou un NEXT_STAGE manquant — ou une erreur de base de données). La raison est écrite dans le journal. Un fichier d’alias manquant n’est pas une erreur : il est traité comme une table vide.
85.1.18.1.12. Exemples¶
Retraiter le message 42 avec un worker ponctuel (il doit être running)
echo 42 | pepsi-stage-aliases -c /etc/pepsi/pepsi.conf worker
Une section de pipeline placée juste avant la remise locale, développant les destinataires et transférant vers l’étape de remise locale
[stage-aliases]
PROGRAM = pepsi-stage-aliases
NEXT_STAGE = local
ALIASES = /etc/pepsi/aliases
85.1.18.1.13. Voir aussi¶
pepsi-config(1), pepsi-stage-relay-to-maildir(1), pepsi-stage-if(1), pepsi-dispatch(1), pepsi.conf(5), pepsi.state(7), pepsi-setup(1)
85.1.18.1.14. Bogues¶
Signalez les bogues au gestionnaire de tickets de Pepsi.