jeudi 8 décembre 2022

Maildir

Maildir


Le format de courrier électronique Maildir est un moyen courant de stocker des messages électroniques dans lequel chaque message est stocké dans un fichier séparé avec un nom unique, et chaque dossier de courrier est un répertoire de système de fichiers. Le système de fichiers local gère le verrouillage des fichiers lorsque les messages sont ajoutés, déplacés et supprimés. L'un des principaux objectifs de conception de Maildir est d'éliminer le besoin de code de programme pour gérer le verrouillage et le déverrouillage des fichiers.[1]


Structure interne


Contenu
1 Spécifications
1.1 Maildir++
2 Exploitation technique
3 Problèmes de compatibilité du système de fichiers
4 Logiciels prenant directement en charge Maildir
4.1 Serveurs de messagerie
4.2 Agents de livraison
4.3 Lecteurs de messagerie
5 Notes et références
6 Voir aussi
7 Liens externes
Caractéristiques
Un répertoire Maildir (souvent nommé Maildir) comporte généralement trois sous-répertoires nommés tmp, new et cur.

Le sous-répertoire tmp stocke temporairement les messages électroniques en cours de livraison. Ce sous-répertoire peut également stocker d'autres types de fichiers temporaires. Le nouveau sous-répertoire stocke les messages qui ont été distribués, mais qui n'ont encore été vus par aucune application de messagerie. Le sous-répertoire cur stocke les messages qui ont déjà été vus par les applications de messagerie.[2]

Maildir++

Sam Varshavchik, l'auteur du Courier Mail Server et d'autres logiciels, a écrit une extension[2][3] au format Maildir appelée Maildir++ pour prendre en charge les sous-dossiers et les quotas de courrier. Les répertoires Maildir++ contiennent des sous-répertoires dont les noms commencent par un '.' (point) qui sont également des dossiers Maildir++. Cette extension est conforme à la spécification Maildir, qui prévoit explicitement la possibilité d'ajouter plus que tmp, new, cur à un maildir.

Exploitation technique

Un agent de distribution de courrier est un programme qui délivre un message électronique dans un Maildir. L'agent de distribution de courrier crée un nouveau fichier avec un nom de fichier unique dans le répertoire tmp.[4][5][2] L'algorithme original vers 1995 pour générer des noms de fichiers uniques, tel qu'implémenté par qmail[1] était :

lire l'heure Unix actuelle
lire l'identificateur de processus actuel (PID)
lire le nom d'hôte actuel
concaténer les trois valeurs ci-dessus dans une chaîne séparée par le caractère point ; c'est le nouveau nom de fichier
si stat() signale que le nom de fichier existe, alors attendez deux secondes
aller à l'étape précédente jusqu'à ce que le nom de fichier n'existe pas
créer un fichier avec le nom de fichier unique et écrire le contenu du message dans le nouveau fichier
En 2000, l'auteur de qmail recommandait d'ajouter la valeur d'un compteur par processus au PID, dont la valeur devrait être incrémentée après chaque livraison, et la suggestion de limitation du débit avait été abandonnée.[4]

En 2003, les recommandations avaient encore été modifiées pour exiger qu'au lieu du PID et du compteur, la partie médiane du nom de fichier soit créée en « concaténant suffisamment des chaînes suivantes pour garantir l'unicité », même face à plusieurs livraisons simultanées au même maildir d'un ou plusieurs processus :[6]

#n, où n est (en hexadécimal) la sortie de l'appel système unix_sequencenumber() du système d'exploitation, qui renvoie un nombre qui augmente de 1 à chaque fois qu'il est appelé, à partir de 0 après le redémarrage.
Xn, où n est (en hexadécimal) la sortie de l'appel système unix_bootnumber() du système d'exploitation, qui indique le nombre de fois que le système a été démarré. Avec #, cela garantit l'unicité ; malheureusement, la plupart des systèmes d'exploitation ne prennent pas en charge unix_sequencenumber() et unix_bootnumber().
Rn, où n est (en hexadécimal) la sortie de l'appel système unix_cryptorandomnumber() du système d'exploitation ou une source équivalente, telle que /dev/urandom. Malheureusement, certains systèmes d'exploitation n'incluent pas de générateurs de nombres aléatoires cryptographiques.
In, où n est (en hexadécimal) le numéro d'inode UNIX de ce fichier. Malheureusement, les numéros d'inode ne sont pas toujours disponibles via NFS.
Vn, où n est (en hexadécimal) le numéro de périphérique UNIX de ce fichier. Malheureusement, les numéros de périphérique ne sont pas toujours disponibles via NFS. (Les numéros de périphérique ne sont pas non plus utiles avec le système de fichiers UNIX standard : un maildir doit se trouver dans un seul périphérique UNIX pour que link() et rename() fonctionnent.)
Mn, où n est (en décimal) le compteur de microsecondes du même gettimeofday() utilisé pour la partie gauche du nom unique.
Pn, où n est (en décimal) l'ID du processus.
Qn, où n est (en décimal) le nombre de livraisons effectuées par ce processus.
Cet algorithme a été critiqué en 2006 par Timo Sirainen, le créateur de Dovecot, comme étant inutilement complexe.[7]

En novembre 2018, l'auteur de qmail, Daniel Bernstein, n'avait apporté aucune autre modification à ces recommandations de génération de noms de fichiers.[8] Sur les systèmes POSIX modernes, les fichiers temporaires peuvent être créés en toute sécurité avec la fonction de bibliothèque mkstemp C.

Le processus de livraison stocke le message dans le maildir en créant et en écrivant dans tmp/uniquefilename, puis en déplaçant ce fichier vers new/uniquefilename. Le déplacement peut être effectué en utilisant le renommage, qui est atomique dans de nombreux systèmes.[9] Alternativement, cela peut être fait en liant en dur le fichier à nouveau, puis en dissociant le f

Aucun commentaire:

Enregistrer un commentaire

Les principes de la souveraineté du client

En réalité, il existe un profond malentendu concernant la théorie sous-jacente à l'approche marketing. L'idéologie qui sous-tend cet...