mirror of
https://github.com/uw-imap/imap.git
synced 2024-11-16 10:28:23 +01:00
190 lines
7.6 KiB
Plaintext
190 lines
7.6 KiB
Plaintext
|
/* ========================================================================
|
|||
|
* Copyright 1988-2006 University of Washington
|
|||
|
*
|
|||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|||
|
* you may not use this file except in compliance with the License.
|
|||
|
* You may obtain a copy of the License at
|
|||
|
*
|
|||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
|
*
|
|||
|
*
|
|||
|
* ========================================================================
|
|||
|
*/
|
|||
|
|
|||
|
c-client Driver Characteristics
|
|||
|
Mark Crispin
|
|||
|
11 December 2006
|
|||
|
|
|||
|
|
|||
|
Drivers are code modules that support different mailbox storage
|
|||
|
technologies. A mailbox storage technology may be implemented by
|
|||
|
1) files and directories on the local system
|
|||
|
2) a database
|
|||
|
3) a network protocol.
|
|||
|
|
|||
|
In the case of files and directories on the local system, a
|
|||
|
driver supports a particular mailbox format. Mailbox formats are
|
|||
|
discussed in more detail in the file formats.txt.
|
|||
|
|
|||
|
As of the date this document was written, there was no bundled
|
|||
|
support for any databases in c-client. However, it should not be
|
|||
|
particularly difficult to write a driver that communicates with a
|
|||
|
database.
|
|||
|
|
|||
|
Network protocols supported by c-client drivers are the Internet
|
|||
|
Mail Access Protocol (all versions: IMAP4rev1, IMAP4, IMAP2bis, and
|
|||
|
IMAP2); the Post Office Protocol (version 3); and the Network News
|
|||
|
Transport Protocol (NNTP). In addition, c-client also supports NNTP
|
|||
|
and the Simple Mail Transport Protocol (SMTP) for mailbox transport.
|
|||
|
|
|||
|
By default, all drivers are enabled. There is little benefit to
|
|||
|
be gained by disabling a driver, with one exception. The mbox driver
|
|||
|
implements the behavior of automatically moving new mail from the
|
|||
|
spool directory to the "mbox" file on the user's home directory, if
|
|||
|
and *only* if the "mbox" exists and is in mailbox format. The mbox
|
|||
|
driver is listed under EXTRADRIVERS; if you wish to disable it just
|
|||
|
remove it from that list and rebuild.
|
|||
|
|
|||
|
I. Special name "INBOX"
|
|||
|
|
|||
|
The following rules to select INBOX and its format apply in
|
|||
|
the order given if "black box mode" is not in effect:
|
|||
|
1) mbox format is selected if file ~/mbox exists, and is in unix
|
|||
|
format or is zero-length.
|
|||
|
2) mx format is selected if file ~/INBOX/.mxindex exists.
|
|||
|
3) mbx format is selected if file ~/INBOX exists and is in mbx format.
|
|||
|
4) tenex format is selected if:
|
|||
|
a) file ~/mail.txt exists, and is in tenex format or is zero-length.
|
|||
|
b) file ~/INBOX exists and is in tenex format.
|
|||
|
5) mtx format is selected if:
|
|||
|
a) file ~/INBOX.MTX exists, and is in mtx format or is zero-length.
|
|||
|
b) file ~/INBOX exists and is in mtx format.
|
|||
|
6) mmdf format is selected if the spool directory file exists and is
|
|||
|
in mmdf format.
|
|||
|
7) unix format is selected if the spool directory file exists and is
|
|||
|
in unix format.
|
|||
|
8) the dummy driver is selected if the spool directory file does not
|
|||
|
exist, or exists and is empty.
|
|||
|
|
|||
|
If "black box mode" is not in effect, messages are automatically
|
|||
|
transferred ("snarfed") from the spool directory to an INBOX in mbox,
|
|||
|
mx, mbx, tenex, and mtx formats.
|
|||
|
|
|||
|
The following rules to select INBOX and its format apply in the order
|
|||
|
given if "black box mode" is in effect:
|
|||
|
1) mx format is selected if file ~/INBOX/.mxindex exists.
|
|||
|
2) mbx format is selected if file ~/INBOX exists and is in mbx format.
|
|||
|
3) tenex format is selected if file ~/INBOX exists and is in tenex format.
|
|||
|
4) mtx format is selected if file ~/INBOX exists and is in mtx format.
|
|||
|
5) mmdf format is selected if file ~/INBOX exists and is in mmdf format.
|
|||
|
6) unix format is selected if file ~/INBOX exists and is in unix format.
|
|||
|
7) the dummy driver is selected if ~/INBOX does not exist, or exists
|
|||
|
and is empty.
|
|||
|
|
|||
|
II. Special Name #mhinbox
|
|||
|
|
|||
|
#mhinbox always refers to the directory "inbox" in the MH path, which
|
|||
|
is declared in the ~/.mh_profile file. Messages are automatically
|
|||
|
transferred from the spool directory to #mhinbox mailbox.
|
|||
|
|
|||
|
|
|||
|
III. Special Prefix "#mh/"
|
|||
|
|
|||
|
Any name prefixed with "#mh/" always refers to a directory in the MH
|
|||
|
path, which is declared in the ~/.mh_profile file. For example, the name
|
|||
|
"#mh/foo" refers to directory "foo" in the MH path.
|
|||
|
|
|||
|
|
|||
|
IV. Special prefix "#news."
|
|||
|
|
|||
|
Any name prefixed with "#news" always refers to a newsgroup. For
|
|||
|
example, the name "#news.comp.mail.misc" refers to newsgroup
|
|||
|
"comp.mail.misc".
|
|||
|
|
|||
|
|
|||
|
V. All Other Names
|
|||
|
|
|||
|
The driver is selected by generating a file name from the mailbox
|
|||
|
name, and then examining the data of the object with the resulting
|
|||
|
name. The formats are checked in order: mx, mbx, tenex, mtx, mmdf,
|
|||
|
unix, and phile. The dummy driver is selected if the file is empty.
|
|||
|
|
|||
|
The file name is generated according to certain rules, based upon the
|
|||
|
prefix of the mailbox name. On UNIX, the following rules apply:
|
|||
|
|
|||
|
Prefix Interpretation of Suffix
|
|||
|
------ ------------------------
|
|||
|
/ [black box] preceeds a user name; "/foo/bar" means
|
|||
|
"black box user foo's mailbox bar"
|
|||
|
[not black box] preceeds an absolute path name.
|
|||
|
~ [not black box] preceeds a user name; "~foo/bar" means
|
|||
|
"UNIX user foo's mailbox bar"
|
|||
|
#ftp/ preceeds UNIX user ftp's mailbox name
|
|||
|
#public/ preceeds UNIX user imappublic's mailbox name
|
|||
|
#shared/ preceeds UNIX user imapshared's mailbox name
|
|||
|
|
|||
|
All other names are interpreted in the context of the UNIX user's home
|
|||
|
directory (not black box), the black box user's black box directory
|
|||
|
(black box), or UNIX user ftp's home directory (anonymous).
|
|||
|
|
|||
|
The strings "..", "//", and /~ are forbidden in names in:
|
|||
|
black box mode
|
|||
|
#ftp, #public, or #shared names
|
|||
|
anonymous users
|
|||
|
|
|||
|
Anonymous users may only access:
|
|||
|
INBOX (belonging to UNIX user ftp)
|
|||
|
files in or below UNIX user ftp's home directory
|
|||
|
#ftp, #news, and #public namespace
|
|||
|
|
|||
|
VI. Driver Comparison
|
|||
|
|
|||
|
The following information about the local file drivers is an
|
|||
|
elaboration of a table compiled by Osma Ahvenlampi.
|
|||
|
|
|||
|
Driver CA CE UID Kwd Sub NFS Performance Layout
|
|||
|
------ -- -- --- --- --- --- ----------- ------
|
|||
|
unix no no yes yes no limited fair file
|
|||
|
;;; traditional UNIX format
|
|||
|
mbox no no yes yes no limited fair file
|
|||
|
;;; traditional UNIX format, INBOX only, using ~/mbox with automatic
|
|||
|
;;; moving from the mail spool directory.
|
|||
|
mmdf no no yes yes no limited fair file
|
|||
|
;;; default on SCO systems
|
|||
|
mbx yes yes yes yes no no very good prefile
|
|||
|
;;; best performing local file driver; preferred format at UW
|
|||
|
tenex yes no no limited no no good prefile
|
|||
|
;;; compatible with UNIX MM
|
|||
|
mtx yes no no limited no no very good prefile
|
|||
|
;;; PC Pine standard format; compatible with TOPS-20; identical to tenex
|
|||
|
;;; but instead CRLF newlines instead of LF
|
|||
|
mx yes buggy yes yes yes no poor ixdir
|
|||
|
;;; fullest function; *not* recommended due to performance problems and bugs;
|
|||
|
;;; to be redesigned/rewritten
|
|||
|
mh yes no no no yes yes very poor dir
|
|||
|
;;; compatible with mh; #mhinbox for INBOX, #mh/ prefix for all other names
|
|||
|
news yes no yes no yes yes very poor ixdir
|
|||
|
;;; local news spool access; #news. prefix for all names
|
|||
|
phile no no no no no yes good file
|
|||
|
;;; reads arbitrary file as a single readonly message
|
|||
|
|
|||
|
IMPORTANT: the "performance" ratings are relative to other drivers,
|
|||
|
and not necessarily to other software which implements those formats.
|
|||
|
They relate to the driver's performance in typical operations such as
|
|||
|
an IMAP "FETCH ALL".
|
|||
|
|
|||
|
Key to headings:
|
|||
|
CA: concurrent read/write access
|
|||
|
CE: expunge permitted in concurrent read/write access
|
|||
|
UID: sticky UIDs
|
|||
|
Kwd: keyword flags
|
|||
|
Sub: subfolders
|
|||
|
NFS: usable over network filesystems (NFS, AFS, etc.)
|
|||
|
Layout: file - single file
|
|||
|
prefile - file with preallocated space for state
|
|||
|
dir - directory, messages are files
|
|||
|
ixdir - directory, messages are files, with helper index
|
|||
|
|
|||
|
In addition, drivers imap, nntp, and pop3 support IMAP4rev1, NNTP, and
|
|||
|
POP3 protocols respectively.
|