|
|
1.1 ! root 1: .nr si 3n ! 2: .he 'Mail Systems and Addressing in 4.2bsd''%' ! 3: .fo 'Version 4.1'USENIX \- Jan 83'Last Mod 7/25/83' ! 4: .if n .ls 2 ! 5: .+c ! 6: .(l C ! 7: .sz 14 ! 8: Mail Systems and Addressing ! 9: in 4.2bsd ! 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: .sp 0.5 ! 19: .r ! 20: [email protected] ! 21: ucbvax!eric ! 22: .)l ! 23: .sp ! 24: .(l F ! 25: .ce ! 26: ABSTRACT ! 27: .sp \n(psu ! 28: Routing mail through a heterogeneous internet presents many new ! 29: problems. ! 30: Among the worst of these is that of address mapping. ! 31: Historically, this has been handled on an ad hoc basis. ! 32: However, ! 33: this approach has become unmanageable as internets grow. ! 34: .sp \n(psu ! 35: Sendmail acts a unified ! 36: .q "post office" ! 37: to which all mail can be ! 38: submitted. ! 39: Address interpretation is controlled by a production ! 40: system, ! 41: which can parse both old and new format addresses. ! 42: The ! 43: new format is ! 44: .q "domain-based," ! 45: a flexible technique that can ! 46: handle many common situations. ! 47: Sendmail is not intended to perform ! 48: user interface functions. ! 49: .sp \n(psu ! 50: Sendmail will replace delivermail in the Berkeley 4.2 distribution. ! 51: Several major hosts are now or will soon be running sendmail. ! 52: This change will affect any users that route mail through a sendmail ! 53: gateway. ! 54: The changes that will be user visible are emphasized. ! 55: .)l ! 56: .sp 2 ! 57: .(f ! 58: \(dgA considerable part of this work ! 59: was done while under the employ ! 60: of the INGRES Project ! 61: at the University of California at Berkeley. ! 62: .)f ! 63: .pp ! 64: The mail system to appear in 4.2bsd ! 65: will contain a number of changes. ! 66: Most of these changes are based on the replacement of ! 67: .i delivermail ! 68: with a new module called ! 69: .i sendmail. ! 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: Of key interest to the mail system user ! 76: will be the changes in the network addressing structure. ! 77: .pp ! 78: In a simple network, ! 79: each node has an address, ! 80: and resources can be identified ! 81: with a host-resource pair; ! 82: in particular, ! 83: the mail system can refer to users ! 84: using a host-username pair. ! 85: Host names and numbers have to be administered by a central authority, ! 86: but usernames can be assigned locally to each host. ! 87: .pp ! 88: In an internet, ! 89: multiple networks with different characteristics ! 90: and managements ! 91: must communicate. ! 92: In particular, ! 93: the syntax and semantics of resource identification change. ! 94: Certain special cases can be handled trivially ! 95: by ! 96: .i "ad hoc" ! 97: techniques, ! 98: such as ! 99: providing network names that appear local to hosts ! 100: on other networks, ! 101: as with the Ethernet at Xerox PARC. ! 102: However, the general case is extremely complex. ! 103: For example, ! 104: some networks require that the route the message takes ! 105: be explicitly specified by the sender, ! 106: simplifying the database update problem ! 107: since only adjacent hosts must be entered ! 108: into the system tables, ! 109: while others use logical addressing, ! 110: where the sender specifies the location of the recipient ! 111: but not how to get there. ! 112: Some networks use a left-associative syntax ! 113: and others use a right-associative syntax, ! 114: causing ambiguity in mixed addresses. ! 115: .pp ! 116: Internet standards seek to eliminate these problems. ! 117: Initially, these proposed expanding the address pairs ! 118: to address triples, ! 119: consisting of ! 120: {network, host, username} ! 121: triples. ! 122: Network numbers must be universally agreed upon, ! 123: and hosts can be assigned locally ! 124: on each network. ! 125: The user-level presentation was changed ! 126: to address domains, ! 127: comprised of a local resource identification ! 128: and a hierarchical domain specification ! 129: with a common static root. ! 130: The domain technique ! 131: separates the issue of physical versus logical addressing. ! 132: For example, ! 133: an address of the form ! 134: .q "[email protected]" ! 135: describes the logical ! 136: organization of the address space ! 137: (user ! 138: .q eric ! 139: on host ! 140: .q a ! 141: in the Computer Center ! 142: at Berkeley) ! 143: but not the physical networks used ! 144: (for example, this could go over different networks ! 145: depending on whether ! 146: .q a ! 147: were on an ethernet ! 148: or a store-and-forward network). ! 149: .pp ! 150: .i Sendmail ! 151: is intended to help bridge the gap ! 152: between the totally ! 153: .i "ad hoc" ! 154: world ! 155: of networks that know nothing of each other ! 156: and the clean, tightly-coupled world ! 157: of unique network numbers. ! 158: It can accept old arbitrary address syntaxes, ! 159: resolving ambiguities using heuristics ! 160: specified by the system administrator, ! 161: as well as domain-based addressing. ! 162: It helps guide the conversion of message formats ! 163: between disparate networks. ! 164: In short, ! 165: .i sendmail ! 166: is designed to assist a graceful transition ! 167: to consistent internetwork addressing schemes. ! 168: .sp ! 169: .pp ! 170: Section 1 defines some of the terms ! 171: frequently left fuzzy ! 172: when working in mail systems. ! 173: Section 2 discusses the design goals for ! 174: .i sendmail . ! 175: In section 3, ! 176: the new address formats ! 177: and basic features of ! 178: .i sendmail ! 179: are described. ! 180: Section 4 discusses some of the special problems ! 181: of the UUCP network. ! 182: The differences between ! 183: .i sendmail ! 184: and ! 185: .i delivermail ! 186: are presented in section 5. ! 187: .sp ! 188: .(l F ! 189: .b DISCLAIMER: ! 190: A number of examples ! 191: in this paper ! 192: use names of actual people ! 193: and organizations. ! 194: This is not intended ! 195: to imply a commitment ! 196: or even an intellectual agreement ! 197: on the part of these people or organizations. ! 198: In particular, ! 199: Bell Telephone Laboratories (BTL), ! 200: Digital Equipment Corporation (DEC), ! 201: Lawrence Berkeley Laboratories (LBL), ! 202: Britton-Lee Incorporated (BLI), ! 203: and the University of California at Berkeley ! 204: are not committed to any of these proposals at this time. ! 205: Much of this paper ! 206: represents no more than ! 207: the personal opinions of the author. ! 208: .)l ! 209: .sh 1 "DEFINITIONS" ! 210: .pp ! 211: There are four basic concepts ! 212: that must be clearly distinguished ! 213: when dealing with mail systems: ! 214: the user (or the user's agent), ! 215: the user's identification, ! 216: the user's address, ! 217: and the route. ! 218: These are distinguished primarily by their position independence. ! 219: .sh 2 "User and Identification" ! 220: .pp ! 221: The user is the being ! 222: (a person or program) ! 223: that is creating or receiving a message. ! 224: An ! 225: .i agent ! 226: is an entity operating on behalf of the user \*- ! 227: such as a secretary who handles my mail. ! 228: or a program that automatically returns a ! 229: message such as ! 230: .q "I am at the UNICOM conference." ! 231: .pp ! 232: The identification is the tag ! 233: that goes along with the particular user. ! 234: This tag is completely independent of location. ! 235: For example, ! 236: my identification is the string ! 237: .q "Eric Allman," ! 238: and this identification does not change ! 239: whether I am located at U.C. Berkeley, ! 240: at Britton-Lee, ! 241: or at a scientific institute in Austria. ! 242: .pp ! 243: Since the identification is frequently ambiguous ! 244: (e.g., there are two ! 245: .q "Robert Henry" s ! 246: at Berkeley) ! 247: it is common to add other disambiguating information ! 248: that is not strictly part of the identification ! 249: (e.g., ! 250: Robert ! 251: .q "Code Generator" ! 252: Henry ! 253: versus ! 254: Robert ! 255: .q "System Administrator" ! 256: Henry). ! 257: .sh 2 "Address" ! 258: .pp ! 259: The address specifies a location. ! 260: As I move around, ! 261: my address changes. ! 262: For example, ! 263: my address might change from ! 264: .q [email protected] ! 265: to ! 266: .q [email protected] ! 267: or ! 268: .q [email protected] ! 269: depending on my current affiliation. ! 270: .pp ! 271: However, ! 272: an address is independent of the location of anyone else. ! 273: That is, ! 274: my address remains the same to everyone who might be sending me mail. ! 275: For example, ! 276: a person at MIT and a person at USC ! 277: could both send to ! 278: .q [email protected] ! 279: and have it arrive to the same mailbox. ! 280: .pp ! 281: Ideally a ! 282: .q "white pages" ! 283: service would be provided to map user identifications ! 284: into addresses ! 285: (for example, see ! 286: [Solomon81]). ! 287: Currently this is handled by passing around ! 288: scraps of paper ! 289: or by calling people on the telephone ! 290: to find out their address. ! 291: .sh 2 "Route" ! 292: .pp ! 293: While an address specifies ! 294: .i where ! 295: to find a mailbox, ! 296: a route specifies ! 297: .i how ! 298: to find the mailbox. ! 299: Specifically, ! 300: it specifies a path ! 301: from sender to receiver. ! 302: As such, the route is potentially different ! 303: for every pair of people in the electronic universe. ! 304: .pp ! 305: Normally the route is hidden from the user ! 306: by the software. ! 307: However, ! 308: some networks put the burden of determining the route ! 309: onto the sender. ! 310: Although this simplifies the software, ! 311: it also greatly impairs the usability ! 312: for most users. ! 313: The UUCP network is an example of such a network. ! 314: .sh 1 "DESIGN GOALS" ! 315: .pp ! 316: Design goals for ! 317: .i sendmail \** ! 318: .(f ! 319: \**This section makes no distinction between ! 320: .i delivermail ! 321: and ! 322: .i sendmail. ! 323: .)f ! 324: include: ! 325: .np ! 326: Compatibility with the existing mail programs, ! 327: including Bell version 6 mail, ! 328: Bell version 7 mail, ! 329: Berkeley ! 330: .i Mail ! 331: [Shoens79], ! 332: BerkNet mail ! 333: [Schmidt79], ! 334: and hopefully UUCP mail ! 335: [Nowitz78]. ! 336: ARPANET mail ! 337: [Crocker82] ! 338: was also required. ! 339: .np ! 340: Reliability, in the sense of guaranteeing ! 341: that every message is correctly delivered ! 342: or at least brought to the attention of a human ! 343: for correct disposal; ! 344: no message should ever be completely lost. ! 345: This goal was considered essential ! 346: because of the emphasis on mail in our environment. ! 347: It has turned out to be one of the hardest goals to satisfy, ! 348: especially in the face of the many anomalous message formats ! 349: produced by various ARPANET sites. ! 350: For example, ! 351: certain sites generate improperly formated addresses, ! 352: occasionally ! 353: causing error-message loops. ! 354: Some hosts use blanks in names, ! 355: causing problems with ! 356: mail programs that assume that an address ! 357: is one word. ! 358: The semantics of some fields ! 359: are interpreted slightly differently ! 360: by different sites. ! 361: In summary, ! 362: the obscure features of the ARPANET mail protocol ! 363: really ! 364: .i are ! 365: used and ! 366: are difficult to support, ! 367: but must be supported. ! 368: .np ! 369: Existing software to do actual delivery ! 370: should be used whenever possible. ! 371: This goal derives as much from political and practical considerations ! 372: as technical. ! 373: .np ! 374: Easy expansion to ! 375: fairly complex environments, ! 376: including multiple ! 377: connections to a single network type ! 378: (such as with multiple UUCP or Ethernets). ! 379: This goal requires consideration of the contents of an address ! 380: as well as its syntax ! 381: in order to determine which gateway to use. ! 382: .np ! 383: Configuration information should not be compiled into the code. ! 384: A single compiled program should be able to run as is at any site ! 385: (barring such basic changes as the CPU type or the operating system). ! 386: We have found this seemingly unimportant goal ! 387: to be critical in real life. ! 388: Besides the simple problems that occur when any program gets recompiled ! 389: in a different environment, ! 390: many sites like to ! 391: .q fiddle ! 392: with anything that they will be recompiling anyway. ! 393: .np ! 394: .i Sendmail ! 395: must be able to let various groups maintain their own mailing lists, ! 396: and let individuals specify their own forwarding, ! 397: without modifying the system alias file. ! 398: .np ! 399: Each user should be able to specify which mailer to execute ! 400: to process mail being delivered for him. ! 401: This feature allows users who are using specialized mailers ! 402: that use a different format to build their environment ! 403: without changing the system, ! 404: and facilitates specialized functions ! 405: (such as returning an ! 406: .q "I am on vacation" ! 407: message). ! 408: .np ! 409: Network traffic should be minimized ! 410: by batching addresses to a single host where possible, ! 411: without assistance from the user. ! 412: .pp ! 413: These goals motivated the architecture illustrated in figure 1. ! 414: .(z ! 415: .hl ! 416: .ie t \ ! 417: . sp 18 ! 418: .el \{\ ! 419: .(c ! 420: +---------+ +---------+ +---------+ ! 421: | sender1 | | sender2 | | sender3 | ! 422: +---------+ +---------+ +---------+ ! 423: | | | ! 424: +----------+ + +----------+ ! 425: | | | ! 426: v v v ! 427: +-------------+ ! 428: | sendmail | ! 429: +-------------+ ! 430: | | | ! 431: +----------+ + +----------+ ! 432: | | | ! 433: v v v ! 434: +---------+ +---------+ +---------+ ! 435: | mailer1 | | mailer2 | | mailer3 | ! 436: +---------+ +---------+ +---------+ ! 437: .)c ! 438: .\} ! 439: ! 440: .ce ! 441: Figure 1 \*- Sendmail System Structure. ! 442: .hl ! 443: .)z ! 444: The user interacts with a mail generating and sending program. ! 445: When the mail is created, ! 446: the generator calls ! 447: .i sendmail , ! 448: which routes the message to the correct mailer(s). ! 449: Since some of the senders may be network servers ! 450: and some of the mailers may be network clients, ! 451: .i sendmail ! 452: may be used as an internet mail gateway. ! 453: .sh 1 "USAGE" ! 454: .sh 2 "Address Formats" ! 455: .pp ! 456: Arguments may be flags or addresses. ! 457: Flags set various processing options. ! 458: Following flag arguments, ! 459: address arguments may be given. ! 460: Addresses follow the syntax in RFC822 ! 461: [Crocker82] ! 462: for ARPANET ! 463: address formats. ! 464: In brief, the format is: ! 465: .np ! 466: Anything in parentheses is thrown away ! 467: (as a comment). ! 468: .np ! 469: Anything in angle brackets (\c ! 470: .q "<\|>" ) ! 471: is preferred ! 472: over anything else. ! 473: This rule implements the ARPANET standard that addresses of the form ! 474: .(b ! 475: user name <machine-address> ! 476: .)b ! 477: will send to the electronic ! 478: .q machine-address ! 479: rather than the human ! 480: .q "user name." ! 481: .np ! 482: Double quotes ! 483: (\ "\ ) ! 484: quote phrases; ! 485: backslashes quote characters. ! 486: Backslashes are more powerful ! 487: in that they will cause otherwise equivalent phrases ! 488: to compare differently \*- for example, ! 489: .i user ! 490: and ! 491: .i ! 492: "user" ! 493: .r ! 494: are equivalent, ! 495: but ! 496: .i \euser ! 497: is different from either of them. ! 498: This might be used ! 499: to avoid normal aliasing ! 500: or duplicate suppression algorithms. ! 501: .pp ! 502: Parentheses, angle brackets, and double quotes ! 503: must be properly balanced and nested. ! 504: The rewriting rules control remaining parsing\**. ! 505: .(f ! 506: \**Disclaimer: Some special processing is done ! 507: after rewriting local names; see below. ! 508: .)f ! 509: .pp ! 510: Although old style addresses are still accepted ! 511: in most cases, ! 512: the preferred address format ! 513: is based on ARPANET-style domain-based addresses ! 514: [Su82a]. ! 515: These addresses are based on a hierarchical, logical decomposition ! 516: of the address space. ! 517: The addresses are hierarchical in a sense ! 518: similar to the U.S. postal addresses: ! 519: the messages may first be routed to the correct state, ! 520: with no initial consideration of the city ! 521: or other addressing details. ! 522: The addresses are logical ! 523: in that each step in the hierarchy ! 524: corresponds to a set of ! 525: .q "naming authorities" ! 526: rather than a physical network. ! 527: .pp ! 528: For example, ! 529: the address: ! 530: .(l ! 531: [email protected] ! 532: .)l ! 533: would first look up the domain ! 534: BigSite ! 535: in the namespace administrated by ! 536: ARPA. ! 537: A query could then be sent to ! 538: BigSite ! 539: for interpretation of ! 540: HostA. ! 541: Eventually the mail would arrive at ! 542: HostA, ! 543: which would then do final delivery ! 544: to user ! 545: .q eric. ! 546: .sh 2 "Mail to Files and Programs" ! 547: .pp ! 548: Files and programs are legitimate message recipients. ! 549: Files provide archival storage of messages, ! 550: useful for project administration and history. ! 551: Programs are useful as recipients in a variety of situations, ! 552: for example, ! 553: to maintain a public repository of systems messages ! 554: (such as the Berkeley ! 555: .i msgs ! 556: program). ! 557: .pp ! 558: Any address passing through the initial parsing algorithm ! 559: as a local address ! 560: (i.e, not appearing to be a valid address for another mailer) ! 561: is scanned for two special cases. ! 562: If prefixed by a vertical bar (\c ! 563: .q \^|\^ ) ! 564: the rest of the address is processed as a shell command. ! 565: If the user name begins with a slash mark (\c ! 566: .q /\^ ) ! 567: the name is used as a file name, ! 568: instead of a login name. ! 569: .sh 2 "Aliasing, Forwarding, Inclusion" ! 570: .pp ! 571: .i Sendmail ! 572: reroutes mail three ways. ! 573: Aliasing applies system wide. ! 574: Forwarding allows each user to reroute incoming mail ! 575: destined for that account. ! 576: Inclusion directs ! 577: .i sendmail ! 578: to read a file for a list of addresses, ! 579: and is normally used ! 580: in conjunction with aliasing. ! 581: .sh 3 "Aliasing" ! 582: .pp ! 583: Aliasing maps local addresses to address lists using a system-wide file. ! 584: This file is hashed to speed access. ! 585: Only addresses that parse as local ! 586: are allowed as aliases; ! 587: this guarantees a unique key ! 588: (since there are no nicknames for the local host). ! 589: .sh 3 "Forwarding" ! 590: .pp ! 591: After aliasing, ! 592: if an recipient address specifies a local user ! 593: .i sendmail ! 594: searches for a ! 595: .q .forward ! 596: file in the recipient's home directory. ! 597: If it exists, ! 598: the message is ! 599: .i not ! 600: sent to that user, ! 601: but rather to the list of addresses in that file. ! 602: Often ! 603: this list will contain only one address, ! 604: and the feature will be used for network mail forwarding. ! 605: .pp ! 606: Forwarding also permits a user to specify a private incoming mailer. ! 607: For example, ! 608: forwarding to: ! 609: .(b ! 610: "\^|\|/usr/local/newmail myname" ! 611: .)b ! 612: will use a different incoming mailer. ! 613: .sh 3 "Inclusion" ! 614: .pp ! 615: Inclusion is specified in RFC 733 [Crocker77] syntax: ! 616: .(b ! 617: :Include: pathname ! 618: .)b ! 619: An address of this form reads the file specified by ! 620: .i pathname ! 621: and sends to all users listed in that file. ! 622: .pp ! 623: The intent is ! 624: .i not ! 625: to support direct use of this feature, ! 626: but rather to use this as a subset of aliasing. ! 627: For example, ! 628: an alias of the form: ! 629: .(b ! 630: project: :include:/usr/project/userlist ! 631: .)b ! 632: is a method of letting a project maintain a mailing list ! 633: without interaction with the system administration, ! 634: even if the alias file is protected. ! 635: .pp ! 636: It is not necessary to rebuild the index on the alias database ! 637: when a :include: list is changed. ! 638: .sh 2 "Message Collection" ! 639: .pp ! 640: Once all recipient addresses are parsed and verified, ! 641: the message is collected. ! 642: The message comes in two parts: ! 643: a message header and a message body, ! 644: separated by a blank line. ! 645: The body is an uninterpreted ! 646: sequence of text lines. ! 647: .pp ! 648: The header is formated as a series of lines ! 649: of the form ! 650: .(b ! 651: field-name: field-value ! 652: .)b ! 653: Field-value can be split across lines by starting the following ! 654: lines with a space or a tab. ! 655: Some header fields have special internal meaning, ! 656: and have appropriate special processing. ! 657: Other headers are simply passed through. ! 658: Some header fields may be added automatically, ! 659: such as time stamps. ! 660: .sh 1 "THE UUCP PROBLEM" ! 661: .pp ! 662: Of particular interest ! 663: is the UUCP network. ! 664: The explicit routing ! 665: used in the UUCP environment ! 666: causes a number of serious problems. ! 667: First, ! 668: giving out an address ! 669: is impossible ! 670: without knowing the address of your potential correspondent. ! 671: This is typically handled ! 672: by specifying the address ! 673: relative to some ! 674: .q "well-known" ! 675: host ! 676: (e.g., ! 677: ucbvax or decvax). ! 678: Second, ! 679: it is often difficult to compute ! 680: the set of addresses ! 681: to reply to ! 682: without some knowledge ! 683: of the topology of the network. ! 684: Although it may be easy for a human being ! 685: to do this ! 686: under many circumstances, ! 687: a program does not have equally sophisticated heuristics ! 688: built in. ! 689: Third, ! 690: certain addresses will become painfully and unnecessarily long, ! 691: as when a message is routed through many hosts in the USENET. ! 692: And finally, ! 693: certain ! 694: .q "mixed domain" ! 695: addresses ! 696: are impossible to parse unambiguously \*- ! 697: e.g., ! 698: .(l ! 699: decvax!ucbvax!lbl-h!user@LBL-CSAM ! 700: .)l ! 701: might have many possible resolutions, ! 702: depending on whether the message was first routed ! 703: to decvax ! 704: or to LBL-CSAM. ! 705: .pp ! 706: To solve this problem, ! 707: the UUCP syntax ! 708: would have to be changed to use addresses ! 709: rather than routes. ! 710: For example, ! 711: the address ! 712: .q decvax!ucbvax!eric ! 713: might be expressed as ! 714: .q [email protected] ! 715: (with the hop through decvax implied). ! 716: This address would itself be a domain-based address; ! 717: for example, ! 718: an address might be of the form: ! 719: .(l ! 720: [email protected] ! 721: .)l ! 722: Hosts outside of Bell Telephone Laboratories ! 723: would then only need to know ! 724: how to get to a designated BTL relay, ! 725: and the BTL topology ! 726: would only be maintained inside Bell. ! 727: .pp ! 728: There are three major problems ! 729: associated with turning UUCP addresses ! 730: into something reasonable: ! 731: defining the namespace, ! 732: creating and propagating the necessary software, ! 733: and building and maintaining the database. ! 734: .sh 2 "Defining the Namespace" ! 735: .pp ! 736: Putting all UUCP hosts into a flat namespace ! 737: (e.g., ! 738: .q \&[email protected] ) ! 739: is not practical for a number of reasons. ! 740: First, ! 741: with over 1600 sites already, ! 742: and (with the increasing availability of inexpensive microcomputers ! 743: and autodialers) ! 744: several thousand more coming within a few years, ! 745: the database update problem ! 746: is simply intractable ! 747: if the namespace is flat. ! 748: Second, ! 749: there are almost certainly name conflicts today. ! 750: Third, ! 751: as the number of sites grow ! 752: the names become ever less mnemonic. ! 753: .pp ! 754: It seems inevitable ! 755: that there be some sort of naming authority ! 756: for the set of top level names ! 757: in the UUCP domain, ! 758: as unpleasant a possibility ! 759: as that may seem. ! 760: It will simply not be possible ! 761: to have one host resolving all names. ! 762: It may however be possible ! 763: to handle this ! 764: in a fashion similar to that of assigning names of newsgroups ! 765: in USENET. ! 766: However, ! 767: it will be essential to encourage everyone ! 768: to become subdomains of an existing domain ! 769: whenever possible \*- ! 770: even though this will certainly bruise some egos. ! 771: For example, ! 772: if a new host named ! 773: .q blid ! 774: were to be added to the UUCP network, ! 775: it would probably actually be addressed as ! 776: .q d.bli.UUCP ! 777: (i.e., ! 778: as host ! 779: .q d ! 780: in the pseudo-domain ! 781: .q bli ! 782: rather than as host ! 783: .q blid ! 784: in the UUCP domain). ! 785: .sh 2 "Creating and Propagating the Software" ! 786: .pp ! 787: The software required to implement a consistent namespace ! 788: is relatively trivial. ! 789: Two modules are needed, ! 790: one to handle incoming mail ! 791: and one to handle outgoing mail. ! 792: .pp ! 793: The incoming module ! 794: must be prepared to handle either old or new style addresses. ! 795: New-style addresses ! 796: can be passed through unchanged. ! 797: Old style addresses ! 798: must be turned into new style addresses ! 799: where possible. ! 800: .pp ! 801: The outgoing module ! 802: is slightly trickier. ! 803: It must do a database lookup on the recipient addresses ! 804: (passed on the command line) ! 805: to determine what hosts to send the message to. ! 806: If those hosts do not accept new-style addresses, ! 807: it must transform all addresses in the header of the message ! 808: into old style using the database lookup. ! 809: .pp ! 810: Both of these modules ! 811: are straightforward ! 812: except for the issue of modifying the header. ! 813: It seems prudent to choose one format ! 814: for the message headers. ! 815: For a number of reasons, ! 816: Berkeley has elected to use the ARPANET protocols ! 817: for message formats. ! 818: However, ! 819: this protocol is somewhat difficult to parse. ! 820: .pp ! 821: Propagation is somewhat more difficult. ! 822: There are a large number of hosts ! 823: connected to UUCP ! 824: that will want to run completely standard systems ! 825: (for very good reasons). ! 826: The strategy is not to convert the entire network \*- ! 827: only enough of it it alleviate the problem. ! 828: .sh 2 "Building and Maintaining the Database" ! 829: .pp ! 830: This is by far the most difficult problem. ! 831: A prototype for this database ! 832: already exists, ! 833: but it is maintained by hand ! 834: and does not pretend to be complete. ! 835: .pp ! 836: This problem will be reduced considerably ! 837: if people choose to group their hosts ! 838: into subdomains. ! 839: This would require a global update ! 840: only when a new top level domain ! 841: joined the network. ! 842: A message to a host in a subdomain ! 843: could simply be routed to a known domain gateway ! 844: for further processing. ! 845: For example, ! 846: the address ! 847: .q [email protected] ! 848: might be routed to the ! 849: .q bli ! 850: gateway ! 851: for redistribution; ! 852: new hosts could be added ! 853: within BLI ! 854: without notifying the rest of the world. ! 855: Of course, ! 856: other hosts ! 857: .i could ! 858: be notified as an efficiency measure. ! 859: .pp ! 860: There may be more than one domain gateway. ! 861: A domain such as BTL, ! 862: for instance, ! 863: might have a dozen gateways to the outside world; ! 864: a non-BTL site ! 865: could choose the closest gateway. ! 866: The only restriction ! 867: would be that all gateways ! 868: maintain a consistent view of the domain ! 869: they represent. ! 870: .sh 2 "Logical Structure" ! 871: .pp ! 872: Logically, ! 873: domains are organized into a tree. ! 874: There need not be a host actually associated ! 875: with each level in the tree \*- ! 876: for example, ! 877: there will be no host associated with the name ! 878: .q UUCP. ! 879: Similarly, ! 880: an organization might group names together for administrative reasons; ! 881: for example, ! 882: the name ! 883: .(l ! 884: CAD.research.BigCorp.UUCP ! 885: .)l ! 886: might not actually have a host representing ! 887: .q research. ! 888: .pp ! 889: However, ! 890: it may frequently be convenient to have a host ! 891: or hosts ! 892: that ! 893: .q represent ! 894: a domain. ! 895: For example, ! 896: if a single host exists that ! 897: represents ! 898: Berkeley, ! 899: then mail from outside Berkeley ! 900: can forward mail to that host ! 901: for further resolution ! 902: without knowing Berkeley's ! 903: (rather volatile) ! 904: topology. ! 905: This is not unlike the operation ! 906: of the telephone network. ! 907: .pp ! 908: This may also be useful ! 909: inside certain large domains. ! 910: For example, ! 911: at Berkeley it may be presumed ! 912: that most hosts know about other hosts ! 913: inside the Berkeley domain. ! 914: But if they process an address ! 915: that is unknown, ! 916: they can pass it ! 917: .q upstairs ! 918: for further examination. ! 919: Thus as new hosts are added ! 920: only one host ! 921: (the domain master) ! 922: .i must ! 923: be updated immediately; ! 924: other hosts can be updated as convenient. ! 925: .pp ! 926: Ideally this name resolution process ! 927: would be performed by a name server ! 928: (e.g., [Su82b]) ! 929: to avoid unnecessary copying ! 930: of the message. ! 931: However, ! 932: in a batch network ! 933: such as UUCP ! 934: this could result in unnecessary delays. ! 935: .sh 1 "COMPARISON WITH DELIVERMAIL" ! 936: .pp ! 937: .i Sendmail ! 938: is an outgrowth of ! 939: .i delivermail . ! 940: The primary differences are: ! 941: .np ! 942: Configuration information is not compiled in. ! 943: This change simplifies many of the problems ! 944: of moving to other machines. ! 945: It also allows easy debugging of new mailers. ! 946: .np ! 947: Address parsing is more flexible. ! 948: For example, ! 949: .i delivermail ! 950: only supported one gateway to any network, ! 951: whereas ! 952: .i sendmail ! 953: can be sensitive to host names ! 954: and reroute to different gateways. ! 955: .np ! 956: Forwarding and ! 957: :include: ! 958: features eliminate the requirement that the system alias file ! 959: be writable by any user ! 960: (or that an update program be written, ! 961: or that the system administration make all changes). ! 962: .np ! 963: .i Sendmail ! 964: supports message batching across networks ! 965: when a message is being sent to multiple recipients. ! 966: .np ! 967: A mail queue is provided in ! 968: .i sendmail. ! 969: Mail that cannot be delivered immediately ! 970: but can potentially be delivered later ! 971: is stored in this queue for a later retry. ! 972: The queue also provides a buffer against system crashes; ! 973: after the message has been collected ! 974: it may be reliably redelivered ! 975: even if the system crashes during the initial delivery. ! 976: .np ! 977: .i Sendmail ! 978: uses the networking support provided by 4.2BSD ! 979: to provide a direct interface networks such as the ARPANET ! 980: and/or Ethernet ! 981: using SMTP (the Simple Mail Transfer Protocol) ! 982: over a TCP/IP connection. ! 983: .+c ! 984: .ce ! 985: REFERENCES ! 986: .nr ii 1.5i ! 987: .ip [Crocker77] ! 988: Crocker, D. H., ! 989: Vittal, J. J., ! 990: Pogran, K. T., ! 991: and ! 992: Henderson, D. A. Jr., ! 993: .ul ! 994: Standard for the Format of ARPA Network Text Messages. ! 995: RFC 733, ! 996: NIC 41952. ! 997: In [Feinler78]. ! 998: November 1977. ! 999: .ip [Crocker82] ! 1000: Crocker, D. H., ! 1001: .ul ! 1002: Standard for the Format of Arpa Internet Text Messages. ! 1003: RFC 822. ! 1004: Network Information Center, ! 1005: SRI International, ! 1006: Menlo Park, California. ! 1007: August 1982. ! 1008: .ip [Feinler78] ! 1009: Feinler, E., ! 1010: and ! 1011: Postel, J. ! 1012: (eds.), ! 1013: .ul ! 1014: ARPANET Protocol Handbook. ! 1015: NIC 7104, ! 1016: Network Information Center, ! 1017: SRI International, ! 1018: Menlo Park, California. ! 1019: 1978. ! 1020: .ip [Nowitz78] ! 1021: Nowitz, D. A., ! 1022: and ! 1023: Lesk, M. E., ! 1024: .ul ! 1025: A Dial-Up Network of UNIX Systems. ! 1026: Bell Laboratories. ! 1027: In ! 1028: UNIX Programmer's Manual, Seventh Edition, ! 1029: Volume 2. ! 1030: August, 1978. ! 1031: .ip [Schmidt79] ! 1032: Schmidt, E., ! 1033: .ul ! 1034: An Introduction to the Berkeley Network. ! 1035: University of California, Berkeley California. ! 1036: 1979. ! 1037: .ip [Shoens79] ! 1038: Shoens, K., ! 1039: .ul ! 1040: Mail Reference Manual. ! 1041: University of California, Berkeley. ! 1042: In UNIX Programmer's Manual, ! 1043: Seventh Edition, ! 1044: Volume 2C. ! 1045: December 1979. ! 1046: .ip [Solomon81] ! 1047: Solomon, M., ! 1048: Landweber, L., ! 1049: and ! 1050: Neuhengen, D., ! 1051: .ul ! 1052: The Design of the CSNET Name Server. ! 1053: CS-DN-2. ! 1054: University of Wisconsin, ! 1055: Madison. ! 1056: October 1981. ! 1057: .ip [Su82a] ! 1058: Su, Zaw-Sing, ! 1059: and ! 1060: Postel, Jon, ! 1061: .ul ! 1062: The Domain Naming Convention for Internet User Applications. ! 1063: RFC819. ! 1064: Network Information Center, ! 1065: SRI International, ! 1066: Menlo Park, California. ! 1067: August 1982. ! 1068: .ip [Su82b] ! 1069: Su, Zaw-Sing, ! 1070: .ul ! 1071: A Distributed System for Internet Name Service. ! 1072: RFC830. ! 1073: Network Information Center, ! 1074: SRI International, ! 1075: Menlo Park, California. ! 1076: October 1982.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.