Annotation of 43BSDReno/share/doc/smm/16.sendmail/intro.me, revision 1.1.1.1

1.1       root        1: .\"
                      2: .\" Copyright (c) 1983 Eric P. Allman
                      3: .\" Copyright (c) 1988 The Regents of the University of California.
                      4: .\" All rights reserved.
                      5: .\"
                      6: .\" Redistribution and use in source and binary forms are permitted
                      7: .\" provided that the above copyright notice and this paragraph are
                      8: .\" duplicated in all such forms and that any documentation,
                      9: .\" advertising materials, and other materials related to such
                     10: .\" distribution and use acknowledge that the software was developed
                     11: .\" by the University of California, Berkeley.  The name of the
                     12: .\" University may not be used to endorse or promote products derived
                     13: .\" from this software without specific prior written permission.
                     14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     15: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     16: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     17: .\"
                     18: .\"    @(#)intro.me    6.4 (Berkeley) 4/23/90
                     19: .\"
                     20: .\"    pic -Pxx intro.me | ditroff -me -Pxx
                     21: .eh 'SMM:16-%''SENDMAIL \*- An Internetwork Mail Router'
                     22: .oh 'SENDMAIL \*- An Internetwork Mail Router''SMM:16-%'
                     23: .nr si 3n
                     24: .if n .ls 2
                     25: .+c
                     26: .(l C
                     27: .sz 14
                     28: SENDMAIL \*- An Internetwork Mail Router
                     29: .sz
                     30: .sp
                     31: Eric Allman\(dg
                     32: .sp 0.5
                     33: .i
                     34: University of California, Berkeley
                     35: Mammoth Project
                     36: .)l
                     37: .sp
                     38: .(l F
                     39: .ce
                     40: ABSTRACT
                     41: .sp \n(psu
                     42: Routing mail through a heterogenous internet presents many new
                     43: problems.  Among the worst of these is that of address mapping.
                     44: Historically, this has been handled on an
                     45: .i "ad hoc"
                     46: basis.  However,
                     47: this approach has become unmanageable as internets grow.
                     48: .sp \n(psu
                     49: Sendmail acts a unified "post office" to which all mail can be
                     50: submitted.  Address interpretation is controlled by a production
                     51: system, which can parse both domain-based addressing and old-style
                     52: .i "ad hoc"
                     53: addresses.
                     54: The production system is powerful
                     55: enough to rewrite addresses in the message header to conform to the
                     56: standards of a number of common target networks, including old
                     57: (NCP/RFC733) Arpanet, new (TCP/RFC822) Arpanet, UUCP, and Phonenet.
                     58: Sendmail also implements an SMTP server, message
                     59: queueing, and aliasing.
                     60: .)l
                     61: .sp 2
                     62: .(f
                     63: \(dgA considerable part of this work
                     64: was done while under the employ
                     65: of the INGRES Project
                     66: at the University of California at Berkeley
                     67: and at Britton Lee.
                     68: .)f
                     69: .pp
                     70: .i Sendmail
                     71: implements a general internetwork mail routing facility,
                     72: featuring aliasing and forwarding,
                     73: automatic routing to network gateways,
                     74: and flexible configuration.
                     75: .pp
                     76: In a simple network,
                     77: each node has an address,
                     78: and resources can be identified
                     79: with a host-resource pair;
                     80: in particular,
                     81: the mail system can refer to users
                     82: using a host-username pair.
                     83: Host names and numbers have to be administered by a central authority,
                     84: but usernames can be assigned locally to each host.
                     85: .pp
                     86: In an internet,
                     87: multiple networks with different characterstics
                     88: and managements
                     89: must communicate.
                     90: In particular,
                     91: the syntax and semantics of resource identification change.
                     92: Certain special cases can be handled trivially
                     93: by
                     94: .i "ad hoc"
                     95: techniques,
                     96: such as
                     97: providing network names that appear local to hosts
                     98: on other networks,
                     99: as with the Ethernet at Xerox PARC.
                    100: However,  the general case is extremely complex.
                    101: For example,
                    102: some networks require point-to-point routing,
                    103: which simplifies the database update problem
                    104: since only adjacent hosts must be entered
                    105: into the system tables,
                    106: while others use end-to-end addressing.
                    107: Some networks use a left-associative syntax
                    108: and others use a right-associative syntax,
                    109: causing ambiguity in mixed addresses.
                    110: .pp
                    111: Internet standards seek to eliminate these problems.
                    112: Initially, these proposed expanding the address pairs
                    113: to address triples,
                    114: consisting of
                    115: {network, host, resource}
                    116: triples.
                    117: Network numbers must be universally agreed upon,
                    118: and hosts can be assigned locally
                    119: on each network.
                    120: The user-level presentation was quickly expanded
                    121: to address domains,
                    122: comprised of a local resource identification
                    123: and a hierarchical domain specification
                    124: with a common static root.
                    125: The domain technique
                    126: separates the issue of physical versus logical addressing.
                    127: For example,
                    128: an address of the form
                    129: .q "[email protected]"
                    130: describes only the logical
                    131: organization of the address space.
                    132: .pp
                    133: .i Sendmail
                    134: is intended to help bridge the gap
                    135: between the totally
                    136: .i "ad hoc"
                    137: world
                    138: of networks that know nothing of each other
                    139: and the clean, tightly-coupled world
                    140: of unique network numbers.
                    141: It can accept old arbitrary address syntaxes,
                    142: resolving ambiguities using heuristics
                    143: specified by the system administrator,
                    144: as well as domain-based addressing.
                    145: It helps guide the conversion of message formats
                    146: between disparate networks.
                    147: In short,
                    148: .i sendmail
                    149: is designed to assist a graceful transition
                    150: to consistent internetwork addressing schemes.
                    151: .sp
                    152: .pp
                    153: Section 1 discusses the design goals for
                    154: .i sendmail .
                    155: Section 2 gives an overview of the basic functions of the system.
                    156: In section 3,
                    157: details of usage are discussed.
                    158: Section 4 compares
                    159: .i sendmail
                    160: to other internet mail routers,
                    161: and an evaluation of
                    162: .i sendmail
                    163: is given in section 5,
                    164: including future plans.
                    165: .sh 1 "DESIGN GOALS"
                    166: .pp
                    167: Design goals for
                    168: .i sendmail
                    169: include:
                    170: .np
                    171: Compatibility with the existing mail programs,
                    172: including Bell version 6 mail,
                    173: Bell version 7 mail
                    174: [UNIX83],
                    175: Berkeley
                    176: .i Mail
                    177: [Shoens79],
                    178: BerkNet mail
                    179: [Schmidt79],
                    180: and hopefully UUCP mail
                    181: [Nowitz78a, Nowitz78b].
                    182: ARPANET mail
                    183: [Crocker77a, Postel77]
                    184: was also required.
                    185: .np
                    186: Reliability, in the sense of guaranteeing
                    187: that every message is correctly delivered
                    188: or at least brought to the attention of a human
                    189: for correct disposal;
                    190: no message should ever be completely lost.
                    191: This goal was considered essential
                    192: because of the emphasis on mail in our environment.
                    193: It has turned out to be one of the hardest goals to satisfy,
                    194: especially in the face of the many anomalous message formats
                    195: produced by various ARPANET sites.
                    196: For example,
                    197: certain sites generate improperly formated addresses,
                    198: occasionally
                    199: causing error-message loops.
                    200: Some hosts use blanks in names,
                    201: causing problems with
                    202: UNIX mail programs that assume that an address
                    203: is one word.
                    204: The semantics of some fields
                    205: are interpreted slightly differently
                    206: by different sites.
                    207: In summary,
                    208: the obscure features of the ARPANET mail protocol
                    209: really
                    210: .i are
                    211: used and
                    212: are difficult to support,
                    213: but must be supported.
                    214: .np
                    215: Existing software to do actual delivery
                    216: should be used whenever possible.
                    217: This goal derives as much from political and practical considerations
                    218: as technical.
                    219: .np
                    220: Easy expansion to
                    221: fairly complex environments,
                    222: including multiple
                    223: connections to a single network type
                    224: (such as with multiple UUCP or Ether nets
                    225: [Metcalfe76]).
                    226: This goal requires consideration of the contents of an address
                    227: as well as its syntax
                    228: in order to determine which gateway to use.
                    229: For example,
                    230: the ARPANET is bringing up the
                    231: TCP protocol to replace the old NCP protocol.
                    232: No host at Berkeley runs both TCP and NCP,
                    233: so it is necessary to look at the ARPANET host name
                    234: to determine whether to route mail to an NCP gateway
                    235: or a TCP gateway.
                    236: .np
                    237: Configuration should not be compiled into the code.
                    238: A single compiled program should be able to run as is at any site
                    239: (barring such basic changes as the CPU type or the operating system).
                    240: We have found this seemingly unimportant goal
                    241: to be critical in real life.
                    242: Besides the simple problems that occur when any program gets recompiled
                    243: in a different environment,
                    244: many sites like to
                    245: .q fiddle
                    246: with anything that they will be recompiling anyway.
                    247: .np
                    248: .i Sendmail
                    249: must be able to let various groups maintain their own mailing lists,
                    250: and let individuals specify their own forwarding,
                    251: without modifying the system alias file.
                    252: .np
                    253: Each user should be able to specify which mailer to execute
                    254: to process mail being delivered for him.
                    255: This feature allows users who are using specialized mailers
                    256: that use a different format to build their environment
                    257: without changing the system,
                    258: and facilitates specialized functions
                    259: (such as returning an
                    260: .q "I am on vacation"
                    261: message).
                    262: .np
                    263: Network traffic should be minimized
                    264: by batching addresses to a single host where possible,
                    265: without assistance from the user.
                    266: .pp
                    267: These goals motivated the architecture illustrated in figure 1.
                    268: .(z
                    269: .hl
                    270: .ie t \
                    271: \{\
                    272: .ie !"\*(.T"" \
                    273: \{\
                    274: .PS
                    275: boxht = 0.5i
                    276: boxwid = 1.0i
                    277: 
                    278:        down
                    279: S:     [
                    280:                right
                    281:        S1:     box "sender1"
                    282:                move
                    283:                box "sender2"
                    284:                move
                    285:        S3:     box "sender3"
                    286:        ]
                    287:        arrow
                    288: SM:    box "sendmail" wid 2i ht boxht
                    289:        arrow
                    290: M:     [
                    291:                right
                    292:        M1:     box "mailer1"
                    293:                move
                    294:                box "mailer2"
                    295:                move
                    296:        M3:     box "mailer3"
                    297:        ]
                    298: 
                    299:        arrow from S.S1.s to 1/2 between SM.nw and SM.n
                    300:        arrow from S.S3.s to 1/2 between SM.n and SM.ne
                    301: 
                    302:        arrow from 1/2 between SM.sw and SM.s to M.M1.n
                    303:        arrow from 1/2 between SM.s and SM.se to M.M3.n
                    304: .PE
                    305: .\}
                    306: .el \
                    307: .      sp 18
                    308: .\}
                    309: .el \{\
                    310: .(c
                    311: +---------+   +---------+   +---------+
                    312: | sender1 |   | sender2 |   | sender3 |
                    313: +---------+   +---------+   +---------+
                    314:      |            |             |
                    315:      +----------+  +  +----------+
                    316:                |  |  |
                    317:                v  v  v
                    318:             +-------------+
                    319:             |   sendmail  |
                    320:             +-------------+
                    321:                |  |  |
                    322:      +----------+  +  +----------+
                    323:      |            |             |
                    324:      v             v             v
                    325: +---------+   +---------+   +---------+
                    326: | mailer1 |   | mailer2 |   | mailer3 |
                    327: +---------+   +---------+   +---------+
                    328: .)c
                    329: .\}
                    330: 
                    331: .ce
                    332: Figure 1 \*- Sendmail System Structure.
                    333: .hl
                    334: .)z
                    335: The user interacts with a mail generating and sending program.
                    336: When the mail is created,
                    337: the generator calls
                    338: .i sendmail ,
                    339: which routes the message to the correct mailer(s).
                    340: Since some of the senders may be network servers
                    341: and some of the mailers may be network clients,
                    342: .i sendmail
                    343: may be used as an internet mail gateway.
                    344: .sh 1 "OVERVIEW"
                    345: .sh 2 "System Organization"
                    346: .pp
                    347: .i Sendmail
                    348: neither interfaces with the user
                    349: nor does actual mail delivery.
                    350: Rather,
                    351: it collects a message
                    352: generated by a user interface program (UIP)
                    353: such as Berkeley
                    354: .i Mail ,
                    355: MS
                    356: [Crocker77b],
                    357: or MH
                    358: [Borden79],
                    359: edits the message as required by the destination network,
                    360: and calls appropriate mailers
                    361: to do mail delivery or queueing for network transmission\**.
                    362: .(f
                    363: \**except when mailing to a file,
                    364: when
                    365: .i sendmail
                    366: does the delivery directly.
                    367: .)f
                    368: This discipline allows the insertion of new mailers
                    369: at minimum cost.
                    370: In this sense 
                    371: .i sendmail
                    372: resembles the Message Processing Module (MPM)
                    373: of [Postel79b].
                    374: .sh 2 "Interfaces to the Outside World"
                    375: .pp
                    376: There are three ways
                    377: .i sendmail
                    378: can communicate with the outside world,
                    379: both in receiving and in sending mail.
                    380: These are using the conventional UNIX
                    381: argument vector/return status,
                    382: speaking SMTP over a pair of UNIX pipes,
                    383: and speaking SMTP over an interprocess(or) channel.
                    384: .sh 3 "Argument vector/exit status"
                    385: .pp
                    386: This technique is the standard UNIX method
                    387: for communicating with the process.
                    388: A list of recipients is sent in the argument vector,
                    389: and the message body is sent on the standard input.
                    390: Anything that the mailer prints
                    391: is simply collected and sent back to the sender
                    392: if there were any problems.
                    393: The exit status from the mailer is collected
                    394: after the message is sent,
                    395: and a diagnostic is printed if appropriate.
                    396: .sh 3 "SMTP over pipes"
                    397: .pp
                    398: The SMTP protocol
                    399: [Postel82]
                    400: can be used to run an interactive lock-step interface
                    401: with the mailer.
                    402: A subprocess is still created,
                    403: but no recipient addresses are passed to the mailer
                    404: via the argument list.
                    405: Instead, they are passed one at a time
                    406: in commands sent to the processes standard input.
                    407: Anything appearing on the standard output
                    408: must be a reply code
                    409: in a special format.
                    410: .sh 3 "SMTP over an IPC connection"
                    411: .pp
                    412: This technique is similar to the previous technique,
                    413: except that it uses a 4.2bsd IPC channel
                    414: [UNIX83].
                    415: This method is exceptionally flexible
                    416: in that the mailer need not reside
                    417: on the same machine.
                    418: It is normally used to connect to a sendmail process
                    419: on another machine.
                    420: .sh 2 "Operational Description"
                    421: .pp
                    422: When a sender wants to send a message,
                    423: it issues a request to
                    424: .i sendmail
                    425: using one of the three methods described above.
                    426: .i Sendmail
                    427: operates in two distinct phases.
                    428: In the first phase,
                    429: it collects and stores the message.
                    430: In the second phase,
                    431: message delivery occurs.
                    432: If there were errors during processing
                    433: during the second phase,
                    434: .i sendmail
                    435: creates and returns a new message describing the error
                    436: and/or returns an status code
                    437: telling what went wrong.
                    438: .sh 3 "Argument processing and address parsing"
                    439: .pp
                    440: If
                    441: .i sendmail
                    442: is called using one of the two subprocess techniques,
                    443: the arguments
                    444: are first scanned
                    445: and option specifications are processed.
                    446: Recipient addresses are then collected,
                    447: either from the command line
                    448: or from the SMTP
                    449: RCPT command,
                    450: and a list of recipients is created.
                    451: Aliases are expanded at this step,
                    452: including mailing lists.
                    453: As much validation as possible of the addresses
                    454: is done at this step:
                    455: syntax is checked, and local addresses are verified,
                    456: but detailed checking of host names and addresses
                    457: is deferred until delivery.
                    458: Forwarding is also performed
                    459: as the local addresses are verified.
                    460: .pp
                    461: .i Sendmail
                    462: appends each address
                    463: to the recipient list after parsing.
                    464: When a name is aliased or forwarded,
                    465: the old name is retained in the list,
                    466: and a flag is set that tells the delivery phase
                    467: to ignore this recipient.
                    468: This list is kept free from duplicates,
                    469: preventing alias loops
                    470: and duplicate messages deliverd to the same recipient,
                    471: as might occur if a person is in two groups.
                    472: .sh 3 "Message collection"
                    473: .pp
                    474: .i Sendmail
                    475: then collects the message.
                    476: The message should have a header at the beginning.
                    477: No formatting requirements are imposed on the message
                    478: except that they must be lines of text
                    479: (i.e., binary data is not allowed).
                    480: The header is parsed and stored in memory,
                    481: and the body of the message is saved
                    482: in a temporary file.
                    483: .pp
                    484: To simplify the program interface,
                    485: the message is collected even if no addresses were valid.
                    486: The message will be returned with an error.
                    487: .sh 3 "Message delivery"
                    488: .pp
                    489: For each unique mailer and host in the recipient list,
                    490: .i sendmail
                    491: calls the appropriate mailer.
                    492: Each mailer invocation sends to all users receiving the message on one host.
                    493: Mailers that only accept one recipient at a time
                    494: are handled properly.
                    495: .pp
                    496: The message is sent to the mailer
                    497: using one of the same three interfaces
                    498: used to submit a message to sendmail.
                    499: Each copy of the message is
                    500: prepended by a customized header.
                    501: The mailer status code is caught and checked,
                    502: and a suitable error message given as appropriate.
                    503: The exit code must conform to a system standard
                    504: or a generic message
                    505: (\c
                    506: .q "Service unavailable" )
                    507: is given.
                    508: .sh 3 "Queueing for retransmission"
                    509: .pp
                    510: If the mailer returned an status that
                    511: indicated that it might be able to handle the mail later,
                    512: .i sendmail
                    513: will queue the mail and try again later.
                    514: .sh 3 "Return to sender"
                    515: .pp
                    516: If errors occur during processing,
                    517: .i sendmail
                    518: returns the message to the sender for retransmission.
                    519: The letter can be mailed back
                    520: or written in the file
                    521: .q dead.letter
                    522: in the sender's home directory\**.
                    523: .(f
                    524: \**Obviously, if the site giving the error is not the originating
                    525: site, the only reasonable option is to mail back to the sender.
                    526: Also, there are many more error disposition options,
                    527: but they only effect the error message \*- the
                    528: .q "return to sender"
                    529: function is always handled in one of these two ways.
                    530: .)f
                    531: .sh 2 "Message Header Editing"
                    532: .pp
                    533: Certain editing of the message header
                    534: occurs automatically.
                    535: Header lines can be inserted
                    536: under control of the configuration file.
                    537: Some lines can be merged;
                    538: for example,
                    539: a
                    540: .q From:
                    541: line and a
                    542: .q Full-name:
                    543: line can be merged under certain circumstances.
                    544: .sh 2 "Configuration File"
                    545: .pp
                    546: Almost all configuration information is read at runtime
                    547: from an ASCII file,
                    548: encoding
                    549: macro definitions
                    550: (defining the value of macros used internally),
                    551: header declarations
                    552: (telling sendmail the format of header lines that it will process specially,
                    553: i.e., lines that it will add or reformat),
                    554: mailer definitions
                    555: (giving information such as the location and characteristics
                    556: of each mailer),
                    557: and address rewriting rules
                    558: (a limited production system to rewrite addresses
                    559: which is used to parse and rewrite the addresses).
                    560: .pp
                    561: To improve performance when reading the configuration file,
                    562: a memory image can be provided.
                    563: This provides a
                    564: .q compiled
                    565: form of the configuration file.
                    566: .sh 1 "USAGE AND IMPLEMENTATION"
                    567: .sh 2 "Arguments"
                    568: .pp
                    569: Arguments may be flags and addresses.
                    570: Flags set various processing options.
                    571: Following flag arguments,
                    572: address arguments may be given,
                    573: unless we are running in SMTP mode.
                    574: Addresses follow the syntax in RFC822
                    575: [Crocker82]
                    576: for ARPANET
                    577: address formats.
                    578: In brief, the format is:
                    579: .np
                    580: Anything in parentheses is thrown away
                    581: (as a comment).
                    582: .np
                    583: Anything in angle brackets (\c
                    584: .q "<\|>" )
                    585: is preferred
                    586: over anything else.
                    587: This rule implements the ARPANET standard that addresses of the form
                    588: .(b
                    589: user name <machine-address>
                    590: .)b
                    591: will send to the electronic
                    592: .q machine-address
                    593: rather than the human
                    594: .q "user name."
                    595: .np
                    596: Double quotes
                    597: (\ "\ )
                    598: quote phrases;
                    599: backslashes quote characters.
                    600: Backslashes are more powerful
                    601: in that they will cause otherwise equivalent phrases
                    602: to compare differently \*- for example,
                    603: .i user
                    604: and
                    605: .i
                    606: "user"
                    607: .r
                    608: are equivalent,
                    609: but
                    610: .i \euser
                    611: is different from either of them.
                    612: .pp
                    613: Parentheses, angle brackets, and double quotes
                    614: must be properly balanced and nested.
                    615: The rewriting rules control remaining parsing\**.
                    616: .(f
                    617: \**Disclaimer: Some special processing is done
                    618: after rewriting local names; see below.
                    619: .)f
                    620: .sh 2 "Mail to Files and Programs"
                    621: .pp
                    622: Files and programs are legitimate message recipients.
                    623: Files provide archival storage of messages,
                    624: useful for project administration and history.
                    625: Programs are useful as recipients in a variety of situations,
                    626: for example,
                    627: to maintain a public repository of systems messages
                    628: (such as the Berkeley
                    629: .i msgs
                    630: program,
                    631: or the MARS system
                    632: [Sattley78]).
                    633: .pp
                    634: Any address passing through the initial parsing algorithm
                    635: as a local address
                    636: (i.e, not appearing to be a valid address for another mailer)
                    637: is scanned for two special cases.
                    638: If prefixed by a vertical bar (\c
                    639: .q \^|\^ )
                    640: the rest of the address is processed as a shell command.
                    641: If the user name begins with a slash mark (\c
                    642: .q /\^ )
                    643: the name is used as a file name,
                    644: instead of a login name.
                    645: .pp
                    646: Files that have setuid or setgid bits set
                    647: but no execute bits set
                    648: have those bits honored if
                    649: .i sendmail
                    650: is running as root.
                    651: .sh 2 "Aliasing, Forwarding, Inclusion"
                    652: .pp
                    653: .i Sendmail
                    654: reroutes mail three ways.
                    655: Aliasing applies system wide.
                    656: Forwarding allows each user to reroute incoming mail
                    657: destined for that account.
                    658: Inclusion directs
                    659: .i sendmail
                    660: to read a file for a list of addresses,
                    661: and is normally used
                    662: in conjunction with aliasing.
                    663: .sh 3 "Aliasing"
                    664: .pp
                    665: Aliasing maps names to address lists using a system-wide file.
                    666: This file is indexed to speed access.
                    667: Only names that parse as local
                    668: are allowed as aliases;
                    669: this guarantees a unique key
                    670: (since there are no nicknames for the local host).
                    671: .sh 3 "Forwarding"
                    672: .pp
                    673: After aliasing,
                    674: recipients that are local and valid
                    675: are checked for the existence of a
                    676: .q .forward
                    677: file in their home directory.
                    678: If it exists,
                    679: the message is
                    680: .i not
                    681: sent to that user,
                    682: but rather to the list of users in that file.
                    683: Often
                    684: this list will contain only one address,
                    685: and the feature will be used for network mail forwarding.
                    686: .pp
                    687: Forwarding also permits a user to specify a private incoming mailer.
                    688: For example,
                    689: forwarding to:
                    690: .(b
                    691: "\^|\|/usr/local/newmail myname"
                    692: .)b
                    693: will use a different incoming mailer.
                    694: .sh 3 "Inclusion"
                    695: .pp
                    696: Inclusion is specified in RFC 733 [Crocker77a] syntax:
                    697: .(b
                    698: :Include: pathname
                    699: .)b
                    700: An address of this form reads the file specified by
                    701: .i pathname
                    702: and sends to all users listed in that file.
                    703: .pp
                    704: The intent is
                    705: .i not
                    706: to support direct use of this feature,
                    707: but rather to use this as a subset of aliasing.
                    708: For example,
                    709: an alias of the form:
                    710: .(b
                    711: project: :include:/usr/project/userlist
                    712: .)b
                    713: is a method of letting a project maintain a mailing list
                    714: without interaction with the system administration,
                    715: even if the alias file is protected.
                    716: .pp
                    717: It is not necessary to rebuild the index on the alias database
                    718: when a :include: list is changed.
                    719: .sh 2 "Message Collection"
                    720: .pp
                    721: Once all recipient addresses are parsed and verified,
                    722: the message is collected.
                    723: The message comes in two parts:
                    724: a message header and a message body,
                    725: separated by a blank line.
                    726: .pp
                    727: The header is formatted as a series of lines
                    728: of the form
                    729: .(b
                    730:        field-name: field-value
                    731: .)b
                    732: Field-value can be split across lines by starting the following
                    733: lines with a space or a tab.
                    734: Some header fields have special internal meaning,
                    735: and have appropriate special processing.
                    736: Other headers are simply passed through.
                    737: Some header fields may be added automatically,
                    738: such as time stamps.
                    739: .pp
                    740: The body is a series of text lines.
                    741: It is completely uninterpreted and untouched,
                    742: except that lines beginning with a dot
                    743: have the dot doubled
                    744: when transmitted over an SMTP channel.
                    745: This extra dot is stripped by the receiver.
                    746: .sh 2 "Message Delivery"
                    747: .pp
                    748: The send queue is ordered by receiving host
                    749: before transmission
                    750: to implement message batching.
                    751: Each address is marked as it is sent
                    752: so rescanning the list is safe.
                    753: An argument list is built as the scan proceeds.
                    754: Mail to files is detected during the scan of the send list.
                    755: The interface to the mailer
                    756: is performed using one of the techniques
                    757: described in section 2.2.
                    758: .pp
                    759: After a connection is established,
                    760: .i sendmail
                    761: makes the per-mailer changes to the header
                    762: and sends the result to the mailer.
                    763: If any mail is rejected by the mailer,
                    764: a flag is set to invoke the return-to-sender function
                    765: after all delivery completes.
                    766: .sh 2 "Queued Messages"
                    767: .pp
                    768: If the mailer returns a
                    769: .q "temporary failure"
                    770: exit status,
                    771: the message is queued.
                    772: A control file is used to describe the recipients to be sent to
                    773: and various other parameters.
                    774: This control file is formatted as a series of lines,
                    775: each describing a sender,
                    776: a recipient,
                    777: the time of submission,
                    778: or some other salient parameter of the message.
                    779: The header of the message is stored
                    780: in the control file,
                    781: so that the associated data file in the queue
                    782: is just the temporary file that was originally collected.
                    783: .sh 2 "Configuration"
                    784: .pp
                    785: Configuration is controlled primarily by a configuration file
                    786: read at startup.
                    787: .i Sendmail
                    788: should not need to be recomplied except
                    789: .np
                    790: To change operating systems
                    791: (V6, V7/32V, 4BSD).
                    792: .np
                    793: To remove or insert the DBM
                    794: (UNIX database)
                    795: library.
                    796: .np
                    797: To change ARPANET reply codes.
                    798: .np
                    799: To add headers fields requiring special processing.
                    800: .lp
                    801: Adding mailers or changing parsing
                    802: (i.e., rewriting)
                    803: or routing information
                    804: does not require recompilation.
                    805: .pp
                    806: If the mail is being sent by a local user,
                    807: and the file
                    808: .q .mailcf
                    809: exists in the sender's home directory,
                    810: that file is read as a configuration file
                    811: after the system configuration file.
                    812: The primary use of this feature is to add header lines.
                    813: .pp
                    814: The configuration file encodes macro definitions,
                    815: header definitions,
                    816: mailer definitions,
                    817: rewriting rules,
                    818: and options.
                    819: .sh 3 Macros
                    820: .pp
                    821: Macros can be used in three ways.
                    822: Certain macros transmit
                    823: unstructured textual information
                    824: into the mail system,
                    825: such as the name
                    826: .i sendmail
                    827: will use to identify itself in error messages.
                    828: Other macros transmit information from
                    829: .i sendmail
                    830: to the configuration file
                    831: for use in creating other fields
                    832: (such as argument vectors to mailers);
                    833: e.g., the name of the sender,
                    834: and the host and user
                    835: of the recipient.
                    836: Other macros are unused internally,
                    837: and can be used as shorthand in the configuration file.
                    838: .sh 3 "Header declarations"
                    839: .pp
                    840: Header declarations inform
                    841: .i sendmail
                    842: of the format of known header lines.
                    843: Knowledge of a few header lines
                    844: is built into
                    845: .i sendmail ,
                    846: such as the
                    847: .q From:
                    848: and
                    849: .q Date:
                    850: lines.
                    851: .pp
                    852: Most configured headers
                    853: will be automatically inserted
                    854: in the outgoing message
                    855: if they don't exist in the incoming message.
                    856: Certain headers are suppressed by some mailers.
                    857: .sh 3 "Mailer declarations"
                    858: .pp
                    859: Mailer declarations tell
                    860: .i sendmail
                    861: of the various mailers available to it.
                    862: The definition specifies the internal name of the mailer,
                    863: the pathname of the program to call,
                    864: some flags associated with the mailer,
                    865: and an argument vector to be used on the call;
                    866: this vector is macro-expanded before use.
                    867: .sh 3 "Address rewriting rules"
                    868: .pp
                    869: The heart of address parsing in
                    870: .i sendmail
                    871: is a set of rewriting rules.
                    872: These are an ordered list of pattern-replacement rules,
                    873: (somewhat like a production system,
                    874: except that order is critical),
                    875: which are applied to each address.
                    876: The address is rewritten textually until it is either rewritten
                    877: into a special canonical form
                    878: (i.e.,
                    879: a (mailer, host, user)
                    880: 3-tuple,
                    881: such as {arpanet, usc-isif, postel}
                    882: representing the address
                    883: .q "postel@usc-isif" ),
                    884: or it falls off the end.
                    885: When a pattern matches,
                    886: the rule is reapplied until it fails.
                    887: .pp
                    888: The configuration file also supports the editing of addresses
                    889: into different formats.
                    890: For example,
                    891: an address of the form:
                    892: .(b
                    893: ucsfcgl!tef
                    894: .)b
                    895: might be mapped into:
                    896: .(b
                    897: [email protected]
                    898: .)b
                    899: to conform to the domain syntax.
                    900: Translations can also be done in the other direction.
                    901: .sh 3 "Option setting"
                    902: .pp
                    903: There are several options that can be set
                    904: from the configuration file.
                    905: These include the pathnames of various support files,
                    906: timeouts,
                    907: default modes,
                    908: etc.
                    909: .sh 1 "COMPARISON WITH OTHER MAILERS"
                    910: .sh 2 "Delivermail"
                    911: .pp
                    912: .i Sendmail
                    913: is an outgrowth of
                    914: .i delivermail .
                    915: The primary differences are:
                    916: .np
                    917: Configuration information is not compiled in.
                    918: This change simplifies many of the problems
                    919: of moving to other machines.
                    920: It also allows easy debugging of new mailers.
                    921: .np
                    922: Address parsing is more flexible.
                    923: For example,
                    924: .i delivermail
                    925: only supported one gateway to any network,
                    926: whereas
                    927: .i sendmail
                    928: can be sensitive to host names
                    929: and reroute to different gateways.
                    930: .np
                    931: Forwarding and
                    932: :include:
                    933: features eliminate the requirement that the system alias file
                    934: be writable by any user
                    935: (or that an update program be written,
                    936: or that the system administration make all changes).
                    937: .np
                    938: .i Sendmail
                    939: supports message batching across networks
                    940: when a message is being sent to multiple recipients.
                    941: .np
                    942: A mail queue is provided in
                    943: .i sendmail.
                    944: Mail that cannot be delivered immediately
                    945: but can potentially be delivered later
                    946: is stored in this queue for a later retry.
                    947: The queue also provides a buffer against system crashes;
                    948: after the message has been collected
                    949: it may be reliably redelivered
                    950: even if the system crashes during the initial delivery.
                    951: .np
                    952: .i Sendmail
                    953: uses the networking support provided by 4.2BSD
                    954: to provide a direct interface networks such as the ARPANET
                    955: and/or Ethernet
                    956: using SMTP (the Simple Mail Transfer Protocol)
                    957: over a TCP/IP connection.
                    958: .sh 2 "MMDF"
                    959: .pp
                    960: MMDF
                    961: [Crocker79]
                    962: spans a wider problem set than
                    963: .i sendmail .
                    964: For example,
                    965: the domain of
                    966: MMDF includes a
                    967: .q "phone network"
                    968: mailer, whereas
                    969: .i sendmail
                    970: calls on preexisting mailers in most cases.
                    971: .pp
                    972: MMDF and
                    973: .i sendmail
                    974: both support aliasing,
                    975: customized mailers,
                    976: message batching,
                    977: automatic forwarding to gateways,
                    978: queueing,
                    979: and retransmission.
                    980: MMDF supports two-stage timeout,
                    981: which
                    982: .i sendmail
                    983: does not support.
                    984: .pp
                    985: The configuration for MMDF
                    986: is compiled into the code\**.
                    987: .(f
                    988: \**Dynamic configuration tables are currently being considered
                    989: for MMDF;
                    990: allowing the installer to select either compiled
                    991: or dynamic tables.
                    992: .)f
                    993: .pp
                    994: Since MMDF does not consider backwards compatibility
                    995: as a design goal,
                    996: the address parsing is simpler but much less flexible.
                    997: .pp
                    998: It is somewhat harder to integrate a new channel\**
                    999: .(f
                   1000: \**The MMDF equivalent of a
                   1001: .i sendmail
                   1002: .q mailer.
                   1003: .)f
                   1004: into MMDF.
                   1005: In particular,
                   1006: MMDF must know the location and format
                   1007: of host tables for all channels,
                   1008: and the channel must speak a special protocol.
                   1009: This allows MMDF to do additional verification
                   1010: (such as verifying host names)
                   1011: at submission time.
                   1012: .pp
                   1013: MMDF strictly separates the submission and delivery phases.
                   1014: Although
                   1015: .i sendmail
                   1016: has the concept of each of these stages,
                   1017: they are integrated into one program,
                   1018: whereas in MMDF they are split into two programs.
                   1019: .sh 2 "Message Processing Module"
                   1020: .pp
                   1021: The Message Processing Module (MPM)
                   1022: discussed by Postel [Postel79b]
                   1023: matches
                   1024: .i sendmail
                   1025: closely in terms of its basic architecture.
                   1026: However,
                   1027: like MMDF,
                   1028: the MPM includes the network interface software
                   1029: as part of its domain.
                   1030: .pp
                   1031: MPM also postulates a duplex channel to the receiver,
                   1032: as does MMDF,
                   1033: thus allowing simpler handling of errors
                   1034: by the mailer
                   1035: than is possible in
                   1036: .i sendmail .
                   1037: When a message queued by
                   1038: .i sendmail
                   1039: is sent,
                   1040: any errors must be returned to the sender
                   1041: by the mailer itself.
                   1042: Both MPM and MMDF mailers
                   1043: can return an immediate error response,
                   1044: and a single error processor can create an appropriate response.
                   1045: .pp
                   1046: MPM prefers passing the message as a structured object,
                   1047: with type-length-value tuples\**.
                   1048: .(f
                   1049: \**This is similar to the NBS standard.
                   1050: .)f
                   1051: Such a convention requires a much higher degree of cooperation
                   1052: between mailers than is required by
                   1053: .i sendmail .
                   1054: MPM also assumes a universally agreed upon internet name space
                   1055: (with each address in the form of a net-host-user tuple),
                   1056: which
                   1057: .i sendmail
                   1058: does not.
                   1059: .sh 1 "EVALUATIONS AND FUTURE PLANS"
                   1060: .pp
                   1061: .i Sendmail
                   1062: is designed to work in a nonhomogeneous environment.
                   1063: Every attempt is made to avoid imposing unnecessary constraints
                   1064: on the underlying mailers.
                   1065: This goal has driven much of the design.
                   1066: One of the major problems
                   1067: has been the lack of a uniform address space,
                   1068: as postulated in [Postel79a]
                   1069: and [Postel79b].
                   1070: .pp
                   1071: A nonuniform address space implies that a path will be specified
                   1072: in all addresses,
                   1073: either explicitly (as part of the address)
                   1074: or implicitly
                   1075: (as with implied forwarding to gateways).
                   1076: This restriction has the unpleasant effect of making replying to messages
                   1077: exceedingly difficult,
                   1078: since there is no one
                   1079: .q address
                   1080: for any person,
                   1081: but only a way to get there from wherever you are.
                   1082: .pp
                   1083: Interfacing to mail programs
                   1084: that were not initially intended to be applied
                   1085: in an internet environment
                   1086: has been amazingly successful,
                   1087: and has reduced the job to a manageable task.
                   1088: .pp
                   1089: .i Sendmail
                   1090: has knowledge of a few difficult environments
                   1091: built in.
                   1092: It generates ARPANET FTP/SMTP compatible error messages
                   1093: (prepended with three-digit numbers
                   1094: [Neigus73, Postel74, Postel82])
                   1095: as necessary,
                   1096: optionally generates UNIX-style
                   1097: .q From
                   1098: lines on the front of messages for some mailers,
                   1099: and knows how to parse the same lines on input.
                   1100: Also,
                   1101: error handling has an option customized for BerkNet.
                   1102: .pp
                   1103: The decision to avoid doing any type of delivery where possible
                   1104: (even, or perhaps especially, local delivery)
                   1105: has turned out to be a good idea.
                   1106: Even with local delivery,
                   1107: there are issues of the location of the mailbox,
                   1108: the format of the mailbox,
                   1109: the locking protocol used,
                   1110: etc.,
                   1111: that are best decided by other programs.
                   1112: One surprisingly major annoyance in many internet mailers
                   1113: is that the location and format of local mail is built in.
                   1114: The feeling seems to be that local mail is so common
                   1115: that it should be efficient.
                   1116: This feeling is not born out by
                   1117: our experience;
                   1118: on the contrary,
                   1119: the location and format of mailboxes seems to vary widely
                   1120: from system to system.
                   1121: .pp
                   1122: The ability to automatically generate a response to incoming mail
                   1123: (by forwarding mail to a program)
                   1124: seems useful
                   1125: (\c
                   1126: .q "I am on vacation until late August...." )
                   1127: but can create problems
                   1128: such as forwarding loops
                   1129: (two people on vacation whose programs send notes back and forth,
                   1130: for instance)
                   1131: if these programs are not well written.
                   1132: A program could be written to do standard tasks correctly,
                   1133: but this would solve the general case.
                   1134: .pp
                   1135: It might be desirable to implement some form of load limiting.
                   1136: I am unaware of any mail system that addresses this problem,
                   1137: nor am I aware of any reasonable solution at this time.
                   1138: .pp
                   1139: The configuration file is currently practically inscrutable;
                   1140: considerable convenience could be realized
                   1141: with a higher-level format.
                   1142: .pp
                   1143: It seems clear that common protocols will be changing soon
                   1144: to accommodate changing requirements and environments.
                   1145: These changes will include modifications to the message header
                   1146: (e.g., [NBS80])
                   1147: or to the body of the message itself
                   1148: (such as for multimedia messages
                   1149: [Postel80]).
                   1150: Experience indicates that
                   1151: these changes should be relatively trivial to integrate
                   1152: into the existing system.
                   1153: .pp
                   1154: In tightly coupled environments,
                   1155: it would be nice to have a name server
                   1156: such as Grapvine
                   1157: [Birrell82]
                   1158: integrated into the mail system.
                   1159: This would allow a site such as
                   1160: .q Berkeley
                   1161: to appear as a single host,
                   1162: rather than as a collection of hosts,
                   1163: and would allow people to move transparently among machines
                   1164: without having to change their addresses.
                   1165: Such a facility
                   1166: would require an automatically updated database
                   1167: and some method of resolving conflicts.
                   1168: Ideally this would be effective even without
                   1169: all hosts being under
                   1170: a single management.
                   1171: However,
                   1172: it is not clear whether this feature
                   1173: should be integrated into the
                   1174: aliasing facility
                   1175: or should be considered a
                   1176: .q "value added"
                   1177: feature outside
                   1178: .i sendmail
                   1179: itself.
                   1180: .pp
                   1181: As a more interesting case,
                   1182: the CSNET name server
                   1183: [Solomon81]
                   1184: provides an facility that goes beyond a single
                   1185: tightly-coupled environment.
                   1186: Such a facility would normally exist outside of
                   1187: .i sendmail
                   1188: however.
                   1189: .sh 0 "ACKNOWLEDGEMENTS"
                   1190: .pp
                   1191: Thanks are due to Kurt Shoens for his continual cheerful
                   1192: assistance and good advice,
                   1193: Bill Joy for pointing me in the correct direction
                   1194: (over and over),
                   1195: and Mark Horton for more advice,
                   1196: prodding,
                   1197: and many of the good ideas.
                   1198: Kurt and Eric Schmidt are to be credited
                   1199: for using
                   1200: .i delivermail
                   1201: as a server for their programs
                   1202: (\c
                   1203: .i Mail
                   1204: and BerkNet respectively)
                   1205: before any sane person should have,
                   1206: and making the necessary modifications
                   1207: promptly and happily.
                   1208: Eric gave me considerable advice about the perils
                   1209: of network software which saved me an unknown
                   1210: amount of work and grief.
                   1211: Mark did the original implementation of the DBM version
                   1212: of aliasing, installed the VFORK code,
                   1213: wrote the current version of
                   1214: .i rmail ,
                   1215: and was the person who really convinced me
                   1216: to put the work into
                   1217: .i delivermail
                   1218: to turn it into
                   1219: .i sendmail .
                   1220: Kurt deserves accolades for using
                   1221: .i sendmail
                   1222: when I was myself afraid to take the risk;
                   1223: how a person can continue to be so enthusiastic
                   1224: in the face of so much bitter reality is beyond me.
                   1225: .pp
                   1226: Kurt,
                   1227: Mark,
                   1228: Kirk McKusick,
                   1229: Marvin Solomon,
                   1230: and many others have reviewed this paper,
                   1231: giving considerable useful advice.
                   1232: .pp
                   1233: Special thanks are reserved for Mike Stonebraker at Berkeley
                   1234: and Bob Epstein at Britton-Lee,
                   1235: who both knowingly allowed me to put so much work into this
                   1236: project
                   1237: when there were so many other things I really should
                   1238: have been working on.
                   1239: .+c
                   1240: .ce
                   1241: REFERENCES
                   1242: .nr ii 1.5i
                   1243: .ip [Birrell82]
                   1244: Birrell, A. D.,
                   1245: Levin, R.,
                   1246: Needham, R. M.,
                   1247: and
                   1248: Schroeder, M. D.,
                   1249: .q "Grapevine: An Exercise in Distributed Computing."
                   1250: In
                   1251: .ul
                   1252: Comm. A.C.M. 25,
                   1253: 4,
                   1254: April 82.
                   1255: .ip [Borden79]
                   1256: Borden, S.,
                   1257: Gaines, R. S.,
                   1258: and
                   1259: Shapiro, N. Z.,
                   1260: .ul
                   1261: The MH Message Handling System: Users' Manual.
                   1262: R-2367-PAF.
                   1263: Rand Corporation.
                   1264: October 1979.
                   1265: .ip [Crocker77a]
                   1266: Crocker, D. H.,
                   1267: Vittal, J. J.,
                   1268: Pogran, K. T.,
                   1269: and
                   1270: Henderson, D. A. Jr.,
                   1271: .ul
                   1272: Standard for the Format of ARPA Network Text Messages.
                   1273: RFC 733,
                   1274: NIC 41952.
                   1275: In [Feinler78].
                   1276: November 1977.
                   1277: .ip [Crocker77b]
                   1278: Crocker, D. H.,
                   1279: .ul
                   1280: Framework and Functions of the MS Personal Message System.
                   1281: R-2134-ARPA,
                   1282: Rand Corporation,
                   1283: Santa Monica, California.
                   1284: 1977.
                   1285: .ip [Crocker79]
                   1286: Crocker, D. H.,
                   1287: Szurkowski, E. S.,
                   1288: and
                   1289: Farber, D. J.,
                   1290: .ul
                   1291: An Internetwork Memo Distribution Facility \*- MMDF.
                   1292: 6th Data Communication Symposium,
                   1293: Asilomar.
                   1294: November 1979.
                   1295: .ip [Crocker82]
                   1296: Crocker, D. H.,
                   1297: .ul
                   1298: Standard for the Format of Arpa Internet Text Messages.
                   1299: RFC 822.
                   1300: Network Information Center,
                   1301: SRI International,
                   1302: Menlo Park, California.
                   1303: August 1982.
                   1304: .ip [Metcalfe76]
                   1305: Metcalfe, R.,
                   1306: and
                   1307: Boggs, D.,
                   1308: .q "Ethernet: Distributed Packet Switching for Local Computer Networks" ,
                   1309: .ul
                   1310: Communications of the ACM 19,
                   1311: 7.
                   1312: July 1976.
                   1313: .ip [Feinler78]
                   1314: Feinler, E.,
                   1315: and
                   1316: Postel, J.
                   1317: (eds.),
                   1318: .ul
                   1319: ARPANET Protocol Handbook.
                   1320: NIC 7104,
                   1321: Network Information Center,
                   1322: SRI International,
                   1323: Menlo Park, California.
                   1324: 1978.
                   1325: .ip [NBS80]
                   1326: National Bureau of Standards,
                   1327: .ul
                   1328: Specification of a Draft Message Format Standard.
                   1329: Report No. ICST/CBOS 80-2.
                   1330: October 1980.
                   1331: .ip [Neigus73]
                   1332: Neigus, N.,
                   1333: .ul
                   1334: File Transfer Protocol for the ARPA Network.
                   1335: RFC 542, NIC 17759.
                   1336: In [Feinler78].
                   1337: August, 1973.
                   1338: .ip [Nowitz78a]
                   1339: Nowitz, D. A.,
                   1340: and
                   1341: Lesk, M. E.,
                   1342: .ul
                   1343: A Dial-Up Network of UNIX Systems.
                   1344: Bell Laboratories.
                   1345: In
                   1346: UNIX Programmer's Manual, Seventh Edition,
                   1347: Volume 2.
                   1348: August, 1978.
                   1349: .ip [Nowitz78b]
                   1350: Nowitz, D. A.,
                   1351: .ul
                   1352: Uucp Implementation Description.
                   1353: Bell Laboratories.
                   1354: In
                   1355: UNIX Programmer's Manual, Seventh Edition,
                   1356: Volume 2.
                   1357: October, 1978.
                   1358: .ip [Postel74]
                   1359: Postel, J.,
                   1360: and
                   1361: Neigus, N.,
                   1362: Revised FTP Reply Codes.
                   1363: RFC 640, NIC 30843.
                   1364: In [Feinler78].
                   1365: June, 1974.
                   1366: .ip [Postel77]
                   1367: Postel, J.,
                   1368: .ul
                   1369: Mail Protocol.
                   1370: NIC 29588.
                   1371: In [Feinler78].
                   1372: November 1977.
                   1373: .ip [Postel79a]
                   1374: Postel, J.,
                   1375: .ul
                   1376: Internet Message Protocol.
                   1377: RFC 753,
                   1378: IEN 85.
                   1379: Network Information Center,
                   1380: SRI International,
                   1381: Menlo Park, California.
                   1382: March 1979.
                   1383: .ip [Postel79b]
                   1384: Postel, J. B.,
                   1385: .ul
                   1386: An Internetwork Message Structure.
                   1387: In
                   1388: .ul
                   1389: Proceedings of the Sixth Data Communications Symposium,
                   1390: IEEE.
                   1391: New York.
                   1392: November 1979.
                   1393: .ip [Postel80]
                   1394: Postel, J. B.,
                   1395: .ul
                   1396: A Structured Format for Transmission of Multi-Media Documents.
                   1397: RFC 767.
                   1398: Network Information Center,
                   1399: SRI International,
                   1400: Menlo Park, California.
                   1401: August 1980.
                   1402: .ip [Postel82]
                   1403: Postel, J. B.,
                   1404: .ul
                   1405: Simple Mail Transfer Protocol.
                   1406: RFC821
                   1407: (obsoleting RFC788).
                   1408: Network Information Center,
                   1409: SRI International,
                   1410: Menlo Park, California.
                   1411: August 1982.
                   1412: .ip [Schmidt79]
                   1413: Schmidt, E.,
                   1414: .ul
                   1415: An Introduction to the Berkeley Network.
                   1416: University of California, Berkeley California.
                   1417: 1979.
                   1418: .ip [Shoens79]
                   1419: Shoens, K.,
                   1420: .ul
                   1421: Mail Reference Manual.
                   1422: University of California, Berkeley.
                   1423: In UNIX Programmer's Manual,
                   1424: Seventh Edition,
                   1425: Volume 2C.
                   1426: December 1979.
                   1427: .ip [Sluizer81]
                   1428: Sluizer, S.,
                   1429: and
                   1430: Postel, J. B.,
                   1431: .ul
                   1432: Mail Transfer Protocol.
                   1433: RFC 780.
                   1434: Network Information Center,
                   1435: SRI International,
                   1436: Menlo Park, California.
                   1437: May 1981.
                   1438: .ip [Solomon81]
                   1439: Solomon, M., Landweber, L., and Neuhengen, D.,
                   1440: .q "The Design of the CSNET Name Server."
                   1441: CS-DN-2,
                   1442: University of Wisconsin, Madison.
                   1443: November 1981.
                   1444: .ip [Su82]
                   1445: Su, Zaw-Sing,
                   1446: and
                   1447: Postel, Jon,
                   1448: .ul
                   1449: The Domain Naming Convention for Internet User Applications.
                   1450: RFC819.
                   1451: Network Information Center,
                   1452: SRI International,
                   1453: Menlo Park, California.
                   1454: August 1982.
                   1455: .ip [UNIX83]
                   1456: .ul
                   1457: The UNIX Programmer's Manual, Seventh Edition,
                   1458: Virtual VAX-11 Version,
                   1459: Volume 1.
                   1460: Bell Laboratories,
                   1461: modified by the University of California,
                   1462: Berkeley, California.
                   1463: March, 1983.

unix.superglobalmegacorp.com

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