Annotation of 42BSD/usr.lib/sendmail/doc/intro.me, revision 1.1

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

unix.superglobalmegacorp.com

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