# 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
-DABerkeley.EDU
-CABerkeley UCB ucbc70 c70 UCB-C70 u UCB-VAX ucbvax
+DAucbvax.Berkeley.EDU
# local domain names
-DDBERKELEY.EDU
-CDBERKELEY UCB ucbc70 c70 ucb-c70 u UCB-VAX ucbvax
+DDBerkeley.EDU
# major relay host
-DRUCBVAX
-CRucbvax vax k
+DRucbvax.Berkeley.EDU
# 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 #
######################
-DZ5.17
+DZ1.28
-##########################
-### Special macros ###
-##########################
+######################
+# Special macros #
+######################
# my name
DnMAILER-DAEMON
# 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
-###################
-### Options ###
-###################
+###############
+# Options #
+###############
# location of alias file
OA/usr/lib/aliases
# load average at which we refuse connections
OX12
-###############################
-### Message precedences ###
-###############################
+###########################
+# Message precedences #
+###########################
Pfirst-class=0
Pspecial-delivery=100
Pbulk=-60
Pjunk=-100
-#########################
-### Trusted users ###
-#########################
+#####################
+# Trusted users #
+#####################
Troot
Tdaemon
Teric
Tnetwork
-#############################
-### Format of headers ###
-#############################
+#########################
+# Format of headers #
+#########################
H?P?Return-Path: <$g>
HReceived: $?sfrom $s $.by $j ($v/$Z)
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>
+
+
###########################
-### Rewriting rules ###
+### Rewriting Rules ###
###########################
S2
#R$*<$*>$* $1$2$3 defocus
+
+
#################################
# Final Output Post-rewriting #
#################################
R@ $@ handle <> error addr
+# resolve numeric addresses to name if possible
+R$*<@[$+]>$* $:$1<@$[[$2]$]>$3 lookup numeric internet addr
+
# 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
-# 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.$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
-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 #
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$-.$+!$+ $@$>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
-# 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 ###
+###################
+
############################################################
############################################################
##### 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>
-# map colons to dots everywhere.....
+# map colons to dots everywhere
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$]> 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 ###
+#####################
############################################################
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$+ $:$>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
-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
-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 #
##################################
-################################################
-### 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
-