85.1.19. pepsi-stage-list¶
route mail addressed to a mailing list
- Section du manuel:
1
85.1.19.1.1. Nom¶
pepsi-stage-list - le routeur de listes de diffusion du pipeline Pepsi.
85.1.19.1.2. Synopsis¶
pepsi-stage-list [OPTIONS-GLOBALES] worker
85.1.19.1.3. Description¶
pepsi-stage-list est un programme d’étape exécuté par pepsi-dispatch(1). Il examine chaque destinataire d’enveloppe, décide s’il nomme une liste de diffusion de ce serveur et achemine le message en conséquence. C’est la seule des cinq étapes de liste qui s’exécute sur chaque message ; elle est donc peu coûteuse par conception : elle charge l’enveloppe et state, jamais les en-têtes ni le corps.
Le sous-système de listes de diffusion de Pepsi est une réimplémentation de GNU Mailman 3 : le vocabulaire d’adresses que reconnaît cette étape – l’adresse d’envoi et les huit sous-adresses de rôle – est celui de l’amont, copyright de la Free Software Foundation et de ses contributeurs, afin qu’un site migrant depuis Mailman conserve chaque adresse qu’utilisent déjà ses abonnés. Les fichiers de Pepsi issus de GNU Mailman restent sous la GNU General Public License ; voir pepsi-list(1) pour la déclaration complète et vendor/PEPSI-VENDORING.md pour la liste.
Un serveur qui n’héberge aucune liste n’en est pas affecté. Sans liste configurée, la table d’acheminement est vide et chaque message avance vers NEXT_STAGE, ce qui rend inoffensif l’ajout de la section dans un pipeline existant.
85.1.19.1.4. Adresses reconnues¶
Pour chaque destinataire, l’étape teste, dans cet ordre :
l”adresse d’envoi
<list>@<host>;puis les huit sous-adresses de rôle
-request,-join,-subscribe,-leave,-unsubscribe,-confirm+<token>,-owneret-bounces(portant éventuellement un détail VERP,-bounces+alice=example.net).
Les adresses d’envoi sont testées avant les suffixes, et les suffixes sont essayés du plus long au plus court. Les deux ordres comptent. Une liste peut légitimement s’appeler foo-request ; tester d’abord les suffixes la rendrait injoignable dès que quelqu’un créerait une liste nommée foo, et le symptôme serait du courrier destiné à une vraie liste entrant silencieusement dans le chemin des commandes. L’ordre du plus long au plus court explique pourquoi -unsubscribe n’est pas lu comme -subscribe avec une racine se terminant par -un.
Avertissement
Positionner [pepsi] RECIPIENT_DELIMITER à - casse entièrement le sous-adressage des listes. Chaque sous-adresse est <list>-<role> : avec - comme délimiteur, la base de announce-owner@ est announce — l’adresse d’envoi — et le courrier destiné aux propriétaires est publié sur la liste à la place. La même option est le délimiteur que l’éclatement écrit dans chaque expéditeur d’enveloppe VERP et dans l’adresse -confirm+token, de sorte que le routeur découpe toujours ce que les listes ont écrit.
85.1.19.1.5. Acheminement¶
Un destinataire qui nomme une liste est acheminé vers l’une de trois étapes selon son rôle :
Rôle |
Option de l’étape |
|---|---|
l’adresse d’envoi |
POST_STAGE |
|
BOUNCE_STAGE |
tout autre rôle |
COMMAND_STAGE |
-owner va vers l’étape de commandes bien qu’il ne porte aucune commande : c’est l’étape qui sait retrouver les propriétaires d’une liste et empêcher une boucle de réponses automatiques, et lui donner une quatrième étape à lui dupliquerait les deux.
Un message adressé à une liste et à une boîte aux lettres ordinaire — ou à deux listes — est scindé, une ligne par destination, chacune portant ses propres destinataires et sa propre tranche de state.dsn.rcpt. Le groupe hors liste, lorsqu’il existe, reste sur la ligne d’origine.
Avertissement
BOUNCE_STAGE signifie ici le contraire de ce qu’il signifie pour toute autre étape dans pepsi.conf(5). Sur cette étape, c’est l’endroit où le rebond entrant de quelqu’un d’autre est consommé ; partout ailleurs, c’est l’endroit où Pepsi génère un DSN. Le pointer vers pepsi-stage-bounce(1) répond à un rebond par un rebond — une boucle de courrier plutôt qu’un message mal acheminé — et pepsi-setup refuse cette configuration.
85.1.19.1.6. Fraîcheur¶
La table d’acheminement est chargée une fois par worker et rafraîchie par le dispatcher, qui retire ses workers lorsque la base de données annonce un changement sur le canal pepsi_list_changed. Une liste créée pendant que le dispatcher tourne commence donc à recevoir du courrier sans redémarrage et sans fenêtre d’obsolescence. L’étape elle-même ne tient aucun écouteur : le pool de connexions d’un worker d’étape est exactement d’une connexion, et un écouteur dans le worker la monopoliserait indéfiniment.
85.1.19.1.7. Fusion¶
Un successeur de fusion ne peut s’exécuter dans le même processus que si son Load est satisfait par ce que le prédécesseur a déjà chargé. Cette étape ne charge que les métadonnées : elle peut donc fusionner sa propre avance vers NEXT_STAGE — le chemin hors liste, celui qui s’exécute sur chaque message — mais elle ne peut pas fusionner dans pepsi-stage-list-post(1), qui a besoin du corps. Acheminer une véritable contribution de liste coûte une transition d’étape ordinaire.
85.1.19.1.8. Configuration¶
NEXT_STAGE, POST_STAGE, COMMAND_STAGE et BOUNCE_STAGE, obligatoires tous les quatre, dans la section [stage-<name>] propre à l’étape. La configuration par liste est dans la base de données, pas ici ; voir pepsi-list(1).
85.1.19.1.9. État¶
Entrées : le rcpt_to de l’enveloppe.
Sorties : un descripteur state.list sur chaque ligne acheminée — l’identifiant de la liste, le rôle, l’adresse à laquelle le message est arrivé, et tout détail que portait la sous-adresse (un jeton -confirm, une adresse VERP -bounces). Délibérément réduit : tout le reste dont l’étape worker a besoin, elle le lit dans la base de données, ce qu’elle s’apprête à faire de toute façon.
Transitions : avance (vers NEXT_STAGE ou vers l’étape d’un rôle), et éclate lorsque les destinataires se scindent.
85.1.19.1.10. Commandes¶
- worker
Exécuté comme un worker persistant de pepsi-dispatch(1), lisant les identifiants de message sur l’entrée standard.
85.1.19.1.11. Options globales¶
L’ensemble habituel — -c/–config, -L/–log, -v/–verbose, -h/–help et -V/–version — se comportant comme pour tout programme Pepsi ; voir pepsi-config(1).
85.1.19.1.12. Code de sortie¶
- 0
Le message a été acheminé.
- 1
Une erreur s’est produite (une étape mal configurée, ou une erreur de base de données).
85.1.19.1.13. Exemples¶
[stage-list]
PROGRAM = pepsi-stage-list
NEXT_STAGE = aliases
POST_STAGE = list-post
COMMAND_STAGE = list-command
BOUNCE_STAGE = list-bounce
85.1.19.1.14. Voir aussi¶
pepsi-list(1), pepsi-stage-list-post(1), pepsi-stage-list-deliver(1), pepsi-dispatch(1), pepsi.conf(5), pepsi.state(7), pepsi-setup(1)
85.1.19.1.15. Bogues¶
Signalez les bogues au gestionnaire de tickets de Pepsi.