############################################################
# Copyright (c) 1983 Eric P. Allman
# Copyright (c) 1983 Regents of the University of California.
# All rights reserved. The Berkeley software License Agreement
# specifies the terms and conditions for redistribution.
# @(#)ucbvax.mc 1.39 (Berkeley) 1/3/89
# built by phil on Wed Jan 25 11:47:20 PST 1989
# in /usr/src/local/nettables/sendmail.cf/cf on monet.Berkeley.EDU
############################################################
############################################################
##### SENDMAIL CONFIGURATION FILE
##### This one is the big daddy. There is no "upstairs"
##### to bounce a message to -- except perhaps the arpanet.
############################################################
############################################################
Cwucbvax vax k UCB-VAX Berkeley UCB-C70 UCB
# UUCP connections on ucbarpa
# UUCP connections on ucbcad
# UUCP connections on cogsci
# known uucp connections with a smart uucp
# we have full sendmail support here
#############################
### Setup Information ###
#############################
# YOUR DOMAIN NAME GOES HERE!
# Internal ("fake") domains that we use in rewriting
############################################################
############################################################
##### BERKELEY HOSTS REGISTERED WITH THE NIC
############################################################
############################################################
# delimiter (operator) characters
De$j Sendmail $v/$Z ready at $b
# wait up to ten minutes for alias file rebuild
# substitution for space (blank) characters
# (don't) connect to "expensive" mailers
# default delivery mode (deliver in background)
# default messages to old style
# read timeout -- violates protocols
# queue up everything before starting transmission
# default timeout interval
# time zone names (V6 only)
# load average at which we just queue messages
# load average at which we refuse connections
###########################
###########################
#########################
#########################
HReceived: $?sfrom $s $.by $j ($v/$Z)
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>
###########################
###########################
################################
# Sender Field Pre-rewriting #
################################
#R$*<$*>$* $1$2$3 defocus
###################################
# Recipient Field Pre-rewriting #
###################################
#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@$+:@$+:$+ @$1,@$2:$3 <route-addr> canonical
# UUCP must always be presented in old form
R$+@$-.UUCP $2!$1 u@h.UUCP => h!u
# delete duplicate local names
R$+%$=w@$=w $1@$w u%host@host => u@host
R$+%$=w@$=w.$D $1@$w u%host@host => u@host
# addition to Post-rewrite Rule
R$+%$=w@$=w.EDU $1@$w u%UCB@UCB.edu => u@UCB.berk.edu
R$+%$=w@$=w.$=w.EDU $1@$w u%UCB@UCB.berk.edu => u@UCB
###########################
# Name Canonicalization #
###########################
# handle "from:<>" special case
R$*<>$* $@@ turn into magic token
# basic textual canonicalization -- note RFC733 heuristic here
R$*<$*<$*<$+>$*>$*>$* $4 3-level <> nesting
R$*<$*<$+>$*>$* $3 2-level <> nesting
R$*<$+>$* $2 basic RFC821/822 parsing
# make sure <@a,@b,@c:user@d> syntax is easy to parse -- undone later
R@$+,$+ @$1:$2 change all "," to ":"
# localize and dispose of route-based addresses
R@$+:$+ $@$>6<@$1>:$2 handle <route-addr>
# more miscellaneous cleanup
R$+ $:$>8$1 host dependent cleanup
R$+:$*;@$+ $@$1:$2;@$3 list syntax
R$+:$*; $@$1:$2; list syntax
R$+@$+ $:$1<@$2> focus on domain
R$+<$+@$+> $1$2<@$3> move gaze right
R$+<@$+> $@$>6$1<@$2> already canonical
# convert old-style addresses to a domain-based address
R$+^$+ $1!$2 convert ^ to !
R$-!$+ $@$>6$2<@$1.UUCP> resolve uucp names
R$+.$-!$+ $@$>6$3<@$1.$2> domain uucps
R$+!$+ $@$>6$2<@$1.UUCP> uucp subdomains
R$+%$+ $:$>9$1%$2 user%host
R$+<@$+> $@$>6$1<@$2> already canonical
R$-.$+ $@$>6$2<@$1> host.user
#################################
# special local conversions #
#################################
R$*<@$=w>$* $:$1<@$w>$3 get into u@$w form
R$*<@$=w.$D>$* $:$1<@$w>$3
R$*<@$=U.UUCP>$* $:$1<@$w>$3
################################
# Change rightmost % to @. #
################################
R$*%$* $1@$2 First make them all @'s.
R$*@$*@$* $1%$2@$3 Undo all but the last.
R$*@$* $@$1<@$2> Put back the brackets.
############################################################
############################################################
##### Provide Backward Compatibility
############################################################
############################################################
#####################################################
# General code to convert back to old style names #
#####################################################
R$+<@$-.UUCP> $2!$1 u@host.UUCP => host!u
############################################################
############################################################
##### Local and Program Mailer specification
############################################################
############################################################
Mlocal, P=/bin/mail, F=rlsDFMmn, S=10, R=20, A=mail -d $u
Mprog, P=/bin/sh, F=lsDFMe, S=10, R=20, A=sh -c $u
R@ $n errors to mailer-daemon
############################################################
############################################################
##### UUCP Smart Mailer specification
##### (handles multiple recipients)
############################################################
############################################################
Msuucp, P=/usr/bin/uux, F=mDFMhuU, S=13, R=23, M=100000,
############################################################
############################################################
##### UUCP Mailer specification
############################################################
############################################################
Muucp, P=/usr/bin/uux, F=DFMhuU, S=13, R=23, M=100000,
A=uux - -r -z -a$f -gC $h!rmail ($u)
R$+ $:$>5$1 convert to old style
R$*<@$=w>$* $1<@$w>$2 resolve abbreviations
R$*<@$->$* $1<@$2.$D>$3 resolve abbreviations
R$+<@$+> $2!$1 uucpize (no @'s in addr)
R$w!$+ $1 strip local name
R$+ $:$U!$1 stick on our host name
R$=U!$-%$- $:$1!$2@$3.$D ucbvax!user@host.domain
R$+ $:$>5$1 convert to old style
R$*<@$=w>$* $1<@$w>$2 resolve abbreviations
R$*<@$->$* $1<@$2.$D>$3 resolve abbreviations
R$+<@$w> $U!$1 a!b@here -> here!a!b
R$=U!$+ $2 here!a!b -> a!b
# sanity ... should not happen.
R$=U.$D!$+ $2 strip local name.domain
############################################################
############################################################
##### SMTP UUCP Mailer specification
##### This mailer sends UUCP traffic over an SMTP connection.
##### Obviously, we only want to do this with UUCP hosts with
##### whom we have SMTP connectivity. The idea here is to
##### avoid having to double queue (once for sendmail, once
##### for UUCP) when there's no need. Since we need to
##### preserve uucp-ness (e.g., bangs), we use the UUCP mailer
##### rewriting rulesets.
############################################################
############################################################
Msmtpuucp, P=[IPC], F=mDFMueXLC, S=13, R=23, A=IPC $h, E=\r\n
############################################################
############################################################
##### Internet SMTP Mailer specification
##### Messages processed by this specification are assumed to leave
##### the local domain -- hence, they must be canonical according to
##### RFC822 etc. This means that machines not registered with
##### the NIC must be hidden behind our Internet relay.
############################################################
############################################################
Mtcp, P=[IPC], F=mDFMueXLC, S=14, R=24, A=IPC $h, E=\r\n
# 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
# output internal ("fake") domains as "user%host@relay"
R$+<@$+.UUCP> $@$2!$1<@$w> user@host.UUCP
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 relays
R$+<@$+.UUCP> $@$2!$1 user@host.UUCP
############################################################
############################################################
##### Local Domain SMTP Mailer specification
##### Messages processed by this specification are assumed to remain
##### the local domain. Hence, they can refer to hosts that are
##### not registered in the NIC host table.
############################################################
############################################################
Mtcpld, P=[IPC], F=mDFMueXLC, S=17, R=27, A=IPC $h, E=\r\n
# cleanup forwarding a bit
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$+<@$+.UUCP> $@$2!$1<@$w> user@host.UUCP
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$+<@$+.UUCP> $@$2!$1 user@host.UUCP
############################################################
############################################################
##### RULESET ZERO PREAMBLE
##### The beginning of ruleset zero is constant through all
############################################################
############################################################
R$+ $:$>3$1 make canonical
R$*<@[$+]>$* $:$1<@$[[$2]$]>$3 numeric internet addr
R$*<@[$+]>$* $#tcp$@[$2]$:$1@[$2]$3 numeric internet spec
R@ $#error$:Invalid address handle <> form
# 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>:$* $@$>0$1 @here:... -> ...
R$*<@$w> $@$>0$1 ...@here -> ...
##################################
# End of ruleset zero preamble #
##################################
################################################
### Machine dependent part of ruleset zero ###
################################################
# resolve SMTP UUCP connections
R<@bellcore.uucp>:$+ $#smtpuucp$@bellcore.com$:$2
R$*<@bellcore.uucp> $#smtpuucp$@bellcore.com$:$1
R<@decvax.uucp>:$+ $#smtpuucp$@decvax.dec.com$:$2
R$*<@decvax.uucp> $#smtpuucp$@decvax.dec.com$:$1
R<@decwrl.uucp>:$+ $#smtpuucp$@decwrl.dec.com$:$2
R$*<@decwrl.uucp> $#smtpuucp$@decwrl.dec.com$:$1
R<@hplabs.uucp>:$+ $#smtpuucp$@hplabs.hp.com$:$2
R$*<@hplabs.uucp> $#smtpuucp$@hplabs.hp.com$:$1
R<@lbl-csam.uucp>:$+ $#smtpuucp$@lbl-csam.arpa$:$2
R$*<@lbl-csam.uucp> $#smtpuucp$@lbl-csam.arpa$:$1
R<@pur-ee.uucp>:$+ $#smtpuucp$@ecn.purdue.edu$:$2
R$*<@pur-ee.uucp> $#smtpuucp$@ecn.purdue.edu$:$1
R<@purdue.uucp>:$+ $#smtpuucp$@purdue.edu$:$2
R$*<@purdue.uucp> $#smtpuucp$@purdue.edu$:$1
R<@sdcarl.uucp>:$+ $#smtpuucp$@sdcarl.ucsd.edu$:$2
R$*<@sdcarl.uucp> $#smtpuucp$@sdcarl.ucsd.edu$:$1
R<@sun.uucp>:$+ $#smtpuucp$@sun.com$:$2
R$*<@sun.uucp> $#smtpuucp$@sun.com$:$1
R<@ucbcad.uucp>:$+ $#smtpuucp$@cad.berkeley.edu$:$2
R$*<@ucbcad.uucp> $#smtpuucp$@cad.berkeley.edu$:$1
R<@ucdavis.uucp>:$+ $#smtpuucp$@ucdavis.ucdavis.edu$:$2
R$*<@ucdavis.uucp> $#smtpuucp$@ucdavis.ucdavis.edu$:$1
R<@ucla-se.uucp>:$+ $#smtpuucp$@seas.ucla.edu$:$2
R$*<@ucla-se.uucp> $#smtpuucp$@seas.ucla.edu$:$1
R<@ucscc.uucp>:$+ $#smtpuucp$@c.ucsc.edu$:$2
R$*<@ucscc.uucp> $#smtpuucp$@c.ucsc.edu$:$1
R<@ucsfcgl.uucp>:$+ $#smtpuucp$@cgl.ucsf.edu$:$2
R$*<@ucsfcgl.uucp> $#smtpuucp$@cgl.ucsf.edu$:$1
R<@uwvax.uucp>:$+ $#smtpuucp$@spool.cs.wisc.edu$:$2
R$*<@uwvax.uucp> $#smtpuucp$@spool.cs.wisc.edu$:$1
# resolve local UUCP links
R<@$=V.UUCP>:$+ $#uucp$@$1$:$1:$2 @host.UUCP: ...
R$+<@$=V.UUCP> $#uucp$@$2$:$1 user@host.UUCP
# resolve explicit arpanet names (to avoid with machine name "arpa" below)
R$*<@$*$-.ARPA>$* $#tcp$@$3.ARPA$:$1<@$2$3.ARPA>$4 user@domain.ARPA
# resolve fake top level domains by forwarding to other hosts
# resolve non-local UUCP links
R$*<@$=W.UUCP>$* $#tcpld$@$W$:$1<@$2.UUCP>$3 user@host.UUCP
R$*<@$=X.UUCP>$* $#tcpld$@$X$:$1<@$2.UUCP>$3 user@host.UUCP
R$*<@$=Y.UUCP>$* $#tcpld$@$Y$:$1<@$2.UUCP>$3 user@host.UUCP
# this uucp stuff is wrong for domain uucp addresses
# - we should pass the whole "host.domain" to uucp so it can
# find the best route. But that depends on a uucp router
# which doesn't exist here yet, so for now, we'll settle for
# trying to route to the domain (pretending its a host).
# Suitable L.sys entries can make this work. If it doesn't
# then returned mail will just say "dom unknown", which is true ..
# resolve smart UUCP links
R<@$=M.$-.UUCP>:$+ $#suucp$@$2$:@$1.$2.UUCP:$3 @host.domain.UUCP: ...
R<@$=M.UUCP>:$+ $#suucp$@$1$:$2 @host.UUCP: ...
R$+<@$=M.$-.UUCP> $#suucp$@$3$:$1@$2.$3.UUCP user@host.domain.UUCP
R$+<@$=M.UUCP> $#suucp$@$2$:$1 user@host.UUCP
R$*<@$*.$D>$* $#tcpld$@$2.$D$:$1<@$2.$D>$3 user@host.our.domain
R$*<@$->$* $#tcpld$@$2.$D$:$1<@$2.$D>$3 user@host
R$*<@$-.UUCP>$* $#tcpld$@$2.$D$:$1<@$2.$D>$3 user@host.UUCP
# other non-local names will be kicked upstairs
R$*<@$+>$* $#tcp$@$2$:$1<@$2>$3 user@some.where
# remaining names must be local
R$+ $#local$:$1 everything else
########################################
### Host dependent address cleanup ###
########################################
R$*$=U!$+@$+ $3@$4 drop uucp forward