%!PS %%Version: 3.3.1 %%DocumentFonts: (atend) %%Pages: (atend) %%BoundingBox: (atend) %%EndComments % % Version 3.3.1 prologue for troff files. % /#copies 1 store /aspectratio 1 def /formsperpage 1 def /landscape false def /linewidth .3 def /magnification 1 def /margin 0 def /orientation 0 def /resolution 720 def /rotation 1 def /xoffset 0 def /yoffset 0 def /roundpage true def /useclippath true def /pagebbox [0 0 612 792] def /R /Times-Roman def /I /Times-Italic def /B /Times-Bold def /BI /Times-BoldItalic def /H /Helvetica def /HI /Helvetica-Oblique def /HB /Helvetica-Bold def /HX /Helvetica-BoldOblique def /CW /Courier def /CO /Courier def /CI /Courier-Oblique def /CB /Courier-Bold def /CX /Courier-BoldOblique def /PA /Palatino-Roman def /PI /Palatino-Italic def /PB /Palatino-Bold def /PX /Palatino-BoldItalic def /Hr /Helvetica-Narrow def /Hi /Helvetica-Narrow-Oblique def /Hb /Helvetica-Narrow-Bold def /Hx /Helvetica-Narrow-BoldOblique def /KR /Bookman-Light def /KI /Bookman-LightItalic def /KB /Bookman-Demi def /KX /Bookman-DemiItalic def /AR /AvantGarde-Book def /AI /AvantGarde-BookOblique def /AB /AvantGarde-Demi def /AX /AvantGarde-DemiOblique def /NR /NewCenturySchlbk-Roman def /NI /NewCenturySchlbk-Italic def /NB /NewCenturySchlbk-Bold def /NX /NewCenturySchlbk-BoldItalic def /ZD /ZapfDingbats def /ZI /ZapfChancery-MediumItalic def /S /S def /S1 /S1 def /GR /Symbol def /inch {72 mul} bind def /min {2 copy gt {exch} if pop} bind def /setup { counttomark 2 idiv {def} repeat pop landscape {/orientation 90 orientation add def} if /scaling 72 resolution div def linewidth setlinewidth 1 setlinecap pagedimensions xcenter ycenter translate orientation rotation mul rotate width 2 div neg height 2 div translate xoffset inch yoffset inch neg translate margin 2 div dup neg translate magnification dup aspectratio mul scale scaling scaling scale addmetrics 0 0 moveto } def /pagedimensions { useclippath userdict /gotpagebbox known not and { /pagebbox [clippath pathbbox newpath] def roundpage currentdict /roundpagebbox known and {roundpagebbox} if } if pagebbox aload pop 4 -1 roll exch 4 1 roll 4 copy landscape {4 2 roll} if sub /width exch def sub /height exch def add 2 div /xcenter exch def add 2 div /ycenter exch def userdict /gotpagebbox true put } def /addmetrics { /Symbol /S null Sdefs cf /Times-Roman /S1 StandardEncoding dup length array copy S1defs cf } def /pagesetup { /page exch def currentdict /pagedict known currentdict page known and { page load pagedict exch get cvx exec } if } def /decodingdefs [ {counttomark 2 idiv {y moveto show} repeat} {neg /y exch def counttomark 2 idiv {y moveto show} repeat} {neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat} {neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat} {counttomark 2 idiv {y moveto show} repeat} {neg setfunnytext} ] def /setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def /w {neg moveto show} bind def /m {neg dup /y exch def moveto} bind def /done {/lastpage where {pop lastpage} if} def /f { dup /font exch def findfont exch dup /ptsize exch def scaling div dup /size exch def scalefont setfont linewidth ptsize mul scaling 10 mul div setlinewidth /spacewidth ( ) stringwidth pop def } bind def /changefont { /fontheight exch def /fontslant exch def currentfont [ 1 0 fontheight ptsize div fontslant sin mul fontslant cos div fontheight ptsize div 0 0 ] makefont setfont } bind def /sf {f} bind def /cf { dup length 2 idiv /entries exch def /chtab exch def /newencoding exch def /newfont exch def findfont dup length 1 add dict /newdict exch def {1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall newencoding type /arraytype eq {newdict /Encoding newencoding put} if newdict /Metrics entries dict put newdict /Metrics get begin chtab aload pop 1 1 entries {pop def} for newfont newdict definefont pop end } bind def % % A few arrays used to adjust reference points and character widths in some % of the printer resident fonts. If square roots are too high try changing % the lines describing /radical and /radicalex to, % % /radical [0 -75 550 0] % /radicalex [-50 -75 500 0] % % Move braceleftbt a bit - default PostScript character is off a bit. % /Sdefs [ /bracketlefttp [201 500] /bracketleftbt [201 500] /bracketrighttp [-81 380] /bracketrightbt [-83 380] /braceleftbt [203 490] /bracketrightex [220 -125 500 0] /radical [0 0 550 0] /radicalex [-50 0 500 0] /parenleftex [-20 -170 0 0] /integral [100 -50 500 0] /infinity [10 -75 730 0] ] def /S1defs [ /underscore [0 80 500 0] /endash [7 90 650 0] ] def % % Tries to round clipping path dimensions, as stored in array pagebbox, so they % match one of the known sizes in the papersizes array. Lower left coordinates % are always set to 0. % /roundpagebbox { 7 dict begin /papersizes [8.5 inch 11 inch 14 inch 17 inch] def /mappapersize { /val exch def /slop .5 inch def /diff slop def /j 0 def 0 1 papersizes length 1 sub { /i exch def papersizes i get val sub abs dup diff le {/diff exch def /j i def} {pop} ifelse } for diff slop lt {papersizes j get} {val} ifelse } def pagebbox 0 0 put pagebbox 1 0 put pagebbox dup 2 get mappapersize 2 exch put pagebbox dup 3 get mappapersize 3 exch put end } bind def %%EndProlog %%BeginSetup mark /rotation 1 def /gotpagebbox true def /linewidth 0.5 def /xoffset 0 def /yoffset 0 def /#copies 1 store /magnification 1 def %%FormsPerPage: 1 /formsperpage 1 def %%Patch from lp %%EndPatch from lp /landscape false def /resolution 720 def setup 2 setdecoding %%EndSetup %%Page: 1 1 %%PageBoundingBox: (atend) /saveobj save def mark 1 pagesetup 12 B f (Upas - a simpler approach to network mail)7 2199 1 1780 1230 t 10 I f (David L. Presotto \(research!presotto\))3 1515 1 2122 1470 t 10 R f (AT&T Bell Laboratories)2 993 1 2383 1650 t (Murray Hill, New Jersey 07974)4 1267 1 2246 1770 t 10 I f (ABSTRACT)2643 2150 w (Upas*)1330 2410 w 10 R f (is a mail interface that routes messages between existing network specific)10 3054 1 1626 2410 t ( uses a regular expression based mini-language to)7 2045( It)1 120(mailers, users, and user mailboxes.)4 1435 3 1080 2530 t ( route the mail to the intended desti-)7 1474(convert mail addresses into the commands needed to)7 2126 2 1080 2650 t ( is the mail interface for the Eighth Edition of the Unix\262 Time-Sharing Sys-)13 3067(nation. Upas)1 533 2 1080 2770 t (tem.)1080 2890 w 10 B f (Introduction)720 3250 w 10 R f ( from events similar to those motivating the development of many)10 2673(Our entry in the `mail race' sprang)6 1397 2 970 3406 t ( many years a short and simple mailer was used to deliver local mail and to route mail via)18 3584( For)1 190(mail systems.)1 546 3 720 3526 t ( its user interface left a little to be desired, its reliability was so high)14 2795( Although)1 434(our home grown networks.)3 1091 3 720 3646 t ( as we gained access to more and more networks, particularly ones)11 2671( However,)1 441( it.)1 107(that great trust was put into)5 1101 4 720 3766 t ( of these networks had their own)6 1375( Each)1 261( situation quickly deteriorated.)3 1257(over which we had no control, the)6 1427 4 720 3886 t ( some trepidation, we absorbed these standards into our)8 2248( With)1 254( addressing conventions.)2 993(mail `standards' and)2 825 4 720 4006 t ( our danger, we decided to)5 1063( Realizing)1 434( simplicity was quickly lost along with its fabled reliability.)9 2393(mailer. Its)1 430 4 720 4126 t ( was a way to get back to a simple, well understood, and thereby reliable mail sys-)16 3305(step back and see if there)5 1015 2 720 4246 t (tem.)720 4366 w ( mail system is essen-)4 884( A)1 125( system is illustrated by figure 1.)6 1326(The job to be performed by a network mail)8 1735 4 970 4522 t ( a router it must be conversant in)7 1319( As)1 162( messages.)1 428(tially a large switch for handling the routing and delivery of)10 2411 4 720 4642 t ( protocols, be able to decipher destination addresses, and pass messages along to the)13 3507(the various network)2 813 2 720 4762 t ( since there is no)4 703( Also,)1 272( to a mailbox.)3 574( it actually gets to deliver a piece of mail)9 1709( Sometimes)1 504(next network.)1 558 6 720 4882 t ( must convert messages from one format to another as it routes them)12 2783(common mail format, the mail system)5 1537 2 720 5002 t ( this can easily lead to)5 945( of the number of networks and mail formats,)8 1915( Because)1 395(from network to network.)3 1065 4 720 5122 t ( create a manageable)3 838( task was to decide how to partition the task in order to)12 2204( Our)1 206(thousands of lines of code.)4 1072 4 720 5242 t (yet efficient mail system.)3 1010 1 720 5362 t 10 B f (Some Observations)1 825 1 720 5602 t 10 R f ( Fortunately,)1 552( interfacing to a particular network is often a messy and arbitrary thing.)12 3039(The task of)2 479 3 970 5758 t ( \(corporations, governments, committees\) that design network protocols also provide code \(i.e.)11 3808(most entities)1 512 2 720 5878 t ( experience, it has always been easier to interface)8 2056( our)1 168( In)1 143(mail programs\) that understand these protocols.)5 1953 4 720 5998 t ( our existing mailer.)3 847(one of these mailers to our mail system than to incorporate the new protocols into)14 3473 2 720 6118 t ( network protocols change it is eas-)6 1426( As)1 163( by someone else is supported by someone else.)8 1922(Also, code provided)2 809 4 720 6238 t (ier to pick up the new version of the network mailer than to rewrite our mailer.)15 3144 1 720 6358 t ( is clear that a message)5 967( It)1 121( networks, there are far fewer message formats.)7 1960(Although there are many)3 1022 4 970 6514 t ( further structure)2 672( the imposition of)3 715( However,)1 442(needs a destination address and possibly even a reply address.)9 2491 4 720 6634 t ( be like if the)4 535( what postal delivery would)4 1114( Imagine)1 378(on the message is at best distasteful, at worst obstructive.)9 2293 4 720 6754 t 8 S1 f (__________________)720 6854 w 8 R f (*)720 6954 w 8 B f (upas)785 6954 w 8 R f (,)946 6954 w 6 R f (1)966 6930 w 8 I f (u\302pas, n)1 262 1 1021 6954 t 8 R f ( full)1 135(. \(in)1 153 2 1283 6954 t 8 B f (u\302pas-tree\302)1596 6954 w 8 R f ( for miles around; Javanese tree)5 1037(\), a fabulous Javanese tree that poisoned everything)7 1677 2 1966 6954 t (\()720 7054 w 8 I f (Antiaris toxicara)1 542 1 746 7054 t 8 R f ( poison.])1 279( [Malay,)1 289(, of the mulberry family\): the poison of its latex.)9 1534 3 1288 7054 t (\262 Unix is a trademark of AT&T Bell Laboratories)8 1587 1 720 7154 t cleartomark showpage saveobj restore %%PageBoundingBox: 61 62 514 691 %%EndPage: 1 1 %%Page: 2 2 %%PageBoundingBox: (atend) /saveobj save def mark 2 pagesetup 10 R f (- 2 -)2 166 1 2797 480 t cleartomark saveobj restore %%BeginGlobal % % Version 3.3.1 drawing procedures for dpost. Automatically pulled in when % needed. % /inpath false def /savematrix matrix def /Dl { inpath {pop pop neg lineto} {newpath neg moveto neg lineto stroke} ifelse } bind def /De { /y1 exch 2 div def /x1 exch 2 div def /savematrix savematrix currentmatrix def neg exch x1 add exch translate x1 y1 scale 0 0 1 0 360 inpath {1 0 moveto arc savematrix setmatrix} {newpath arc savematrix setmatrix stroke} ifelse } bind def /Da { /dy2 exch def /dx2 exch def /dy1 exch def /dx1 exch def dy1 add neg exch dx1 add exch dx1 dx1 mul dy1 dy1 mul add sqrt dy1 dx1 neg atan dy2 neg dx2 atan inpath {arc} {newpath arc stroke} ifelse } bind def /DA { /dy2 exch def /dx2 exch def /dy1 exch def /dx1 exch def dy1 add neg exch dx1 add exch dx1 dx1 mul dy1 dy1 mul add sqrt dy1 dx1 neg atan dy2 neg dx2 atan inpath {arcn} {newpath arcn stroke} ifelse } bind def /Ds { /y2 exch def /x2 exch def /y1 exch def /x1 exch def /y0 exch def /x0 exch def x0 5 x1 mul add 6 div y0 5 y1 mul add -6 div x2 5 x1 mul add 6 div y2 5 y1 mul add -6 div x1 x2 add 2 div y1 y2 add -2 div inpath {curveto} {newpath x0 x1 add 2 div y0 y1 add -2 div moveto curveto stroke} ifelse } bind def %%EndGlobal /saveobj save def mark 10 R f 1935 1062 540 360 De (network)2042 1022 w (A)2169 1142 w 2205 1362 2205 1242 Dl 2205 1362 2187 1290 Dl 2205 1362 2223 1290 Dl (protocol)2039 1442 w 2205 1601 2205 1481 Dl 2205 1602 2187 1530 Dl 2205 1602 2223 1530 Dl (convert)2056 1681 w 2205 1842 2205 1722 Dl 2205 1841 2187 1769 Dl 2205 1841 2223 1769 Dl 2205 2321 2205 2201 Dl 2205 2322 2187 2250 Dl 2205 2322 2223 2250 Dl (convert)2056 2401 w 2205 2562 2205 2442 Dl 2205 2561 2187 2489 Dl 2205 2561 2223 2489 Dl (queue)2086 2642 w 2205 2802 2205 2682 Dl 2205 2802 2187 2730 Dl 2205 2802 2223 2730 Dl (protocol)2039 2882 w 2205 3041 2205 2921 Dl 2205 3042 2187 2970 Dl 2205 3042 2223 2970 Dl 1935 3222 540 360 De (network)2042 3182 w (A)2169 3302 w 2610 1062 540 360 De (network)2717 1022 w (B)2847 1142 w 2880 1362 2880 1242 Dl 2879 1362 2861 1290 Dl 2880 1362 2898 1290 Dl (protocol)2714 1442 w 2880 1601 2880 1481 Dl 2879 1602 2861 1530 Dl 2880 1602 2898 1530 Dl (convert)2731 1681 w 2880 1842 2880 1722 Dl 2879 1841 2861 1769 Dl 2880 1841 2898 1769 Dl 2880 2321 2880 2201 Dl 2879 2322 2861 2250 Dl 2880 2322 2898 2250 Dl (convert)2731 2401 w 2880 2562 2880 2442 Dl 2879 2561 2861 2489 Dl 2880 2561 2898 2489 Dl (queue)2761 2642 w 2880 2802 2880 2682 Dl 2879 2802 2861 2730 Dl 2880 2802 2898 2730 Dl (protocol)2714 2882 w 2880 3041 2880 2921 Dl 2879 3042 2861 2970 Dl 2880 3042 2898 2970 Dl 2610 3222 540 360 De (network)2717 3182 w (B)2847 3302 w 3285 1062 540 360 De (network)3392 1022 w (C)3522 1142 w 3555 1362 3555 1242 Dl 3555 1362 3537 1290 Dl 3555 1362 3573 1290 Dl (protocol)3389 1442 w 3555 1601 3555 1481 Dl 3555 1602 3537 1530 Dl 3555 1602 3573 1530 Dl (convert)3406 1681 w 3555 1842 3555 1722 Dl 3555 1841 3537 1769 Dl 3555 1841 3573 1769 Dl 3555 2321 3555 2201 Dl 3555 2322 3537 2250 Dl 3555 2322 3573 2250 Dl (convert)3406 2401 w 3555 2562 3555 2442 Dl 3555 2561 3537 2489 Dl 3555 2561 3573 2489 Dl (queue)3436 2642 w 3555 2802 3555 2682 Dl 3555 2802 3537 2730 Dl 3555 2802 3573 2730 Dl (protocol)3389 2882 w 3555 3041 3555 2921 Dl 3555 3042 3537 2970 Dl 3555 3042 3573 2970 Dl 3285 3222 540 360 De (network)3392 3182 w (C)3522 3302 w 1935 2021 1863 2039 Dl 1935 2021 1863 2003 Dl 1575 2021 1935 2021 Dl 1035 2021 540 360 De (user)1222 2041 w 4185 2021 3825 2021 Dl 4185 2021 4113 2039 Dl 4185 2021 4113 2003 Dl 4185 2021 540 360 De (mail)4366 1981 w (box)4380 2101 w 2106 2201 2070 2201 Dl 2177 2201 2141 2201 Dl 2249 2201 2213 2201 Dl 2321 2201 2285 2201 Dl 2393 2201 2357 2201 Dl 2465 2201 2429 2201 Dl 2537 2201 2501 2201 Dl 2609 2201 2573 2201 Dl 2681 2201 2645 2201 Dl 2753 2201 2717 2201 Dl 2825 2201 2789 2201 Dl 2897 2201 2861 2201 Dl 2969 2201 2933 2201 Dl 3041 2201 3005 2201 Dl 3113 2201 3077 2201 Dl 3185 2201 3149 2201 Dl 3257 2201 3221 2201 Dl 3329 2201 3293 2201 Dl 3401 2201 3365 2201 Dl 3473 2201 3437 2201 Dl 3545 2201 3509 2201 Dl 3617 2201 3581 2201 Dl 3689 2201 3653 2201 Dl 3690 2165 3690 2201 Dl 3690 2085 3690 2121 Dl 3690 2003 3690 2039 Dl 3690 1923 3690 1959 Dl 3690 1841 3690 1877 Dl 3654 1841 3690 1841 Dl 3582 1841 3618 1841 Dl 3510 1841 3546 1841 Dl 3438 1841 3474 1841 Dl 3366 1841 3402 1841 Dl 3294 1841 3330 1841 Dl 3222 1841 3258 1841 Dl 3150 1841 3186 1841 Dl 3078 1841 3114 1841 Dl 3006 1841 3042 1841 Dl 2934 1841 2970 1841 Dl 2862 1841 2898 1841 Dl 2790 1841 2826 1841 Dl 2718 1841 2754 1841 Dl 2646 1841 2682 1841 Dl 2574 1841 2610 1841 Dl 2502 1841 2538 1841 Dl 2430 1841 2466 1841 Dl 2358 1841 2394 1841 Dl 2286 1841 2322 1841 Dl 2214 1841 2250 1841 Dl 2142 1841 2178 1841 Dl 2070 1841 2106 1841 Dl 2070 1877 2070 1841 Dl 2070 1959 2070 1923 Dl 2070 2039 2070 2003 Dl 2070 2121 2070 2085 Dl 2070 2201 2070 2165 Dl (routing)2736 2041 w ( functions to be performed to route network mail.)8 1972( The)1 205(Figure 1.)1 361 3 1611 3660 t ( it is correctly dated and signed, that the form of)10 2032(Postal Service opened each piece of mail to ensure that)9 2288 2 720 3900 t ( obeys some preconceived format, refusing delivery if)7 2226(address is correct, and that the company letterhead)7 2094 2 720 4020 t ( a mes-)2 298( For)1 194( such requirements.)2 789( some networks impose)3 953( Unfortunately,)1 639(any of these conditions are not met.)6 1447 6 720 4140 t ( expect it to survive a number of conversions between)9 2253( To)1 172( is difficult enough.)3 816(sage to obey one standard)4 1079 4 720 4260 t ( most networks adopt standards estab-)5 1588( of this,)2 327( Because)1 394(restrictive standards constitutes wishful thinking.)4 2011 4 720 4380 t ( although there are many networks, there are relatively few)9 2426( Therefore,)1 475( networks.)1 424(lished by older or larger)4 995 4 720 4500 t (message formats.)1 693 1 720 4620 t ( path may be)3 531( This)1 234( number of machines and networks.)5 1455(A network address describes a path through a)7 1850 4 970 4776 t ( however, the path crosses a number of)7 1578( Often,)1 305(rather simple, consisting of a single machine and user name.)9 2437 3 720 4896 t ( such domain imposes some rules for structuring paths within the domain.)11 3086( Each)1 261(administrative domains.)1 973 3 720 5016 t ( no adhered-to standard for binding the path segments from each domain into a single)14 3417(Unfortunately, there is)2 903 2 720 5136 t ( networks differ on direction of binding \(person@machine vs. machine!person\), delimiters \(`.')11 3790(address. The)1 530 2 720 5256 t ( there is no fixed way to correctly)7 1386( Therefore,)1 473( `%'\), quotation marks, and even case sensitivity.)7 2011(vs. `@' vs.)2 450 4 720 5376 t ( tend to be very short lived,)6 1138( there are conventions which)4 1171( Instead,)1 369(parse and understand a network address.)5 1642 4 720 5496 t ( relatively simple example, con-)4 1308( a)1 76( As)1 168(usually until someone issues a new RFC or a new network appears.)11 2768 4 720 5616 t ( one UUCP)2 463(sider a message sent from)4 1031 2 720 5736 t 8 R f (2)2214 5704 w 10 R f ( address)1 325( The)1 206(network, through ARPAnet, to another UUCP network.)6 2229 3 2280 5736 t (format might be something like:)4 1289 1 720 5856 t 10 CW f (placeA!placeB!"placeD!placeE!person"@placeC)1330 6036 w 10 R f ( the conventions underlying the)4 1316( Unfortunately,)1 649(The rules for parsing such an address are easily defined.)9 2355 3 720 6216 t ( you've managed to write your code, the administrator at placeB may)11 2833( Once)1 266(rules change from day to day.)5 1221 3 720 6336 t (decide that he won't accept quotation marks in an address and would really like the address to look like:)18 4160 1 720 6456 t 10 CW f (placeA!placeB!@placeC!placeD!placeE!person)1330 6636 w 10 R f ( our experience these changes happen with madden-)7 2115( In)1 138( defined.)1 354(A new set of parsing rules now have to be)9 1713 4 720 6816 t ( are the direct result of there being no single comprehensive standard or administrative)13 3483( They)1 258(ing frequency.)1 579 3 720 6936 t ( mailer should be)3 715( network)1 359( Any)1 229( we have to treat address parsing rules as ephemeral.)9 2157(authority. Therefore,)1 860 5 720 7056 t ( them to one particular)4 936( Tying)1 297( address parsing rules frequently and with little difficulty.)8 2364(able to change its)3 723 4 720 7176 t (standard such as this week's ARPA rules is equivalent to planned obsolescence.)11 3195 1 720 7296 t cleartomark showpage saveobj restore %%PageBoundingBox: 61 46 514 764 %%EndPage: 2 2 %%Page: 3 3 %%PageBoundingBox: (atend) /saveobj save def mark 3 pagesetup 10 R f (- 3 -)2 166 1 2797 480 t ( designers seem to have)4 1012(Finally, we should make a point about reversibility that many other mail)11 3058 2 970 840 t ( addresses, mailers are expected to maintain some form of return)10 2620( addition to parsing destination)4 1259(missed. In)1 441 3 720 960 t ( that the)2 346( often involves changing the current return address to one)9 2397( This)1 239(address attached to the message.)4 1338 4 720 1080 t ( should parse and modify return addresses using the same)9 2299( mailer)1 281( A)1 123(mailer will accept as a reply destination.)6 1617 4 720 1200 t ( as is too often the case, the mailer will reject the very)12 2190( Otherwise,)1 488( destination addresses.)2 902(rules as it does for)4 740 4 720 1320 t (addresses that it has provided for replies.)6 1633 1 720 1440 t 10 B f (A Solution)1 454 1 720 1680 t 10 R f ( been to throw out all the so-called standards and create a single coher-)13 2881(The best solution would have)4 1189 2 970 1836 t ( for formatting and addressing mail.)5 1532(ent scheme)1 466 2 720 1956 t 8 R f (3)2718 1924 w 10 R f (However, since we have no power to impose such a)9 2238 1 2802 1956 t ( to build a mail system that)6 1150(scheme, we have tried to use the above stated requirements and observations)11 3170 2 720 2076 t (makes the best of a bad situation.)6 1329 1 720 2196 t ( interface program)2 742( network has its own)4 835( Each)1 251(The structure of our mail system is depicted in figure 2.)10 2242 4 970 2352 t ( specific mailers provided with the)5 1384( general these are the network)5 1198( In)1 134(for message reception and transmission.)4 1604 4 720 2472 t ( then)1 200( Upas)1 258( gives it to Upas.)4 687( a message enters from a network, the network specific mailer)10 2494(networks. When)1 681 5 720 2592 t ( format specific filter)3 860( A)1 127( in a local mail box or routes the mail to the next network.)13 2385(either deposits the mail)3 948 4 720 2712 t ( vice-versa; RFC)2 701(may be called to convert the message from network format to one Upas understands or)14 3619 2 720 2832 t (822)720 2952 w 8 R f (4)870 2920 w 10 R f ( rest of this paper describes how Upas preforms its message routing)11 2709( The)1 206( formats are built in.)4 817(and Unix)1 371 4 937 2952 t (and the ease with which new networks can be added.)9 2111 1 720 3072 t 1980 3414 540 360 De (network)2087 3374 w (A)2214 3494 w 2250 3714 2250 3594 Dl 2250 3714 2232 3642 Dl 2250 3714 2268 3642 Dl 1980 3713 1980 3833 Dl 2520 3714 1980 3714 Dl 2520 3834 2520 3714 Dl 1980 3833 2520 3833 Dl (protocol)2084 3794 w 2250 3953 2250 3833 Dl 2250 3954 2232 3882 Dl 2250 3954 2268 3882 Dl 1980 3954 1980 4074 Dl 2520 3954 1980 3954 Dl 2520 4074 2520 3954 Dl 1980 4074 2520 4074 Dl (convert)2101 4033 w 2250 4194 2250 4074 Dl 2250 4193 2232 4121 Dl 2250 4193 2268 4121 Dl 2250 4673 2250 4553 Dl 2250 4674 2232 4602 Dl 2250 4674 2268 4602 Dl 1980 4674 1980 4794 Dl 2520 4674 1980 4674 Dl 2520 4794 2520 4674 Dl 1980 4794 2520 4794 Dl (convert)2101 4753 w 2250 4914 2250 4794 Dl 2250 4913 2232 4841 Dl 2250 4913 2268 4841 Dl (queue)2131 4994 w 2250 5154 2250 5034 Dl 2250 5154 2232 5082 Dl 2250 5154 2268 5082 Dl (protocol)2084 5234 w 2250 5393 2250 5273 Dl 2250 5394 2232 5322 Dl 2250 5394 2268 5322 Dl 1980 5574 540 360 De (network)2087 5534 w (A)2214 5654 w 2520 4913 1980 4913 Dl 2520 5273 2520 4913 Dl 1980 5273 2520 5273 Dl 1980 4913 1980 5273 Dl 1980 4553 2610 4553 Dl 1980 4193 1980 4553 Dl 2610 4193 1980 4193 Dl 2610 3414 540 360 De (network)2717 3374 w (B)2847 3494 w 2880 3714 2880 3594 Dl 2880 3714 2862 3642 Dl 2880 3714 2898 3642 Dl (protocol)2714 3794 w 2880 3953 2880 3833 Dl 2880 3954 2862 3882 Dl 2880 3954 2898 3882 Dl (convert)2731 4033 w 2880 4194 2880 4074 Dl 2880 4193 2862 4121 Dl 2880 4193 2898 4121 Dl 2880 4673 2880 4553 Dl 2880 4674 2862 4602 Dl 2880 4674 2898 4602 Dl (convert)2731 4753 w 2880 4914 2880 4794 Dl 2880 4913 2862 4841 Dl 2880 4913 2898 4841 Dl (queue)2761 4994 w 2880 5154 2880 5034 Dl 2880 5154 2862 5082 Dl 2880 5154 2898 5082 Dl (protocol)2714 5234 w 2880 5393 2880 5273 Dl 2880 5394 2862 5322 Dl 2880 5394 2898 5322 Dl 2610 5574 540 360 De (network)2717 5534 w (B)2847 5654 w 3150 4074 2610 4074 Dl 3150 3714 3150 4074 Dl 2610 3714 3150 3714 Dl 2610 4074 2610 3714 Dl 3150 4674 2610 4674 Dl 3150 5273 3150 4674 Dl 2610 5273 3150 5273 Dl 2610 4674 2610 5273 Dl 2610 4553 3240 4553 Dl 3240 4193 2610 4193 Dl 3240 3414 540 360 De (network)3347 3374 w (C)3477 3494 w 3510 3714 3510 3594 Dl 3510 3714 3492 3642 Dl 3510 3714 3528 3642 Dl 3240 3713 3240 3833 Dl 3780 3714 3240 3714 Dl 3780 3834 3780 3714 Dl 3240 3833 3780 3833 Dl (protocol)3344 3794 w 3510 3953 3510 3833 Dl 3510 3954 3492 3882 Dl 3510 3954 3528 3882 Dl (convert)3361 4033 w 3510 4194 3510 4074 Dl 3510 4193 3492 4121 Dl 3510 4193 3528 4121 Dl 3510 4673 3510 4553 Dl 3510 4674 3492 4602 Dl 3510 4674 3528 4602 Dl (convert)3361 4753 w 3510 4914 3510 4794 Dl 3510 4913 3492 4841 Dl 3510 4913 3528 4841 Dl (queue)3391 4994 w 3510 5154 3510 5034 Dl 3510 5154 3492 5082 Dl 3510 5154 3528 5082 Dl (protocol)3344 5234 w 3510 5393 3510 5273 Dl 3510 5394 3492 5322 Dl 3510 5394 3528 5322 Dl 3240 5574 540 360 De (network)3347 5534 w (C)3477 5654 w 3240 3954 3240 4193 Dl 3780 3954 3240 3954 Dl 3780 4794 3780 3954 Dl 3240 4794 3780 4794 Dl 3240 4555 3240 4794 Dl 3780 4913 3240 4913 Dl 3780 5273 3780 4913 Dl 3240 5273 3780 5273 Dl 3240 4913 3240 5273 Dl 1980 4373 1908 4391 Dl 1980 4373 1908 4355 Dl 1620 4373 1980 4373 Dl 1080 4373 540 360 De (user)1267 4393 w 4140 4373 3780 4373 Dl 4140 4373 4068 4391 Dl 4140 4373 4068 4355 Dl 4140 4373 540 360 De (mail)4321 4333 w (box)4335 4453 w 12 R f (Upas)2314 4393 w 10 R f (\(/bin/mail & /bin/rmail\))2 951 1 2585 4393 t ( solid box represents)3 824( Each)1 249( structure of Upas.)3 737( The)1 205(Figure 2.)1 361 5 1692 6012 t (a separate program.)2 783 1 2463 6132 t 10 B f (Message Routing)1 730 1 720 6492 t 10 R f ( by a set of rewriting rules kept in)8 1364(The routing of messages is determined by a destination address and)10 2706 2 970 6648 t ( lines and lines beginning)4 1062( Blank)1 299( line of the file is a rule.)7 1024( Each)1 259( file, /usr/lib/upas/rewrite.)2 1058(a configuration)1 618 6 720 6768 t (with \302#\302 are ignored.)3 820 1 720 6888 t (Each rewriting rule consists of four strings:)6 1731 1 970 7044 t 10 I f (pattern)720 7200 w 10 R f (An)1208 7200 w 10 I f (ed)1355 7200 w 10 R f ( role of \\\(\\\) and with the)6 960(\(1\)-like regular expression, with simple parentheses \(\) playing the)8 2631 2 1449 7200 t cleartomark showpage saveobj restore %%PageBoundingBox: 61 56 514 764 %%EndPage: 3 3 %%Page: 4 4 %%PageBoundingBox: (atend) /saveobj save def mark 4 pagesetup 10 R f (- 4 -)2 166 1 2797 480 t (+ and ? operators of)4 798 1 1208 840 t 10 I f (egrep)2031 840 w 10 R f (\(1\). The)1 346 1 2258 840 t 10 I f (pattern)2629 840 w 10 R f (is applied to mail addresses.)4 1124 1 2943 840 t 10 I f (machine)720 996 w 10 R f (An)1208 996 w 10 I f (ed)1366 996 w 10 R f ( replacement string that picks the source or destination string from an address)12 3239(\(1\) style)1 341 2 1460 996 t (matched by the)2 610 1 1208 1116 t 10 I f (pattern.)1843 1116 w 10 R f (The substring,)1 572 1 2207 1116 t 10 I f (` \\s',)1 174 1 2804 1116 t 10 R f (is replaced by the login id of the sender.)8 1600 1 3003 1116 t 10 I f (command)720 1272 w 10 R f (An)1208 1272 w 10 I f (ed)1356 1272 w 10 R f ( a command to deliver messages to the destination)8 2025(\(1\) style replacement string to generate)5 1565 2 1450 1272 t (matched by the)2 610 1 1208 1392 t 10 I f (pattern.)1843 1392 w (conversion)720 1548 w 10 R f (The name of a conversion to be performed.)7 1723 1 1208 1548 t ( and continues down the list until a pattern)8 1851(When delivering a message, Upas starts with the first rule)9 2469 2 720 1704 t ( no command, the mail is appended to a local user's)10 2162( the rule contains)3 715( If)1 126(matches the destination address.)3 1317 4 720 1824 t ( the rule does contain a command, Upas starts the command and pipes the message to it, per-)17 3844(mailbox. If)1 476 2 720 1944 t ( example, the following rule can be used to specify that all RFC 822)13 2738( For)1 190(forming any requested conversion.)3 1392 3 720 2064 t (style addresses should be passed to a particular gateway machine \(research\):)10 3047 1 720 2184 t 10 CW f ( - research!rmail \\\\\(&\\\\\)")3 1560(\303[\303!]+[.@%].+$ "" "uux)2 1440 2 1330 2364 t 10 R f (The first expression,)2 826 1 720 2544 t 10 CW f (\303[\303!]+[.@%].+$)1575 2544 w 10 R f ( and the third,)3 570(, is used to match the destination address)7 1660 2 2415 2544 t 10 CW f ("uux -)1 365 1 4675 2544 t (research!rmail \\\\\(&\\\\\)")1 1400 1 720 2664 t 10 R f ( second expression \(blank here\))4 1339( The)1 224( command.)1 463(, is used to form the)5 894 4 2120 2664 t ( gateway machine can have more restrictive)6 1792( The)1 212( forwarding restrictions and is explained below.)6 1947(relates to)1 369 4 720 2784 t ( CSNET mes-)2 569( example, if a message were a)6 1223( For)1 194(rewrite rules to pass a message onto a particular network.)9 2334 4 720 2904 t (sage, the following rule might exist on the gateway machine:)9 2436 1 720 3024 t 10 CW f ( \\1.csnet-relay")1 960(\303\(.+\)[.@]csnet$ "" "/usr/mmdf/lib/mail)2 2400 2 1330 3204 t 10 R f (Here /usr/mmdf/lib/mail is the program provided by csnet to interface to their network.)12 3476 1 720 3384 t ( addition, the rules are in a language)7 1468( In)1 136( or two lines.)3 531(Rules for most networks can be specified in one)8 1935 4 970 3540 t (familiar to most experienced Unix programmers \320 the regular expressions seen in many editors, languages,)14 4320 1 720 3660 t ( configuration)1 564( using such a mini-language, it becomes an easy task to build or modify Upas)14 3094( By)1 167(and utilities.)1 495 4 720 3780 t ( create)1 268( result is that configuration files rarely contain gross mistakes and take very little time to)15 3643(files. The)1 409 3 720 3900 t (and to edit when addressing conventions change.)6 1955 1 720 4020 t 10 B f (Message Format Conversion)2 1220 1 720 4260 t 10 R f ( those of the)3 506(Upas provides for both incoming and outgoing conversions between internal format and)11 3564 2 970 4416 t ( mail, the conversion to be performed is specified by the name with which Upas is)15 3329( incoming)1 407(networks. For)1 584 3 720 4536 t ( it as `cmail')3 538( Starting)1 379( starting Upas as `rmail' causes it to perform no conversion.)10 2513( example,)1 399(started. For)1 491 5 720 4656 t ( outgoing mail, the conversion to be)6 1447( For)1 190( convert from RFC822 format to its own \(Unix\) format.)9 2235(causes it to)2 448 4 720 4776 t ( example, the CSNET rule in the)6 1355( For)1 197( rules.)1 252(performed is specified by the optional last field in the rewrite)10 2516 4 720 4896 t (previous section might more correctly be written:)6 1975 1 720 5016 t 10 CW f (\303\(.+\)[.@]csnet$ "" "/usr/mmdf/lib/mail \\1.csnet-relay" rfc822)4 3660 1 1330 5196 t 10 R f ( to)1 131(The `rfc822' requests that the message be converted to the RFC 822 format before being piped)15 4189 2 720 5376 t ( to perform)2 465( formats not recognizable to Upas, a filter process can be interspersed)11 2875(/usr/mmdf/lib/mail. For)1 980 3 720 5496 t ( currently understands only RFC 822 and Unix message for-)9 2438( Upas)1 258( either on input or output.)5 1037(the conversion)1 587 4 720 5616 t (mats.)720 5736 w 10 B f (Discouraging Anti-social Behavior)2 1467 1 720 5976 t 10 R f ( is especially the case)4 883( Such)1 256( a forwarding site.)3 744(It is often desirable to control the use of a machine as)11 2187 4 970 6132 t ( The)1 212( on either available cycles and telephone usage.)7 1944(when the forwarding of mail has a devastating effect)8 2164 3 720 6252 t (second field in a rewriting rule is used to allow only)10 2101 1 720 6372 t 10 I f (friendly)2848 6372 w 10 R f ( This)1 230(machines to forward mail through Upas.)5 1624 2 3186 6372 t (field, the)1 363 1 720 6492 t 10 I f (machine)1116 6492 w 10 R f ( from)1 226(field, is a replacement string matching the source and destination machine names)11 3327 2 1487 6492 t ( a file, /usr/lib/upas/forwardlist,)3 1332( names are checked against)4 1173( These)1 310(the reply and destination addresses.)4 1505 4 720 6612 t ( returned to)2 472( neither name is found in the list, the message is)10 1988( If)1 123(which contains a list of friendly machines.)6 1737 4 720 6732 t ( example, a UUCP address may have the following rewriting rule:)10 2643( For)1 189(the sender.)1 432 3 720 6852 t 10 CW f ( \261 \261a \\s \\1!rmail \\\\\(\\2\\\\\)")5 1620( "uux)1 360(\303\([\303!]+\)!\([\303!]+\)$ \\1)1 1320 3 1330 7032 t 10 R f ( is in the)3 369(Mail sent to ``placeA!person'' by ``placeB!person'' will be refused if neither placeA nor placeB)13 3951 2 720 7212 t cleartomark showpage saveobj restore %%PageBoundingBox: 61 55 514 764 %%EndPage: 4 4 %%Page: 5 5 %%PageBoundingBox: (atend) /saveobj save def mark 5 pagesetup 10 R f (- 5 -)2 166 1 2797 480 t (forwarding list.)1 616 1 720 840 t (If the file of friendly machines doesn't exist, the mail is forwarded unconditionally.)12 3334 1 970 996 t 10 B f (User Control)1 557 1 720 1236 t 10 R f ( a manner sim-)3 599( allows this in)3 559( Upas)1 255(Users often wish to specify alternate ways to dispose of their mail.)11 2657 4 970 1392 t ( Sendmail.)1 432(ilar to)1 241 2 720 1512 t 8 R f (5)1393 1480 w 10 R f ( the)1 151( If)1 120(The first line of a user's mail file is interpreted as a command to the mail system.)16 3307 3 1462 1512 t (line is of the format)4 788 1 720 1632 t (Forward to list-of-addresses)2 1120 1 1080 1812 t (the mail is forwarded to each recipient in)7 1736 1 720 1992 t 10 I f (list-of-addresses.)2495 1992 w 10 R f ( forward a single)3 718(While this can be used to)5 1077 2 3245 1992 t ( do this, one creates a file in the mail directory)10 1875( To)1 163( lists.)1 214(user's mail, it can be also be used to create mailing)10 2068 4 720 2112 t ( which consists of ``Forward to'' followed by the list of recipi-)11 2598(whose name is that of the mailing list and)8 1722 2 720 2232 t (ents.)720 2352 w (If the first line is of the format is)8 1304 1 970 2508 t (Pipe to shell-command)2 922 1 1080 2688 t 10 I f (shell-command)720 2868 w 10 R f (is executed when mail is delivered, with the message as standard input.)11 2843 1 1355 2868 t 10 B f (Loop Detection)1 652 1 720 3108 t 10 R f ( involves combining the)3 979( It)1 116( provoked by `Forward to' is difficult.)6 1553(Detecting forward loops, like those)4 1422 4 970 3264 t ( search or parti-)3 631(forwarding lists of all involved machines into a single directed graph and then performing a)14 3689 2 720 3384 t ( we allow a detection algorithm to reject some legal although highly)11 2810( if)1 93( However,)1 447(tioning to detect cycles.)3 970 4 720 3504 t (unlikely cases along with real loops, we greatly simplify the problem.)10 2786 1 720 3624 t ( forwarding loop corresponds to infinite recursion of the)8 2318(In the case of a single machine, an infinite)8 1752 2 970 3780 t ( message that results in recursion past a certain depth, it will reject all loops)14 3091( a mailer rejects any)4 827(mailer. If)1 402 3 720 3900 t ( our case a depth is 32 and to date, no)10 1560( In)1 139(and some small number of legal but very long mail redirections.)10 2621 3 720 4020 t (legal forwarding loop has been more than 3 steps long.)9 2191 1 720 4140 t ( we can still use a)5 717( However,)1 442( a multi-machine loop, the recursion technique is not valid.)9 2374(In the case of)3 537 4 970 4296 t ( we scan the From line to see the number of times the local)13 2420( of counting recursion,)3 922( Instead)1 344(similar method.)1 634 4 720 4416 t ( this exceeds a limit \(in our case 8\), the mail is returned to the sender.)15 2776( If)1 116(machine name occurs in the path.)5 1336 3 720 4536 t 10 B f (A Comparison With Sendmail)3 1293 1 720 4776 t 10 R f ( owes much of)3 597( Upas)1 259( same problem previously attacked by Sendmail.)6 1969(Upas is an attempt to solve the)6 1245 4 970 4932 t ( idea of designing Upas as a central switcher communicating with)10 2679( The)1 210( and success to Sendmail.)4 1044(its design)1 387 4 720 5052 t ( Upas and didn't just adopt)5 1110( reasons we wrote)3 732( The)1 210(network specific mailers comes directly from Sendmail.)6 2268 4 720 5172 t (Sendmail are:)1 552 1 720 5292 t 10 S f (\267)720 5448 w 10 R f ( addresses.)1 444(We strongly favor messages whose only formatted portion are the destination and reply)12 3626 2 970 5448 t ( messages that we would)4 1013(Sendmail has an unfortunate predilection for verbose and rigidly structured)9 3057 2 970 5568 t (like to avoid.)2 525 1 970 5688 t 10 S f (\267)720 5844 w 10 R f ( wanted a system that had sim-)6 1286( We)1 197( inscrutability.)1 587(Sendmail configuration files are famous for their)6 2000 4 970 5844 t (pler and therefore more easily verifiable rewriting rules.)7 2238 1 970 5964 t 10 S f (\267)720 6120 w 10 R f ( our needs including queuing \(performed by our network specific mail-)10 2869(Sendmail is over designed for)4 1201 2 970 6120 t ( extra design makes)3 793( This)1 229(ers\), SMTP support, batching of mail transmissions, aliasing, inclusion, etc.)9 3048 3 970 6240 t (Sendmail more complicated and harder to support.)6 2022 1 970 6360 t 10 B f (Summary)720 6600 w 10 R f ( gains its simplicity from a number)6 1430( It)1 116(We have presented a simple yet flexible network mail system.)9 2524 3 970 6756 t ( using existing network specific mailers)5 1620( By)1 173( which are valid in most networked computers.)7 1917(of assumptions)1 610 4 720 6876 t ( itself remains relatively simple and understandable.)6 2119(as expert systems that deal with network details, Upas)8 2201 2 720 6996 t ( most common message formats internally while allowing other formats to be converted)12 3590(By converting the)2 730 2 720 7116 t ( by using a mini-language already)5 1481( Finally,)1 384( processes, Upas remains efficient yet extensible.)6 2112(by filter)1 343 4 720 7236 t cleartomark showpage saveobj restore %%PageBoundingBox: 61 52 514 764 %%EndPage: 5 5 %%Page: 6 6 %%PageBoundingBox: (atend) /saveobj save def mark 6 pagesetup 10 R f (- 6 -)2 166 1 2797 480 t ( modified to respond to changes in the name space and)10 2245(familiar to most Unix programmers, Upas is easily)7 2075 2 720 840 t (topology of the network.)3 988 1 720 960 t 10 B f (References)720 1200 w 10 R f (1.)720 1392 w 10 I f (Chambers Twentieth Century Dictionary,)3 1661 1 970 1392 t 10 R f (W & R Chambers Ltd., Edinburgh, GB \(1976\).)7 1885 1 2656 1392 t ( D. A., ``Uucp Implementation Description,'')5 1846(2. Nowitz,)1 569 2 720 1548 t 10 I f ( Seventh Edition,)2 694(Unix Programmer's Manual,)2 1180 2 3166 1548 t (Volume 2)1 380 1 970 1668 t 10 R f (, Bell Laboratories \(October 1978\).)4 1408 1 1350 1668 t ( P. J., ``The Hideous Name,'')5 1243( R. and Weinberger,)3 842(3. Pike,)1 453 3 720 1824 t 10 I f (USENIX Summer Conference Proceedings)3 1744 1 3296 1824 t 10 R f (\(June 1985\).)1 499 1 970 1944 t ( Messages,'')1 511( D. H., ``Standard for the Format of Arpa Internet Text)10 2252(4. Crocker,)1 596 3 720 2100 t 10 I f (RFC 822)1 371 1 4111 2100 t 10 R f (, Menlo Park,)2 558 1 4482 2100 t (California, Network Information Center, SRI International \(August 1982\).)7 2968 1 970 2220 t ( Eric, ``SENDMAIL - An Internetwork Mail Router,'')7 2317(5. Allman,)1 575 2 720 2376 t 10 I f ( 4.2)1 172(Unix Programmer's Manual,)2 1210 2 3658 2376 t (BSD, Volume 2C)2 680 1 970 2496 t 10 R f (, University of California, Berkeley \(July, 1983\).)6 1953 1 1650 2496 t cleartomark showpage saveobj restore %%PageBoundingBox: 61 526 514 764 %%EndPage: 6 6 %%Trailer done %%Pages: 6 %%DocumentFonts: Courier Times-Bold Times-Italic Times-Roman Times-Roman Symbol %%BoundingBox: 61 46 514 764