Relay-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site seismo.CSS.GOV Posting-Version: version B 2.10.2 9/3/84; site panda.UUCP Path: seismo!harvard!talcott!panda!sources-request From: sources-request@panda.UUCP Newsgroups: mod.sources Subject: GaTech Sendmail (Part 3 of 3) Message-ID: <1002@panda.UUCP> Date: 14 Oct 85 13:22:24 GMT Date-Received: 14 Oct 85 17:06:14 GMT Sender: jpn@panda.UUCP Lines: 845 Approved: jpn@panda.UUCP Mod.sources: Volume 3, Issue 25 Submitted by: Gene Spafford #! /bin/sh # Make a new directory for these sources, cd to it, and run kits 1 thru 3 # through sh. When all 3 kits have been run, read README. echo "This is GaTech Sendmail kit 3 (of 3). If kit 3 is complete, the line" echo '"'"End of kit 3 (of 3)"'" will echo at the end.' echo "" export PATH || (echo "You didn't use sh, you clunch." ; kill $$) echo Extracting gatech.mc cat >gatech.mc <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### SENDMAIL CONFIGURATION FILE FOR GATECH ##### ##### This one is the big daddy. There is no "upstairs" ##### to bounce a message to -- except perhaps the CSnet ##### ##### $Header: gatech.mc,v 5.1 85/10/13 20:38:16 spaf Release $ ##### ############################################################ ############################################################ ############################################################ ### local info ############################################################ # internet hostname Cwgatech ga-tech georgia-tech # override SMTP hostname to match Arpanet name Dj$w.CSNET # Our UUCP hostname(s) DUgatech CUgatech GATech GaTech include(csether.m4) # Defined Gateway sites and so on. Hosts are listed in files. # # ARPA Gateway DAcsnet-relay FA/usr/lib/mail/arpa.hosts %s # # BITNET gateway DBwiscvm.arpa FB/usr/lib/mail/bitnet.hosts %s # # CSNET gateway DCcsnet-relay FC/usr/lib/mail/csnet.hosts %s # # Gateway to Dec E-Net DEdecwrl.arpa FE/usr/lib/mail/decnet.hosts %s # # Gateway to Mailnet. DMmit-multics.arpa FM/usr/lib/mail/mailnet.hosts %s # # UUCP network # (no gateway host) FX/usr/lib/mail/uucp.hosts %s # # OZ gateway # (no list of sites) DZmunnari.uucp # we have full sendmail support here Oa include(gtbase.m4) ################################################ ### Machine dependent part of ruleset zero ### ################################################ # Resolve names that can go via the ethernet R$*<@$*$=S.LOCAL>$* $#ether$@$3$:$1<@$2$3.$D>$4 user@etherhost # Resolve local UUCP links (all others) R<@$+.$-.UUCP>:$+ $#uucp$@$2$:@$1.$2.UUCP:$3 @host.domain.UUCP: ... R<@$-.UUCP>:$+ $#uucp$@$1$:$2 @host.UUCP: ... R$+<@$+.$-.UUCP> $#uucp$@$3$:$1@$2.$3.UUCP user@host.domain.UUCP R$+<@$-.UUCP> $#uucp$@$2$:$1 user@host.UUCP # # Resolution of the CSNET, ARPA, BITNET and MAILNET domains should really # have some sort of provision for addresses of the form: # "@domain.XXX:rest-of-address" similar to the UUCP stuff # # Resolve ARPA names - these go by way of the PMDF mailer. # If we had an Arpa link, we'd use the TCP mailer instead. R$+<@$*.$=K> $#pmdf$@$A$:$1<@$2.$3> user@site.ARPA # Current: send BITNET mail to a known gatewaying host (wiscvm.arpa) R$+<@$*.BITNET> $@$>0$1%$2.BITNET<@$B> user@site.BITNET # Resolve mail to the CSNET domain # make sure to leave the "csnet" in the address R$+<@$*.CSNET> $#pmdf$@$C$:$1<@$2.CSNET> user@site.CSNET # Resolve addresses to the MAILNET domain - these are handled # by the site in the $M macro. We merely re-iterate rule 0 # to get to the site specified by $M. R$+<@$*.MAILNET> $@$>0$1%$2.MAILNET<@$M> user@site.MAILNET # Resolve DEC E-Net addresses R$+<@$*.DEC> $@$>0$1%$2.DEC<@$E> user@site.DEC # Resolve OZ addresses R$+<@$*.OZ> $@$>0$2.OZ!$1<@$Z> user@site.OZ # At this point we look for names of the form # user@site and see if we can intuit a domain for # "site". If so, we append the domain and try all over again. R$+<@$*$=S> $@$>0$1<@$2$3.$D> Local host R$+<@$*$=W> $@$>0$1<@$2$3.UUCP> (local) UUCP host R$+<@$*$=C> $@$>0$1<@$2$3.CSNET> CSnet host R$+<@$*$=A> $@$>0$1<@$2$3.ARPA> Arpanet host R$+<@$*$=M> $@$>0$1<@$2$3.MAILNET> Mailnet host R$+<@$*$=X> $@$>0$1<@$2$3.UUCP> (other) UUCP host R$+<@$*$=B> $@$>0$1<@$2$3.BITNET> BITNET host R$+<@$*$=E> $@$>0$1<@$3.DEC> DEC E-Net host # Error on any names with a network in them here since we couldn't # figure out where to send them. R$*<@$+>$* $#error$:Unknown host or domain in address # remaining names are local (since they aren't on any of our networks) R$+ $#local$:$1 everything else ######################################## ### Host dependent address cleanup ### ######################################## S8 R$*$=U!$+@$+ $3@$4 drop uucp forward include(uumail.m4) include(pmdfm.m4) include(etherm.m4) !STUFFY!FUNK! echo Extracting Makefile cat >Makefile <<'!STUFFY!FUNK!' ###################################################################### # # Makefile for Sendmail GaTech configuration files # # $Header: Makefile,v 5.5 85/10/13 21:17:06 spaf Release $ # ###################################################################### M4 = base.m4 csether.m4 etherm.m4 gtbase.m4 localm.m4 shortzero.m4 \ uucpm.m4 uumail.m4 version.m4 zerobase.m4 pmdfm.m4 short2.m4 \ short3.m4 MC = gatech.mc stratus.mc nimbus.mc gitpyr.mc cirrus.mc gt-cmmsr.mc \ gtss.mc gtqo.mc SRCS= $(MC) $(M4) CSALL = gatech.cf gitpyr.cf stratus.cf nimbus.cf cirrus.cf ALL = $(CSALL) gt-cmmsr.cf gtss.cf gtqo.cf GET= co .SUFFIXES: .mc .cf .mc.cf: m4 $*.mc > $*.cf all: $(ALL) shar: co -q -sRelease $(SRCS) Makefile MANIFEST README KEY PATCHES \ uumail.c overview.ms Files shar -v -pX `sed -n '5,$$s/ .*//p' MANIFEST | tr '\12' '\40'` > sendmail.shar compress -c < sendmail.shar > sendmail.shar.Z cs: $(CSALL) ############################ # special dependencies # ############################ # all computer science department hosts.... $(CSALL): csether.m4 # pessimize -- basic dependencies $(ALL): base.m4 localm.m4 uucpm.m4 version.m4 zerobase.m4 gtbase.m4 # hosts using MMDF/PMDF gatech.cf: pmdfm.m4 # Hosts using Ethernet/SMTP $(CSALL): etherm.m4 gtss.cf gtqo.cf: etherm.m4 # Hosts using optimized uucp mailer gatech.cf: uumail.m4 # Hosts using short definition stratus.cf: shortzero.m4 nimbus.cf: shortzero.m4 cirrus.cf: shortzero.m4 gitpyr.cf: shortzero.m4 # Other cases gt-cmmsr.cf: short2.m4 gtss.cf gtqo.cf: short3.m4 # Specifics on hosts gatech.cf: gatech.mc gitpyr.cf: gitpyr.mc stratus.cf: stratus.mc nimbus.cf: nimbus.mc cirrus.cf: cirrus.mc gt-cmmsr.cf: gt-cmmsr.mc gtss.cf: gtss.mc gtqo.cf: gtqo.mc ##################### # administrivia # ##################### sources: $(SRCS) $(SRCS): $(GET) $@ README MANIFEST overview.ms KEY Makefile Files: $(GET) $@ clean: rm -f *.cf a.out core make.out Make.errs !STUFFY!FUNK! echo Extracting gtbase.m4 cat >gtbase.m4 <<'!STUFFY!FUNK!' ################################################# # # General configuration information and so on # Specific to GaTech sites # # $Header: gtbase.m4,v 5.1 85/10/13 20:45:55 spaf Release $ # ################################################# ###################### # General Macros # ###################### # local domain names DDGTNET CDgtnet GTNET GTNet GtNet GTnet # My "top-level" domain (seen on Gatech) DTCSNET # major relay host DRgatech CRgatech GATECH GATech Gatech GaTech GAtech # and forwarding host for ether mail DFgatech # my official hostname Dj$w.$D # known top-level domains CTARPA UUCP BITNET CSNET MAILNET DEC EDU GOV MIL COM ORG NET OZ # known Internet domains (we send on as if ARPA) CKARPA EDU GOV MIL COM ORG NET # UUCP hosts that we talk to FW/usr/lib/mail/uucp.local include(base.m4) ####################### # Rewriting rules # ####################### ##### special local conversions S6 # Recognize "old" syntax mistakes, like UUCP specifications of Ethernet # hosts R$*<@$=W>$* $1<@$2.UUCP>$3 R$*<@$=S.UUCP> $1<@$2.$D> uucp-isms # R$*<@$*$=D>$* $1<@$2LOCAL>$4 convert local domain R$*<@$=S>$* $1<@$2.LOCAL>$3 user@localhost R$*<@$+$=S>$* $1<@$2$3.LOCAL>$4 user@host.subdomain R$*<@$*$=D.$=T>$* $1<@$2LOCAL>$4 catch "gtnet.csnet" R$*<@LOCAL> $1 degenerate case R$+%$+<@$R.LOCAL> $1<@$2.LOCAL> hacks for % syntax R$+%$=S<@$=S.LOCAL> $1<@$2.LOCAL> relayed internally R$*<@$+.$=D.$=D>$* $1<@$2.$3>$5 make gtnet top level include(localm.m4) include(zerobase.m4) !STUFFY!FUNK! echo Extracting KEY cat >KEY <<'!STUFFY!FUNK!' USES FOR MACROS AND CLASSES MACROS CLASSES ====== ======= A arpanet relay known arpanet hosts B Bitnet relay (wiscvm.arpa) known BITNET hosts C CSnet-relay known CSnet hosts - - - - - - - - - - - - - - - - - - - - - - - - - - D full local domain name (bottom) local domain names E Decwrl.arpa list of DEC E-net sites F forwarding host, $R default hosts that we cannot talk directly to - - - - - - - - - - - - - - - - - - - - - - - - - - G H internet name all names this host is known by I - - - - - - - - - - - - - - - - - - - - - - - - - - J K all known Internet domains L - - - - - - - - - - - - - - - - - - - - - - - - - - M Mailnet relay site known Mailnet hosts N O - - - - - - - - - - - - - - - - - - - - - - - - - - P Q R Relay-host Relay-host nicknames - - - - - - - - - - - - - - - - - - - - - - - - - - S known SMTP partners T Outside domain Top level domains U (local) uucp name (local) uucp nicknames - - - - - - - - - - - - - - - - - - - - - - - - - - V Version number W Local machine with UUCP links uucp sites on $W machine X Known UUCP hosts - - - - - - - - - - - - - - - - - - - - - - - - - - Y other machine with UUCP links UUCP hosts connected to $Y machine Z OZ gateway (munnari) !STUFFY!FUNK! echo Extracting zerobase.m4 cat >zerobase.m4 <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### RULESET ZERO PREAMBLE ##### ##### The beginning of ruleset zero is constant through all ##### configurations. ##### ##### $Header: zerobase.m4,v 5.1 85/10/13 20:46:24 spaf Release $ ##### ############################################################ ############################################################ S0 # first make canonical R$*<$*>$* $1$2$3 defocus R$+ $:$>3$1 make canonical # handle special cases..... R@ $#local$:MAILER-DAEMON handle <> form #R$*<@[$+]>$* $#tcp$@[$2]$:$1@[$2]$3 numeric internet spec # arrange for local names to be fully qualified R$*<$*$=S>$* $1<$2$3.LOCAL>$4 user@etherhost # now delete the local info R$*<$*$=w.LOCAL>$* $1<$2>$4 thishost.LOCAL R$*<$*$=w.$T>$* $1<$2>$4 thishost.ARPA 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 ################################## # End of ruleset zero preamble # ################################## !STUFFY!FUNK! echo Extracting uumail.m4 cat >uumail.m4 <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### UUCP Mailer specification ##### This is for the rerouting mailer on Gatech ##### ##### $Header: uumail.m4,v 5.1 85/10/13 20:46:17 spaf Release $ ##### ############################################################ ############################################################ # use fancy path expanding UUCP frontend. Muucp, P=/usr/lib/mail/uumail, F=sCDFMSU, S=13, R=23, M=65535, A=uumail -f $g $h!$u S13 R$+ $:$>5$1 convert to old style R$=w!$+ $2 strip local name R$*<@$->$* $1<@$2.UUCP>$3 resolve abbreviations R$*<@$*.UUCP>$* $:$>5$1<@$2.UUCP>$3 R$+ $:$U!$1 stick on our host name R$=w!$=R$+ $:$2$3 R$*$=w!$=w$* $1$U$4 S23 R$*<@$-.LOCAL>$* $1<@$2.UUCP>$3 R$*<@$=S>$* $1<@$2.UUCP>$3 resolve abbreviations R$*<@$R.$D.UUCP>$* $1<@$2.UUCP>$3 R$+!$+!$+<@$*.UUCP>$* $2!$3<@$4.UUCP>$5 strip leading sites R$+!$+<@$*.UUCP>$* $:$2<@$1.UUCP>$4 put in right sitename S5 R$+<@$-.LOCAL> $2!$1 u@h.LOCAL => u%h R$+<@$-.UUCP> $2!$1 u@host.UUCP => host!u !STUFFY!FUNK! echo Extracting uucpm.m4 cat >uucpm.m4 <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### UUCP Mailer specification ##### ##### $Header: uucpm.m4,v 5.1 85/10/13 20:46:14 spaf Release $ ##### ############################################################ ############################################################ Muucp, P=/usr/bin/uux, F=sDFMuU, S=13, R=23, M=65535, A=uux - -L -a$f -gC $h!rmail ($u) S13 R$+ $:$>5$1 convert to old style R$=w!$+ $2 strip local name R$*<@$->$* $1<@$2.UUCP>$3 resolve abbreviations R$*<@$*.UUCP>$* $:$>5$1<@$2.UUCP>$3 R$+ $:$U!$1 stick on our host name R$=w!$=R$+ $:$2$3 R$*$=w!$=w$* $1$U$4 S23 R$+ $:$>5$1 convert to old style R$*<@$=S>$* $1<@$2.$D.UUCP>$3 resolve abbreviations R$*<@$R.$D.UUCP>$* $1<@$2.UUCP>$3 S5 R$+<@$-.LOCAL> $1%$2 u@h.LOCAL => u%h R$+<@$-.UUCP> $2!$1 u@host.UUCP => host!u R$+@$+.$=T $1@$2 u@host.ARPA => u@host !STUFFY!FUNK! echo Extracting short3.m4 cat >short3.m4 <<'!STUFFY!FUNK!' ################################################ ### Machine dependent part of ruleset zero ### ### Short version for non-ICS machines on their own common ### ethernet. Forwarding host is "gatech" ### ### $Header: short3.m4,v 5.1 85/10/13 20:46:08 spaf Release $ ################################################ # resolve names that we can handle locally R<@$=W.UUCP>$+ $#uucp$@$1$:$2 @host.UUCP: ... R$+<@$=W.UUCP> $#uucp$@$2$:$1 user@host.UUCP # resolve names that can go via the ethernet R$*<@$*$=S.LOCAL>$* $#ether$@$3$:$1<@$2$3.$D>$4 user@etherhost # other non-local names will be kicked upstairs R$*<@$+>$* $#uucp$@$F$:$1<@$2>$3 user@some.where # remaining names must be local R$+ $#local$:$1 everything else include(uucpm.m4) include(etherm.m4) !STUFFY!FUNK! echo Extracting shortzero.m4 cat >shortzero.m4 <<'!STUFFY!FUNK!' ################################################ ### Machine dependent part of ruleset zero ### ### Short version for ICS machines on common ### ethernet. (NOT "gatech") ### ### $Header: shortzero.m4,v 5.1 85/10/13 20:46:11 spaf Release $ ################################################ # resolve names that we can handle locally R<@$=W.UUCP>$+ $#uucp$@$1$:$2 @host.UUCP: ... R$+<@$=W.UUCP> $#uucp$@$2$:$1 user@host.UUCP # resolve names that can go via the ethernet R$*<@$*$=S.LOCAL>$* $#ether$@$3$:$1<@$2$3.$D>$4 user@etherhost # other non-local names will be kicked upstairs R$*<@$+>$* $#ether$@$F$:$1<@$2>$3 user@some.where # remaining names must be local R$+ $#local$:$1 everything else include(uucpm.m4) include(etherm.m4) !STUFFY!FUNK! echo Extracting cirrus.mc cat >cirrus.mc <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### SENDMAIL CONFIGURATION FILE FOR CIRRUS ##### ##### $Header: cirrus.mc,v 5.1 85/10/13 20:38:11 spaf Release $ ##### ############################################################ ############################################################ ############################################################ ### local info ############################################################ # internet hostname Cwgt-cirrus cirrus Cirrus CIRRUS GT-Cirrus GT-CIRRUS GT-cirrus # UUCP name DUgt-cirrus CUgt-cirrus cirrus include(csether.m4) include(gtbase.m4) include(shortzero.m4) !STUFFY!FUNK! echo Extracting nimbus.mc cat >nimbus.mc <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### SENDMAIL CONFIGURATION FILE FOR NIMBUS ##### ##### $Header: nimbus.mc,v 5.1 85/10/13 20:38:35 spaf Release $ ##### ############################################################ ############################################################ ############################################################ ### local info ############################################################ # internet hostname Cwgt-nimbus nimbus NIMBUS Nimbus GT-Nimbus GT-nimbus GT-NIMBUS # UUCP name DUgt-nimbus CUgt-nimbus nimbus include(csether.m4) include(gtbase.m4) include(shortzero.m4) !STUFFY!FUNK! echo Extracting stratus.mc cat >stratus.mc <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### SENDMAIL CONFIGURATION FILE FOR STRATUS ##### ##### $Header: stratus.mc,v 5.1 85/10/13 20:38:39 spaf Release $ ##### ############################################################ ############################################################ ############################################################ ### local info ############################################################ # internet hostname Cwgt-stratus stratus STRATUS GT-Stratus GT-STRATUS # UUCP name DUgt-stratus CUgt-stratus stratus include(csether.m4) include(gtbase.m4) include(shortzero.m4) !STUFFY!FUNK! echo Extracting gtqo.mc cat >gtqo.mc <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### SENDMAIL CONFIGURATION FILE FOR GTQO ##### ##### $Header: gtqo.mc,v 5.1 85/10/13 20:38:28 spaf Release $ ##### ############################################################ ############################################################ ############################################################ ### local info ############################################################ # internet hostname Cwgtqo # UUCP name DUgtqo CUgtqo gt-qo # Ethernet stuff CS gtss gtqo gt-ss gt-qo include(gtbase.m4) DRgtss CR CRgtss gt-ss DFgtss include(short3.m4) !STUFFY!FUNK! echo Extracting gtss.mc cat >gtss.mc <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### SENDMAIL CONFIGURATION FILE FOR GTSS ##### ##### $Header: gtss.mc,v 5.1 85/10/13 20:38:32 spaf Release $ ##### ############################################################ ############################################################ ############################################################ ### local info ############################################################ # internet hostname Cwgtss # UUCP name DUgtss CUgtss gt-ss # Ethernet stuff CS gtss gtqo gt-ss gt-qo include(gtbase.m4) include(short3.m4) !STUFFY!FUNK! echo Extracting gt-cmmsr.mc cat >gt-cmmsr.mc <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### SENDMAIL CONFIGURATION FILE FOR GT-CMMSR ##### ##### $Header: gt-cmmsr.mc,v 5.1 85/10/13 20:38:25 spaf Release $ ##### ############################################################ ############################################################ ############################################################ ### local info ############################################################ # internet hostname Cwgt-cmmsr cmmsr gtcmmsr # UUCP name DUgt-cmmsr CUgt-cmmsr cmmsr gtcmmsr include(gtbase.m4) include(short2.m4) !STUFFY!FUNK! echo Extracting gitpyr.mc cat >gitpyr.mc <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### SENDMAIL CONFIGURATION FILE FOR GITPYR ##### ##### $Header: gitpyr.mc,v 5.1 85/10/13 20:38:21 spaf Release $ ##### ############################################################ ############################################################ ############################################################ ### local info ############################################################ # internet hostname Cwgitpyr Gitpyr GITPYR # UUCP name DUgitpyr CUgitpyr include(csether.m4) include(gtbase.m4) include(shortzero.m4) !STUFFY!FUNK! echo Extracting short2.m4 cat >short2.m4 <<'!STUFFY!FUNK!' ################################################ ### Machine dependent part of ruleset zero ### ### Short version for non-ICS machines not on ### common ethernet. (e.g., gt-cmmsr) ### ### $Header: short2.m4,v 5.1 85/10/13 20:46:05 spaf Release $ ################################################ # resolve names that we can handle locally R<@$=W.UUCP>$+ $#uucp$@$1$:$2 @host.UUCP: ... R$+<@$=W.UUCP> $#uucp$@$2$:$1 user@host.UUCP # other non-local names will be kicked upstairs R$*<@$+>$* $#uucp$@$F$:$1<@$2>$3 user@some.where # remaining names must be local R$+ $#local$:$1 everything else include(uucpm.m4) !STUFFY!FUNK! echo Extracting csether.m4 cat >csether.m4 <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### ICS Etehernet based hosts using SMTP ##### ##### $Header: csether.m4,v 5.1 85/10/13 20:45:48 spaf Release $ ##### ############################################################ ############################################################ # known SMTP/ethernet hosts (this domain only) -- only $R need be complete CSgatech Gatech CSgitpyr Gitpyr CSgt-nimbus nimbus GT-Nimbus Nimbus CSgt-cirrus GT-Cirrus cirrus Cirrus CSgt-stratus stratus GT-Stratus Stratus !STUFFY!FUNK! echo Extracting localm.m4 cat >localm.m4 <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### Local and Program Mailer specification ##### ##### $Header: localm.m4,v 5.1 85/10/13 20:45:58 spaf Release $ ##### ############################################################ ############################################################ Mlocal, P=/bin/mail, F=rlsDFMmn, S=10, A=mail -d $u Mprog, P=/bin/sh, F=lsDFMe, S=10, A=sh -c $u S10 R@ MAILER-DAEMON errors to mailer-daemon !STUFFY!FUNK! echo Extracting etherm.m4 cat >etherm.m4 <<'!STUFFY!FUNK!' ############################################################ ############################################################ ##### ##### Ethernet Mailer specification ##### ##### $Header: etherm.m4,v 5.1 85/10/13 20:45:52 spaf Release $ ##### ############################################################ ############################################################ Mether, P=[IPC], F=msDFIMuCX, S=11, A=IPC $h S11 R$*<@$+>$* $@$1<@$2>$3 already ok R$+ $@$1<@$w.LOCAL> tack on our hostname !STUFFY!FUNK! echo Extracting version.m4 cat >version.m4 <<'!STUFFY!FUNK!' # $Header: version.m4,v 5.1 85/10/13 20:46:20 spaf Release $ DV5.8.GaTech !STUFFY!FUNK! echo "" echo "End of kit 3 (of 3)" cat /dev/null >kit3isdone config=true for iskit in 1 2 3; do if test -f kit${iskit}isdone; then echo "You have run kit ${iskit}." else echo "You still need to run kit ${iskit}." config=false fi done case $config in true) echo "You have run all your kits. Please read README." ;; esac : I do not append .signature, but someone might mail this. exit