home *** CD-ROM | disk | FTP | other *** search
/ Handbook of Infosec Terms 2.0 / Handbook_of_Infosec_Terms_Version_2.0_ISSO.iso / text / rfcs / rfc1056.txt < prev    next >
Text File  |  1996-05-07  |  85KB  |  910 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                         M. Lambert Request for Comments: 1056                                           MIT Obsoletes: RFC-993                                             June 1988 
  8.  
  9.         PCMAIL: A Distributed Mail System for Personal Computers 
  10.  
  11.                             Table of Contents 
  12.  
  13.    1. Status of this Document                                      1    2. Introduction                                                 2    3. Repository architecture                                      4         3.1. Management of user mail state                         5         3.2. Repository-to-RFC-822 name translation                7    4. Communication between repository and client: DMSP            8         4.1. DMSP commands                                         8         4.2. DMSP responses                                        8         4.3. DMSP sessions                                        11         4.4. General operations                                   11         4.5. User operations                                      12         4.6. Client operations                                    13         4.7. Mailbox operations                                   14         4.8. Address operations                                   15         4.9. Subscription operations                              15         4.10. Message operations                                  16    5. Client Architecture                                         18         5.1. Multiple clients                                     18         5.2. Synchronization                                      18         5.3. Batch operation versus interactive operation         20         5.4. Message summaries                                    20    6. Typical interactive-style client-repository interaction     21    7. A current Pcmail implementation                             25         7.1. IBM PC client code                                   25         7.2. UNIX client code                                     26         7.3. Repository code                                      26    8. Conclusions                                                 26    I. DMSP Protocol Specification                                 28    II. Operations by name                                         37    III. Responses by number                                       38 
  14.  
  15. 1. Status of this Memo 
  16.  
  17.    This RFC is a discussion of the Pcmail workstation based distributed    mail system.  It is identical to the discussion in RFC-993, save that    a new, much simpler mail transport protocol is described.  The new    transport protocol is the result of continued research into ease of    protocol implementation and use issues.  Distribution of this memo is    unlimited. 
  18.  
  19.  
  20.  
  21. Lambert                                                         [Page 1] 
  22.  RFC 1056                         PCMAIL                        June 1988 
  23.  
  24.  2. Introduction 
  25.  
  26.    Pcmail is a distributed mail system providing mail service to an    arbitrary number of users, each of whom owns one or more    workstations.  Pcmail's motivation is to provide very flexible mail    service to a wide variety of different workstations, ranging in power    from small, resource-limited machines like IBM PCs to resource-rich    (where "resources" are primarily processor speed and disk space)    machines like Suns or Microvaxes.  It attempts to provide limited    service to resource-limited workstations while still providing full    service to resource-rich machines.  It is intended to work well with    machines only infrequently connected to a network as well as machines    permanently connected to a network.  It is also designed to offer    diskless workstations full mail service. 
  27.  
  28.    The system is divided into two halves.  The first consists of a    single entity called the "repository".  The repository is a storage    center for incoming mail.  Mail for a Pcmail user can arrive    externally from the Internet or internally from other repository    users.  The repository also maintains a stable copy of each user's    mail state (this will hereafter be referred to as the user's "global    mail state").  The repository is therefore typically a computer with    a large amount of disk storage. 
  29.  
  30.    The second half of Pcmail consists of one or more "clients".  Each    Pcmail user may have an arbitrary number of clients, typically    single-user workstations.  The clients provide a user with a friendly    means of accessing the user's global mail state over a network.  In    order to make the interaction between the repository and a user's    clients more efficient, each client maintains a local copy of its    user's global mail state, called the "local mail state".  It is    assumed that clients, possibly being small personal computers, may    not always have access to a network (and therefore to the global mail    state in the repository).  This means that the local and global mail    states may not be identical all the time, making synchronization    between local and global mail states necessary. 
  31.  
  32.    Clients communicate with the repository via the Distributed Mail    System Protocol (DMSP); the specification for this protocol appears    in appendix A. The repository is therefore a DMSP server in addition    to a mail end-site and storage facility.  DMSP provides a complete    set of mail manipulation operations ("send a message", "delete a    message", "print a message", etc.).  DMSP also provides special    operations to allow easy synchronization between a user's global mail    state and his clients' local mail states.  Particular attention has    been paid to the way in which DMSP operations act on a user's mail    state.  All DMSP operations are failure-atomic (that is, they are    guaranteed either to succeed completely, or leave the user's mail 
  33.  
  34.  
  35.  
  36. Lambert                                                         [Page 2] 
  37.  RFC 1056                         PCMAIL                        June 1988 
  38.  
  39.     state unchanged ).  A client can be abruptly disconnected from the    repository without leaving inconsistent or damaged mail states. 
  40.  
  41.    Pcmail's design has been directed by the characteristics of currently    available workstations.  Some workstations are fairly portable, and    can be packed up and moved in the back seat of an automobile.  A few    are truly portable--about the size of a briefcase--and battery-    powered.  Some workstations have constant access to a high-speed    local-area network; pcmail should allow for "on-line" mail delivery    for these machines while at the same time providing "batch" mail    delivery for other workstations that are not always connected to a    network.  Portable and semi-portable workstations tend to be    resource-poor.  A typical IBM PC has a small amount (typically less    than one megabyte) of main memory and little in the way of mass    storage (floppy-disk drives that can access perhaps 360 kilobytes of    data).  Pcmail must be able to provide machines like this with    adequate mail service without hampering its performance on more    resource-rich workstations. Finally, all workstations have some    common characteristics that Pcmail should take advantage of.  For    instance, workstations are fairly inexpensive compared to the various    time-shared systems that most people use for mail service.  This    means that people may own more than one workstation, perhaps putting    a Microvax in an office and an IBM PC at home. 
  42.  
  43.    Pcmail's design reflects the differing characteristics of the various    workstations.  Since one person can own several workstations, Pcmail    allows users multiple access points to their mail state.  Each Pcmail    user can have several client workstations, each of which can access    the user's mail by communicating with the repository over a network.    The clients all maintain local copies of the user's global mail    state, and synchronize the local and global states using DMSP. 
  44.  
  45.    It is also possible that some workstations will only infrequently be    connected to a network (and thus be able to communicate with the    repository).  The Pcmail design therefore allows two modes of    communication between repository and client.  "Interactive mode" is    used when the client is always connected to the network.  Any changes    to the client's local mail state are immediately also made to the    repository's global mail state, and any incoming mail is immediately    transmitted from repository to client.  "Batch mode" is used by    clients that have infrequent access to the repository.  Users    manipulate the client's local mail state, queueing the changes    locally.  When the client is next connected to the repository, the    changes are executed, and the client's local mail state is    synchronized with the repository's global mail state. 
  46.  
  47.    Finally, the Pcmail design minimizes the effect of using a resource-    poor workstation as a client.  Mail messages are split into two 
  48.  
  49.  
  50.  
  51. Lambert                                                         [Page 3] 
  52.  RFC 1056                         PCMAIL                        June 1988 
  53.  
  54.     parts: a "descriptor" and a "body".  The descriptor is a capsule    message summary whose length (typically about 100 bytes) is    independent of the actual message length.  The body is the actual    message text, including an RFC-822 standard message header.  While    the client may not have enough storage to hold a complete set of    messages, it can usually hold a complete set of descriptors, thus    providing the user with at least a summary of his mail state.  For    clients with extremely limited resources, Pcmail allows the storage    of partial sets of descriptors.  Although this means the user does    not have a complete local mail state, he can at least look at    summaries of some messages.  In the cases where the client cannot    immediately store message bodies, it can always pull them over from    the repository as storage becomes available. 
  55.  
  56.    The remainder of this document is broken up into sections discussing    the following: 
  57.  
  58.       - The repository architecture 
  59.  
  60.       - DMSP, its operations, and motivation for its design 
  61.  
  62.       - The client architecture 
  63.  
  64.       - A typical DMSP session between the repository and a         client 
  65.  
  66.       - The current Pcmail implementation 
  67.  
  68.       - Appendices describing the DMSP protocol in detail 
  69.  
  70. 3. Repository architecture 
  71.  
  72.    A typical machine running repository code has a relatively powerful    processor and a large amount of disk storage.  It must also be a    permanent network site, for two reasons.  First, clients communicate    with the repository over a network, and rely on the repository's    being available at any time.  Second, people sending mail to    repository users rely on the repository's being available to receive    mail at any time. 
  73.  
  74.    The repository must perform several tasks.  First, and most    importantly, the repository must efficiently manage a potentially    large number of users and their mail states.  Mail must be reliably    stored in a manner that makes it easy for multiple clients to access    the global mail state and synchronize their local mail states with    the global state.  Since a large category of electronic mail is    represented by bulletin boards (bboards), the repository should    efficiently manage bboard mail, using a minimum of storage to store 
  75.  
  76.  
  77.  
  78. Lambert                                                         [Page 4] 
  79.  RFC 1056                         PCMAIL                        June 1988 
  80.  
  81.     bboard messages in a manner that still allows any user subscribing to    the bboard to read the mail.  Second, the repository must be able to    communicate efficiently with its clients.  The protocol used to    communicate between repository and client must be reliable and must    provide operations that (1) allow typical mail manipulation, and (2)    support Pcmail's distributed nature by allowing efficient    synchronization between local and global mail states.  Third, the    repository must be able to process mail from sources outside the    repository's own user community (a primary outside source is the    Internet).  Internet mail will arrive with a NIC RFC-822 standard    message header; the recipient names in the message must be properly    translated from the RFC-822 namespace into the repository's    namespace. 
  82.  
  83. 3.1. Management of user mail state 
  84.  
  85.    Pcmail divides the world into a community of users.  Each user is    associated with a user object.  A user object consists of a unique    name, a password (which the user's clients use to authenticate    themselves to the repository before manipulating a global mail    state), a list of "client objects" describing those clients belonging    to the user, a list of "subscription objects", and a list of "mailbox    objects". 
  86.  
  87.    A client object consists of a unique name and a status.  A user has    one client object for every client he owns; a client cannot    communicate with the repository unless it has a corresponding client    object in a user's client list.  Client objects therefore serve as a    means of identifying valid clients to the repository.  Client objects    also allow the repository to manage local and global mail state    synchronization; the repository associates with every client an    "update list" of message state changes which have occurred since the    client's last synchronization. 
  88.  
  89.    A client's status is either "active" or "inactive".  The repository    defines inactive clients as those clients which have not connected to    the repository within a set time period (one week in the current    repository implementation).  When a previously-inactive client does    connect to the repository, the repository notifies the client that it    has been inactive for some time and should "reset" itself.  Resetting    a client has the effect of placing every message in every mailbox    onto the client's update list.  This allows the client to get a fresh    global mail state from the repository when it next synchronizes (see    synchronization discussion following).  The reset is performed on the    assumption that enough global state changes occur in a week that the    client would spend too much time performing an ordinary local state-    global state synchronization. 
  90.  
  91.  
  92.  
  93.  Lambert                                                         [Page 5] 
  94.  RFC 1056                         PCMAIL                        June 1988 
  95.  
  96.     Messages are stored in mailboxes.  Users can have any number of    mailboxes, which serve both to store and to categorize messages.  A    mailbox object both names a mailbox and describes its contents.    Mailboxes are identified by a unique name; their contents are    described by three numeric values.  The first is the total number of    messages in the mailbox, the second is the total number of unseen    messages (messages that have never been seen by the user via any    client) in the mailbox, and the third is the mailbox's next available    message unique identifier (UID).  The above information is stored in    the mailbox object to allow clients to get a summary of a mailbox's    contents without having to read all the messages within the mailbox. 
  97.  
  98.    Some mailboxes are special, in that other users may read the messages    stored in them.  These mailboxes are called "bulletin board    mailboxes" or "bboard mailboxes".  The repository uses bboard    mailboxes to store bboard mail.  Bboard mailboxes differ from    ordinary mailboxes in the following ways: 
  99.  
  100.       - Their names are unique across the entire repository;         for instance, only one bboard mailbox named "sf-lovers"         may exist in the entire repository community.  This         does not preclude other users from having an ordinary         mailbox named "sf-lovers". 
  101.  
  102.       - Subscribers to the bboard are granted read-only access         to the messages in the bboard mailbox.  The bboard         mailbox's owner (typically the system manager) has         read/update/delete access to the mailbox. 
  103.  
  104.    A bboard subscriber keeps track of the messages he has looked at via    a subscription object.  The subscription object contains the name of    the bboard, its owner (the user who owns the bboard mailbox where all    the messages are stored), and the UID of the first message not yet    seen by the subscriber. 
  105.  
  106.    Users gain read-only access to a bboard by creating a subscription to    it; they lose that access when they delete that subscription.  A list    of all bboard mailboxes available for subscription can be transmitted    to the user on demand. 
  107.  
  108.    Associated with each mailbox are any number of message objects.  Each    message is broken into two parts--a "descriptor", which contains a    summary of useful information about the message, and a "body", which    is the message text itself, including its NIC RFC-822 message header.    Each message is assigned a monotonically increasing UID based on the    owning mailbox's next available UID.  Each mailbox has its own set of    UIDs which, together with the mailbox name and user name, uniquely    identify the message within the repository.  A descriptor holds the 
  109.  
  110.  
  111.  
  112. Lambert                                                         [Page 6] 
  113.  RFC 1056                         PCMAIL                        June 1988 
  114.  
  115.     following information:  the message UID, the message size in bytes    and lines, four "useful" message header fields (the "date:", "to:",    "from:", and "subject:" fields), and sixteen flags.  These flags are    given identifying numbers 0 through 15.  Eight of these flags have    well-known definitions and are reserved for the repository's use.    The eight repository-defined flags mark: 
  116.  
  117.       - (#0) whether the message has been deleted 
  118.  
  119.       - (#1) whether it has been seen 
  120.  
  121.       - (#2) whether it has been forwarded to the user 
  122.  
  123.       - (#3) whether it has been forwarded by the user 
  124.  
  125.       - (#4) whether it has been filed (written to a text file         outside the repository) 
  126.  
  127.       - (#5) whether it has been printed (locally or remotely) 
  128.  
  129.       - (#6) whether it has been replied to 
  130.  
  131.       - (#7) whether it has been copied to another mailbox 
  132.  
  133.  
  134.  
  135.    The remaining eight flags are availble for user use.  Descriptors    serve as an efficient means for clients to get message information    without having to waste time retrieving the entire message from the    repository. 
  136.  
  137. 3.2. Repository-to-RFC-822 name translation 
  138.  
  139.    "Address objects" provide the repository with a means for translating    the RFC-822-style mail addresses in Internet messages into repository    names.  The repository provides its own namespace for message    identification.  Any message is uniquely identified by the triple    (user-name, mailbox-name, message-UID).  Any mailbox is uniquely    identified by the pair (user-name, mailbox-name).  In order to    translate between RFC-822-style mail addresses and repository names,    the repository maintains a list of address objects.  Each address    object is an association between an RFC-822-style address and a    (user-name, mailbox-name) pair.  When mail arrives from the Internet,    the repository can use the address object list to translate the    recipients into (user-name, mailbox-name) pairs and route the message    correctly. 
  140.  
  141.  
  142.  
  143.  
  144.  
  145. Lambert                                                         [Page 7] 
  146.  RFC 1056                         PCMAIL                        June 1988 
  147.  
  148.  4. Communication between repository and client: DMSP 
  149.  
  150.    The Distributed Mail System Protocol (DMSP) defines and manipulates    the objects mentioned in the previous section.  It has been designed    to work with Pcmail's singlerepository/multiple-client model of the    world.  In addition to providing typical mail manipulation functions,    DMSP provides functions that allow easy synchronization of global and    local mail states. 
  151.  
  152.    DMSP has been completely re-specified in this version of Pcmail.    Formerly, DMSP was implemented on top of the USP remote-procedure-    call protocol.  Since this protocol is not fully unofficially    specified (let alone officially specified) anywhere, implementation    of USP is difficult for sites wishing to implement Pcmail on    different systems.  We therefore have decided to completely redesign    DMSP.  It is now a very simple request/response protocol similar to    SMTP or NNTP, running directly on a reliable bidirectional byte-    stream such as TCP.  The TCP contact port for DMSP has been    designated 158.  Requests and responses consist of ASCII characters;    on octet-based transmission streams, each character is transmitted    rightjustified in an octet with the high-order bit cleared to zero. 
  153.  
  154. 4.1. DMSP commands 
  155.  
  156.    DMSP operations consist of an operation name, followed by zero or    more tab or space characters, followed by zero or more arguments,    each of which is separated from the operation name and other    arguments by one or more space or tab characters.  All operation    requests, as well as all responses, must be terminated with a    carriage-return plus line-feed (CR-LF) pair.  All operation names and    arguments must be taken from the set of alphanumeric characters plus    the characters dash ("-"), underscore ("_"), and period ("."). 
  157.  
  158.    DMSP operation names are case-insensitive; they may be transmitted in    any combination of upper and lower case.  DMSP arguments are case-    insensitive but case-preserving; in other words a mailbox named    "MarkL" may be referred to by an operation argument "markl", but will    always be stored, and transmitted in a repository response, as    "MarkL"; furthermore, any attempt to create a new mailbox "MaRkL"    will not be permitted. 
  159.  
  160.    Each operation argument may contain no more than 64 characters.  No    single request or response line may contain more than 512 characters,    including all white space and the terminating CR-LF. 
  161.  
  162. 4.2. DMSP responses 
  163.  
  164.    A DMSP operation always results in a response, which may be followed 
  165.  
  166.  
  167.  
  168. Lambert                                                         [Page 8] 
  169.  RFC 1056                         PCMAIL                        June 1988 
  170.  
  171.     in turn by a list, consisting of zero or more lines of CR-LF-    terminated text terminated by a single period (".") plus a CR-LF.  A    response is always prefaced by a three-digit reply code; possible    text following the response code can be in any format.  The response    code is sufficient to determine whether the operation succeeded or    failed, or whether more text is forthcoming following the response    line.  Any text following the response code is for information only,    and need not follow any particular format. 
  172.  
  173.    The first digit indicates whether the operation succeeded or failed,    and if it succeeded whether or not more text should be presented to    the repository.  Definitions of the first digit are similar to those    of NNTP: 
  174.  
  175.    1XX             Informative message 
  176.  
  177.     2XX             Operation completed successfully 
  178.  
  179.     3XX             Operation completed successfully, present                    remainder of text and terminate with a single                    period plus CR-LF pair. 
  180.  
  181.     4XX             Operation was performed and failed for some                    reason. 
  182.  
  183.     5XX             Operation could not be performed because of a                    protocol syntax error of some sort. 
  184.  
  185.     The second digit indicates the type of object referred to by the    response. 
  186.  
  187.     X0X             Miscellaneous 
  188.  
  189.     X1X             User operation 
  190.  
  191.     X2X             Client operation 
  192.  
  193.     X3X             Mailbox operation 
  194.  
  195.  
  196.  
  197.  Lambert                                                         [Page 9] 
  198.  RFC 1056                         PCMAIL                        June 1988 
  199.  
  200.     X4X             Subscription operation 
  201.  
  202.     X5X             Message operation 
  203.  
  204.     X6X             Address operation 
  205.  
  206.     In an error response, the final digit can describe the type of error    that occurred.  Otherwise, it simply gives a response a unique    number.  Numbers 0 through 3 are significant in 4XX-class (error)    responses only.  Numbers 0-9 in all other responses serve only to    differentiate responses dealing with the same type of object under    different circumstances. 
  207.  
  208.    4X0             Operation failed because object exists 
  209.  
  210.     4X1             Operation failed because object does not exist 
  211.  
  212.     4X2             Operation failed because of an internal error 
  213.  
  214.     4X3             Operation failed because of an argument syntax                    error 
  215.  
  216.     Each operation generates one of a set of responses, detailed in the    protocol specification appendix. 
  217.  
  218.    List termination is determined solely by a well-known character    sequence (CR-LF, period, CR-LF).  Since application data could well    accidentally contain this termination sequence, the transmitting    protocol module must modify application data so it contains no    termination sequences.  The receiving module must similarly undo the    modification before presenting the data to the application at the    receiving end. 
  219.  
  220.    The transmitting module modifies application data as follows:  If a    line of application data begins with a period, that period is    duplicated.  Since the termination sequence is a single period,    accidental termination has now been prevented. 
  221.  
  222.    The receiving protocol checks incoming all incoming data lines for a    leading period.  A single period is a list terminator; a period    followed by other text is removed before being presented to the 
  223.  
  224.  
  225.  
  226. Lambert                                                        [Page 10] 
  227.  RFC 1056                         PCMAIL                        June 1988 
  228.  
  229.     receiving application. 
  230.  
  231. 4.3. DMSP sessions 
  232.  
  233.    A DMSP session proceeds as follows: a client begins the session with    the repository by opening a connection to the repository's machine.    The client then authenticates both itself and its user to the    repository with a "login" operation.  If the authentication is    successful, the user performs an arbitrary number of DMSP operations    before ending the session with a "logout" operation, at which time    the connection is closed by the repository. 
  234.  
  235.    Because DMSP can manipulate a pair of mail states (local and global)    at once, it is extremely important that all DMSP operations are    failure-atomic.  Failure of any DMSP operation must leave both states    in a consistent, known state.  For this reason, a DMSP operation is    defined to have failed unless an explicit acknowledgement is received    by the operation initiator.  This acknowledgement consists of a    response code possibly followed by information, as described above. 
  236.  
  237.    Following is a general discussion of all the DMSP operations.  The    operations are broken down by type: general operations, user    operations, client operations, mailbox operations, address    operations, subscription operations, and message operations.    Detailed operation specifications appear at the end of this document. 
  238.  
  239. 4.4. General operations 
  240.  
  241.    The first group of DMSP operations perform general functions that    operate on no one particular class of object.  DMSP has three general    operations which provide the following services: 
  242.  
  243.    In order to prevent protocol version skew between clients and the    repository, DMSP provides a "send-version" operation.  The client    supplies its DMSP version number as an argument; the operation    succeeds if the supplied version number matches the repository's DMSP    version number.  It fails if the two version numbers do not match.    The version number is a natural number like "100", "101", "200".  The    "send-version" operation should be the first that a client sends to    the repository, since no other operation may work correctly if the    client and repository are using different versions of DMSP. 
  244.  
  245.    Users can send mail to other users via the "send-message" operation.    The message must have an Internet-style header as defined by NIC    RFC-822.  The repository takes the message and distributes it to the    mailboxes specified by the message header's destination fields.  If    one or more of the mailboxes exists outside the repository's user    community, the repository is responsible for handing the message to a 
  246.  
  247.  
  248.  
  249. Lambert                                                        [Page 11] 
  250.  RFC 1056                         PCMAIL                        June 1988 
  251.  
  252.     local SMTP server.  The message envelope is generated by the    repository from the message contents since it may be difficult for    some clients to perform envelope-generation functions such as address    verification and syntax checking. 
  253.  
  254.    A success acknowledgement is sent from the repository only if (1) the    entire message was successfully transmitted from client to    repository, and (2) the message header was properly formatted.  Once    the repository has successfully received the message from the client,    any subsequent errors in queueing or delivery must be noted via    return mail to the user. 
  255.  
  256.    The last general operation is the "help" operation.  The repository    responds to "help" by printing an acknowledgement followed by a list    of supported commands, terminated with a period plus CR-LF.  The    information is intended for display and can be in any format as long    as the individual lines of text returned by the repository are CR-    LF-terminated. 
  257.  
  258. 4.5. User operations 
  259.  
  260.    The next series of DMSP operations manipulates user objects.  The    most common of these operations are "login" and "logout".  A client    must perform a login operation before being able to access a user's    mail state.  A DMSP login operation takes five arguments: (1) the    user's name, (2) the user's password, (3) the name of the client    performing the login, (4) a flag set to 1 if the repository should    create a client object for the client if one does not exist (0 else),    and (5) a flag set to 1 if the client wishes to operate in "batch    mode" and 0 if the client wishes to operate in "interactive" mode.    The last flag value allows the repository to tune internal parameters    for either mode of operation. 
  261.  
  262.    The repository can make one of three responses.  First, it can make a    success response, indicating successful authentication.  Second, it    can make one of several failure responses, indicating failed    authentication.  Finally, it can make a special response indicating    that authentication was successful, but that the client has not been    used in over a week.  This last response serves as a hint that the    client should consider erasing its local mail state and pulling over    a complete version of the repository's mail state.  This is done on    the assumption that so many mail state changes have been made in a    week that it would be inefficient to perform a normal    synchronization. 
  263.  
  264.    When a client has completed a session with the repository, it    performs a logout operation.  This allows the repository to perform    any necessary cleanup before closing the network connection. 
  265.  
  266.  
  267.  
  268. Lambert                                                        [Page 12] 
  269.  RFC 1056                         PCMAIL                        June 1988 
  270.  
  271.     A user can change his password via the "set-password" operation.  The    operation works much the same as the UNIX change-password operation,    taking as arguments the user's current password and a desired new    password.  If the current password given matches the user's current    password, the user's current password is changed to the new password    given.  Because encryption can be difficult to perform on some    resource-poor clients, passwords are transmitted in clear text.    Clearly this is not an acceptable long-term solution, and    alternatives are welcomed. 
  272.  
  273. 4.6. Client operations 
  274.  
  275.    DMSP provides four operations to manipulate client objects.  The    first, "list-clients", tells the repository to send the user's client    list to the requesting client.  The list is a series of lines, one    per client, containing the client's name, followed by whitespace,    followed by a status string.  The status is either "inactive" or    "active".  As with all text responses, the list is terminated with a    period plus CR-LF. 
  276.  
  277.    The "create-client" operation allows a user to add a client object to    his list of client objects.  Although the login operation duplicates    this functionality via the "create-this- client?" flag, the create-    client operation is a useful means of creating a number of new client    objects while logged into the repository via an existing client.  The    create-client operation requires as an argument the name of the    client to create. 
  278.  
  279.    The "delete-client" operation removes an existing client object from    a user's client list.  The client being removed cannot be in use by    anyone at the time.  Delete-client also requires as an argument the    name of the client to delete. 
  280.  
  281.    The last client operation, "reset-client", causes the repository to    place all of the messages in all mailboxes onto the named client's    update list.  When a client next synchronizes with the repository, it    will end up receiving a list of all descriptors when it requests a    list of changed message descriptors for a particular mailbox.  This    is useful for two reasons.  First, a client's local mail state could    easily become lost or damaged, especially if it is stored on a floppy    disk.  Second, if a client has been marked as inactive by the    repository, the reset-client operation provides a fast way of    resynchronizing with the repository, assuming that so many    differences exist between the local and global mail states that a    normal synchronization would take far too much time. 
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  Lambert                                                        [Page 13] 
  288.  RFC 1056                         PCMAIL                        June 1988 
  289.  
  290.  4.7. Mailbox operations 
  291.  
  292.    DMSP supports seven operations that manipulate mailbox objects.    First, "list-mailboxes" has the repository send to the requesting    client information on each mailbox.  The repository transmits one    line of information per mailbox, terminating the list with a period    plus CR-LF.  Each line contains, in order and separated by    whitespace, the mailbox name, "next available UID", total message    count, and unseen message count.  This operation is useful in    synchronizing local and global mail states, since it allows a client    to compare the user's global mailbox list with a client's local    mailbox list.  The list of mailboxes also provides a quick summary of    each mailbox's contents without having the contents present. 
  293.  
  294.    The "create-mailbox" has the repository create a new mailbox and    attach it to the user's list of mailboxes.  It takes as an argument    the name of the mailbox to create. 
  295.  
  296.    "Delete-mailbox" removes a mailbox from the user's list of mailboxes.    All messages within the mailbox are also deleted and permanently    removed from the system.  Any address objects binding the mailbox    name to RFC-822-style mailbox addresses are also removed from the    system.  Delete-mailbox takes as an argument the name of the mailbox    to delete. 
  297.  
  298.    "Create-bboard-mailbox" allows a user to create a bboard mailbox.    The name given as an argument must be unique across the entire    repository user community.  Once the bboard mailbox has been created,    other users may subscribe to it, using subscription objects to keep    track of which messages they have read on which bboard mailboxes. 
  299.  
  300.    "Delete-bboard-mailbox" allows a bboard's owner to delete a bboard    mailbox.  Subscribers who attempt to read from a bboard mailbox after    it has been deleted are told that the bboard no longer exists.    Again, the operation's argument is the name of the bboard mailbox to    delete. 
  301.  
  302.    "Reset-mailbox" causes the repository to place all of the messages in    a named mailbox onto the current client's update list.  When the    client next requests a list of changed message descriptors for this    mailbox, it will receive a list of all message descriptors in the    mailbox.  This operation is merely a more specific version of the    reset-client operation (which allows the client to pull over a    complete copy of the user's global mail state).  Its primary use is    for mailboxes whose contents have accidentally been destroyed    locally. 
  303.  
  304.    Finally, DMSP has an "expunge-mailbox" operation.  Any message can be 
  305.  
  306.  
  307.  
  308. Lambert                                                        [Page 14] 
  309.  RFC 1056                         PCMAIL                        June 1988 
  310.  
  311.     deleted and "undeleted" at will, since this simply changes the value    of a flag attached to the message.  Deletions are made permanent by    performing an expunge-mailbox operation.  The expunge operation    causes the repository to look through a named mailbox, removing from    the system any messages marked "deleted".  Expunge-mailbox takes as    an argument the name of the mailbox to expunge. 
  312.  
  313. 4.8. Address operations 
  314.  
  315.    DMSP provides three operations that allow users to manipulate address    objects.  First, the "list-address" operation returns a list of    address objects associated with a particular mailbox.  Each address    is transmitted on a separate line terminated by a CR-LF; the list is    terminated with a period plus CR-LF. 
  316.  
  317.    The "create-address" operation adds a new address object that    associates a (user-name, mailbox-name) pair with a given RFC-822-    style mailbox address.  It takes as arguments the mailbox name and    the address name. 
  318.  
  319.    Finally, the "delete-address" operation destroys the address object    binding the given RFC-822-style mail address and the given (user-    name, mailbox-name) pair.  Arguments are the address to delete and    the mailbox it belongs to. 
  320.  
  321. 4.9. Subscription operations 
  322.  
  323.    DMSP provides five subscription operations.  The first, "list-    subscriptions", gives the user a list of the bboards he is currently    subscribing to.  The list consists of one line of information per    subscription.  Each entry contains the following information, in    order: 
  324.  
  325.       - The bulletin board's name 
  326.  
  327.       - The UID of the first message the subscriber has not yet         seen 
  328.  
  329.       - The number of messages the subscriber has not yet seen 
  330.  
  331.       - The highest message UID in the bulletin board 
  332.  
  333.    "List-available-subscriptions" gives the user a list of all bboards    he can subscribe to.  The list consists of bboard names, one per    line, terminated by a period plus CR-LF.  "Createsubscription" adds a    subscription to the user's list of subscriptions; it takes as an    argument the name of the bboard to subscribe to.  "Delete-    subscription" removes a subscription from the list, and takes as an 
  334.  
  335.  
  336.  
  337. Lambert                                                        [Page 15] 
  338.  RFC 1056                         PCMAIL                        June 1988 
  339.  
  340.     argument the name of the subscription to remove.  Note that this does    not delete the associated bboard mailbox (obviously only the bboard's    owner can do that).  It merely removes the user from the list of the    bboard's subscribers.  Finally DMSP allows the user to tell the    repository which messages in a bboard he has seen.  Every    subscription object contains the UID of the first message the user    has not yet seen; the "reset-subscription" operation updates that    number, insuring that the user sees a given bboard message only once.    Reset-subscription takes as arguments the name of the subscription    and the new UID value. 
  341.  
  342. 4.10. Message operations 
  343.  
  344.    The most commonly-manipulated Pcmail objects are messages; DMSP    therefore provides special message operations to allow efficient    synchronization, as well as a set of operations to perform standard    message-manipulation functions. 
  345.  
  346.    A user may request a series of descriptors with the "fetch-    descriptors" operation.  The series is identified by a pair of    message UIDs, representing the lower and upper bounds of the list.    Since UIDs are defined to be monotonically increasing numbers, a pair    of UIDs is sufficient to completely identify the series of    descriptors.  If the lower bound UID does not exist, the repository    starts the series with the first message with UID greater than the    lower bound.  Similarly, if the upper bound does not exist, the    repository ends the series with the last message with UID less than    the upper bound.  If certain UIDs within the series no longer exist,    the repository obviously does not send them.  The repository returns    the descriptors in a list with the following format: 
  347.  
  348.    If a descriptor has been expunged, the repository transmits two    consecutive lines of information: the word "expunged" on one line,    followed by the message UID on the next line.  "Expunged"    notifications are only transmitted in response to a "fetch-changed-    descriptors" command; they are an indication to the client that    someone else has expunged the mailbox and that the client should    remove the local copy of the expunged message. 
  349.  
  350.    If a descriptor has not been expunged, it is presented as six    consecutive lines of information: the word "descriptor" on the first    line, followed by a second line containing the message UID, flag    states (see examples following), message length in bytes, and message    length in lines, followed by four lines containing in order the    message "from:" field, "to:" field, "date:" field, and "subject:"    field.  The entire list of descriptors is terminated by a period plus    CR-LF; individual descriptors are not specially terminated since the    first line ("expunged" or "descriptor") of a list entry determines 
  351.  
  352.  
  353.  
  354. Lambert                                                        [Page 16] 
  355.  RFC 1056                         PCMAIL                        June 1988 
  356.  
  357.     the exact length of the entry (two lines or six lines). 
  358.  
  359.    The "fetch-changed-descriptors" operation is intended for use during    state synchronization.  Whenever a descriptor changes state (one of    its flags is cleared, for example), the repository notes those    clients which have not yet recorded the change locally.  Fetch-    changed-descriptors has the repository send to the client a maximum    of the first N descriptors which have changed since the client's last    synchronization, where N is a number sent by the client.  The list    sent begins with the descriptor with lowest UID.  Note that the list    of descriptors is only guaranteed to be monotonically increasing for    a given call to "fetch-changed-descriptors"; messages with lower UIDs    may be changed by other clients in between calls to "fetch-    changeddescriptors".  "Fetch-changed-descriptors" takes two    arguments:  the name of the mailbox to search, and the maximum number    of descriptors for the repository to return. 
  360.  
  361.    Once the changed descriptors have been looked at, a user will want to    inform the repository that the current client has recorded the change    locally.  The "reset-descriptors" command causes the repository to    mark as "recorded by current client" a given series of descriptors.    The series is identified by a low UID and a high UID.  UIDs within    the series that no longer exist are ignored.  Arguments are: mailbox    name, low UID in range, and high UID in range. 
  362.  
  363.    Whole messages are transmitted from repository to user with the    "fetch-message" operation.  The separation of "fetchdescriptors" and    "fetch-message" operations allows clients with small amounts of disk    storage to obtain a small message summary (via "fetch-descriptors" or    "fetch-changed-descriptors") without having to pull over the entire    message.  Arguments are mailbox name, followed by message UID. 
  364.  
  365.    Frequently, a message may be too large for some clients to store    locally.  Users can still look at the message contents via the    "print-message" operation.  This operation has the repository send a    copy of the message to a named printer.  The printer name need only    have meaning to the particular repository implementation; DMSP    transmits the name only as a means of identification.  Arguments are:    mailbox name, followed by message UID, followed by printer    identification. 
  366.  
  367.    Copying of one message into another mailbox is accomplished via the    "copy-message" operation.  A descriptor list of length one,    containing a descriptor for the copied message, is returned if the    copy operation is successful.  This descriptor is required because    the copied message acquires a UID different from the original    message.  The client cannot be expected to know which UID has been    assigned the copy, hence the repository's sending a descriptor 
  368.  
  369.  
  370.  
  371. Lambert                                                        [Page 17] 
  372.  RFC 1056                         PCMAIL                        June 1988 
  373.  
  374.     containing the UID.  Arguments to copy-message are:  source mailbox    name, target mailbox name, and source message UID. 
  375.  
  376.    Each message has associated with it sixteen flags, as described    earlier.  These flags can be set and cleared using the "set-message-    flag" operation.  The first eight flags have special meaning to the    repository as described above; the remaining eight are for user use.    Set-message-flag takes four arguments: mailbox name, message UID,    flag number (0 through 15), and desired flag state (0 or 1). 
  377.  
  378. 5. Client Architecture 
  379.  
  380.    Clients can be any of a number of different workstations; Pcmail's    architecture must therefore take into account the range of    characteristics of these workstations.  First, most workstations are    much more affordable than the large computers currently used for mail    service.  It is therefore possible that a user may well have more    than one.  Second, some workstations are portable and they are not    expected to be constantly tied into a network.  Finally, many of the    smaller workstations resource-poor, so they are not expected to be    able to store a significant amount of state information locally.  The    following subsections describe the particular parts of Pcmail's    client architecture that address these different characteristics. 
  381.  
  382. 5.1. Multiple clients 
  383.  
  384.    The fact that Pcmail users may own more than one workstation forms    the rationale for the multiple client model that Pcmail uses.  A    Pcmail user may have one client at home, another at an office, and    maybe even a third portable client.  Each client maintains a separate    copy of the user's mail state, hence Pcmail's distributed nature.    The notion of separate clients allows Pcmail users to access mail    state from several different locations.  Pcmail places no    restrictions on a user's ability to communicate with the repository    from several clients at the same time.  Instead, the decision to    allow several clients concurrent access to a user's mail state is    made by the repository implementation. 
  385.  
  386. 5.2. Synchronization 
  387.  
  388.    Some workstations tend to be small and fairly portable; the    likelihood of their always being connected to a network is relatively    small.  This is another reason for each client's maintaining a local    copy of a user's mail state.  The user can then manipulate the local    mail state while not connected to the network (and the repository).    This immediately brings up the problem of synchronization between    local and global mail states.  The repository is continually in a    position to receive global mail state updates, either in the form of 
  389.  
  390.  
  391.  
  392. Lambert                                                        [Page 18] 
  393.  RFC 1056                         PCMAIL                        June 1988 
  394.  
  395.     incoming mail, or in the form of changes from other clients.  A    client that is not always connected to the net cannot immediately    receive the global changes.  In addition, the client's user can make    his own changes on the local mail state. 
  396.  
  397.    Pcmail's architecture allows fast synchronization between client    local mail states and the repository's global mail state.  Each    client is identified in the repository by a client object attached to    the user.  This object forms the basis for synchronization between    local and global mail states.  Some of the less common state changes    include the adding and deleting of user mailboxes and the adding and    deleting of address objects.  Synchronization of these changes is    performed via DMSP list operations, which allow clients to compare    their local versions of mailbox and address object lists with the    repository's global version and make any appropriate changes.  The    majority of possible changes to a user's mail state are in the form    of changed descriptors.  Since most users will have a large number of    messages, and message states will change relatively often, special    attention needs to be paid to message synchronization. 
  398.  
  399.    An existing descriptor can be changed in one of three ways:  first,    one of its sixteen flag values can be changed (this encompasses the    user's reading an unseen message, deleting a message, printing a    message, etc).  Second, a descriptor can be created, either by the    delivery of a new message or by the copying of a message from one    mailbox to another.  Finally, a descriptor can be destroyed, via an    "expunge-mailbox" operation. 
  400.  
  401.    In the above cases, synchronization is required between the    repository and every client that has not previously noted the change.    To keep track of which clients have noticed a global mail state    change and changed their local states accordingly, each mailbox has    associated with it a list of active clients.  Each client has a    (potentially empty) "update list" of messages which have changed    since that client last synchronized. 
  402.  
  403.    When a client connects to the repository, it executes a DMSP "fetch-    changed-descriptors" operation.  This causes the repository to return    a list of all descriptors on that client's update list.  When the    client receives the changed descriptors, it may do one of two things:    if the descriptor is marked "expunged", it can remove the    corresponding message from the local mailbox.  If the descriptor is    not expunged, the client can store the descriptor, thus updating the    local mail state.  After a changed descriptor has been recorded, the    client uses the DMSP "reset-descriptors" operation to remove    descriptors from its update list.  Those descriptors will now not be    sent to the client unless (1) it is explicitly requested via a    "fetch-descriptors" operation, or (2) it changes again. 
  404.  
  405.  
  406.  
  407. Lambert                                                        [Page 19] 
  408.  RFC 1056                         PCMAIL                        June 1988 
  409.  
  410.     In this manner, a client can run through its user's mailboxes,    getting all changes, incorporating them into the local mail state,    and marking the changes as recorded. 
  411.  
  412. 5.3. Batch operation versus interactive operation 
  413.  
  414.    Because of the portable nature of some workstations, they may not    always be connected to a network (and able to communicate with the    repository).  Since each client maintains a local mail state, Pcmail    users can manipulate the local state while not connected to the    repository.  This is known as "batch" operation, since all changes    are recorded by the client and made to the repository's global state    in a batch, when the client next connects to the repository.    Interactive operation occurs when a client is always connected to the    repository.  In interactive mode, changes made to the local mail    state are also immediately made to the global state via DMSP    operations. 
  415.  
  416.    In batch mode, interaction between client and repository takes the    following form: the client connects to the repository and sends over    all the changes made by the user to the local mail state.  The    repository changes its global mail state accordingly.  When all    changes have been processed, the client begins synchronization; this    incorporates newly-arrived mail, as well as mail state changes by    other clients, into the local state. 
  417.  
  418.    In interactive mode, since local changes are immediately propagated    to the repository, the first part of batch-type operation is    eliminated.  The synchronization process also changes; although one    synchronization is required when the client first opens a connection    to the repository, subsequent synchronizations can be performed    either at the user's request or automatically every so often by the    client. 
  419.  
  420. 5.4. Message summaries 
  421.  
  422.    Smaller workstations may have little in the way of disk storage.    Clients running on these workstations may never have enough room for    a complete local copy of a user's global mail state.  This means that    Pcmail's client architecture must allow user's to obtain a clear    picture of their mail state without having all their messages    present. 
  423.  
  424.    Descriptors provide message information without taking up large    amounts of storage.  Each descriptor contains a summary of    information on a message.  This information includes the message UID,    its length in bytes and lines, its status (contained in the eight    system-defined and eight user-defined flags), and portions of its 
  425.  
  426.  
  427.  
  428. Lambert                                                        [Page 20] 
  429.  RFC 1056                         PCMAIL                        June 1988 
  430.  
  431.     RFC-822 header (the "from:", "to:", "date:" and "subject:"  fields).    All of this information can be encoded in a small (around 100 bytes)    data structure whose length is independent of the size of the message    it describes. 
  432.  
  433.    Most clients should be able to store a complete list of message    descriptors with little problem.  This allows a user to get a    complete picture of his mail state without having all his messages    present locally.  If a client has extremely limited amounts of disk    storage, it is also possible to get a subset of the descriptors from    the repository.  Short messages can reside on the client, along with    the descriptors, and long messages can either be printed via the DMSP    print-message operation, or specially pulled over via the fetch-    message operation. 
  434.  
  435. 6. Typical interactive-style client-repository interaction 
  436.  
  437.    The following example describes a typical communication session    between the repository and a client mail reader.  The client is one    of three belonging to user "Fred".  Its name is "office-client", and    since Fred has used the client within the last week, it is marked as    "active".  Fred has two mailboxes:  "fred" is where all of his    current mail is stored; "archive" is where messages of lasting    importance are kept.  The example will run through a simple    synchronization operation.  Typically, the synchronization will be    performed by a mail reader as part of a "get new mail" operation. 
  438.  
  439.    First Fred's mail reader connects to the repository and receives the    following banner: 
  440.  
  441.        200 Pcmail repository version 3.0.0 ready 
  442.  
  443.    In order to access his global mail state, the mail reader must    authenticate Fred to the repository; this is done via the DMSP login    operation: 
  444.  
  445.        login fred fred-password office-client 0 0 
  446.  
  447.    This tells the repository that Fred is logging in via "office-    client", and that "office-client" is identified by an existing client    object in Fred's mail state.  The first argument to the login    operation is Fred's repository user name.  The second argument is    Fred's password.  The third argument is the name of the client    communicating with the repository.  The fourth argument tells the    repository not to create "office-client" even if it cannot find its    client object.  The final argument tells the repository that Fred's    client is not operating in batch mode but rather in interactive mode. 
  448.  
  449.  
  450.  
  451.  Lambert                                                        [Page 21] 
  452.  RFC 1056                         PCMAIL                        June 1988 
  453.  
  454.     Fred's authentication checks out, so the repository logs him in. 
  455.  
  456.        200 command OK 
  457.  
  458.    Now that Fred is logged in, the mail reader performs an initial    synchronization.  This process starts with the mail reader's asking    for an up-to-date list of mailboxes: 
  459.  
  460.        list-mailboxes 
  461.  
  462.     The repository replies with: 
  463.  
  464.         230 mailbox list follows:        fred 2313 10 1        archive 101 100 0        . 
  465.  
  466.     This tells the mail reader that there are two mailboxes, "fred" and    "archive".  "Fred" has 10 messages, one of which is unseen.  The next    incoming message will be assigned a UID of 2313.  "Archive", on the    other hand, has 100 messages, none of which are unseen.  The next    message sent to "archive" will be assigned the UID 101.  There are no    new mailboxes in the list (if there were, the mail reader would    create them.  On the other hand, if some mailboxes in the mail    reader's local list were not in the repository's list, the program    would assume them deleted by another client and delete them locally    as well). 
  467.  
  468.    To synchronize, the mail reader need only look at each mailbox's    contents to see if (1) any new mail has arrived, or (2) if Fred    changed any messages on one of his other two clients subsequent to    "office-client"'s last connection to the repository. 
  469.  
  470.    The mail reader asks for any changed descriptors via the "fetch-    changed-descriptors" operation.  It requests at most ten changed    descriptors since storage is very limited on Fred's workstation. 
  471.  
  472.        fetch-changed-descriptors fred 10 
  473.  
  474.     The repository responds with: 
  475.  
  476.         250 descriptor list follows:        expunged 
  477.  
  478.  
  479.  
  480. Lambert                                                        [Page 22] 
  481.  RFC 1056                         PCMAIL                        June 1988 
  482.  
  483.         2101        expunged        2104        descriptor        2107 1100011100000010 1400 30        foo@bar.edu (Foo Jones)        fred@PTT.LCS.MIT.EDU        Wed, 9 Dec 87 10:43:52 EST        A typical subject line        descriptor        2312 0000000000000000 12232 320        joe@athena.mit.edu        fred@PTT.LCS.MIT.EDU        Thu, 17 Dec 87 18:24:09 PST        Another typical subject line        . 
  484.  
  485.    If a descriptor changed because it was expunged, it is transmitted as    two lines: the word "expunged" on one line, followed by the message    UID on the next line.  If one of its flags changed state, or it is a    new message, it is transmitted as six lines: the word "descriptor" on    one line, followed by a line containing the message UID, flags, and    length in bytes and lines, followed by the to, from, date, and    subject fields, each on one line.  The flags are transmitted as a    single string of ones and zeroes, a one if the flag is on and a zero    if the flag is off.  All 16 flags are always transmitted.  Flag    zero's state is the first character in the flag string; flag    fifteen's is the last character in the flag string. 
  486.  
  487.    The first two descriptors in the list have been expunged, presumably    by Fred's expunging his mailbox on another client.  The mail reader    removes messages 2101 and 2104 from its local copy of mailbox "fred".    The next descriptor in the list is one which Fred marked for deletion    on another client yesterday.  The mail reader marks the local version    of the message as deleted.  The last descriptor in the list is a new    one.  The mail reader adds the descriptor to its local list.  Since    all changes to mailbox "fred" have now been recorded locally, the    update list can be reset: 
  488.  
  489.        reset-descriptors fred 1 2312 
  490.  
  491.     The repository responds with: 
  492.  
  493.         200 command OK 
  494.  
  495.    indicating that it has removed from "office-client"'s update list all 
  496.  
  497.  
  498.  
  499. Lambert                                                        [Page 23] 
  500.  RFC 1056                         PCMAIL                        June 1988 
  501.  
  502.     messages in mailbox "fred" with UIDs between 1 and 2312 inclusive (in    this case just two messages).  "Fred" has now been synchronized.  The    mail reader now turns to Fred's "archive" mailbox and asks for the    first ten changed descriptors. 
  503.  
  504.        fetch-changed-descriptors archive 10 
  505.  
  506.     The repository responds with: 
  507.  
  508.         250 descriptor list follows:        . 
  509.  
  510.    The zero-length list tells the mail reader that no descriptors have    been changed in "archive" since its last synchronization.  No new    synchronization needs to be performed. 
  511.  
  512.    Fred's mail reader is now ready to pull over the new message.  The    message is 320 lines long; there might not be sufficient storage on    "office-client" to hold the new message.  The mail reader tries    anyway: 
  513.  
  514.        fetch-message fred 2312 
  515.  
  516.     The repository begins transmitting the message: 
  517.  
  518.         251 message follows:        UID: 2312        From: joe@bar.mit.edu        To: fred@PTT.LCS.MIT.EDU        Date: Thu, 17 Dec 87 18:24:09 PST        Subject: Another typical subject line 
  519.  
  520.        Fred, 
  521.  
  522.        ... 
  523.  
  524.    Halfway through the message transmission, Fred's workstation runs out    of disk space.  Because all DMSP operations are defined to be    failure-atomic, the portion of the message already transmitted is    destroyed locally and the operation fails.  The mail reader informs    Fred that the message cannot be pulled over because of a lack of disk    space.  The synchronization process is now finished and Fred can    start reading his mail.  The new message that was too big to fit on    "office-client" will be marked "off line"; Fred can use the mail 
  525.  
  526.  
  527.  
  528. Lambert                                                        [Page 24] 
  529.  RFC 1056                         PCMAIL                        June 1988 
  530.  
  531.     reader to either remote-print it or delete and expunge other messages    until he has enough space to store the new message. 
  532.  
  533.    Since Fred is running in interactive mode, changes he makes to any    messages will immediately be transmitted into DMSP operations and    sent to the repository.  Depending on the mail reader implementation,    Fred will either have to execute a "synchronize" command periodically    or the client will synchronize for him automatically every so often. 
  534.  
  535. 7. A current Pcmail implementation 
  536.  
  537.    The following section briefly describes a current Pcmail system that    services a small community of users.  The Pcmail repository runs    under UNIX on a DEC Microvax-II connected to the Internet.  The    clients run on IBM PCs, XTs, and ATs, as well as Sun workstations,    Microvaxes, and VAX-750s. 
  538.  
  539. 7.1. IBM PC client code 
  540.  
  541.    Client code for the IBM machines operates only in batch mode.  Users    make local state changes in a mail reader; the changes are queued    until the user runs a network client program.  The program connects    to the repository, performs the queued changes, and synchronizes    local and global mail states.  The network client program then    disconnects from the repository. 
  542.  
  543.    The IBM PC client code has gone through several revisions since the    first Pcmail RFC was published.  What was once a fairly primitive and    cumbersome system has evolved into a system that makes excellent use    of the PC's limited resources and provides a fairly powerful, easy-    to-use mail reader. 
  544.  
  545.    Users access and modify their local mail state via a mail reader    written in the Epsilon text editor's EEL extension language.  Users    are given a variety of commands to operate on individual messages and    mailboxes, as well as to compose outgoing mail. 
  546.  
  547.    Synchronization and the processing of queued changes is performed by    a separate program, which the user runs as desired.  The program    takes any actions queued while operating the mail reader, and    converts them into DMSP operations.  All queued changes are made    before any synchronization is performed.  The program can be invoked    directly from the mail reader, without having to exit and restart. 
  548.  
  549.    The limitation of IBM PC client operation to batch mode was made    because of development environment limitations.  The mail reader    cannot work with the network code inside it because of the network    program architecture.  The only solution was to provide a two-part 
  550.  
  551.  
  552.  
  553. Lambert                                                        [Page 25] 
  554.  RFC 1056                         PCMAIL                        June 1988 
  555.  
  556.     client, one part of which read the mail and one part of which    interacted with the repository.  Although slightly cumbersome, the    two-program setup works quite well. 
  557.  
  558. 7.2. UNIX client code 
  559.  
  560.    Client code for the Suns, Microvaxes, and VAX-750s runs on 4.2/4.3BSD    UNIX.  It is fully interactive, with a powerful mail reader inside    Richard Stallman's GNU-EMACS editor.  Since UNIX-based workstations    have a good deal of main memory and disk storage, no effort was made    to lower local mail state size by keeping message descriptors rather    than message text. 
  561.  
  562.    The local mail state consists of a number of BABYL-format mailboxes.    The interface is very similar to the RMAIL mail reader already    present in GNU-EMACS. 
  563.  
  564.    The mail reader communicates with the repository through network code    implemented in EMACS-LISP.  Changes to the local mail state are    immediately made on the repository; although the repository is fast,    there is a small noticeable delay in performing operations over the    network. 
  565.  
  566.    There is no provision for automatic synchronization whenever new mail    arrives or old mail is changed by another client.  Instead, users    must get any new mail explicitly.  A simple "notification" program    runs in the background and wakes up every minute to check for new    mail; when mail arrives, the user executes a command to get the new    mail, synchronizing the mailbox at the same time. 
  567.  
  568. 7.3. Repository code 
  569.  
  570.    The repository is implemented in C on 4.2/4.3BSD UNIX.  Currently it    runs on DEC VAX-750s and Microvaxes, although other repositories will    soon be running on IBM RT machines and Sun workstations.  The    repository code is designed to allow several clients belonging to a    particular user to "concurrently" modify the user's state.  A locking    scheme prevents one client from modifying mail state while another    client is modifying the same state. 
  571.  
  572. 8. Conclusions 
  573.  
  574.    Pcmail is now used by a small community of people at the MIT    Laboratory for Computer Science.  The repository design works well,    providing an efficient means of storing and maintaining mail state    for several users.  Its performance is quite good when up to ten    users are connected; it remains to be seen whether or not the    repository will be efficient at managing the state of ten or a 
  575.  
  576.  
  577.  
  578. Lambert                                                        [Page 26] 
  579.  RFC 1056                         PCMAIL                        June 1988 
  580.  
  581.     hundred times that many users.  Given sufficient disk storage, it    should be able to, since communication between different users'    clients and the repository is likely to be very asynchronous and    likely to occur in short bursts with long "quiet intervals" in    between as users are busy doing other things. 
  582.  
  583.    Members of another research group at LCS are currently working on a    replicated, scalable version of the repository designed to support a    very large community of users with high availability.  This    repository also uses DMSP and has successfully communicated with    clients that use the current repository implementation.  DMSP    therefore seems to be usable over several flavors of repository    design. 
  584.  
  585.    The IBM PC clients are very limited in the way of resources.  The    mail reader/editor combination is quite powerful, making local mail    state manipulation fairly easy.  Obviously a big performance    enhancement would be to provide a fully interactive client.  As it    is, batch-style synchronization is relatively time consuming due to    the low performance of the PCs.  The "batch-mode" that the PCs use    tends to be good for those PCs that spend a large percentage of their    time unplugged and away from a network.  It is somewhat inconvenient    for those PCs that are always connected to a network and could make    good use of an "interactive-mode" state manipulation. 
  586.  
  587.    The UNIX-based clients are more powerful and easier to use than their    PC counterparts.  Synchronization is much faster, and there is far    more functionality in the mail reader (having an interface that runs    within GNU-EMACS helps a lot in this respect).  Most of those people    using the Pcmail system use the UNIX-based client code. 
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609. Lambert                                                        [Page 27] 
  610.  RFC 1056                         PCMAIL                        June 1988 
  611.  
  612.  I. DMSP Protocol Specification 
  613.  
  614.    Following are a list of DMSP operations by object type, together with    syntax, and possible responses.  Some responses may be followed by    zero or more lines of text, terminated by a single period plus CR-LF    pair.  Only success responses and common error responses are listed;    a complete list of possible responses follows this appendix.    Expressions in angle brackets (i.e.  <mailbox-name>) are    metalinguistic variables indicating a general request or response    form.  Operations with arguments have a sample invocation following    the operation syntax and response. 
  615.  
  616.    General operations: 
  617.  
  618.         HELP        100 Repository version xxx.  Following are supported:        HELP        SEND-VERSION        SEND-MESSAGE        LOGIN        LOGOUT        ...        FETCH-MESSAGE        COPY-MESSAGE        . 
  619.  
  620.         SEND-VERSION <version-number>        200 Command OK        500 version skew! 
  621.  
  622.        i.e. SEND-VERSION 230 
  623.  
  624.         SEND-MESSAGE        350 enter message; end with "."        To: markl        From: markl        Subject: a test message 
  625.  
  626.        this is a test message        . 
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  Lambert                                                        [Page 28] 
  635.  RFC 1056                         PCMAIL                        June 1988 
  636.  
  637.     Repository responds: 
  638.  
  639.        200 Command OK        403 message syntax error 
  640.  
  641.     User operations: 
  642.  
  643.         LOGIN <user> <password> <client> <create-p> <batch-p>        200 Command OK        221 Client out of date by > 1 week        404 Bad password        405 Client <client-name> is locked        411 No user named <user-name>        421 Client <client-name> not found 
  644.  
  645.        i.e. LOGIN markl foo random-client-name 1 0 
  646.  
  647.         LOGOUT        200 Command OK 
  648.  
  649.         SET-PASSWORD <old-password> <new-password>        200 Command OK        404 Incorrect old password 
  650.  
  651.        i.e. SET-PASSWORD foo bar 
  652.  
  653.     Client operations: 
  654.  
  655.         LIST-CLIENTS        220 Client list <name> <status> follows:        client-1 active        client-2 inactive        client-3 active        ...        client-foobar active        . 
  656.  
  657.     Each line of the list contains a client name, followed by    whitespace, followed by the word "active" or the word "inactive",    indicating whether or not the client has connected to the repository    within the last week. 
  658.  
  659.  
  660.  
  661.  Lambert                                                        [Page 29] 
  662.  RFC 1056                         PCMAIL                        June 1988 
  663.  
  664.         CREATE-CLIENT <client-name>        200 Command OK        403 <client-name> is an illegal name        420 Client <client-name> exists 
  665.  
  666.        i.e. CREATE-CLIENT new-client 
  667.  
  668.         DELETE-CLIENT <client-name>        200 Command OK        421 Client <client-name> not found        405 Client <client-name> is locked 
  669.  
  670.        i.e. DELETE-CLIENT old-client 
  671.  
  672.         RESET-CLIENT <client-name>        200 Command OK        421 Client <client-name> not found        405 Client <client-name> is locked 
  673.  
  674.        i.e. RESET-CLIENT any-old-client 
  675.  
  676.     Mailbox operations: 
  677.  
  678.         LIST-MAILBOXES        230 Mbox list <name> <high-UID> <#msgs> <#new> follows:        mailbox-1 2338 8 1        mailbox-2 59 44 0        ...        mailbox-foobar 19 9 0        . 
  679.  
  680.    Each line of the list contains a mailbox name, followed by the    mailbox's next available unique identifier, followed by the number of    messages in the mailbox, followed finally by the number of unseen    messages in the mailbox.  Unseen messages are those whose descriptors    have flag #1 ("message has been seen") set to zero. 
  681.  
  682.         CREATE-MAILBOX <mailbox-name>        200 Command OK        403 <mailbox-name> is an illegal name        430 <mailbox-name> already exists        440 <mailbox-name> exists as a bboard subscription 
  683.  
  684.  
  685.  
  686.  Lambert                                                        [Page 30] 
  687.  RFC 1056                         PCMAIL                        June 1988 
  688.  
  689.         i.e. CREATE-MAILBOX current-events 
  690.  
  691.         DELETE-MAILBOX <mailbox-name>        200 Command OK        431 mailbox <mailbox-name> not found        440 <mailbox-name> is a bboard; use delete-bboard-mailbox 
  692.  
  693.        i.e. DELETE-MAILBOX income-tax-information 
  694.  
  695.         CREATE-BBOARD-MAILBOX <mailbox-name>        200 Command OK        430 a mailbox named <mailbox-name> already exists.        430 a bboard mailbox named <mailbox-name> already exists.        403 <mailbox-name> is an illegal name 
  696.  
  697.        i.e. CREATE-BBOARD-MAILBOX sf-lovers 
  698.  
  699.         DELETE-BBOARD-MAILBOX <mailbox-name>        200 Command OK        404 not owner of <mailbox-name>        431 no bboard mailbox named <mailbox-name> 
  700.  
  701.        i.e. DELETE-BBOARD-MAILBOX rec.autos 
  702.  
  703.         RESET-MAILBOX <mailbox-name>        200 Command OK        431 mailbox <mailbox-name> not found 
  704.  
  705.        i.e. RESET-MAILBOX british-cars 
  706.  
  707.         EXPUNGE-MAILBOX <mailbox-name>        200 Command OK        431 mailbox <mailbox-name> not found 
  708.  
  709.        EXPUNGE-MAILBOX british-cars 
  710.  
  711.     Address operations: 
  712.  
  713.         LIST-ADDRESSES <mailbox-name>        260 Address list for <mailbox-name> follows:        address-1 
  714.  
  715.  
  716.  
  717. Lambert                                                        [Page 31] 
  718.  RFC 1056                         PCMAIL                        June 1988 
  719.  
  720.         address-2        ...        address-6        . 
  721.  
  722.        or 
  723.  
  724.        431 mailbox <mailbox-name> not found 
  725.  
  726.        i.e. LIST-ADDRESSES archive 
  727.  
  728.         Each line of the list consists solely of one address. 
  729.  
  730.         CREATE-ADDRESS <mailbox-name> <address-name>        200 Command OK        403 <mailbox-name> is an illegal name        431 mailbox <mailbox-name> not found        460 <address-name> already exists 
  731.  
  732.        i.e. CREATE-ADDRESS markl markl-bug-pcmail 
  733.  
  734.         DELETE-ADDRESS <mailbox-name> <address-name>        200 Command OK        431 mailbox <mailbox-name> not found        461 address <address-name> not found 
  735.  
  736.        i.e. DELETE-ADDRESS markl markl-info-cobol 
  737.  
  738.     Subscription operations: 
  739.  
  740.         LIST-SUBSCRIPTIONS        240 subscription list follows:        bboard-1 2573 33 2606        bboard-2 541 4 545        ...        bboard-6 1530 43 1573        . 
  741.  
  742.    Each line of the list consists of a bulletin-board name, followed by    the UID of the first message which the user has not yet looked at,    followed by the number of messages in the bulletin-board that the    user has not yet looked at, followed by the bulletin-board's next    available unique message identifier. 
  743.  
  744.  
  745.  
  746. Lambert                                                        [Page 32] 
  747.  RFC 1056                         PCMAIL                        June 1988 
  748.  
  749.         CREATE-SUBSCRIPTION <bboard-name>        200 Command OK        403 <bboard-name> is an illegal name        430 A mailbox named <bboard-name> already exists        431 Bboard mailbox <bboard-name> not found        440 Already subscribing to <bboard-name> 
  750.  
  751.        i.e. CREATE-SUBSCRIPTION sf-lovers 
  752.  
  753.         DELETE-SUBSCRIPTION <bboard-name>        200 Command OK        441 Subscription <bboard-name> not found 
  754.  
  755.        i.e. DELETE-SUBSCRIPTION rec.music 
  756.  
  757.         RESET-SUBSCRIPTION <bboard-name> <new-UID>        200 Command OK        441 Subscription <bboard-name> not found 
  758.  
  759.        i.e. RESET-SUBSCRIPTION rec.music.gdead 1210 
  760.  
  761.         LIST-AVAILABLE-SUBSCRIPTIONS        241 All available bboards follow:        mod.politics        sfl        tcp-ip        forum        ...        comp.emacs        . 
  762.  
  763.         Each line of the list consists solely of one bulletin-board        name. 
  764.  
  765.     Message operations: 
  766.  
  767.         FETCH-CHANGED-DESCRIPTORS <mailbox-name> <max-to-send>        250 Descriptor list follows:        expunged        2333        expunged        2334 
  768.  
  769.  
  770.  
  771. Lambert                                                        [Page 33] 
  772.  RFC 1056                         PCMAIL                        June 1988 
  773.  
  774.         descriptor        2337 0001000001110000 481 14        croaker@ptt.lcs.mit.edu        fred@anymachine.mit.edu        Tue, 19 Jan 88 11:10:03 EST        a typical subject line        descriptor        2339 0000000000000000 1457 40        bob@lcs.mit.edu        csr-people@ptt.lcs.mit.edu        Mon, 18 Jan 88 13:08:17 +0000        another typical subject line        expunged        2340        . 
  775.  
  776.        or 
  777.  
  778.        431 mailbox <mailbox-name> not found 
  779.  
  780.        i.e. FETCH-CHANGED-DESCRIPTORS markl 100 
  781.  
  782.    Each element of the descriptor list is either two or six lines long.    Descriptors which have been expunged are transmitted as two lines:    the word "expunged" on one line, followed by the message unique    identifier on the next line.  Descriptors which still exist are    transmitted as six lines: the word "descriptor" on one line, followed    by a line containing the message unique identifier, flag states    (sixteen characters either one or zero depending on the associated    flag value), followed by the message length in characters, followed    by the message length in lines.  The next four lines contain the    message's "from:", "to:", "date:", and "subject:" fields,    respectively.  Flag zero's state is the first character in the flag    string; flag fifteen's is the last character in the flag string. 
  783.  
  784.         FETCH-DESCRIPTORS <mailbox-name> <low-uid> <high-uid>        250 Descriptor list follows:        descriptor        2337 0001000001110000 481 14        croaker@ptt.lcs.mit.edu        fred@anymachine.mit.edu        Tue, 19 Jan 88 11:10:03 EST        a typical subject line        descriptor        2339 0000000000000000 1457 40        bob@lcs.mit.edu        csr-people@ptt.lcs.mit.edu 
  785.  
  786.  
  787.  
  788. Lambert                                                        [Page 34] 
  789.  RFC 1056                         PCMAIL                        June 1988 
  790.  
  791.         Mon, 18 Jan 88 13:08:17 +0000        another typical subject line        . 
  792.  
  793.        or 
  794.  
  795.        431 mailbox <mailbox-name> not found 
  796.  
  797.        i.e. FETCH-DESCRIPTORS british-cars 12 31 
  798.  
  799.         COPY-MESSAGE <src-mailbox> <target-mailbox> <source-UID>        250 Descriptor list follows:        descriptor        2339 0000000000000000 1457 40        bob@lcs.mit.edu        csr-people@ptt.lcs.mit.edu        Mon, 18 Jan 88 13:08:17 +0000        another typical subject line        . 
  800.  
  801.        or 
  802.  
  803.        400 cannot copy message onto itself        431 target mailbox <target-mailbox> not found        431 source mailbox <source-mailbox> not found        451 message <source-UID> not found 
  804.  
  805.        i.e. COPY-MESSAGE markl british-cars 2338 
  806.  
  807.         RESET-DESCRIPTORS <mailbox-name> <low-UID> <high-UID>        200 Command OK        431 mailbox <mailbox-name> not found 
  808.  
  809.        i.e. RESET-DESCRIPTORS markl 1 10000 
  810.  
  811.         PRINT-MESSAGE <mailbox-name> <UID> <printer-ID>        200 Command OK        401 printer <printer-name> not found        431 mailbox <mailbox-name> not found        451 message <UID> not found 
  812.  
  813.        i.e. PRINT-MESSAGE markl 2433 pravda 
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  Lambert                                                        [Page 35] 
  820.  RFC 1056                         PCMAIL                        June 1988 
  821.  
  822.         SET-MESSAGE-FLAG <mailbox-name> <UID> <flagnum> <state>        200 Command OK        431 mailbox <mailbox-name> not found        451 message <UID> not found        500 flag number <flag-number> out of range 
  823.  
  824.        i.e. SET-MESSAGE-FLAG british-cars 23 0 1 
  825.  
  826.         FETCH-MESSAGE <mailbox-name> <UID>        251 message follows:        From: markl@ptt.lcs.mit.edu        To: markl@ptt.lcs.mit.edu        Date: Sun, 17 Jan 88 11:11:11 EST        Subject: anything 
  827.  
  828.        this is a sample of some        message text        . 
  829.  
  830.        or 
  831.  
  832.        431 Mailbox <mailbox-name> not found        451 message <UID> not found 
  833.  
  834.        i.e. FETCH-MESSAGE current-events 495 
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860. Lambert                                                        [Page 36] 
  861.  RFC 1056                         PCMAIL                        June 1988 
  862.  
  863.  II. Operations by name 
  864.  
  865.    copy-message    create-address    create-bboard-mailbox    create-client    create-mailbox    create-subscription    delete-address    delete-bboard-mailbox    delete-client    delete-mailbox    delete-subscription    expunge-mailbox    fetch-changed-descriptors    fetch-descriptors    fetch-message    help    list-addresses    list-available-subscriptions    list-clients    list-mailboxes    list-subscriptions    login    logout    print-message    reset-client    reset-descriptors    reset-mailbox    reset-subscription    send-message    send-version    set-message-flag    set-password 
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883. Lambert                                                        [Page 37] 
  884.  RFC 1056                         PCMAIL                        June 1988 
  885.  
  886.  III. Responses by number 
  887.  
  888.    100 Pcmail repository version XXX; following are supported    200 Command OK    220 Client list <name> <status> follows:    221 Client out of date by > 1 week    230 Mailbox list <name> <high UID> <#msgs> <#new> follows:    240 Subscription list follows:    250 Descriptor list follows:    251 Message follows:    260 Address list follows:    350 enter message; end with "."    400 cannot copy message onto itself    410 already logged in    420 client <name> already exists    430 mailbox <name> already exists    430 bboard mailbox <name> already exists    440 subscription <name> already exists    460 address <name> already exists    411 no user named <name>    421 client <name> not found    431 mailbox <name> not found    441 subscription <name> not found    451 message <UID> not found    461 address <name> not found    402 internal error message    403 syntax error in outbound message    404 bad password or permission denied    405 mail state is temporarily in use by another client    406 please log in    500 operation syntax error or illegal argument 
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  Lambert                                                        [Page 38] 
  909.  
  910.