BSD 4_3_Tahoe release
[unix-history] / usr / lib / sendmail.cf
index 336ce88..7923392 100644 (file)
@@ -7,7 +7,9 @@
 #  All rights reserved.  The Berkeley software License Agreement
 #  specifies the terms and conditions for redistribution.
 #
 #  All rights reserved.  The Berkeley software License Agreement
 #  specifies the terms and conditions for redistribution.
 #
-#      @(#)monet.mc    5.1 (Berkeley) 6/10/85
+#
+#      @(#)ucbproto.mc 1.16 (Berkeley) 4/8/88
+#
 #
 ############################################################
 ############################################################
 #
 ############################################################
 ############################################################
 
 
 
 
 
 
-############################################################
-###    local info
-############################################################
+##################
+#   local info   #
+##################
 
 
-# internet hostname
-Cwucbmonet monet
+# internet aliases     REPLACE HOSTNAME WITH YOUR MACHINE NAME HERE
+Cwhostname
 
 
 
 
-#################################################
-#
-#      General configuration information
-#
-#################################################
+
+#############################
+###   Setup Information   ###
+#############################
+
 
 ######################
 #   General Macros   #
 ######################
 
 # our arpanet gateway
 
 ######################
 #   General Macros   #
 ######################
 
 # our arpanet gateway
-DABerkeley.EDU
-CABerkeley UCB ucbc70 c70 UCB-C70 u UCB-VAX ucbvax
+DAucbvax.Berkeley.EDU
 
 # local domain names
 
 # local domain names
-DDBERKELEY.EDU
-CDBERKELEY UCB ucbc70 c70 ucb-c70 u UCB-VAX ucbvax
+DDBerkeley.EDU
 
 # major relay host
 
 # major relay host
-DRUCBVAX
-CRucbvax vax k
+DRucbvax.Berkeley.EDU
 
 # my official hostname
 Dj$w
 
 
 # my official hostname
 Dj$w
 
-# known SMTP/ethernet hosts (this domain only) -- only $R need be complete
-
-CSucbarmstrong armstrong
-CSucbarpa arpa
-CSucbbach bach ucbstatvax statvax
-CSucbbass bass
-CSucbbell bell
-CSucbbizet bizet
-CSucbbob bob
-CSucbbrahms brahms mathstat
-CSucbbud bud
-CSucbbuddy buddy
-CSucbcad cad cad-a
-CSucbcalder calder
-CSucbcartan cartan
-CSucbchip chip
-CSucbcogsci cogsci
-CSucbcorona corona
-CSucbcory cory
-CSucbdab dab
-CSucbdali dali
-CSucbdavinci davinci
-CSucbdavis davis
-CSucbdean dean
-CSucbdeforest deforest
-CSucbdegas degas
-CSucbdim dim
-CSucbdorothy dorothy
-CSucbear ear
-CSucbeast east beast
-CSucbedison edison
-CSucbernie ernie
-CSucbesvax esvax
-CSucbeuler euler
-CSucbfranklin franklin
-CSucbfranny franny
-CSucbheine heine
-CSucbholden holden
-CSucbhuffman huffman
-CSucbic ic ucbic-ec ic-ec cad-b cad-ic
-CSucbicw icw ucbicw-ec icw-ec cad-c cad-icw
-CSucbimage 
-CSucbingres ingres
-CSucbjan jan
-CSucbjason jason
-CSucbji ji
-CSucbjoule joule
-CSucbkepler kepler
-CSucbkim kim
-CSucbmarconi marconi
-CSucbmatisse matisse
-CSucbmaxwell maxwell
-CSucbmedea medea
-CSucbmerlin merlin
-CSucbmike mike
-CSucbmiro miro
-CSucbmolson molson
-CSucbmonet monet
-CSucbmote mote
-CSucbnewton newton
-CSucbnyquist nyquist
-CSucbokeeffe okeeffe
-CSucboz oz
-CSucbrenoir renoir
-CSucbrob rob
-CSucbrobert robert
-CSucbseymour seymour
-CSucbshadow shadow
-CSucbshannon shannon
-CSucbsilvia silvia
-CSucbtuborg tuborg
-CSucbugs bugs ucbbugs ugs
-CSucbvangogh vangogh
-CSucbvax
-CSucbweyl weyl
-CSucbzeus zeus
-CSucbzooey zooey
-CSucbzworykin zworykin
-
-# known top-level domains
-CTLOCAL ARPA EDU GOV COM MIL
-CTUUCP BITNET CSNET DEC
+
+
+###############
+#   Classes   #
+###############
+
+# major relay host
+CRucbvax vax
+
+# Internal ("fake") domains that we use in rewriting
+CIUUCP BITNET CSNET
+
 
 
 ############################################################
 
 
 ############################################################
-#
-#      General configuration information
-#
-#      This information is basically just "boiler-plate"; it must be
-#      there, but is essentially constant.
-#
-#      Information in this file should be independent of location --
-#      i.e., although there are some policy decisions made, they are
-#      not specific to Berkeley per se.
-#
 ############################################################
 ############################################################
+#####
+#####  BERKELEY HOSTS REGISTERED WITH THE NIC
+#####
+############################################################
+############################################################
+
+
+CNbach ucbbach
+CNbizet ucbbizet
+CNcad ucbcad
+CNdegas ucbdegas
+CNeast ucbeast
+CNernie ucbernie
+CNesvax ucbesvax
+CNjade ucbjade
+CNji ucbji
+CNmike ucbmike
+CNmonet ucbmonet
+CNpostgres
+CNrenoir ucbrenoir
+CNucbarpa
+CNucbvax
+CNviolet ucbviolet
 
 
 ######################
 #   Version Number   #
 ######################
 
 
 
 ######################
 #   Version Number   #
 ######################
 
-DZ5.17
+DZ1.28
 
 
 
 
-##########################
-###   Special macros   ###
-##########################
+######################
+#   Special macros   #
+######################
 
 # my name
 DnMAILER-DAEMON
 
 # my name
 DnMAILER-DAEMON
@@ -172,12 +114,12 @@ Dq$g$?x ($x)$.
 # SMTP login message
 De$j Sendmail $v/$Z ready at $b
 
 # SMTP login message
 De$j Sendmail $v/$Z ready at $b
 
-# forwarding host -- redefine this if you can't talk to the relay directly
+# forwarding host -- redefine this if you can't talk to the relay directly #
 DF$R
 
 DF$R
 
-###################
-###   Options   ###
-###################
+###############
+#   Options   #
+###############
 
 # location of alias file
 OA/usr/lib/aliases
 
 # location of alias file
 OA/usr/lib/aliases
@@ -222,18 +164,18 @@ Ox8
 # load average at which we refuse connections
 OX12
 
 # load average at which we refuse connections
 OX12
 
-###############################
-###   Message precedences   ###
-###############################
+###########################
+#   Message precedences   #
+###########################
 
 Pfirst-class=0
 Pspecial-delivery=100
 Pbulk=-60
 Pjunk=-100
 
 
 Pfirst-class=0
 Pspecial-delivery=100
 Pbulk=-60
 Pjunk=-100
 
-#########################
-###   Trusted users   ###
-#########################
+#####################
+#   Trusted users   #
+#####################
 
 Troot
 Tdaemon
 
 Troot
 Tdaemon
@@ -241,9 +183,9 @@ Tuucp
 Teric
 Tnetwork
 
 Teric
 Tnetwork
 
-#############################
-###   Format of headers   ###
-#############################
+#########################
+#   Format of headers   #
+#########################
 
 H?P?Return-Path: <$g>
 HReceived: $?sfrom $s $.by $j ($v/$Z)
 
 H?P?Return-Path: <$g>
 HReceived: $?sfrom $s $.by $j ($v/$Z)
@@ -259,8 +201,10 @@ HSubject:
 H?M?Resent-Message-Id: <$t.$i@$j>
 H?M?Message-Id: <$t.$i@$j>
 
 H?M?Resent-Message-Id: <$t.$i@$j>
 H?M?Message-Id: <$t.$i@$j>
 
+
+
 ###########################
 ###########################
-###   Rewriting rules   ###
+###   Rewriting Rules   ###
 ###########################
 
 
 ###########################
 
 
@@ -276,6 +220,8 @@ S1
 S2
 #R$*<$*>$*             $1$2$3                          defocus
 
 S2
 #R$*<$*>$*             $1$2$3                          defocus
 
+
+
 #################################
 #  Final Output Post-rewriting  #
 #################################
 #################################
 #  Final Output Post-rewriting  #
 #################################
@@ -283,19 +229,25 @@ S4
 
 R@                     $@                              handle <> error addr
 
 
 R@                     $@                              handle <> error addr
 
+# resolve numeric addresses to name if possible
+R$*<@[$+]>$*           $:$1<@$[[$2]$]>$3               lookup numeric internet addr
+
 # externalize local domain info
 # externalize local domain info
-R$*<$*LOCAL>$*         $1<$2$D>$3                      change local info
-R$*<$*LOCAL.ARPA>$*    $1<$2$D>$3                      change local info
-R$*<$*.CC>$*           $1$2$3                          strip .CC
 R$*<$+>$*              $1$2$3                          defocus
 R@$+:@$+:$+            @$1,@$2:$3                      <route-addr> canonical
 
 R$*<$+>$*              $1$2$3                          defocus
 R@$+:@$+:$+            @$1,@$2:$3                      <route-addr> canonical
 
-# UUCP must always be presented in old form
+# UUCP must always be presented in old form (with domains, leave the ".uucp")
 R$+@$-.UUCP            $2!$1                           u@h.UUCP => h!u
 R$+@$-.UUCP            $2!$1                           u@h.UUCP => h!u
+R$+@$-.$-.UUCP         $2.$3.uucp!$1                   u@h.UUCP => h!u
+R$+@$-.$-.$-.UUCP      $2.$3.$4.uucp!$1                u@h.UUCP => h!u
+R$+@$-.$-.$-.$-.UUCP   $2.$3.$4.$5.uucp!$1             u@h.UUCP => h!u
+R$+@$-.$-.$-.$-.$-.UUCP        $2.$3.$4.$5.$6.uucp!$1          u@h.UUCP => h!u
 
 # delete duplicate local names -- mostly for arpaproto.mc
 
 # delete duplicate local names -- mostly for arpaproto.mc
-R$+%$=w@$=w            $1@$3                           u%UCB@UCB => u@UCB
-R$+%$=w@$=w.ARPA       $1@$3.ARPA                      u%UCB@UCB => u@UCB
+R$+%$=w@$=w            $1@$w                           u%UCB@UCB => u@UCB
+R$+%$=w@$=w.$D         $1@$w                           u%UCB@UCB => u@UCB
+
+
 
 ###########################
 #  Name Canonicalization  #
 
 ###########################
 #  Name Canonicalization  #
@@ -326,15 +278,42 @@ R$+<$+@$+>                $1$2<@$3>                       move gaze right
 R$+<@$+>               $@$>6$1<@$2>                    already canonical
 
 # convert old-style addresses to a domain-based address
 R$+<@$+>               $@$>6$1<@$2>                    already canonical
 
 # convert old-style addresses to a domain-based address
-R$-:$+                 $@$>6$2<@$1>                    host:user
 R$+^$+                 $1!$2                           convert ^ to !
 R$+^$+                 $1!$2                           convert ^ to !
-R$-.$+!$+              $@$>6$3<@$1.$2>                 host.domain!user
-R$-!$+                 $@$>6$2<@$1.UUCP>               host!user (uucp)
-R$+%$+                 $@$>6$1<@$2>                    user%host
-R$-=$+                 $@$>6$2<@$1.BITNET>             host=user (bitnet)
+R$-!$+                 $@$>6$2<@$1.UUCP>               resolve uucp names
+R$+.$-!$+              $@$>6$3<@$1.$2>                 domain uucps
+R$+!$+                 $@$>6$2<@$1.UUCP>               uucp subdomains
+R$-:$+                 $@$>6$2<@$1>                    host:user
+R$-=$+                 $@$>6$2<@$1.BITNET>             resolve bitnet names
+R$+%$+                 $:$>9$1%$2                      user%host
+R$+<@$+>               $@$>6$1<@$2>                    already canonical
 R$-.$+                 $@$>6$2<@$1>                    host.user
 
 R$-.$+                 $@$>6$2<@$1>                    host.user
 
-# always include local and tcp mailers (tcp for [w.x.y.z]-style addrs)
+
+#################################
+#   special local conversions   #
+#################################
+
+S6
+R$*<@$=w>$*            $:$1<@$w>$3                     get into u@$w form
+R$*<@$=w.$D>$*         $:$1<@$w>$3
+R$*<@$=w.EDU>$*                $:$1<@$w>$3
+R$*<@$=U.UUCP>$*       $:$1<@$w>$3
+
+################################
+#   Change rightmost % to @.   #
+################################
+
+S9
+R$*%$*                 $1@$2                           First make them all @'s.
+R$*@$*@$*              $1%$2@$3                        Undo all but the last.
+R$*@$*                 $@$1<@$2>                       Put back the brackets.
+
+
+
+###################
+###   Mailers   ###
+###################
+
 
 ############################################################
 ############################################################
 
 ############################################################
 ############################################################
@@ -360,104 +339,158 @@ R@                      $n                      errors to mailer-daemon
 #####  the local domain -- hence, they must be canonical according to
 #####  RFC822 etc.
 #####
 #####  the local domain -- hence, they must be canonical according to
 #####  RFC822 etc.
 #####
+#####  This mailer is to be used with the Berkeley Name Server.
+#####
 ############################################################
 ############################################################
 
 ############################################################
 ############################################################
 
-Mtcp,  P=[IPC], F=mDFMueXL, S=14, R=14, A=IPC $h, E=\r\n
+Mtcp,  P=[IPC], F=mDFMueXLC, S=14, R=24, A=IPC $h, E=\r\n
 
 S14
 
 # pass <route-addr>'s through
 R<@$+>$*               $@<@$[$1$]>$2                   resolve <route-addr>
 
 
 S14
 
 # pass <route-addr>'s through
 R<@$+>$*               $@<@$[$1$]>$2                   resolve <route-addr>
 
-# map colons to dots everywhere.....
+# map colons to dots everywhere
 R$*:$*                 $1.$2                           map colons to dots
 
 R$*:$*                 $1.$2                           map colons to dots
 
-# handle the simple case....
-R$+<@$-.ARPA>          $@$1<@$[$2.ARPA$]>              user@host.ARPA
-
-# output local hosts in user@host.Berkeley.EDU syntax
-R$+<@LOCAL>            $@$1<@$w.$A>                    local names
-R$+<@$+.LOCAL>         $@$1<@$2.$A>                    local hosts
-R$+<@$*$=S>            $@$1<@$2$3.$A>
-R$+<@$*$=Z>            $@$1<@$2$3.$A>
-R$+<@$+.BITNET>                $@$1%$2.BITNET<@$w.$A>          user@host.BITNET
-R$+<@$+.CSNET>         $@$1%$2.CSNET<@CSNET-RELAY.ARPA>        user@host.CSNET
-R$+<@$+.DEC>           $@$1%$2.DEC<@decwrl.ARPA>       user@host.DEC
-R$+<@$+.UUCP>          $@$2!$1<@$w.$A>                 user@host.UUCP
-
-# handle other external cases
-R$+<@$->               $@$1<@$[$2$]>                   no .ARPA on simple names
-#R$+<@$+.$-.ARPA>      $@$1%$2<@$[$3.ARPA$]>           approximate something
+# output local host in user@host.BERKELEY.EDU syntax
+R$-                    $1<@$w>                         user w/o host
+R$+<@$=w>              $:$1<@$w>                       this host
+R$+<@$->               $:$1<@$[$2$]>                   canonicalize into dom
+R$+<@$->               $:$1<@$2.$D>                    if nameserver fails
+R$+<@$=N.$D>           $@$1<@$2.$D>                    nic-reg hosts are ok
+R$+<@$*.$D>            $@$1%$2.$D<@$A>                 else -> u%h@gateway
+
+# if not local, and not a "fake" domain, ask the nameserver
+R$+<@$+.$~I>           $@$1<@$[$2.$3$]>                user@host.domain
 R$+<@[$+]>             $@$1<@[$2]>                     already ok
 R$+<@[$+]>             $@$1<@[$2]>                     already ok
-R$+<@$+>               $@$1<@$[$2$]>                   set for named
 
 
-# convert remaining addresses to old format and externalize appropriately
-R$+                    $:$>5$1                         => old format
-R$-:$+                 $@$2<@$1.$A>                    convert berk hosts
-#R$+<@$+>              $@$1<@$2@$A>                    pessmize
-R$+                    $:$1<@$w.$A>                    tack on our hostname
-R$+%$=R<@$=A>          $1<@$[$3$]>                     strip unneeded relay
+# output internal ("fake") domains as "user%host@relay"
 
 
+R$+<@$+.CSNET>         $@$1%$2.CSNET<@relay.cs.net>    user@host.CSNET
+R$+<@$+.BITNET>                $@$1%$2.BITNET<@jade.berkeley.edu> user@host.BITNET
+R$+<@$+.UUCP>          $@$2!$1<@$w>                    user@host.UUCP
 
 
 
 
-#######################
-#   Rewriting rules   #
-#######################
+S24
 
 
-##### special local conversions
-S6
-R$*<@$*$=D>$*          $1<@$2LOCAL>$4                  convert local domain
-R$*<@$*$=D.ARPA>$*     $1<@$2LOCAL>$4
-R$*<@$*$=D.EDU>$*      $1<@$2LOCAL>$4
-R$+%$+<@LOCAL>         $>9$1%$2                        Hack for % syntax.
-R$*<@$+.$=T.$=T>$*     $1<@$2.$3>$5                    make UUCP top level
-R$*<@$*$=C.$=T>$*      $1<@$2$3>$5                     adjust CC hosts (ucbvax)
-R$*<@$*$=C>$*          $1<@$2$3.CC>$4                  tack on .CC temporarily
-R$*<@$*$=S.UUCP>$*     $1<@$2$3.LOCAL>$4               trap u@etherhost.UUCP
-R$*<@ucsfcgl.UUCP>$*   $1<@ucsf-cgl.ARPA>$2            ucsfcgl now on Internet
+# put in <> kludge
+R$*<$*>$*              $1$2$3                          defocus
+R$*                    $:$>3$1                         now canonical form
+
+# pass <route-addr>'s through
+R<@$+>$*               $@<@$[$1$]>$2                   resolve <route-addr>
+
+# map colons to dots everywhere.....
+R$*:$*                 $1.$2                           map colons to dots
+
+# output local host in user@host.domain syntax
+R$-                    $1<@$w>                         user w/o host
+R$+<@$=w>              $:$1<@$w>                       this host
+R$+<@$->               $:$1<@$[$2$]>                   canonicalize into dom
+R$+<@$->               $:$1<@$2.$D>                    if nameserver fails
+R$+<@$=N.$D>           $@$1<@$2.$D>                    nic-reg hosts are ok
+R$+<@$*.$D>            $@$1%$2.$D<@$A>                 else -> u%h@gateway
+
+# if not local, and not a "fake" domain, ask the nameserver
+R$+<@$+.$~I>           $@$1<@$[$2.$3$]>                user@host.domain
+R$+<@[$+]>             $@$1<@[$2]>                     already ok
+
+# Hide fake domains behind gateways
+
+R$+<@$+.CSNET>         $@$1%$2.CSNET<@relay.cs.net>    user@host.CSNET
+R$+<@$+.BITNET>                $@$1<@$2.BITNET>                user@host.BITNET
+R$+<@$+.UUCP>          $@$2!$1                         user@host.UUCP
 
 
-################################
-#   Change rightmost % to @.   
-S9
-R$*%$*                 $1@$2                           First make them all @'s
-R$*@$*@$*              $1%$2@$3                        Undo all but the last.
-R$*@$*                 $@$1<@$2>                       Put back the brackets.
-#
-###############################
 
 
 ############################################################
 ############################################################
 #####
 
 
 ############################################################
 ############################################################
 #####
-#####          Ethernet Mailer specification
+#####          Local Domain TCP Mailer specification
+#####
+#####  Messages processed by this specification are assumed to remain
+#####  the local domain -- hence, they must be canonical according to
+#####  RFC822 etc.
 #####
 #####
-#####  Messages processed by this configuration are assumed to remain
-#####  in the same domain.  Hence, they may not necessarily correspond
-#####  to RFC822 in all details.
+#####  This mailer is to be used with the Berkeley Name Server.
 #####
 ############################################################
 ############################################################
 
 #####
 ############################################################
 ############################################################
 
-Mether,        P=[IPC], F=mDFMueCX, S=11, R=21, A=IPC $h
+Mtcpld,        P=[IPC], F=mDFMueXLC, S=17, R=27, A=IPC $h, E=\r\n
 
 
-S11
-R$*<@$+>$*             $@$1<@$2>$3                     already ok
-R$+                    $@$1<@$w>                       tack on our hostname
+S17
 
 
-S21
+# cleanup forwarding a bit
+R$*<$*>$*              $1$2$3                          defocus
+R$*                    $:$>3$1                         canonicalize
+R$*%$*<@$w>            $:$>9$1%$2                      user%localhost@localdomain
 
 
+# pass <route-addr>'s through
+R<@$+>$*               $@<@$[$1$]>$2                   resolve <route-addr>
 
 
+# map colons to dots everywhere
+R$*:$*                 $1.$2                           map colons to dots
 
 
-############################################################
-############################################################
-#####
-#####          BASIC ETHERNET RULES
-#####
-############################################################
-############################################################
+# output local host as user@host.domain
+R$-                    $@$1<@$w>                       user w/o host
+R$+<@$w>               $@$1<@$w>                       this host
+R$+<@$=w>              $@$1<@$w>                       or an alias
+R$+<@$->               $:$1<@$[$2$]>                   ask nameserver
+R$+<@$w>               $@$1<@$w>                       this host
+R$+<@$->               $@$1<@$2.$D>                    if nameserver fails
+
+# if not local, and not a "fake" domain, ask the nameserver
+R$+<@$+.$~I>           $@$1<@$[$2.$3$]>                user@host.domain
+R$+<@[$+]>             $@$1<@[$2]>                     already ok
+
+# output fake domains as user%fake@relay
+
+R$+<@$+.CSNET>         $@$1%$2.CSNET<@relay.cs.net>    user@host.CSNET
+R$+<@$+.BITNET>                $@$1%$2.BITNET<@jade.berkeley.edu>       user@host.bitnet
+R$+<@$+.UUCP>          $@$2!$1<@$w>                    user@host.UUCP
+
+
+S27
+
+# cleanup
+R$*<$*>$*              $1$2$3                          defocus
+R$*                    $:$>3$1                         now canonical form
+R$*%$*<@$w>            $:$>9$1%$2                      user%localhost@localdomain
+
+# pass <route-addr>'s through
+R<@$+>$*               $@<@$[$1$]>$2                   resolve <route-addr>
+
+# map colons to dots everywhere
+R$*:$*                 $1.$2                           map colons to dots
 
 
+# output local host as user@host.domain
+R$-                    $@$1<@$w>                       user w/o host
+R$+<@$w>               $@$1<@$w>                       this host
+R$+<@$=w>              $@$1<@$w>                       or an alias
+R$+<@$->               $:$1<@$[$2$]>                   ask nameserver
+R$+<@$w>               $@$1<@$w>                       this host
+R$+<@$->               $@$1<@$2.$D>                    if nameserver fails
 
 
+# if not local, and not a "fake" domain, ask the nameserver
+R$+<@$+.$~I>           $@$1<@$[$2.$3$]>                user@host.domain
+R$+<@[$+]>             $@$1<@[$2]>                     already ok
+
+# output fake domains as user%fake@relay
+
+R$+<@$+.CSNET>         $@$1%$2.CSNET<@relay.cs.net>    user@host.CSNET
+R$+<@$+.BITNET>                $@$1<@$2.BITNET>                user@host.BITNET
+R$+<@$+.UUCP>          $@$2!$1                         user@host.UUCP
+
+
+
+
+
+#####################
+###   Rule Zero   ###
+#####################
 
 
 ############################################################
 
 
 ############################################################
@@ -477,40 +510,51 @@ S0
 R$*<$*>$*              $1$2$3                          defocus
 R$+                    $:$>3$1                         make canonical
 
 R$*<$*>$*              $1$2$3                          defocus
 R$+                    $:$>3$1                         make canonical
 
-# handle special cases.....
-R@                     $#local$:$n                     handle <> form
+# handle special cases
+R$*<@[$+]>$*           $:$1<@$[[$2]$]>$3               lookup numeric internet addr
 R$*<@[$+]>$*           $#tcp$@[$2]$:$1@[$2]$3          numeric internet spec
 R$*<@[$+]>$*           $#tcp$@[$2]$:$1@[$2]$3          numeric internet spec
+R$+                    $:$>6$1
+R$-<@$w>               $#local$:$1
+R@                     $#error$:Invalid address        handle <> form
 
 
-# arrange for local names to be fully qualified
-R$*<$*$=S>$*           $1<$2$3.LOCAL>$4                user@etherhost
-R$*<$*$=Z>$*           $1<$2$3.LOCAL>$4                user@berkhost
-R$*<$+.ARPA.LOCAL>$*   $1<$2.ARPA>$3                   because ARPA is a host
+# canonicalize using the nameserver if not internal domain
+R$*<@$*.$~I>$*         $:$1<@$[$2.$3$]>$4
+R$*<@$->$*             $:$1<@$[$2$]>$3
+R$*<@$->$*             $:$1<@$2.$D>$3                  if nameserver fails
 
 # now delete the local info
 
 # now delete the local info
-R$*<$*$=w.$=T>$*       $1<$2>$5                        thishost.LOCAL
-R$*<$*$=w>$*           $1<$2>$4                        thishost
-R$*<$*.>$*             $1<$2>$3                        drop trailing dot
-R<@>:$*                        $@$>0$1                         retry after route strip
-R$*<@>                 $@$>0$1                         strip null trash & retry
+R<@$w>:$*              $@$>0$1                         @here:... -> ...
+R$*<@$w>               $@$>0$1                         ...@here -> ...
 
 # forward around hosts with communication problems
 
 # forward around hosts with communication problems
-R$*<@$=F.LOCAL>$*      $#ether$@$F$:$1<@$2.LOCAL>$3    reroute message
+R$*<@$=F>$*            $#tcp$@$F$:$1<@$2>$3            reroute message
 
 ##################################
 #  End of ruleset zero preamble  #
 ##################################
 
 
 
 ##################################
 #  End of ruleset zero preamble  #
 ##################################
 
 
-################################################
-###  Machine dependent part of ruleset zero  ###
-################################################
+###############################################
+###   Machine dependent part of Rule Zero   ###
+###############################################
 
 
-# resolve names that can go via the ethernet
-R$*<@$*$=S.LOCAL>$*    $#ether$@$3$:$1<@$2$3>$4        user@etherhost
 
 
-# other non-local names will be kicked upstairs
-R$*<@$+>$*             $#ether$@$F$:$1<@$2>$3          user@some.where
+
+
+
+# resolve fake top level domains by forwarding to other hosts
+R$*<@$+.BITNET>$*      $#tcpld$@jade.berkeley.edu$:$1<@$2.BITNET>$3    user@host.BITNET
+R$*<@$+.CSNET>$*       $#tcp$@relay.cs.net$:$1<@$2.CSNET>$3    user@host.CSNET
+
+
+# forward UUCP traffic to our UUCP gateway
+R$*<@$*.UUCP>$*                $#tcpld$@$F$:$1<@$2.UUCP>       uucp mail
+
+# hide behind a gateway when talking to people who don't speak domains
+R$*<@$*.arpa>$*                $#tcp$@$2.arpa$:$1<@$2.arpa>$3  user@host.arpa
+
+# but don't hide if they do.
+R$*<@$*>$*             $#tcpld$@$2$:$1<@$2>$3          user@host.domain
 
 # remaining names must be local
 R$+                    $#local$:$1                     everything else
 
 # remaining names must be local
 R$+                    $#local$:$1                     everything else
-