79. pepsi-quota

Gérer et réconcilier les quotas de boîtes aux lettres par compte.

79.1. Rôle

pepsi-quota est l’interface de l’opérateur vers la table pepsi.mailbox_quota : les limites de boîte aux lettres par compte que pepsi-stage-relay-to-maildir applique, et la comptabilité d’occupation dont cette étape et pepsi-ingress se servent toutes deux. Ce n’est pas une étape.

Chaque ligne est indexée sur le login passwd, non sur une adresse e-mail et non sur un uid. Un login est ce à quoi pepsi-ingress peut comparer un destinataire d’enveloppe au moment du RCPT sans résoudre d’alias — ce qu’il ne doit pas faire, et ne peut pas, puisque la table d’alias et la base passwd appartiennent à l’étape de remise — et cela reste une seule ligne lorsque plusieurs adresses aboutissent à une même boîte aux lettres.

Référence : pepsi-quota(1).

79.2. Sous-commandes

  • set LOGIN SIZE [--messages N] — donner à un compte sa propre limite (2G, 500M, un nombre d’octets, ou none pour explicitement illimité, ce qui est la manière d’exempter un compte unique d’un quota valable pour tout le site).

  • unset LOGIN — abandonner la limite propre au compte, de sorte qu’il hérite de nouveau de la valeur par défaut du site. (Ce n’est pas la même chose que set … none.)

  • show LOGIN / list [--full] — les limites et l’utilisation d’un compte, ou de chaque compte comptabilisé, mesure la plus ancienne en premier (--full restreint la liste à ceux qui sont à leur limite ou au-delà).

  • measure LOGIN — remesurer une boîte aux lettres maintenant.

  • reconcile [--all] — remesurer les comptes qui sont à leur limite ou au-delà ; --all remesure aussi ceux dont la mesure est simplement périmée.

  • remove LOGIN — oublier les limites du compte et sa comptabilité ; la remise suivante recrée la ligne.

79.3. Trois couches

Politique

[pepsi] MAILBOX_QUOTA est la valeur par défaut du site (son absence signifie illimité), redéfinie par compte via pepsi-quota set, et resserrée davantage par la limite propre du noyau là où le système de fichiers en applique une.

Mesure

Seul pepsi-helper-maildir-writer(1) peut en prendre une : c’est l’unique processus qui devient l’utilisateur, et un Maildir est en mode 0700. measure et reconcile l’exécutent ; rien d’autre ici ne touche à une boîte aux lettres.

Estimation

Les compteurs used_* + since_*. Les remises effectuées par Pepsi s’y ajoutent et rien ne soustrait jamais, car rien n’indique à Pepsi qu’un utilisateur supprime du courrier par IMAP.

L’estimation est donc une borne supérieure de l’occupation réelle, ce qui la rend sûre comme déclencheur — « ce compte pourrait-il être proche de sa limite ? alors mesurer » — et dangereuse comme verdict. D’où la règle : rien ne refuse un message sur une estimation, seulement sur une mesure.

79.4. Pourquoi reconcile existe

Un compte à sa limite est refusé au RCPT par pepsi-ingress. Supposons que son propriétaire vide ensuite la boîte par IMAP. Rien ne l’indique à Pepsi — et parce que chaque message est refusé, aucune remise ne s’exécute jamais pour prendre une mesure récente. La boîte aux lettres resterait fermée à jamais.

Deux choses l’empêchent, et les deux sont nécessaires. pepsi-ingress ne refuse que sur une mesure plus récente que [pepsi] MAILBOX_QUOTA_MAX_AGE (15 minutes par défaut), de sorte qu’un chiffre périmé laisse passer le message et que le chemin de remise regarde à nouveau. Et pepsi-quota reconcile remesure les comptes qui sont à leur limite — un balayage peu coûteux précisément parce qu’il ne concerne que ceux-là. Le paquet le lance depuis pepsi-quota-reconcile.timer (toutes les dix minutes, requis via Wants= par pepsi.target) ; n’ajoutez pas de tâche cron à côté. Sur une installation depuis les sources sans systemd, l’équivalent est

*/10 * * * *  pepsi  pepsi-quota -c /etc/pepsi/pepsi.conf reconcile

79.5. Privilèges

Installé set-group-id sur pepsi-maildir (mode 2550, propriétaire pepsi:pepsi-maildir — exécution réservée au propriétaire, de sorte qu’aucun autre utilisateur local n’atteint le bit setgid), pour la même raison que pepsi-stage-relay-to-maildir : measure/reconcile exécutent le helper 4750 root:pepsi-maildir, et le compte de service pepsi n’est délibérément pas membre de ce groupe. Lancé en tant que root, il descend vers pepsi avant de se connecter à la base de données, en conservant ce seul groupe à travers l’abandon — de sorte que l’outil se comporte à la main comme depuis son timer, où le bit setgid fournit le groupe et où aucun abandon n’a lieu.

79.6. Voir aussi

pepsi-stage-relay-to-maildir, pepsi-ingress, pepsi-status, pepsi-quota(1), pepsi-helper-maildir-writer(1), pepsi.conf(5).