Relay-Version: version B 2.10.3 alpha 4/15/85; site seismo.UUCP Posting-Version: version B 2.10.2 9/3/84; site genrad.UUCP Path: seismo!cbosgd!ulysses!allegra!mit-eddie!genrad!sources-request From: sources-request@genrad.UUCP Newsgroups: mod.sources Subject: UK-1.1 Sendmail Configuration Package. Part 3 of 3 Message-ID: <838@genrad.UUCP> Date: 15 May 85 12:17:26 GMT Sender: john@genrad.UUCP Lines: 753 Approved: john@genrad.UUCP I've had a number of requests for this, since I announced it in net.mail So, I'm sending it in 3 shar archives to mod.sources. One warning: Some of the shell scripts I use are BSD specific. (E.g. I use "cat -n" and "fmt" in places.) I assumed that most people who have sendmail are running 4.xBSD. Jim Crammond jim@hwcs.uucp uck!hwcs!jim jim@cs.hw.ac.uk (soon) ------------- cut here -------------- # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. -----cut here-----cut here-----cut here-----cut here----- #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # chn # This archive created: Fri May 10 14:42:50 1985 echo shar: creating directory chn mkdir chn chdir chn echo shar: extracting MAKE '(6663 characters)' cat << \SHAR_EOF > MAKE #!/bin/sh # # shell script to generate a sendmail .chn file containing all # the routing information for this host from a set of per-mailer channel # files containing in this directory. # if [ $# -le 1 ] then echo usage: make host files... exit fi host=$1 shift rm -f $host.chn echo -n > chn.classes echo -n > S9 # # sort out which files refer to which mailers # rm -f $$.ether $$.luucp $$.uucp $$.janet $$.bitnet $$.top for i in $* do case $i in *ether.chn) cat $i >> $$.ether ;; *luucp.chn) cat $i >> $$.luucp ;; *uucp.chn) cat $i >> $$.uucp ;; *janet.chn) cat $i >> $$.janet ;; *bitnet.chn) cat $i >> $$.bitnet ;; *top.chn) cat $i >> $$.top ;; esac done # # Standard format channel tables # for chnf in $$.ether $$.luucp do if [ -f $chnf ] then awk ' BEGIN { mailer=substr(FILENAME, index(FILENAME,".")+1) MINCLSIZE = 3 if (mailer == "ether") { print "# Ethernet" >>"S9" classes = "PQR" } else if (mailer == "luucp") { print "# Local UUCP" >>"S9" classes = "LMN" } c = 1 } /^#/ { break } /^\*/ { $1 = substr($1, 2) $2 = sprintf($2, "$2") printf "R$+@$+%s\t\t$@<$1>%s.%s\n", $1, $2, mailer >>"S9" break } { i = index($1, ".") subdom = substr($1,1,i-1) restdom = substr($1,i+1) if (subdom == $2) direct[restdom] = direct[restdom] " " subdom else printf "R$+@%s\t\t$@<$1@%s>%s.%s\n", $1, $1, $2, mailer >>"S9" } END { for (i in direct) { n = split(direct[i], sub, " ") if (n >= MINCLSIZE && c <= length(classes)) { C = substr(classes, c, 1) c++ printf "C%s%s\n", C , direct[i] >>"chn.classes" printf "R$+@$=%s.%s\t\t$@<$1>$2.%s\n",C,i,mailer >>"S9" } else { for (j=1; j<=n; j++) printf "R$+@%s.%s\t\t$@<$1>%s.%s\n", \ sub[j], i, sub[j], mailer >>"S9" } } print "" >>"chn.classes" print "" >>"S9" } ' $chnf fi done # # The Bitnet channel (bitnet links) # if [ -f $$.bitnet ] then awk ' BEGIN { print "# Bitnet sites" print "R$+@$+.bitnet $@<$1>$2.bitnet" } /^#/ { break } { printf "R$+@%s\t\t$:<$1>%s.bitnet\n", $1, $2 } END { print "" } ' $$.bitnet >>S9 fi # # The UUCP channel # if [ -f $$.uucp ] then sed -e '/^#/d' -e '/^$/d' $$.uucp | (sort +1; echo 'x.y z!x!%s') | awk ' BEGIN { MINCLSIZE = 3 classes = "UVWXYZ" c = 1 m = 0 print "# UUCP sites" >>"S9" print "# convert to uucp addresses and try to find a match" >>"S9" print "R$+@$+ $:$>13$1@$2" >>"S9" print "" >>"S9" } { i = index($1, ".") subdom = substr($1,1,i-1) restdom = substr($1,i+1) p = index($2, subdom) ps = subdom "!%s" if (p == 1 && $2 == ps) direct[restdom] = direct[restdom] " " subdom else if (p > 1 && substr($2, p) == ps) { path = substr($2, 1, p-1) if (path != lastpath || restdom != lastrest) { if (m >= MINCLSIZE && c <= length(classes)) { j = index(lastpath, "!") host = substr(lastpath,1,j-1) addr = substr(lastpath,j+1) rclass = "" for (j=1; j<=m; j++) rclass = rclass " " sub[j] C = substr(classes, c, 1) c++ printf "C%s%s\n", C, rclass >>"chn.classes" printf "R$=%s.%s!$+\t\t$@<%s$1!$2>%s.uucp\n", \ C, lastrest, addr, host >>"S9.2" } else { for (i=1; i<=m; i++) { j = index(lastpath, "!") host = substr(lastpath,1,j-1) addr = substr(lastpath,j+1) sub[i] printf "R%s.%s!$+\t\t$@<%s!$1>%s.uucp\n",\ sub[i], lastrest, addr, host >>"S9.2" } } lastpath = path lastrest = restdom m = 0 } sub[++m] = subdom } else { i = index($2, "!") host = substr($2,1,i-1) addr = substr($2,i+1) addr = sprintf(addr,"$1") printf "R%s!$+\t\t$@<%s>%s.uucp\n", $1, addr, host >>"S9.2" } } END { for (i in direct) { n = split(direct[i],sub," ") if (n >= MINCLSIZE && c <= length(classes)) { C = substr(classes, c, 1) c++ printf "C%s%s\n", C , direct[i] >>"chn.classes" printf "R$=%s.%s!$+\t\t$@<$2>$1.uucp\n", C, i >>"S9" } else { for (j=1; j<=n; j++) printf "R%s.%s!$+\t\t$@<$1>%s.uucp\n", \ sub[j], i, sub[j] >>"S9" } } print "" >>"chn.classes" print "" >>"S9.2" print "# no match in uucp - change back to domain style" >>"S9.2" print "R$+!$+ $:$>12$1!$2" >>"S9.2" print "" >>"S9.2" } ' cat S9.2 >> S9 rm -f S9.2 fi # # The Janet channel # if [ -f $$.janet ] then awk ' BEGIN { print "# Janet sites" >>"S9" print "# convert domain order to NRS style" >>"S9" print "R$+@$+ $:$>14$1@$2" >>"S9" print "" >>"S9" } /^#/ { break } { if ( $1 == "uk.ac." $2 ) # general rule will catch this break if ( $1 == "uk.co." $2 ) # general rule will catch this break printf "R$+@%s\t\t$@<$1>%s.janet\n", $1, $2 >>"S9" } END { print "" >>"chn.classes" print "" >>"S9" print "# pass all other uk addresses to hhmail to route" >>"S9" print "R$+@uk.ac.$+\t\t$@<$1>$2.janet" >>"S9" print "R$+@uk.co.$+\t\t$@<$1>$2.janet" >>"S9" print "" >>"S9" print "# convert domain order back to 822 style" >>"S9" print "R$+@$+ $:$>14$1@$2" >>"S9" print "" >>"S9" } ' $$.janet fi # # The Bitnet channel (arpa and uucp relaying) # if [ -f $$.bitnet ] then cat >>S9 <<'EOF' # arpa and uucp relays via Bitnet R$+@$+.arpa $@<$1@$2.arpa>smtpuser@wiscvm.barpa R$+@$+.uucp $@<$1@$2.uucp>uucp@psuvax1.buucp EOF fi # # Top Level Domain relaying # awk ' BEGIN { print "#" print "# top level domain - relaying sites" print "#" print "# This is a list of default relaying sites for" print "# addresses that dont match anything above." print "#" print "" } /^#/ { break } { if (length($1) < 4) tabs = "\t\t\t" else tabs = "\t\t" printf "R$+.%s%s$:$1.%s@%s\n", $1, tabs, $1, $2 } ' $$.top >> S9 # # The header # cat > $host.chn <> $host.chn # # the rules # cat - S9 >> $host.chn <<'EOF' ############################ # Ruleset 9 -- routing # ############################ # # This rule takes a full domain address and returns a # "address@host.network" triple. # S9 EOF cat >> $host.chn <<'EOF' R$+@$+@$+ $1%$2@$3 address cleanup R$+ $@$>9$1 retry EOF rm -f chn.classes S9 $$.* echo $host.chn made exit SHAR_EOF if test 6663 -ne "`wc -c MAKE`" then echo shar: error transmitting MAKE '(should have been 6663 characters)' fi echo shar: extracting README '(2671 characters)' cat << \SHAR_EOF > README General ------- This directory contains per-mailer channel (routing) tables from which the .chn file can be generated. In general, these files have a list of domain names on the LHS and the "host to send to" on the RHS, e.g: usc.ac.uk vax1 which specifies that addresses of the form "user@usc.ac.uk" should be send to the host "vax1" However, the actual format of the channel tables depends on the mailer, (see below) and is determined by the file name. For example, any file whose name ends with "janet.chn" is assumed to be a janet mailer channel table. Channel Table Formats --------------------- ether.chn and luucp.chn: These have the format described above; a domain name on the LHS and a hostname to send/relay to on the RHS. uucp.chn: This has a slightly different RHS syntax which the same as that produced by pathalias(1), e.g.: usc.ac.uk vax2!vax1!%s where %s is the user part of the address (converted to uucp form). janet.chn: The LHS domain name is in big-endian form in this table. The RHS is a "hostname" to send to. If a janet channel table is specified, then by default all uk.ac. domains are assumed to be routed to . bitnet.chn: This has the same format as the ether and luucp channel tables. If a bitnet channel table is specified, then by default all .bitnet domains are routed to (actual routing is done by the bitnet mailer). top.chn: This has a domain name on the RHS, for example.: ac.uk ukc.ac.uk which states that any address that ends in "ac.uk", which did not match a domain name in one of the mailer channel tables, is sent to ukc.ac.uk. Examples -------- The archive Examples.a contains sample mailer channel files. How to make the .chn file ------------------------------- 1. Create a mailer channel file for each mailer you have. This is best done by extracting sample channel files from Examples.a and editing them to contain the relevent data for this host. 2. Run "MAKE host file1 file2... " to create the .chn file. e.g. MAKE hwcs luucp.chn ukuucp.chn This shell script does a lot of work so be prepared to wait! Supported Mailers ----------------- MAKE looks for tables for the following mailers: ether.chn (ethernet) luucp.chn (local uucp) uucp.chn (uucp) janet.chn (janet) bitnet.chn (bitnet) top.chn (top level relaying) If you have other mailers not listed here, then you will need to add some code the the MAKE shell script. Good Luck! Note ---- Make sure that the domains on the RHS of the relaying rules (in top.chn) eventually match some domain on the LHS of a rule in one of the mailer channel tables. SHAR_EOF if test 2671 -ne "`wc -c README`" then echo shar: error transmitting README '(should have been 2671 characters)' fi echo shar: extracting Examples.a '(8558 characters)' cat << \SHAR_EOF > Examples.a ! ether.chn 483094477 217 10 100644 170 ` # # Ethernet channel table # The domain name on the LHS is routed to the host on the RHS. # bina.wisdom.bitnet bina haskel.wisdom.bitnet haskel deya.wisdom.bitnet deya luucp.chn 483094477 217 10 100644 170 ` # # Local UUCP channel table # The domain name on the LHS is routed to the host on the RHS. # ra.hwcs.uucp ra jove.hwcs.uucp ra odin.hwcs.uucp ra zeus.hwcs.uucp ra uucp.chn 483094477 217 10 100644 1043 ` # UUCP Channel Table # The domain name on the LHS is mapped to a path on the RHS. # If "%s" is included in the RHS then the user part goes here # e.g. jim@hwcs.ac.uk -> hwcs!%s -> hwcs!jim # cstvax.ed.ac.uk cstvax!%s cs.ucl.ac.uk cstvax!ucl-cs!%s glasgow.uucp cstvax!glasgow!%s paisley.uucp cstvax!glasgow!paisley!%s csbstand.uucp cstvax!glasgow!csbstand!%s glpsycho.uucp cstvax!glasgow!glpsycho!%s glhocus.uucp cstvax!glasgow!glhocus!%s dice.uucp dice!%s edcaad.uucp edcaad!%s gilles.uucp edcaad!gilles!%s kcl-cs.uucp kcl-cs!%s west44.uucp kcl-cs!%s ukc.ac.uk kcl-cs!ukc!%s westf.uucp kcl-cs!westf!%s mpgraph.uucp kcl-cs!mpgraph!%s camjenny.uucp kcl-cs!camjenny!%s root44.uucp kcl-cs!root44!%s rootis.uucp kcl-cs!root44!rootis!%s rootcl.uucp kcl-cs!root44!rootcl!%s hirst1.uucp kcl-cs!hirst1!%s camsteve.uucp kcl-cs!camjenny!camsteve!%s cuedvax.uucp kcl-cs!camjenny!camsteve!cuedvax!%s qmc-cs.uucp kcl-cs!root44!qmc-cs!%s spider.uucp spider!%s ulcs.uucp ulcs!%s # everything else goes to ukc for further routing janet.chn 483094477 217 10 100644 6071 ` # # Janet channel table # The domain name on the LHS is routed to the "host" on the RHS. # Note that the domain names on the LHS are in big-endian form. # # Inclusion of this file automatically includes the following default rule: # uk.ac. -> # uk.co. -> # # So, only mappings of, say, sitenames to actual hosts is really necessary # (and then only if the mapping is not provided in the NRS directory) # e.g. uk.ac.york york.minster # # The rest is `optional'. # uk.ac.desy.dy.ga desy.dy.ga uk.ac.desy.dy.vb desy.dy.vb uk.ac.abdn abdn uk.ac.aber.v aber.v uk.ac.aston.vaxa aston.vaxa uk.ac.aston.vaxb aston.vaxb uk.ac.aucc aucc uk.ac.bedford bedford uk.ac.bbk.cs bbk.cs uk.ac.bbk.cu bbk.cu uk.ac.bham.phva bham.phva uk.ac.brad.cdc brad.cdc uk.ac.brad.comp brad.comp uk.ac.brad.eeng brad.eeng uk.ac.bris.csa bris.csa uk.ac.bris.esa bris.esa uk.ac.bris.gsa bris.gsa uk.ac.bris.msa bris.msa uk.ac.bris.pva bris.pva uk.ac.bris.qga bris.qga uk.ac.bris.qva bris.qva uk.ac.bris.qvb bris.qvb uk.ac.bris.qvc bris.qvc uk.ac.cam.cl cam.cl uk.ac.cam.cl-alvey cam.cl-alvey uk.ac.cam.cl-jenny cam.cl-jenny uk.ac.cam.cl-ring cam.cl-ring uk.ac.cam.cl-steve cam.cl-steve uk.ac.cam.cltripos cam.cltripos uk.ac.cam.eng-dsl cam.eng-dsl uk.ac.cam.eng-icf cam.eng-icf uk.ac.cam.eng-44 cam.eng-44 uk.ac.cam.jenny cam.jenny uk.ac.cam.phx cam.phx uk.ac.cran.cdga cran.cdga uk.ac.cran.cdvb cran.cdvb uk.ac.cran.cdva cran.cdva uk.ac.dund dund uk.ac.dund.duns dund.duns uk.ac.uea.cpc.vax uea.cpc.vax uk.ac.uea.csa.vax uea.csa.vax uk.ac.uea.proteus uea.proteus uk.ac.uea.sp uea.sp uk.ac.ed ed uk.ac.ed.aigr aigr uk.ac.ed.aiva aiva uk.ac.ed.bush bush uk.ac.ed.cstvax cstvax uk.ac.ed.ecsvax ecsvax uk.ac.ed.edai edai uk.ac.ed.edee edee uk.ac.ed.edgr edgr uk.ac.ed.edmrc edmrc uk.ac.ed.edxa edxa uk.ac.ed.emas emas uk.ac.ed.epistemi epistemi uk.ac.ed.ercvax ercvax uk.ac.ed.eusip eusip uk.ac.ed.geovax geovax uk.ac.ed.mcsu mcsu uk.ac.ed.mrcvax mrcvax uk.ac.ed.phyvax phyvax uk.ac.ex.da ex.da uk.ac.hull.cs.perq hull.cs.perq uk.ac.janet.news janet.news uk.ac.janet.nmu janet.nmu uk.ac.lancs.vax1 lancs.vax1 uk.ac.lancs.comp lancs.comp uk.ac.lancs.eng lancs.eng uk.ac.le.sabre le.sabre uk.ac.le.star le.star uk.ac.lon.arch.cu lon.arch.cu uk.ac.lon.educ.cu lon.educ.cu uk.ac.lon.neur.cu lon.neur.cu uk.ac.lon.pharm.cu lon.pharm.cu uk.ac.lon.rvc.cu lon.rvc.cu uk.ac.lut.multics lut.multics uk.ac.lse.vax1 lse.vax1 uk.ac.lse.vax2 lse.vax2 uk.ac.man.cgu man.cgu uk.ac.man.psy man.psy uk.ac.nott.vaxa nott.vaxa uk.ac.nott.icf nott.icf uk.ac.nott.hcig nott.hcig uk.ac.ox.prg ox.prg uk.ac.ox.prgg ox.prgg uk.ac.ox.prgv ox.prgv uk.ac.ox.vax1 ox.vax1 uk.ac.ox.vax2 ox.vax2 uk.ac.ox.vax3 ox.vax3 uk.ac.plym.a plym.a uk.ac.plym.b plym.b uk.ac.plym.d plym.d uk.ac.qec.cu qec.cu uk.ac.qmc qmc uk.ac.qmc.cs qmc.cs uk.ac.rdg.am.cms rdg.am.cms uk.ac.rdg.am.uts rdg.am.uts uk.ac.rdg.cs rdg.cs uk.ac.rdg.micro rdg.micro uk.ac.rdg.psych rdg.psych uk.ac.rhc.vax rhc.vax uk.ac.rl.gb rl.gb uk.ac.rl.gd rl.gd uk.ac.rl.ge rl.ge uk.ac.rl.gf rl.gf uk.ac.rl.gk rl.gk uk.ac.rl.gm rl.gm uk.ac.rl.gr rl.gr uk.ac.rl.ib rl.ib uk.ac.rl.ic rl.ic uk.ac.rl.id rl.id uk.ac.rl.qb rl.qb uk.ac.rl.pa rl.pa uk.ac.rl.pb rl.pb uk.ac.rl.pc rl.pc uk.ac.rl.pd rl.pd uk.ac.rl.pe rl.pe uk.ac.rl.pf rl.pf uk.ac.rl.pg rl.pg uk.ac.rl.ph rl.ph uk.ac.rl.va rl.va uk.ac.rl.vb rl.vb uk.ac.rl.vc rl.vc uk.ac.rl.vd rl.vd uk.ac.rl.ve rl.ve uk.ac.rl.vf rl.vf uk.ac.rl.vg rl.vg uk.ac.rl.vi rl.vi uk.ac.rl.vs rl.vs uk.ac.salf.r-d salf.r-d uk.ac.salf.r-d-32 salf.r-d-32 uk.ac.co.ga co.ga uk.ac.soton.elprq1 soton.elprq1 uk.ac.st-and st-and uk.ac.stir.cs stir.cs uk.ac.stir.vaxa stir.vaxa uk.ac.stir.vaxb stir.vaxb uk.ac.swan.cv swan.cv uk.ac.swan.cs swan.cs uk.ac.ucl.brtl ucl.brtl uk.ac.ucl.cs ucl.cs uk.ac.ucl.tsperq ucl.tsperq uk.ac.ukc ukc uk.ac.uwist.vaxa uwist.vaxa uk.ac.uwist.vaxb uwist.vaxb uk.ac.uwist.vaxc uwist.vaxc uk.ac.uwist.vaxd uwist.vaxd uk.ac.uwist.vaxdev uwist.vaxdev uk.ac.warwk.daisy warwk.daisy uk.ac.warwk.ga warwk.ga uk.ac.warwk.pa warwk.pa uk.ac.warwk.ubu warwk.ubu uk.ac.york york.minster uk.ac.york.abbot york.abbot uk.ac.york.canon york.canon uk.ac.york.deacon york.deacon uk.ac.york.minster york.minster uk.ac.york.novice york.novice bitnet.chn 483094477 217 10 100644 402 ` # # Bitnet channel table # Actual routing is done by the bitnet mailer itself. # Existance of this file automatically includes the following mappings: # .bitnet -> # .arpa -> smtpuser@wiscvm (see bitnetm.m4) # .uucp -> uucp@psuvax1 (see bitnetm.m4) # # So, only bitnet sites with other domain names should be included here # e.g. ucbjade.cc ucbjade # top.chn 483094477 217 10 100644 331 ` # Top level domains # if address hasn't matched a domain name in any other table then # it should match something here. The RHS is a domain which specifies # where the message should be relayed for further routing. # uk cs.ucl.ac.uk uucp ukc.ac.uk arpa ukc.ac.uk csnet csnet-relay.arpa bitnet wiscvm.arpa dec decwrl.arpa SHAR_EOF if test 8558 -ne "`wc -c Examples.a`" then echo shar: error transmitting Examples.a '(should have been 8558 characters)' fi echo shar: done with directory chn chdir .. # End of shell archive exit 0