Path: utzoo!utgpu!attcan!uunet!lll-winken!lll-lcc!ames!mailrus!tut.cis.ohio-state.edu!rutgers!apple!fair From: fair@Apple.COM (Erik E. Fair) Newsgroups: comp.mail.misc Subject: Re: Getting the most out of pathalias Summary: sendmail.cf (part 4 of 4) Message-ID: <23434@apple.Apple.COM> Date: 6 Jan 89 08:40:04 GMT References: <601@ur-cc.UUCP> Organization: USENET Protocol Police, Western Gateway Division Lines: 456 ############################################################################### ### ### ### APPLE.COM ### ### ### ### sendmail configuration for generic complex host ### ### with both UUCP and Internet connections ### ### ### ### Erik E. Fair ### ### ### ############################################################################### # Our local domain ($D is added to $w [hostname] for official name in base.m4) DDapple.com # All the names we are known by (put all the names & nick names on the next # line, separated by spaces. If you need another line, begin it with "Cw") Cwapple # Our UUCP name DUapple # the list of UUCP hosts that we speak to FU/usr/lib/uucp/L.sys %[a-zA-Z0-9] # our pathalias database Op/usr/lib/mail/paths ############################################################################### ### baseline definitions that sendmail needs to operate ### ############################################################################### # "I"nternal domains CI BITNET UUCP ########################## ### Special macros ### ########################## DV25 # my official hostname (is $w (hostname(2)) fully qualified?) Dj$w # my name (the name on mailer bounces) DnMAILER-DAEMON # UNIX header format DlFrom $g $d # delimiter (operator) characters Do.:%@!^/[] # format of a total name Dq$?x$x <$g>$|$g$. # SMTP login message De$j Sendmail $v/$V ready at $b ################### ### Options ### ################### # we have full sendmail support here Oa # substitution for space (blank) characters OB. # default network name ONARPA # send a copy of mail headers we bounce to "bounces" OPbounces # default delivery mode (deliver in background) Odbackground # (don't) connect to "expensive" mailers #Oc # temporary file mode OF0600 # default GID Og1 # log level OL9 # Send to me too (even if I'm in an alias expansion) Om # default messages to old style Oo # read timeout -- violates protocols (timeout an SMTP idle for 2 hours) Or2h # queue up everything before starting transmission Os # default timeout interval (returns undelivered mail after 3 days) OT3d # time zone names (V6 only) OtPST,PDT # default UID Ou1 # encrypted wizard's password (for the undocumented "wiz" SMTP command) OWnot-likely # rebuild the aliasfile automagically #OD # maximum load average before queueing mail Ox50 # maximum load average before rejecting connections OX60 ################################## FILES ###################################### # location of alias file OA/usr/lib/aliases # location of help file OH/usr/lib/sendmail.hf # queue directory OQ/usr/spool/mqueue # status file OS/usr/lib/sendmail.st ############################### ### Message precedences ### ############################### Pfirst-class=0 Pspecial-delivery=100 Pbulk=-60 Pjunk=-100 ######################### ### Trusted users ### ######################### Troot Tdaemon Tusenet Tuucp ############################# ### Format of headers ### ############################# H?P?Return-Path: <$g> HReceived: $?sfrom $s$. by $j$?r with $r$. ($v/$V-eef) id $i; $b H?D?Date: $a H?F?From: $q H?x?Full-Name: $x H?M?Message-Id: <$t.$i@$j> HSubject: H?D?Resent-Date: $a H?F?Resent-From: $q H?M?Resent-Message-Id: <$t.$i@$j> ############################################################################### # RULESET ZERO PREAMBLE # ############################################################################### S0 # first make canonical R$*<$*>$* $1$2$3 defocus R$+ $:$>3$1 make canonical # handle special cases..... R@ $#local$:$n handle <> form R$*<@[$+]>$* $:$1<@$[[$2]$]>$3 lookup numeric internet addr R$*<@[$+]>$* $#smtp$@[$2]$:$1@[$2]$3 numeric internet spec R$-<@$w> $#local$:$1 # canonicalize using the nameserver if not internal domain R$*<@$*.$~I>$* $:$1<@$[$2.$3$]>$4 R$*<@$->$* $:$1<@$[$2$]>$3 # now delete the local info R$*<$*.>$* $1<$2>$3 remove trailing dot R$*<$*.> $1<$2> remove trailing dot R$*<$*$=w.UUCP>$* $1<$2>$4 strip UUCP R$*<$*$=w.$D>$* $1<$2>$4 strip domain name R$*<$*$=w>$* $1<$2>$4 strip unqualified R$*<$*$w>$* $1<$2>$3 strip domain name R$*<$*.>$* $1<$2>$3 remove trailing dot R$*<$*.> $1<$2> remove trailing dot R<@>:$* $@$>0$1 retry after route strip R$*<@>$* $@$>0$1 strip null trash & retry R$*<@> $@$>0$1 strip null trash & retry # return uucp mail that looks like decvax!ittvax!marsvax! since it # will be rejected at the final site with no username on it R$*!<@$-.UUCP> $#error$:Destination address truncated ############################################################################### ### Machine dependent part of ruleset zero (where we decide what to do) ### ############################################################################### # .forward on the end of the domain name is a magic cookie we put in our UUCP # map data so that we only do domain forwarding for sites that we have set up # by hand, rather than for anything in the UUCP maps. If you are not on the # the Internet, do not worry about this. If you are, and you want to be nice to # that little UUCP site next door, offer them domain forwarding service, and # put "theiruucpname .their.domain.com.forward" into your PRIVATE UUCP map # data. R$*<@$+.$~I> $:$>20$1<@$2.$3> R$*<@$~U.UUCP> $:$>8$1<@$2.UUCP> route UUCP # resolve UUCP links to hosts known to this machine R$*<@$=U.UUCP>$* $#uucp$@$2$:$1 resolve local uucp R$*<@$-.UUCP> $#error$:Unknown UUCP host - not in the UUCP maps and not one of our UUCP neighbors # resolve various and sundry other unofficial networks #R$*<@$+.BITNET>$* $#smtp$@cunyvm.cuny.edu$:$1@$2.BITNET$3 BITNET R$*<@$+.MFENET>$* $#smtp$@nmfecc.arpa$:$1@$2.MFENET$3 MFENET R$*<@$+.CSNET>$* $#error$:Obsolete domain tag - please use a real domain name # when all else fails, look up the whole name in the host table R$*<@$+>$* $#smtp$@$2$:$1@$2$3 user@domain # remaining names must be local R@ $n fix magic token R$+ $#local$:$1 everything else ############################################################################### ### End of ruleset zero ### ############################################################################### ########################### # Name Canonicalization # ########################### S3 # handle "from:<>" special case R<> $@@ resolve into magic token # basic textual canonicalization 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 domain-based addresses R@$+:$+ $@$>6<@$1>:$2 handle # more miscellaneous 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$+!$+ $@$>9$1!$2 uucp name hackery R$+%$+ $:$>5$1%$2 user%host%host R$+<@$+> $@$>6$1<@$2> canonical # Given multiple %'s change rightmost % to @. S5 R$*<$*>$* $1$2$3 defocus R$*%$* $1@$2 First make them all @'s. R$*@$*@$* $1%$2@$3 Undo all but the last. R$*@$* $@$1<@$2> Put back the brackets. ############################################################################### #### Assorted name hackery to make things simple for people #### ############################################################################### # here we look for addresses of the form: user%host.domain@gateway # and strip off the gateway name (for the ones that we know) S6 # conventional percent format R$+%$+.MFENET<@nmfecc.arpa> $>5$1<%$2.MFENET> strip R$+%$+.BITNET<@$+> $>5$1<%$2.BITNET> strip # regulation route-addr format R<@nmfecc.arpa>:$+@$+.MFENET $1<@$2.MFENET> strip R<@$+>:$+@$+.BITNET $2<@$3.BITNET> strip R$+<@$+.$-.UUCP> $1<@$2.$3> fix rn # mung up names for the outside world - called from smtp mailer S7 R$+@$+.MFENET $1%$2.MFENET@nmfecc.arpa user@host.MFENET R$+@$+.BITNET $1%$2.BITNET@cunyvm.cuny.edu user@host.BITNET ############################################################################### #### UUCP address hackery #### ############################################################################### S9 R$+!$=w!$+ $3 collapse loops R$=w!$+ $2 collapse loops R$-.$+!$+ $@$>6$3<@$1.$2> do.main!user R$-!$+ $@$>6$2<@$1.UUCP> host!user ################################ # Sender Field Pre-rewriting # ################################ S1 R$*<$*>$* $1$2$3 defocus ################################### # Recipient Field Pre-rewriting # ################################### S2 R$*<$*>$* $1$2$3 defocus ################################### # Final Output Post-rewriting # # Standard Domain-based version # ################################### S4 R@ $n handle <> error addr # resolve numeric addresses to name if possible R$*@[$+]$* $:$1@$[[$2]$]$3 numeric internet addr # externalize local domain info R$*<$+>$* $1$2$3 defocus R@$+:$+:$+ $@@$1,$2:$3 canonical # UUCP must always be presented in old form R$+@$-.UUCP $2!$1 u@h.UUCP => h!u ############################################################################### ### Local, and Program Mailer specifications ### ############################################################################### # Nota Bene: what mailer flags you use depends upon what version of /bin/mail # you have: # # 4th Berkeley Software Distribution (4.1 BSD or later) # Mlocal, P=/bin/mail, F=SlsDFMmnr, S=10, R=10, A=mail -d $u # # USG UNIX (System III, System V, Xenix 3.0 or later) # # Mlocal, P=/bin/mail, F=SlsDFMPpmn, S=10, R=10, A=mail $u # # Also, if you are using System V, you should get the Berkeley version of # /bin/mail as soon as you can and junk the one you've got: it doesn't # believe in sendmail, so the wrong thing will happen when someone types # mail user@host (i.e. it will attempt local delivery, rather than call # sendmail). It also does header hacking when it shouldn't (like adding # a To: field). Mprog, P=/bin/sh, F=lsDFMxehu, S=10, R=10, A=sh -c $u S10 # S20 # I use ruleset 20 for other stuff ############################################################################### #### IP/TCP/SMTP mailer (going out to internet land) #### ############################################################################### Msmtp, P=[IPC], F=mnDFMeuXLC, S=14, R=14, A=IPC $h, E=\r\n S14 R$*@[$+]$* $@$1@[$2]$3 already ok (inet addr spec) R@$+@$+ $@@$1@$2 already ok (route-addr) # if not local, and not a "fake" domain, ask the nameserver R$+@$+.$~I $:$1@$[$2.$3$] user@host.domain R$*:$* $1.$2 map colons to dots R$+@$+ $:$>7$1@$2 fix up names for the internet R$+@$=X.UUCP $2!$1@$X fix remote UUCP R$+@$=Y.UUCP $2!$1@$Y fix remote UUCP R$+@$=Z.UUCP $2!$1@$Z fix remote UUCP R$+@$-.UUCP $@$2!$1@$j undo local UUCP hack R$- $@$1@$j add our official host name S24 # nothing here - sender and recipient addresses are handled the same ############################################################################### #### UUCP mailer (bangland) #### ############################################################################### # # By default, this mailer will send only one copy of a letter per host, # regardless of the number of recipients there. However, 4.1 BSD UNIX # sites have a version of "rmail" that can't deal with this (and so do # sites that inherited that old mailer). Some older (and brain-dead, but # what can you expect from Microsoft?) versions of Xenix are similarly # afflicted. The "m" flag in the "F=" statement below controls this behavior. # If you must speak to a site broken in this way, you can handle it two ways: # # 1. define(DUMBUUCP)dnl configuration option, create a CLASS that # contains the list of brain-damaged sites, and match that # class in ruleset zero, before matching for the normal UUCP sites. # For a class "D", the rule should look like this: # # R$+<@$=D.UUCP> $#dumbuucp$@$2$:$1 BROKEN UUCP SITES # # 2. eschew all sendmail.cf hacking, and remove the "m" flag from the "F=" # statement below. This will cause multiple copies of letters bound for # multiple recipients on any single host to be sent, rather than just one # copy per host. # # If you want uucico to be invoked immediately after a letter is queued # (i.e. initiate the phone call immediately) remove the "-r" flag in the # uux command line. Bear in mind that this has significant overhead when # your system does a lot of UUCP; you'll have lots of uucico's contending # with each other for modems. # # If your uux can't do the "-a" flag, remove it from the command line. # When present, if something goes wrong at the other end, their uuxqt (if # they also understand it - if they don't, they'll ignore it, so it's # harmless, and potentially helpful) will mail a notification to the # address given, rather than to "daemon" or "uucp" on your system. Muucp, P=/usr/bin/uux, F=msDFMhuU, S=13, R=23, M=100000, A=uux - -a$f -r $h!rmail ($u) Mdumbuucp, P=/usr/bin/uux, F=sDFMhuU, S=13, R=23, M=100000, A=uux - -a$f -r $h!rmail ($u) S13 R$+@$-.UUCP $2!$1 u@host.UUCP => host!u R$=w!$+ $2 zap dups R@$+@$+ $@$U!@$1@$2 ugh, route-addrs # unfortunately, I have to resolve route-addrs before this rule, because # it is so general that it matches them too, with disastrous results. - EEF R$+@$-.$+ $2.$3!$1 uucpize address R$+ $:$U!$1 stick on our host name S23 # nothing here because bangland user-agents are supposed to rewrite these # headers relative to the sender by themselves anyway, and the mailers # (MTAs) are supposed to leave them the hell alone. S8 # magic UUCP shit R$*<@$-.UUCP> $:${$2$}!$1 look up UUCP site in maps R$+!%s!$* $:$1!$2 remove %s database cruft R$+ $:$>9$1 recanon S20 # find domains that we forward for R$*<@$+.$~I> $:${.$2.$3.forward$}!$2.$3!$1 R.$+.forward!$+.$~I!$+ $@$4<@$2.$3> match failed - go away R$*!.$* $1!$2 remove extra dot R$+!$+.forward!$* $1!$3 remove .forward copy R$+ $:$>8$1 remove %s & recanon