home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume4
/
uk-1.4
/
part2
< prev
next >
Wrap
Internet Message Format
|
1986-11-30
|
19KB
From: Jim Crammond <seismo!mcvax!cs.hw.ac.uk!jim>
Subject: Sendmail UK-1.4 part 2 of 5
Newsgroups: mod.sources
Approved: jpn@panda.UUCP
Mod.sources: Volume 4, Issue 57
Submitted by: Jim Crammond <seismo!mcvax!cs.hw.ac.uk!jim>
# 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:
# dom
# This archive created: Fri Feb 28 13:10:19 1986
echo shar: creating directory dom
mkdir dom
cd dom
echo shar: extracting Examples.a '(7914 characters)'
cat << \SHAR_EOF > Examples.a
!<arch>
local.dom 508607788 217 4 100644 239 `
#
# Local (hw.cs) domain
#
brahma brahma.cs.hw.ac.uk
jove jove.cs.hw.ac.uk
odin odin.cs.hw.ac.uk
ra ra.cs.hw.ac.uk
zeus zeus.cs.hw.ac.uk
#
# Heriot-Watt domain
#
cs cs.hw.ac.uk
ee ee.hw.ac.uk
aimmi aimmi.hw.ac.uk
ga ga.hw.ac.uk
uk.dom 508608328 217 4 100644 4563 `
#
# UK Domain Table. Generated: Wed Feb 12 13:42:52 GMT 1986
#
# Standard form names
#
aberdeen aberdeen.ac.uk
aberystwyth aberystwyth.ac.uk
afrc-computing-centre afrc-computing-centre.ac.uk
aston aston.ac.uk
aucc aucc.ac.uk
bangor bangor.ac.uk
bath bath.ac.uk
birkbeck birkbeck.ac.uk
birmingham birmingham.ac.uk
bradford bradford.ac.uk
bristol bristol.ac.uk
brunel brunel.ac.uk
bt-research-labs bt-research-labs.co.uk
cambridge cambridge.ac.uk
cardiff cardiff.ac.uk
city city.ac.uk
cranfield cranfield.ac.uk
daresbury daresbury.ac.uk
dundee dundee.ac.uk
dundee-tech dundee-tech.ac.uk
durham durham.ac.uk
east-anglia east-anglia.ac.uk
edinburgh edinburgh.ac.uk
essex essex.ac.uk
exeter exeter.ac.uk
glasgow glasgow.ac.uk
hatfield hatfield.ac.uk
heriot-watt heriot-watt.ac.uk
hull hull.ac.uk
imperial imperial.ac.uk
janet janet.ac.uk
kcl kcl.ac.uk
keele keele.ac.uk
lancashire-poly lancashire-poly.ac.uk
lancaster lancaster.ac.uk
leeds leeds.ac.uk
leicester leicester.ac.uk
liverpool liverpool.ac.uk
lon lon.ac.uk
loughborough loughborough.ac.uk
lse lse.ac.uk
manchester manchester.ac.uk
nerc-bangor nerc-bangor.ac.uk
nerc-bidston nerc-bidston.ac.uk
nerc-holbrook nerc-holbrook.ac.uk
nerc-imer nerc-imer.ac.uk
nerc-keyworth nerc-keyworth.ac.uk
nerc-murchison nerc-murchison.ac.uk
nerc-wallingford nerc-wallingford.ac.uk
nerc-wormley nerc-wormley.ac.uk
newcastle newcastle.ac.uk
nottingham nottingham.ac.uk
nrs nrs.ac.uk
open open.ac.uk
oxford oxford.ac.uk
paisley paisley.ac.uk
plymouth plymouth.ac.uk
poly-central-london poly-central-london.ac.uk
qec qec.ac.uk
qmc qmc.ac.uk
queens-belfast queens-belfast.ac.uk
reading reading.ac.uk
rhbnc rhbnc.ac.uk
rutherford rutherford.ac.uk
salford salford.ac.uk
serc-central-office serc-central-office.ac.uk
sheffield sheffield.ac.uk
southampton southampton.ac.uk
st-andrews st-andrews.ac.uk
stirling stirling.ac.uk
strathclyde strathclyde.ac.uk
surrey surrey.ac.uk
sussex sussex.ac.uk
swansea swansea.ac.uk
tees-poly tees-poly.ac.uk
ucl ucl.ac.uk
ukc ukc.ac.uk
ulster ulster.ac.uk
umist umist.ac.uk
umrcc umrcc.ac.uk
uwist uwist.ac.uk
warwick warwick.ac.uk
westfield westfield.ac.uk
york york.ac.uk
#
# Abbreviated form names
#
abdn abdn.ac.uk
aber aber.ac.uk
afrc afrc.ac.uk
bbk bbk.ac.uk
bham bham.ac.uk
brad brad.ac.uk
bris bris.ac.uk
btrl btrl.co.uk
cam cam.ac.uk
cf cf.ac.uk
#co co.ac.uk
cran cran.ac.uk
dct dct.ac.uk
dl dl.ac.uk
dund dund.ac.uk
dur dur.ac.uk
ed ed.ac.uk
ex ex.ac.uk
gla gla.ac.uk
hatfld hatfld.ac.uk
hw hw.ac.uk
ic ic.ac.uk
kl kl.ac.uk
lancs lancs.ac.uk
lancsp lancsp.ac.uk
le le.ac.uk
liv liv.ac.uk
lut lut.ac.uk
man man.ac.uk
nbi nbi.ac.uk
ncl ncl.ac.uk
nkw nkw.ac.uk
nme nme.ac.uk
nmh nmh.ac.uk
nns nns.ac.uk
nott nott.ac.uk
ntb ntb.ac.uk
nwl nwl.ac.uk
nwo nwo.ac.uk
ou ou.ac.uk
ox ox.ac.uk
pcl pcl.ac.uk
plym plym.ac.uk
qub qub.ac.uk
rdg rdg.ac.uk
rl rl.ac.uk
salf salf.ac.uk
shef shef.ac.uk
soton soton.ac.uk
st-and st-and.ac.uk
stir stir.ac.uk
strath strath.ac.uk
surr surr.ac.uk
susx susx.ac.uk
swan swan.ac.uk
sx sx.ac.uk
tp tp.ac.uk
uea uea.ac.uk
ulst ulst.ac.uk
warwk warwk.ac.uk
ukuucp.dom 508608086 217 4 100644 363 `
#
# UUCP names to NRS names.
#
# Where appropriate uucp hostname are mapped to NRS domain names.
#
cstvax cstvax.ed.ac.uk
edcaad edcaad.ed.ac.uk
hwee ee.hw.ac.uk
icdoc doc.ic.ac.uk
kcl-cs cs.kcl.ac.uk
spider spider.co.uk
stl stl.stc.co.uk
ukc ukc.ac.uk
ulcs dcs.leeds.ac.uk
mcvax mcvax.uucp
bitnet.dom 508607579 217 4 100644 845 `
#
# The Bitnet domain. (Mar 1985)
# Data extracted from /usr/lib/rscs/SYSNAMES by:
# awk '{print $1}' SYSNAMES | tr '[A-Z]' '[a-z]' | \
# awk '{printf "%-20s %s.bitnet\n", $1, $1 }'
#
wisdom wisdom.bitnet
weizmann weizmann.bitnet
remote remote.bitnet
wisvms wisvms.bitnet
ucbjade ucbjade.bitnet
wiscvm wiscvm.bitnet
psuvms1 psuvms1.bitnet
taurus taurus.bitnet
taunivm taunivm.bitnet
hujics hujics.bitnet
hbunos hbunos.bitnet
barilan barilan.bitnet
psuvax1 psuvax1.bitnet
psuvm psuvm.bitnet
cunyvm cunyvm.bitnet
earnet earnet.bitnet
rockvax rockvax.bitnet
israearn israearn.bitnet
# .... and so on
ed.local.dom 508607661 217 4 100644 427 `
# local.dom for Edinburgh sites
aigr aigr.ed.ac.uk
aiva aiva.ed.ac.uk
bush bush.ed.ac.uk
cstvax cstvax.ed.ac.uk
ecsvax ecsvax.ed.ac.uk
edai edai.ed.ac.uk
edee edee.ed.ac.uk
edgr edgr.ed.ac.uk
edmrc edmrc.ed.ac.uk
edxa edxa.ed.ac.uk
emas emas.ed.ac.uk
epistemi epistemi.ed.ac.uk
ercvax ercvax.ed.ac.uk
eusip eusip.ed.ac.uk
geovax geovax.ed.ac.uk
mcsu mcsu.ed.ac.uk
mrcvax mrcvax.ed.ac.uk
phyvax phyvax.ed.ac.uk
top.dom 508607579 217 4 100644 467 `
# 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 cstvax.ed.ac.uk
uucp ukc.ac.uk
arpa cs.ucl.ac.uk
com cs.ucl.ac.uk
edu cs.ucl.ac.uk
gov cs.ucl.ac.uk
mil cs.ucl.ac.uk
org cs.ucl.ac.uk
oz ukc.ac.uk
csnet csnet-relay.arpa
bitnet wiscvm.arpa
mailnet mit-multics.arpa
dec decwrl.arpa
csnet.dom 508608201 217 4 100644 576 `
#
# The Csnet domain (Feb 86)
# Generated from unix/pmdf CSNET table with
# the following command: "sed 's/,.*//' | tr '[A-Z]' '[a-z]'"
#
csnet-relay csnet-relay.csnet
csnet-sh csnet-sh.csnet
csnet-cic csnet-sh.csnet
albany albany.csnet
sunya albany.csnet
suny-a albany.csnet
alcoa-atc alcoa-atc.csnet
alcoa-sei alcoa-sei.csnet
alcoa alcoa-sei.csnet
sei-alcoa alcoa-sei.csnet
apple apple.csnet
arizona arizona.csnet
az arizona.csnet
asu asu.csnet
arizona-state asu.csnet
asu-vax asu.csnet
asuvax asu.csnet
australia australia.csnet
bbn-rvax bbn-rvax.csnet
# .... and so on
SHAR_EOF
if test 7914 -ne "`wc -c Examples.a`"
then
echo shar: error transmitting Examples.a '(should have been 7914 characters)'
fi
echo shar: extracting MAKE '(4274 characters)'
cat << \SHAR_EOF > MAKE
#!/bin/sh
#
# shell script to generate a sendmail <site>.dom file containing all
# the domain information for this site from a set of domain database
# files contained in this directory.
#
if [ $# -le 1 ]
then echo usage: MAKE site files...
exit
fi
site=$1
shift
rm -f $site.dom
top=
rest=
for i in $*
do
case $i in
*top.dom) top="$top $i"
;;
*) rest="$rest $i"
;;
esac
done
sed -e '/^#/d' -e '/^$/d' $rest | awk '
{
n = split($2, domains, ".")
if ($1 != domains[1])
printf "R$*%s\t\t$1%s\n", $1, $2 >"S10"
else
{ for (i=n; i>1; i--)
print domains[i] " " domains[i-1]
}
}
' | sort | uniq > $site
awk '
BEGIN {
MINCLSIZE = 2
classes = "ABCDEFGH"
c = 1; d = 0
}
{
domain[$1] = domain[$1] " " $2
}
END {
for (i in domain)
{ domain[i] = domain[i] " "
sort[++d] = i
}
for (i=1; i<=d; i++)
{ for (j=1; j<i; j++)
{ m = " " sort[i] " "
if (index(domain[sort[j]], m) > 0)
{ t = sort[i]
for (k=i; k>j; k--)
sort[k] = sort[k-1]
sort[j] = t
}
}
for (j=i+1; j<=d; j++)
{ m = " " sort[j] " "
if (index(domain[sort[i]], m) > 0)
{ t = sort[j]
for (k=j; k>i; k--)
sort[k] = sort[k-1]
sort[i] = t
}
}
}
for (i=1; i<=d; i++)
{ n = split(domain[sort[i]], subdoms, " ")
if (n >= MINCLSIZE && c <= length(classes))
{ C = substr(classes, c, 1)
c++
print "" >"dom.classes"
printf "D%s%s\n", C, sort[i] >"dom.classes"
printf "C%s%s\n", C, domain[sort[i]] >"dom.classes"
printf "R$*$=%s\t\t\t$1$2.$%s\t\tu@d -> u@d.%s\n", \
C, C, sort[i] >"S11"
printf "R$*$=%s.$%s\t\t$1$2\t\tu@d.%s -> u@d\n", \
C, C, sort[i] >"S12"
printf "R$*@$=%s.$+\t\t$@$>9$1@$2.$3\n", C >"S13"
printf "R$*$=%s\t\t\t$@$1$2\n", C >"S13"
}
else
{ for (m=1; m<=n; m++)
{ printf "R$*%s\t\t$1%s.%s\n", subdoms[m], \
subdoms[m], sort[i] >"S11"
printf "R$*%s.%s\t\t$1%s\n", subdoms[m], \
sort[i], subdoms[m] >"S12"
printf "R$*@%s.$+\t\t$@$>9$1@%s.$2\n", \
subdoms[m], subdoms[m] >"S13"
printf "R$*%s\t\t\t$@$1%s\n", \
subdoms[m], subdoms[m] >"S13"
}
}
}
}
' $site
rm -f $site
#
# The header
#
cat >$site.dom <<EOF
###############################################################################
###############################################################################
#####
##### @(#)$site.dom UK-1.4 sendmail configuration 12/2/86
#####
##### The domain database and rules
#####
###############################################################################
###############################################################################
# classes
EOF
#
# generate classes
#
while read class group
do
echo $group | tr ' ' '\012' | fmt | sed "s/^/$class/"
done < dom.classes >> $site.dom
rm -f dom.classes
#
# generate top level domains. If no file is specified hardwire some in.
#
cat >> $site.dom <<'EOF'
# top level domains
EOF
if [ -n "$top" ]
then
sed -e '/^#/d' -e 's/[ ].*//' $top | fmt | sed 's/^/CT/' >> $site.dom
else
echo Warning: no top.dom specified
echo 'CTuk arpa com edu gov mil org us net uucp oz csnet bitnet mailnet dec' >> $site.dom
fi
#
# Ruleset 10
#
cat >> $site.dom <<'EOF'
##########################################
# Ruleset 10 -- domain name aliasing #
##########################################
S10
EOF
if [ -f S10 ]
then cat S10 >> $site.dom
rm -f S10
fi
#
# Ruleset 11
#
cat >> $site.dom <<'EOF'
########################################################
# Ruleset 11 -- Expand address to full domain name #
########################################################
S11
EOF
cat S11 >> $site.dom
rm -f S11
#
# Ruleset 12
#
cat >> $site.dom <<'EOF'
############################################################
# Ruleset 12 -- Strip full domain name to minimum part #
############################################################
S12
EOF
tail -r S12 >> $site.dom
rm -f S12
cat >> $site.dom <<'EOF'
ifdef(`NRSFORMAT',`
###############################################################
# Ruleset 13 -- Convert domains in NRS order to 822 order #
###############################################################
S13
R$*$=T $@$1$2
R$*@$=T.$+ $@$>9$1@$2.$3
EOF
tail -r S13 >> $site.dom
rm -f S13
echo "')" >> $site.dom
echo $site.dom made
exit
SHAR_EOF
if test 4274 -ne "`wc -c MAKE`"
then
echo shar: error transmitting MAKE '(should have been 4274 characters)'
else
chmod a+x MAKE
fi
echo shar: extracting Namecheck '(743 characters)'
cat << \SHAR_EOF > Namecheck
#!/bin/sh
#
# Shell script to find possible name conflicts in the domain
# information given in a set of sendmail domain database files.
# Returns the number of name conflicts found.
# jim@hw.cs 9/85
#
if [ $# -lt 1 ]
then echo usage: Namecheck files...
exit
fi
awk '
/^#/ { break }
{
n = split($2, domains, ".")
if ($1 == domains[1])
{ full = domains[n]
for (i=n-1; i>0; i--)
{ full = domains[i] "." full
print domains[i] " " full
}
}
}
' $* | sort | uniq | awk '
BEGIN {
prev1 = ""
prev2 = ""
errorval = 0
}
{
if (prev1 == $1)
{ if (errorval == 0)
print "Name conflicts:"
printf "\t\"%s\" in \"%s\" and \"%s\"\n", $1, prev2, $2
errorval++
}
prev1 = $1
prev2 = $2
}
END {
exit errorval
}
'
SHAR_EOF
if test 743 -ne "`wc -c Namecheck`"
then
echo shar: error transmitting Namecheck '(should have been 743 characters)'
else
chmod a+x Namecheck
fi
echo shar: extracting README '(4324 characters)'
cat << \SHAR_EOF > README
General
-------
It is recommended that you have some idea of what domains are before
you start. RFC819 (supplied with the sendmail documentation) is a good
starting point for this.
The domain tables provide the information that allows sendmail
to expand host/site names or abbreviated domain names to fully
qualified domain names.
The tables consist of rules (1 per line) which consist of two
strings seperated by white space. Essentially, any address whose
domain part ends in the string given on the LHS of a rule will be
expanded to the string given on the RHS.
For example, if the following entry was in the domain tables
hw hw.ac.uk
then a user can give the address jim@hw and sendmail will expand this
to the fully qualified name jim@hw.ac.uk. Also, this will expand
jim@cs.hw to jim@cs.hw.ac.uk.
Note that the names in the domain tables must be given in RFC822
(little-endian) form with the most general part rightmost. e.g. hw.ac.uk.
Probably the minimum information you need to specify in the domain tables
is a mapping from your host name to your domain name, e.g
vax6 vax6.cs.hw.ac.uk
This would mean users would have to give fully qualified addresses
to send mail elsewhere.
In theory, the maximum information you should specify should be the
list of all siblings of the subdomains that make up your domain name,
e.g. all subdomains of "uk", "ac", "hw" and "cs" for vax6.cs.hw.ac.uk.
You can add further information, for example, you may wish to specify
all the subdomains of "co.uk" as well as "ac.uk", but beware of naming
conflicts. There maybe a domain "ucs" in both "co.uk" and "ac.uk";
if so, you must only specify one. If the following entries were
in the domain tables:
ucs ucs.ac.uk
co co.uk
then users would be able to mail "jim@ucs" for "ucs.ac.uk", and "jim@ucs.co"
for "ucs.co.uk".
Some domains contain a very large number of subdomains (e.g. arpa, uucp).
It is probably unwise to attempt to include all these names
in such cases as sendmail loads all this information in at startup time,
and will thus take longer. Usually a more regional scheme is recommended
like "all uucp sites in the uk" for the uucp domain. (Domains containing
more than a 1000 subdomains will probably break the MAKE script anyway!)
Again, this just means users specify a fully qualified addresses
for sites not included in the domain tables.
Hostname or domain name aliases can also be included in these files; so
for example, an entry such as:
oldname.uucp newname.ac.uk
means addresses like jim@oldname.uucp will be converted to jim@newname.ac.uk.
Lines beginning with "#" in the tables are treated as comments.
Top Level Domains
-----------------
Domain tables whose name ends with "top.dom" are treated specially.
These files are assumed to contain a list of top level domain names.
The format of these tables is the same as for the "top.chn" channel
tables: a top level domain name on the LHS and a relaying domain on
the RHS, e.g.
uk ukc.ac.uk
Thus you can link the top.chn and top.dom files, if you wish.
If no "top.dom" file is supplied, a default list of top level
domains will be generated by the MAKE script which contains
the following domain names:
uk arpa com edu gov mil org us net
uucp oz csnet bitnet mailnet dec
Examples
--------
The archive Examples.a contains sample domain tables.
How to compile the domain tables
--------------------------------
1. Create some files containing the domain table information.
This is best done by extracting sample domain files from Examples.a
and editing them, if necessary, to contain the relevent data for this site.
Uk users should be able to use uk.dom as is.
2. Run "MAKE site file1 file2..."
This generates the sendmail classes and rules for domain expansion
in a file <site>.dom. e.g.
MAKE hwcs local.dom uk.dom top.dom
You may see messages such as "direct is not an array" produced
by the MAKE script; ignore these!
This shell script does a lot of work so be prepared to wait!
Checking for name clashes
-------------------------
The program Namecheck will warn you of any name clashes you have in
your domain tables. Run "Namecheck file1 file2...", where the arguments
are the domain tables used in the above MAKE command (except top.dom).
e.g.
Namecheck local.dom uk.dom
SHAR_EOF
if test 4324 -ne "`wc -c README`"
then
echo shar: error transmitting README '(should have been 4324 characters)'
else
chmod a+x MAKE
fi
echo shar: done with directory dom
cd ..
# End of shell archive
exit 0