Annotation of 43BSD/contrib/mh/support/pop/popbb.txt, revision 1.1

1.1     ! root        1: Request For Comments:  draft
        !             2: 
        !             3: 
        !             4: 
        !             5: 
        !             6: 
        !             7: 
        !             8: 
        !             9: 
        !            10: 
        !            11: 
        !            12: 
        !            13: 
        !            14:                      Post Office Protocol (revised)
        !            15:                        Extended Service Offerings
        !            16: 
        !            17: 
        !            18:                         Wed Dec 18 23:17:52 1985
        !            19: 
        !            20: 
        !            21:                             Marshall T. Rose
        !            22: 
        !            23:                 Northrop Research and Technology Center
        !            24:                            One Research Park
        !            25:                    Palos Verdes Peninsula, CA  90274
        !            26: 
        !            27:                            MRose%NRTC@USC-ECL
        !            28: 
        !            29: 
        !            30: 
        !            31: 
        !            32:     This memo suggests a simple method for workstations to dynamically
        !            33:     access mail from a discussion group server, as an extension to an
        !            34:     earlier memo which dealt with dynamically accessing mail from a
        !            35:     mailbox server using the Post Office Protocol (POP).  This RFC
        !            36:     specifies a proposed protocol for the ARPA Internet community, and
        !            37:     requests discussion and suggestions for improvements.  All of the
        !            38:     extensions described in this memo to the POP are OPTIONAL.  
        !            39: 
        !            40: Request For Comments:  draft                                    M. Rose
        !            41: POP (revised) Extended Service Offerings                           NRTC
        !            42: 
        !            43: 
        !            44: 
        !            45:                       Introduction and Motivation
        !            46: 
        !            47:     It is assumed that the reader is familiar with the previous memo
        !            48:     that discusses the Post Office Protocol (POP) [MRose84].  This memo
        !            49:     describes extensions to the POP which enhance the service it offers
        !            50:     to clients.  This additional service permits a client host to access
        !            51:     discussion group mail, which is often kept in a separate spool area,
        !            52:     using the general POP facilities.  
        !            53: 
        !            54:     The next section describes the evolution of discussion groups and
        !            55:     the technologies currently used to implement them.  To summarize:
        !            56: 
        !            57:        o An exploder is used to map from a single address to
        !            58:          a list of addresses which subscribe to the list, and redirects
        !            59:          any subsequent error reports associated with the delivery of
        !            60:          each message.  This has two primary advantages:
        !            61:                - Subscribers need know only a single address
        !            62:                - Responsible parties get the error reports and not
        !            63:                  the subscribers
        !            64: 
        !            65:        o Typically, each subscription address is not a person's private
        !            66:          maildrop, but a system-wide maildrop, which can be accessed
        !            67:          by more than one user.  This has several advantages:
        !            68:                - Only a single copy of each message need traverse the
        !            69:                  net for a given site (which may contain several local
        !            70:                  hosts).  This conserves bandwidth and cycles.
        !            71:                - Only a single copy of each message need reside on each
        !            72:                  subscribing host.  This conserves disk space.
        !            73:                - The private maildrop for each user is not cluttered
        !            74:                  with discussion group mail.
        !            75: 
        !            76:     Despite this optimization of resources, further economy can be
        !            77:     achieved at sites with more than one host.  Typically, sites with
        !            78:     more than one host either:
        !            79: 
        !            80:         1.  Replicate discussion group mail on each host.  This
        !            81:         results in literally gigabytes of disk space committed to
        !            82:         unnecessarily store redundant information.
        !            83: 
        !            84:         2.  Keep discussion group mail on one host and give all users a
        !            85:         login on that host (in addition to any other logins they may
        !            86:         have).  This is usually a gross inconvenience for users who
        !            87:         work on other hosts, or a burden to users who are forced to
        !            88:         work on that host.  
        !            89: 
        !            90:     As discussed in [MRose84], the problem of giving workstations
        !            91:     dynamic access to mail from a mailbox server has been explored in
        !            92:     great detail (originally there was [RFC918], this prompted the
        !            93:     author to write [MRose84], independently of this [RFC918] was
        !            94:     upgraded to [RFC937]).  A natural solution to the problem outlined
        !            95:     above is to keep discussion group mail on a mailbox server at each
        !            96:     site and permit different hosts at that site to employ the POP to
        !            97:     access discussion group mail.  If implemented properly, this
        !            98:     avoids the problems of both strategies outlined above.
        !            99: 
        !           100:        ASIDE:     It might be noted that a good distributed filesystem
        !           101:                   could also solve this problem.  Sadly, "good"
        !           102:                   distributed filesystems, which do not suffer
        !           103:                   unacceptable response time for interactive use, are
        !           104:                   few and far between these days!  
        !           105: 
        !           106:     Given this motivation, now let's consider discussion groups, both in
        !           107:     general and from the point of view of a user agent.  Following this,
        !           108:     extensions to the POP defined in [MRose84] are presented.  Finally,
        !           109:     some additional policy details are discussed along with some initial
        !           110:     experiences.
        !           111: 
        !           112:                       What's in a Discussion Group
        !           113: 
        !           114:     Since mailers and user agents first crawled out of the primordial
        !           115:     ARPAnet, the value of discussion groups have been appreciated,
        !           116:     (though their implementation has not always been well-understood).
        !           117: 
        !           118:     Described simply, an discussion group is composed of a number of
        !           119:     subscribers with a common interest.  These subscribers post mail to
        !           120:     a single address, known as a distribution address.  From this
        !           121:     distribution address, a copy of the message is sent to each
        !           122:     subscriber.  Each group has a moderator, which is the person that
        !           123:     administrates the group.  The moderator can usually be reached at a
        !           124:     special address, known as a request address.  Usually, the
        !           125:     responsibilities of the moderator are quite simple, since the mail
        !           126:     system handles the distribution to subscribers automatically.  In
        !           127:     some cases, the interest group, instead of being distributed
        !           128:     directly to its subscribers, is put into a digest format by the
        !           129:     moderator and then sent to the subscribers.  Although this requires
        !           130:     more work on the part of the moderator, such groups tend to be
        !           131:     better organized.  
        !           132: 
        !           133:     Unfortunately, there are a few problems with the scheme outlined
        !           134:     above.  First, if two users on the same host subscribe to the same
        !           135:     interest group, two copies of the message get delivered.  This is
        !           136:     wasteful of both processor and disk resources.  
        !           137: 
        !           138:     Second, some of these groups carry a lot of traffic.  Although
        !           139:     subscription to an group does indicate interest on the part of a
        !           140:     subscriber, it is usually not interesting to get 50 messages or so
        !           141:     delivered to the user's private maildrop each day, interspersed with
        !           142:     personal mail, that is likely to be of a much more important and
        !           143:     timely nature.  
        !           144: 
        !           145:     Third, if a subscriber on the distribution list for a group becomes
        !           146:     "bad" somehow, the originator of the message and not the moderator
        !           147:     of the group is notified.  It is not uncommon for a large list to
        !           148:     have 10 or so bogus addresses present.  This results in the
        !           149:     originator being flooded with "error messages" from mailers across
        !           150:     the ARPA Internet stating that a given address on the list was bad.
        !           151:     Needless to say, the originator usually could not care less if the
        !           152:     bogus addresses got a copy of the message or not.  The originator is
        !           153:     merely interested in posting a message to the group at large.
        !           154:     Furthermore, the moderator of the group does care if there are bogus
        !           155:     addresses on the list, but ironically does not receive notification.
        !           156: 
        !           157:     There are various approaches which can be used to solve some or all
        !           158:     of these problems.  Usually these involve placing an exploder agent
        !           159:     at the distribution source of the discussion group, which expands
        !           160:     the name of the group into the list of subscription addresses for
        !           161:     the group.  In the process, the exploder will also change the
        !           162:     address that receives error notifications to be the request address
        !           163:     or other responsible party.  
        !           164: 
        !           165:     A complementary approach, used in order to cut down on resource
        !           166:     utilization of all kinds, replaces all the subscribers at a single
        !           167:     host (or group of hosts under a single administration) with a single
        !           168:     address at that host.  This address maps to a file on the host,
        !           169:     usually in a spool area, which all users can access.  (Advanced
        !           170:     implementations can also implement private discussion groups this
        !           171:     way, in which a single copy of each message is kept, but is
        !           172:     accessible to only a select number of users on the host.)  
        !           173: 
        !           174:     The two approaches can be combined to avoid all of the problems
        !           175:     described above.
        !           176: 
        !           177:     Finally, a third approach can be taken, which can be used to aid
        !           178:     user agents processing mail for the discussion group:  In order to
        !           179:     speed querying of the maildrop which contains the local host's copy
        !           180:     of the discussion group, two other items are usually associated with
        !           181:     the discussion group, on a local basis.  These are the maxima and
        !           182:     the last-date.  Each time a message is received for the group on the
        !           183:     local host, the maxima is increased by at least one.  Furthermore,
        !           184:     when a new maxima is generated, the current date is determined.
        !           185:     This is called the last date.  As the message is entered into the
        !           186:     local maildrop, it is given the current maxima and last-date.  This
        !           187:     permits the user agent to quickly determine if new messages are
        !           188:     present in the maildrop.
        !           189: 
        !           190:        NOTE:      The maxima may be characterized as a monotonically
        !           191:                   increasing quanity.  Although sucessive values of the
        !           192:                   maxima need not be consecutive, any maxima assigned
        !           193:                   is always greater than any previously assigned value.
        !           194: 
        !           195:                           Definition of Terms
        !           196: 
        !           197:     To formalize these notions somewhat, consider the following 7
        !           198:     parameters which describe a given discussion group from the
        !           199:     perspective of the user agent (the syntax given is from [RFC822]):
        !           200: 
        !           201:        NAME            Meaning: the name of the discussion group
        !           202:                        Syntax:  TOKEN (ALPHA *[ ALPHA / DIGIT / "-" ])
        !           203:                                 (case-insensitive recognition)
        !           204:                        Example: unix-wizards
        !           205: 
        !           206:        ALIASES         Meaning: alternates names for the group, which
        !           207:                                 are locally meaningful; these are
        !           208:                                 typically used to shorten user typein
        !           209:                        Syntax:  TOKEN (case-insensitive recognition)
        !           210:                        Example: uwiz
        !           211: 
        !           212:        ADDRESS         Meaning: the primary source of the group
        !           213:                        Syntax:  822 address
        !           214:                        Example: Unix-Wizards@BRL
        !           215: 
        !           216:        REQUEST         Meaning: the primary moderator of the group
        !           217:                        Syntax:  822 address
        !           218:                        Example: Unix-Wizards-Request@BRL
        !           219: 
        !           220:        FLAGS           Meaning: locally meaningful flags associated
        !           221:                                 with the discussion group; this memo
        !           222:                                 leaves interpretation of this parameter
        !           223:                                 to each POP implementation
        !           224:                        Syntax:  octal number
        !           225:                        Example: 01
        !           226: 
        !           227:        MAXIMA          Meaning: the magic cookie associated with the
        !           228:                                 last message locally received for the
        !           229:                                 group; it is the property of the magic
        !           230:                                 cookie that it's value NEVER decreases,
        !           231:                                 and increases by at least one each time
        !           232:                                 a message is locally received
        !           233:                        Syntax:  decimal number
        !           234:                        Example: 1004
        !           235: 
        !           236:        LASTDATE        Meaning: the date that the last message was
        !           237:                                 locally received
        !           238:                        Syntax:  822 date
        !           239:                        Example: Thu, 19 Dec 85 10:26:48 -0800
        !           240: 
        !           241:     Note that the last two values are locally determined for the
        !           242:     maildrop associated with the discussion group and with each message
        !           243:     in that maildrop.  Note however that the last message in the
        !           244:     maildrop have a different MAXIMA and LASTDATE than the discussion
        !           245:     group.  This often occurs when the maildrop has been archived.
        !           246: 
        !           247:     Finally, some local systems provide mechanisms for automatically
        !           248:     archiving discussion group mail.  In some cases, a two-level archive
        !           249:     scheme is used:  current mail is kept in the standard maildrop,
        !           250:     recent mail is kept in an archive maildrop, and older mail is kept
        !           251:     off-line.  With this scheme, in addition to having a "standard"
        !           252:     maildrop for each discussion group, an "archive" maildrop may also
        !           253:     be available.  This permits a user agent to examine the most recent
        !           254:     archive using the same mechanisms as those used on the current mail.
        !           255: 
        !           256:                             The XTND Command
        !           257: 
        !           258:     The following commands are valid only in the TRANSACTION state of
        !           259:     the POP.  This implies that the POP server has already opened the
        !           260:     user's maildrop (which may be empty).  This maildrop is called the
        !           261:     "default maildrop".  The phrase "closes the current maildrop" has
        !           262:     two meanings, depending on whether the current maildrop is the
        !           263:     default maildrop or is a maildrop associated with a discussion
        !           264:     group. 
        !           265: 
        !           266:     In the former context, when the current maildrop is closed any
        !           267:     messages marked as deleted are removed from the maildrop currently
        !           268:     in use.  The exclusive-access lock on the maildrop is then released
        !           269:     along with any implementation-specific resources (e.g.,
        !           270:     file-descriptors).  
        !           271: 
        !           272:     In the latter context, a maildrop associated with a discussion group
        !           273:     is considered to be read-only to the POP client.  In this case, the
        !           274:     phrase "closes the current maildrop" merely means that any
        !           275:     implementation-specific resources are released.  (Hence, the POP
        !           276:     command DELE is a no-op.)
        !           277: 
        !           278:     All the new facilities are introduced via a single POP command,
        !           279:     XTND.  All positive reponses to the XTND command are multi-line.
        !           280: 
        !           281:     The most common multi-line response to the commands contains a
        !           282:     "discussion group listing" which presents the name of the discussion
        !           283:     group along with it's maxima.  In order to simplify parsing all POP
        !           284:     servers are required to use a certain format for discussion group
        !           285:     listings:  
        !           286: 
        !           287:                              NAME SP MAXIMA 
        !           288: 
        !           289:     This memo makes no requirement on what follows the maxima in the
        !           290:     listing.  Minimal implementations should just end that line of the
        !           291:     response with a CRLF pair.  More advanced implementations may
        !           292:     include other information, as parsed from the message.  
        !           293: 
        !           294:        NOTE:      This memo STRONGLY discourages implementations from
        !           295:                   supplying additional information in the listing.  
        !           296: 
        !           297: 
        !           298:     XTND BBOARDS [name]
        !           299:        Arguments: the name of a discussion group (optionally)
        !           300:        Restrictions: may only be given in the TRANSACTION state.
        !           301:        Discussion:
        !           302: 
        !           303:         If an argument was given, the POP server closes the current
        !           304:         maildrop.  The POP server then validates the argument as the
        !           305:         name of a discussion group.  If this is successful, it opens
        !           306:         the maildrop associated with the group, and returns a
        !           307:         multi-line response containing the discussion group listing.
        !           308:         If the discussion group named is not valid, or the associated
        !           309:         archive maildrop is not readable by the user, then an error
        !           310:         response is returned.  
        !           311: 
        !           312:         If no argument was given, the POP server issues a multi-line
        !           313:         response.  After the initial +OK, for each discussion group
        !           314:         known, the POP server responds with a line containing the
        !           315:         listing for that discussion group.  Note that only
        !           316:         world-readable discussion groups are included in the multi-line
        !           317:         response.  
        !           318: 
        !           319:         In order to aid user agents, this memo requires an extension to
        !           320:         the scan listing when an "XTND BBOARDS" command has been given.
        !           321:         Normally, a scan listing, as generated by the LIST, takes the
        !           322:         form:
        !           323: 
        !           324:                MSGNO SIZE
        !           325: 
        !           326:         where MSGNO is the number of the message being listed and SIZE
        !           327:         is the size of the message in octets.  When reading a maildrop
        !           328:         accessed via "XTND BBOARDS", the scan listing takes the form 
        !           329: 
        !           330:                MSGNO SIZE MAXIMA
        !           331: 
        !           332:         where MAXIMA is the maxima that was assigned to the message
        !           333:         when it was placed in the BBoard.
        !           334: 
        !           335:        Possible Responses:
        !           336:            +OK XTND
        !           337:            -ERR no such bboard
        !           338:        Examples:
        !           339:            C:    XTND BBOARDS
        !           340:            S:    +OK XTND
        !           341:            S:    system 10
        !           342:            S:    mh-users 100
        !           343:            S:    .
        !           344:            C:    XTND BBOARDS system
        !           345:            S:    + OK XTND
        !           346:            S:    system 10
        !           347:            S:    .
        !           348: 
        !           349:     XTND ARCHIVE name
        !           350:        Arguments: the name of a discussion group (required)
        !           351:        Restrictions: may only be given in the TRANSACTION state.
        !           352:        Discussion:
        !           353: 
        !           354:         The POP server closes the current maildrop.  The POP server
        !           355:         then validates the argument as the name of a discussion group.
        !           356:         If this is successful, it opens the archive maildrop associated
        !           357:         with the group, and returns a multi-line response containing
        !           358:         the discussion group listing.  If the discussion group named is
        !           359:         not valid, or the associated archive maildrop is not readable
        !           360:         by the user, then an error response is returned.  
        !           361: 
        !           362:         In addition, the scan listing generated by the LIST command is
        !           363:         augmented (as described above).
        !           364: 
        !           365:        Possible Responses:
        !           366:            +OK XTND
        !           367:            -ERR no such bboard
        !           368:        Examples:
        !           369:            C:    XTND ARCHIVE system
        !           370:            S:    + OK XTND
        !           371:            S:    system 3
        !           372:            S:    .
        !           373: 
        !           374:     XTND X-BBOARDS name
        !           375:        Arguments: the name of a discussion group (required)
        !           376:        Restrictions: may only be given in the TRANSACTION state.
        !           377:        Discussion:
        !           378: 
        !           379:         The POP server validates the argument as the name of a
        !           380:         discussion group.  If this is unsuccessful, then an error
        !           381:         response is returned.  Otherwise a multi-line response is
        !           382:         returned.  The first 14 lines of this response (after the
        !           383:         initial +OK) are defined in this memo.  Minimal implementations
        !           384:         need not include other information (and may omit certain
        !           385:         information, outputing a bare CRLF pair).  More advanced
        !           386:         implementations may include other information.  
        !           387: 
        !           388:                Line    Information (refer to "Definition of Terms")
        !           389:                ----    -----------
        !           390:                  1     NAME
        !           391:                  2     ALIASES, separated by SP
        !           392:                  3     system-specific: maildrop
        !           393:                  4     system-specific: archive maildrop
        !           394:                  5     system-specific: information
        !           395:                  6     system-specific: maildrop map
        !           396:                  7     system-specific: encrypted password
        !           397:                  8     system-specific: local leaders, separated by SP
        !           398:                  9     ADDRESS
        !           399:                 10     REQUEST
        !           400:                 11     system-specific: incoming feed
        !           401:                 12     system-specific: outgoing feeds
        !           402:                 13     FLAGS SP MAXIMA
        !           403:                 14     LASTDATE
        !           404: 
        !           405:         Most of this information is entirely too specific to the UCI
        !           406:         Version of the Rand MH Message Handling System[MRose85].
        !           407:         Nevertheless, lines 1, 2, 9, 10, 13, and 14 are of general
        !           408:         interest, regardless of the implementation.  
        !           409: 
        !           410:        Possible Responses:
        !           411:            +OK XTND
        !           412:            -ERR no such bboard
        !           413:        Examples:
        !           414:            C:    XTND X-BBOARDS system
        !           415:            S:    + OK XTND
        !           416:            S:    system
        !           417:            S:    local general
        !           418:            S:    /usr/bboards/system.mbox
        !           419:            S:    /usr/bboards/archive/system.mbox
        !           420:            S:    /usr/bboards/.system.cnt
        !           421:            S:    /usr/bboards/.system.map
        !           422:            S:    *
        !           423:            S:    mother
        !           424:            S:    system@nrtc
        !           425:            S:    system-request@nrtc
        !           426:            S:    
        !           427:            S:    dist-system@nrtc-gremlin
        !           428:            S:    01 10
        !           429:            S:    Thu, 19 Dec 85 00:08:49 -0800
        !           430:            S:    .
        !           431: 
        !           432:                               Policy Notes
        !           433: 
        !           434:     Depending on the particular entity administrating the POP service
        !           435:     host, two additional policies might be implemented:
        !           436: 
        !           437:     1.  Private Discussion Groups 
        !           438: 
        !           439:     In the general case, discussion groups are world-readable, any user,
        !           440:     once logged in (via a terminal, terminal server, or POP, etc.), is
        !           441:     able to read the maildrop for each discussion group known to the POP
        !           442:     service host.  Nevertheless, it is desirable, usually for privacy
        !           443:     reasons, to implement private discussion groups as well.  
        !           444: 
        !           445:     Support of this is consistent with the extensions outlined in this
        !           446:     memo.  Once the AUTHORIZATION state has successfully concluded, the
        !           447:     POP server grants the user access to exactly those discussion groups
        !           448:     the POP service host permits the authenticated user to access.  As a
        !           449:     "security" feature, discussion groups associated with unreadable
        !           450:     maildrops should not be listed in a positive response to the XTND
        !           451:     BBOARDS command.
        !           452: 
        !           453:     2.  Anonymous POP Users 
        !           454: 
        !           455:     In order to minimize the authentication problem, a policy
        !           456:     permitting "anonymous" access to the world-readable maildrops for
        !           457:     discussion groups on the POP server may be implemented.
        !           458: 
        !           459:     Support of this is consistent with the extensions outlined in this
        !           460:     memo.  The POP server can be modified to accept a USER command for a
        !           461:     well-known pseudonym (i.e., "anonymous") which is valid with any
        !           462:     PASS command.  As a "security" feature, it is advisable to limit
        !           463:     this kind of access to only hosts at the local site, or to hosts
        !           464:     named in an access list.
        !           465: 
        !           466:                       Experiences and Conclusions
        !           467: 
        !           468:     All of the facilities described in this memo and in [MRose84] have
        !           469:     been implemented in MH #6.1.  Initial experiences have been, on the
        !           470:     whole, very positive. 
        !           471: 
        !           472:     After the first implementation, some performance tuning was
        !           473:     required.  This consisted primarily of caching the datastructures
        !           474:     which describe discussion groups in the POP server.  A second
        !           475:     optimization pertained to the client:  the program most commonly
        !           476:     used to read BBoards in MH was modified to retrieve messages only
        !           477:     when needed.  Two schemes are used:
        !           478: 
        !           479:        o If only the headers (and the first few lines of the body) of
        !           480:         the message are required, e.g., for a scan listing, then only
        !           481:         these are retrieved.  The resulting output is then cached, on
        !           482:         a per-message basis.
        !           483: 
        !           484:        o If the entire message is required, then it is retrieved intact,
        !           485:         and cached locally.  
        !           486: 
        !           487:     With these optimizations, response time is quite adequate when the
        !           488:     POP server and client are connected via a high-speed local area
        !           489:     network.  In fact, the author uses this mechanism to access certain
        !           490:     private discussion groups over the ARPAnet.  In this case, response
        !           491:     is still good.  When a 9.6Kbps modem is inserted in the path,
        !           492:     response went from good to almost tolerable (fortunately the author
        !           493:     only reads a few discussion groups in this fashion).  
        !           494: 
        !           495:     To conclude:  the POP is a good thing, not only for personal mail
        !           496:     but for discussion group mail as well.
        !           497: 
        !           498:                                References
        !           499: 
        !           500:     [MRose84]   M.T. Rose.
        !           501:                "Post Office Protocol (revised)", University of Delaware.
        !           502:                (October, 1984)
        !           503: 
        !           504:     [MRose85]  M.T. Rose, J.L. Romine.
        !           505:                "The Rand MH Message Handling System: User's Manual",
        !           506:                University of California, Irvine.  (November, 1985)
        !           507: 
        !           508:     [RFC822]   D.H. Crocker.
        !           509:                "Standard for the Format of ARPA Internet Text
        !           510:                Messages", University of Delaware.  (August, 1982)
        !           511: 
        !           512:     [RFC918]    J.K. Reynolds.
        !           513:                "Post Office Protocol", USC/Information Sciences Institute.
        !           514:                (October, 1984)
        !           515: 
        !           516:     [RFC937]    M. Butler, J.B. Postel, et. al.
        !           517:                "Post Office Protocol - Version 2", USC/Information Sciences
        !           518:                Institute.
        !           519:                (February, 1985)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.