home *** CD-ROM | disk | FTP | other *** search
- Date: Mon, 13 May 85 21:59:59 BST
- From: decvax!mcvax!jimc@ukc.ac.uk
- Subject: UK-1.1 Sendmail Configuration Package. Part 1 of 3
-
-
- # 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:
- # README
- # MAKE
- # Mailers.a
- # Rules.a
- # Support
- # This archive created: Mon May 13 18:37:37 1985
- echo shar: extracting README '(6249 characters)'
- cat << \SHAR_EOF > README
- Scenario
- --------
- This configuration file is designed to handle three basic scenarios:
-
- 1. A single-host site
- 2. A multi-host site with one central host, and a number of satellites
- 3. A multi-host site which is fully distributed, i.e. no central host
-
- As an example, consider a site called "ucs", whose domain name is "ucs.ac.uk".
-
- In case 1, the host name is the same as the site name - "ucs".
-
- In case 2, the central host is called "ucs", and its domain name is
- "ucs.ac.uk". Satellite hosts will be subdomains of "ucs" so,
- for example, a satellite host whose hostname is "vax1" will
- have domain name "vax1.ucs.ac.uk"
- Mail sent to user@ucs would always be sent to the central machine
- (where it may be aliased to be delivered at a satellite).
-
- In case 3, All hosts are like satellites in that they are all subdomains
- of "ucs" (there is no host called "ucs").
- Mail to user@ucs will be either aliased to a specific host or
- delivered locally. (The same alias file can be distributed
- to all machines.)
- From the outside, all hosts will appear as one host - "ucs".
-
- Mailers
- -------
- The following mailers are supported:
-
- local the standard unix local mailer
- ether mail over the ethernet
- luucp local uucp mail (uses domain addressing)
- uucp external uucp mail
- janet janet mail, using hhcp
- bitnet bitnet mail, using rscs
-
-
- Addresses
- ---------
- This configuration file accepts addresses in any of the standard forms:
-
- RFC822 style: @domain1,@domain2:user@domain3
- Percent style: user%domain3%domain2@domain1
- UUCP style: domain1!domain2!domain3!user
-
- (If you define the Janet mailer then JNT style with big-endian domain name
- ordering is also understood).
-
- Mixed addresses are handled by using the precedence order '@' > '%' > '!'
- e.g. domc!user%domb@doma => user%domc%domb@doma <=> doma!domb!domc!user
-
-
- Configuration Overview
- ----------------------
- These address forms are converted in ruleset 3 to one internal form - which
- is Percent style. The rulesets 5 and 6 are then called which expands
- incomplete domain names and aliases into full domain names.
-
- The routing rule, ruleset 9, called from ruleset 0, converts this domain form
- to an <address>host.network triple from which the appropriate mailer is
- selected in ruleset 0.
-
- Meanwhile the mailer specific rulesets convert the header addresses returned
- by ruleset 3 into the appropriate form for the mailer.
-
-
- Files
- -----
- The configuration file is generated from a set of m4 files:
- Site independent:
- base.m4 Defines special macros, options and headers etc.
- version.m4 Gives the version number and history
- rules.m4 Defines the standard rulesets
- rules1.m4 Defines rulesets to do address conversions
- <mailer>m.m4 Mailer specifications - one for each of the above
- mailers
-
- Site dependent:
- <site>.dom Defines the domain tables for the site
-
- Host dependent:
- <host>.mc This defines some macros and reads everything else in.
- <host>.chn This specifies all the routing information for
- non-local mail
-
-
- Installation
- ------------
- 1. Decide what your host, site and domain names are for this host.
-
- 2. Then run "MAKE".
-
- This creates a directory containing all the rules and mailer m4 files
- required for this configuration and creates the <host>.mc file.
-
- MAKE will first ask for your host, site and domain names. If the host
- and site names are the same then MAKE assumes that this is either a
- single host site (case 1) or the central machine of multi-host site
- (case 2); if they are different then MAKE asks if there is a central
- host for this site (case 2); if there isn't it assumes this a distributed
- multi-host site (case 3).
-
- MAKE will then prompt for the mailers to include in the configuration,
- and then it creates all the files.
-
- 3. "cd" to directory dom.
- Here you must setup the domain tables from which the <site>.dom file
- is generated.
-
- There is only one of these per site, so if you have already done this
- on another host, just copy the tables to this host.
-
- More details are found in the README contained in the "dom" directory.
-
- 4. "cd" to directory chn
- Here you must setup the channel tables which give all the routing
- information from which the <host>.chn file is generated.
-
- More details are found in the README contained in the "chn" directory.
-
- 5. "cd" to the <host> directory.
- Run "make" to produce the <host>.cf file.
- This can be tested by using "sendmail -bt -C<host>.cf" - if you haven't
- used this before then see the sendmail documentation for details.
-
- Also check that the mailer specification files have the correct
- pathnames and options to the mailers, particularly the local mailer!
-
- 6. As superuser, run "make install" to install this. If you have a
- sendmail daemon running (typically: /usr/lib/sendmail -bd -q1h),
- then kill it and start a new one.
-
-
- Running shared configuration files
- ----------------------------------
- In the case where (satellite) hosts have the same routing information
- and mailers to mail to other hosts, they can use the same configuration
- file. To to this, run "MAKE" for one host, then edit the "DOMAIN"
- definition in the resulting ".mc" file replacing the hostname with "$w".
- e.g.
- define(`DOMAIN',`$w.usc.ac.uk')
-
- Run make and copy the resulting configuration file to all appropriate hosts.
-
-
- Support programs
- ----------------
- The Support directory contains programs that interface with sendmail.
- More details are found in the README in the "Support" directory.
-
-
- Aliases
- -------
- A type 3 site can use a common aliases file on all hosts containing
- a list of users and the host addresses to which they wish their mail
- to be delivered to, e.g.
-
- jim: jim@vax1
- fred: fred@vax2
-
- Addresses of the form "user", "user@host" and "user@site" are all subject
- to possible aliasing. In the "usc" example, "jim@vax2" will be sent to vax2.
- If the aliases file on vax2 contains the above entries then the mail will
- be delivered on vax1 (or aliased again).
-
- Aliasing can be overridden by prepending a '~' to the user, so "~jim@vax2"
- will be delivered on vax2.
-
-
-
- --------
- Mail bugs and comments to: jim@hwcs.uucp (hwcs!jim)
- soon to be: jim@cs.hw.ac.uk
-
- -Jim Crammond 22.4.85
- SHAR_EOF
- if test 6249 -ne "`wc -c README`"
- then
- echo shar: error transmitting README '(should have been 6249 characters)'
- fi
- echo shar: extracting MAKE '(3263 characters)'
- cat << \SHAR_EOF > MAKE
- #!/bin/sh
-
- echo 'Sendmail initial configuration program UK-1.1
- '
-
- ether=
- uucp=
- janet=
- bitnet=
-
- #
- # site dependant information information about names and mailers
- #
- host=`(hostname) 2> /dev/null || (uuname -l) 2> /dev/null`
- site=$host
-
- echo -n "Enter name of host ($host): "
- read reply
- if [ "$reply" != "" ]
- then
- host=$reply
- fi
-
- echo -n "Enter name of site ($site): "
-
- read reply
- if [ "$reply" != "" ]
- then
- site=$reply
- fi
-
- if [ $site = $host ]
- then
- echo -n "Complete host domain name: $host."
- read domain
- domain=$host.$domain
- else
- echo -n "Complete host domain name: $host.$site."
- read domain
- domain=$site.$domain
- echo -n "Is there a host \"$site\" in domain \"$domain\"? (y|n) "
- read reply
- if [ "$reply" != 'y' ]
- then
- multihost=true
- else
- domain=$host.$domain
- fi
- fi
-
- echo -n "
- Site name = $site, Host name = $host, Domain name = $domain
- confirm? (y|n) "
-
- read reply
- if [ "$reply" != 'y' ]
- then
- echo 'Start again'
- exit 1
- fi
-
- echo "
- A list of available mailer configurations will follow
- type 'y' at the prompt to include the specified mailer.
- "
-
- echo -n "ethernet? "
- read reply
- if [ "$reply" = 'y' ]; then ether=etherm.m4; fi
-
- echo -n "uucp? "
- read reply
- if [ "$reply" = 'y' ]
- then
- uucp="luucpm.m4 uucpm.m4";
- uucpname=`uuname -l`
- echo -n "Enter uucp name ($uucpname): "
- read reply
- if [ -n "$reply" ]
- then
- uucpname=$reply
- fi
- fi
-
- echo -n "janet? "
- read reply
- if [ "$reply" = 'y' ]; then janet=hhcpm.m4; fi
-
- echo -n "bitnet? "
- read reply
- if [ "$reply" = 'y' ]; then bitnet=bitnetm.m4; fi
-
- #
- # now start creating the files
- #
- echo -n "
- Making directory $host... "
- if mkdir $host
- then
- cd $host
- else
- echo mkdir failed, aborted
- exit 1
- fi
-
- echo -n '
- creating rules... '
- ar x ../Rules.a
- echo -n '
- creating mailers... '
- ar x ../Mailers.a localm.m4 $ether $uucp $janet $bitnet
-
- echo -n '
- creating Makefile... '
- cat >Makefile <<EOF
- #######################################################################
- #
- # Makefile for Sendmail configuration files
- #
- # @(#)Makefile UK-1.1 sendmail configuartion 22/4/85
- #
- #######################################################################
- HOST=$host
- SITE=$site
- RULES=base.m4 rules.m4 rules1.m4 version.m4
- MAILERS=localm.m4 $ether $uucp $janet $bitnet
-
- EOF
-
- cat >>Makefile <<'EOF'
- .SUFFIXES: .mc .cf
-
- .mc.cf:
- m4 $*.mc > $*.cf
-
- $(HOST).cf: $(RULES) $(MAILERS) $(SITE).dom $(HOST).chn
-
- $(SITE).dom: ../dom/$(SITE).dom
- cp ../dom/$(SITE).dom $(SITE).dom
-
- $(HOST).chn: ../chn/$(HOST).chn
- cp ../chn/$(HOST).chn $(HOST).chn
-
- install: $(HOST).cf
- sed -e '/^#/d' -e '/^$$/d' $(HOST).cf > /usr/lib/sendmail.cf
- -if [ -f /usr/lib/sendmail.fc ]; then /usr/lib/sendmail -bz; fi
- EOF
-
- echo -n "
- creating $host.mc... "
- cat >$host.mc <<EOF
- define(\`HOST',\`$host')
- define(\`SITE',\`$site')
- define(\`DOMAIN',\`$domain')
- EOF
-
- if [ -n "$multihost" ]
- then
- echo "define(\`MULTIHOST')" >> $host.mc
- fi
-
- if [ -n "$ether" ]
- then
- echo "define(\`ETHER')" >> $host.mc
- fi
-
- if [ -n "$uucp" ]
- then
- echo "define(\`UUCPNAME',\`$uucpname')" >> $host.mc
- fi
-
- if [ -n "$janet" ]
- then
- echo "define(\`JANET')" >> $host.mc
- fi
-
- if [ -n "$bitnet" ]
- then
- echo "define(\`BITNET')" >> $host.mc
- fi
-
- echo 'include(base.m4)' >> $host.mc
-
- echo "
- Initial configuration complete.
-
- You now have to make the $site.dom and $host.chn files.
- "
-
- exit
- SHAR_EOF
- if test 3263 -ne "`wc -c MAKE`"
- then
- echo shar: error transmitting MAKE '(should have been 3263 characters)'
- fi
- echo shar: extracting Mailers.a '(5816 characters)'
- cat << \SHAR_EOF > Mailers.a
- !<arch>
- bitnetm.m4 483046164 217 10 100644 1384 `
- ###############################################################################
- ###############################################################################
- #####
- ##### Bitnet Mailer specification
- #####
- ##### @(#)bitnetm.m4 UK-1.1 sendmail configuration 22/4/85
- #####
- ###############################################################################
- ###############################################################################
-
- Mbitnet, P=/usr/bin/vmcopy, F=SnsFDMR, S=22, R=22,
- A=vmcopy $u@$h class=M fname=MAILER ftype=MAIL width=80 device=PUNCH
-
- S22
-
- #
- # Bitnet can only cope with user@host.bitnet i.e. no subdomains
- # therefore strip off any that exist
- #
-
- R$+@$=A.$j $@$1@$j strip off any local hostname
- R$+@$+ $@$1@$2 return user@domain
- R$+ $@$1@$j add local domain name
-
-
- ##################################################################
- #####
- ##### Arpa Mail Via Batched Simple Mail Transfer Protocol
- #####
- ##################################################################
-
- Mbarpa, P=/usr/lib/rscs/bsmtp, F=SnsFDMRX, S=22, R=22,
- A=bsmtp%mail $j $g $u $h
-
-
- ##################################################################
- #####
- ##### Uucp Mail Via Batched Simple Mail Transfer Protocol
- #####
- ##################################################################
-
- Mbuucp, P=/usr/lib/rscs/bsmtp, F=SnsFDMRuhX, S=22, R=22, M=100000,
- A=bsmtp%mail $j $g $u $h
- etherm.m4 483046164 217 10 100644 557 `
- ###############################################################################
- ###############################################################################
- #####
- ##### Ethernet Mailer specification
- #####
- ##### @(#)etherm.m4 UK-1.1 sendmail configuration 22/4/85
- #####
- ###############################################################################
- ###############################################################################
-
- Mether, P=[IPC], F=nsmFDMRuXC, S=17, R=15, A=IPC $h
-
- S17
- R$+@$+ $@$1@$2 address ok
- R$+ $@$1@$w add local hostname
-
- hhcpm.m4 483046164 217 10 100644 703 `
- ###############################################################################
- ###############################################################################
- #####
- ##### Janet Mailer specification
- #####
- ##### @(#)hhcpm.m4 UK-1.1 sendmail configuration 22/4/85
- #####
- ###############################################################################
- ###############################################################################
-
- Mhhcp, P=/usr/lib/x25/hhsend, F=nsmFDMxVh, S=21, R=21, M=100000,
- A=hhsend $h $u
-
- S21
- ifdef(`MULTIHOST',
- `R$+@$=A.$j $1@$j strip local hostname')
- R$+@$+ $@$>14$1@$2 RFC822 -> NRS style
-
- R$+ $:$1@$j user -> user@mydomain
- R$+@$+ $@$>14$1@$2 RFC822 -> NRS style
-
- localm.m4 483046164 217 10 100644 1155 `
- ###############################################################################
- ###############################################################################
- #####
- ##### Local and Program Mailer specification
- #####
- ##### @(#)localm.m4 UK-1.1 sendmail configuration 22/4/85
- #####
- ###############################################################################
- ###############################################################################
-
- Mlocal, P=/bin/mail, F=rnlsmFDMR, S=16, R=16, A=mail -d $u
- Mbinmail, P=/bin/mail, F=rnlsmFDMR, S=16, R=16, A=mail -d $u
- Mprog, P=/bin/sh, F=nlsFDMR, S=16, R=16, A=sh -c $u
-
- #
- # The important thing here is to keep a valid reply path!
- # Apparent uucp addresses are converted back to old style so that
- # ucb-mail can cope with replies. Otherwise the domain is just stripped.
- #
- S16
-
- R@ MAILER-DAEMON errors to mailer-daemon
- R~$+ $1 remove '~' in To: line
-
- R$+@$+ $:$>7$1@$2 strip domain addresses
-
- # we assume an address is a uucp address if it contains more than two
- # hostnames (as opposed to domain names). This is not always right..
- R$+%$-%$-@$+ $@$>13$1%$2%$3@$4 convert to uucp address
-
- luucpm.m4 483046164 217 10 100644 588 `
- ###############################################################################
- ###############################################################################
- #####
- ##### Local UUCP Mailer specification
- #####
- ##### @(#)luucpm.m4 UK-1.1 sendmail configuration 22/4/85
- #####
- ###############################################################################
- ###############################################################################
-
- Mluucp, P=/usr/bin/uux, F=smFDMRuh, S=18, R=18, M=100000,
- A=uux - $h!rmail ($u)
-
- S18
- R$+@$+ $@$1@$2 address ok
- R$+ $@$1@$w add local hostname
- uucpm.m4 483046164 217 10 100644 1057 `
- ###############################################################################
- ###############################################################################
- #####
- ##### UUCP Mailer specification
- #####
- ##### @(#)uucpm.m4 UK-1.1 sendmail configuration 22/4/85
- #####
- ###############################################################################
- ###############################################################################
-
- Muucp, P=/usr/bin/uux, F=sFDMRuh, S=19, R=20, M=100000,
- A=uux - -r -gA $h!rmail ($u)
-
- #
- # Addresses are converted back to uucp style.
- # We need to do this to generate a valid Unix From line.
- # However this invalidates the From: line in the header, which should be
- # in 822 format - strictly speaking. Sendmail won't let you do this!
- #
- S19
- R$+@$+ $:$>13$1@$2 convert to uucp style
- ifdef(`MULTIHOST',
- `R$=A.$j!$+ $2 strip local hostnames')
- R$+!$+ $@$1!$2 address ok
- R$+ $@$j!$1 add local domain name
-
- #
- # To: line is handled normally
- #
- S20
- R$+@$+ $@$1@$2 address ok
- R$+ $@$1@$j add local domain name
-
- SHAR_EOF
- if test 5816 -ne "`wc -c Mailers.a`"
- then
- echo shar: error transmitting Mailers.a '(should have been 5816 characters)'
- fi
- echo shar: extracting Rules.a '(11204 characters)'
- cat << \SHAR_EOF > Rules.a
- !<arch>
- base.m4 483183564 217 10 100644 2953 `
- ##################################################################
- ##################################################################
- #####
- ##### SENDMAIL CONFIGURATION FILE UK-1.1
- #####
- ##### Copyright Jim Crammond, Heriot-Watt University. Apr. 1985.
- #####
- ##### This configuration file maybe be freely distributed,
- ##### provided no profit is gained by doing so.
- #####
- ##################################################################
- ##################################################################
-
- ##################################################################
- `###' HOST configuration file
- ##################################################################
-
- # domain name
- Dj`'DOMAIN
-
- # uucp hostname
- ifdef(`UUCPNAME',DU`'UUCPNAME)
-
- ############################################################
- #
- # General configuration information
- #
- ############################################################
-
- include(version.m4)
-
- ##########################
- ### Special macros ###
- ##########################
-
- # my name
- DnMAILER-DAEMON
- # UNIX header format
- DlFrom $g $d remote from $U
- # delimiter (operator) characters (note '~' has been added)
- Do.:%@!^=/[]~
- # format of a total name
- Dq$?x$x $.<$g>
- # SMTP login message
- ifdef(`MULTIHOST',
- `De$w.$j Sendmail $v/$V ready at $b',`De$j Sendmail $v/$V ready at $b')
-
- ###################
- ### Options ###
- ###################
-
- # location of alias file
- OA/usr/lib/aliases
- # default delivery mode (deliver in background)
- Odbackground
- # (don't) connect to "expensive" mailers
- #Oc
- # temporary file mode
- OF0644
- # default GID
- Og1
- # location of help file
- OH/usr/lib/sendmail.hf
- # log level
- OL9
- # default messages to old style
- Oo
- # queue directory
- OQ/usr/spool/mqueue
- # read timeout -- violates protocols
- Or2h
- # status file
- OS/usr/lib/sendmail.st
- # queue up everything before starting transmission
- # Os
- # default timeout interval
- OT3d
- # time zone names (V6 only)
- # OtGMT,BST
- # default UID
- Ou1
- # wizard's password
- OWz3GvK.dPUxieQ
-
- ###############################
- ### Message precedences ###
- ###############################
-
- Pfirst-class=0
- Pspecial-delivery=100
- Pjunk=-100
-
- #########################
- ### Trusted users ###
- #########################
-
- Troot
- Tdaemon
- Tuucp
- Tjim
-
- #############################
- ### Format of headers ###
- #############################
-
- H?F?From: $q
- H?D?Date: $a
- H?F?Resent-From: $q
- H?D?Resent-Date: $a
- HSubject:
- ifdef(`MULTIHOST',
- `H?R?Received: $?sfrom $s by $w.$j; $b$.',`H?R?Received: $?sfrom $s by $j; $b$.')
- H?V?Via: $?s$s; $b$.
-
-
- ##########################
- ### The Rulesets ###
- ##########################
- include(rules.m4)
- include(rules1.m4)
- include(SITE.dom)
- include(HOST.chn)
-
- #########################
- ### The Mailers ###
- #########################
- include(localm.m4)
- ifdef(`ETHER',`include(etherm.m4)')
- ifdef(`UUCPNAME',`include(luucpm.m4)')
- ifdef(`UUCPNAME',`include(uucpm.m4)')
- ifdef(`JANET',`include(hhcpm.m4)')
- ifdef(`BITNET',`include(bitnetm.m4)')
-
- rules.m4 484580248 217 10 100644 3178 `
- ###############################################################################
- ###############################################################################
- #####
- ##### @(#)rules.m4 UK-1.1 sendmail configuration 22/4/85
- #####
- ##### The rulesets
- #####
- ###############################################################################
- ###############################################################################
-
- ###############################################
- # Ruleset 0 -- Select mailer to be used #
- ###############################################
- S0
-
- # local domain - redo with local part of address
- R$+@$j $>3$1
- ifdef(`MULTIHOST',`R$+@$w.$j $>3$1')
-
- # local mail
- R$- $#local$:$1 local mail - maybe aliased
- R~$- $#binmail$:$1 local mail - no aliasing
-
- #
- # convert domain address into "<address>host.network" triple
- #
- R$+@$+.$=T $:$>9$1@$2.$3 routing and address conversion
-
- # select mailer
- ifdef(`ETHER',`
- R<$+>$-.ether $#ether$@$2$:$1 local ethernet mail
- ')
- ifdef(`UUCPNAME',`
- R<~$+>$+.luucp <\\~$1>$2.luucp band-aid for uuxqt
- R<~$+>$+.uucp <\\~$1>$2.uucp band-aid for uuxqt
- R<$+>$-.luucp $#luucp$@$2$:$1 local uucp mail
- R<$+>$-.uucp $#uucp$@$2$:$1 external uucp mail
- ')
- ifdef(`JANET',`
- R<$+>$+.janet $#hhcp$@$2$:$1 janet mail
- ')
- ifdef(`BITNET',`
- R<$+>$-.bitnet $#bitnet$@$2$:$1 bitnet mail
- R<$+>$+.barpa $#barpa$@$2$:$1 arpa mail via bitnet
- R<$+>$+.buucp $#buucp$@$2$:$1 uucp mail via bitnet
- ')
-
- # anything else with an '@' in is an error
- R$+@$+ $#error$:Domain Unknown
-
- # anything else - e.g. filenames, pipes etc goes to local mailer
- R$+ $#local$:$1 local
-
-
- ###############################################
- # Ruleset 1 -- Sender Field Pre-rewriting #
- ###############################################
- S1
-
-
- ##################################################
- # Ruleset 2 -- Recipient Field Pre-rewriting #
- ##################################################
- S2
-
-
- ##########################################
- # Ruleset 3 -- Name Canonicalisation #
- ##########################################
- S3
-
- # handle special cases
- R$- $@$1 return "user"
- R~$- $@~$1 return "~ user"
- R<> $@@ turn null into magic token
-
- # basic textual canonicalisation
- R$*<$*>$* $2 basic RFC 822 parsing
- R$+ at $+ $1@$2 " at " -> "@" for RFC 822
- R$+%$+ $1@$2 convert '%'s to '@'s
- R$+@$+@$+ $1%$2@$3 then reduce to only one '@'
-
- # Address conversions. See rules1.m4 for the gory details
- R@$+:$+ $:$>10@$1:$2 RFC822 to Percent form
- R$+!$+ $:$>12$1!$2 uucp to Percent form
-
- ifdef(`JANET',`
- R$+@$+.$+ $:$>8$1@$2.$3 NRS ordering to 822 ordering
- ')
-
- `#' Domain name expansion. See SITE`'.dom for the details
- R$+@$+ $:$>5$1@$2 do domain name aliases
- R$+@$+ $:$>6$1@$2 expand incomplete domain names
-
-
- ###############################################
- # Ruleset 4 -- Final Output Post-rewriting #
- ###############################################
-
- # header rewriting is done in the per-mailer rulesets.
-
- S4
- R@ $@ handle <> error addr
- R$+@$+ $@$1@$2 already ok
-
- # this ensures that $u has at least one '@' in (if percent style)
- R$+%$+ $1@$2 convert '%'s to '@'s
- R$+@$+@$+ $1%$2@$3 then reduce to only one '@'
- rules1.m4 484852372 217 10 100644 3357 `
- ###############################################################################
- ###############################################################################
- #####
- ##### @(#)rules1.m4 UK-1.1 sendmail configuration 22/4/85
- #####
- ##### The rulesets
- #####
- ###############################################################################
- ###############################################################################
-
-
- #########################################################
- # Ruleset 10 -- RFC source routing -> Percent style #
- #########################################################
-
- #
- # convert a routed address in RFC822 form to Percent form
- # e.g. @ucl-cs.arpa,@kcl-cs.uucp:jim@hwcs.uucp ->
- # jim%hwcs.uucp%kcl-cs.uucp@ucl-cs.arpa
- #
- S10
-
- R$+,$+ $1:$2 @a,@b,@c:u%d -> @a:@b:@c:u%d
- R$*@$* $1%$2 @a:@b:@c:u@d -> %a:%b:%c:u%d
-
- R%$+:$+ $:$2@$1 %a:%b:%c:u%d -> %b:%c:u%d@a
- R%$+:$+@$+ $2@$1@$3 %b:%c:u%d@a -> u%d@c@b@a
- R$+@$+@$+ $1%$2@$3 u%d@c@b@a -> u%d%c%b@a
-
- ###############################################################
- # Ruleset 11 -- Percent style source routing -> RFC style #
- ###############################################################
-
- #
- # convert a routed address in the Percent form to RFC822 form
- # e.g. jim%hwcs.uucp%kcl-cs.uucp@ucl-cs.arpa ->
- # <@ucl-cs.arpa,@kcl-cs.uucp:jim@hwcs.uucp>
- #
- S11
-
- R$+@$+ $1%$2 u%d%c%b@a -> u%d%c%b%a
- R$+%$+%$+ $:@$3:$1@$2 u%d%c%b%a -> @c%b%a:u@d
- R$+%$+:$+ @$2:$1:$3 @c%b%a:u%d -> @a:@b:@c:u@d
- R$+:$+:$+ $1,$2:$3 @a:@b:@c:u@d -> @a,@b,@c:u@d
- R@$+ $@<@$1> @a,@b,@c:u@d -> <@a,@b,@c:u@d>
-
- ################################################################
- # Ruleset 12 -- uucp style source routing -> Percent style #
- ################################################################
-
- #
- # convert an address in uucp form to Percent form
- # e.g. kcl-cs.uucp!hwcs.uucp!jim -> jim%hwcs.uucp@kcl-cs.uucp
- #
- # also converts mixed addresses, giving '@' and '%' priority over '!'
- # e.g. hwcs!jim%kcl-cs.uucp@ucl-cs.arpa -> jim%hwcs%kcl-cs.uucp@ucl-cs.arpa
- #
- S12
-
- # handle mixed addresses (with '!'s, '@'s and maybe '%'s in)
- R$+!$+%$+ $1!$2@$3 c!d!u%b@a -> c!d!u@b@a
- R$+!$+@$+ $2@$1@$3 c!d!u@b@a -> u@d@c@b@a
-
- # handle pure uucp addresses
- R$+!$+ $:$2@$1 a!b!c!d!u -> b!c!d!u@a
- R$+!$+@$+ $2@$1@$3 b!c!d!u@a -> u@d@c@b@a
-
- R$+@$+@$+ $1%$2@$3 u@d@c@b@a -> u%d%c%b@a
-
- ################################################################
- # Ruleset 13 -- Percent style to uucp style source routing #
- ################################################################
-
- #
- # convert a Percent style address to uucp (domain1!domain2!user) form
- # e.g. jim%hwcs.uucp@kcl-cs.uucp -> kcl-cs.uucp!hwcs.uucp!jim
- #
- S13
-
- R$+%$+ $1@$2 u%d%c%b@a -> u@d@c@b@a
- R$+@$+ $:$2!$1 u@d@c@b@a -> d@c@b@a!u
- R$+@$+!$+ $2!$1!$3 d@c@b@a!u -> a!b!c!d!u
-
- ifdef(`JANET',`
- ######################################################
- # Ruleset 14 -- NRS <-> RFC822 domain conversion #
- ######################################################
-
- #
- # swap the order of the sub-domains around.
- # e.g. steve@uk.ac.ucl-cs.44d => steve@44d.ucl-cs.ac.uk
- #
- # this assumes that no colons will appear in the rhs of the domain address
- #
- S14
-
- R$*@$+.$+ $1@$2:$3 u@a.b.c.d -> u@a:b:c:d
- R$*@$-:$+ $:$1@$3.$2 u@a:b:c:d -> u@b:c:d.a
- R$*@$-:$+.$+ $1@$3.$2.$4 u@b:c:d.a -> u@d.c.b.a
- ')
-
- version.m4 484578324 217 10 100644 1466 `
- #
- # @(#)version.m4 UK-1.1 sendmail configuration 22/4/85
- #
-
- DVUK-1.1
-
- #
- # UK-1.1 22/4/85 jim
- # COMMENTS:
- # Changed janet rules in ruleset 3 to cope properly with domain expansion.
- # Changed output of ruleset 9 (channel ruleset) so that ruleset 0
- # can parse multiple-token hostnames. Support files for janet added.
- # Renamed janet mailer to "hhcp". Added 'n' mailer flag to prog mailer.
- # Added ruleset 8 to detect and convert NRS style domains to 822 style.
- #
- # UK-1.0 26/3/85 jim
- # COMMENTS:
- # Some rearranging. Removed ruleset 8 (path optimisation) as it
- # optimised munged addresses away completely!
- # Ruleset 4 ensures an '@' in Percent style address.
- # Uucp ruleset rewritten to get as close to the uucp transmission
- # standard as sendmail allows.
- #
- # HW-5.1 1/3/85 jim
- # COMMENTS:
- # Fixed bug with mailing to filenames. Other cleanup for
- # distribution version.
- #
- # HW-5.0 26/2/85 jim
- # COMMENTS:
- # major restructuring: rewrote ruleset 3 which now converts
- # all addresses to one style. Added bitnet mailer and ether mailer
- # Rewrote all the mailer specs. Various other cleanups.
- #
- #
- # HW-4.3 10/1/85 jim
- # COMMENTS:
- # Cope with rfc822 style routing and renumber some rulesets
- #
- # HW-4.2 4/1/85 jim
- # COMMENTS:
- # Put in janet mailer definitions and rules
- #
- # HW-4.1 17/12/84 jim
- # COMMENTS:
- # Some modifications and cleanup for distribution
- #
- # HW-4.0 5/12/84 jim
- # COMMENTS:
- # This is a complete rewrite based on some ideas borrowed from
- # mmdf.
- #
- SHAR_EOF
- if test 11204 -ne "`wc -c Rules.a`"
- then
- echo shar: error transmitting Rules.a '(should have been 11204 characters)'
- fi
- echo shar: creating directory Support
- mkdir Support
- chdir Support
- echo shar: extracting rmail.c '(3690 characters)'
- cat << \SHAR_EOF > rmail.c
- #ifndef lint
- static char sccsid[] = "@(#)rmail.c 4.4 (Berkeley) 8/11/83";
- #endif
-
- /*
- ** RMAIL -- UUCP mail server.
- **
- ** This program reads the >From ... remote from ... lines that
- ** UUCP is so fond of and turns them into something reasonable.
- ** It calls sendmail giving it a -f option built from these
- ** lines.
- **
- ** Modified to set the sender's hostname (deduced from first
- ** "remote from host" line) and convert the final "user" part
- ** from an address with '@' and '%' (which mmdf is so fond of)
- ** in to a 'pure' uucp address. -Jim Crammond, (hwcs!jim) 29/11/84
- */
-
- # include <stdio.h>
- # include <sysexits.h>
-
- typedef char bool;
- #define TRUE 1
- #define FALSE 0
-
- extern FILE *popen();
- extern char *index();
- extern char *rindex();
- char *conv_at();
-
- bool Debug;
-
- # define MAILER "/usr/lib/sendmail"
-
- main(argc, argv)
- char **argv;
- {
- FILE *out; /* output to sendmail */
- char lbuf[512]; /* one line of the message */
- char from[512]; /* accumulated path of sender */
- char ufrom[64]; /* user on remote system */
- char sys[64]; /* a system in path */
- char sysname[64]; /* system received from */
- char cmd[2000];
- register char *cp;
- register char *uf; /* ptr into ufrom */
- int firstline = 1;
- int i;
-
- # ifdef DEBUG
- if (argc > 1 && strcmp(argv[1], "-T") == 0)
- {
- Debug = TRUE;
- argc--;
- argv++;
- }
- # endif DEBUG
-
- if (argc < 2)
- {
- fprintf(stderr, "Usage: rmail user ...\n");
- exit(EX_USAGE);
- }
-
- (void) strcpy(from, "");
- (void) strcpy(sysname, "");
- (void) strcpy(ufrom, "/dev/null");
-
- while (fgets(lbuf, sizeof lbuf, stdin) != NULL)
- {
- if (strncmp(lbuf, "From ", 5) != 0 && strncmp(lbuf, ">From ", 6) != 0)
- break;
- (void) sscanf(lbuf, "%*s %s", ufrom);
- cp = lbuf;
- uf = ufrom;
-
- while ((cp = index(cp, 'r')) != NULL)
- {
- #ifdef DEBUG
- if (Debug)
- printf("cp='%s'\n", cp);
- #endif
- if (sscanf(cp, "remote from %s", sys) == 1)
- { (void) strcat(from, sys);
- (void) strcat(from, "!");
- if (firstline)
- (void) strcpy(sysname, sys);
- break;
- }
- cp++;
- }
- #ifdef DEBUG
- if (Debug)
- printf("ufrom='%s', sys='%s', from now '%s'\n", uf, sys, from);
- #endif
- firstline = 0;
- }
- (void) strcat(from, conv_at(uf));
-
- (void) sprintf(cmd, "%s -em -f%s", MAILER, from);
- if (*sysname != '\0')
- { (void) strcat(cmd, " -oMs");
- (void) strcat(cmd, sysname);
- }
-
- while (*++argv != NULL)
- {
- (void) strcat(cmd, " '");
- if (**argv == '(')
- (void) strncat(cmd, *argv + 1, strlen(*argv) - 2);
- else
- (void) strcat(cmd, *argv);
- (void) strcat(cmd, "'");
- }
- #ifdef DEBUG
- if (Debug)
- printf("cmd='%s'\n", cmd);
- #endif
- out = popen(cmd, "w");
- fputs(lbuf, out);
- while (fgets(lbuf, sizeof lbuf, stdin))
- fputs(lbuf, out);
- i = pclose(out);
- if ((i & 0377) != 0)
- {
- fprintf(stderr, "pclose: status 0%o\n", i);
- exit(EX_OSERR);
- }
-
- exit((i >> 8) & 0377);
- }
-
- /*
- ** CONV_AT -- converts an address with 'at' symbols in to uucp style
- **
- ** This converts addresses such as a%b%c@d to d!c!b!a style
- ** so that when the path deduced from the "remote from" lines is
- ** prepended, the address might still be valid.
- ** If a domain contains ".uucp" or ".UUCP" this gets stripped.
- ** e.g. c!user%b.uucp@a.uucp -> a!b!c!user
- ** user%d.dec%c.arpa%b.uucp@a.uucp -> a!b!c.arpa!d.dec!user
- */
- char *
- conv_at(addr)
- char *addr;
- {
- char buf[512];
- char *bp = buf;
- char *p;
-
- #ifdef DEBUG
- if (Debug)
- printf("conv_at(%s) ", addr);
- #endif
- while ((p = rindex(addr,'@')) != NULL || (p = rindex(addr,'%')) != NULL)
- {
- *p++ = '\0';
- while (*p)
- {
- if (strcmp(p, ".uucp") == 0 || strcmp(p, ".UUCP") == 0)
- break;
-
- *bp++ = *p++;
- }
- *bp++ = '!';
- }
-
- strcpy(bp, addr);
- #ifdef DEBUG
- if (Debug)
- printf("returns %s\n", buf);
- #endif
- return(buf);
- }
- SHAR_EOF
- if test 3690 -ne "`wc -c rmail.c`"
- then
- echo shar: error transmitting rmail.c '(should have been 3690 characters)'
- fi
- echo shar: extracting damail.c '(3233 characters)'
- cat << \SHAR_EOF > damail.c
- /*
- * rscs to sendmail mail interface
- * invoked by the rscs master control daemon when a file with filetype MAIL
- * is received over BITNET.
- *
- * The syntax is
- * damail <mailfile> <fromsys> <fromuser> <tosys> <touser>
- *
- *
- * Bill Nesheim
- * Cornell U Dept of Computer Science
- * August, 1983
- *
- * Rewritten by Jim Crammond
- * Weizmann Institute
- * Feb 1985
- */
-
- #include <stdio.h>
- #include <sys/file.h>
- #include <sys/wait.h>
- #include <sysexits.h>
- #include "../common/rscs.h"
- #include "../common/daemon.h"
-
- #define MAILLOG "/usr/lib/rscs/maillog"
-
- main(ac,av)
- int ac;
- char **av;
- {
- FILE *mail, *outfile, *log;
- char line[BUFSIZ], From[BUFSIZ], To[BUFSIZ];
- char sender[20];
- char *actime, *err;
- long tm, time();
- int loc, smpid, ppe[2];
- union wait status;
-
- if(ac < 2) {
- logerror("DAMAIL: No Mail File??");
- return(TRUE);
- }
-
- if((log = fopen(MAILLOG, "a")) == (FILE *)NULL) {
- logerror("Can't open mail log file!");
- return(FALSE);
- }
-
- if((mail = fopen(av[1],"r")) == (FILE *)NULL) {
- sprintf(line,"MTU: Can't open %s", av[1]);
- logerror(line);
- return(FALSE);
- }
-
- /* apparent source */
- sprintf(From,"%s@%s.BITNET", av[3], av[2]);
- /* apparent destination */
- sprintf(To,"%s@%s.BITNET", av[5], av[4]);
-
- /* sender flag to sendmail */
- convlower(av[2]);
- sprintf(sender,"-oMs%s.bitnet", av[2]);
-
- /* try to find real destination and source */
- while (fgets(line, BUFSIZ, mail) != NULL)
- {
- if (strncmp(line, "From:", 3) == 0) {
- register char *p, *e;
- char *index();
- char *addr;
-
- p = line + 5;
-
- while (*p == ' ')
- p++;
-
- addr = p;
-
- if ( (p=index(addr, '<')) && (e=index(p, '>')) )
- { /*
- * address of the form: comment <address>
- */
- addr = ++p;
- *e = '\0';
- }
- else if ( (e=index(addr, '(')) )
- { /*
- * address of the form: address (comment)
- */
- while (*--e == ' ')
- ;
- *++e = '\0';
- }
- else if ( (e=index(addr, '\n')) )
- *++e = '\0';
-
- strcpy(From, addr);
- break;
- }
- }
-
- rewind(mail);
- tm = time(0L);
- actime = (char *)ctime(&tm);
- actime[19] = '\000';
-
- /* open pipe to sendmail */
- pipe(ppe);
- if((smpid=vfork()) == 0) {
- close(0);
- dup(ppe[0], 0);
- execl("/usr/lib/sendmail", "sendmail",
- sender, "-odi", "-oem", "-f", From, To, 0);
-
- logerror("MTU: exec failed");
- perror("reason");
- _exit(1);
- }
-
- if((outfile = fdopen(ppe[1], "w")) == (FILE *)NULL) {
- logerror("MTU: pipe fdopen failure!");
- return(FALSE);
- }
-
- loc = 1;
-
- while (fgets(line, BUFSIZ, mail) != NULL) {
- if (loc == 1) {
- loc++;
- if(strncmp(line, ":READ", 5) == 0)
- continue;
- }
-
- fputs(line, outfile);
- }
-
- fclose(outfile);
- fclose(mail);
- wait(&status);
- switch(status.w_retcode) {
- case EX_OK:
- err="sent";
- break;
- case EX_NOUSER:
- err="no such user";
- break;
- case EX_NOHOST:
- err="host unknown";
- break;
- case EX_UNAVAILABLE:
- err="service unavailable";
- break;
- default:
- err="other";
- }
-
- fprintf(log,"%s Received mail from %s %s (tag %s %s) \n",
- actime, av[2], av[3], av[4], av[5]);
- fprintf(log,"\t%s (%d) %s (%d) from %s to %s\n",
- status.w_retcode ? "NOT SENT" : "Sent" , smpid, err, status.w_retcode, From, To);
- fclose(log);
-
- unlink(av[1]);
- return(status.w_retcode);
- }
- SHAR_EOF
- if test 3233 -ne "`wc -c damail.c`"
- then
- echo shar: error transmitting damail.c '(should have been 3233 characters)'
- fi
- echo shar: extracting Makefile '(673 characters)'
- cat << \SHAR_EOF > Makefile
- #
- # Makefile for assorted programs related to Sendmail.
- #
- # @(#)Makefile UK-1.1 sendmail configuartion 22/4/85
- #
- CFLAGS=-O
- #CFLAGS=-O -Dvoid=int # some pdp11's need this
- X25FLAGS=-I/usr/src/local/x25/usr/src/
-
- uucp: rmail
- cp rmail /bin/rmail
-
- bitnet: damail
- cp rmail /usr/lib/rscs/damail
-
- rmail: rmail.c
- cc $(CFLAGS) -o rmail
-
- damail: damail.c
- cc $(CFLAGS) -o damail
-
-
- janet: mailer hhsend
- cp mailer /usr/lib/x25
- chown root /usr/lib/x25/mailer
- chmod 755 /usr/lib/x25/mailer
- cp hhsend /usr/lib/x25
- chown root /usr/lib/x25/hhsend
- chmod 4755 /usr/lib/x25/hhsend
-
- mailer: mailer.c
- cc $(CFLAGS) mailer.c -lx25
-
- hhsend: hhsend.c
- cc $(CFLAGS) $(X25FLAGS) hhsend.c
- SHAR_EOF
- if test 673 -ne "`wc -c Makefile`"
- then
- echo shar: error transmitting Makefile '(should have been 673 characters)'
- fi
- echo shar: extracting README '(1249 characters)'
- cat << \SHAR_EOF > README
- This directory contains some sendmail interface programs.
-
- Interfaces
- ----------
- rmail.c:
- This is a rewrite of the standard uucp -> sendmail interface program
- which just a better job of deducing the From path from the
- uucp from line(s), and also sets sendmail's $s macro.
-
- This replaces /bin/rmail supplied with BSD4.2.
-
- damail.c:
- This is a rewrite of the bitnet -> sendmail interface program
- supplied with the Cornell version of the RSCS emulation package.
- This reads the from person from the From: line and sets
- sendmail's $s macro.
-
- This replaces /usr/lib/rscs/damail supplied with the RSCS software.
-
- mailer.c:
- This is a janet -> sendmail interface program. This reads a
- message in JNT mail format and converts it into a form suitable
- for calling sendmail. This also sets sendmail's $s macro.
-
- This replaces /usr/lib/x25/mailer supplied with the York X25 software.
-
- hhsend.c:
- This is a sendmail -> janet interface program. This reads a
- message processed by sendmail and converts it into JNT mail format,
- then calls mhhcp to send it.
-
- This effectively replaces the /usr/lib/x25/hhmail supplied with the
- York X25 software; the standard mail user interfaces together with
- sendmail perform the other functions provided by hhmail.
- SHAR_EOF
- if test 1249 -ne "`wc -c README`"
- then
- echo shar: error transmitting README '(should have been 1249 characters)'
- fi
- echo shar: extracting hhsend.c '(2613 characters)'
- cat << \SHAR_EOF > hhsend.c
- /*
- * hhsend - Sendmail -> JNT mailer interface.
- *
- * This program takes a hostname and a list of users to send to as
- * arguments and a mail message as standard input and creates a file
- * containing a Janet header followed by the mail message, then
- * calls mhhcp to send it over the network.
- *
- * Written by Jim Crammond. jim@hwcs 4/85
- */
- #include <stdio.h>
- #include <signal.h>
- #include <sysexits.h>
- #include <sys/wait.h>
- #include "local.h"
-
- #define MAILMODE (0660) /* mode of created spool file */
-
- #ifdef DEBUG
- #undef SPOOLD
- #define SPOOLD "."
- #endif DEBUG
-
- FILE *mailf = NULL;
- char sfile[ sizeof(SPOOLD) + 14 ];
- int delete();
- char *index();
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- char *myname;
- char *host;
- char **users;
- int nusers;
-
- myname = argv[0];
-
- if (argc < 3)
- { fprintf("usage: %s host users...\n", myname);
- exit(EX_USAGE);
- }
-
- host = argv[1];
- users = &argv[2];
- nusers = argc - 2;
-
- /* catch signals */
- signal(SIGHUP, delete);
- signal(SIGINT, delete);
- signal(SIGQUIT, delete);
- signal(SIGTERM, delete);
-
- /* send the mail */
- sendmail(host, users, nusers);
-
- /* NOTREACHED */
- }
-
- /*
- * sendmail - creates a mail file for mhhcp and exec mhhcp.
- */
- sendmail(host, users, nusers)
- char *host;
- char *users[];
- int nusers;
- {
- register char *auser, *p;
- char line[BUFSIZ];
- union wait status;
-
- /* create spool file */
- sprintf(sfile, "%s/M%06d", SPOOLD, getpid() );
-
- mailf = fopen(sfile, "w");
- if (mailf == NULL)
- { fprintf(stderr, "cannot create mail spool file %s\n", sfile);
- exit(EX_CANTCREAT);
- }
- chmod(sfile, MAILMODE);
-
-
- /* write out JNT-header */
- while (nusers > 1)
- { auser = users[ --nusers ];
- /* convert any '@'s in user part to '%'s */
- while ((p = index(auser, '@')) != NULL)
- *p = '%';
-
- fprintf(mailf, "%s@%s,\n", auser, host);
- }
- auser = users[0];
- /* convert any '@'s in user part to '%'s */
- while ((p = index(auser, '@')) != NULL)
- *p = '%';
-
- fprintf(mailf, "%s@%s\n\n", auser, host);
-
-
- /* write out header + message from stdin (supplied by sendmail) */
- while (fgets(line, sizeof(line), stdin) != NULL)
- fputs(line, mailf);
-
- fclose(mailf);
-
- #ifdef DEBUG
- fprintf(stderr,"spool file is %s\n", sfile);
- exit(0);
- #endif
-
- switch (fork())
- { case -1:
- exit(EX_TEMPFAIL);
- case 0:
- execl(MHHCPPATH, MHHCP, sfile, host, 0);
- exit(EX_UNAVAILABLE);
- default:
- wait(&status);
- if (status.w_retcode == 1)
- exit(EX_OK);
- else
- exit(EX_NOHOST);
- }
- }
-
-
- /*
- * delete - delete mail file and exit. Called on any interrupt.
- */
- delete()
- {
- if (mailf != NULL)
- { fclose(mailf);
- unlink(sfile);
- }
- exit(EX_TEMPFAIL);
- }
- SHAR_EOF
- if test 2613 -ne "`wc -c hhsend.c`"
- then
- echo shar: error transmitting hhsend.c '(should have been 2613 characters)'
- fi
- echo shar: extracting mailer.c '(2736 characters)'
- cat << \SHAR_EOF > mailer.c
- /*
- * mailer - JNT -> Sendmail interface.
- *
- * This program takes a mail file in JNT format and converts the
- * Janet header into an argument and then calls sendmail giving the
- * message part of the mail file as standard input.
- *
- * Written by Jim Crammond. jim@hwcs 4/85
- */
- #include <stdio.h>
- #include <time.h>
- #include <pwd.h>
- #include <tdir.h>
- #include <sysexits.h>
- #include "local.h"
-
- struct tdirent *gettdnam(), *td;
-
- #define CMDSIZ 5000 /* command line size */
- #define SENDMAIL "/usr/lib/sendmail" /* sendmail rah rah */
- #define DEADLETTER "/tmp/dead.letter" /* somewhere for trashed mail */
-
- char cmd[CMDSIZ];
- char line[BUFSIZ];
- char *file, *via;
- FILE *fopen(), *popen();
- FILE *fp, *outp, *logfd, *dlp;
- long iop, time();
- char *ctime();
- char *rindex();
- int LOGGING;
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- register char *usersp, *c, *n;
- char *f;
- int ret;
-
- #ifndef DEBUG
- chdir(SPOOLD); /* somewhere to dump core */
- #endif
- if ((logfd = fopen(MAIL_LOG, "a")) == NULL)
- LOGGING = 0;
- else
- LOGGING = 1;
- chmod(MAIL_LOG, 0666);
- time(&iop);
- LOG("\n\nMail server started %s", ctime(&iop));
-
- file = argv[1];
- via = argv[2];
-
- if ((fp = fopen(file, "r")) == NULL)
- { LOG("could not open file\n");
- done();
- }
-
- /*
- * find out where this came from
- */
- for (f = via; *f; f++)
- if (*f == '/')
- { *f = '\0';
- break;
- }
- if ((td = gettdnam(via, 0)) != 0)
- via = td->td_name;
-
- /*
- * initialise command sendmail command line
- */
- sprintf(cmd, "%s -oMs%s", SENDMAIL, via);
- usersp = cmd;
- while (*usersp != '\0')
- usersp++;
-
- /*
- * get list of addresses to send to in JNT-header form and
- * convert to a list of command line arguments.
- */
- while (fgets(line, BUFSIZ, fp) != NULL)
- { c = line;
- while (*c == ' ' || *c == '\t')
- c++;
-
- if (*c == '\n')
- break;
-
- *usersp++ = ' ';
-
- while (*c != '\0' && *c != '\n')
- { if (*c == ',')
- { *usersp++ = ' ';
- c++;
- }
- else
- *usersp++ = *c++;
- }
- }
- *usersp = '\0';
-
- /* call sendmail */
- #ifdef DEBUG
- fprintf(stderr, "call: %s\n", cmd);
- done();
- #endif DEBUG
- LOG("%s\n", cmd);
- outp = popen(cmd, "w");
- while (fgets(line, sizeof(line), fp) != NULL)
- fputs(line, outp);
- ret = pclose(outp);
-
- if (ret & 0377)
- { /* sendmail failed - drop letter into "dead.letter" */
- LOG("%s failed, returning status %d\n", cmd, ret);
- if ((dlp = fopen(DEADLETTER, "a")) != NULL)
- { fprintf(dlp, "%s failed, message body follows:\n", cmd);
- while (fgets(line, sizeof(line), fp) != NULL)
- fputs(line, dlp);
- }
- exit(EX_OSERR);
- }
- LOG("exit status %d\n", ret >> 8);
- done();
- }
-
- /* VARARGS1 */
- LOG(fmt, args)
- char *fmt;
- {
- if (LOGGING)
- { fprintf(logfd, fmt, args);
- fflush(logfd);
- }
- return;
- }
-
- done()
- {
- unlink(file);
- exit(EX_OK);
- }
- SHAR_EOF
- if test 2736 -ne "`wc -c mailer.c`"
- then
- echo shar: error transmitting mailer.c '(should have been 2736 characters)'
- fi
- echo shar: done with directory Support
- chdir ..
- # End of shell archive
- exit 0
-
-