mmdf(5) Benutzerhandbücher mmdf(5)

MMDF - Das Mailboxformat »Multi-channel Memorandum Distribution Facility«

Dieses Dokument beschreibt das Mailboxformat MMDF, das von einigen MTAs und MUAs (z.B. scomail(1)) verwendet wird, um E-Mails lokal zu speichern.

Eine MMDF-Mailbox ist eine Textdatei, die eine beliebige Anzahl E-Mail-Nachrichten enthält. Jede Nachricht besteht aus einem Stempel, gefolgt von einer E-Mail-Nachricht entsprechend RFC822/RFC2822, wiederum gefolgt von einem Stempel. Das Dateiformat ist zeilenorientiert. Die Zeilen werden durch Zeilenvorschübe getrennt (ASCII 10). Eine Stempelzeile besteht aus den vier Zeichen »^A^A^A^A« (Strg-A; ASCII 1).

^A^A^A^A

From: example@example.com
To: example@example.org
Subject: test >Was ich über das MMDF-Format gelernt habe:
^A^A^A^A
^A^A^A^A
From: example@example.com
To: example@example.org
Subject: test 2 bar
^A^A^A^A

Im Gegensatz zu den meisten anderen auf einer Einzeldatei basierenden Mailboxformaten wie MBOXO und MBOXRD (siehe mbox(5)) ist es in MMDF-Mailboxen nicht nötig, die »From«-Zeilen in Anführungszeichen zu setzen, da solche Zeilen in diesem Format keine besondere Bedeutung haben.

Wenn die (üblicherweise durch stat(2) ermittelte) Änderungszeit einer nicht leeren Mailbox größer beziehungsweise neuer als die Zugriffszeit der Datei ist, dann enthält die Datei neue E-Mails. Viele MUAs setzen eine »Status:«-Kopfzeile in jede Nachricht, um zu bezeichnen, welche Nachrichten bereits gelesen wurden.

Da auf MMDF-Dateien häufig von mehreren Programmen parallel zugegriffen wird, sollte der Zugriff auf diese Dateien generell nicht ohne Sperrung erfolgen.

Allgemein werden drei Sperrmechanismen (und Kombinationen davon) verwendet:

  • Das Sperren mit fcntl(2) wird zumeist auf aktuellen, POSIX-konformen Systemen verwendet. Die Nutzung dieser Sperrmethode ist insbesondere bei MMDF-Dateien ratsam, auf die über das Network File System (NFS) zugegriffen wird, da es die einzige Möglichkeit zu sein scheint, die Zwischenspeicher von NFS-Clients zuverlässig für ungültig zu erklären.
  • Das Sperren mit flock(2) wird meist auf BSD-basierten Systemen verwendet.
  • »Dotlocking« wird auf allen Systemtypen verwendet. Um beispielsweise eine MMDF-Datei namens Mail-Ordner zu sperren, legt eine Anwendung zunächst eine temporäre Datei mit einem eindeutigen Namen in dem Verzeichnis an, indem sich die Datei Mail-Ordner befindet. Die Anwendung versucht dann, mit dem Systemaufruf link(2) einen harten Link namens Mail-Ordner.lock zu erstellen, der auf die temporäre Datei zeigt. Der Erfolg des Systemaufrufs link(2) sollte zusätzlich mit stat(2)-Systemaufrufen verifiziert werden. Falls der Link erfolgreich erstellt wurde, wird der Mail-Ordner als »dotlocked« betrachtet. Der Link zur temporären Datei kann daraufhin sicher entfernt werden.
Um die Sperre aufzuheben, entfernt eine Anwendung einfach die Datei Mail-Ordner.lock.

Wenn mehrere Methoden kombiniert werden, sollte bei der Implementierung sichergestellt werden, dass die nicht blockierenden Varianten der Systemaufrufe fcntl(2) und flock(2) verwendet werden, um tote Verklemmungen zu vermeiden.

Wenn mehrere Methoden kombiniert werden, darf eine MMDF-Datei nicht als erfolgreich gesperrt betrachtet werden, bevor nicht alle einzelnen Sperren wirksam sind. Wenn eine der einzelnen Sperrmethoden scheitert, sollte eine Anwendung alle Sperren aufheben, die sie erfolgreich angewendet hat und mit dem gesamten Sperrvorgang nach einer angemessenen Wartezeit von vorn beginnen.

Der Sperrmechanismus auf einem bestimmten System ist eine Sache der lokalen Regeln und sollte konsistent von allen auf dem System installierten Anwendungen genutzt werden, die auf MMDF zugreifen. Erfolgt dies nicht, kann es zum Verlust von E-Mail-Daten und beschädigten MMDF-Dateien kommen.

MMDF ist kein Teil irgendeines gegenwärtig unterstützten Standards.

MMDF wurde von Dave Crocker an der University of Delaware entwickelt.

scomail(1), fcntl(2), flock(2), link(2), stat(2), mbox(5), RFC822, RFC2822

Urs Janssen

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann <mario.blaettermann@gmail.com> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.

18. Februar 2002 Unix