summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Nelson <cowboy@debian.org>1998-06-23 10:00:00 -0500
committerAndreas Beckmann <debian@abeckmann.de>2012-10-01 19:58:37 +0200
commit6202a816311c5e56f71ecd358850b1e6d8cd7065 (patch)
treede47ad4f657df101b6f36a07a6c6e19191be7de9
parent6c193ce1dd1d07ebdc1372e38bc4908ab1c37705 (diff)
downloadsendmail-6202a816311c5e56f71ecd358850b1e6d8cd7065.tar.gz
Imported Debian patch 8.8.8-20debian/8.8.8-20
-rw-r--r--checksendmail/BSDI_CONTRIB18
-rw-r--r--checksendmail/CVS/Entries5
-rw-r--r--checksendmail/CVS/Repository1
-rw-r--r--checksendmail/Makefile15
-rw-r--r--checksendmail/address.resolve27
-rw-r--r--checksendmail/checksendmail.8223
-rw-r--r--checksendmail/checksendmail.perl377
-rwxr-xr-xcontrib/passwd-to-alias.pl2
-rw-r--r--debian/README.Debian67
-rw-r--r--debian/aliases11
-rw-r--r--debian/changelog291
-rw-r--r--debian/check.tar.uue1005
-rw-r--r--debian/conffiles3
-rw-r--r--debian/control20
-rw-r--r--debian/copyright47
-rw-r--r--debian/debian.m469
-rw-r--r--debian/debproto.mc42
-rw-r--r--debian/dirs15
-rw-r--r--debian/el33t.h6
-rw-r--r--debian/init.d62
-rw-r--r--debian/ip-down.d10
-rw-r--r--debian/ip-up.d14
-rw-r--r--debian/nodns.m444
-rw-r--r--debian/nssnodns.conf18
-rw-r--r--debian/part11755
-rw-r--r--debian/part21467
-rw-r--r--debian/patch.collect25
-rw-r--r--debian/postinst144
-rw-r--r--debian/postinst.debhelper72
-rw-r--r--debian/postrm33
-rw-r--r--debian/postrm.debhelper45
-rw-r--r--debian/preinst25
-rw-r--r--debian/prerm20
-rw-r--r--debian/rbl.m414
-rw-r--r--debian/rblspam.m466
-rwxr-xr-xdebian/rules258
-rw-r--r--debian/runq26
-rw-r--r--debian/runq.131
-rw-r--r--debian/sendmail-8.8.5-tcpwrap82
-rw-r--r--debian/sendmail-8.8.8-ismx-4161
-rw-r--r--debian/sendmailconfig566
-rw-r--r--debian/sendmailconfig.841
-rw-r--r--debian/sensible-mda.828
-rw-r--r--debian/sensible-mda.c62
-rw-r--r--mmuegel/README92
-rw-r--r--mmuegel/libs/date.pl324
-rw-r--r--mmuegel/libs/elapsed.pl123
-rw-r--r--mmuegel/libs/mail.pl140
-rw-r--r--mmuegel/libs/mqueue.pl215
-rw-r--r--mmuegel/libs/newgetopts.pl213
-rw-r--r--mmuegel/libs/strings1.pl147
-rw-r--r--mmuegel/libs/timespec.pl60
-rw-r--r--mmuegel/man/cqueue.1166
-rw-r--r--mmuegel/man/postclip.159
-rw-r--r--mmuegel/src/cqueue242
-rw-r--r--mmuegel/src/postclip74
-rw-r--r--src/collect.c8
-rw-r--r--src/collect.c.orig761
-rw-r--r--src/collect.sav761
-rw-r--r--src/conf.c6
-rw-r--r--src/conf.h2
-rw-r--r--src/domain.c46
-rw-r--r--src/readcf.c8
-rw-r--r--src/sendmail.89
-rw-r--r--src/sendmail.h3
65 files changed, 10767 insertions, 5 deletions
diff --git a/checksendmail/BSDI_CONTRIB b/checksendmail/BSDI_CONTRIB
new file mode 100644
index 0000000..97871d5
--- /dev/null
+++ b/checksendmail/BSDI_CONTRIB
@@ -0,0 +1,18 @@
+Software Package:
+ checksendmail
+
+Release/Version:
+ Dated 7/11/90.
+
+Retrieved from:
+ N/A.
+
+Bug reports:
+ This software package is maintained by the software contributor,
+ not BSDI. Please send any bug reports to both support@BSDI.COM
+ and polk@bsdi.com.
+
+Comments:
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Modifications to this version made by BSDI:
diff --git a/checksendmail/CVS/Entries b/checksendmail/CVS/Entries
new file mode 100644
index 0000000..692e38d
--- /dev/null
+++ b/checksendmail/CVS/Entries
@@ -0,0 +1,5 @@
+/BSDI_CONTRIB/1.1/Mon Jan 22 10:57:27 1996 Tue Oct 24 17:29:51 1995//
+/Makefile/1.3/Mon Jan 22 10:57:28 1996 Fri Jan 6 22:34:35 1995//
+/address.resolve/1.1.1.1/Mon Jan 22 10:57:28 1996 Thu Jan 13 14:15:30 1994//
+/checksendmail.8/1.1.1.1/Mon Jan 22 10:57:28 1996 Thu Jan 13 14:15:31 1994//
+/checksendmail.perl/1.1.1.1/Mon Jan 22 10:57:29 1996 Thu Jan 13 14:15:31 1994//
diff --git a/checksendmail/CVS/Repository b/checksendmail/CVS/Repository
new file mode 100644
index 0000000..b300606
--- /dev/null
+++ b/checksendmail/CVS/Repository
@@ -0,0 +1 @@
+/master/contrib/checksendmail
diff --git a/checksendmail/Makefile b/checksendmail/Makefile
new file mode 100644
index 0000000..101ba4e
--- /dev/null
+++ b/checksendmail/Makefile
@@ -0,0 +1,15 @@
+# BSDI $Id: Makefile,v 1.3 1995/01/07 05:34:35 donn Exp $
+
+MAN8= checksendmail.0
+
+all checksendmail: ${MAN8}
+
+clean depend tags:
+
+install: maninstall
+ install -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
+ ${.CURDIR}/checksendmail.perl ${DESTDIR}${BINDIR}/checksendmail
+ install -c -o ${BINOWN} -g ${BINGRP} -m 0444 \
+ ${.CURDIR}/address.resolve ${DESTDIR}/usr/contrib/lib/
+
+.include <bsd.prog.mk>
diff --git a/checksendmail/address.resolve b/checksendmail/address.resolve
new file mode 100644
index 0000000..01f3011
--- /dev/null
+++ b/checksendmail/address.resolve
@@ -0,0 +1,27 @@
+
+# BSDI $Id: address.resolve,v 1.1.1.1 1994/01/13 21:15:30 polk Exp $
+
+# Sample address resolution file for checksendmail(8)
+
+# local addresses
+user
+user@hilltop
+user@hilltop.BSDI.COM
+hilltop!polk
+
+# within-domain addresses
+user@bsdi.com
+user@ibapah
+user@ibapah.bsdi.com
+ibapah!user
+
+# faraway addresses
+user@xxxxxxx.com
+user@xxxxxxx.dom
+site!user
+
+# addresses with routing, etc.
+site1!site2!user
+user@xxxxxxx.dom@bar.dom
+site!user@xxxxxxx.dom
+site!user@uunet.uu.net
diff --git a/checksendmail/checksendmail.8 b/checksendmail/checksendmail.8
new file mode 100644
index 0000000..b129c35
--- /dev/null
+++ b/checksendmail/checksendmail.8
@@ -0,0 +1,223 @@
+.\" BSDI $Id: checksendmail.8,v 1.1.1.1 1994/01/13 21:15:31 polk Exp $
+.Dd January 12, 1994
+.Dt CHECKSENDMAIL 8
+.Os
+.Sh NAME
+.Nm checksendmail
+.Nd verify sendmail address transformations.
+.Sh SYNOPSIS
+.Nm checksendmail
+.Op Fl C Ar file.cf
+.Op Fl r Ar resolve
+.Op Fl T Ar test.address
+.Op Fl b Ar sendmail_binary
+.Sh DESCRIPTION
+.Pp
+The
+.Nm checksendmail
+program is a
+.Xr perl
+script that aids the testing of
+.Xr sendmail 8 's
+various configuration files.
+.Nm checksendmail
+passes typical addresses (supplied in input files) through
+.Xr sendmail
+and prints the results of the resolution and transformation routines.
+.Pp
+The input files contain a list of addresses, one per line.
+For example:
+.Bd -literal -offset indent
+user
+user@site
+user@site.com
+.Ed
+.Pp
+The input file can contain comments started with a
+.Em #
+and blank lines.
+.Sh OPTIONS
+.Pp
+.Bl -tag -width Fl -compact -offset left
+.It Fl C Ar file.cf
+Use the
+.Xr sendmail
+configuration file
+.Ar file.cf
+instead of the default
+.Pa /etc/sendmail.cf
+file.
+.It Fl r Ar resolve
+Use
+.Ar resolve
+as the input file for the addresses to be used for mail resolving. Defaults
+to
+.Ar address.resolve .
+.It Fl T Ar test.address
+Use
+.Ar test.address
+as the single address to test. Cannot be used in conjunction with
+file setting flags.
+.It Fl B Ar sendmail_binary
+Use the specified
+.Ar sendmail_binary
+as the path to invoke sendmail (instead of
+.Pa /usr/sbin/sendmail ) .
+.El
+.Sh EXAMPLES
+.Pp
+The following command will pass the addresses in
+.Ar address.resolve
+through
+.Xr sendmail
+using the configuration information in
+.Ar myconfig.cf .
+.Bd -literal -offset left
+example% cat address.resolve
+user
+user@site
+user@site.com
+example% checksendmail \-C myconfig.cf
+config file: myconfig.cf resolve file: address.resolve
+towhom file: address.resolve fromwhom file: address.resolve
+Mail address resolution
+user --(ether )--> user[rmtc]
+user@site --(ether )--> user@site[rmtc]
+user@site.com --(ether )--> user@site.com[rmtc]
+`To' address transformations for mailer ether:
+user ----> user
+user@site ----> user@site
+user@site.com ----> user@site.com
+`From' address transformations for mailer ether:
+user ----> user
+user@site ----> user
+user@site.com ----> user
+.Ed
+.Pp
+The first section of the output shows how the addresses in the input
+files are resolved by
+.Xr sendmail 8 .
+Consider the following output line:
+.Pp
+.Dl user@site.com --(ether )--> user@site.com[rmtc]
+.Pp
+The input address
+.Em user@site.com
+resolves to use the
+.Em ether
+mailer. That mailer is directed to send the mail to
+to the user
+.Em user@site.com
+at site
+.Em rmtc
+(as indicated in the square brackets).
+.Pp
+The two later sections of output show how the addresses specified as
+the
+.Em To
+and
+.Em From
+address are transformed in the text of the
+headers. In the example above, the
+.Em To
+addresses are untouched.
+The
+.Em From
+addresses, however, all lose their machine information on
+the way through the mailer:
+.Pp
+.Dl user@site ----> user
+.Pp
+This may be desirable when using a configuration file on a
+workstation which is to be hidden as a mailhost from the rest of the
+network.
+.Pp
+The following is a set of addresses used at one site for the purposes of
+testing address resolution. Comments after the addresses detail why
+particular addresses are present:
+.Bl -tag -width "user@machine.com" -compact -offset indent
+.It user
+Standard trivial address
+.It user@rmtc
+qualified at one level
+.It user@rmtc.central
+qualified at two levels
+.It user@rmtc.central.sun.com
+qualified all the way
+.It rmtc!user
+local but specified as uucp
+.It user@summit
+a workstation (normally delivered locally, though)
+.It user@summit.central
+same but more qualified
+.It user@summit.central.sun.com
+same but fully qualified
+.It summit!user
+same but specified as uucp
+.It user@prisma
+Backward compatibility tests
+.It user@prisma.com
+.It prisma!user
+.It user@central
+Superior domain testing
+.It user@machine.central
+more qualified, but unknown
+.It user@summit.central
+more qualified and known
+.It user@eng
+name in faraway domain
+.It user@machine.eng
+unknown machine in faraway domain
+.It user@summit.eng
+local machine, far away domain
+.It user@hoback
+far away machine
+.It user@machine
+apparently local but unknown machine
+.It user@sun.com
+Standard trivial address
+.It user@machine.dom.sun.com
+fully qualified but unknown machine
+.It user@foo.com
+standard, known, really far away domain
+.It user@foo.dom
+standard, unknown, really far away domain
+.It site!user
+Single level uucp
+.It site1!site2!user
+Double level uucp
+.It user@foo.dom@bar.dom
+Trickier address
+.It site!user@foo.dom
+Mixed uucp/domain
+.It site!user@uunet.uu.net
+Mixed double uucp/domain
+.El
+.Sh NOTES
+Note that
+.Nm checksendmail
+is a
+.Xr perl
+script. If your site does not have
+.Xr perl 1 ,
+it can be obtained via anonymous
+.Xr ftp
+from
+.Em ftp.uu.net .
+.Pp
+.Xr sendmail
+requires that the user have access to directory specified by the
+.Em OQ
+parameter in the configuration file (normally
+.Pa /usr/spool/mqueue ) .
+.Nm checksendmail
+verifies that the user has access to this directory before allowing the
+test to continue.
+.Sh AUTHORS
+.Bd -literal
+Gene Kim
+Rob Kolstad
+Jeff Polk
+.Ed
+.Sh "SEE ALSO"
+.Xr sendmail 8
diff --git a/checksendmail/checksendmail.perl b/checksendmail/checksendmail.perl
new file mode 100644
index 0000000..a8e9e11
--- /dev/null
+++ b/checksendmail/checksendmail.perl
@@ -0,0 +1,377 @@
+#!/usr/bin/perl
+
+# BSDI $Id: checksendmail.perl,v 1.1.1.1 1994/01/13 21:15:31 polk Exp $
+
+# checksendmail
+#
+# The checksendmail program is a perl script that aids the testing
+# of sendmail's various configuration filse. checksendmail
+# passes typical addresses (supplied in input files) through
+# sendmail and prints the result of the resolution and
+# transformation routines.
+#
+# Gene Kim & Rob Kolstad & Jeff Polk, 7/11/90
+
+# -- -C config file
+# -- -r resolve_addresses_file
+# -- -T test one address
+# -- -b sendmail binary
+
+# XXX deficiencies: ``/etc/sendmail'' should be a parameter
+
+# defaults:
+ $resolve = "address.resolve";
+ $cffile = "/etc/sendmail.cf";
+ $sendmail = "/usr/sbin/sendmail";
+
+sub usage {
+ die "Usage: checksendmail [-C cffile.cf] [-r resolve_addrs_file [-T one\@test.addr\n";
+}
+
+for (unshift (@ARGV, "XX"); $#ARGV > 0; shift ARGV) {
+ if ($ARGV[1] eq "-C")
+ {
+ shift @ARGV;
+ if ($#ARGV >= 1) {$cffile = $ARGV[1]; }
+ else { &usage(); }
+ }
+ elsif ($ARGV[1] eq "-r")
+ {
+ if ($setfile & 1) { die "Can only set `resolve' once"; }
+ shift @ARGV;
+ if ($#ARGV < 1) { &usage(); }
+ $resolve = $ARGV[1];
+ $setfile += 1;
+ }
+ elsif ($ARGV[1] eq "-T")
+ {
+ if ($setfile) { die "Can't set other files and use -T"; }
+ shift @ARGV;
+ if ($#ARGV < 1) { &usage(); }
+ open (OUT, ">/tmp/csm.in$$") ||
+ die "Can't open >/tmp/csm.in$$";
+ $resolve = "/tmp/csm.in$$";
+ print OUT "$ARGV[1]\n";
+ close (OUT);
+ $setfile = 7;
+ }
+ elsif ($ARGV[1] eq "-b")
+ {
+ shift @ARGV;
+ if ($#ARGV >= 1) {$sendmail = $ARGV[1]; }
+ else { &usage(); }
+ }
+ else { &usage(); }
+}
+
+if (!-e $cffile) { die "Can't find configuration file $cffile\n"; }
+if (!-e $resolve) { die "Can't find name file $resolve\n"; }
+
+# make sure the user can access the ../mqueue directory
+
+$maildir = `grep ^OQ $cffile`;
+chop $maildir;
+$maildir =~ s/^OQ//;
+if ((!-r $maildir) || (!-x $maildir) || (!-w $maildir)) {
+ warn "checksendmail: can't access $maildir! trying anyway...\n";
+}
+
+chop($hostname = `hostname`);
+chop($pwd = `pwd`);
+print "system: $hostname\t\tcurrent dir: $pwd\n";
+print "config file: $cffile\t\tresolve file: $resolve\n";
+
+sub handler { # 1st argument is signal name
+ local($sig) = @_;
+ print STDERR "Caught a SIG$sig--shutting down\n";
+ unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$";
+ unlink("/tmp/csm.in$$");
+ exit(0);
+}
+
+$SIG{'INT'} = 'handler';
+$SIG{'QUIT'} = 'handler';
+
+
+# glean the mailers used from the rule 0 tests
+
+sub parseresolve
+{
+ while (<MAIL>)
+ {
+ if (/^ADDRESS TEST MODE/) { next; }
+ if (/^Enter <ruleset>/) { next; }
+ if (/^>/) # INPUT LINE! (and last output is done)
+ {
+ chop;
+ if ($prevline) { # OUTPUT LINE!
+ &printparseresolve;
+ }
+ s/> *[0-9,]* *//g;
+ s/.*input: *//;
+ s/ //g;
+ s/"//g;
+ $input = $_;
+ }
+ else { chop; }
+ $prevline = $_;
+ }
+ &printparseresolve;
+}
+
+sub printparseresolve {
+ $prevline =~ s/.*returns: *//;
+ $prevline =~ s/"//g;
+ $prevline =~ s/ //g;
+ # Don't strip spaces off error messages
+ $prevline =~ s/ *([.!%<>]) */$1/g;
+ $prevline =~ s/ +([;?\$])/$1/g;
+ $prevline =~ s/([#\@:]) +/$1/g;
+
+# non-Sun test mode delimiters -> easily-readable style
+# Mark Sausville, MIT Media Laboratory, saus@media-lab.media.mit.edu
+ $prevline =~ s/\^V/\$#/;
+ $prevline =~ s/\^W/\$@/;
+ $prevline =~ s/\^X/\$:/;
+
+ #### $#ether$@sun-barr.Ebay.Sun.COM$:site!user@uunet.uu.NET
+ @t = split( '\$', $prevline);
+ $address = "XXX";
+ $remote = "XXX";
+ $mailer = "XXX";
+ for ($i = 1; $i <= $#t; $i++)
+ {
+ if (substr($t[$i], 0, 1) eq ":")
+ { $address = substr($t[$i], 1,999); }
+ if (substr($t[$i], 0, 1) eq "@")
+ { $remote = substr($t[$i], 1,999); }
+ if (substr($t[$i], 0, 1) eq "#")
+ { $mailer = substr($t[$i], 1,999);
+ $mailer =~ tr/A-Z/a-z/; }
+ }
+ printf("%-27.27s --(%-6.6s)--> %s[%s]\n", $input, $mailer,
+ $address, $remote);
+ if ($mailer ne "XXX") { $themailers{$mailer}.="$input ";}
+}
+
+# Parse output of sendmail name resolution
+
+sub parseaddress
+{
+## ADDRESS TEST MODE
+## Enter <ruleset> <address>
+## > rewrite: ruleset 3 input: "user"
+
+ open(MAIL, $_[0]) || die "Can't open $_[0]...\n";
+ local ($k, $address, $prevline, $mailer, $remote, $input);
+ print $_[1]; # the title
+
+ $done = 0;
+ while (<MAIL>)
+ {
+ if (/^> *$/) { $done = 1; }
+ if (/^ADDRESS TEST MODE/) { next; }
+ if (/^Enter <ruleset>/) { next; }
+ chop;
+ if (/^>/) # INPUT LINE! (and last output is done)
+ {
+ if ($prevline) { # OUTPUT LINE!
+ $prevline =~ s/.*returns: *//;
+ $prevline =~ s/"//g;
+ $prevline =~ s/ //g;
+#> rewrite: ruleset 3 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net"
+#rewrite: ruleset 8 input: "site" "!" "user" "@" "uunet" "." "uu" "." "net"
+#>
+ printf("%-27.27s ----> %s\n", $input, $prevline);
+ }
+ s/> *[0-9,]* *//g;
+ s/.*input: *//;
+ s/ //g;
+ s/"//g;
+ $input = $_;
+ }
+ last if $done;
+ $prevline = $_;
+ }
+ close(MAIL);
+}
+
+
+# pass names from resolve files to sendmail
+
+open(IN, $resolve) || die "can't open $resolve\n";
+open(OUT, ">/tmp/csm$$") || die "can't open >/tmp/csm$$\n";
+while (<IN>)
+{
+ /^$/ && next;
+ /^#/ && next;
+ print OUT "3,0 $_";
+ chop;
+ $allinput .= " $_";
+}
+close(OUT);
+close(IN);
+$sendmailprog = "$sendmail -bt -C$cffile < /tmp/csm$$|";
+open(MAIL, $sendmailprog) || die "can't exec $sendmailprog...\n";
+print "Mail address resolution (rule 0)\n\n";
+&parseresolve();
+
+# calculate $f
+ $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$";
+ open (OUT, $sendmailprog);
+ open (IN, $resolve);
+ $rules = "3,1,4";
+ while (<IN>) {
+ chop;
+ /^$/ && next;
+ /^#/ && next;
+ $address = $_;
+ print OUT "$rules $address\n";
+ }
+ print OUT "\n"; # stuff last line into sendmail
+ close(IN);
+ close(OUT);
+ &parseaddress ("/tmp/csm$$", "\n\n\$f address header transformations\n\n");
+
+# Get the R= and S= special rulesets from the configuration
+
+open(FID, "grep ^M $cffile|");
+while (<FID>)
+{
+# Mether, P=[IPC], F=msDFMueCX, S=11, R=21, A=IPC $h
+ chop;
+ $thisline = $_; $thisline =~ s/M//; $thisline =~ s/,.*//;
+ $thisline =~ tr/A-Z/a-z/;
+ $sendrule = $_; $sendrule =~ s/.*S=//; $sendrule =~ s/,.*//;
+ if ($sendrule=~q!/!) {
+ ($esendrule, $hsendrule) = split (q!/!, $sendrule);
+ }
+ else { $esendrule = $hsendrule = $sendrule; }
+ $recvrule = $_; $recvrule =~ s/.*R=//; $recvrule =~ s/,.*//;
+ if ($recvrule=~q!/!) {
+ ($erecvrule, $hrecvrule) = split (q!/!, $recvrule);
+ }
+ else { $erecvrule = $hrecvrule = $recvrule; }
+ $esendrules{$thisline} = $esendrule;
+ $hsendrules{$thisline} = $hsendrule;
+ $erecvrules{$thisline} = $erecvrule;
+ $hrecvrules{$thisline} = $hrecvrule;
+}
+close(FID);
+
+# pass names from various mailers through sendmail
+
+foreach $i (keys %themailers)
+{
+ $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$";
+ if ($erecvrules{$i} == 0) {
+ print "\n\nCan't find recv rule for `$i', skipping this mailer <-------------------\n";
+ next;
+ }
+ open (OUT, $sendmailprog);
+ @namelist = split(/ /, $allinput);
+ $rules = "3,2,$erecvrules{$i},4";
+ foreach (@namelist) {
+ print OUT "$rules $_\n";
+ }
+ print OUT "\n"; # stuff last line into sendmail
+ close(OUT);
+ $note = "";
+ if ($erecvrules{$i} eq $hrecvrules{$i}) { $note = "and header "; }
+ &parseaddress ("/tmp/csm$$", "\n\n`To' envelope ${note}address transformations for mailer $i [$rules]:\n\n");
+}
+foreach $i (keys %themailers)
+{
+ $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$";
+ if ($hrecvrules{$i} == 0) {
+ print "\n\nCan't find recv rule for `$i', skipping this mailer <-------------------\n";
+ next;
+ }
+ if ($hrecvrules{$i} ne $erecvrules{$i}) {
+ open (OUT, $sendmailprog);
+ @namelist = split(/ /, $allinput);
+ $rules = "3,2,$hrecvrules{$i},4";
+ foreach (@namelist) {
+ print OUT "$rules $_\n";
+ }
+ print OUT "\n"; # stuff last line into sendmail
+ close(OUT);
+ &parseaddress ("/tmp/csm$$", "\n\n`To' header address transformations for mailer $i [$rules]:\n\n");
+ }
+}
+
+# pass names from various mailers through sendmail
+foreach $i (keys %themailers)
+{
+ $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$";
+ if ($esendrules{$i} == 0) {
+ print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n";
+ next;
+ }
+ open (OUT, $sendmailprog);
+ open (IN, $resolve);
+ $rules = "3,1,$esendrules{$i},4";
+ while (<IN>) {
+ chop;
+ /^$/ && next;
+ /^#/ && next;
+ $address = $_;
+ print OUT "$rules $address\n";
+ }
+ print OUT "\n"; # stuff last line into sendmail
+ close(IN);
+ close(OUT);
+ $note = "";
+ if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";}
+ &parseaddress ("/tmp/csm$$", "\n\n`From' envelope ${note}address transformations for mailer $i [$rules]:\n\n");
+}
+foreach $i (keys %themailers)
+{
+ $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$";
+ if ($hsendrules{$i} == 0) {
+ print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n";
+ next;
+ }
+ open (OUT, $sendmailprog);
+ open (IN, $resolve);
+ $rules = "3,1,$hsendrules{$i},4";
+ while (<IN>) {
+ chop;
+ /^$/ && next;
+ /^#/ && next;
+ $address = $_;
+ print OUT "$rules $address\n";
+ }
+ print OUT "\n"; # stuff last line into sendmail
+ close(IN);
+ close(OUT);
+ &parseaddress ("/tmp/csm$$", "\n\n`From' address header transformations for mailer $i [$rules]:\n\n");
+}
+foreach $i (keys %themailers)
+{
+ $sendmailprog = "|$sendmail -bt -C$cffile > /tmp/csm$$";
+ if ($esendrules{$i} == 0) {
+ print "\n\nCan't find send rule for `$i', skipping this mailer <-------------------\n";
+ next;
+ }
+ open (OUT, $sendmailprog);
+ open (IN, $resolve);
+ $rules = "3,1,4,3,1,$hsendrules{$i},4"; # XXX esendrules? book p. 431???
+ while (<IN>) {
+ chop;
+ /^$/ && next;
+ /^#/ && next;
+ $address = $_;
+ print OUT "$rules $address\n";
+ }
+ print OUT "\n"; # stuff last line into sendmail
+ close(IN);
+ close(OUT);
+ $note = "";
+ if ($esendrules{$i} eq $hsendrles{$i}) {$note = "and header ";}
+ &parseaddress ("/tmp/csm$$", "\n\n\$g address transformations for mailer $i [$rules]:\n\n");
+}
+
+unlink("/tmp/csm$$") || die "Can't unlink /tmp/csm$$";
+unlink("/tmp/csm.in$$");
+
diff --git a/contrib/passwd-to-alias.pl b/contrib/passwd-to-alias.pl
index 05a51b9..b571927 100755
--- a/contrib/passwd-to-alias.pl
+++ b/contrib/passwd-to-alias.pl
@@ -1,4 +1,4 @@
-#!/bin/perl
+#!/usr/bin/perl
#
# Convert GECOS information in password files to alias syntax.
diff --git a/debian/README.Debian b/debian/README.Debian
new file mode 100644
index 0000000..6bbc72c
--- /dev/null
+++ b/debian/README.Debian
@@ -0,0 +1,67 @@
+
+This Debian package includes an automatic configuration utility
+`sendmailconfig' which can be run at any time to modify the current sendmail
+configuration.
+
+Most mail-related configuration files are kept in the /etc/mail directory.
+
+Specialized configurations can be accomplished by editing the file
+/etc/mail/sendmail.mc by hand and then running `sendmailconfig' to generate
+and use the appropriate corresponding sendmail.cf file. Such configurations
+can make use of the m4 configuration macros kept in the /usr/lib/sendmail.cf
+directory. See also the other documentation in this directory.
+
+Finally, the file /etc/aliases holds a text representation of the current mail
+aliases. See the aliases(5) man page for more information. If you edit this
+file, be sure to run `newaliases' to update the corresponding binary database.
+
+The Debian sendmail package includes Miquel's patch:
+
+
+ PREVENT UNAUTHORIZED USE OF YOUR HOSTS AS SMTP RELAY
+
+ Miquel van Smoorenburg <miquels@cistron.nl> 23-Aug-1997
+
+The patch at the end of this file adds a new option to sendmail,
+`W' or `TcpWrappers'. This makes it possible for precompiled distributions
+to ship binaries compiled with -DTCPWRAPPERS without any unexpected
+side-effects, since the option is off by default.
+
+However that's not the main reason for this patch. The new code also
+adds a new map type to sendmail-8.8.7, called "ismx". That maps checks if
+we (all names in class 'w') are an MX for a certain domain. If so, the
+input hostname is replaced by our hostname, or TEMPFAIL if the DNS
+lookup failed.
+
+This can be used together with the "check_rcpt" rule to deny relaying for
+domains for which we are officially not an MX, without listing all domains
+in a configuration file. This prevents that your host is being used as
+a spam relay. However your host will still relay for hosts that it is
+officially an MX for, without any extra administration.
+
+Ofcourse you can put a list of IP numbers/networks in the file "LocalIP"
+to list hosts that may use your host as relay or smarthost. This is
+useful for a machine that is used internally as SMTP relay, for e.g.
+Eudora or Pegasus mail clients.
+
+The sendmail rules are: (LOCAL_* included for m4 file)
+
+
+LOCAL_CONFIG
+Kismx ismx
+F{LocalIP} /etc/mail/LocalIP
+
+LOCAL_RULESETS
+Scheck_rcpt
+# first: get client addr
+R$+ $: $(dequote "" $&{client_addr} $) $| $1
+R0 $| $* $@ ok no client addr: directly invoked
+R$={LocalIP}$* $| $* $@ ok from here
+# See if we are MX for this host
+R$*<$+@$+>$* $: $1 < $2 @ $(ismx $3 $: NOMX $) > $4
+R$*<$+@NOMX>$* $#error $@ 5.7.1 $: 571 I don't relay for that address.
+R$*<$+@TEMPFAIL>$* $#error $@ 4.5.1 $: "451 Cannot resolve. Retry later."
+
+
+Note that if the MX lookup fails, a temporary rather than a fatal error
+code is returned so that the message will not get lost.
diff --git a/debian/aliases b/debian/aliases
new file mode 100644
index 0000000..fcfa35f
--- /dev/null
+++ b/debian/aliases
@@ -0,0 +1,11 @@
+#
+# Mail aliases for sendmail
+#
+# You must run newaliases(1) after making changes to this file.
+#
+
+# Required aliases
+postmaster: root
+MAILER-DAEMON: root
+
+# Other aliases
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..4d9bfce
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,291 @@
+sendmail (8.8.8-20) frozen; urgency=high, closes=23774
+
+ * Patch collect.c to prevent segfaults in mime8->mime7 (#23774)
+
+ -- Richard Nelson <cowboy@debian.org> Tue, 23 Jun 1998 10:00:00 -0500
+
+sendmail (8.8.8-19) frozen; urgency=high, closes=23000
+
+ * sensible-mda now ignores non-suid MDAs (#23000)
+
+ -- Richard Nelson <cowboy@debian.org> Tue, 16 Jun 1998 15:00:00 -0500
+
+sendmail (8.8.8-18) frozen; urgency=high
+ * Repackaged to apply only to frozen, and bump the severity
+ because this problem (22747) has sufficient consequences
+ to warrant a change in hamm - only the alias file is changed,
+ and it will impact primarily *NEW* installations of sendmail.
+
+ -- Richard Nelson <cowboy@debian.org> Sat, 13 Jun 1998 12:00:00 -0500
+
+sendmail (8.8.8-17) unstable frozen; urgency=low, closes=22747
+
+ * add MAILER-DAEMON alias (#22747) This is a SEVERE problem
+ in that absence of this alias may cause mailing loops upon
+ delivery errors.
+
+ -- Richard Nelson <cowboy@debian.org> Sat, 23 May 1998 12:00:00 -0500
+
+sendmail (8.8.8-16) unstable frozen; urgency=low, closes=21787 21744
+
+ * remove the `m' flag from LOCAL_MAILER_FLAGS (#21787)
+ * remove /etc/ppp/ip-{up,down}.d from debian/dirs (#21744)
+
+ -- Richard Nelson <cowboy@debian.org> Sun, 03 May 1998 12:00:00 -0500
+
+sendmail (8.8.8-15) unstable frozen; urgency=low, closes=21071
+
+ * This time, hoststat and purgestat really are symlinks to sendmail ;-} (#21071)
+ * debhelperization start
+
+ -- Richard Nelson <cowboy@debian.org> Sun, 19 Apr 1998 12:00:00 -0500
+
+sendmail (8.8.8-14) unstable frozen; urgency=low, closes=20657 20758
+
+ * <lart,mode=auto> rewrite desc for 20637 </lart> (#20758)
+ * Don't install /etc/ppp/ip-{up,down}.d/sendmail (#20657)
+
+ -- Richard Nelson <cowboy@debian.org> Mon, 06 Apr 1998 09:00:00 -0500
+
+sendmail (8.8.8-13) unstable frozen; urgency=low, closes=20637 20335 20189
+
+ * Add --pidfile to start of daemon (#20637)
+ Allow starting when there are queue processes from prior incarnation
+ * Dangling man symlinks (#20335)
+ * Local mailer and mixed case users (#20189)
+ * Include updated ismx patch (updated rules)
+
+ -- Richard Nelson <cowboy@debian.org> Sat, 04 Apr 1998 12:00:00 -0500
+
+sendmail (8.8.8-12) unstable frozen; urgency=low, closes=19972 19971 19081
+
+ * lintian bugs
+ * /usr/doc/sendmail/checksum.txt has mode 600 (#19972)
+ * sensible.mda needs man page (#19971)
+ * Change LOCAL_SHELL_FLAGS to stop queueing of local mail (#19081)
+
+ -- Richard Nelson <cowboy@debian.org> Sat, 21 Mar 1998 12:00:00 -0500
+
+sendmail (8.8.8-11) unstable; urgency=low
+
+ * Correct package build so both source/binary show up
+
+ - Richard Nelson <cowboy@debian.org> Sun, 8 Mar 1998 16:36:00 -0500
+
+sendmail (8.8.8-10) unstable; urgency=low, closes=16883 19129
+
+ * New maintainer
+ * Updated to Standards-Version 2.4.0.0.
+ * Made -q default to 10 minutes instead of 30.
+ * Debian.mc: ct,cw optional, temp_mode, etc.
+ * Add /etc/ppp/ip-{up,down}.d/sendmail (#19129)
+
+ -- Richard Nelson <cowboy@debian.org> Sun, 8 Mar 1998 12:00:00 -0500
+
+sendmail (8.8.8-9) unstable; urgency=low
+
+ * Added examples for other operating systems to cf/ostype, per
+ StormCrow's request.
+
+ -- Johnie Ingram <johnie@debian.org> Mon, 9 Feb 1998 17:23:54 -0500
+
+sendmail (8.8.8-8) unstable; urgency=low, closes=17454 17809
+
+ * Manpage for etrn.8 is no longer executable (#17454).
+ * Added checksendmail script from BSDI contrib.
+ * Debian releases of 8.8.6 and later include a .dsc file (#17809).
+ * Added HACK(rblspam) from Manoj Srivastava (srivasta@debian.org) to
+ redirect messages from RBLed wastelands to a user called "spam".
+
+ -- Johnie Ingram <johnie@debian.org> Fri, 6 Feb 1998 23:08:55 -0500
+
+sendmail (8.8.8-7) unstable; urgency=low
+
+ * The sendmailconfig program no longer forces FEATURE(local_procmail).
+
+ -- Johnie Ingram <johnie@debian.org> Wed, 21 Jan 1998 13:30:33 -0500
+
+sendmail (8.8.8-6) unstable; urgency=low, closes=7903 9788 12413 12453 14253 14520 14575 14711 15508 15593 16065 16079
+
+ * Added Realtime Black Hole ruleset: HACK(rbl).
+ * Includes alternate nsswitch file which does not use DNS, allowing
+ run-time deactivation with HACK(nodns) (#12413, #12453, cf. 6495,
+ early stage of fix of 16883).
+ * Made name of spam control README more obvious by popular request of
+ IRC, and corrected "dbm" to "hash" in documentation (#16065).
+ * Now determines at runtime which mail delivery agent to invoke
+ (#15593), so dependency is restored to "procmail | deliver" (#14253).
+ * Corrected location of sendmail.st file (#14575, #15508, #16079).
+ * The option of setting the expensive flag in mailer definitions is
+ enabled by default, making modem-based setups easier (#9788).
+ * Corrected tcpwraper support patch so support is activatable again, and
+ disabled by default (#14520, #14711).
+ * ETRN and EXPN programs now included, from the contrib dir.
+ * A persistent host status directory is defined, so the daemon need not
+ reattempt a connect to known-bad hosts during simultaneous queue runs.
+ * Enabled tiered connect timeout in queue runs, lessening the effect of
+ slow peers delaying the queue runs of mailing lists.
+ * Queue runs are now sorted, by host to be connected to.
+ * A limit is set on the number of live children to prevent DoS attacks.
+ * Outbound connections are now quickly retried once after diald has time
+ to react, then queued normally.
+ * For speed, initgroups (supplemental group permissions) are disabled by
+ default -- this would require a sequential scan of the groups file.
+ * Added SHELL=/bin/bash to rules file and increased debhelperization.
+ * Closed #13384, corrected by sed fix to sendmailconfig (cf. 14547).
+ * Some undocumented features may now be enabled by config files:
+ O PidFile=/var/run/sendmail.pid
+ O WritableDirectoriesAreFatal=False
+ O DontProbeInterfaces=False
+ O MaxRecipientPerMessage=
+ O DeadLetterDrop=False
+ O TcpWrappers=False
+ * Undocumented features are documented in /usr/lib/sendmail.cf/ostype/debian.
+ * No longer runs dpkg-shlibdeps on shell scripts.
+ * Documentation files now preserve original timestamps whenever possible.
+ * Closed #7903, apparently not a problem with hamm mailx.
+ * All provided DOMAIN() examples are now included.
+ * Perl example for converting passwd file to aliases database included.
+
+ -- Johnie Ingram <johnie@debian.org> Tue, 20 Jan 1998 23:06:30 -0500
+
+sendmail (8.8.8-5) unstable; urgency=low, closes=16389
+
+ * Compiled with the -D_FFR_DONT_PROBE_INTERFACES_OPTION option (#16389).
+
+ -- Johnie Ingram <johnie@debian.org> Tue, 30 Dec 1997 16:57:51 -0500
+
+sendmail (8.8.8-4) unstable; urgency=low, closes=15707 15990 16000
+
+ * Corrected package md5sum error (#15990, #16000).
+ * Removed errant mail delivery agent mail.local (#15707).
+
+ -- Johnie Ingram <johnie@debian.org> Wed, 17 Dec 1997 11:54:59 -0500
+
+sendmail (8.8.8-3) unstable; urgency=low
+
+ * Tweaked debian/rules to autocompile on debian-powerpc.
+
+ -- Johnie Ingram <johnie@debian.org> Tue, 9 Dec 1997 17:56:42 -0500
+
+sendmail (8.8.8-2) unstable; urgency=low, closes=14894 14565 15552 15131 14825 14292 14547
+
+ * Init script now defines PIDFILE (#15552, #15131, #14825).
+ * Binaries are now stripped (#14894, #14565).
+ * Applied patch so sendmail postinst is now reentrant (#14292).
+ * Added sed fix to sendmailconfig (#14547).
+
+ -- Johnie Ingram <johnie@debian.org> Wed, 3 Dec 1997 18:49:51 -0500
+
+sendmail (8.8.8-1) unstable; urgency=low, closes=12235 13817 13864
+
+ * New upstream version.
+ * Now includes sendmail FAQ from rtfm.mit.edu (#12235).
+ * Added code from David Rocher for compliance with the Standard for
+ Console Messages (#13817).
+ * No longer depends exclusively on procmail (#13864).
+
+ -- Johnie Ingram <johnie@debian.org> Wed, 29 Oct 1997 17:11:50 -0500
+
+sendmail (8.8.7-5) unstable; urgency=low
+
+ * Added patch from Miquel van Smoorenburg <miquels@cistron.nl> to enable
+ tcpwrap support at runtime (support now disabled by default).
+
+ -- Johnie Ingram <johnie@debian.org> Sat, 4 Oct 1997 15:05:03 -0400
+
+sendmail (8.8.7-4) unstable; urgency=low
+
+ * Fixed problem with sendmailconfig reported by Scott K. Ellis.
+
+ -- Johnie Ingram <johnie@debian.org> Thu, 2 Oct 1997 11:22:12 -0400
+
+sendmail (8.8.7-3) unstable; urgency=low
+
+ * No longer depends on deliver (#11655).
+ * Updated to Standards-Version 2.3.0.0.
+ * Corrected typo in debian/rules which prevented tcpwrapper support from
+ working.
+
+ -- Johnie Ingram <johnie@debian.org> Wed, 1 Oct 1997 14:02:01 -0400
+
+sendmail (8.8.7-2) unstable; urgency=low
+
+ * Fixed bug in yesno() function in sendmailconfig (#12035) which caused
+ it to ignore user input in some cases.
+ * Added patch for ifmail fidonet mailer support (#12241).
+ * Registered sendmail permissions with suidregister.
+ * Added patch from Herbert Xu so sendmailconfig will work with ash
+ (#12211).
+ * Fixed detection of compatible sendmail.cf files.
+ * Tweaked packaging to improve multi-architecture, multi-compiler
+ support.
+
+ -- Johnie Ingram <johnie@debian.org> Sun, 31 Aug 1997 05:00:20 -0400
+
+sendmail (8.8.7-1) unstable; urgency=low
+
+ * New upstream bugfix version (pristine source) (#11932).
+ * Updated to Standards-Version: 2.2.0.0.
+
+ -- Johnie Ingram <johnie@debian.org> Thu, 7 Aug 1997 18:12:23 -0400
+
+sendmail (8.8.6-4) unstable; urgency=low
+
+ * Added spam control hacks by Claus Assmann (#5795).
+
+ -- Johnie Ingram <johnie@debian.org> Sat, 26 Jul 1997 13:54:58 -0400
+
+sendmail (8.8.6-3) unstable; urgency=low
+
+ * Added binary-arch target to debian/rules (#11400).
+
+ -- Johnie Ingram <johnie@debian.org> Tue, 22 Jul 1997 04:52:54 -0400
+
+sendmail (8.8.6-2) unstable; urgency=low
+
+ * Added patch to sendmailconfig from Darrin Stalder so it accepts
+ procmail as an alternate local delivery agent (#7897, fixing #3752,
+ #3753, #3754, #4064, #9074, much of 10860). Go Darrin.
+ * No longer requires "deliver" for installation (bug list above).
+ * Created a "runq" script at request of Martin "Joey" Schulze (#9268).
+ * Enabled default support for limited 7->8 bit MIME autoconversion,
+ since this security hole was fixed (#6815, #10491).
+ * Edited sendmailconfig to make it more clear that a FQDN is needed
+ during setup of /etc/mailname (#10512).
+ * Added the mail.local local delivery program (cf. 4064).
+ * Corrected name of init script in sendmail(8) manpage from /etc/rc to
+ /etc/init.d/sendmail (#9176).
+ * Closed #6093, a duplicate of 6495 (sendmail insists on performing DNS
+ lookups, bringing the PPP link up unnecessarily). Unfortunately 6495
+ is a known bug in the 8.8 series which is not yet fixed.
+ * Closed #7843 (incorrect upstream PROCMAIL_MAILER_PATH), since this is
+ always redefined by OSTYPE(debian).
+ * Closed #5321 -- performance demands that sendmail be run as a daemon.
+ * Closed #9550, since package is now in new source format and compliant
+ with Standards-Version 2.1.3.3 (cf. 7077, 9845).
+ * Closed #5676 (core dump) posted against 8.7.6, which does not apply to
+ the versions currently in use in the stable and unstable
+ distributions.
+ * No longer requires "deliver" for installation (worth repeating).
+
+ -- Johnie Ingram <johnie@debian.org> Sun, 20 Jul 1997 01:48:51 -0400
+
+sendmail (8.8.6-1) unstable; urgency=low
+
+ * New maintainer.
+ * Converted to new source format (#7077, #9845).
+ * Added "debug" target to /etc/init.d/sendmail to dump status to syslog.
+ * Modified build makefile to work with bash 2.0, and with libc6 tools.
+ * Changed tone of long description and similar blurbs from "complex" to
+ "powerful".
+ * Added PGP-signed file checksums.
+ * Included upstream changelog, created Debian changelog (#7075).
+ * Added Debian and GNU to default configuration string.
+
+ -- Johnie Ingram <johnie@debian.org> Sat, 19 Jul 1997 04:26:45 -0400
+
+Local variables:
+mode: debian-changelog
+add-log-mailing-address: "johnie@debian.org"
+End:
diff --git a/debian/check.tar.uue b/debian/check.tar.uue
new file mode 100644
index 0000000..a813f89
--- /dev/null
+++ b/debian/check.tar.uue
@@ -0,0 +1,1005 @@
+begin 600 check.tar
+M4D5!1$U%+F-H96-K````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````"`@(#8T-"``("`@,C,P(``@(#$W-3`@`"`@("`@(#$R,30R
+M("`V,S0T,S(R,#8W("`@-C$S,0`@````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````!4:&ES(&9I;&4@8V]N=&%I;G,@<V5V97)A;"`B
+M2$%#2R)S(&9O<B!S96YD;6%I;"`X+C@@=&\@<F5J96-T(&4M;6%I;',*9G)O
+M;2!S<&%M;65R<R!A;F0@=&\@<')E=F5N="!T:&4@86)U<V4@;V8@>6]U<B!M
+M86-H:6YE(&%S(&$@;6%I;`IR96QA>2X*"D%N(&5X<&QA;F%T:6]N(&-A;B!B
+M92!F;W5N9"!A=#H*/%523#H@:'1T<#HO+W=W=RYI;F9O<FUA=&EK+G5N:2UK
+M:65L+F1E+R4W16-A+V5M86EL+V-H96-K+FAT;6P@/@H*5&AE($A!0TMS(&%R
+M93H*8VAE8VM?;6%I;"YM-`IC:&5C:U]M86EL,BYM-`IC:&5C:U]M86EL,RYM
+M-`IC:&5C:U]R8W!T+FTT"F-H96-K7W)C<'0S+FTT"F-H96-K7W)C<'0T+FTT
+M"F-H96-K7W)E;&%Y+FTT"F-H96-K7W)E;&%Y,RYM-`IS<&%M9&]M<RYM-`IS
+M<&%M;65R<RYM-`IU<V5?:7`N;30*=7-E7VYA;65S+FTT"G5S95]R96QA>71O
+M+FTT"@IA;F0@87)E('5S960@87,@9F]L;&]W<SH*,6$I(&-H96-K7VUA:6P@
+M*'5S97,@<&QA:6X@9FEL97,@9F]R(&UA=&-H:6YG*3H*2$%#2RAS<&%M;65R
+M<RD*2$%#2RAS<&%M9&]M<RD*0F]T:"!T86ME(&%N(&]P=&EO;F%L(&%R9W5M
+M96YT("AT:&4@9FEL92!T;R!U<V4I+@I4:&4@9&5F875L="!F:6QE;F%M97,@
+M87)E(&QI<W1E9"!B96QO=RX*"DA!0TLH8VAE8VM?;6%I;"D*"C%B*2!C:&5C
+M:U]M86EL,B`H=7-E<R!D871A8F%S97,@9F]R(&UA=&-H:6YG*3H*2$%#2RAC
+M:&5C:U]M86EL,BD*"C)A*2!C:&5C:U]R8W!T-#H*2$%#2RAU<V5?:7`I"DA!
+M0TLH=7-E7VYA;65S*0I(04-+*'5S95]R96QA>71O*0H*2$%#2RAC:&5C:U]R
+M8W!T-"D*"C)B*2!C:&5C:U]R8W!T("AO;&0@=F5R<VEO;BP@=7-E(&-H96-K
+M7W)C<'0T*3H*2$%#2RAU<V5?:7`I"DA!0TLH=7-E7VYA;65S*0I(04-+*'5S
+M95]R96QA>71O*0H*2$%#2RAC:&5C:U]R8W!T*0H*5&AE(&9I<G-T(&]N97,@
+M;6%Y(&AA=F4@82!P87)A;65T97(@=&\@9&5F:6YE('1H92!N86UE(&]F('1H
+M92!F:6QE('1O"F)E('5S960N"@HS*2!C:&5C:U]R96QA>2P@8VAE8VM?<F5L
+M87DS"E1H97-E('=O<FL@;VYL>2!I9B!Y;W4@:&%V92!A('!A=&-H("AS964@
+M86)O=F4@55),*2!O<B`X+C@N-B`H;W(@8F5T=&5R*2X*2$%#2RAC:&5C:U]R
+M96QA>2D*;W(*2$%#2RAC:&5C:U]R96QA>3,I"@H*4V]M92!M;W)E(&5X<&QA
+M;F%T:6]N<SH*"C%A*0I)9B!Y;W4@=V%N="!T;R!U<V4@8VAE8VM?;6%I;"P@
+M9&\@=&AE(&9O;&QO=VEN9SH@4'5T"@I(04-+*'-P86UM97)S*0I(04-+*'-P
+M86UD;VUS*0I(04-+*&-H96-K7VUA:6PI"@II;B!Y;W5R("YM8R!F:6QE+B!0
+M=70@861D<F5S<V5S(&]F('=E;&PM:VYO=VX@<W!A;6UE<G,@*&4M;6%I;"!A
+M9&1R97-S97,L"F1O;6%I;G,I(&EN('1H92!A<'!R;W!R:6%T92!F:6QE<R!;
+M9&5F875L=%TZ"G-P86UM97)S"5LO971C+VUA:6PO4W!A;6UE<ET)"G-P86UD
+M;VUA:6YS"5LO971C+VUA:6PO4W!A;41O;6%I;G-="0H*,6(I"DEF('EO=2!W
+M86YT('1O('5S92!C:&5C:U]M86EL,BP@9&\@=&AE(&9O;&QO=VEN9SH@4'5T
+M"@I(04-+*&-H96-K7VUA:6PR*0I;5&AI<R!H87,@86QS;R!A;B!O<'1I;VYA
+M;"!A<F=U;65N="P@=&AE(&1E9F%U;'0@:7,@9VEV96X@8F5L;W<N70H*:6X@
+M>6]U<B`N;6,@9FEL92X@4'5T(&%D9')E<W-E<R!O9B!W96QL+6MN;W=N('-P
+M86UM97)S("AE+6UA:6P@861D<F5S<V5S+`ID;VUA:6YS*2!I;B!T:&4@87!P
+M<F]P<FEA=&4@9&%T86)A<V4@6V1E9F%U;'1=.@IJ=6YK"5MD8FT@+V5T8R]M
+M86EL+VIU;FM="0H*5&AE(&9O<FUA="!I<SH*:G5N:RYD;VUA:6X@2E5.2PIS
+M<&%M;65R0&%D9')E<W,N9&]M86EN(%-004U-15(*0W)E871E('1H92!D871A
+M8F%S92`H;6%N(&UA:V5M87`I(&EN('1H92!C:&]S96X@9F]R;6%T+@H*4%,Z
+M(%EO=2!C86X@86-T:79A=&4@=&AE(')E=F5R<V4@25`@;&]O:W5P(&%N9"!T
+M:&4*=F%L:61I='D@8VAE8VL@;V8@=&AE($923TT@861D<F5S<R!B>0ID969I
+M;F4H8%])4%],3T]+55!?)RPQ*61N;`ID969I;F4H8%]$3E-604Q)1%\G+#$I
+M9&YL"G)E<W!E8W1I=F5L>2X*"C%C*0I4:&ES(&ES(&$@=F%R:6%N="!O9B!C
+M:&5C:U]M86EL,BP@=VAE<F4@=&AE(%)(4R!O9B!T:&4@;6%P"FES('5S960@
+M=&\@<W!E8VEF>2!A;B!E<G)O<B!C;V1E("AW:&EC:"!I<R!O;FQY('5S960@
+M:6X@=&AE"G1E>'0I(&%N9"!A;B!E<G)O<B!T97AT+@I)9B!Y;W4@=V%N="!T
+M;R!U<V4@8VAE8VM?;6%I;#,L(&1O('1H92!F;VQL;W=I;F<Z(%!U=`H*2$%#
+M2RAC:&5C:U]M86EL,RD*6U1H:7,@:&%S(&%L<V\@86X@;W!T:6]N86P@87)G
+M=6UE;G0L('1H92!D969A=6QT(&ES(&=I=F5N(&)E;&]W+ET*"FEN('EO=7(@
+M+FUC(&9I;&4N(%!U="!A9&1R97-S97,@;V8@=V5L;"UK;F]W;B!S<&%M;65R
+M<R`H92UM86EL(&%D9')E<W-E<RP*9&]M86EN<RD@:6X@=&AE(&%P<')O<')I
+M871E(&1A=&%B87-E(%MD969A=6QT73H*:G5N:PE;9&)M("UA0$I53DL@+V5T
+M8R]M86EL+VIU;FM="0HH:68@>6]U('5S92!A;F]T:&5R(&1A=&%B87-E(&9O
+M<FUA="!O<B!A;F]T:&5R(&9I;&4L(&UA:V4@<W5R92!Y;W4*<W!E8VEF>2!T
+M:&4@;W!T:6]N("UA0$I53DL@(2D*"E1H92!F;W)M870@:7,Z"FIU;FLN9&]M
+M86EN(")%<G)O<BU#;V1E($5R<F]R+51E>'0B"G-P86UM97)`861D<F5S<RYD
+M;VUA:6X@(D5R<F]R+4-O9&4@17)R;W(M5&5X="(*0W)E871E('1H92!D871A
+M8F%S92`H;6%N(&UA:V5M87`I(&EN('1H92!C:&]S96X@9F]R;6%T+@H*17AA
+M;7!L93H*8WEB97)P<F]M;RYC;VT@(C4W,2!3;W)R>2P@4W!A;69O<F0L(&YO
+M(&4M;6%I;"!F<F]M('EO=7(@<&QA8V4N(@IH;VYE>4!S=V5E=&EE<RYC;VT@
+M(C4W,2!(;VYE>2P@>6]U)W)E(&$@<W!A;6UE<BP@9V\@87=A>2XB"@I04SH@
+M66]U(&-A;B!A8W1I=F%T92!T:&4@<F5V97)S92!)4"!L;V]K=7`@86YD('1H
+M90IV86QI9&ET>2!C:&5C:R!O9B!T:&4@1E)/32!A9&1R97-S(&)Y"F1E9FEN
+M92A@7TE07TQ/3TM54%\G+#$I9&YL"F1E9FEN92A@7T1.4U9!3$E$7R<L,2ED
+M;FP*<F5S<&5C=&EV96QY+@H*,F$I"DEF('EO=2!W86YT('1O('5S92!C:&5C
+M:U]R8W!T+"!D;R!T:&4@9F]L;&]W:6YG.B!$96-I9&4@=VAE=&AE<B!Y;W4*
+M=V%N('1O('5S92!T:&4@8VAE8VL@9F]R(&QO8V%L(&UA8VAI;F5S(&)Y($E0
+M(&YU;6)E<B`H=7-E7VEP*2!O<B!B>0IN86UE("AU<V5?;F%M97,I+B!.97AT
+M+"!D96-I9&4@=VAE=&AE<B!Y;W4@=V%N="!A;'-O(&%L;&]W(')E;&%Y('1O
+M"G-E=F5R86P@;6%C:&EN97,@:6X@861D:71I;VX@=&\@=&AO<V4@>6]U(&%C
+M8V5P="!A<R!L;V-A;"`H8VQA<W,@=RDN"D1E<&5N9&EN9R!O;B!Y;W5R('-E
+M;&5C=&EO;BP@<'5T('-O;64@;V8@=&AE(&9I<G-T('1H<F5E($A!0TMS(&EN
+M=&\*>6]U<B`N;6,@9FEL92P@86YD(&%L=V%Y<R!U<V4@=&AE(&QA<W0@;VYE
+M+@I(04-+*'5S95]I<"D*2$%#2RAU<V5?;F%M97,I"DA!0TLH=7-E7W)E;&%Y
+M=&\I"D%L;"!T86ME(&%N(&]P=&EO;F%L(&%R9W5M96YT("AT:&4@9FEL92!T
+M;R!U<V4I+@I4:&4@9&5F875L="!F:6QE;F%M97,@87)E(&QI<W1E9"!B96QO
+M=RX*"DA!0TLH8VAE8VM?<F-P=#0I"@I0=70@=&AE(&%P<')O<')I871E('9A
+M;'5E<R!I;B!T:&4@9FEL97,Z"G5S95]I<`D)6R]E=&,O;6%I;"],;V-A;$E0
+M70D*=7-E7VYA;65S"5LO971C+VUA:6PO3&]C86Q.86UE<UT)"G5S95]R96QA
+M>71O"5LO971C+VUA:6PO4F5L87E4;UT)"@HQ.3DW+3`S+3$V.B!C:&5C:U]R
+M8W!T-"!C86X@;F]W(&UA:V4@=7-E(&]F('5S95]I<"!A;F0@=7-E7VYA;65S
+M+@I)="!R97!L86-E<R!C:&5C:U]R8W!T,RP@=VAI8V@@:7,@<W1I;&P@879A
+M:6QA8FQE(&EF('1H97)E(&ES"F$@<')O8FQE;2!W:71H('1H92!N97<@=F5R
+M<VEO;BX*"C-A*0I)9B!Y;W4@=V%N="!T;R!U<V4@8VAE8VM?<F5L87DL(&1O
+M('1H92!F;VQL;W=I;F<Z(%!U=`H*2$%#2RAC:&5C:U]R96QA>2D*6U1H:7,@
+M:&%S(&%L<V\@86X@;W!T:6]N86P@87)G=6UE;G0L('1H92!D969A=6QT(&ES
+M(&=I=F5N(&)E;&]W+ET*"FEN('EO=7(@+FUC(&9I;&4N(%!U="!T:&4@25`@
+M;G5M8F5R<R!O9B!W96QL+6MN;W=N('-P86UM97)S(`II;B!T:&4@87!P<F]P
+M<FEA=&4@9&%T86)A<V4@6V1E9F%U;'1=.@IJ=6YK"5MD8FT@+V5T8R]M86EL
+M+VIU;FM="0H*5&AE(&9O<FUA="!I<SH*1"Y8+EDN6B!)4`I#+E@N62!)4`I"
+M+E@@25`*02!)4`HH9G5L;"!A9&1R97-S97,L(&-L87-S($,L($(L(&]R($$@
+M;F5T<RD*0W)E871E('1H92!D871A8F%S92`H;6%N(&UA:V5M87`I(&EN('1H
+M92!C:&]S96X@9F]R;6%T+@H*,V(I"DEF('EO=2!W86YT('1O('5S92!C:&5C
+M:U]R96QA>3,L(&1O('1H92!F;VQL;W=I;F<Z(%!U=`H*2$%#2RAC:&5C:U]R
+M96QA>3,I"EM4:&ES(&AA<R!A;'-O(&%N(&]P=&EO;F%L(&%R9W5M96YT+"!T
+M:&4@9&5F875L="!I<R!G:79E;B!B96QO=RY="@II;B!Y;W5R("YM8R!F:6QE
+M+B!0=70@=&AE($E0(&YU;6)E<G,@;V8@=V5L;"UK;F]W;B!S<&%M;65R<R`*
+M:6X@=&AE(&%P<')O<')I871E(&1A=&%B87-E(%MD969A=6QT73H*:G5N:PE;
+M9&)M("UA0$I53DL@+V5T8R]M86EL+VIU;FM="0HH:68@>6]U('5S92!A;F]T
+M:&5R(&1A=&%B87-E(&9O<FUA="!O<B!A;F]T:&5R(&9I;&4L(&UA:V4@<W5R
+M92!Y;W4*<W!E8VEF>2!T:&4@;W!T:6]N("UA0$I53DL@(2D*"E1H92!F;W)M
+M870@:7,Z"D0N6"Y9+EH@(D5R<F]R('1E>'0B"D,N6"Y9(")%<G)O<B!T97AT
+M(@I"+E@@(D5R<F]R('1E>'0B"D$@(D5R<F]R('1E>'0B"BAF=6QL(&%D9')E
+M<W-E<RP@8VQA<W,@0RP@0BP@;W(@02!N971S*0I#<F5A=&4@=&AE(&1A=&%B
+M87-E("AM86X@;6%K96UA<"D@:6X@=&AE(&-H;W-E;B!F;W)M870N"@I4:&ES
+M(&ES('1H92!S86UE(&1A=&%B87-E(&%S('5S960@9F]R(&-H96-K7VUA:6PS
+M+`IJ=7-T('=I=&@@=&AE(&%D9&ET:6]N(&]F($E0(&YU;6)E<G,N"@I#;VYC
+M;'5S:6]N.@H*36%K92!S=7)E('EO=2!U;F1E<G-T86YD('=H870@>6]U(&1O
+M(&%N9"!Y;W4@=&5S="!T:&ES('-T=69F"F)E9F]R92!Y;W4@=7-E(&ET(&]N
+M(&$@<')O9'5C=&EO;B!M86-H:6YE(0I)(&1O;B=T(&=U87)A;G1E92!F;W(@
+M86YY=&AI;F<A"DEF('EO=2!H879E(&%N>2!S=6=G97-T:6]N<RP@8V]M;65N
+M=',L(&5N:&%N8V5M96YT<RP*<&QE87-E(&QE="!M92!K;F]W+@H*0VQA=7,@
+M07-S;6%N;@D\8V%`:6YF;W)M871I:RYU;FDM:VEE;"YD93X*3&%S="!U<&1A
+M=&4Z(#$Y.3<M,#8M,#$*('=E;&PM:VYO=VX@<W!A;6UE<G,@*&4M;6%I;"!A
+M9&1R97-S97,L"F1O;6%I;G,I(&EN('1H92!A<'!R;W!R:6%T92!D871A8F%S
+M92!;9&5F875L=%TZ"FIU;FL)6V1B;2`O971C+VUA:6PO:G5N:UT)"@I4:&4@
+M9F]R;6%T(&ES.@IJ=6YK+F1O;6%I;B!*54Y+"G-P86UM97)`861D<F5S<RYD
+M;VUA:6X@4U!!34U%4@I#<F5A=&4@=&AE(&1A=&%B87-E("AM86X@;6%K96UA
+M<"D@:6X@=&AE(&-H;W-E;B!F;W)M870N"@I04SH@66]U(&-A;B!A8W1I=F%T
+M92!T:&4@<F5V97)S92!)4"!L;V]K=7`@86YD('1H90IV86QI9&ET>2!C:&5C
+M:R!O9B!T:&4@1E)/32!A9&1R97-S(&)Y"F1E9FEN92A@7TE07TQ/3TM54%\G
+M+#$I9&YL"F1E9FEN92A@7T1.4U9!3$E$7R<L,2ED;FP*<F5S<&5C=&EV96QY
+M+@H*,6,I"E1H:7,@:7,@82!V87)I86YT:&%C:R]C:&5C:U]M86EL+FTT````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````"`@(#8T-"``("`@
+M,C,P(``@(#$W-3`@`"`@("`@("`T,C0R("`V,S0U,C8V-S8S("`@-S0R,0`@
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````````!D:79E
+M<G0H+3$I"B,*(R!#;W!Y<FEG:'0@*&,I(#$Y.38@0VQA=7,@07-S;6%N;B`\
+M8V%`:6YF;W)M871I:RYU;FDM:VEE;"YD93X*(PHC($EN('-H;W)T.B!Y;W4@
+M8V%N(&1O('=H871E=F5R('EO=2!W86YT('=I=&@@=&AI<RP@8G5T(&1O;B=T
+M(&)L86UE(&UE(0HC"B,@5$A)4R!33T945T%212!)4R!04D]6241%1"!"62!4
+M2$4@05542$]2($%.1"!#3TY44DE"551/4E,@8&!!4R!)4R<G($%.1`HC($%.
+M62!%6%!215-3($]2($E-4$Q)140@5T%24D%.5$E%4RP@24Y#3%5$24Y'+"!"
+M550@3D]4($Q)34E4140@5$\L(%1(10HC($E-4$Q)140@5T%24D%.5$E%4R!/
+M1B!-15)#2$%.5$%"24Q)5%D@04Y$($9)5$Y%4U,@1D]2($$@4$%25$E#54Q!
+M4B!055)03U-%"B,@05)%($1)4T-,04E-140N("!)3B!.3R!%5D5.5"!32$%,
+M3"!42$4@05542$]2($]2($-/3E1224)55$]24R!"12!,24%"3$4*(R!&3U(@
+M04Y9($1)4D5#5"P@24Y$25)%0U0L($E.0TE$14Y404PL(%-014-)04PL($58
+M14U03$%262P@3U(@0T].4T51545.5$E!3`HC($1!34%'15,@*$E.0TQ51$E.
+M1RP@0E54($Y/5"!,24U)5$5$(%1/+"!04D]#55)%345.5"!/1B!354)35$E4
+M551%($=/3T13"B,@3U(@4T525DE#15,[($Q/4U,@3T8@55-%+"!$051!+"!/
+M4B!04D]&2513.R!/4B!"55-)3D534R!)3E1%4E)54%1)3TXI"B,@2$]7159%
+M4B!#0553140@04Y$($].($%.62!42$5/4ED@3T8@3$E!0DE,2519+"!72$54
+M2$52($E.($-/3E1204-4+"!35%))0U0*(R!,24%"24Q)5%DL($]2(%1/4E0@
+M*$E.0TQ51$E.1R!.14=,24=%3D-%($]2($]42$525TE312D@05))4TE.1R!)
+M3B!!3ED@5T%9"B,@3U54($]&(%1(12!54T4@3T8@5$A)4R!33T945T%212P@
+M159%3B!)1B!!1%9)4T5$($]&(%1(12!03U-324))3$E462!/1@HC(%-50T@@
+M1$%-04=%+@HC"F1I=F5R="@P*0I615)324].240H8$`H(REC:&5C:U]M86EL
+M+FTT"3$N,2`H0VQA=7,@07-S;6%N;BD@,3DY-RTP,RTP.2<I"@ID:79E<G0H
+M,BD*3$]#04Q?4E5,15-%5%,*4V-H96-K7VUA:6P*9&5F:6YE*&!#3TU-14Y4
+M)RP@:69D968H8%]34$%-34524U\G+"!@)RP@8",G*2ED;FP*(R!N;R!M86EL
+M<R!F<F]M('-P86UM97)S("AU<V5R0&1O;2YA:6XI"D-/34U%3E1@)U(\)#U[
+M4W!A;6UE<GT^"20C97)R;W(@)$`@-2XW+C$@)#H@(C4W,2!792!D;VXG="!A
+M8V-E<'0@:G5N:R!M86EL+B(@"6=O(&%W87D*0T]-345.5&`G4CPD/7M3<&%M
+M;65R?2X^"20C97)R;W(@)$`@-2XW+C$@)#H@(C4W,2!792!D;VXG="!A8V-E
+M<'0@:G5N:R!M86EL+B(@"6=O(&%W87D*0T]-345.5&`G4B0]>U-P86UM97)]
+M"20C97)R;W(@)$`@-2XW+C$@)#H@(C4W,2!792!D;VXG="!A8V-E<'0@:G5N
+M:R!M86EL+B(@"6=O(&%W87D*0T]-345.5&`G4B0]>U-P86UM97)]+@DD(V5R
+M<F]R("1`(#4N-RXQ("0Z("(U-S$@5V4@9&]N)W0@86-C97!T(&IU;FL@;6%I
+M;"XB(`EG;R!A=V%Y"G5N9&5F:6YE*&!#3TU-14Y4)RED;FP*4B0J"0DD.B`D
+M/C,@)#$)"0D)"0EC86YO;FEF>0I2)"T)"21`(&]K"0D)"0D)"6QO8V%L(&AO
+M<W0*9&5F:6YE*&!#3TU-14Y4)RP@:69D968H8%]34$%-1$]-4U\G+"!@)RP@
+M8",G*2ED;FP*(R!N;R!S<&%M(&1O;6%I;G,*0T]-345.5&`G4B0J/$`D*B0]
+M>U-P86U$;VUA:6YS?2X^)"H))"-E<G)O<B`D0"`U+C<N,2`D.B`B-3<Q(%1H
+M:7,@9&]M86EN(&ES(&)A;FYE9"XB(`EG;R!A=V%Y"D-/34U%3E1@)U(D*CQ`
+M)"HD/7M3<&%M1&]M86EN<WT^)"H))"-E<G)O<B`D0"`U+C<N,2`D.B`B-3<Q
+M(%1H:7,@9&]M86EN(&ES(&)A;FYE9"XB(`EG;R!A=V%Y"G5N9&5F:6YE*&!#
+M3TU-14Y4)RED;FP*(R!I9B!Y;W4@96YA8FQE('1H92!L87-T(')U;&4L('EO
+M=2!C86X@9&ES86)L92!T:&ES(&]N92X*(R!H;W-T('=I=&AO=70@82`N(&EN
+M('1H92!&44A.(#\*4B0J/$`D+3XD*@DD(V5R<F]R("1`(#4N,2XX("0Z(#4Q
+M."!I;G9A;&ED(&AO<W0@;F%M92`D,@D);F\@<F5A;"!N86UE"B,@;&]O:W5P
+M($E0(&%D9')E<W,@*')E=F5R<V4@;6%P<&EN9R!A=F%I;&%B;&4_*0HC(%(D
+M*CQ`6R0K73XD*@DD.B`D,2`\($`@)%L@6R`D,B!=("1=(#X@)#,*(R!N;R!$
+M3E,@96YT<GD_('1H:7,@:7,@9&%N9V5R;W5S(0HC(%(D*CQ`)"HD?E`^)"H)
+M)"-E<G)O<B`D0"`T+C$N."`D.B`T,3@@=6YR97-O;'9A8FQE(&AO<W0@;F%M
+M92`D,B0S+"!C:&5C:R!Y;W5R(&-O;F9I9W5R871I;VXN"0ID:79E<G0H,"D*
+M"D]7159%4B!#0553140@04Y$($].($%.62!42$5/4ED@3T8@3$E!0DE,2519
+M+"!72$542$52($E.($-/3E1204-4+"!35%))0U0*(R!,24%"24Q)5%DL($]2
+M(%1/4E0@*$E.0TQ51$E.1R!.14=,24=%3D-%($]2($]42$525TE312D@05))
+M4TE.1R!)3B!!3ED@5T%9"B,@3U54($]&(%1(12!54T4@3T8@5$A)4R!33T94
+M5T%212P@159%3B!)1B!!1%9)4T5$($]&(%1(12!03U-324))3$E462!/1@HC
+M(%-50T@@1$%-04=%+@HC"F1I=F5R="@P*0I615)324].240H8$`H(REC:&5C
+M:U]M86EL+FTT"3$N,2`H0VQA=7,@07-S;6%N;BD@,3DY-RTP,RTP.2<I"@ID
+M:79E<G0H,BD*3$]#04Q?4E5,15-%5%,*4V-H96-K7VUA:6P*:&%C:R]C:&5C
+M:U]M86EL,BYM-```````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`"`@(#8T-"``("`@,C,P(``@(#$W-3`@`"`@("`@("`V,3$S("`V,S8S-#,V
+M,S,S("`@-S0W,@`@````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````!D:79E<G0H+3$I"B,*(R!#;W!Y<FEG:'0@*&,I(#$Y.38L,3DY
+M-R!#;&%U<R!!<W-M86YN(#QC84!I;F9O<FUA=&EK+G5N:2UK:65L+F1E/@HC
+M"B,@26X@<VAO<G0Z('EO=2!C86X@9&\@=VAA=&5V97(@>6]U('=A;G0@=VET
+M:"!T:&ES+"!B=70@9&]N)W0@8FQA;64@;64A"B,*(R!42$E3(%-/1E1705)%
+M($E3(%!23U9)1$5$($)9(%1(12!!551(3U(@04Y$($-/3E1224)55$]24R!@
+M8$%3($E3)R<@04Y$"B,@04Y9($584%)%4U,@3U(@24U03$E%1"!705)204Y4
+M2453+"!)3D-,541)3D<L($)55"!.3U0@3$E-251%1"!43RP@5$A%"B,@24U0
+M3$E%1"!705)204Y42453($]&($U%4D-(04Y404))3$E462!!3D0@1DE43D53
+M4R!&3U(@02!005)424-53$%2(%!54E!/4T4*(R!!4D4@1$E30TQ!24U%1"X@
+M($E.($Y/($5614Y4(%-(04Q,(%1(12!!551(3U(@3U(@0T].5%))0E543U)3
+M($)%($Q)04),10HC($9/4B!!3ED@1$E214-4+"!)3D1)4D5#5"P@24Y#241%
+M3E1!3"P@4U!%0TE!3"P@15A%35!,05)9+"!/4B!#3TY315%514Y424%,"B,@
+M1$%-04=%4R`H24Y#3%5$24Y'+"!"550@3D]4($Q)34E4140@5$\L(%!23T-5
+M4D5-14Y4($]&(%-50E-425155$4@1T]/1%,*(R!/4B!315)624-%4SL@3$]3
+M4R!/1B!54T4L($1!5$$L($]2(%!23T9)5%,[($]2($)54TE.15-3($E.5$52
+M4E505$E/3BD*(R!(3U=%5D52($-!55-%1"!!3D0@3TX@04Y9(%1(14]262!/
+M1B!,24%"24Q)5%DL(%=(151(15(@24X@0T].5%)!0U0L(%-44DE#5`HC($Q)
+M04))3$E462P@3U(@5$]25"`H24Y#3%5$24Y'($Y%1TQ)1T5.0T4@3U(@3U1(
+M15)725-%*2!!4DE324Y'($E.($%.62!705D*(R!/550@3T8@5$A%(%5312!/
+M1B!42$E3(%-/1E1705)%+"!%5D5.($E&($%$5DE3140@3T8@5$A%(%!/4U-)
+M0DE,2519($]&"B,@4U5#2"!$04U!1T4N"B,*9&EV97)T*#`I"E9%4E-)3TY)
+M1"A@0"@C*6-H96-K7VUA:6PN;30),BXQ("A#;&%U<R!!<W-M86YN*2`Q.3DW
+M+3`S+3,P)RD*4%532$1)5D525"@V*0II9F1E9BA@7TI53DM?1$5&24Y%1%]2
+M14Q!62<L+`HC(&9I;&4@8V]N=&%I;FEN9R!F=6QL(&4M;6%I;"!A9&1R97-S
+M97,@;V8@<W!A;6UE<G,@*&9O<B!C:&5C:U]M86EL*3H*(R!S<&%M;65R0&%D
+M9')E<W,N9&]M86EN(%-004U-15(*(R!O<B!J=6YK(&1O;6%I;G,@*&9O<B!C
+M:&5C:U]M86EL+"!C:&5C:U]R96QA>2DZ"B,@:G5N:RYD;VUA:6X@2E5.2PHC
+M(&]R($E0(&%D9')E<W-E<R`H9F]R(&-H96-K7W)E;&%Y*3H*(R!$+E@N62Y:
+M($E0"B,@0RY8+ED@25`*(R!"+E@@25`*(R!!($E0"DMJ=6YK(&EF96QS92A?
+M05)'7RP@8"<L(&!D8FT@+V5T8R]M86EL+VIU;FLG+"!@7T%21U\G*0ID969I
+M;F4H8%]*54Y+7T1%1DE.141?34%)3"<L,2D**0II9F1E9BA@7T%#0T505%]3
+M3TU%7R<L"DMA8V-E<'0@9&)M("]E=&,O;6%I;"]A8V-E<'0I"E!/4$1)5D52
+M5`H*9&EV97)T*#(I"DQ/0T%,7U)53$531513"B,@8VAE8VL@9F]R(&IU;FL@
+M9&]M86EN+W-P86UM97)S"E-J=6YK"B,@;&]O:W5P(&1O;6%I;B!I;B!D871A
+M8F%S90I2)"H\0"0K/B0J"0DD.B0Q/$`D*&IU;FL@)#(D*3XD,PHC(&5X:7-T
+M<S\@<F5T=7)N"E(D*CQ`2E5.2SXD*@D))$`D,3Q`2E5.2SXD,@HC(&QO;VMU
+M<"!A9&1R97-S(&EN(&1A=&%B87-E"E(D*CQ`)"L^)"H)"20Z)#$\0"0H:G5N
+M:R`D,4`D,B`D.B0R)"D^)#,*(R!E>&ES=',_(')E='5R;@I2)"H\0%-004U-
+M15(^)"H)"21`)#$\0%-004U-15(^)#(*(R!M=B!O;F4@<W5B9&]M86EN(&EN
+M(&9R;VYT+"!T<GD@86=A:6X*4B0J/$`D+2XD+2XD*SXD*@DD.B`D,CQ`/B`D
+M/FIU;FL@)#$\0"0S+B0T/B0U"B,@=6YD;R!D86UA9V4*4B0J/$`^)"H\0"0K
+M/B0J"0DD,CQ`)#$N)#,^)#0*"E-C:&5C:U]M86EL"B,@9&]N)W0@8VAE8VL@
+M=&AE<V4*4CPD*D`D/7<^"21`(&]K"0D)<VAO<G1C=70*(R!I9&5A(&9R;VT@
+M4W1E=F5N(%-C:'5L='H*4CP^"0DD.B`\)&X@0"`D*&1E<75O=&4@(B(@)"9[
+M8VQI96YT7VYA;65]("0I(#X*:69D968H8%]!0T-%4%1?4T]-15\G+`HC(&%C
+M8V5P="!S;VUE('-T=7!I9"!S='5F9@I2/"0J0"0K/@DD.CPD,4`D*&%C8V5P
+M="`D,B`D.B0R)"D^"E(\)"I`3TL^"21`(&]K*0I2)"H)"20Z("0^,R`D,0D)
+M"6-A;F]N:69Y"E(D+0D))$`@;VL)"0D);&]C86P@:&]S=`HC(&YO(&AO<W0@
+M=VET:&]U="!A("X@:6X@=&AE($912$X@/PI2)"H\0"0M/B0J"20C97)R;W(@
+M)$`@-2XQ+C@@)#H@-3$X(&EN=F%L:60@:&]S="!N86UE("0R+"!C:&5C:R!Y
+M;W5R(&-O;F9I9W5R871I;VXN"G5N9&5F:6YE*&!#3TU-14Y4)RED;FP*9&5F
+M:6YE*&!#3TU-14Y4)RP@:69D968H8%])4%],3T]+55!?)RP@8"<L(&`C)RDI
+M9&YL"B,@;&]O:W5P($E0(&%D9')E<W,@*')E=F5R<V4@;6%P<&EN9R!A=F%I
+M;&%B;&4_*0I#3TU-14Y48"=2)"H\0%LD+2XD+2XD+2XD+5T^)"H))#H@)#$@
+M/"!`("1;(%L@)#(N)#,N)#0N)#4@72`D72`^("0V(`IU;F1E9FEN92A@0T]-
+M345.5"<I9&YL"B,@8V]P>2!T:&4@<F5S=6QT(&]F('1H92!L;V]K=7`*4B0J
+M"0DD.B0Q("1\("0Q"B,@;F]W(')E;6]V92!T:&4@9&]T"E(D*B`D?"`D*CQ`
+M)"HN/B0J"20Z("0Q("1\("0R/$`D,SXD-`HC(&%N9"!C:&5C:R!T:&4@9&%T
+M86)A<V4*4B0J("1\("0J/$`D*CXD*@DD.B`D,2`D?"`D/FIU;FL@)#(\0"0S
+M/@I2)"H@)'P@)"H\0"0J2E5.2SXD*@DD(V5R<F]R("1`(#4N-RXQ("0Z("(U
+M-S$@5&AI<R!D;VUA:6X@:7,@8F%N;F5D+"!C;VYT86-T('EO=7(@;&]C86P@
+M861M:6XN(B`)9V\@87=A>0I2)"H@)'P@)"H\0"0J4U!!34U%4CXD*@DD(V5R
+M<F]R("1`(#4N-RXQ("0Z("(U-S$@66]U(&%R92!B86YN960L(&-O;G1A8W0@
+M>6]U<B!L;V-A;"!A9&UI;BXB(`EG;R!A=V%Y"B,@<F5S=&]R92!O<FEG:6YA
+M;"!V86QU92`H869T97(@8V%N;VYI8V%L:7IA=&EO;B!B>2!R=6QE<V5T(#,I
+M"E(D*B`D?"`D*@D))#H@)#$*=6YD969I;F4H8$-/34U%3E0G*61N;`ID969I
+M;F4H8$-/34U%3E0G+"!I9F1E9BA@7T1.4U9!3$E$7R<L(&`G+"!@(R<I*61N
+M;`HC('1H:7,@:7,@9&%N9V5R;W5S(2!N;R!R96%L(&YA;64*0T]-345.5&`G
+M4B0J/$`D*B1^4#XD*@DD(V5R<F]R("1`(#0N,2XX("0Z(#0Q."!U;G)E<V]L
+M=F%B;&4@:&]S="!N86UE("0R)#,L(&-H96-K('EO=7(@<V5T=7`N"F1I=F5R
+M="@P*0I354)35$E4551%($=/3T13"B,@3U(@4T525DE#15,[($Q/4U,@3T8@
+M55-%+"!$051!+"!/4B!04D]&2513.R!/4B!"55-)3D534R!)3E1%4E)54%1)
+M3TXI"B,@2$]7159%4B!#0553140@04Y$($].($%.62!42$5/4ED@3T8@3$E!
+M0DE,2519+"!72$542$52($E.($-/3E1204-4+"!35%))0U0*(R!,24%"24Q)
+M5%DL($]2(%1/4E0@*$E.0TQ51$E.1R!.14=,24=%3D-%($]2($]42$525TE3
+M12D@05))4TE.1R!)3B!!3ED@5T%9"B,@3U54($]&(%1(12!54T4@3T8@5$A)
+M4R!33T945T%212P@159%3B!)1B!!1%9)4T5$($]&(%1(12!03U-324))3$E4
+M62!/1@HC(%-50T@@1$%-04=%+@HC"F1I=F5R="@P*0I615)324].240H8$`H
+M(REC:&5C:U]M86EL+FTT"3(N,2`H0VQA=7,@07-S;6%N;BD@,3DY-RTP,RTS
+M,"<I"E!54TA$259%4E0H-BD*:69D968H8%]*54Y+7T1%1DE.16AA8VLO8VAE
+M8VM?;6%I;#,N;30`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```@("`V-#0@`"`@(#(S,"``("`Q-S4P(``@("`@("`@-C0V-2`@-C,V,S0S
+M-S(U,R`@(#<U,#<`(```````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````9&EV97)T*"TQ*0HC"B,@0V]P>7)I9VAT("AC*2`Q.3DV+#$Y
+M.3<@0VQA=7,@07-S;6%N;B`\8V%`:6YF;W)M871I:RYU;FDM:VEE;"YD93X*
+M(PHC($EN('-H;W)T.B!Y;W4@8V%N(&1O('=H871E=F5R('EO=2!W86YT('=I
+M=&@@=&AI<RP@8G5T(&1O;B=T(&)L86UE(&UE(0HC"B,@5$A)4R!33T945T%2
+M12!)4R!04D]6241%1"!"62!42$4@05542$]2($%.1"!#3TY44DE"551/4E,@
+M8&!!4R!)4R<G($%.1`HC($%.62!%6%!215-3($]2($E-4$Q)140@5T%24D%.
+M5$E%4RP@24Y#3%5$24Y'+"!"550@3D]4($Q)34E4140@5$\L(%1(10HC($E-
+M4$Q)140@5T%24D%.5$E%4R!/1B!-15)#2$%.5$%"24Q)5%D@04Y$($9)5$Y%
+M4U,@1D]2($$@4$%25$E#54Q!4B!055)03U-%"B,@05)%($1)4T-,04E-140N
+M("!)3B!.3R!%5D5.5"!32$%,3"!42$4@05542$]2($]2($-/3E1224)55$]2
+M4R!"12!,24%"3$4*(R!&3U(@04Y9($1)4D5#5"P@24Y$25)%0U0L($E.0TE$
+M14Y404PL(%-014-)04PL($5814U03$%262P@3U(@0T].4T51545.5$E!3`HC
+M($1!34%'15,@*$E.0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!04D]#
+M55)%345.5"!/1B!354)35$E4551%($=/3T13"B,@3U(@4T525DE#15,[($Q/
+M4U,@3T8@55-%+"!$051!+"!/4B!04D]&2513.R!/4B!"55-)3D534R!)3E1%
+M4E)54%1)3TXI"B,@2$]7159%4B!#0553140@04Y$($].($%.62!42$5/4ED@
+M3T8@3$E!0DE,2519+"!72$542$52($E.($-/3E1204-4+"!35%))0U0*(R!,
+M24%"24Q)5%DL($]2(%1/4E0@*$E.0TQ51$E.1R!.14=,24=%3D-%($]2($]4
+M2$525TE312D@05))4TE.1R!)3B!!3ED@5T%9"B,@3U54($]&(%1(12!54T4@
+M3T8@5$A)4R!33T945T%212P@159%3B!)1B!!1%9)4T5$($]&(%1(12!03U-3
+M24))3$E462!/1@HC(%-50T@@1$%-04=%+@HC"F1I=F5R="@P*0I615)324].
+M240H8$`H(REC:&5C:U]M86EL+FTT"3,N,2`H0VQA=7,@07-S;6%N;BD@,3DY
+M-RTP-RTP-B<I"E!54TA$259%4E0H-BD*:69D968H8%]*54Y+7T1%1DE.141?
+M4D5,05DG+"P*(R!F:6QE(&-O;G1A:6YI;F<@9G5L;"!E+6UA:6P@861D<F5S
+M<V5S(&]F('-P86UM97)S("AF;W(@8VAE8VM?;6%I;"DZ"B,@<W!A;6UE<D!A
+M9&1R97-S+F1O;6%I;B`B17)R;W(M0V]D92!%<G)O<BU497AT(@HC(&]R(&IU
+M;FL@9&]M86EN<R`H9F]R(&-H96-K7VUA:6PL(&-H96-K7W)E;&%Y*3H*(R!J
+M=6YK+F1O;6%I;B`@(D5R<F]R+4-O9&4@17)R;W(M5&5X="(*(R!O<B!)4"!A
+M9&1R97-S97,@*&9O<B!C:&5C:U]R96QA>2DZ"B,@1"Y8+EDN6B`B17)R;W(M
+M0V]D92!%<G)O<BU497AT(@HC($,N6"Y9(")%<G)O<BU#;V1E($5R<F]R+51E
+M>'0B"B,@0BY8(")%<G)O<BU#;V1E($5R<F]R+51E>'0B"B,@02`B17)R;W(M
+M0V]D92!%<G)O<BU497AT(@I+:G5N:R!I9F5L<V4H7T%21U\L(&`G+"!@9&)M
+M("UA0$I53DL@+V5T8R]M86EL+VIU;FLG+"!@7T%21U\G*0ID969I;F4H8%]*
+M54Y+7T1%1DE.141?34%)3"<L,2D**0II9F1E9BA@7T%#0T505%]33TU%7R<L
+M"DMA8V-E<'0@9&)M("UO("]E=&,O;6%I;"]A8V-E<'0I"E!/4$1)5D525`H*
+M9&EV97)T*#(I"DQ/0T%,7U)53$531513"B,@8VAE8VL@9F]R(&IU;FL@9&]M
+M86EN+W-P86UM97)S"E-J=6YK"B,@;&]O:W5P(&1O;6%I;B!I;B!D871A8F%S
+M90I2)"H\0"0K/@D))#HD,3Q`)"AJ=6YK("0R)"D^"B,@97AI<W1S/R!R971U
+M<FX*4B0J/$`D*D!*54Y+/@D))$`D,3Q`)#)`2E5.2SX*(R!L;V]K=7`@861D
+M<F5S<R!I;B!D871A8F%S90I2)"H\0"0K/@D))#HD,3Q`)"AJ=6YK("0Q0"0R
+M("0Z)#(D*3X*(R!E>&ES=',_(')E='5R;@I2)"H\0"0J0$I53DL^"0DD0"0Q
+M/$`D,D!*54Y+/@HC(')E;6]V92!O;F4@<W5B9&]M86EN+"!T<GD@86=A:6X*
+M4B0J/$`D+2XD+2XD*SX)"20Z("0^:G5N:R`D,3Q`)#,N)#0^"@I38VAE8VM?
+M;6%I;`HC(&1O;B=T(&-H96-K('1H97-E"E(\)"I`)#UW/@DD0"!O:PD)"7-H
+M;W)T8W5T"B,@:61E82!F<F]M(%-T979E;B!38VAU;'1Z"E(\/@D))#H@/"1N
+M($`@)"AD97%U;W1E("(B("0F>V-L:65N=%]N86UE?2`D*2`^"FEF9&5F*&!?
+M04-#15!47U-/345?)RP*(R!A8V-E<'0@<V]M92!S='5P:60@<W1U9F8*4CPD
+M*D`D*SX))#H\)#%`)"AA8V-E<'0@)#(@)#HD,B0I/@I2/"0J0$]+/@DD0"!O
+M:RD*:69D968H8%]#2$5#2U]&4D]-7R<L"B,@;6%R:R!A9&1R97-S"E(D*@D)
+M)#H\0#XD,0HC(&ES('1H92!S>6YT87@@;VL@*'5S97,@/#X@86YD(&YO(&1O
+M="!A="!T:&4@96YD/RD*4CQ`/CPD*D`D*B1^+CX))#H\)#%`)#(D,SX*(R!M
+M87)K('-T:6QL('1H97)E.B!E<G)O<BXN+@I2/$`^)"H)"20C97)R;W(@)$`@
+M-2XQ+C@@)#H@-3$X(&EL;&5G86P@34%)3"!&4D]-("0Q+`HC(&EF('=E(&1O
+M;B=T('1O('1H92!A8F]V93H@<F5M;W9E(&%T(&QE87-T('1H92!D;W0N+BX*
+M4CPD*D`D*BX^"3PD,21`,CXI"E(D*@D))#H@)#XS("0Q"0D)8V%N;VYI9GD*
+M4B0M"0DD0"!O:PD)"0EL;V-A;"!H;W-T"B,@;F\@:&]S="!W:71H;W5T(&$@
+M+B!I;B!T:&4@1E%(3B`_"E(D*CQ`)"T^)"H))"-E<G)O<B`D0"`U+C$N."`D
+M.B`U,3@@:6YV86QI9"!H;W-T(&YA;64@)#(L(&-H96-K('EO=7(@8V]N9FEG
+M=7)A=&EO;BX*=6YD969I;F4H8$-/34U%3E0G*61N;`ID969I;F4H8$-/34U%
+M3E0G+"!I9F1E9BA@7TE07TQ/3TM54%\G+"!@)RP@8",G*2ED;FP*(R!L;V]K
+M=7`@25`@861D<F5S<R`H<F5V97)S92!M87!P:6YG(&%V86EL86)L93\I"D-/
+M34U%3E1@)U(D*CQ`6R0M+B0M+B0M+B0M73XD*@DD.B`D,2`\($`@)%L@6R`D
+M,BXD,RXD-"XD-2!=("1=(#X@)#8@"B,@8V]P>2!T:&4@<F5S=6QT(&]F('1H
+M92!L;V]K=7`*4B0J"0DD.B0Q("1\("0Q"B,@;F]W(')E;6]V92!T:&4@9&]T
+M"E(D*B`D?"`D*CQ`)"HN/B0J"20Z("0Q("1\("0R/$`D,SXD-`HC(&%N9"!C
+M:&5C:R!T:&4@9&%T86)A<V4*4B0J("1\("0J/$`D*CXD*@DD.B`D,2`D?"`D
+M/FIU;FL@)#(\0"0S/@HC(&UA=&-H.B!R971U<FX@9VEV96X@97)R;W(@8V]D
+M92`H<FAS(&]F(&UA<"D*4B0J("1\("0J/$`D*D!*54Y+/B0J"20C97)R;W(@
+M)$`@-2XW+C$@)#H@)#,*(R!R97-T;W)E(&]R:6=I;F%L('9A;'5E("AA9G1E
+M<B!C86YO;FEC86QI>F%T:6]N(&)Y(')U;&5S970@,RD*4B0J("1\("0J"0DD
+M.B`D,0IU;F1E9FEN92A@0T]-345.5"<I9&YL"F1E9FEN92A@0T]-345.5"<L
+M(&EF9&5F*&!?1$Y35D%,241?)RP@8"<L(&`C)RDI9&YL"B,@=&AI<R!I<R!D
+M86YG97)O=7,A(&YO(')E86P@;F%M90I#3TU-14Y48"=2)"H\0"0J)'Y0/B0J
+M"20C97)R;W(@)$`@-"XQ+C@@)#H@-#$X('5N<F5S;VQV86)L92!H;W-T(&YA
+M;64@)#(D,RP@8VAE8VL@>6]U<B!S971U<"X*=6YD969I;F4H8$-/34U%3E0G
+M*61N;`ID:79E<G0H,"D*04Y9(%=!60HC($]55"!/1B!42$4@55-%($]&(%1(
+M25,@4T]&5%=!4D4L($5614X@248@041625-%1"!/1B!42$4@4$]34TE"24Q)
+M5%D@3T8*(R!354-(($1!34%'12X*(PID:79E<G0H,"D*5D524TE/3DE$*&!`
+M*",I8VAE8VM?;6%I;"YM-`DS+C$@*$-L875S($%S<VUA;FXI(#$Y.3<M,#<M
+M,#8G*0I055-(1$E615)4*#8I"FEF9&5F*&!?2E5.2U]$149)3D5H86-K+V-H
+M96-K7W)C<'0N;30`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````("`@-C0T(``@("`R,S`@`"`@,3<U,"``("`@("`@(#,U,#,@(#8S-#4R
+M-C4S-3,@("`W-#0P`"``````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````&1I=F5R="@M,2D*(PHC($-O<'ER:6=H="`H8RD@,3DY-B!#
+M;&%U<R!!<W-M86YN(#QC84!I;F9O<FUA=&EK+G5N:2UK:65L+F1E/@HC"B,@
+M26X@<VAO<G0Z('EO=2!C86X@9&\@=VAA=&5V97(@>6]U('=A;G0@=VET:"!T
+M:&ES+"!B=70@9&]N)W0@8FQA;64@;64A"B,*(R!42$E3(%-/1E1705)%($E3
+M(%!23U9)1$5$($)9(%1(12!!551(3U(@04Y$($-/3E1224)55$]24R!@8$%3
+M($E3)R<@04Y$"B,@04Y9($584%)%4U,@3U(@24U03$E%1"!705)204Y42453
+M+"!)3D-,541)3D<L($)55"!.3U0@3$E-251%1"!43RP@5$A%"B,@24U03$E%
+M1"!705)204Y42453($]&($U%4D-(04Y404))3$E462!!3D0@1DE43D534R!&
+M3U(@02!005)424-53$%2(%!54E!/4T4*(R!!4D4@1$E30TQ!24U%1"X@($E.
+M($Y/($5614Y4(%-(04Q,(%1(12!!551(3U(@3U(@0T].5%))0E543U)3($)%
+M($Q)04),10HC($9/4B!!3ED@1$E214-4+"!)3D1)4D5#5"P@24Y#241%3E1!
+M3"P@4U!%0TE!3"P@15A%35!,05)9+"!/4B!#3TY315%514Y424%,"B,@1$%-
+M04=%4R`H24Y#3%5$24Y'+"!"550@3D]4($Q)34E4140@5$\L(%!23T-54D5-
+M14Y4($]&(%-50E-425155$4@1T]/1%,*(R!/4B!315)624-%4SL@3$]34R!/
+M1B!54T4L($1!5$$L($]2(%!23T9)5%,[($]2($)54TE.15-3($E.5$524E50
+M5$E/3BD*(R!(3U=%5D52($-!55-%1"!!3D0@3TX@04Y9(%1(14]262!/1B!,
+M24%"24Q)5%DL(%=(151(15(@24X@0T].5%)!0U0L(%-44DE#5`HC($Q)04))
+M3$E462P@3U(@5$]25"`H24Y#3%5$24Y'($Y%1TQ)1T5.0T4@3U(@3U1(15)7
+M25-%*2!!4DE324Y'($E.($%.62!705D*(R!/550@3T8@5$A%(%5312!/1B!4
+M2$E3(%-/1E1705)%+"!%5D5.($E&($%$5DE3140@3T8@5$A%(%!/4U-)0DE,
+M2519($]&"B,@4U5#2"!$04U!1T4N"B,*9&EV97)T*#`I"E9%4E-)3TY)1"A@
+M0"@C*6-H96-K7W)C<'0N;30),2XP("A#;&%U<R!!<W-M86YN*2`Q.3DV+3$Q
+M+3(S)RD*"@ID:79E<G0H,BD*3$]#04Q?4E5,15-%5%,*4V-H96-K7W)C<'0*
+M4B0K"0D))#H@)#XS("0Q"0D)"6-A;F]N:69Y"E(D*PD)"20Z("0H9&5Q=6]T
+M92`D,2`D*0I2)"T)"0DD0"!O:PD)"0D)=&\@:&5R90I2)"H@)2`D*@D))#H@
+M<F5L87D@871T96UP=`I2)"H@0"`D*B`\($`@)"HN/@DD.B!R96QA>2!A='1E
+M;7!T"E(D*R`\($`@)#UW+CX)"21`(&]K"0D)"0ET;R!H97)E"FEF9&5F*&!?
+M55-%7U)%3$%95$]?)RQ@)RQ@(R<I9&YL"E(D*R`\($`@)"HD/7M296QA>51O
+M?2X^"21`(&]K"0EA;&QO=R!R96QA>2!T;R!T:&5R90ID969I;F4H8$-/34U%
+M3E0G+"!I9F1E9BA@7U5315])4%\G+"!@)RP@8",G*2ED;FP*0T]-345.5&`G
+M4B0K"0D))#H@)"AD97%U;W1E("(B("0F>V-L:65N=%]A9&1R?2`D*0I#3TU-
+M14Y48"=2,`D)"21`(&]K"0EC;&EE;G1?861D<B!I<R`P(&9O<B!S96YD;6%I
+M;"`M8G,*0T]-345.5&`G4B0]>TQO8V%L25!]+B0J"0DD0"!O:PD)"0D)9G)O
+M;2!H97)E"G5N9&5F:6YE*&!#3TU-14Y4)RED;FP*9&5F:6YE*&!#3TU-14Y4
+M)RP@:69D968H8%]54T5?3D%-15-?)RP@8"<L(&`C)RDI9&YL"D-/34U%3E1@
+M)U(D*PD)"20Z("0H9&5Q=6]T92`B(B`D)GMC;&EE;G1?;F%M97T@)"D*0T]-
+M345.5&`G4B0M"0D))$`@;VL)"0D)"69R;VT@:&5R90I#3TU-14Y48"=2)"HD
+M/7M,;V-A;$YA;65S?0D))$`@;VL)"0D)"69R;VT@:&5R90IU;F1E9FEN92A@
+M0T]-345.5"<I9&YL"FEF9&5F*&!?55-%7U)#4%1?)RP@8"<L(&!E<G)P<FEN
+M="A@2$%#2R`B8VAE8VM?<F-P="(@<F5Q=6ER97,@=7-E7VEP(&]R('5S95]N
+M86UE<R<I)RD*4B0J"0D))"-E<G)O<B`D0"`U+C<N,2`D.B`B-3<Q('=E(&1O
+M(&YO="!S=7!P;W)T(')E;&%Y:6YG(@H*('-U8F1O;6%I;BP@=')Y(&%G86EN
+M"E(D*CQ`)"TN)"TN)"L^"0DD.B`D/FIU;FL@)#$\0"0S+B0T/@H*4V-H96-K
+M7VUA:6P*(R!D;VXG="!C:&5C:R!T:&5S90I2/"0J0"0]=SX))$`@;VL)"0ES
+M:&]R=&-U=`HC(&ED96$@9G)O;2!3=&5V96X@4V-H=6QT>@I2/#X)"20Z(#PD
+M;B!`("0H9&5Q=6]T92`B(B`D)GMC;&EE;G1?;F%M97T@:&%C:R]C:&5C:U]R
+M8W!T,BYM-```````````````````````````````````````````````````
+M`````````````````````````````````````````````````````````"`@
+M(#8T-"``("`@,C,P(``@(#$W-3`@`"`@("`@("`T,#(Q("`V,S0U,C8U,S8T
+M("`@-S4R,``@````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````!D:79E<G0H+3$I"B,*(R!#;W!Y<FEG:'0@*&,I(#$Y.3<@0VQA=7,@
+M07-S;6%N;B`\8V%`:6YF;W)M871I:RYU;FDM:VEE;"YD93X*(PHC($EN('-H
+M;W)T.B!Y;W4@8V%N(&1O('=H871E=F5R('EO=2!W86YT('=I=&@@=&AI<RP@
+M8G5T(&1O;B=T(&)L86UE(&UE(0HC"B,@5$A)4R!33T945T%212!)4R!04D]6
+M241%1"!"62!42$4@05542$]2($%.1"!#3TY44DE"551/4E,@8&!!4R!)4R<G
+M($%.1`HC($%.62!%6%!215-3($]2($E-4$Q)140@5T%24D%.5$E%4RP@24Y#
+M3%5$24Y'+"!"550@3D]4($Q)34E4140@5$\L(%1(10HC($E-4$Q)140@5T%2
+M4D%.5$E%4R!/1B!-15)#2$%.5$%"24Q)5%D@04Y$($9)5$Y%4U,@1D]2($$@
+M4$%25$E#54Q!4B!055)03U-%"B,@05)%($1)4T-,04E-140N("!)3B!.3R!%
+M5D5.5"!32$%,3"!42$4@05542$]2($]2($-/3E1224)55$]24R!"12!,24%"
+M3$4*(R!&3U(@04Y9($1)4D5#5"P@24Y$25)%0U0L($E.0TE$14Y404PL(%-0
+M14-)04PL($5814U03$%262P@3U(@0T].4T51545.5$E!3`HC($1!34%'15,@
+M*$E.0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!04D]#55)%345.5"!/
+M1B!354)35$E4551%($=/3T13"B,@3U(@4T525DE#15,[($Q/4U,@3T8@55-%
+M+"!$051!+"!/4B!04D]&2513.R!/4B!"55-)3D534R!)3E1%4E)54%1)3TXI
+M"B,@2$]7159%4B!#0553140@04Y$($].($%.62!42$5/4ED@3T8@3$E!0DE,
+M2519+"!72$542$52($E.($-/3E1204-4+"!35%))0U0*(R!,24%"24Q)5%DL
+M($]2(%1/4E0@*$E.0TQ51$E.1R!.14=,24=%3D-%($]2($]42$525TE312D@
+M05))4TE.1R!)3B!!3ED@5T%9"B,@3U54($]&(%1(12!54T4@3T8@5$A)4R!3
+M3T945T%212P@159%3B!)1B!!1%9)4T5$($]&(%1(12!03U-324))3$E462!/
+M1@HC(%-50T@@1$%-04=%+@HC"F1I=F5R="@P*0I615)324].240H8$`H(REC
+M:&5C:U]R8W!T,BYM-`DR+C`@*$-L875S($%S<VUA;FXI(#$Y.3<M,#,M,#$G
+M*0H*9&EV97)T*#(I"DQ/0T%,7U)53$531513"E-C:&5C:U]R8W!T"G5N9&5F
+M:6YE*&!#3TU-14Y4)RED;FP*9&5F:6YE*&!#3TU-14Y4)RP@:69D968H8%]5
+M4T5?3D%-15-?)RP@8"<L(&`C)RDI9&YL"D-/34U%3E1@)R,@9FER<W0Z(&=E
+M="!C;&EE;G0@;F%M90I#3TU-14Y48"=2)"L)"0DD.B`D*&1E<75O=&4@(B(@
+M)"9[8VQI96YT7VYA;65]("0I("1\("0Q"D-/34U%3E1@)U(@)'P@)"H)"0DD
+M0"!O:PD)"6YO(&-L:65N="!N86UE.B!D:7)E8W1L>2!I;G9O:V5D"D-/34U%
+M3E1@)R-2)"T@)'P@)"H)"21`(&]K"0D)9F]R('1H;W-E('=I=&AO=70@9G5L
+M;"!$3E,N+BX*0T]-345.5&`G4B0J)#UW("1\("0J"0DD0"!O:PD)"69R;VT@
+M:&5R90II9F1E9BA@7U5315]214Q!651/7R<L8"<L8",G*61N;`I2)"HD/7M2
+M96QA>51O?2`D?"`D*@D))$`@;VL)"69R;VT@86QL;W=E9"!S>7-T96T*=6YD
+M969I;F4H8$-/34U%3E0G*61N;`ID969I;F4H8$-/34U%3E0G+"!I9F1E9BA@
+M7U5315])4%\G+"!@)RP@8",G*2ED;FP*0T]-345.5&`G(R!F:7)S=#H@9V5T
+M(&-L:65N="!A9&1R97-S"D-/34U%3E1@)U(D*PD)"20Z("0H9&5Q=6]T92`B
+M(B`D)GMC;&EE;G1?861D<GT@)"D@)'P@)#$*0T]-345.5&`G4C`@)'P@)"H)
+M"0DD0"!O:PD)"6-L:65N=%]A9&1R(&ES(#`@9F]R('-E;F1M86EL("UB<PI#
+M3TU-14Y48"=2)#U[3&]C86Q)4'TD*B`D?"`D*@DD0"!O:PD)"69R;VT@:&5R
+M90IU;F1E9FEN92A@0T]-345.5"<I9&YL"FEF9&5F*&!?55-%7U)#4%1?)RP@
+M8"<L(&!E<G)P<FEN="A@2$%#2R`B8VAE8VM?<F-P="(@<F5Q=6ER97,@=7-E
+M7VEP(&]R('5S95]N86UE<R<I)RD*(R!N;W<@8VAE8VL@;W1H97(@<VED90I2
+M)"H@)'P@)"H)"20Z("0^,R`D,@HC(')E;6]V92!L;V-A;"!P87)T+"!M87EB
+M92!R97!E871E9&QY"E(D*CQ`)#UW+CXD*@D))#XS("0Q("0S"FEF9&5F*&!?
+M55-%7U)%3$%95$]?)RQ@)RQ@(R<I9&YL"E(D*CQ`)"HD/7M296QA>51O?2X^
+M)"H)"20^,R`D,2`D,PHC('-T:6QL('-O;65T:&EN9R!L969T/PI2)"H\0"0J
+M/B0J"0DD(V5R<F]R("1`(#4N-RXQ("0Z(#4W,2!W92!D;R!N;W0@<F5L87D*
+M4%1?4T]-15\G+`HC(&%C8V5P="!S;VUE('-T=7!I9"!S='5F9@I2/"0J0"0K
+M/@DD.CPD,4`D*&%C8V5P="`D,B`D.B0R)"D^"E(\)"I`3TL^"21`(&]K*0II
+M9F1E9BA@7T-(14-+7T923TU?)RP*(R!M87)K(&%D9')E<W,*4B0J"0DD.CQ`
+M/B0Q"B,@:7,@=&AE('-Y;G1A>"!O:R`H=7-E<R`\/B!A;F0@;F\@9&]T(&%T
+M('1H92!E;F0_*0I2/$`^/"0J0"0J)'XN/@DD.CPD,4`D,B0S/@HC(&UA<FL@
+M<W1I;&P@=&AE<F4Z(&5R<F]R+BXN"E(\0#XD*@D))"-E<G)O<B`D0"`U+C$N
+M."`D.B`U,3@@:6QL96=A;"!-04E,($923TT@)#$L"B,@:68@=V4@9&]N)W0@
+M=&\@=&AE(&%B;W9E.B!R96UO=F4@870@;&5A<W0@=&AE(&1O="XN+@I2/"0J
+M0"0J+CX)/"0Q)$`R/BD*4B0J"0DD.B`D/C,@)#$)"0EC86YO;FEF>0I2)"T)
+M"21`(&]K"0D)"6QO8V%L(&AO<W0*(R!N;R!H;W-T('=I=&AO=70@82`N(&EN
+M('1H92!&44A.(#\*4B0J/$`D+3XD*@DD(V5R<F]R("1`(#4N,2XX("0Z(#4Q
+M:&%C:R]C:&5C:U]R8W!T,RYM-```````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````"`@(#8T-"``("`@,C,P(``@(#$W-3`@`"`@("`@("`S-#0U
+M("`V,S$S,#$R-3(Q("`@-S4P-@`@````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````!D:79E<G0H+3$I"B,*(R!#;W!Y<FEG:'0@*&,I
+M(#$Y.3<@0VQA=7,@07-S;6%N;B`\8V%`:6YF;W)M871I:RYU;FDM:VEE;"YD
+M93X*(PHC($EN('-H;W)T.B!Y;W4@8V%N(&1O('=H871E=F5R('EO=2!W86YT
+M('=I=&@@=&AI<RP@8G5T(&1O;B=T(&)L86UE(&UE(0HC"B,@5$A)4R!33T94
+M5T%212!)4R!04D]6241%1"!"62!42$4@05542$]2($%.1"!#3TY44DE"551/
+M4E,@8&!!4R!)4R<G($%.1`HC($%.62!%6%!215-3($]2($E-4$Q)140@5T%2
+M4D%.5$E%4RP@24Y#3%5$24Y'+"!"550@3D]4($Q)34E4140@5$\L(%1(10HC
+M($E-4$Q)140@5T%24D%.5$E%4R!/1B!-15)#2$%.5$%"24Q)5%D@04Y$($9)
+M5$Y%4U,@1D]2($$@4$%25$E#54Q!4B!055)03U-%"B,@05)%($1)4T-,04E-
+M140N("!)3B!.3R!%5D5.5"!32$%,3"!42$4@05542$]2($]2($-/3E1224)5
+M5$]24R!"12!,24%"3$4*(R!&3U(@04Y9($1)4D5#5"P@24Y$25)%0U0L($E.
+M0TE$14Y404PL(%-014-)04PL($5814U03$%262P@3U(@0T].4T51545.5$E!
+M3`HC($1!34%'15,@*$E.0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!0
+M4D]#55)%345.5"!/1B!354)35$E4551%($=/3T13"B,@3U(@4T525DE#15,[
+M($Q/4U,@3T8@55-%+"!$051!+"!/4B!04D]&2513.R!/4B!"55-)3D534R!)
+M3E1%4E)54%1)3TXI"B,@2$]7159%4B!#0553140@04Y$($].($%.62!42$5/
+M4ED@3T8@3$E!0DE,2519+"!72$542$52($E.($-/3E1204-4+"!35%))0U0*
+M(R!,24%"24Q)5%DL($]2(%1/4E0@*$E.0TQ51$E.1R!.14=,24=%3D-%($]2
+M($]42$525TE312D@05))4TE.1R!)3B!!3ED@5T%9"B,@3U54($]&(%1(12!5
+M4T4@3T8@5$A)4R!33T945T%212P@159%3B!)1B!!1%9)4T5$($]&(%1(12!0
+M3U-324))3$E462!/1@HC(%-50T@@1$%-04=%+@HC"F1I=F5R="@P*0I615)3
+M24].240H8$`H(REC:&5C:U]R8W!T,RYM-`DR+C(@*$-L875S($%S<VUA;FXI
+M(#$Y.3<M,#,M,#DG*0H*9&EV97)T*#(I"DQ/0T%,7U)53$531513"E-C:&5C
+M:U]R8W!T"FEF9&5F*&!?55-%7U)#4%1?)RP@8"<L(&!E<G)P<FEN="A@2$%#
+M2R`B8VAE8VM?<F-P="(@<F5Q=6ER97,@=7-E7VEP(&]R('5S95]N86UE<R<I
+M)RED;FP*:69D968H8%]54T5?3D%-15-?)RP*(R!F:7)S=#H@9V5T(&-L:65N
+M="!N86UE"E(D*PD)"20Z("0H9&5Q=6]T92`B(B`D)GMC;&EE;G1?;F%M97T@
+M)"D@)'P@)#$*4B`D?"`D*@D)"21`(&]K"0EN;R!C;&EE;G0@;F%M93H@9&ER
+M96-T;'D@:6YV;VME9`HC4B0M("1\("0J"0DD0"!O:PD)9F]R('1H;W-E('=I
+M=&AO=70@9G5L;"!$3E,N+BX*4B0J)#U[3&]C86Q.86UE<WT@)'P@)"H))$`@
+M;VL)"69R;VT@86QL;W=E9"!S>7-T96T*4B0J)#UW("1\("0J"0DD0"!O:PD)
+M9G)O;2!H97)E("AI;G-T96%D(&]F($QO8V%L3F%M97,I"BP*(R!F:7)S=#H@
+M9V5T(&-L:65N="!A9&1R97-S"E(D*PD)"20Z("0H9&5Q=6]T92`B(B`D)GMC
+M;&EE;G1?861D<GT@)"D@)'P@)#$*4C`@)'P@)"H)"21`(&]K"0EC;&EE;G1?
+M861D<B!I<R`P(&9O<B!S96YD;6%I;"`M8G,*4B0]>TQO8V%L25!])"H@)'P@
+M)"H))$`@;VL)"69R;VT@:&5R90HI9&YL"B,@;F]W(&-H96-K(&]T:&5R('-I
+M9&4*4B0J("1\("0J"0DD.B`D/C,@)#(*(R!R96UO=F4@;&]C86P@<&%R="P@
+M;6%Y8F4@<F5P96%T961L>0II9F1E9BA@7U5315]214Q!651/7R<L"E(D*CQ`
+M)"HD/7M296QA>51O?2X^)"H)"20^,R`D,2`D-`HL"E(D*CQ`)#UW+CXD*@D)
+M)#XS("0Q("0S"BED;FP*(R!S=&EL;"!S;VUE=&AI;F<@;&5F=#\*4B0J/$`D
+M*SXD*@D))"-E<G)O<B`D0"`U+C<N,2`D.B`U-S$@=V4@9&\@;F]T(')E;&%Y
+M"D%225-)3D<@24X@04Y9(%=!60HC($]55"!/1B!42$4@55-%($]&(%1(25,@
+M4T]&5%=!4D4L($5614X@248@041625-%1"!/1B!42$4@4$]34TE"24Q)5%D@
+M3T8*(R!354-(($1!34%'12X*(PID:79E<G0H,"D*5D524TE/3DE$*&!`*",I
+M8VAE8VM?<F-P=#,N;30),BXR("A#;&%U<R!!<W-M86YN*2`Q.3DW+3`S+3`Y
+M)RD*"F1I=F5R="@R*0I,3T-!3%]254Q%4T544PI38VAE8VM?<F-P=&AA8VLO
+M8VAE8VM?<F-P=#0N;30`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````@("`V-#0@`"`@(#(S,"``("`Q-S4P(``@("`@("`@,S<V-2`@-C,Q
+M,S`Q-3,R-"`@(#<U,C``(```````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````9&EV97)T*"TQ*0HC"B,@0V]P>7)I9VAT("AC*2`Q.3DW
+M($-L875S($%S<VUA;FX@/&-A0&EN9F]R;6%T:6LN=6YI+6MI96PN9&4^"B,*
+M(R!);B!S:&]R=#H@>6]U(&-A;B!D;R!W:&%T979E<B!Y;W4@=V%N="!W:71H
+M('1H:7,L(&)U="!D;VXG="!B;&%M92!M92$*(PHC(%1(25,@4T]&5%=!4D4@
+M25,@4%)/5DE$140@0ED@5$A%($%55$A/4B!!3D0@0T].5%))0E543U)3(&!@
+M05,@25,G)R!!3D0*(R!!3ED@15A04D534R!/4B!)35!,245$(%=!4E)!3E1)
+M15,L($E.0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!42$4*(R!)35!,
+M245$(%=!4E)!3E1)15,@3T8@34520TA!3E1!0DE,2519($%.1"!&251.15-3
+M($9/4B!!(%!!4E1)0U5,05(@4%524$]310HC($%212!$25-#3$%)345$+B`@
+M24X@3D\@159%3E0@4TA!3$P@5$A%($%55$A/4B!/4B!#3TY44DE"551/4E,@
+M0D4@3$E!0DQ%"B,@1D]2($%.62!$25)%0U0L($E.1$E214-4+"!)3D-)1$5.
+M5$%,+"!34$5#24%,+"!%6$5-4$Q!4EDL($]2($-/3E-%455%3E1)04P*(R!$
+M04U!1T53("A)3D-,541)3D<L($)55"!.3U0@3$E-251%1"!43RP@4%)/0U52
+M14U%3E0@3T8@4U5"4U1)5%5412!'3T]$4PHC($]2(%-%4E9)0T53.R!,3U-3
+M($]&(%5312P@1$%402P@3U(@4%)/1DE44SL@3U(@0E5324Y%4U,@24Y415)2
+M55!424].*0HC($A/5T5615(@0T%54T5$($%.1"!/3B!!3ED@5$A%3U)9($]&
+M($Q)04))3$E462P@5TA%5$A%4B!)3B!#3TY44D%#5"P@4U1224-4"B,@3$E!
+M0DE,2519+"!/4B!43U)4("A)3D-,541)3D<@3D5'3$E'14Y#12!/4B!/5$A%
+M4E=)4T4I($%225-)3D<@24X@04Y9(%=!60HC($]55"!/1B!42$4@55-%($]&
+M(%1(25,@4T]&5%=!4D4L($5614X@248@041625-%1"!/1B!42$4@4$]34TE"
+M24Q)5%D@3T8*(R!354-(($1!34%'12X*(PID:79E<G0H,"D*5D524TE/3DE$
+M*&!`*",I8VAE8VM?<F-P=#0N;30),BXS("A#;&%U<R!!<W-M86YN*2`Q.3DW
+M+3`S+3$V)RD*"F1I=F5R="@R*0ID969I;F4H8%]54T5?3D%-15-?4E5,15,G
+M+&!2("1@)WP@)&`G*@D)"21@)T`@;VL)"6YO(&-L:65N="!N86UE.B!D:7)E
+M8W1L>2!I;G9O:V5D"B-2)&`G+2`D8"=\("1@)RH)"21@)T`@;VL)"69O<B!T
+M:&]S92!W:71H;W5T(&9U;&P@1$Y3+BXN"E(D8"<J)&`G/7<@)&`G?"`D8"<J
+M"0DD8"=`(&]K"0EF<F]M(&AE<F4*4B1@)RHD8"<]>TQO8V%L3F%M97-]("1@
+M)WP@)&`G*@DD8"=`(&]K"0EF<F]M(&%L;&]W960@<WES=&5M)RD*3$]#04Q?
+M4E5,15-%5%,*4V-H96-K7W)C<'0*:69D968H8%]54T5?4D-05%\G+"!@)RP@
+M8&5R<G!R:6YT*&!(04-+(")C:&5C:U]R8W!T(B!R97%U:7)E<R!U<V5?:7`@
+M;W(@=7-E7VYA;65S)RDG*61N;`II9F1E9BA@7U5315])4%\G+`HC(&9I<G-T
+M.B!G970@8VQI96YT(&%D9')E<W,*4B0K"0D))#H@)"AD97%U;W1E("(B("0F
+M>V-L:65N=%]A9&1R?2`D*2`D?"`D,0I2,"`D?"`D*@D))$`@;VL)"6-L:65N
+M=%]A9&1R(&ES(#`@9F]R('-E;F1M86EL("UB<PI2)#U[3&]C86Q)4'TD*B`D
+M?"`D*@DD0"!O:PD)9G)O;2!H97)E"FEF9&5F*&!?55-%7TY!34537R<L"B,@
+M;F5X=#H@9V5T(&-L:65N="!N86UE"E(D*B`D?"`D*PD))#H@)"AD97%U;W1E
+M("(B("0F>V-L:65N=%]N86UE?2`D*2`D?"`D,@I?55-%7TY!34537U)53$53
+M"BDL"B,@9FER<W0Z(&=E="!C;&EE;G0@;F%M90I2)"L)"0DD.B`D*&1E<75O
+M=&4@(B(@)"9[8VQI96YT7VYA;65]("0I("1\("0Q"E]54T5?3D%-15-?4E5,
+M15,**61N;`HC(&YO=R!C:&5C:R!O=&AE<B!S:61E"E(D*B`D?"`D*@D))#H@
+M)#XS("0R"FEF9&5F*&!?55-%7U)%3$%95$]?)RP*(R!R96UO=F4@4F5L87E4
+M;R!P87)T("AM87EB92!R97!E871E9&QY*0I2)"H\0"0J)#U[4F5L87E4;WTN
+M/B0J"0DD/C,@)#$@)#0**61N;`HC(')E;6]V92!L;V-A;"!P87)T("AM87EB
+M92!R97!E871E9&QY*0I2)"H\0"0]=RX^)"H)"20^,R`D,2`D,PHC('-T:6QL
+M('-O;65T:&EN9R!L969T/PI2)"H\0"0K/B0J"0DD(V5R<F]R("1`(#4N-RXQ
+M("0Z(#4W,2!W92!D;R!N;W0@<F5L87D*+C<N,2`D.B`U-S%H86-K+V-H96-K
+M7W)E;&%Y+FTT````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M("`@-C0T(``@("`R,S`@`"`@,3<U,"``("`@("`@(#,U-#(@(#8S-#(R-C<U
+M-S(@("`W-C$Q`"``````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````&1I=F5R="@M,2D*(PHC($-O<'ER:6=H="`H8RD@,3DY-R!#;&%U
+M<R!!<W-M86YN(#QC84!I;F9O<FUA=&EK+G5N:2UK:65L+F1E/@HC"B,@26X@
+M<VAO<G0Z('EO=2!C86X@9&\@=VAA=&5V97(@>6]U('=A;G0@=VET:"!T:&ES
+M+"!B=70@9&]N)W0@8FQA;64@;64A"B,*(R!42$E3(%-/1E1705)%($E3(%!2
+M3U9)1$5$($)9(%1(12!!551(3U(@04Y$($-/3E1224)55$]24R!@8$%3($E3
+M)R<@04Y$"B,@04Y9($584%)%4U,@3U(@24U03$E%1"!705)204Y42453+"!)
+M3D-,541)3D<L($)55"!.3U0@3$E-251%1"!43RP@5$A%"B,@24U03$E%1"!7
+M05)204Y42453($]&($U%4D-(04Y404))3$E462!!3D0@1DE43D534R!&3U(@
+M02!005)424-53$%2(%!54E!/4T4*(R!!4D4@1$E30TQ!24U%1"X@($E.($Y/
+M($5614Y4(%-(04Q,(%1(12!!551(3U(@3U(@0T].5%))0E543U)3($)%($Q)
+M04),10HC($9/4B!!3ED@1$E214-4+"!)3D1)4D5#5"P@24Y#241%3E1!3"P@
+M4U!%0TE!3"P@15A%35!,05)9+"!/4B!#3TY315%514Y424%,"B,@1$%-04=%
+M4R`H24Y#3%5$24Y'+"!"550@3D]4($Q)34E4140@5$\L(%!23T-54D5-14Y4
+M($]&(%-50E-425155$4@1T]/1%,*(R!/4B!315)624-%4SL@3$]34R!/1B!5
+M4T4L($1!5$$L($]2(%!23T9)5%,[($]2($)54TE.15-3($E.5$524E505$E/
+M3BD*(R!(3U=%5D52($-!55-%1"!!3D0@3TX@04Y9(%1(14]262!/1B!,24%"
+M24Q)5%DL(%=(151(15(@24X@0T].5%)!0U0L(%-44DE#5`HC($Q)04))3$E4
+M62P@3U(@5$]25"`H24Y#3%5$24Y'($Y%1TQ)1T5.0T4@3U(@3U1(15)725-%
+M*2!!4DE324Y'($E.($%.62!705D*(R!/550@3T8@5$A%(%5312!/1B!42$E3
+M(%-/1E1705)%+"!%5D5.($E&($%$5DE3140@3T8@5$A%(%!/4U-)0DE,2519
+M($]&"B,@4U5#2"!$04U!1T4N"B,*9&EV97)T*#`I"E9%4E-)3TY)1"A@0"@C
+M*6-H96-K7W)E;&%Y+FTT"3(N,"`H0VQA=7,@07-S;6%N;BD@,3DY-RTP-2TR
+M-2<I"E!54TA$259%4E0H-BD*:69D968H8%]*54Y+7T1%1DE.141?34%)3"<L
+M+`HC(&9I;&4@8V]N=&%I;FEN9R!F=6QL(&4M;6%I;"!A9&1R97-S97,@;V8@
+M<W!A;6UE<G,@*&9O<B!C:&5C:U]M86EL*3H*(R!S<&%M;65R0&%D9')E<W,N
+M9&]M86EN(%-004U-15(*(R!O<B!J=6YK(&1O;6%I;G,@*&9O<B!C:&5C:U]M
+M86EL+"!C:&5C:U]R96QA>2DZ"B,@:G5N:RYD;VUA:6X@2E5.2PHC(&]R($E0
+M(&%D9')E<W-E<R`H9F]R(&-H96-K7W)E;&%Y*3H*(R!$+E@N62Y:($E0"B,@
+M0RY8+ED@25`*(R!"+E@@25`*(R!!($E0"DMJ=6YK(&EF96QS92A?05)'7RP@
+M8"<L(&!D8FT@+V5T8R]M86EL+VIU;FLG+"!@7T%21U\G*0ID969I;F4H8%]*
+M54Y+7T1%1DE.141?4D5,05DG+#$I"BD*4$]01$E615)4"@ID:79E<G0H,BD*
+M3$]#04Q?4E5,15-%5%,*4VIU;FM)4`HC(&QO;VMU<"!)4"!I;B!D871A8F%S
+M90HC(&9U;&P@25`@861D<F5S<PI2)"TN)"TN)"TN)"T))#H@)"AJ=6YK("0Q
+M+B0R+B0S+B0T("0I"B,@8VQA<W,@0R!N970*4B0M+B0M+B0M+B0M"20Z("0H
+M:G5N:R`D,2XD,BXD,R`D.B`D,2XD,BXD,RXD-"`D*0HC(&-L87-S($(@;F5T
+M"E(D+2XD+2XD+2XD+0DD.B`D*&IU;FL@)#$N)#(@)#H@)#$N)#(N)#,N)#0@
+M)"D*(R!C;&%S<R!!(&YE=`I2)"TN)"TN)"TN)"T))#H@)"AJ=6YK("0Q("0Z
+M("0Q+B0R+B0S+B0T("0I"@I38VAE8VM?<F5L87D*(R!C:&5C:R!)4`I2)"L@
+M)'P@)"L))#H@)#$@)'P@)#YJ=6YK25`@)#(*4B0K("1\($E0"20C97)R;W(@
+M)$`@-2XW+C$@)#H@(FYO(&%C8V5S<R!F<F]M('EO=7(@25`B"B,@8VAE8VL@
+M:&]S=&YA;64*4B0K("1\("0K"20Z("0^:G5N:R`\0"0Q/@I2)"H\0"0J2E5.
+M2SXD*@DD(V5R<F]R("1`(#4N-RXQ("0Z(")N;R!A8V-E<W,@9G)O;2!T:&ES
+M(&AO<W0B"B0T"BED;FP*(R!R96UO=F4@;&]C86P@<&%R="`H;6%Y8F4@<F5P
+M96%T961L>2D*4B0J/$`D/7<N/B0J"0DD/C,@)#$@)#,*(R!S=&EL;"!S;VUE
+M=&AI;F<@;&5F=#\*4B0J/$`D*SXD*@D))"-E<G)O<B`D0"`U+C<N,2`D.B`U
+M-S$@=V4@9&\@;F]T(')E;&%Y"BXW+C$@)#H@-3<Q:&%C:R]C:&5C:U]R96QA
+M>3,N;30`````````````````````````````````````````````````````
+M`````````````````````````````````````````````````````"`@(#8T
+M-"``("`@,C,P(``@(#$W-3`@`"`@("`@("`S-C<R("`V,S4W-S4P,S4W("`@
+M-S<P-``@````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``!D:79E<G0H+3$I"B,*(R!#;W!Y<FEG:'0@*&,I(#$Y.3<@0VQA=7,@07-S
+M;6%N;B`\8V%`:6YF;W)M871I:RYU;FDM:VEE;"YD93X*(PHC($EN('-H;W)T
+M.B!Y;W4@8V%N(&1O('=H871E=F5R('EO=2!W86YT('=I=&@@=&AI<RP@8G5T
+M(&1O;B=T(&)L86UE(&UE(0HC"B,@5$A)4R!33T945T%212!)4R!04D]6241%
+M1"!"62!42$4@05542$]2($%.1"!#3TY44DE"551/4E,@8&!!4R!)4R<G($%.
+M1`HC($%.62!%6%!215-3($]2($E-4$Q)140@5T%24D%.5$E%4RP@24Y#3%5$
+M24Y'+"!"550@3D]4($Q)34E4140@5$\L(%1(10HC($E-4$Q)140@5T%24D%.
+M5$E%4R!/1B!-15)#2$%.5$%"24Q)5%D@04Y$($9)5$Y%4U,@1D]2($$@4$%2
+M5$E#54Q!4B!055)03U-%"B,@05)%($1)4T-,04E-140N("!)3B!.3R!%5D5.
+M5"!32$%,3"!42$4@05542$]2($]2($-/3E1224)55$]24R!"12!,24%"3$4*
+M(R!&3U(@04Y9($1)4D5#5"P@24Y$25)%0U0L($E.0TE$14Y404PL(%-014-)
+M04PL($5814U03$%262P@3U(@0T].4T51545.5$E!3`HC($1!34%'15,@*$E.
+M0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!04D]#55)%345.5"!/1B!3
+M54)35$E4551%($=/3T13"B,@3U(@4T525DE#15,[($Q/4U,@3T8@55-%+"!$
+M051!+"!/4B!04D]&2513.R!/4B!"55-)3D534R!)3E1%4E)54%1)3TXI"B,@
+M2$]7159%4B!#0553140@04Y$($].($%.62!42$5/4ED@3T8@3$E!0DE,2519
+M+"!72$542$52($E.($-/3E1204-4+"!35%))0U0*(R!,24%"24Q)5%DL($]2
+M(%1/4E0@*$E.0TQ51$E.1R!.14=,24=%3D-%($]2($]42$525TE312D@05))
+M4TE.1R!)3B!!3ED@5T%9"B,@3U54($]&(%1(12!54T4@3T8@5$A)4R!33T94
+M5T%212P@159%3B!)1B!!1%9)4T5$($]&(%1(12!03U-324))3$E462!/1@HC
+M(%-50T@@1$%-04=%+@HC"F1I=F5R="@P*0I615)324].240H8$`H(REC:&5C
+M:U]R96QA>2YM-`DS+C`@*$-L875S($%S<VUA;FXI(#$Y.3<M,#8M,#$G*0I0
+M55-(1$E615)4*#8I"FEF9&5F*&!?2E5.2U]$149)3D5$7TU!24PG+"P*(R!F
+M:6QE(&-O;G1A:6YI;F<@9G5L;"!E+6UA:6P@861D<F5S<V5S(&]F('-P86UM
+M97)S("AF;W(@8VAE8VM?;6%I;"DZ"B,@<W!A;6UE<D!A9&1R97-S+F1O;6%I
+M;B`B17)R;W(M0V]D92!%<G)O<BU497AT(@HC(&]R(&IU;FL@9&]M86EN<R`H
+M9F]R(&-H96-K7VUA:6PL(&-H96-K7W)E;&%Y*3H*(R!J=6YK+F1O;6%I;B`@
+M(D5R<F]R+4-O9&4@17)R;W(M5&5X="(*(R!O<B!)4"!A9&1R97-S97,@*&9O
+M<B!C:&5C:U]R96QA>2DZ"B,@1"Y8+EDN6B`B17)R;W(M0V]D92!%<G)O<BU4
+M97AT(@HC($,N6"Y9(")%<G)O<BU#;V1E($5R<F]R+51E>'0B"B,@0BY8(")%
+M<G)O<BU#;V1E($5R<F]R+51E>'0B"B,@02`B17)R;W(M0V]D92!%<G)O<BU4
+M97AT(@I+:G5N:R!I9F5L<V4H7T%21U\L(&`G+"!@9&)M("UA0$I53DL@+V5T
+M8R]M86EL+VIU;FLG+"!@7T%21U\G*0ID969I;F4H8%]*54Y+7T1%1DE.141?
+M4D5,05DG+#$I"BD*4$]01$E615)4"@ID:79E<G0H,BD*3$]#04Q?4E5,15-%
+M5%,*4VIU;FM)4`HC(&QO;VMU<"!)4"!I;B!D871A8F%S90HC(&9U;&P@25`@
+M861D<F5S<PI2)"TN)"TN)"TN)"T))#H@)"AJ=6YK("0Q+B0R+B0S+B0T("0I
+M"B,@8VQA<W,@0R!N970*4B0M+B0M+B0M+B0M"20Z("0H:G5N:R`D,2XD,BXD
+M,R`D.B`D,2XD,BXD,RXD-"`D*0HC(&-L87-S($(@;F5T"E(D+2XD+2XD+2XD
+M+0DD.B`D*&IU;FL@)#$N)#(@)#H@)#$N)#(N)#,N)#0@)"D*(R!C;&%S<R!!
+M(&YE=`I2)"TN)"TN)"TN)"T))#H@)"AJ=6YK("0Q("0Z("0Q+B0R+B0S+B0T
+M("0I"@I38VAE8VM?<F5L87D*(R!C:&5C:R!)4`I2)"L@)'P@)"L))#H@)#$@
+M)'P@)#YJ=6YK25`@)#(*4B0K("1\("0J0$I53DL))"-E<G)O<B`D0"`U+C<N
+M,2`D.B`D,@HC(&-H96-K(&AO<W1N86UE"E(D*R`D?"`D*PDD.B`D/FIU;FL@
+M/$`D,3X*4B0J/$`D*D!*54Y+/B0J"20C97)R;W(@)$`@-2XW+C$@)#H@)#(*
+M24%"3$4*(R!&3U(@04Y9($1)4D5#5"P@24Y$25)%0U0L($E.0TE$14Y404PL
+M(%-014-)04PL($5814U03$%262P@3U(@0VAA8VLO<W!A;61O;7,N;30`````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````````@("`V-#0@`"`@
+M(#(S,"``("`Q-S4P(``@("`@("`@,C(P-R`@-C(T-C`U,38P,B`@(#<Q-#0`
+M(```````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````9&EV
+M97)T*"TQ*0HC"B,@0V]P>7)I9VAT("AC*2`Q.3DV($-L875S($%S<VUA;FX@
+M/&-A0&EN9F]R;6%T:6LN=6YI+6MI96PN9&4^"B,*(R!);B!S:&]R=#H@>6]U
+M(&-A;B!D;R!W:&%T979E<B!Y;W4@=V%N="!W:71H('1H:7,L(&)U="!D;VXG
+M="!B;&%M92!M92$*(PHC(%1(25,@4T]&5%=!4D4@25,@4%)/5DE$140@0ED@
+M5$A%($%55$A/4B!!3D0@0T].5%))0E543U)3(&!@05,@25,G)R!!3D0*(R!!
+M3ED@15A04D534R!/4B!)35!,245$(%=!4E)!3E1)15,L($E.0TQ51$E.1RP@
+M0E54($Y/5"!,24U)5$5$(%1/+"!42$4*(R!)35!,245$(%=!4E)!3E1)15,@
+M3T8@34520TA!3E1!0DE,2519($%.1"!&251.15-3($9/4B!!(%!!4E1)0U5,
+M05(@4%524$]310HC($%212!$25-#3$%)345$+B`@24X@3D\@159%3E0@4TA!
+M3$P@5$A%($%55$A/4B!/4B!#3TY44DE"551/4E,@0D4@3$E!0DQ%"B,@1D]2
+M($%.62!$25)%0U0L($E.1$E214-4+"!)3D-)1$5.5$%,+"!34$5#24%,+"!%
+M6$5-4$Q!4EDL($]2($-/3E-%455%3E1)04P*(R!$04U!1T53("A)3D-,541)
+M3D<L($)55"!.3U0@3$E-251%1"!43RP@4%)/0U5214U%3E0@3T8@4U5"4U1)
+M5%5412!'3T]$4PHC($]2(%-%4E9)0T53.R!,3U-3($]&(%5312P@1$%402P@
+M3U(@4%)/1DE44SL@3U(@0E5324Y%4U,@24Y415)255!424].*0HC($A/5T56
+M15(@0T%54T5$($%.1"!/3B!!3ED@5$A%3U)9($]&($Q)04))3$E462P@5TA%
+M5$A%4B!)3B!#3TY44D%#5"P@4U1224-4"B,@3$E!0DE,2519+"!/4B!43U)4
+M("A)3D-,541)3D<@3D5'3$E'14Y#12!/4B!/5$A%4E=)4T4I($%225-)3D<@
+M24X@04Y9(%=!60HC($]55"!/1B!42$4@55-%($]&(%1(25,@4T]&5%=!4D4L
+M($5614X@248@041625-%1"!/1B!42$4@4$]34TE"24Q)5%D@3T8*(R!354-(
+M($1!34%'12X*(PID:79E<G0H,"D*5D524TE/3DE$*&!`*",I<W!A;61O;7,N
+M;30),2XP("A#;&%U<R!!<W-M86YN*2`Q.3DV+3$Q+3(S)RD*9&EV97)T*"TQ
+M*0H*9&5F:6YE*&!?4U!!341/35-?)RPQ*0I055-(1$E615)4*#8I"B,@9FEL
+M92!C;VYT86EN:6YG(&1O;6%I;G,@;V8@=V5L;"UK;F]W;B!S<&%M;65R<PI&
+M>U-P86U$;VUA:6YS?2!I9F5L<V4H7T%21U\L(&`G+"!@+V5T8R]M86EL+U-P
+M86U$;VUA:6YS)RP@8%]!4D=?)RD*4$]01$E615)4"F1O;6%I;G,@*&9O<B!C
+M:&5C:U]M86EL+"!C:&5C:U]R96QA>2DZ"B,@:G5N:RYD;VUA:6X@(")%<G)O
+M<BU#;V1E($5R<F]R+51E>'0B"B,@;W(@25`@861D<F5S<V5S("AF;W(@8VAE
+M8VM?<F5L87DI.@HC($0N6"Y9+EH@(D5R<F]R+4-O9&4@17)R;W(M5&5X="(*
+M(R!#+E@N62`B17)R;W(M0V]D92!%<G)O<BU497AT(@HC($(N6"`B17)R;W(M
+M0V]D92!%<G)O<BU497AT(@HC($$@(D5R<F]R+4-O9&4@17)R;W(M5&5X="(*
+M2VIU;FL@:69E;'-E*%]!4D=?+"!@)RP@8&1B;2`M84!*54Y+("]E=&,O;6%I
+M;"]J=6YK)RP@8%]!4D=?)RD*9&5F:6YE*&!?2E5.2U]$149)3D5$7U)%3$%9
+M)RPQ*0HI"E!/4$1)5D525`H*9&EV97)T*#(I"DQ/0T%,7U)53$531513"E-J
+M=6YK:&%C:R]S<&%M;65R<RYM-```````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````"`@(#8T-"``("`@,C,P(``@(#$W-3`@`"`@("`@("`R
+M,C$U("`V,C0U-C,T,#0R("`@-S$U,P`@````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````!D:79E<G0H+3$I"B,*(R!#;W!Y<FEG:'0@
+M*&,I(#$Y.38@0VQA=7,@07-S;6%N;B`\8V%`:6YF;W)M871I:RYU;FDM:VEE
+M;"YD93X*(PHC($EN('-H;W)T.B!Y;W4@8V%N(&1O('=H871E=F5R('EO=2!W
+M86YT('=I=&@@=&AI<RP@8G5T(&1O;B=T(&)L86UE(&UE(0HC"B,@5$A)4R!3
+M3T945T%212!)4R!04D]6241%1"!"62!42$4@05542$]2($%.1"!#3TY44DE"
+M551/4E,@8&!!4R!)4R<G($%.1`HC($%.62!%6%!215-3($]2($E-4$Q)140@
+M5T%24D%.5$E%4RP@24Y#3%5$24Y'+"!"550@3D]4($Q)34E4140@5$\L(%1(
+M10HC($E-4$Q)140@5T%24D%.5$E%4R!/1B!-15)#2$%.5$%"24Q)5%D@04Y$
+M($9)5$Y%4U,@1D]2($$@4$%25$E#54Q!4B!055)03U-%"B,@05)%($1)4T-,
+M04E-140N("!)3B!.3R!%5D5.5"!32$%,3"!42$4@05542$]2($]2($-/3E12
+M24)55$]24R!"12!,24%"3$4*(R!&3U(@04Y9($1)4D5#5"P@24Y$25)%0U0L
+M($E.0TE$14Y404PL(%-014-)04PL($5814U03$%262P@3U(@0T].4T51545.
+M5$E!3`HC($1!34%'15,@*$E.0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/
+M+"!04D]#55)%345.5"!/1B!354)35$E4551%($=/3T13"B,@3U(@4T525DE#
+M15,[($Q/4U,@3T8@55-%+"!$051!+"!/4B!04D]&2513.R!/4B!"55-)3D53
+M4R!)3E1%4E)54%1)3TXI"B,@2$]7159%4B!#0553140@04Y$($].($%.62!4
+M2$5/4ED@3T8@3$E!0DE,2519+"!72$542$52($E.($-/3E1204-4+"!35%))
+M0U0*(R!,24%"24Q)5%DL($]2(%1/4E0@*$E.0TQ51$E.1R!.14=,24=%3D-%
+M($]2($]42$525TE312D@05))4TE.1R!)3B!!3ED@5T%9"B,@3U54($]&(%1(
+M12!54T4@3T8@5$A)4R!33T945T%212P@159%3B!)1B!!1%9)4T5$($]&(%1(
+M12!03U-324))3$E462!/1@HC(%-50T@@1$%-04=%+@HC"F1I=F5R="@P*0I6
+M15)324].240H8$`H(RES<&%M;65R<RYM-`DQ+C`@*$-L875S($%S<VUA;FXI
+M(#$Y.38M,3$M,C,G*0ID:79E<G0H+3$I"@ID969I;F4H8%]34$%-34524U\G
+M+#$I"E!54TA$259%4E0H-BD*(R!F:6QE(&-O;G1A:6YI;F<@9G5L;"!E+6UA
+M:6P@861D<F5S<V5S(&]F('=E;&PM:VYO=VX@<W!A;6UE<G,*1GM3<&%M;65R
+M?2!I9F5L<V4H7T%21U\L(&`G+"!@+V5T8R]M86EL+U-P86UM97(G+"!@7T%2
+M1U\G*0I03U!$259%4E0*;&%M92!M92$*(PHC(%1(25,@4T]&5%=!4D4@25,@
+M4%)/5DE$140@0ED@5$A%($%55$A/4B!!3D0@0T].5%))0E543U)3(&!@05,@
+M25,G)R!!3D0*(R!!3ED@15A04D534R!/4B!)35!,245$(%=!4E)!3E1)15,L
+M($E.0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!42$4*(R!)35!,245$
+M(%=!4E)!3E1)15,@3T8@34520TA!3E1!0DE,2519($%.1"!&251.15-3($9/
+M4B!!(%!!4E1)0U5,05(@4%524$]310HC($%212!$25-#3$%)345$+B`@24X@
+M3D\@159%3E0@4TA!3$P@5$A%($%55$A/4B!/4B!#3TY44DE"551/4E,@0D4@
+M3$E!0DQ%"B,@1D]2($%.62!$25)%0U0L($E.1$E214-4+"!)3D-)1$5.5$%,
+M+"!34$5#24%,+"!%6$5-4$Q!4EDL($]2($-H86-K+W5S95]I<"YM-```````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````("`@-C0T(``@
+M("`R,S`@`"`@,3<U,"``("`@("`@(#(R-#,@(#8R-#8P-3,T-#8@("`V-C$U
+M`"``````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````````````````&1I
+M=F5R="@M,2D*(PHC($-O<'ER:6=H="`H8RD@,3DY-B!#;&%U<R!!<W-M86YN
+M(#QC84!I;F9O<FUA=&EK+G5N:2UK:65L+F1E/@HC"B,@26X@<VAO<G0Z('EO
+M=2!C86X@9&\@=VAA=&5V97(@>6]U('=A;G0@=VET:"!T:&ES+"!B=70@9&]N
+M)W0@8FQA;64@;64A"B,*(R!42$E3(%-/1E1705)%($E3(%!23U9)1$5$($)9
+M(%1(12!!551(3U(@04Y$($-/3E1224)55$]24R!@8$%3($E3)R<@04Y$"B,@
+M04Y9($584%)%4U,@3U(@24U03$E%1"!705)204Y42453+"!)3D-,541)3D<L
+M($)55"!.3U0@3$E-251%1"!43RP@5$A%"B,@24U03$E%1"!705)204Y42453
+M($]&($U%4D-(04Y404))3$E462!!3D0@1DE43D534R!&3U(@02!005)424-5
+M3$%2(%!54E!/4T4*(R!!4D4@1$E30TQ!24U%1"X@($E.($Y/($5614Y4(%-(
+M04Q,(%1(12!!551(3U(@3U(@0T].5%))0E543U)3($)%($Q)04),10HC($9/
+M4B!!3ED@1$E214-4+"!)3D1)4D5#5"P@24Y#241%3E1!3"P@4U!%0TE!3"P@
+M15A%35!,05)9+"!/4B!#3TY315%514Y424%,"B,@1$%-04=%4R`H24Y#3%5$
+M24Y'+"!"550@3D]4($Q)34E4140@5$\L(%!23T-54D5-14Y4($]&(%-50E-4
+M25155$4@1T]/1%,*(R!/4B!315)624-%4SL@3$]34R!/1B!54T4L($1!5$$L
+M($]2(%!23T9)5%,[($]2($)54TE.15-3($E.5$524E505$E/3BD*(R!(3U=%
+M5D52($-!55-%1"!!3D0@3TX@04Y9(%1(14]262!/1B!,24%"24Q)5%DL(%=(
+M151(15(@24X@0T].5%)!0U0L(%-44DE#5`HC($Q)04))3$E462P@3U(@5$]2
+M5"`H24Y#3%5$24Y'($Y%1TQ)1T5.0T4@3U(@3U1(15)725-%*2!!4DE324Y'
+M($E.($%.62!705D*(R!/550@3T8@5$A%(%5312!/1B!42$E3(%-/1E1705)%
+M+"!%5D5.($E&($%$5DE3140@3T8@5$A%(%!/4U-)0DE,2519($]&"B,@4U5#
+M2"!$04U!1T4N"B,*9&EV97)T*#`I"E9%4E-)3TY)1"A@0"@C*75S95]I<"YM
+M-`DQ+C`@*$-L875S($%S<VUA;FXI(#$Y.38M,3$M,C,G*0ID:79E<G0H+3$I
+M"@ID969I;F4H8%]54T5?25!?)RPQ*0ID969I;F4H8%]54T5?4D-05%\G+#$I
+M"E!54TA$259%4E0H-BD*(R!F:6QE(&-O;G1A:6YI;F<@25`@;G5M8F5R<R!O
+M9B!M86-H:6YE<R!W:&EC:"!C86X@=7-E(&]U<B!R96QA>0I&>TQO8V%L25!]
+M(&EF96QS92A?05)'7RP@8"<L(&`O971C+VUA:6PO3&]C86Q)4"<L(&!?05)'
+M7R<I"E!/4$1)5D525`H*8VM?<F5L87DI.@HC(&IU;FLN9&]M86EN("`B17)R
+M;W(M0V]D92!%<G)O<BU497AT(@HC(&]R($E0(&%D9')E<W-E<R`H9F]R(&-H
+M96-K7W)E;&%Y*3H*(R!$+E@N62Y:(")%<G)O<BU#;V1E($5R<F]R+51E>'0B
+M"B,@0RY8+ED@(D5R<F]R+4-O9&4@17)R;W(M5&5X="(*(R!"+E@@(D5R<F]R
+M+4-O9&4@17)R;W(M5&5X="(*(R!!(")%<G)O<BU#;V1E($5R<F]R+51E>'0B
+M"DMJ=6YK(&EF96QS92A?05)'7RP@8"<L(&!D8FT@+6%`2E5.2R`O971C+VUA
+M:6PO:G5N:R<L(&!?05)'7R<I"F1E9FEN92A@7TI53DM?1$5&24Y%1%]214Q!
+M62<L,2D**0I03U!$259%4E0*"F1I=F5R="@R*0I,3T-!3%]254Q%4T544PI3
+M:G5N:VAA8VLO=7-E7VYA;65S+FTT````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````@("`V-#0@`"`@(#(S,"``("`Q-S4P(``@("`@("`@
+M,C(U,B`@-C(T-C`U,S0U-"`@(#<S,#<`(```````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````9&EV97)T*"TQ*0HC"B,@0V]P>7)I9VAT
+M("AC*2`Q.3DV($-L875S($%S<VUA;FX@/&-A0&EN9F]R;6%T:6LN=6YI+6MI
+M96PN9&4^"B,*(R!);B!S:&]R=#H@>6]U(&-A;B!D;R!W:&%T979E<B!Y;W4@
+M=V%N="!W:71H('1H:7,L(&)U="!D;VXG="!B;&%M92!M92$*(PHC(%1(25,@
+M4T]&5%=!4D4@25,@4%)/5DE$140@0ED@5$A%($%55$A/4B!!3D0@0T].5%))
+M0E543U)3(&!@05,@25,G)R!!3D0*(R!!3ED@15A04D534R!/4B!)35!,245$
+M(%=!4E)!3E1)15,L($E.0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!4
+M2$4*(R!)35!,245$(%=!4E)!3E1)15,@3T8@34520TA!3E1!0DE,2519($%.
+M1"!&251.15-3($9/4B!!(%!!4E1)0U5,05(@4%524$]310HC($%212!$25-#
+M3$%)345$+B`@24X@3D\@159%3E0@4TA!3$P@5$A%($%55$A/4B!/4B!#3TY4
+M4DE"551/4E,@0D4@3$E!0DQ%"B,@1D]2($%.62!$25)%0U0L($E.1$E214-4
+M+"!)3D-)1$5.5$%,+"!34$5#24%,+"!%6$5-4$Q!4EDL($]2($-/3E-%455%
+M3E1)04P*(R!$04U!1T53("A)3D-,541)3D<L($)55"!.3U0@3$E-251%1"!4
+M3RP@4%)/0U5214U%3E0@3T8@4U5"4U1)5%5412!'3T]$4PHC($]2(%-%4E9)
+M0T53.R!,3U-3($]&(%5312P@1$%402P@3U(@4%)/1DE44SL@3U(@0E5324Y%
+M4U,@24Y415)255!424].*0HC($A/5T5615(@0T%54T5$($%.1"!/3B!!3ED@
+M5$A%3U)9($]&($Q)04))3$E462P@5TA%5$A%4B!)3B!#3TY44D%#5"P@4U12
+M24-4"B,@3$E!0DE,2519+"!/4B!43U)4("A)3D-,541)3D<@3D5'3$E'14Y#
+M12!/4B!/5$A%4E=)4T4I($%225-)3D<@24X@04Y9(%=!60HC($]55"!/1B!4
+M2$4@55-%($]&(%1(25,@4T]&5%=!4D4L($5614X@248@041625-%1"!/1B!4
+M2$4@4$]34TE"24Q)5%D@3T8*(R!354-(($1!34%'12X*(PID:79E<G0H,"D*
+M5D524TE/3DE$*&!`*",I=7-E7VYA;65S+FTT"3$N,"`H0VQA=7,@07-S;6%N
+M;BD@,3DY-BTQ,2TR,R<I"F1I=F5R="@M,2D*"F1E9FEN92A@7U5315].04U%
+M4U\G+#$I"F1E9FEN92A@7U5315]20U!47R<L,2D*4%532$1)5D525"@V*0HC
+M(&9I;&4@8V]N=&%I;FEN9R!N86UE<R!O9B!M86-H:6YE<R!W:&EC:"!C86X@
+M=7-E(&]U<B!R96QA>0I&>TQO8V%L3F%M97-](&EF96QS92A?05)'7RP@8"<L
+M(&`O971C+VUA:6PO3&]C86Q.86UE<R<L(&!?05)'7R<I"E!/4$1)5D525`H*
+M(%!23U9)1$5$($)9(%1(12!!551(3U(@04Y$($-/3E1224)55$]24R!@8$%3
+M($E3)R<@04Y$"B,@04Y9($584%)%4U,@3U(@24U03$E%1"!705)204Y42453
+M+"!)3D-,541)3D<L($)55"!.3U0@3$E-251%1"!43RP@5$A%"B,@24U03$E%
+M1"!705)204Y42453($]&($U%4D-(04Y404))3$E462!!3D0@1DE43D534R!&
+M3U(@02!005)424-53$%2(%!54E!/4T4*(R!!4D4@1$E30TQ!24U%1"X@($E.
+M($Y/($5614Y4(%-(04Q,(%1(12!!551(3U(@3U(@0T].5%))0E543U)3($)%
+M($Q)04),10HC($9/4B!!3ED@1$E214-4+"!)3D1)4D5#5"P@24Y#241%3E1!
+M3"P@4U!%0TE!3"P@15A%35!,05)9+"!/4B!#:&%C:R]U<V5?<F5L87ET;RYM
+M-```````````````````````````````````````````````````````````
+M`````````````````````````````````````````````````"`@(#8T-"``
+M("`@,C,P(``@(#$W-3`@`"`@("`@("`R,3<P("`V,C0U-C,S-S4T("`@-S8W
+M,``@````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````````````!D
+M:79E<G0H+3$I"B,*(R!#;W!Y<FEG:'0@*&,I(#$Y.38@0VQA=7,@07-S;6%N
+M;B`\8V%`:6YF;W)M871I:RYU;FDM:VEE;"YD93X*(PHC($EN('-H;W)T.B!Y
+M;W4@8V%N(&1O('=H871E=F5R('EO=2!W86YT('=I=&@@=&AI<RP@8G5T(&1O
+M;B=T(&)L86UE(&UE(0HC"B,@5$A)4R!33T945T%212!)4R!04D]6241%1"!"
+M62!42$4@05542$]2($%.1"!#3TY44DE"551/4E,@8&!!4R!)4R<G($%.1`HC
+M($%.62!%6%!215-3($]2($E-4$Q)140@5T%24D%.5$E%4RP@24Y#3%5$24Y'
+M+"!"550@3D]4($Q)34E4140@5$\L(%1(10HC($E-4$Q)140@5T%24D%.5$E%
+M4R!/1B!-15)#2$%.5$%"24Q)5%D@04Y$($9)5$Y%4U,@1D]2($$@4$%25$E#
+M54Q!4B!055)03U-%"B,@05)%($1)4T-,04E-140N("!)3B!.3R!%5D5.5"!3
+M2$%,3"!42$4@05542$]2($]2($-/3E1224)55$]24R!"12!,24%"3$4*(R!&
+M3U(@04Y9($1)4D5#5"P@24Y$25)%0U0L($E.0TE$14Y404PL(%-014-)04PL
+M($5814U03$%262P@3U(@0T].4T51545.5$E!3`HC($1!34%'15,@*$E.0TQ5
+M1$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!04D]#55)%345.5"!/1B!354)3
+M5$E4551%($=/3T13"B,@3U(@4T525DE#15,[($Q/4U,@3T8@55-%+"!$051!
+M+"!/4B!04D]&2513.R!/4B!"55-)3D534R!)3E1%4E)54%1)3TXI"B,@2$]7
+M159%4B!#0553140@04Y$($].($%.62!42$5/4ED@3T8@3$E!0DE,2519+"!7
+M2$542$52($E.($-/3E1204-4+"!35%))0U0*(R!,24%"24Q)5%DL($]2(%1/
+M4E0@*$E.0TQ51$E.1R!.14=,24=%3D-%($]2($]42$525TE312D@05))4TE.
+M1R!)3B!!3ED@5T%9"B,@3U54($]&(%1(12!54T4@3T8@5$A)4R!33T945T%2
+M12P@159%3B!)1B!!1%9)4T5$($]&(%1(12!03U-324))3$E462!/1@HC(%-5
+M0T@@1$%-04=%+@HC"F1I=F5R="@P*0I615)324].240H8$`H(REU<V5?<F5L
+M87ET;RYM-`DQ+C`@*$-L875S($%S<VUA;FXI(#$Y.38M,3$M,C,G*0ID:79E
+M<G0H+3$I"@ID969I;F4H8%]54T5?4D5,05E43U\G+#$I"E!54TA$259%4E0H
+M-BD*(R!F:6QE(&-O;G1A:6YI;F<@;F%M97,@=V4@<F5L87D@=&\*1GM296QA
+M>51O?2!I9F5L<V4H7T%21U\L(&`G+"!@+V5T8R]M86EL+U)E;&%Y5&\G+"!@
+M7T%21U\G*0I03U!$259%4E0*+"!@+V5T8R]M86EL+TQO8V%L25`G+"!@7T%2
+M1U\G*0I03U!$259%4E0*"F-K7W)E;&%Y*3H*(R!J=6YK+F1O;6%I;B`@(D5R
+M<F]R+4-O9&4@17)R;W(M5&5X="(*(R!O<B!)4"!A9&1R97-S97,@*&9O<B!C
+M:&5C:U]R96QA>2DZ"B,@1"Y8+EDN6B`B17)R;W(M0V]D92!%<G)O<BU497AT
+M(@HC($,N6"Y9(")%<G)O<BU#;V1E($5R<F]R+51E>'0B"B,@0BY8(")%<G)O
+M<BU#;V1E($5R<F]R+51E>'0B"B,@02`B17)R;W(M0V]D92!%<G)O<BU497AT
+M(@I+:G5N:R!I9F5L<V4H7T%21U\L(&`G+"!@9&)M("UA0$I53DL@+V5T8R]M
+M86EL+VIU;FLG+"!@7T%21U\G*0ID969I;F4H8%]*54Y+7T1%1DE.141?4D5,
+M05DG+#$I"BD*4$]01$E615)4"@ID:79E<G0H,BD*3$]#04Q?4E5,15-%5%,*
+M4VIU;FL`````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````3TY315%5
+M14Y424%,"B,@1$%-04=%4R`H24Y#3%5$24Y'+"!"550@3D]4($Q)34E4140@
+M5$\L(%!23T-54D5-14Y4($]&(%-50E-425155$4@1T]/1%,*(R!/4B!315)6
+M24-%4SL@3$]34R!/1B!54T4L($1!5$$L($]2(%!23T9)5%,[($]2($)54TE.
+M15-3($E.5$524E505$E/3BD*(R!(3U=%5D52($-!55-%1"!!3D0@3TX@04Y9
+M(%1(14]262!/1B!,24%"24Q)5%DL(%=(151(15(@24X@0T].5%)!0U0L(%-4
+M4DE#5`HC($Q)04))3$E462P@3U(@5$]25"`H24Y#3%5$24Y'($Y%1TQ)1T5.
+M0T4@3U(@3U1(15)725-%*2!!4DE324Y'($E.($%.62!705D*(R!/550@3T8@
+M5$A%(%5312!/1B!42$E3(%-/1E1705)%+"!%5D5.($E&($%$5DE3140@3T8@
+M5$A%(%!/4U-)0DE,2519($]&"B,@4U5#2"!$04U!1T4N"B,*9&EV97)T*#`I
+M"E9%4E-)3TY)1"A@0"@C*75S95]N86UE<RYM-`DQ+C`@*$-L875S($%S<VUA
+M;FXI(#$Y.38M,3$M,C,G*0ID:79E<G0H+3$I"@ID969I;F4H8%]54T5?3D%-
++15-?)RPQ*0ID968`
+`
+end
diff --git a/debian/conffiles b/debian/conffiles
new file mode 100644
index 0000000..2108bcc
--- /dev/null
+++ b/debian/conffiles
@@ -0,0 +1,3 @@
+/etc/aliases
+/etc/nssnodns.conf
+/etc/init.d/sendmail
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..c964212
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,20 @@
+Source: sendmail
+Section: mail
+Priority: extra
+Maintainer: Richard Nelson <cowboy@debian.org>
+Standards-Version: 2.4.0.0
+
+Package: sendmail
+Architecture: any
+Depends: ${shlibs:Depends}, netbase (>= 1.26-1), m4, procmail | deliver
+Recommends: mail-reader
+Conflicts: mail-transport-agent, smail
+Provides: mail-transport-agent
+Description: A powerful mail transport agent.
+ Sendmail is an alternative mail transport agent (MTA) for
+ Debian. It is suitable for handling sophisticated mail
+ configurations, although this means that its configuration
+ can also be complex.
+ .
+ To deliver mail to local users, sendmail requires either the
+ `procmail' or `deliver' package to be installed.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..b34d8e5
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,47 @@
+This is the Debian Linux prepackaged version of Sendmail, a powerful mail
+transport agent.
+
+This package was put together by Robert Leslie <rob@mars.org> and is
+now being maintained by Johnie Ingram <johnie@debian.org>. The
+sources were obtained from:
+
+ ftp://ftp.sendmail.org/pub/sendmail/
+
+The following copyright applies to this software:
+
+
+ Copyright (c) 1983, 1995-1997 Eric P. Allman
+ Copyright (c) 1988 The Regents of the University of California.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by the University of
+ California, Berkeley and its contributors.
+ 4. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+
+On Debian systems, further copyright information can be found in the
+file /usr/doc/copyright/BSD.
diff --git a/debian/debian.m4 b/debian/debian.m4
new file mode 100644
index 0000000..8c111e4
--- /dev/null
+++ b/debian/debian.m4
@@ -0,0 +1,69 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+# The Regents of the University of California. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the University of
+# California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+divert(0)
+VERSIONID(`@(#)debian.m4 8.8 (Debian) 01/21/98')
+define(`confCF_VERSION', `Debian/GNU')dnl
+define(`LOCAL_MAILER_PATH', `/usr/sbin/sensible-mda')dnl
+dnl define(`LOCAL_MAILER_FLAGS', `mnru9')dnl
+define(`LOCAL_MAILER_FLAGS', `hnu90')dnl
+define(`LOCAL_MAILER_ARGS', `sensible-mda $g $u ${client_addr}')dnl
+define(`LOCAL_SHELL_FLAGS', `u90')dnl
+define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
+define(`USENET_MAILER_PATH', `/usr/bin/inews')dnl
+define(`confSAFE_QUEUE', `True')dnl
+define(`confTEMP_FILE_MODE', `600')dnl
+define(`STATUS_FILE', `/var/log/sendmail.st')dnl
+define(`confCW_FILE', `-o /etc/mail/sendmail.cw')dnl
+define(`confCT_FILE', `-o /etc/mail/sendmail.ct')dnl
+define(`confCON_EXPENSIVE', `True')dnl
+define(`confHOST_STATUS_DIRECTORY', `/var/state/sendmail')dnl
+define(`confDIAL_DELAY', `45')dnl
+define(`confTO_ICONNECT', `30s')dnl
+define(`confQUEUE_SORT_ORDER', `Host')dnl
+define(`confMAX_DAEMON_CHILDREN', `30s')dnl
+define(`confDONT_INIT_GROUPS', `True')dnl
+
+# These undocumented features are available in Debian sendmail.
+
+# O PidFile=/var/run/sendmail.pid
+# O WritableDirectoriesAreFatal=False
+# O ChownIsAlwaysSafe=False
+# O DontProbeInterfaces=False
+# O MaxRecipientPerMessage=
+# O DeadLetterDrop=False
+# O RrtImpliesDSN=False
+# O TCPWrappers=False
+
+
diff --git a/debian/debproto.mc b/debian/debproto.mc
new file mode 100644
index 0000000..6841807
--- /dev/null
+++ b/debian/debproto.mc
@@ -0,0 +1,42 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+# The Regents of the University of California. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the University of
+# California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+#
+# This file is used to configure sendmail for use with Debian systems.
+#
+
+divert(0)
+VERSIONID(`@(#)sendmail.mc 8.7 (Linux) 3/5/96')
+OSTYPE(debian)dnl
diff --git a/debian/dirs b/debian/dirs
new file mode 100644
index 0000000..23b4a3f
--- /dev/null
+++ b/debian/dirs
@@ -0,0 +1,15 @@
+DEBIAN
+etc/init.d
+usr/bin
+usr/sbin
+usr/man/man1
+usr/man/man5
+usr/man/man8
+usr/doc/sendmail
+usr/lib/sm.bin
+usr/lib/sendmail.cf/hack
+usr/lib/sendmail.cf/domain
+usr/lib/sendmail.cf/ostype
+usr/lib/sendmail.cf/cf
+var/state/sendmail
+var/log
diff --git a/debian/el33t.h b/debian/el33t.h
new file mode 100644
index 0000000..ce7bf94
--- /dev/null
+++ b/debian/el33t.h
@@ -0,0 +1,6 @@
+#define _FFR_DSN_RRT_OPTION 1
+#define _FFR_PIDFILE_OPTION 1
+#define _FFR_WRITABLE_DIRECTORIES_ARE_FATAL_OPTION 1
+#define _FFR_DONT_PROBE_INTERFACES_OPTION 1
+#define _FFR_MAXRCPT_OPTION 1
+#define _FFR_DEADLETTERDROP_OPTION 1
diff --git a/debian/init.d b/debian/init.d
new file mode 100644
index 0000000..ff8422a
--- /dev/null
+++ b/debian/init.d
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+# Start or stop sendmail
+#
+# Robert Leslie <rob@mars.org>
+# Johnie Ingram <johnie@netgod.net>
+# David Rocher <rocher@mail.dotcom.fr>
+# Richard Nelson <cowboy@debain.org>
+
+# How often to run the queue
+Q="10m"
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DAEMON=/usr/sbin/sendmail
+PIDFILE=/var/run/sendmail.pid
+NAME=sendmail
+FLAGS="defaults 50"
+
+test -x $DAEMON -a -f /etc/sendmail.cf || exit 0
+
+case "$1" in
+ start)
+ ( cd /var/spool/mqueue && rm -f [lnx]f* )
+ echo -n "Starting mail transport agent: sendmail"
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- -bd -q"$Q"
+ echo "."
+ ;;
+
+ stop)
+ echo -n "Stopping mail transport agent: sendmail"
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
+ echo "."
+ ;;
+
+ restart)
+ $0 stop
+ $0 start
+ ;;
+
+ reload)
+ echo -n "Reloading sendmail configuration..."
+ start-stop-daemon --stop --signal 1 --quiet \
+ --pidfile $PIDFILE --exec $DAEMON
+ echo "done."
+ ;;
+
+ force-reload)
+ $0 reload
+ ;;
+
+ debug)
+ start-stop-daemon --stop --signal 10 --verbose \
+ --pidfile $PIDFILE --exec $DAEMON
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/sendmail {start|stop|restart|reload|force-reload|debug}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/debian/ip-down.d b/debian/ip-down.d
new file mode 100644
index 0000000..0b3609e
--- /dev/null
+++ b/debian/ip-down.d
@@ -0,0 +1,10 @@
+#!/bin/sh
+#
+# This script is called when ppp disconnects from the network.
+#
+# Here is where we'll stop sendmail if needed
+#
+# Written By Richard Nelson <cowboy@debian.org>
+
+# Stop/reload sendmail as needed
+
diff --git a/debian/ip-up.d b/debian/ip-up.d
new file mode 100644
index 0000000..7bada47
--- /dev/null
+++ b/debian/ip-up.d
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# This script is called when ppp connects to the network.
+#
+# Here is where we'll start sendmail if needed, and will
+# run the queue in either case.
+#
+# Written By Richard Nelson <cowboy@debian.org>
+
+# Start/reload sendmail as needed
+#/etc/init.d/sendmail reload
+
+# Process the sendmail queue
+#runq
diff --git a/debian/nodns.m4 b/debian/nodns.m4
new file mode 100644
index 0000000..c84d2c5
--- /dev/null
+++ b/debian/nodns.m4
@@ -0,0 +1,44 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+# The Regents of the University of California. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the University of
+# California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+divert(0)
+VERSIONID(`@(#)nodns.m4 8.1 (Debian) 1/21/98')
+divert(-1)
+undefine(`confBIND_OPTS')dnl
+define(`confSERVICE_SWITCH_FILE', `/etc/nssnodns.conf')dnl
+FEATURE(nocanonify)
+# HACK(nodns): What DNS?
+O DontProbeInterfaces=True
+
+
diff --git a/debian/nssnodns.conf b/debian/nssnodns.conf
new file mode 100644
index 0000000..0344993
--- /dev/null
+++ b/debian/nssnodns.conf
@@ -0,0 +1,18 @@
+# /etc/nsswitch.conf
+#
+# Hax0rd configuration of GNU Name Service Switch functionality.
+#
+
+passwd: db files
+group: db files
+shadow: db files
+
+hosts: files
+networks: files
+
+protocols: db files
+services: db files
+ethers: db files
+rpc: db files
+
+netgroup: db files
diff --git a/debian/part1 b/debian/part1
new file mode 100644
index 0000000..f6f347a
--- /dev/null
+++ b/debian/part1
@@ -0,0 +1,1755 @@
+Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!hookup!nic.ott.hookup.net!vertex.tor.hookup.net!nic.win.hookup.net!news-out.internetmci.com!newsfeed.internetmci.com!uwm.edu!math.ohio-state.edu!howland.erols.net!newsxfer3.itd.umich.edu!news.cic.net!not-for-mail
+From: brad@etext.org
+Newsgroups: comp.mail.sendmail,comp.mail.misc,comp.answers,news.answers
+Subject: comp.mail.sendmail Frequently Asked Questions (Part 1 of 2)
+Followup-To: comp.mail.sendmail
+Date: 27 Mar 1997 06:01:28 GMT
+Organization: The ETEXT Archives
+Lines: 1734
+Approved: news-answers-request@MIT.Edu
+Distribution: world
+Expires: 05/01/97 02:00:01
+Message-ID: <5hd2fo$pou$1@news.cic.net>
+Reply-To: sendmail-faq@etext.org (Sendmail FAQ Maintainers)
+NNTP-Posting-Host: locust.cic.net
+Summary: This posting contains a list of Frequently Asked Questions
+ (and their answers) about the program "sendmail", distributed with
+ many versions of Unix. It should be read by anyone who wishes to
+ post to the Usenet newsgroup comp.mail.sendmail.
+Keywords: sendmail mail SMTP FAQ
+X-Posting-Frequency: posted on the 27th of each month
+Xref: senator-bedfellow.mit.edu comp.mail.sendmail:42630 comp.mail.misc:38790 comp.answers:25080 news.answers:98196
+
+Posted-By: auto-faq 3.1.1.2
+Archive-name: mail/sendmail-faq/part1
+
+URL: http://www.his.com/~brad/sendmail/index.html
+
+
+ comp.mail.sendmail
+ Frequently Asked Questions (FAQ)
+ Last updated March 24, 1997
+
+ Copyright 1996, by Brad Knowles, all rights reserved
+
+
+This FAQ is edited and maintained by Brad Knowles <brad@etext.org>.
+The official archive for all FAQs posted to <news:news.answers>
+is <ftp://rtfm.mit.edu/pub/usenet/news.answers/>, with many known
+mirrors. On this site, the latest version of this FAQ can be found
+in <ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/sendmail-faq/>.
+Since this server tends to be extremely busy, as an alternative,
+you might want to try using <http://www.imc.org/sendmail-faq-1>
+and <http://www.imc.org/sendmail-faq-2> instead.
+
+If you don't have access to FTP or WWW, this FAQ can be retrieved by
+sending Internet email to <mail-server@rtfm.mit.edu> with an empty
+subject line (it gets ignored) and the command "send
+usenet/news.answers/mail/sendmail-faq/part*" as the body of the
+message (omitting the quotes, of course).
+
+As an alternative, you might want to try sending Internet email
+to <info@imc.org> with an empty subject line (it gets ignored)
+and "send sendmail-faq-*" as the body of the body of the message
+(again, omitting the quotes).
+
+Additional alternative access methods are detailed within.
+
+
+This FAQ is in RFC 1153 digest format. The "Date:" field of each
+entry represents the date of the last update made to that entry.
+
+
+This FAQ has now been split into two parts, to try and make it easier
+to pass through older or less capable news or mail gateways.
+
+
+The intent is to ultimately make this document more web-friendly (in
+that all original work is done in SGML), and using the linuxdoc-sgml
+tools, automatically generate both the HTML and ASCII text versions,
+automatically posting the ASCII version to comp.mail.sendmail as
+appropriate.
+
+In the meanwhile, all pseudo-HTMLized versions of this FAQ are
+considered unsupported. We cannot be held responsible for what
+someone else's program does to this document in an attempt to
+make it more web-friendly. Nevertheless, the Landfield Hypertext
+Usenet FAQ Archive seems to work well, and if you must access
+the comp.mail.sendmail FAQ via the web, try slinging over to
+<http://www.landfield.com/faqs/mail/sendmail-faq/>.
+
+
+Comments/updates should be sent to <sendmail-faq@etext.org>.
+
+----------------------------------------------------------------------
+
+Date: March 24, 1997
+Subject: Table of Contents
+
+Table of Contents
+=================
+
+ PART ONE
+ ========
+
+ 0. TO DO
+
+ 1. COPYRIGHT NOTICE / REDISTRIBUTION REQUIREMENTS
+
+ 2. INTRODUCTION / MISCELLANEOUS
+ 2.1 What is this newsgroup?
+ 2.2 What is the scope of this FAQ?
+ 2.3 Where can I find the latest version of this FAQ?
+ 2.4 How do I access comp.mail.sendmail by email?
+ 2.5 Where can I ask email-related DNS questions?
+ 2.6 How can I subscribe to these newsgroups?
+ 2.7 Which version of sendmail should I run?
+ 2.8 What is the latest release of sendmail?
+ 2.9 Where can I find it?
+ 2.10 What are the differences between Version 8 and other
+ versions?
+ 2.11 What's the best platform for running sendmail?
+ 2.12 What is BIND and where can I get the latest version?
+ 2.13 What is smrsh and where can I get it?
+ 2.14 What is smap and where can I get it?
+ 2.15 What is TCP-Wrappers and where can I get it?
+ 2.16 Why won't db 1.85 build for my SGI running Irix >= 5.2?
+ 2.17 What is makemap and where can I get it?
+
+ 3. VERSION 8 SPECIFIC ISSUES
+ 3.1 How do I make all my addresses appear to be from a single
+ host?
+ 3.2 How do I rewrite my "From:" lines to read
+ ``First_Last@My.Domain''?
+ 3.3 So what was the user database feature intended for?
+ 3.4 Why are you so hostile to using full names for email
+ addresses?
+ 3.5 Where do I find this user database (UserDB) code?
+ 3.6 How do I get the user database to work with Pine or
+ with FEATURE(always_add_domain)?
+ 3.7 How do I manage several (virtual) domains?
+ 3.8 There are four UUCP mailers listed in the configuration
+ files. Which one should I use?
+ 3.9 How do I fix "undefined symbol inet_aton" and "undefined
+ symbol _strerror" messages?
+ 3.10 How do I solve "collect: I/O error on connection" errors?
+ 3.11 Why can't my users forward their mail to a program?
+ 3.12 Why do connections to the SMTP port take such a long time?
+ 3.13 Why do I get "unknown mailer error 5 -- mail: options
+ MUST PRECEDE recipients" errors?
+ 3.14 Why does version 8 sendmail panic my SunOS box?
+ 3.15 Why does the "From " header gets mysteriously munged
+ when I send to an alias?
+ 3.16 Why doesn't MASQUERADE_AS (or the user database) work
+ for envelope addresses as well as header addresses?
+ 3.17 How do I run version 8 sendmail and support the MAIL11V3
+ protocol?
+ 3.18 Why do messages disappear from my queue unsent?
+ 3.19 When is sendmail going to support RFC 1522 MIME header
+ encoding?
+ 3.20 Why can't I get mail to some places, but instead
+ always get the error "reply: read error from
+ name.of.remote.host"?
+ 3.21 Why doesn't "FEATURE(xxx)" work?
+ 3.22 How do I configure sendmail to not use DNS?
+ 3.23 How do I get all my queued mail delivered to my Unix
+ box from my ISP?
+
+
+ PART TWO
+ ========
+
+ 4. GENERAL SENDMAIL ISSUES
+ 4.1 Should I use a wildcard MX for my domain?
+ 4.2 How can I set up an auto-responder?
+ 4.3 How can I get sendmail to deliver local mail to
+ $HOME/.mail instead of into /usr/spool/mail (or
+ /usr/mail)?
+ 4.4 Why does it deliver the mail interactively when I'm
+ trying to get it to go into queue only mode?
+ 4.5 How can I solve "config error: mail loops back to
+ myself" messages?
+ 4.6 Why does my sendmail process sometimes hang when
+ connecting over a SLIP/PPP link?
+ 4.7 How can I summarize the statistics generated by
+ sendmail in the syslog?
+ 4.8 How can I check my sendmail.cf to ensure that it's
+ re-writing addresses correctly?
+ 4.9 What is procmail, and where can I get it?
+ 4.10 How can I solve "cannot alias non-local names" errors?
+
+ 5. VENDOR/OS SPECIFIC SENDMAIL ISSUES
+ 5.1 Sun Microsystems SunOS/Solaris 1.x/2.x
+ 5.1.1 How can I solve "line 273: replacement $3 out of
+ bounds" errors?
+ 5.1.2 How can I solve "line 445: bad ruleset 96 (50 max)"
+ errors?
+ 5.1.3 Why does version 8 sendmail (< 8.7.5) sometimes
+ hang under Solaris 2.5?
+ 5.1.4 Why can't I use SunOS/Solaris to get email to
+ certain large sites?
+ 5.2 IBM AIX
+ 5.2.1 The system resource controller always reports
+ sendmail as "inoperative". What's wrong?
+ 5.2.2 Why can't I use AIX to get email to some sites?
+ 5.2.3 Why can't I get sendmail 8.7.1 to use MX records
+ with AIX 3.2.5?
+
+ 6. ADDITIONAL INFORMATION SOURCES (RFC 1807 bibliography format)
+ 6.1 Reference material devoted exlusively to sendmail
+ 6.2 Reference material with chapters or sections on sendmail
+ 6.3 Reference material on subjects related to sendmail
+ 6.4 World-wide web index pages on sendmail
+ 6.5 World-wide web index pages Internet email in general
+ 6.6 Online tutorials for sendmail
+ 6.7 Online archives of mailing lists and Usenet newsgroups,
+ relating to Internet email
+
+ 7. THANKS!
+
+------------------------------
+
+Date: January 17, 1997
+Subject: Q0 -- TO DO list
+
+* Make the FAQ more web-friendly by writing it in SGML and using
+ the linuxdoc-sgml tools to automate the generation of the HTML
+ and ASCII text versions.
+* Index
+* Additional net resources (web pages, anonymous ftp sites, etc...)
+* Larger, more clearly written annotated bibliography (including RFCs
+ and comments/corrections for books specific to sendmail)
+* Reorganize by platform/version of sendmail (All Sun questions in one
+ section, all AIX questions in another, etc...)
+
+------------------------------
+
+Date: May 28, 1996
+Subject: Q1 -- COPYRIGHT NOTICE / REDISTRIBUTION REQUIREMENTS
+
+ The entire contents of this document are copyright 1996 by Brad
+Knowles, all rights reserved.
+
+ This document may be freely distributed for non-profit purposes
+(including, but not limited to: posting to mailing lists, Usenet
+newsgroups, and world-wide-web pages; inclusion on CD-ROM or other
+distribution media; and insertion into text retrieval systems), so
+long as it is the latest version available at the time, all parts are
+distributed together, and it is kept completely intact without
+editing, changes, deletions, or additions. Non-profit redistribution
+in accordance with these guidelines does not require contact with or
+approval from the copyright holder.
+
+ Redistribution of this document for profit without express prior
+permission is not allowed. At the very least, expect to provide the
+copyright holder a free copy of the product (exactly as it would be
+sold to customers, all distribution media intact), or a percentage of
+the gross revenue from said product and sufficient proof that the
+integrity and completeness requirements set for non-profit
+distribution will be met.
+
+
+ In the event that the copyright holder discovers a redistributed
+version that is not in compliance with the above requirements, he will
+make a good-faith effort to get it corrected or removed, and failing
+that, at least note its deprecated status in a new version. Legal
+action will likely be taken against redistribution for profit that
+is not in compliance with the above requirements.
+
+------------------------------
+
+Date: May 28, 1996
+Subject: Q2.1 -- What is this newsgroup?
+
+ The Usenet newsgroup <news:comp.mail.sendmail> is dedicated to the
+discussion of the program named "sendmail" in all its various forms.
+It is most commonly found on computers running a flavor of the
+Operating System known as Unix, or derived from Unix.
+
+ This program has been ported to other OSes, but those versions
+have typically been ported by a particular vendor and are considered
+proprietary. There are many versions of sendmail, but the original
+author (Eric Allman) is continuing development on a particular version
+typically referred to as "Version Eight" or sometimes just "V8". This
+is considered by many to be the One True Version. This is also the
+version that this FAQ is centered around.
+
+
+ If you have a question that amounts to "How do I send mail to my
+friend?", then you're in the wrong newsgroup. You should first check
+with your System or E-Mail Administrator(s), BBS SysOp(s), etc...
+before you post your question publicly, since the answer will likely
+be very highly dependant on what software and hardware you have. You
+also don't want to embarass yourself publicly, nor do you want to
+annoy the kinds of people who are likely to be the counterparts of
+your System or E-Mail Administrator(s), BBS SysOp(s), etc.... If
+asking them doesn't do you any good, make sure you read this FAQ and
+the other mail-related FAQs at the archive sites listed below.
+
+ If you have a question about another program similar to sendmail
+(technically referred to as an "SMTP MTA"), an SMTP Gateway package,
+or a LAN email package, then you should see if there is another group
+in the <news:comp.mail> hierarchy that more closely matches the
+particular program you want to ask a question about. For example, the
+SMTP MTA known as Smail has <news:comp.mail.smail> dedicated to it.
+The Mail User Agent (MUA) Eudora has two newsgroups dedicated to it
+(<news:comp.mail.eudora.mac> and <news:comp.mail.eudora.ms-windows>),
+depending on which hardware platform you use. If there isn't a more
+appropriate newsgroup, try <news:comp.mail.misc>. Again, make sure
+your question isn't already addressed in one of the mail-related
+FAQs or other available documentation. See the IMC website (more
+info below) for a good list of mail-related FAQs.
+
+
+ If you have a question about an older or vendor-proprietary
+version of sendmail, be prepared for a lot of answers that amount to
+"Get V8". Version 8 isn't a panacea, but it does solve many problems
+known to plague previous versions, as well as having many new features
+that make it much easier to administer large or complex sites. In
+many cases, it makes at least possible what was previously virtually
+impossible, and relatively easy the previously difficult.
+
+
+ There are, of course, many alternative programs that have sprung
+up in an attempt to answer one or another weakness or perceived fault
+of sendmail, but so far, none of them have had the kind of success it
+would require to unseat it as the de facto standard program for
+sending Internet mail. Obviously, this forum should not be used to
+discuss the merits of any of the alternative programs versus sendmail.
+These kinds of discussions should be taken to <news:comp.mail.misc>,
+or you should agitate to get a new newsgroup or newsgroup hierarchy
+created where that sort of thing is acceptable (or even the norm, such
+as a <news:comp.mail.advocacy> or <news:comp.mail.mta.advocacy>
+newsgroup).
+
+------------------------------
+
+Date: July 9, 1996
+Subject: Q2.2 -- What is the scope of this FAQ?
+
+ This FAQ is strongly centered around version 8 sendmail, for many
+reasons. First and foremost, this is the area of most interest on the
+part of the maintainer of this FAQ. Secondly, version 8 is where most
+of the additional development is being concentrated. Version 8
+sendmail is also the best documented of all SMTP MTAs, by virtue of
+the book by Bryan Costales (see entry
+sendmail-faq//book/ISBN/1-56592-056-2 in Q6.1).
+
+ Other versions of sendmail get mentioned in passing, and some
+interesting interactions between version 8 and various OSes is also
+covered.
+
+ This FAQ is aimed primarily at the experienced Unix System
+Administrator/Postmaster/DNS Domain Administrator. If you're looking
+for introductory texts, see the references in Q6.1.
+
+
+ Where I've provided URLs, I've generally tried to keep them
+exactly as they should be entered, without line breaks or anything
+else. This may make them or the surrounding text ugly, but hopefully
+they'll be easier to cut-and-paste, or just click on once I've got an
+HTMLized version. However, this has not been possible in the
+bibliography section, since I'm trying to adhere to RFC 1807
+guidelines, and they explicitly require lines to be no longer than 79
+characters. In those cases, I've tried to break the lines at
+relatively obvious and innocuous places.
+
+------------------------------
+
+Date: January 21, 1997
+Subject: Q2.3 -- Where can I find the latest version of this FAQ?
+
+ I post changes as they occur to my sendmail FAQ support page
+at <http://www.his.com/pub/brad/sendmail/>.
+
+ The ASCII text of my private version can be found at
+<ftp://ftp.his.com/pub/brad/sendmail/sendmail-faq/part*>, while
+the latest "single part" version before the split can be found at
+<ftp://ftp.his.com/pub/brad/sendmail/sendmail-faq/old>. I don't
+have an HTMLized version yet, but when I do, I will put in a link
+to it from my support page as well as updating this document.
+
+
+ The official version (as posted to <news:news.answers>) is in
+<ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/sendmail-faq/>.
+
+ The Internet Mail Consortium <http://www.imc.org>
+maintains an archive of email related FAQs and many other
+documents. On their site, the latest version of this FAQ
+can be found in <http://www.imc.org/sendmail-faq-1> and
+<http://www.imc.org/sendmail-faq-2>.
+
+
+ Unfortunately, the parser for the Ohio State semi-official
+pseudo-HTMLized version tends to misinterpret the way I provide
+URLs, so I no longer support it or provide the URL for this FAQ at
+that site. However, Kent Landfield has put together an alternative
+web archive of Usenet FAQs, and it appears to parse things in a
+more sensible manner.
+
+ The root of the Landfield FAQ archive is at
+<http://www.landfield.com/faqs/>, and the comp.mail.sendmail FAQ
+can be found at <http://www.landfield.com/faqs/mail/sendmail-faq/>.
+
+ The Landfield Usenet Hypertext FAQ Archive supports full text
+searching with multiple ways to access Usenet's Frequently Asked
+Question postings. Hyperlinks are enabled where ever possible to
+make references easy to follow. A full set of FAQ statistics is
+also available.
+
+
+ If you don't have access to FTP or WWW, this FAQ can be
+retrieved by sending Internet email to <mail-server@rtfm.mit.edu>
+with an empty subject line (it gets ignored) and the command "send
+usenet/news.answers/mail/sendmail-faq/part*" as the body of the
+message (omitting the quotes, of course).
+
+ Since this server tends to be extremely busy, as an alternative,
+you might want to try sending Internet email to <info@imc.org> with
+an empty subject line (it gets ignored) and "send sendmail-faq-*"
+as the body of the body of the message (again, omitting the quotes).
+
+
+ Well known mirrors for the FAQs archived at rtfm.mit.edu can be
+found at:
+
+ Continent URL
+ --------- -------------------------------------------
+ North <ftp://mirrors.aol.com/pub/rtfm/usenet/>
+ America <ftp://ftp.uu.net/usenet/news.answers/>
+ <ftp://ftp.seas.gwu.edu/pub/rtfm/>
+ <http://www.landfield.com/faqs/>
+ Europe <ftp://ftp.uni-paderborn.de/pub/FAQ/>
+ <ftp://ftp.Germany.EU.net/pub/newsarchive/news.answers/>
+ <ftp://ftp.sunet.se/pub/usenet/>
+ <http://www.cs.ruu.nl/cgi-bin/faqwais/>
+ <http://www.lib.ox.ac.uk/internet/news/faq/by_group.index.html>
+ Asia <ftp://nctuccca.edu.tw/USENET/FAQ/>
+ <ftp://hwarang.postech.ac.kr/pub/usenet/news.answers/>
+ <ftp://ftp.hk.super.net/mirror/faqs/>
+ Australia <ftp://ftp.info.au/usenet/FAQs/>
+
+
+
+ Additional information on how to get access
+to various Internet resources by email can be
+found in Bob Rankin's Internet-by-Email FAQ,
+<ftp://rtfm.mit.edu/pub/usenet/news.answers/internet-services/access-via-email>.
+
+ To get the latest edition of this document sent to you by return
+email, send a message to one of these addresses:
+
+ To: mail-server@rtfm.mit.edu (for US, Canada & South America)
+ Enter only this line in the BODY of the note:
+ send usenet/news.answers/internet-services/access-via-email
+
+ To: mailbase@mailbase.ac.uk (for Europe, Asia, etc.)
+ Enter only this line in the BODY of the note:
+ send lis-iis e-access-inet.txt
+
+------------------------------
+
+Date: November 24, 1996
+Subject: Q2.4 -- How do I access comp.mail.sendmail by email?
+
+ Send email to <mxt@dl.ac.uk> with the command "sub
+comp-news.comp.mail.sendmail full-US-ordered-email-address" as
+the body of the message (with your correct address in place of the
+"full-US-ordered-email-address", and omitting the double quotes in
+all cases of this example).
+
+ E-mail you want posted on comp.mail.sendmail should be sent to
+<comp-mail-sendmail@dl.ac.uk>
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q2.5 -- Where can I ask email-related DNS questions?
+
+ Depending on how deeply they get into the DNS, they can be asked
+here. However, you'll probably be told that you should send them to
+the Usenet newsgroup <news:comp.protocols.tcp-ip.domains> (DNS in
+general) or to the Info-BIND mailing list (if the question is specific
+to that program).
+
+------------------------------
+
+Date: May 23, 1996
+Subject: Q2.6 -- How can I subscribe to these?
+
+ For <news:comp.protocols.tcp-ip.domains>, you have to be on
+Usenet. They don't have a news-to-mail gateway yet (I'm working on
+this), but they do have a FAQ, and it can be found at
+<ftp://ftp.njit.edu/pub/dns/Comp.protocols.tcp-ip.domains.FAQ>.
+
+ Questions from all levels of experience can be found on this
+newsgroup (as well as people to answer them), so don't be shy about
+asking a question you think may be too simple.
+
+
+ For the Info-BIND mailing list, send email to
+<bind-request@vix.com> with and empty subject (it gets ignored) and
+the command "subscribe" as the body of the message. Submissions
+should be sent to <bind@vix.com>.
+
+ Note that this list is now moderated, and anything you post to it
+may get material added, deleted, or changed by the moderator. He
+reserves the right to reject any postings (and possibly unsubscribe
+the poster), if he deems them inappropriate.
+
+------------------------------
+
+Date: May 23, 1996
+Subject: Q2.7 -- Which version of sendmail should I run?
+
+ If you're concerned at all about the security of your machines,
+you should make sure you're at least running a recent release of
+version 8 sendmail (either from your vendor or the public version
+detailed in 1.8).
+
+ Check the CERT Alerts and Summaries (details in 1.13) to make sure
+that you're running a version that is free of known security holes.
+Just because the sendmail program provided by your vendor isn't list
+doesn't mean that you're not vulnerable, however. If your particular
+vendor or version isn't listed, check with your vendor and on the
+appropriate Internet mailing lists and Usenet newsgroups to verify.
+
+ If nothing else, the most recent public version is usually a
+pretty good bet, although you should check <news:comp.mail.sendmail>
+to see if anyone has posted recent comments that haven't yet been
+folded into a new release.
+
+
+ That said, you need to look at what the primary function is for
+the machine. If its primary function is to run some CAD/CAM package
+on the desk of an Engineer, then there's probably not much sense in
+replacing the vendor-supplied version of sendmail (assuming it's
+secure, according to the CERT Alerts and Summaries). Just set the
+machine up to forward all outbound mail to a central mail relay, and
+then worry about making that central mail relay the best it can be.
+Also arrange to have all their inbound mail pass through a central
+Mail eXchanger (probably the same machine as the central Mail Relay),
+for the same reasons.
+
+
+ If the primary function for a machine is to act as that central
+Mail Relay/Mail eXchanger, then I *strongly* recommend the best
+version of sendmail you can get, and in my opinion that is the latest
+release of version 8. IDA sendmail is also pretty good, but virtually
+everything it does, version 8 does better, and version 8 has the
+additional advantage of having continued development as well. On a
+central mailhub, recent versions of IDA sendmail are the oldest
+sendmail that I'd even consider leaving in place instead of replacing
+with version 8.
+
+ However, keep in mind that version 8 still hasn't been ported (so
+far as we know) to some of the older (and perhaps more esoteric)
+platforms, and if you're stuck using one of them, you may not have
+much choice.
+
+
+ Recently, some vendors have started shipping (or announced that
+they will soon ship) version 8 sendmail pre-configured for their
+machines. Unfortunately, in most cases this means you get a
+pre-compiled binary and a sendmail.cf file (that may need a bit of
+tweaking), but not much else of the "standard" version 8 sendmail
+installation kit. Silicon Graphics (SGI) is known to already be
+shipping version 8 sendmail in this fashion, and both Hewlett-Packard
+and Sun Microsystems have announced that they soon will be (Sun has a
+patch today that can be applied to upgrade many machines to an older
+release of version 8 sendmail).
+
+ This may be suitable for desktop machines forwarding all their
+mail to a central Mail Relay and receiving all their mail from a
+central Mail eXchanger, but I personally believe that this is not
+likely to be suitable for the central Mail Relay/Mail eXchanger
+itself. In that case, I recommend you get and install the latest
+version and get the m4 macros, the on-line documentation, the source
+code, etc....
+
+------------------------------
+
+Date: January 21, 1997
+Subject: Q2.8 -- What is the latest release of sendmail?
+
+ For version 8 sendmail, there are three release trees.
+
+ For those people who, for whatever reason, are unable or
+unwilling to upgrade to version 8.8.z, releases of version 8.6 and
+8.7 sendmail are still available. As of this writing, the most
+recent release of version 8.6 sendmail is 8.6.13, and the most
+recent release of version 8.7 sendmail is 8.7.6.
+
+ For the most recent releases of 8.6 and 8.7 sendmail, there is a
+version number difference between the sendmail program itself and the
+associated configuration files. This is okay. The security-related
+bug fixes that were made only required changes to the sendmail
+program itself and not the configuration files, so only the version
+number of the sendmail program itself was incremented.
+
+
+ The most recent release of version 8.8 sendmail is 8.8.5.
+
+ On machines exposed directly to the Internet, you should either
+already be running 8.8.5 sendmail or plan on upgrading to it in the
+immediate future. This release is considered "mature", has security
+fixes included that will not be found in any previous release, and
+therefore supercedes all previous releases.
+
+ There is no further support for previous releases of sendmail.
+
+------------------------------
+
+Date: January 21, 1997
+Subject: Q2.9 -- Where can I find it?
+
+ By anonymous FTP from ftp.sendmail.org in /pub/sendmail, or (in
+URL form) via <ftp://ftp.sendmail.org/pub/sendmail/>. If you care,
+there should be files in this directory that end with the extension
+".sig" which you can check with PGP to make sure that corresponding
+archives haven't been modified. You'll need to have the PGP key
+of Eric Allman on your public keyring to be able to verify these
+archives with their associated .sig files.
+
+ Current releases of sendmail can also be found at
+<ftp://ftp.cs.berkeley.edu/ucb/src/sendmail/>.
+
+ There are no other known official version 8 sendmail mirrors.
+
+
+ Check the sendmail home page at <http://www.sendmail.org/> for
+late-breaking updates and other useful information.
+
+ If you want to be notified regarding future updates to sendmail
+and other items of potential interest, you may want to subscribe
+to the sendmail-announce mailing list. Address your subscription
+requests to "majordomo@lists.sendmail.org" with "subscribe
+sendmail-announce" as the body of the message.
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q2.10 -- What are the differences between Version 8 and
+ other versions?
+
+ See doc/changes/changes.{me,ps} in the distribution. See also
+RELEASE_NOTES at the top level.
+
+------------------------------
+
+Date: March 24, 1997
+Subject: Q2.11 -- What is BIND and where can I get the latest version?
+
+ BIND stands for "Berkeley Internet Name Daemon", and is the
+Internet de-facto standard program for turning host names into IP
+addresses.
+
+ The BIND Home Page is at <http://www.isc.org/bind.html>, which
+provides pointers to the most recent release of BIND. Note that
+BIND 4.9.5-P1 is the most recent "production version", and BIND
+8.1 (the next major release; skipping 5.x-7.x) is a "release
+candidate" as of version 8.1T3B. See the BIND 8.1T3B announcement
+at <ftp://ftp.isc.org/isc/bind/src/testing/t3b-ann.asc> for more
+information.
+
+
+ Note that there are bugs in older resolver libraries, which can
+cause problems getting to large sites (that list more than five IP
+addresses for a particular name), or represent a huge security hole
+as they do not check the returned data to see if it will fit in the
+amount of space pre-allocated for it.
+
+ If at all possible, you should get the most recent "release"
+version of BIND and make a serious attempt to integrate it into
+your configuration, since virtually all vendor-provided resolver
+libaries are woefully out of date.
+
+------------------------------
+
+Date: March 24, 1997
+Subject: Q2.12 -- What's the best platform for running sendmail?
+
+ Generally speaking, I adhere to the old axiom that you should
+choose what software you want to run first, then choose the platform
+(hardware and OS) that best runs this software. By this token, if
+sendmail is the software, then a recent version of BSD Unix would
+probably be best, since sendmail was developed at UC Berkeley on
+BSD Unix. FreeBSD and BSD/OS are two known implementations of
+BSD Unix for Intel-based PC's (among other hardware platforms),
+and this would make them the most "native" OSes for sendmail.
+FreeBSD is freely available by anonymous ftp or on CD-ROM, and
+BSD/OS is a commercial product.
+
+ However, not everyone has this kind of "luxury". If you're on a
+homogenous network (i.e., completely composed of only one type of
+hardware and OS), then you should probably be running the same OS as
+the rest of the machines on the network, regardless of the axiom
+stated above. You may have other problems, but you should at least be
+able to get some local support on the OS for your machine.
+
+
+ Either way, if the primary function of the machine is to handle
+"large" quantities of mail (for whatever value you define "large"
+to be), I strongly recommend getting the latest stable release of
+version 8 sendmail.
+
+ On the other hand, if the primary function of the machine is
+to sit on some Engineer's desk and do CAD, then it may be easier
+for you to leave the vendor-supplied version of sendmail on that
+machine (after suitable configuration), and instead concentrate
+your efforts on making the central mail handling machine(s) as
+robust and capable as they can be.
+
+ However, you may be surprised to find that it is easier
+for you to support only one version of sendmail across all the
+various platforms than it is to try and support multiple versions of
+sendmail, each unique for their particular platform. In that case,
+the easy solution is to put version 8 sendmail everywhere, and not
+have to worry about vendor-specific problems with older versions.
+
+
+ For more information on BSD Unix in general, see the Usenet
+newsgroups under <news:comp.unix.bsd>, <news:comp.bugs.4bsd>,
+<news:comp.os.386bsd>. For more information on BSD/OS, see the BSD
+newsgroups mentioned above, or the BSD/OS Home Page at
+<http://www.bsdi.com/>. For more information on FreeBSD, see the
+Usenet newsgroups under <news:comp.unix.bsd.freebsd>, or the FreeBSD
+Home Page at <http://www.freebsd.org/>.
+
+------------------------------
+
+Date: July 9, 1996
+Subject: Q2.13 -- What is smrsh and where can I get it?
+
+ From <ftp://info.cert.org/pub/tools/smrsh/README>:
+
+ smrsh is a restricted shell utility that provides the ability
+ to specify, through a configuration, an explicit list of
+ executable programs. When used in conjunction with sendmail,
+ smrsh effectively limits sendmail's scope of program execution
+ to only those programs specified in smrsh's configuration.
+
+ smrsh has been written with portability in mind, and uses
+ traditional Unix library utilities. As such, smrsh should
+ compile on most Unix C compilers.
+
+The purpose for restricting the list of programs that can be executed
+in this manner is to keep mail messages (either through an alias or
+the .forward file in a user's home directory) from being sent to
+arbitrary programs which are not necessarily known to be sufficiently
+paranoid in checking their input, and can therefore be easily
+subverted (this is related to, but different from, the /etc/shells
+feature discussed in Q3.11).
+
+ More information regarding the CERT-CC can be found at their web
+site, <http://www.cert.org>. For more information on CERT Alerts and
+CERT Summaries, see <ftp://info.cert.org/pub/cert_advisories/> and
+<ftp://info.cert.org/pub/cert_summaries/>, respectively.
+
+
+ You can find smrsh in the most recent sendmail source archive, as
+well as <ftp://info.cert.org/pub/tools/smrsh/>. Other very useful
+programs can be found in <ftp://info.cert.org/pub/tools/>.
+
+------------------------------
+
+Date: July 5, 1996
+Subject: Q2.14 -- What is smap and where can I get it?
+
+ Smap (and smapd) are tools out of the Trusted Information Systems
+(TIS) Firewall Toolkit (fwtk). They were originally written by
+firewall expert Marcus Ranum under contract to TIS, and TIS is
+continuing what maintenance there is. The toolkit may be found at
+<ftp://ftp.tis.com/pub/firewalls/toolkit/>. Support questions
+regarding the toolkit may be sent to <mailto:fwall-support@tis.com>,
+while you may join their mailing list <mailto:fwall-users@tis.com> by
+sending electronic mail to <mailto:fwall-users-request@tis.com>.
+
+
+ The concept of smap and smapd is that sendmail is a huge,
+monolithic setuid root program that is virtually impossible to verify
+as being "correct" and free from bugs (historically, sendmail has been
+rather buggy and an easy mark for system crackers to exploit, although
+with the advent of version 8 sendmail, this becomes much more
+difficult). In contrast, smap and smapd are very small (only a few
+hundred lines long), and relatively easy to verify as being correct
+and functioning as designed (however, as you will see later, we can
+question their design). According to the theory, it is therefore
+safer and "better" to run smap and smapd as "wrappers" around
+sendmail, which would no longer need to be run setuid root.
+
+ Unfortunately, smap and smapd have a few problems of their
+own, and don't appear to have been updated since late March 1996.
+There have been conflicting reports of incompatibilities between
+smapd and sendmail 8.7.y (both cannot be run on the same machine,
+although if you're running sendmail 8.6.x and smap/smapd on the
+local machine, people on the outside can still use sendmail 8.7.y
+to talk to you).
+
+ For further information on smap and smapd, see the documentation
+that comes with the TIS Firewall Toolkit.
+
+
+ For more information on firewalls, see the Firewalls FAQ at
+<http://www.v-one.com/newpages/faq.htm>.
+
+------------------------------
+
+Date: January 21, 1996
+Subject: Q2.15 -- What is TCP-Wrappers and where can I get it?
+
+ TCP-Wrappers is another security enhancement package. The theory
+is that you take programs being run under inetd (see /etc/inetd.conf)
+and before you run the program to do the real work (ftpd, telnetd,
+etc...), you first run the connection attempt through a package that
+checks to see if the IP address of the source packet is coming from a
+host known to be either good or bad (you may filter connection
+attempts by source host name, domain name, raw IP address, port they
+are attempting to connect to; and either allow known good connections
+through thus refusing unknown connections, or accept all connections
+except those known to be bad).
+
+ The practice of TCP-Wrappers actually follows the theory
+quite well. It is a very useful and important tool in the System
+Administrator's Bag of Things To Help You Secure Your Machine
+>From Crackers, Spammers, Junkmailers, and Other Undesirables.
+However, it only works for programs that communicate via TCP packets
+(not UDP, such as NFS) started up out of inetd. It does not work
+for RPC-based services, and programs that start up a daemon outside
+of inetd and just leave it running obviously don't benefit beyond
+the initial connection that gets the daemon started (however, see
+the FTP URL below for other packages that can help secure RPC and
+portmapper-based services).
+
+ However, most sendmail installations tend to start up a daemon and
+leave it running at all times. If you did run sendmail out of inetd,
+you'd lose the benefit of the load average checking code that is
+executed only in daemon mode, and for systems that handle a lot of
+mail, this is vitally important.
+
+ You can get TCP-Wrappers from
+<ftp://ftp.win.tue.nl/pub/security/>, a site that has
+a whole host of other useful security tools, such as
+securelib, portmap, satan, cops, crack, etc... You can
+also find pointers to many other useful security tools at
+<http://ciac.llnl.gov/ciac/SecurityTools.html>, and the COAST Archive
+at <http://www.cs.purdue.edu/homes/spaf/hotlists/csec.html> is a
+veritable cornucopia of all things security related. The SANS 1996
+Network Security Roadmap at <http://www.sans.org/roadmap.html> has
+much useful information and pointers to many other useful resources.
+
+
+ For the adventurous, you can get a source patch for version
+8 sendmail (created for 8.7.6, but with work, applicable to older
+releases) that will take the core TCP-Wrappers code and integrate
+it into the daemon, so that you get the best of both worlds.
+However, this isn't as smoothly integrated as it should be, is not
+for the faint-of-heart, and is certainly not officially supported
+by the orginal author of sendmail (Eric Allman). This functionality
+is integrated in a different fashion into version 8.8.5 sendmail.
+
+ You should be able to find the unsupported patch at
+<ftp://ftp.win.tue.nl/pub/security/sendmail-tcpd.patch>.
+
+------------------------------
+
+Date: November 24, 1996
+
+Subject: Q2.16 -- Why won't db 1.85 build for my SGI running Irix
+ >= 5.2?
+
+ The db 1.85 package as available from ftp.cs.berkeley.edu
+provides Irix support up to Irix 4.05F, but 5.{2,3} need a slightly
+patched version. Some vendors also provide db standard with their OS
+(DEC Unix 4.0, for example).
+
+ A tarball incorporating these changes is available at
+<ftp://ftp.his.com/pub/brad/sendmail/irix5.tar.gz>. This will
+extract into ./db.1.85/PORT/irix.5.2, with a symbolic link
+created from ./db.1.85/PORT/irix.5.3 to this same directory.
+Make sure you extract this archive into the same directory
+where you extracted the db 1.85 archive as available from
+ftp.cs.berkeley.edu. (see Q3.5 for more information on getting
+the db 1.85 package). An ASCII context diff of this same patch is
+at <ftp://ftp.his.com/pub/brad/sendmail/irix4-5.diff>.
+
+ A version of db 1.85 that has been supposedly patched
+to compile under Irix 6.2 has been made available at
+<http://reality.sgi.com/ariel/db-1.85-irix.tar.Z>, but I haven't
+had a chance to download and check it out yet.
+
+------------------------------
+
+Date: August 30, 1996
+
+Subject: Q2.17 -- What is makemap and where can I get it?
+
+ The program "makemap" is used to build the databases used by
+version 8 sendmail, for things like the UserDB, mailertables,
+etc....
+
+ It is distributed as part of the basic Operating System from
+some vendors, but source code for it is also included at the root
+level of the sendmail archive (at least, it is for sendmail 8.6.12
+and 8.7.5, and presumably will continue to be as newer releases come
+out). However, it is not considered a "supported" part of version
+8 sendmail. Just like the other source provided in the archive,
+the Makefile will likely need some tweaking for your specific site.
+
+ It turns out that Irix 5.3 doesn't appear to have the dbm or
+ndbm libraries, but to compile makemap.c, you need to have -DNDBM
+on the "DBMDEF=" line (some necessary things are defined only
+in /usr/include/ndbm.h). Try just leaving off "-lndbm" from the
+"LIBS=" line in the Makefile for makemap.
+
+ If you plan on using makemap with db 1.85 on an SGI machine
+running a version of Irix later than 4.x, see Q2.16 for some
+additional steps to get db 1.85 compiled on your machine.
+
+------------------------------
+
+Date: May 28, 1996
+Subject: Q3.1 -- How do I make all my addresses appear to be from a
+ single host?
+
+ Using the m4 macros, use:
+
+ MASQUERADE_AS(my.dom.ain)
+
+ This will cause all addresses to be sent out as being from the
+indicated domain.
+
+ On your mailhub/mailhost/Domain Mail eXchanger, you may need to
+add "my.dom.ain" to the sendmail.cw file or the "Cwhost.my.dom.ain"
+line in the sendmail.cf file.
+
+ If you're using version 8.7 sendmail, and you want to hide this
+information in the envelope as well as the headers, use:
+
+ FEATURE(masquerade_envelope)
+
+------------------------------
+
+Date: January 24, 1996
+Subject: Q3.2 -- How do I rewrite my From: lines to read
+ ``First_Last@My.Domain''?
+
+ There are a couple of ways of doing this. This describes using
+the "user database" code. This is still experimental, and was
+intended for a different purpose -- however, it does work with a bit
+of care. It does require that you have the Berkeley "db" package
+installed (it won't work with DBM).
+
+ First, create your input file. This should have lines like:
+
+ loginname:mailname First_Last
+ First_Last:maildrop loginname
+
+ If your login name is "john" and your full name is "John Q.
+Public", then this would be:
+
+ john:mailname John_Q_Public@your.domain.goes.here
+ John_Q_Public:maildrop john
+
+ The words "mailname" and "maildrop" must be typed in literally,
+just as they appear.
+
+
+ Install this file in (say) /etc/userdb. Create the database:
+
+ makemap -d btree /etc/userdb.db < /etc/userdb
+
+ You can then create a config file that uses this. You will have
+to include the following in your .mc file:
+
+ define(confUSERDB_SPEC, /etc/userdb.db)
+ FEATURE(notsticky)
+
+ Version 8.7 sendmail changes the semantics of this feature such
+that notsticky is turned on by default, and if you want the old (8.6)
+behaviour, you instead define:
+
+ FEATURE(stickyhost)
+
+
+ You also need to make sure that you have the "ik" flags specified
+on the affected mailer definition.
+
+
+ Note: The program "makemap" is discussed in further detail
+in Q2.17. The UserDB feature is discussed further on pp. 643-645
+of _sendmail, 2nd Ed._ by Costales.
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q3.3 -- So what was the user database feature intended for?
+
+ The intent was to have all information for a given user (where the
+user is the unique login name, not an inherently non-unique full name)
+in one place. This would include phone numbers, addresses, and so
+forth. The "maildrop" feature is because Berkeley does not use a
+centralized mail server (there are a number of reasons for this that
+are mostly historic), and so we need to know where each user gets his
+or her mail delivered -- i.e., the mail drop.
+
+ UC Berkeley is (was) in the process of setting up their
+environment so that mail sent to an unqualified "name" goes to that
+person's preferred maildrop; mail sent to "name@host" goes to that
+host. The purpose of "FEATURE(notsticky)" is to cause "name@host" to
+be looked up in the user database for delivery to the maildrop.
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q3.4 -- Why are you so hostile to using full names for email
+ addresses?
+
+ Because full names are not unique. For example, the computer
+community has two Andy Tannenbaums and two Peter Deutsches. At one
+time, Bell Labs had two Stephen R. Bournes with offices a few doors
+apart. You can create alternative addresses (e.g.,
+Stephen_R_Bourne_2), but that's even worse -- which one of them has to
+have their name desecrated in this way? And you can bet that one of
+them will get most of the other person's email.
+
+ So called "full names" are just an attempt to create longer
+versions of unique names. Rather that lulling people into a sense of
+security, I'd rather that it be clear that these handles are
+arbitrary. People should use good user agents that have alias
+mappings so that they can attach arbitrary names for their personal
+use to those with whom they correspond (such as the MH alias file).
+
+ Even worse is fuzzy matching in email -- this can make good
+addresses turn bad. For example, Eric Allman is currently (to the
+best of our knowledge) the only ``Allman'' at Berkeley, so mail sent
+to <Allman@Berkeley.EDU> should get to him. But if another Allman
+ever appears, this address could suddenly become ambiguous. He's been
+the only Allman at Berkeley for over fifteen years -- to suddenly have
+this "good address" bounce mail because it is ambiguous would be a
+heinous wrong.
+
+ Directory services should be as fuzzy as possible (within reason,
+of course). Mail services should be unique.
+
+------------------------------
+
+Date: November 24, 1996
+Subject: Q3.5 -- Where do I find this user database (UserDB) code?
+
+ The user database code is part of the Sendmail V8 distribution.
+However, it depends on your installing the db library from the
+package at <ftp://ftp.cs.berkeley.edu/pub/4bsd/db.1.85.tar.gz>.
+If you install this library, edit the Makefile to include the
+right option (-DNEWDB), and then make sendmail again, you get a
+binary which has the database features described in the book and
+the documentation provided in the sendmail source archive.
+
+ If you're using SGI Irix above 4.x, see Q2.16 for the patches
+you will need to get db 1.85 working on your machine.
+
+------------------------------
+
+Date: July 19, 1996
+Subject: Q3.6 -- How do I get the user database to work with Pine or
+ with FEATURE(always_add_domain)?
+
+ The basic incompatibility with Pine and the user database option
+is in how Pine writes From addresses in the header. Most MUAs write
+the From address as "From: user", while Pine, for reasons given in
+its documentation, write the From address as "From: user@FQDN"
+(FQDN=fully qualified domain name). Using the m4 feature macro
+"always_add_domain" has the same effect. Because of this difference,
+the user database does not rewrite these headers.
+
+ One solution to this problem is to make the following change in
+the sendmail.mc file compiled by m4 into your /etc/sendmail.cf (or
+wherever your sendmail.cf file is located) after you have the user
+database option installed and working with other MUAs:
+
+ Early in the section(s) where you are setting configuration
+variables, add the following:
+
+ # Define our userdb file for FQDN rewrites
+ Kuserdb btree -o /etc/userdb.db
+
+ And a bit later, before the "MAILER()" entries, but after other
+configuration options have been set:
+
+ LOCAL_RULE_1
+ ########################################################
+ ### Local Ruleset 1, rewrite sender header & envelope ##
+ ########################################################
+ #Thanks to Bjart Kvarme <bjart.kvarme@usit.uio.no>
+ S1
+ R$- $1 < @ $j . > user => user@localhost
+ R$- < @ $=w . > $* $: $1 < @ $2 . > $3 ?? $1 user@localhost ?
+ R$+ ?? $+ $: $1 ?? $(userdb $2 : mailname $: @ $)
+ R$+ ?? @ $@ $1 Not found
+ R$+ ?? $+ $>3 $2 Found, rewrite
+
+ #NOTE ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ # Use Tab Characters Use Tab Characters in these regions
+ # to make three columns (the line with "mailname" only has 2 columns).
+
+ Now the user database should re-write messages sent with Pine or
+anything else that causes local users to have their address be fully
+qualified (both header and envelope sender will be properly
+re-written). If this still does not work for you, try adding the
+following to either the system-wide pine.conf, pine.conf.fixed, or
+your personal .pinerc:
+
+ user-domain=localhost
+
+ This has been known to help solve the problem for some people.
+
+ However, a more elegant (read: m4-based) solution for version 8
+sendmail users has yet to be created.
+
+------------------------------
+
+Date: March 24, 1997
+Subject: Q3.7 -- How do I manage several (virtual) domains?
+
+ If you want to provide mailservice to several domains and be able
+to add identical names across different domains, as in this example:
+
+ user@a.dom.ain mb1@dom.ain
+ user@b.dom.ain mb2@dom.ain
+ user@c.dom.ain mb@outer.space
+
+ you may accomplish this by using an external database in
+conjunction with minor Ruleset rewriting in sendmail.cf. Many ISPs
+(Internet Service Providers) have asked me and here's a general
+solution (you may combine it with userdb's if you need to):
+
+ 1. Make a textfile (I usually make one for each domain and
+ concatenate them before database-compilation) with the
+ following structure:
+
+ user@a.dom.ain mb1@dom.ain
+ user@b.dom.ain mb2@dom.ain
+ user@c.dom.ain mb@outer.space
+
+ The LHS (Left Hand Side) is the mail-adress of a particular
+ user and the RHS is the corresponding mailbox. An example
+ that might apply to the real world:
+
+ webmaster@josnet.se wm.list@eowyn.josnet.se
+ webmaster@client1.se joe@client1.se
+ webmaster@client2.se anne@another.provider.se
+ webmaster@client3.se joe@client3.se
+ joe@client1.se c1_joe@mail.josnet.se
+ joe@client3.se joeuser
+
+ Note that you have to spell out the complete email-address in
+ the LHS entry. The RHS entry may be either a local address
+ (for example 'johan' if that account exists) or a complete
+ email-adress on another system (or a domain that the server
+ recognizes as local for that matter).
+
+ 2. Compile the textfile into a database:
+
+ makemap hash mbt.db <mbt
+
+ You may you use other lookup-methods than hash (btree for
+ example). The resulting database is mbt.db in this example
+ and the input is the textfile mbt.
+
+ 3. Add a few lines in sendmail.cf:
+
+ A. In the beginning (typically in the "local info" section or
+ together with the user database option in the "options"
+ section):
+
+ # Declare mbt as a hash-lookup database:
+ Kmbt hash /etc/mail/mbt.db
+
+ B. In the Ruleset 98 (local part of ruleset 0) section, add:
+
+ # Use mailboxtable-database:
+ R$+ < @ $+ . > $: $1 < @ $2 > .
+ R$+ < @ $+ > $* $: $(mbt $1@$2 $: $1 < @ $2 > $3 $)
+ R$+ < @ $+ > $* $: $(mbt $2 $: $1 < @ $2 > $3 $)
+ RERROR $* $#error $: $1
+ R$+ < @ $+ > . $: $1 < @ $2 . >
+
+ If you have any other rewrite rules in ruleset 98, these
+ should be able to either go after or before the existing
+ rules, but you may have to do some experimenting to
+ find out which placement works best.
+
+ 4. The next-to-last line of these rules let you have an alias
+ file like:
+
+ joe@somedom.com joe
+ jim@somedom.com jim@othersite
+ somedom.com ERROR "No such user"
+
+ And still have mail addressed to unknown users at that domain
+ bounce properly. You can also do a form of redirects, such
+ as:
+
+ fred@somedom.com ERROR "This user has moved to fred@otherdom.com"
+
+ 5. Test with sendmail -bv and/or sendmail -bt
+
+ 6. Restart sendmail. You must do this in order to have the
+ daemon reread the sendmail.cf.
+
+
+ Note: Alternate sets of instructions and/or kits
+can be found at <http://www.westnet.com/providers>,
+<http://hub.org/softdocs/Sendmail-VD>,
+<ftp://samson.oslo.uninett.no/pub/unix/sendmail/>, and
+<http://jos.net/projects/mbt/>. None of these have been tested
+by the maintainer of this FAQ, but are believed to work correctly.
+Which you use is a matter of your personal aesthetics.
+
+
+ If you're using version 8.8 sendmail, you can make use of the
+new "virtual user table" feature (for one thing, it won't require
+that you add new rewrite rules to your sendmail configuration, as
+the previous example does).
+
+ 1. Put "FEATURE(virtusertable)" in your sendmail.mc
+ file.
+
+ 2. By default, sendmail will build tables out of
+ /etc/virtusertable. If you want to change this, put
+ something like:
+
+ define(`VIRTUSER_TABLE', `-o hash /usr/local/lib/virtusertable')dnl
+
+ in your sendmail.mc file.
+
+ 3. Construct the virtusertable file like so:
+
+ info@foo.com foo-info
+ info@bar.com bar-info
+ @baz.org jane@elsewhere.net
+ @somedom.com error : 5.5.0 User unknown
+
+ (Contrast with steps 1 and 4 in the previous example
+ using regular mailertables).
+
+ 4. Compile the textfile into a database:
+
+ makemap hash /etc/virtusertable.db </etc/virtusertable
+
+ You may you use other lookup-methods than hash (btree
+ for example). Make sure that this database type matches
+ what is defined for the table in step 2.
+
+ 5. Put all the domains listed on the LHS of these aliases
+ in your sendmail.cw file, or on the Cw line in your
+ sendmail.cf.
+
+ 6. Recompile your sendmail.cf from your sendmail.mc and
+ test it.
+
+ 7. Once you are satisfied, move it into place and restart
+ sendmail.
+
+
+ Note that the virtusertable is only referenced for inbound
+mail (more accurately, only for controlling delivery). If you
+want to rewrite mail addresses from your virtual domain users as
+they pass through your system, you'll also need to make comparable
+modifications to the genericstable (used for rewriting).
+
+------------------------------
+
+Date: July 9, 1996
+Subject: Q3.8 -- There are four UUCP mailers listed in the
+ configuration files. Which one should I use?
+
+ The choice is partly a matter of local preferences and what is
+running at the other end of your UUCP connection. Unlike good
+protocols that define what will go over the wire, UUCP uses the policy
+that you should do what is right for the other end; if they change,
+you have to change. This makes it hard to do the right thing, and
+discourages people from updating their software. In general, if you
+can avoid UUCP, please do.
+
+ If you can't avoid it, you'll have to find the version that is
+closest to what the other end accepts. Following is a summary of the
+UUCP mailers available.
+
+ uucp-old (obsolete name: "uucp")
+ This is the oldest, the worst (but the closest to UUCP) way of
+ sending messages across UUCP connections. It does bangify
+ everything and prepends $U (your UUCP name) to the sender's
+ address (which can already be a bang path itself). It can only
+ send to one address at a time, so it spends a lot of time
+ copying duplicates of messages. Avoid this if at all possible.
+
+ uucp-new (obsolete name: "suucp")
+ The same as above, except that it assumes that in one rmail
+ command you can specify several recipients. It still has a lot
+ of other problems.
+
+ uucp-dom
+ This UUCP mailer keeps everything as domain addresses.
+ Basically, it uses the SMTP mailer rewriting rules.
+
+ Unfortunately, a lot of UUCP mailer transport agents require
+ bangified addresses in the envelope, although you can use
+ domain-based addresses in the message header. (The envelope
+ shows up as the From_ line on UNIX mail.) So....
+
+ uucp-uudom
+ This is a cross between uucp-new (for the envelope addresses)
+ and uucp-dom (for the header addresses). It bangifies the
+ envelope sender (From_ line in messages) without adding the
+ local hostname, unless there is no host name on the address at
+ all (e.g., "wolf") or the host component is a UUCP host name
+ instead of a domain name ("somehost!wolf" instead of
+ "some.dom.ain!wolf").
+
+ Examples:
+
+ We are on host grasp.insa-lyon.fr (UUCP host name "grasp"). The
+ following summarizes the sender rewriting for various mailers:
+
+ Mailer sender rewriting in the envelope
+ ------ ------ -------------------------
+ uucp-{old,new} wolf grasp!wolf
+ uucp-dom wolf wolf@grasp.insa-lyon.fr
+ uucp-uudom wolf grasp.insa-lyon.fr!wolf
+
+ uucp-{old,new} wolf@fr.net grasp!fr.net!wolf
+ uucp-dom wolf@fr.net wolf@fr.net
+ uucp-uudom wolf@fr.net fr.net!wolf
+
+ uucp-{old,new} somehost!wolf grasp!somehost!wolf
+ uucp-dom somehost!wolf somehost!wolf@grasp.insa-lyon.fr
+ uucp-uudom somehost!wolf grasp.insa-lyon.fr!somehost!wolf
+
+
+ If your only contact with the external world is through UUCP,
+you'll probably want to recompile sendmail with support for DNS turned
+off (if your host architecture supports a service switch file that
+sendmail understands, it will use the service switch however you've
+got it configured, even if you've compiled sendmail with DNS support
+turned off, so make sure the service switch file is also properly
+configured).
+
+ Using "FEATURE(nodns)" probably won't completely satisfy you, as
+more recent releases of version 8 sendmail really, REALLY, want to
+know what their canonical hostname is, and will go to great lengths to
+figure this out from the DNS. But if you don't have any nameservers,
+this can obviously add significant amounts of time to process startup
+as sendmail repeatedly tries (and fails) to find this information. It
+then becomes doubly important to have the proper Fully Qualified
+Domain Name (FQDN) listed first in your /etc/hosts file or in the file
+used to build your NIS/NIS+ table (or whatever you use).
+
+ For more information on "FEATURE(nodns)", see the RELEASE_NOTES
+file for sendmail versions 8.7.1 and later (search for "FQDN"), as
+well as _sendmail_, page 741 (page reference correct as of first
+edition, first printing).
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q3.9 -- How do I fix "undefined symbol inet_aton" and
+ "undefined symbol _strerror" messages?
+
+ You've probably replaced your resolver with the version from BIND
+4.9.3. You need to compile with -l44bsd in order to get the
+additional routines.
+
+------------------------------
+
+Date: March 24, 1997
+Subject: Q3.10 -- How do I solve "collect: I/O error on connection"
+ errors?
+
+ There is nothing wrong. This is just a diagnosis of a condition
+that had not been diagnosed before. If you are getting a lot of these
+from a single host, there is probably some incompatibility between 8.x
+and that host. If you get a lot of them in general, you may have
+network problems that are causing connections to get reset.
+
+ Note that if you are using PPP and the MTU on your end does
+not match what your service provider has configured, you may see
+these problems. Discuss with your service provider what the MTU
+should be set to, and correct if there is a mismatch.
+
+------------------------------
+
+Date: July 9, 1996
+Subject: Q3.11 -- Why can't my users forward their mail to a program?
+
+ I just upgraded to version 8 sendmail and now when my users try to
+forward their mail to a program they get an "illegal shell" or "cannot
+mail to programs" message and their mail is not delivered. What's
+wrong?
+
+ In order for people to be able to run a program from their
+.forward file, version 8 sendmail insists that their shell (that is,
+the shell listed for that user in the passwd entry) be a "valid"
+shell, meaning a shell listed in /etc/shells. If /etc/shells does not
+exist, a default list is used, typically consisting of /bin/sh and
+/bin/csh.
+
+ This is to support environments that may have NFS-shared
+directories mounted on machines on which users do not have login
+permission. For example, many people make their file server
+inaccessible for performance or security reasons; although users have
+directories, their shell on the server is /usr/local/etc/nologin or
+some such. If you allowed them to run programs anyway you might as
+well let them log in.
+
+ If you are willing to let users run programs from their .forward
+file even though they cannot telnet or rsh in (as might be reasonable
+if you run smrsh to control the list of programs they can run) then
+add the line:
+
+ /SENDMAIL/ANY/SHELL/
+
+to /etc/shells. This must be typed exactly as indicated, in caps,
+with the trailing slash.
+
+NOTA BENE: DO NOT list /usr/local/etc/nologin in /etc/shells -- this
+will open up other security problems.
+
+
+ IBM AIX does not use /etc/shells -- a list of allowable login
+shells is contained, along with many other login parameters, in
+/etc/security/login.cfg. You can copy the information in the
+"shells=" stanza into a /etc/shells on your system so sendmail will
+have something to use. Do NOT add "/usr/lib/uucp/uucico" or any other
+non-login shell into /etc/shells.
+
+ Also note that there are some weird things that AFS throws into
+the mix, and these can keep a program from running or running
+correctly out of .forward files or the system-wide aliases.
+
+
+ See also "smrsh" in Q2.13.
+
+------------------------------
+
+Date: November 24, 1996
+Subject: Q3.12 -- Why do connections to the SMTP port take such a
+ long time?
+
+ I just upgraded to version 8 sendmail and suddenly connections to
+the SMTP port take a long time. What is going wrong?
+
+ It's probably something weird in your TCP implementation that
+makes the IDENT code act oddly. On most systems version 8 sendmail
+tries to do a ``callback'' to the connecting host to get a validated
+user name (see RFC 1413 for detail). If the connecting host does not
+support such a service it will normally fail quickly with "Connection
+refused", but certain kinds of packet filters and certain TCP
+implementations just time out.
+
+ To test this (pre-8.7.y sendmail), set the IDENT timeout to zero
+using:
+
+ define(`confREAD_TIMEOUT',`Ident=0')dnl
+
+in the .mc file used by m4 to generate your sendmail.cf file.
+Alternatively, if you don't use m4, you can put ``OrIdent=0'' in the
+configuration file (we recommend the m4 solution, since that makes
+maintenance much easier for people who don't understand sendmail
+re-write rules, or after you've been away from it for a while).
+Either way, this will completely disable all use of the IDENT
+protocol.
+
+ For version 8.7.y sendmail (and above), you should instead use:
+
+ define(`confTO_IDENT',`0s')dnl
+
+
+ Another possible problem is that you have your name server and/or
+resolver configured improperly. Make sure that all "nameserver"
+entries in /etc/resolv.conf point to functional servers. If you are
+running your own server, make certain that all the servers listed in
+your root cache are up to date (this file is usually called something
+like "/var/namedb/root.cache"; see your /etc/named.boot file to get
+your value). Either of these can cause long delays.
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q3.13 -- Why do I get "unknown mailer error 5 -- mail:
+ options MUST PRECEDE recipients" errors?
+
+ I just upgraded to version 8 sendmail and suddenly I get errors
+such as ``unknown mailer error 5 -- mail: options MUST PRECEDE
+recipients.'' What is going wrong?
+
+ You need OSTYPE(systype) in your .mc file, where "systype" is set
+correctly for your hardware & OS combination -- otherwise the
+configurations use a default that probably disagrees with your local
+mail system. See cf/README for details.
+
+ If this is on a Sun workstation, you might also want to take a
+look at the local mailer flags in the Sun-supplied sendmail.cf and
+compare them to the local mailer flags generated for your version 8
+sendmail.cf. If they differ, you might try changing the V8 flags to
+match the Sun flags.
+
+------------------------------
+
+Date: March 24, 1996
+Subject: Q3.14 -- Why does version 8 sendmail panic my SunOS box?
+
+ Sendmail 8.7.y panics SunOS 4.1.3_U1 (at least for 1<=y<=3)
+and SunOS 4.1.3, and sendmail 8.6.x seems fine on both machines (at
+least for 9<=x<=12).
+
+ The problem is that a kernel patch is missing, specifically
+100584-08 (4.1.3), 102010-03 (4.1.3_U1), or 102517 (4.1.4).
+This should be available from your hardware vendor through your
+support contract or their online support facilities (including
+being available on the SunSolve CD).
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q3.15 -- Why does the "From " header gets mysteriously
+ munged when I send to an alias?
+
+ ``It's not a bug, it's a feature.'' This happens when you have a
+"owner-list" alias and you send to "list". V8 propagates the owner
+information into the envelope sender field (which appears as the "From
+" header on UNIX mail or as the Return-Path: header) so that
+downstream errors are properly returned to the mailing list owner
+instead of to the sender. In order to make this appear as sensible as
+possible to end users, I recommend making the owner point to a
+"request" address -- for example:
+
+ list: :include:/path/name/list.list
+ owner-list: list-request
+ list-request: eric
+
+ This will make message sent to "list" come out as being "From
+list-request" instead of "From eric".
+
+------------------------------
+
+Date: November 24, 1996
+Subject: Q3.16 -- Why doesn't MASQUERADE_AS (or the user database)
+ work for envelope addresses as well as header addresses?
+
+ Believe it or not, this is intentional. The interpretation of the
+standards by the version 8 sendmail development group was that this
+was an inappropriate rewriting, and that if the rewriting were
+incorrect at least the envelope would contain a valid return address.
+
+
+ If you're using version 8.7.y sendmail (or later), you can use
+
+ FEATURE(masquerade_envelope)
+
+ in your sendmail.mc file to change this behaviour.
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q3.17 -- How do I run version 8 sendmail and support the
+ MAIL11V3 protocol?
+
+ Get the reimplementation of the mail11 protocol by Keith Moore
+from <ftp://gatekeeper.dec.com/pub/DEC/gwtools/> (with contributions
+from Paul Vixie).
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q3.18 -- Why do messages disappear from my queue unsent?
+
+ When I look in the queue directory I see that qf* files have been
+renamed to Qf*, and sendmail doesn't see these. What's wrong?
+
+ If you look closely you should find that the Qf files are owned by
+users other than root. Since sendmail runs as root it refuses to
+believe information in non-root-owned qf files, and it renames them to
+Qf to get them out of the way and make it easy for you to find. The
+usual cause of this is twofold: first, you have the queue directory
+world writable (which is probably a mistake -- this opens up other
+security problems) and someone is calling sendmail with an "unsafe"
+flag, usually a -o flag that sets an option that could compromise
+security. When sendmail sees this it gives up setuid root
+permissions.
+
+ The usual solution is to not use the problematic flags. If you
+must use them, you have to write a special queue directory and have
+them processed by the same uid that submitted the job in the first
+place.
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q3.19 -- When is sendmail going to support RFC 1522 MIME
+ header encoding?
+
+ This is considered to be a MUA issue rather than an MTA issue.
+
+Quoth Eric Allman:
+
+ The primary reason is that the information necessary to
+ do the encoding (that is, 8->7 bit) is unknown to the MTA.
+ In specific, the character set used to encode names in headers
+ is _NOT_ necessarily the same as used to encode the body
+ (which is already encoded in MIME in the charset parameter
+ of the Content-Type: header). Furthermore, it is perfectly
+ reasonable for, say, a Swede to be living and working in Korea,
+ or a Russian living and working in Germany, and want their
+ name to be encoded in their native character set; it could
+ even be that the sender was Japanese, the recipient Russian,
+ and the body encoded in ISO 8859-1. If all I have are 8-bit
+ characters, I can't choose the charset properly.
+
+ Similarly, when doing 7->8 bit conversions, I don't want
+ to throw away this information, as it is necessary for proper
+ presentation to the end user.
+
+------------------------------
+
+Date: January 17, 1997
+Subject: Q3.20 -- Why can't I get mail to some places, but
+ instead always get the error "reply: read error from
+ name.of.remote.host"?
+
+ This is usually caused by a bug in the remote host's mail server,
+or Mail Transport Agent (MTA). The "EHLO" command of ESMTP causes
+the remote server to drop the SMTP connection. There are several
+MTAs that have this problem, but one of the most common server
+implementations can be identified by the "220 All set, fire away"
+greeting it gives when you telnet to its SMTP port.
+
+ To work around this problem, you can configure sendmail to use
+a mailertable with an entry telling sendmail to use plain SMTP when
+talking to that host:
+
+ name.of.remote.host smtp:name.of.remote.host
+
+
+ Sites which must run a host with this broken SMTP implemetation
+should do so by having a site running sendmail or some other
+reliable (and reasonably modern) SMTP MTA act as an MX server for
+the problem host.
+
+
+ There is also a problem wherein some TCP/IP implementations
+are broken, and if any connection attempt to a remote end gets a
+"connection refused", then *all* connections to that site will
+get closed. Of course, if you try to use the IDENT protocol across
+a firewall (at either end), this is highly likely to result in the
+same apparent kind of "read error".
+
+ The fix is simple -- on those machines with broken TCP/IP
+implementations, do not attempt to use IDENT. When compiling newer
+releases of version 8 sendmail, the compiler should automatically
+detect whether you're on a machine that is known to have this kind
+of TCP/IP networking problem, and make sure that sendmail does
+not attempt to use IDENT. If you've since patched your machine so
+that it no longer has this problem, you'll need to go back in and
+explicitly configure sendmail for support of IDENT, if you want
+that feature.
+
+------------------------------
+
+Date: January 17, 1996
+Subject: Q3.21 -- Why doesn't "FEATURE(xxx)" work?
+
+ When creating m4 Master Config (".mc") files for version 8
+sendmail, many "FEATURE()" macros simply change the definition of
+internal variables that are referenced in the "MAILER()" definitions.
+
+ To make sure that everything works as desired, you need to
+make sure that "OSTYPE()" macros are put at the very beginning
+of the file, followed by "FEATURE()" and "HACK()" macros, local
+definitions, and at the very bottom, the "MAILER()" definitions.
+
+------------------------------
+
+Date: March 24, 1997
+Subject: Q3.22 -- How do I configure sendmail to not use DNS?
+
+ In situations where you're behind a firewall, or across a
+dial-up line, there are times when you need to make sure that
+programs (such as sendmail) do not use the DNS at all.
+
+
+ With version 8.8, you change the service switch file to omit
+"DNS" and use only NIS, files, and other map types as appropriate.
+
+ With previous releases of version 8 sendmail, you need to
+recompile the binary and make sure that "NAMED_BIND" is turned off
+in src/conf.h.
+
+
+ Note that you'll need to forward all your outbound mail to
+another machine as a "relay" (one that does use DNS, and understands
+how to properly use MX records, etc...), otherwise you won't be able
+to get mail to any site(s) other than the one(s) you configure in
+your /etc/hosts file (or whatever).
+
+------------------------------
+
+Date: March 24, 1997
+Subject: Q3.23 -- How do I get all my queued mail delivered to my
+ Unix box from my ISP?
+
+ Assuming you're running sendmail or some other SMTP MTA on
+some sort of a Unix host, and your ISP uses version 8.8 sendmail
+and they queue all mail for your domain (as opposed to stuffing it
+all in one file that you need to download via POP3 or somesuch),
+something like the following script should do the trick:
+
+ #!/bin/sh
+ telnet mail.myisp.com. 25 < __EOF__
+ EHLO me.mydomain.com
+ ETRN mydomain.com
+ QUIT
+ __EOF__
+
+
+ Note that this is indented for readability, and the real script
+would have column position #1 of the file be the first printable
+character in each line.
+
+ Of course, you'll have to fill in the appropriate details for
+"mail.myisp.com", "mydomain.com", etc....
+
+
+ If this script doesn't work, you may have problems with "here"
+documents being fed as standard input to commands (like telnet). In
+that case, you'll need to build a similar script using "expect". For
+more information on expect, see <http://expect.nist.gov> and the book
+"Exploring Expect: A Tcl-Based Toolkit for Automating Interactive
+Applications" (<http://www.ora.com/catalog/expect/noframes.html>).
+
+
+ If your ISP doesn't use version 8.8 sendmail, you may have to
+cobble together alternative solutions. They may have a "ppplogin"
+script that is executed every time your machines dials them up, and
+if so, you may be able to have them modified this script so as to
+put a "sendmail -qRmydomain.com" in it (which is effectively what
+the "ETRN" command does, but in a safer fashion).
+
+ Alternatively, they may have a hacked finger daemon, so
+that you'd put "finger mydomain.com@theirhost.theirdomain.com"
+in your script. Or, they may have some other solution for you.
+However, only they would be able to answer what solutions they have
+available to them.
+
+ Obviously, the easiest and most "standard" solution is to have
+them upgrade their system to the most recent stable release of
+version 8.8 sendmail.
+
+------------------------------
+
+Comments/updates should be sent to <sendmail-faq@etext.org>.
+
+Copyright 1996, by Brad Knowles, all rights reserved
+
+End of comp.mail.sendmail Frequently Asked Questions (FAQ), part 1 of 2
+***********************************************************************
diff --git a/debian/part2 b/debian/part2
new file mode 100644
index 0000000..d91ab4d
--- /dev/null
+++ b/debian/part2
@@ -0,0 +1,1467 @@
+Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!thetimes.pixel.kodak.com!news.kodak.com!news.sprintlink.net!news-pen-16.sprintlink.net!news.etcfiber.net!pjm-gate.pjm.com!dsinc!netnews.upenn.edu!news-xfer.netaxs.com!tezcat!cam-news-hub1.bbnplanet.com!cpk-news-hub1.bbnplanet.com!news.bbnplanet.com!newsxfer3.itd.umich.edu!newsxfer.itd.umich.edu!aanews.merit.net!branch.com!news.bizserve.com!news
+From: brad@etext.org
+Newsgroups: comp.mail.sendmail,comp.mail.misc,comp.answers,news.answers
+Subject: comp.mail.sendmail Frequently Asked Questions (Part 2 of 2)
+Followup-To: comp.mail.sendmail
+Date: 27 Apr 1997 04:57:53 GMT
+Organization: The ETEXT Archives
+Lines: 1446
+Approved: news-answers-request@MIT.Edu
+Distribution: world
+Expires: 06/01/97 01:00:01
+Message-ID: <5jumch$i1l@kahuna.bizserve.com>
+Reply-To: sendmail-faq@etext.org (Sendmail FAQ Maintainers)
+NNTP-Posting-Host: locust.etext.org
+Summary: This posting contains a list of Frequently Asked Questions
+ (and their answers) about the program "sendmail", distributed with
+ many versions of Unix. It should be read by anyone who wishes to
+ post to the Usenet newsgroup comp.mail.sendmail.
+Keywords: sendmail mail SMTP FAQ
+X-Posting-Frequency: posted on the 27th of each month
+Xref: senator-bedfellow.mit.edu comp.mail.sendmail:43555 comp.mail.misc:39333 comp.answers:25606 news.answers:100741
+
+Posted-By: auto-faq 3.1.1.2
+Archive-name: mail/sendmail-faq/part2
+
+URL: http://www.his.com/~brad/sendmail/index.html
+
+
+ comp.mail.sendmail
+ Frequently Asked Questions (FAQ)
+ Last updated March 24, 1997
+
+ Copyright 1996, by Brad Knowles, all rights reserved
+
+
+This FAQ is edited and maintained by Brad Knowles <brad@etext.org>.
+The official archive for all FAQs posted to <news:news.answers>
+is <ftp://rtfm.mit.edu/pub/usenet/news.answers/>, with many known
+mirrors. On this site, the latest version of this FAQ can be found
+in <ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/sendmail-faq/>.
+Since this server tends to be extremely busy, as an alternative,
+you might want to try using <http://www.imc.org/sendmail-faq-1>
+and <http://www.imc.org/sendmail-faq-2> instead.
+
+If you don't have access to FTP or WWW, this FAQ can be retrieved by
+sending Internet email to <mail-server@rtfm.mit.edu> with an empty
+subject line (it gets ignored) and the command "send
+usenet/news.answers/mail/sendmail-faq/part*" as the body of the
+message (omitting the quotes, of course).
+
+As an alternative, you might want to try sending Internet email
+to <info@imc.org> with an empty subject line (it gets ignored)
+and "send sendmail-faq-*" as the body of the body of the message
+(again, omitting the quotes).
+
+Additional alternative access methods are detailed within.
+
+
+This FAQ is in RFC 1153 digest format. The "Date:" field of each
+entry represents the date of the last update made to that entry.
+
+
+This FAQ has now been split into two parts, to try and make it easier
+to pass through older or less capable news or mail gateways.
+
+
+The intent is to ultimately make this document more web-friendly (in
+that all original work is done in SGML), and using the linuxdoc-sgml
+tools, automatically generate both the HTML and ASCII text versions,
+automatically posting the ASCII version to comp.mail.sendmail as
+appropriate.
+
+In the meanwhile, all pseudo-HTMLized versions of this FAQ are
+considered unsupported. We cannot be held responsible for what
+someone else's program does to this document in an attempt to
+make it more web-friendly. Nevertheless, the Landfield Hypertext
+Usenet FAQ Archive seems to work well, and if you must access
+the comp.mail.sendmail FAQ via the web, try slinging over to
+<http://www.landfield.com/faqs/mail/sendmail-faq/>.
+
+
+Comments/updates should be sent to <sendmail-faq@etext.org>.
+
+----------------------------------------------------------------------
+
+Date: March 24, 1997
+Subject: Table of Contents
+
+Table of Contents
+=================
+
+ PART ONE
+ ========
+
+ 0. TO DO
+
+ 1. COPYRIGHT NOTICE / REDISTRIBUTION REQUIREMENTS
+
+ 2. INTRODUCTION / MISCELLANEOUS
+ 2.1 What is this newsgroup?
+ 2.2 What is the scope of this FAQ?
+ 2.3 Where can I find the latest version of this FAQ?
+ 2.4 How do I access comp.mail.sendmail by email?
+ 2.5 Where can I ask email-related DNS questions?
+ 2.6 How can I subscribe to these newsgroups?
+ 2.7 Which version of sendmail should I run?
+ 2.8 What is the latest release of sendmail?
+ 2.9 Where can I find it?
+ 2.10 What are the differences between Version 8 and other
+ versions?
+ 2.11 What's the best platform for running sendmail?
+ 2.12 What is BIND and where can I get the latest version?
+ 2.13 What is smrsh and where can I get it?
+ 2.14 What is smap and where can I get it?
+ 2.15 What is TCP-Wrappers and where can I get it?
+ 2.16 Why won't db 1.85 build for my SGI running Irix >= 5.2?
+ 2.17 What is makemap and where can I get it?
+
+ 3. VERSION 8 SPECIFIC ISSUES
+ 3.1 How do I make all my addresses appear to be from a single
+ host?
+ 3.2 How do I rewrite my "From:" lines to read
+ ``First_Last@My.Domain''?
+ 3.3 So what was the user database feature intended for?
+ 3.4 Why are you so hostile to using full names for email
+ addresses?
+ 3.5 Where do I find this user database (UserDB) code?
+ 3.6 How do I get the user database to work with Pine or
+ with FEATURE(always_add_domain)?
+ 3.7 How do I manage several (virtual) domains?
+ 3.8 There are four UUCP mailers listed in the configuration
+ files. Which one should I use?
+ 3.9 How do I fix "undefined symbol inet_aton" and "undefined
+ symbol _strerror" messages?
+ 3.10 How do I solve "collect: I/O error on connection" errors?
+ 3.11 Why can't my users forward their mail to a program?
+ 3.12 Why do connections to the SMTP port take such a long time?
+ 3.13 Why do I get "unknown mailer error 5 -- mail: options
+ MUST PRECEDE recipients" errors?
+ 3.14 Why does version 8 sendmail panic my SunOS box?
+ 3.15 Why does the "From " header gets mysteriously munged
+ when I send to an alias?
+ 3.16 Why doesn't MASQUERADE_AS (or the user database) work
+ for envelope addresses as well as header addresses?
+ 3.17 How do I run version 8 sendmail and support the MAIL11V3
+ protocol?
+ 3.18 Why do messages disappear from my queue unsent?
+ 3.19 When is sendmail going to support RFC 1522 MIME header
+ encoding?
+ 3.20 Why can't I get mail to some places, but instead
+ always get the error "reply: read error from
+ name.of.remote.host"?
+ 3.21 Why doesn't "FEATURE(xxx)" work?
+ 3.22 How do I configure sendmail to not use DNS?
+ 3.23 How do I get all my queued mail delivered to my Unix
+ box from my ISP?
+
+
+ PART TWO
+ ========
+
+ 4. GENERAL SENDMAIL ISSUES
+ 4.1 Should I use a wildcard MX for my domain?
+ 4.2 How can I set up an auto-responder?
+ 4.3 How can I get sendmail to deliver local mail to
+ $HOME/.mail instead of into /usr/spool/mail (or
+ /usr/mail)?
+ 4.4 Why does it deliver the mail interactively when I'm
+ trying to get it to go into queue only mode?
+ 4.5 How can I solve "config error: mail loops back to
+ myself" messages?
+ 4.6 Why does my sendmail process sometimes hang when
+ connecting over a SLIP/PPP link?
+ 4.7 How can I summarize the statistics generated by
+ sendmail in the syslog?
+ 4.8 How can I check my sendmail.cf to ensure that it's
+ re-writing addresses correctly?
+ 4.9 What is procmail, and where can I get it?
+ 4.10 How can I solve "cannot alias non-local names" errors?
+
+ 5. VENDOR/OS SPECIFIC SENDMAIL ISSUES
+ 5.1 Sun Microsystems SunOS/Solaris 1.x/2.x
+ 5.1.1 How can I solve "line 273: replacement $3 out of
+ bounds" errors?
+ 5.1.2 How can I solve "line 445: bad ruleset 96 (50 max)"
+ errors?
+ 5.1.3 Why does version 8 sendmail (< 8.7.5) sometimes
+ hang under Solaris 2.5?
+ 5.1.4 Why can't I use SunOS/Solaris to get email to
+ certain large sites?
+ 5.2 IBM AIX
+ 5.2.1 The system resource controller always reports
+ sendmail as "inoperative". What's wrong?
+ 5.2.2 Why can't I use AIX to get email to some sites?
+ 5.2.3 Why can't I get sendmail 8.7.1 to use MX records
+ with AIX 3.2.5?
+
+ 6. ADDITIONAL INFORMATION SOURCES (RFC 1807 bibliography format)
+ 6.1 Reference material devoted exlusively to sendmail
+ 6.2 Reference material with chapters or sections on sendmail
+ 6.3 Reference material on subjects related to sendmail
+ 6.4 World-wide web index pages on sendmail
+ 6.5 World-wide web index pages Internet email in general
+ 6.6 Online tutorials for sendmail
+ 6.7 Online archives of mailing lists and Usenet newsgroups,
+ relating to Internet email
+
+ 7. THANKS!
+
+------------------------------
+
+Date: July 9, 1996
+Subject: Q4.1 -- Should I use a wildcard MX for my domain?
+
+ If at all possible, no.
+
+ Wildcard MX records have lots of semantic "gotcha"s. For example,
+they will match a host "unknown.your.domain" -- if you don't
+explicitly test for unknown hosts in your domain, you will get "config
+error: mail loops back to myself".
+
+ See RFCs 1535, 1536, and 1912 (updates RFC 1537) for more detail
+and other related (or common) problems. See also _DNS and BIND_ by
+Albitz and Liu.
+
+ They can also cause your system to add your domain to outgoing
+FQDNs in a desperate attempt to get the mail to where it's supposed to
+go, but because *.your.domain is valid due to the wildcard MX,
+delivery to not.real.domain.your.domain will get dumped on you, and
+you may even find yourself in a loop as the domain keeps getting
+tacked on time after time after time (the "config error: mail loops
+back to myself" problem).
+
+
+ Wildcard MX records are just a bad idea, plain and simple.
+They don't work the way you'd expect, and virtually no one gets
+them right. Avoid them at all costs.
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q4.2 -- How can I set up an auto-responder?
+
+ This is a local mailer issue, not a sendmail issue. Depending on
+what you're doing, look at procmail (see Q4.9), ftpmail, or Majordomo.
+
+
+ The latest version of Majordomo can be found at
+<ftp://ftp.greatcircle.com/pub/majordomo/>. It is written in Perl and
+requires either Perl 4.036, and appears to run with only minor tweaks
+under 5.001a or later. Make sure to check out the web interface for
+Majordomo called "Mailserv" at <http://iquest.com/~fitz/www/mailserv/>
+or "LWGate" at <http://www.netspace.org/users/dwb/lwgate.html>. The
+latest versions of Perl (both 4.x and 5.x) can be found in
+<http://www.metronet.com/perlinfo/src/>. More information about Perl
+can be found at <http://www.metronet.com/perlinfo/perl5.html>
+
+ The latest version of ftpmail can be found at
+<ftp://src.doc.ic.ac.uk/packages/ftpmail> or any comp.sources.misc
+archive (volume 37).
+
+------------------------------
+
+Date: July 9, 1996
+Subject: Q4.3 -- How can I get sendmail to deliver local mail to
+ $HOME/.mail instead of into /usr/spool/mail (or /usr/mail)?
+
+ Again, this is a local mailer issue, not a sendmail issue. Either
+modify your local mailer (source code will be required) or change the
+program called in the "local" mailer configuration description to be a
+new program that does this local delivery. One program that is
+capable of doing this is procmail (see Q4.9), although there are
+probably many others as well.
+
+ You might be interested in reading the paper ``HLFSD: Delivering
+Email to your $HOME'' available in the Proceedings of the USENIX
+System Administration (LISA VII) Conference (November 1993). More
+information is at <ftp://ftp.cs.columbia.edu/pub/hlfsd/README.hlfsd>,
+while the actual archive of the papers is at
+<ftp://ftp.cs.columbia.edu/pub/hlfsd/hlfsd-paper.tar.gz> (tar archive,
+gzip'ed).
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q4.4 -- Why does it deliver the mail interactively when I'm
+ trying to get it to go into queue only mode?
+
+ Or, I'm trying to use the "don't deliver to expensive mailer"
+flag, and it delivers the mail interactively anyway. I can see it
+does it: here's the output of "sendmail -v foo@somehost" (or Mail -v
+or equivalent).
+
+
+ The -v flag to sendmail (which is implied by the -v flag to Mail
+and other programs in that family) tells sendmail to watch the
+transaction. Since you have explicitly asked to see what's going on,
+it assumes that you do not want to to auto-queue, and turns that
+feature off. Remove the -v flag and use a "tail -f" of the log
+instead to see what's going on.
+
+ If you are trying to use the "don't deliver to expensive mailer"
+flag (mailer flag "e"), be sure you also turn on global option "c" --
+otherwise it ignores the mailer flag.
+
+------------------------------
+
+Date: January 17, 1997
+Subject: Q4.5 -- How can I solve "config error: mail loops back to
+ myself" messages?
+
+ I'm getting these error messages:
+
+ 553 relay.domain.net config error: mail loops back to myself
+ 554 <user@domain.net>... Local configuration error
+
+ How can I solve this problem?
+
+ You have asked mail to the domain (e.g., domain.net) to be
+forwarded to a specific host (in this case, relay.domain.net)
+by using an MX record, but the relay machine doesn't recognize
+itself as domain.net. Add domain.net to /etc/sendmail.cw (if you
+are using FEATURE(use_cw_file)) or add "Cw domain.net" to your
+configuration file.
+
+
+ IMPORTANT: When making changes to your configuration file, be
+sure you kill and restart the sendmail daemon (for ANY change in the
+configuration, not just this one):
+
+ kill `head -1 /etc/sendmail.pid`
+ sh -c "`tail -1 /etc/sendmail.pid`"
+
+ NOTA BENE: kill -1 does not work with versions prior to 8.7.y!
+
+ With version 8.8.z sendmail, if the daemon was started up with
+a full pathname (i.e., "/usr/lib/sendmail -bd -q13m"), then you
+should be able to send it a HUP signal ("kill -1", or more safely,
+"kill -HUP") and have it reload itself (version 8.7.y sendmail
+cannot do this safely, and represents a security risk if it's not
+replaced with version 8.8.3 or later).
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q4.6 -- Why does my sendmail process sometimes hang when
+ connecting over a SLIP/PPP link?
+
+ I'm connected to the network via a SLIP/PPP link. Sometimes my
+sendmail process hangs (although it looks like part of the message has
+been transfered). Everything else works. What's wrong?
+
+ Most likely, the problem isn't sendmail at all, but the low level
+network connection. It's important that the MTU (Maximum Transfer
+Unit) for the SLIP connection be set properly at both ends. If they
+disagree, large packets will be trashed and the connection will hang.
+
+------------------------------
+
+Date: November 24, 1996
+Subject: Q4.7 -- How can I summarize the statistics generated by
+ sendmail in the syslog?
+
+ This question is addressed on page 319 of _sendmail_ by Bryan
+Costales.
+
+ An updated version of this syslog-stat.pl script (so that
+it understands the log format used in version 8 sendmail) is
+at <ftp://ftp.his.com/pub/brad/sendmail/syslog_stats>. The
+updated version of ssl has been uploaded to the SMTP Resources
+Directory (in <ftp://ftp.is.co.za/networking/mail/tools/>),
+as well as <ftp://ftp.his.com/pub/brad/sendmail/ssl>.
+There is also another program (written by Bryan Beecher) at
+<ftp://ftp.his.com/pub/brad/sendmail/smtpstats>.
+
+ If you're interested in summarizing POP statistics, there is
+<ftp://ftp.his.com/pub/brad/sendmail/popstats>, also written by
+Bryan Beecher.
+
+
+ To see what else is available today, check the Comprehensive Perl
+Archive Network <ftp://ftp.funet.fi/pub/languages/perl/CPAN/CPAN> or
+<ftp://ftp.cis.ufl.edu/pub/perl/CPAN/CPAN> for the site nearest you.
+For the scripts themselves, look under CPAN/scripts/mailstuff/ at
+any CPAN site. For more information, see the comp.lang.perl.*
+FAQs at <ftp://ftp.cis.ufl.edu:/pub/perl/faq/FAQ> or
+<ftp://rtfm.mit.edu:/pub/usenet/comp.lang.perl.*/>.
+
+
+ There is also the "Sendmail Statistics Project" which has a web
+page at <http://www.josnet.se/projects/ssp/>. Although they have
+examples online of what the output might look like, it now appears
+that this project is either dead or at least indefinitely on hold.
+Still, you may be able to talk to the authors in order to get what
+code from them you can.
+
+
+ If you're interested in using these kinds of tools to help
+you do some near real-time monitoring of your system, you might be
+interested in MEWS (Mail Early Warning System). From the README:
+
+ If you've ever written a perl script to parse sendmail
+ log files looking for errors, MEWS might be of interest to
+ you. If you've ever thought about writing a perl script to
+ munge sendmail log files, cringed a little and hurriedly
+ came up with an excuse not to do it, read on.
+
+ If you don't have a Solaris 2.5 machine, you can probably
+ stop reading here.
+
+ The Mail Early Warning System (MEWS) gives postmasters
+ immediate notification of trouble spots on your mail
+ backbone. It only works with sendmail.
+
+ To explain it in a nutshell, whenever sendmail returns a
+ 4xx or 5xx SMTP code, with the MEWS modifications, it also
+ sends the code over UDP to a daemon which then replays the
+ error message to interested parties. The man pages go into
+ a little bit more detail.
+
+
+ If this sounds like something you might be interested in
+getting more details about, you can find the MEWS archive at
+<ftp://ftp.qualcomm.com/pub/people/eamonn/mews.tar.Z>.
+
+------------------------------
+
+Date: July 9, 1996
+Subject: Q4.8 -- How can I check my sendmail.cf to ensure that it's
+ re-writing addresses correctly?
+
+ The recommended program for this is "checksendmail" by Rob
+Kolstad. Old versions of this are available on various archive sites,
+but currently, the only way to get the most recent version (which has
+been updated to understand version 8.7 long option name syntax, as
+well as now supporting both Perl 4.x and Perl 5.x) is from Rob
+himself.
+
+ The latest archive will be made publicly available (most likely
+through the SMTPRD run by Andras Salamon; see Q6.5, entry
+sendmail-faq//online/index/14) as soon as it is received.
+
+------------------------------
+
+Date: July 9, 1996
+Subject: Q4.9 -- What is procmail, and where can I get it?
+
+ The program "procmail" is a replacement for the local mailer
+(variously called /bin/mail, /usr/bin/mail, mail.local, rmail,
+etc...). It has been ported to run on virtually every OS you're
+likely to run into, and has a whole host of features. It is typically
+about 30% faster performing the job of the local mailer than programs
+such as /bin/mail or /usr/bin/mail, it has been hammered on widely to
+make it extremely secure (much more so than most local mailers) and
+very robust. Procmail is also capable of helping you put a quota on a
+user's mailbox through the standard Unix quota mechanism (see Q4.3).
+
+ In short, whatever you've got, you're almost guaranteed that
+procmail is better (if nothing else, the author has been able to focus
+lots of time and energy into making it the best and fastest tool
+available, while most system vendors just throw something together as
+fast as they can and move on to the whole rest of the OS).
+
+ However, this only begins to scratch the surface of what procmail
+is capable of. It's most important feature is the fact that it gives
+you a standard way to create rules (procmail calls them "recipes") to
+process your mail before the messages get put into your mailbox, and
+for that feature alone, it is one of the most important tools any
+administrator can have in their repertoire. By filtering out or
+automatically dealing with 80% of your daily cruft, it lets you spend
+more time on the hard 20%.
+
+ Note that recent releases of version 8 sendmail natively support
+using procmail as an alternate local mailer (see
+"FEATURE(local_procmail)" for version 8.7 and above). They also
+support procmail as an additional local mailer, if you're concerned
+about flat-out replacing your current local mailer with procmail (see
+"MAILER(procmail)" in version 8.7 and above).
+
+
+ You can also install procmail as a user and run it out of your
+.forward file, although this tends to be a bit slower and less
+efficient.
+
+
+ The latest version of procmail can be found at
+<ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/>.
+
+
+ Procmail is also the core to a mailing list management package
+called "SmartList", so if you've already got procmail, adding
+SmartList may be a good option. Some listowners prefer Majordomo,
+Listserv, or one of those other programs, but SmartList has more than
+a few adherents as well. Your personal tastes will dictate whether
+you swear by SmartList or at it.
+
+------------------------------
+
+Date: March 24, 1997
+Subject: Q4.10 -- How can I solve "cannot alias non-local names"
+ errors?
+
+ I upgraded from my vendor's sendmail to the latest version and
+now I'm getting these error messages when I run "newaliases":
+
+ /etc/aliases: line 13: MAILER-DAEMON... cannot alias non-local names
+ /etc/aliases: line 14: postmaster... cannot alias non-local names
+
+ How can I solve this problem?
+
+
+ Your local mailer doesn't have the "A" flag specified. Edit the
+Mlocal line in sendmail.cf and add "A" to the flags listed after
+"F=".
+
+ Better yet, if you're running a recent version of sendmail
+that uses m4 to generate .cf files from .mc files, regenerate your
+sendmail.cf and see if that fixes the problem. Remember to install
+the new sendmail.cf and restart the sendmail daemon.
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q5.1.1 -- How can I solve "line 273: replacement $3 out of
+ bounds" errors?
+
+ When I use sendmail V8 with a Sun config file I get lines like:
+
+ /etc/sendmail.cf: line 273: replacement $3 out of bounds
+
+ the line in question reads:
+
+ R$*<@$%y>$* $1<@$2.LOCAL>$3 user@ether
+
+ what does this mean? How do I fix it?
+
+ V8 doesn't recognize the Sun "$%y" syntax, so as far as it is
+concerned, there is only a $1 and a $2 (but no $3) in this line. Read
+Rick McCarty's paper on "Converting Standard Sun Config Files to
+Sendmail Version 8", in the contrib directory (file
+"converting.sun.configs") in the latest version 8 sendmail
+distribution for a full discussion of how to do this.
+
+------------------------------
+
+Date: March 23, 1996
+Subject: Q5.1.2 -- How can I solve "line 445: bad ruleset 96 (50 max)"
+ errors?
+
+ When I use sendmail V8 on a Sun, I sometimes get lines like:
+
+ /etc/sendmail.cf: line 445: bad ruleset 96 (50 max)
+
+ what does this mean? How do I fix it?
+
+ You're somehow trying to start up the old Sun sendmail (or
+sendmail.mx) with a version 8 sendmail config file, which Sun's
+sendmail doesn't like. Check your /etc/rc.local, any procedures that
+have been created to stop and re-start the sendmail processes, etc....
+Make sure that you've switched everything over to using the new
+sendmail. To keep this problem from ever happening again, try the
+following (make sure you're logged in as root):
+
+ mv /usr/lib/sendmail /usr/lib/sendmail.old
+ ln -s /usr/local/lib/sendmail.v8 /usr/lib/sendmail
+ mv /usr/lib/sendmail.mx /usr/lib/sendmail.mx.old
+ ln -s /usr/local/lib/sendmail.v8 /usr/lib/sendmail.mx
+ chmod 0000 /usr/lib/sendmail.old
+ chmod 0000 /usr/lib/sendmail.mx.old
+
+ Assuming, of course, that you have installed sendmail V8 in
+/usr/local/lib/sendmail.v8.
+
+------------------------------
+
+Date: May 23, 1996
+Subject: Q5.1.3 -- Why does version 8 sendmail (< 8.7.5) sometimes
+ hang under Solaris 2.5?
+
+ In moving from Solaris 2.4 to Solaris 2.5, the kernel changed its
+name and is now in /kernel/genunix instead of /kernel/unix, so
+_PATH_UNIX in conf.h is pointing to the wrong place.
+
+ If you can't upgrade to the latest release of sendmail 8.8.z,
+the next best thing to do is change _PATH_UNIX in conf.h (in the
+solaris2 part) to point to the generic interface /dev/ksyms, like so:
+
+ # define _PATH_UNIX "/dev/ksyms"
+
+------------------------------
+
+Date: November 24, 1996
+Subject: Q5.1.4 -- Why can't I use SunOS/Solaris to get email to
+ certain large sites?
+
+ This is most likely a problem in your resolver libraries
+(DNS, /etc/hosts, NIS, etc...). Older Sun (and Solaris?) resolver
+libraries allocated enough room for only five IP addresses for each
+host name, and if any program ever ran across a name with more than
+five IP addresses for it, the program would crash.
+
+ For example, this would keep you from getting mail to CompuServe,
+since (at the time of this writing) they list eleven IP addresses
+for mx1.compuserve.com (one of the named MXes for compuserve.com).
+
+ This will affect you even if you use version 8 sendmail, since
+it's a problem in the resolver libraries, and not in sendmail itself.
+
+
+ You should either get patches to the resolver libraries from
+Sun, or the latest version of BIND (see Q2.12) and install their
+resolver library routines. Between the two, installing BIND is a
+bit more work, but it typically gives you much more up-to-date code
+to help you resist attacks to your systems, more capable programs
+to be used for serving the DNS (including support for IPv6 and
+several other features), and some very useful utility programs.
+
+------------------------------
+
+Date: July 5, 1996
+Subject: Q5.2.1 -- The system resource controller always reports
+ sendmail as "inoperative". What's wrong?
+
+ When I use version 8 sendmail on an IBM RS/6000 running AIX, the
+system resource controller always reports sendmail as "inoperative",
+even though it's actually running. What's wrong?
+
+ When running as a daemon, sendmail detaches from its parent
+process, fooling the SRC into thinking that sendmail has exited. To
+fix this, issue the commands:
+
+ kill `head -1 /etc/sendmail.pid`
+ chssys -s sendmail -f 9 -n 15 -S -a "-d99.100"
+ # use "-d0.1" in sendmail 8.6.x
+ startsrc -s sendmail -a "-bd -q30m"
+ # your sendmail args may vary
+
+ Now the SRC should report the correct status of sendmail. If you
+are using version 8.6.x, use "-d0.1" instead of "-d99.100" (the debug
+options changed somewhat in version 8.7). In 8.6.x a side-effect of
+the "-d0.1" option is that a few lines of debug output will be printed
+on the system console every time sendmail starts up.
+
+ For more information, read up on the System Resource Controller,
+the lssrc command and the chssys command in the online AIX
+documentation.
+
+------------------------------
+
+Date: May 23, 1996
+Subject: Q5.2.2 -- Why can't I use AIX to get email to some sites?
+
+ When I use IBM's sendmail on an IBM RS/6000 running AIX trying to
+get to certain sites, it seems that I can get to some of them and not
+others. What's wrong?
+
+ There are two possible problems here:
+
+ 1) Your version of sendmail is not configured to recognize MX
+ records in the DNS. Search through your sendmail.cf
+ looking for "OK MX" or "OK ALL". Older configurations had
+ this line commented out, and this will cause mail from you
+ to some sites to fail (because those sites have MX
+ records, but no A records in their DNS for the specific
+ Fully Qualified Domain Name you're trying to mail to).
+
+ For more information, see the comp.unix.aix FAQ
+ <ftp://rtfm.mit.edu:/pub/usenet/news.answers/aix-faq/>.
+
+ 2) There is a negative caching bug in AIX 3.2.5 with
+ /usr/sbin/named executables that are less than 103000
+ bytes long. Ask your IBM representative to give you PMP
+ 3251, or the most recent patch that fixes this problem for
+ your particular configuration and version of the OS.
+
+------------------------------
+
+Date: July 5, 1996
+Subject: Q5.2.3 -- Why can't I get sendmail 8.7.1 to use MX records
+ with AIX 3.2.5?
+
+ IBM, in their infinite wisdom, provided a header file that would
+easily mis-compile. This resulted in the struct{} for the DNS query
+to be mis-allocated, and MX processing would barf.
+
+ Fix 1) upgrade to 8.7.5 - this has a code fix for this problem.
+
+ Fix 2) Install the BIND 4.9.4 libraries and include files and
+tweak the Makefile.AIX to use them - I *think* these Get It Right (if
+not, at least it'll die during compile rather than failing weirdly at
+runtime).
+
+ Fix 3) Hack Makefile.AIX to pass a -DBIT_ZERO_ON_LEFT to cause the
+headers to use the right #ifdefs.
+
+------------------------------
+
+Date: January 21, 1997
+Subject: Q6 -- Additional information sources
+
+ This probably isn't in strict RFC 1807 format, but I'm getting
+closer. Unfortunately, the format detailed in RFC 1807 was never
+intended to be used in this fashion, so I'm doing a bit of square-peg
+fitting into round holes.
+
+ Note that the publisher ids that I've assigned should not be
+misconstrued to imply that I have actually published all these
+documents, it's just that I need some sort of reasonable entry for the
+RFC 1807 "ID" field, and in lieu of information to the contrary
+indicating what the actual publishers have registered, I have assigned
+my own, independant, "third-party" IDs. Hopefully, the bibliographic
+entries below make it obvious who the real publishers of the various
+documents are.
+
+
+ 6.1 Reference material devoted exlusively to sendmail
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/reference/1
+ ENTRY:: March 23, 1996
+ TYPE:: Reference manual, available online in printable format
+ REVISION:: January 21, 1997; Updated URL & mailing list info
+ TITLE:: Sendmail Installation and Operation Guide
+ AUTHOR:: Allman, Eric
+ CONTACT:: Eric Allman <eric@Sendmail.ORG>
+ InReference, Inc.
+ NASA Ames Technology Commercialization Center
+ 155-A Moffett Park Drive, Suite 104
+ Sunnyvale, CA 94089
+ Phone: 1+408 541-7615
+ Fax: 1+408 734-4946
+ DATE:: November 19, 1995
+ PAGES:: 69
+ RETRIEVAL:: Contents of manual is in doc/op/op.ps of sendmail source
+ archive
+ KEYWORD:: version 8.7.5 sendmail
+ LANGUAGE:: English
+ NOTES:: {g|n}roff "me" macro format version is in doc/op/op.me
+ See: URL:http://www.sendmail.org/
+
+ABSTRACT::
+
+The documentation written by Eric Allman himself, comes with the
+sendmail distribution. The file in doc/op/op.me (nroff "me" macro
+format) may have a different number of pages depending on the type of
+device it is printed on, etc....
+
+Eric provides his free consulting in the form of continuing
+development on sendmail, and occasional posts to comp.mail.sendmail.
+Please don't be so rude as to ask him to provide further free
+consulting directly to you. If you (or your company) is willing to
+compensate his for his consulting time, he may be willing to listen.
+At the very least, you should make sure you've exhausted all other
+courses of action before resorting to adding another message to the
+thousands he gets per day.
+
+
+Check the sendmail home page at <http://www.sendmail.org/> for
+late-breaking updates and other useful information.
+
+If you want to be notified regarding future updates to sendmail and
+other items of potential interest, you may want to subscribe to the
+sendmail-announce mailing list. Address your subscription requests
+to "majordomo@lists.sendmail.org" with "subscribe sendmail-announce"
+as the body of the message.
+
+
+END:: sendmail-faq//online/reference/1
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//book/ISBN/1-56592-056-2
+ ENTRY:: March 23, 1996
+ REVISION:: January 21, 1997; Updated info re: 2nd Ed.
+ TYPE:: Reference book, hardcopy
+ TITLE:: sendmail
+ AUTHOR:: Costales, Bryan
+ AUTHOR:: Allman, Eric
+ AUTHOR:: Rickert, Neil
+ CONTACT:: Bryan Costales <bcx@BCX.COM>
+ O'Reilly & Associates, Inc.
+ 103 Morris Street, Suite A
+ Sebastapol, CA 95472
+ Order by phone: 800-998-9938 (US/Canada inquiries)
+ 800-889-8969 (US/Canada credit card orders)
+ 707-829-0515 (local/overseas)
+ DATE:: November, 1993
+ PAGES:: 792
+ COPYRIGHT:: Copyright (c) 1993 O'Reilly & Associates, Inc. All rights
+ reserved.
+ LANGUAGE:: English
+ NOTES:: See: URL:http://www.ora.com/gnn/bus/ora/item/sendmail.html
+
+ABSTRACT::
+
+The definitive reference for version 8 sendmail.
+
+At least three printings of first edition have come out, and the
+information above is for the first printing.
+
+As of yet, this book has not been updated to include versions of
+sendmail after 8.6.4.
+
+Bryan provides his consulting to the world in the form of his book,
+unless you're willing to compensate him for his services as well.
+Like Eric, you should make sure you've exhausted all other courses of
+action before you spend any of his valuable time.
+
+
+The second edition has now been published (focussing exclusively
+on version 8.8 sendmail), with an ISBN of 1-56592-222-0. It has
+been expanded to 1,050 pages long and expanded coverage of many
+new topics too numerous to name.
+
+END:: sendmail-faq//book/ISBN/1-56592-056-2
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//book/ISBN/1-55558-127-7
+ ENTRY:: March 23, 1996
+ TYPE:: Reference book, hardcopy
+ REVISION:: Sep 9, 1996; fixed typo
+ TITLE:: Sendmail: Theory and Practice
+ AUTHOR:: Avolio, Frederick M.
+ AUTHOR:: Vixie, Paul A.
+ CONTACT:: Fred Avolio <fma@al.org>, Paul Vixie <vix@al.org>
+ Digital Press
+ 225 Wildwood Avenue
+ Woburn, MA 01801, USA
+ Ordering Info: voice 1 800 366 2665
+ fax 1 800 446 6520
+ DATE:: 1994
+ PAGES:: 262
+ COPYRIGHT:: Copyright (c) by 1995 Butterworth-Heinemann
+ LANGUAGE:: English
+ NOTES:: See: URL:http://www.vix.com/vix/smtap/
+
+ABSTRACT::
+
+Centers more on IDA sendmail (at least partly because version 8 didn't
+exist when they began the book). Written more like a college
+Sophomore or Junior level textbook.
+
+While you'll probably never let the Costales book out of your grubby
+little hands (especially if you do much work with version 8 sendmail),
+this is a book you'll probably read once or maybe twice, learn some
+very valuable things, but then likely put on a shelf and not read or
+reference again (unless you have to write up a bibliographic entry for
+it). Makes a better introduction to sendmail for management types,
+especially if you don't want them getting their hands on too much
+"dangerous" technical information. Also a *lot* smaller and less
+imposing.
+
+If possible, I recommend getting both, but if you can only get one,
+get Costales unless you're going to be working exclusively with IDA
+sendmail, in which case Avolio & Vixie will probably be more useful.
+
+Note that Paul Vixie is extremely busy working on further development
+of BIND, the Internet de facto standard program for serving the DNS,
+upon which all Internet services depend, mail being only one of them.
+Like Eric and Bryan, he's also very busy. Unless you're willing to
+compensate him for his services, please let him get real work done.
+
+END:: sendmail-faq//book/ISBN/1-55558-127-7
+
+
+ 6.2 Reference material with chapters or sections on sendmail
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//book/ISBN/0-13-151051-7
+ ENTRY:: March 23, 1996
+ TYPE:: Reference book, hardcopy
+ REVISION:: May 23, 1996; Updated abstract.
+ TITLE:: Unix System Administration Handbook, Second Edition
+ AUTHOR:: Nemeth, Evi
+ AUTHOR:: Snyder, Garth
+ AUTHOR:: Seebass, Scott
+ AUTHOR:: Hein, Trent R.
+ CONTACT:: <sa-book@admin.com>
+ Prentice-Hall, Inc.
+ Upper Saddle River, New Jersey 07458
+ DATE:: January, 1995
+ PAGES:: 780
+ COPYRIGHT:: Copyright (c) 1995 by Prentice Hall PTR
+ LANGUAGE:: English
+ NOTES:: See: URL:http://www.admin.com/
+
+ABSTRACT::
+
+Still the best hands-on Unix System Administration book around.
+Covers far more than just sendmail, but the sixty-four pages (pages
+455-518 in the third printing) it does devote are very well written
+and quite useful. Also provides a version of Rob Kolstad's
+checksendmail script on the accompanying CD-ROM.
+
+Note that Eric Allman and Marshall Kirk McKusick wrote the Foreword
+for the Second Edition. This should give you at least an inkling as
+to how essential this book is, even for experienced Unix
+administrators.
+
+END:: sendmail-faq//book/ISBN/0-13-151051-7
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//book/ISBN/0-201-58629=0
+ ENTRY:: March 23, 1996
+ TYPE:: Reference book, hardcopy
+ REVISION:: March 27, 1996; Changed ID format to include ISBN,
+ moved URL to NOTES field from OTHER_ACCESS field,
+ also updated ABSTRACT
+ REVISION:: March 29, 1996; Updated ID, PAGES, COPYRIGHT, and ABSTRACT
+ TITLE:: Practical Internetworking With TCP/IP and UNIX
+ AUTHOR:: Carl-Mitchell, Smoot
+ AUTHOR:: Quarterman, John S.
+ CONTACT:: <tic@tic.com>
+ Addison Wesley Publishing Company
+ Computer Science & Engineering Division
+ One Jacob Way
+ Reading, MA 01867
+ USA
+ Orders: voice://800-822-6339 (USA)
+ fax://617-942-1117
+ DATE:: 1993
+ PAGES:: 476
+ COPYRIGHT:: Copyright (c) 1993 by Addison-Wesley Publishing
+ Company, Inc.
+ LANGUAGE:: English
+ NOTES:: See URL:http://heg-school.aw.com/cseng/authors/mitchell/
+ practical/practical.html
+
+ABSTRACT::
+
+Devotes 50 pages (most of chapter 8) to discussion of sendmail. As
+far as TCP/IP networking books go that also happen to discuss
+sendmail, it seems well-written and clear (better than I recall Hunt's
+book being), but rather dated in the face of books devoted to the
+topic and all the recent development activity in the sendmail
+community. Forget about the references, though. The newest
+sendmail-related reference listed is dated 1983, ten years before the
+date on this book and most certainly wildly out-of-date now.
+
+There are other books written on the subject of Internetworking with
+TCP/IP (most notably Comer), but this particular book seems to have a
+unique mix of theory (if perhaps a bit dated) and practical advice.
+Other books tend to have lots of one or the other, or split their
+theory and nitty-gritty details into separate books in a series (like
+Comer).
+
+Assuming that an update will be coming out soon, it probably deserves
+a place on the shelf of most System or Network Administrators, right
+next to _Internetworking with TCP/IP_ by Comer, _Managing Internet
+Information Services_ by Liu, et. al., _DNS and BIND_ by Albitz and
+Liu, _Unix System Administration_ by Nemeth, et. al., and last, but
+certainly not least, _sendmail_ by Costales. However, it deserves
+this place more because of the non-sendmail related material, as
+opposed to what sendmail-related material there is.
+
+END:: sendmail-faq//book/ISBN/0-201-58629-0
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//book/ISBN/0-937175-82-X
+ ENTRY:: March 23, 1996
+ TYPE:: Reference book, hardcopy
+ REVISION:: March 27, 1996; Changed ID format to include ISBN,
+ moved URL to NOTES field from OTHER_ACCESS field
+ TITLE:: TCP/IP Network Administration
+ AUTHOR:: Hunt, Craig
+ CONTACT:: O'Reilly & Associates, Inc.
+ 103 Morris Street, Suite A
+ Sebastapol, CA 95472
+ Order by phone: 800-998-9938 (US/Canada inquiries)
+ 800-889-8969 (US/Canada credit card orders)
+ 707-829-0515 (local/overseas)
+ DATE:: August, 1992
+ PAGES:: 502
+ LANGUAGE:: English
+ NOTES:: See: URL:http://www.ora.com/gnn/bus/ora/item/tcp.html
+
+ABSTRACT::
+
+The book I learned sendmail from when there was no other book in print
+that even mentioned the name.
+
+Here primarily for historical purposes, especially with respect to the
+sending of Internet mail and the DNS. Some of the other TCP/IP
+networking stuff is relevant, but this book is getting more and more
+dated as time goes by.
+
+END:: sendmail-faq//book/ISBN/0-937175-82-X
+
+
+ 6.3 Reference material on subjects related to sendmail
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//book/ISBN/1-56592-010-4
+ ENTRY:: March 23, 1996
+ TYPE:: Reference book, hardcopy
+ REVISION:: January 21, 1997; Updated info re: 2nd Ed.
+ TITLE:: DNS and BIND
+ AUTHOR:: Albitz, Paul
+ AUTHOR:: Liu, Cricket
+ CONTACT:: O'Reilly & Associates, Inc.
+ 103 Morris Street, Suite A
+ Order by phone: 800-998-9938 (US/Canada inquiries)
+ 800-889-8969 (US/Canada credit card orders)
+ 707-829-0515 (local/overseas)
+ DATE:: October 1992
+ PAGES:: 418
+ COPYRIGHT:: Copyright (c) 1992 O'Reilly & Associates, Inc. All rights
+ reserved.
+ LANGUAGE:: English
+ NOTES:: See: URL:http://www.ora.com/gnn/bus/ora/item/dns.html
+
+ABSTRACT::
+
+As definitive as Costales is on sendmail, this book is on the subject
+of the Domain Name System (DNS) and the most common server software
+for the DNS, namely BIND.
+
+It hasn't been updated yet to reflect the massive changes that
+happened with BIND 4.9.3 (and the recent flurry of related activity in
+the DNS community), but even as old as it is, it still stands the test
+of time as the one book *every* DNS/Domain Administrator should have
+on their shelf.
+
+Since the sending of Internet mail is so very heavily dependant on the
+DNS, it obviously also belongs on the shelf of any Postmaster or
+System Administrator whose site does Internet email. And that means
+virtually every administrator of every site on the Internet.
+
+
+This book has recently been updated with a second edition, ISBN
+1-56592-236-0 and 438 pages. It includes updated discussion of
+BIND 4.9.4, as well as many other topics.
+
+END:: sendmail-faq//book/ISBN/1-56592-010-4
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//book/ISBN/0-937175-93-5
+ ENTRY:: March 23, 1996
+ TYPE:: Reference book, hardcopy
+ REVISION:: March 27, 1996; Changed ID format to include ISBN,
+ moved URL to NOTES field from OTHER_ACCESS field
+ TITLE:: Managing UUCP and Usenet
+ AUTHOR:: Todino, Grace
+ AUTHOR:: O'Reilly, Tim
+ CONTACT:: O'Reilly & Associates, Inc.
+ 103 Morris Street, Suite A
+ Order by phone: 800-998-9938 (US/Canada inquiries)
+ 800-889-8969 (US/Canada credit card orders)
+ 707-829-0515 (local/overseas)
+ DATE:: January 1992
+ PAGES:: 368
+ LANGUAGE:: English
+ NOTES:: See: URL:http://www.ora.com/gnn/bus/ora/item/muucp.html
+
+ABSTRACT::
+
+The definitive book for installing and managing UUCP.
+
+The general assumption with version 8 sendmail is that virtually no
+one uses UUCP to send email anymore, but if that assumption isn't true
+for you, then you probably need this book.
+
+END:: sendmail-faq//book/ISBN/0-937175-93-5
+
+
+ 6.4 World-wide web index/resource pages on sendmail
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/index/10
+ ENTRY:: March 23, 1996
+ TYPE:: Online sendmail index
+ REVISION:: March 27, 1996; moved URL from RETRIEVAL field to
+ OTHER_ACCESS field.
+ TITLE:: comp.mail.sendmail FAQ Support Page
+ AUTHOR:: Knowles, Brad
+ CONTACT:: Brad Knowles <brad@etext.org>
+OTHER_ACCESS:: URL:http://www.his.com/~brad/sendmail/
+ LANGUAGE:: English
+
+ABSTRACT::
+
+Support Page for this FAQ.
+
+END:: sendmail-faq//online/index/10
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/index/17
+ ENTRY:: March 25, 1996
+ TYPE:: Online sendmail index
+ REVISION:: March 27, 1996; moved URL from RETRIEVAL field to
+ OTHER_ACCESS field.
+ TITLE:: comp.mail.sendmail Most Frequently Asked Questions Support Page
+ AUTHOR:: Assman, Claus
+ CONTACT:: Claus Assmann <ca@informatik.uni-kiel.de>
+OTHER_ACCESS:: URL:http://www.informatik.uni-kiel.de/~ca/email/english.html
+ LANGUAGE:: English
+
+ABSTRACT::
+
+Most Frequently Asked Questions on comp.mail.sendmail and their
+answers. Also has some links to a few other resources.
+
+END:: sendmail-faq//online/index/17
+
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/index/11
+ ENTRY:: March 23, 1996
+ TYPE:: Online sendmail index
+ REVISION:: May 23, 1996; Updated abstract.
+ TITLE:: Henry's sendmail Page!
+ AUTHOR:: Farkas, Henry
+ CONTACT:: Henry Farkas <hfarkas@ims.advantis.com>
+OTHER_ACCESS:: URL:http://newstand.ims.advantis.com/henry/sendmail.html
+ LANGUAGE:: English
+
+ABSTRACT::
+
+Has collected a few direct pointers to a few places, although I prefer
+to either have pointers to well-known index sites and let them do the
+hard work for me or do myself the work of making my site one of those
+well-known indexes.
+
+Still, worth taking a look at.
+
+END:: sendmail-faq//online/index/11
+
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/resources/22
+ ENTRY:: November 24, 1996
+ TITLE:: IICONS Sendmail Resources
+ AUTHOR:: Caloca, Paul
+ CONTACT:: Paul Caloca <pcaloca@iicons.com>
+ COPYRIGHT:: Copyright (c) 1996 Paul Caloca. All Rights Reserved.
+OTHER_ACCESS:: URL:http://www.iicons.com/sendmail/index.html
+ LANGUAGE:: English
+
+ABSTRACT::
+
+Provides information on how to compile Sendmail and the NEWDB
+db.1.85 for Solaris 2. Also has a section on which Sun patches
+update Solaris 2 to BIND 4.9.3.
+
+Has pointers to some non-Sun/Solaris sendmail resources, especially
+including CERT Advisories related to sendmail.
+
+
+END:: sendmail-faq//online/index/22
+
+
+ 6.5 World-wide web index pages and other reference on Internet
+ email in general
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/index/12
+ ENTRY:: March 23, 1996
+ TYPE:: Online general Internet email index
+ REVISION:: March 27, 1996; moved URL from RETRIEVAL field to
+ OTHER_ACCESS field.
+ TITLE:: Internet Mail Consortium web site
+ CORP-AUTHOR:: Internet Mail Consortium
+ CONTACT:: <info@imc.org>
+OTHER_ACCESS:: URL:http://www.imc.org/
+ LANGUAGE:: English
+
+ABSTRACT::
+
+If it has to do with Internet email, you'll probably find it here or a
+link to it from here.
+
+They have or have information on email-related Usenet FAQs, RFCs,
+Internet Drafts (documents that are in the process of becoming RFCs),
+IETF Working Groups, security standards, and are running a few
+email-related mailing lists.
+
+Tends to be focussed on the standards issues.
+
+If you care about Internet email, you should make it your duty in life
+to check this site frequently.
+
+END:: sendmail-faq//online/index/12
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/index/13
+ ENTRY:: March 23, 1996
+ TYPE:: Online general Internet email index
+ REVISION:: August 20, 1996; Updated URL.
+ TITLE:: Email References
+ AUTHOR:: Wohler, Bill
+ CONTACT:: Bill Wohler <wohler@worldtalk.com>
+OTHER_ACCESS:: URL:http://www.worldtalk.com/html/msg_resources/email_ref.html
+ LANGUAGE:: English
+
+ABSTRACT::
+
+The most exhaustive index site I know of for Internet email related
+documents outside of the Internet Mail Consortium.
+
+Also has pointers to other organizations that relate to Internet
+email, such as the Electronic Messaging Association and the European
+Electronic Messaging Association.
+
+Tends to be focussed on the server and standards issues.
+
+END:: sendmail-faq//online/index/13
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/index/14
+ ENTRY:: March 23, 1996
+ TYPE:: Online general Internet email index
+ REVISION:: June 28, 1996; Added acronym for SMTPRD
+ TITLE:: SMTP Resources Directory (SMTPRD)
+ AUTHOR:: Salamon, Andras
+ AUTHOR:: Knowles, Brad
+ CONTACT:: Andras Salamon <smtprd@dns.net>
+OTHER_ACCESS:: URL:http://www.dns.net/smtprd/
+ LANGUAGE:: English
+
+ABSTRACT::
+
+Another good index site, but still very much in the early phases of
+gestation. Based very heavily on the DNS Resources Directory, also by
+Andras Salamon, at <http://www.is.co.za/dnsrd/>.
+
+A well-rounded site, for the amount of material it covers so far.
+
+END:: sendmail-faq//online/index/14
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/index/15
+ ENTRY:: March 23, 1996
+ TYPE:: Online general Internet email index
+ REVISION:: March 27, 1996; moved URL from RETRIEVAL field to
+ OTHER_ACCESS field.
+ TITLE:: E-Mail Web Resources
+ AUTHOR:: Wall, Matt
+ CONTACT:: Matt Wall <wall+@cmu.edu>
+OTHER_ACCESS:: URL:http://andrew2.andrew.cmu.edu/cyrus/email/email.html
+ LANGUAGE:: English
+
+ABSTRACT::
+
+Another good index site, tends to be more focussed on client side and
+LAN email packages. Also lists some email services, which no one else
+that I've seen appears to have taken the time to catalog.
+
+Excellent side-by-side feature comparison of various MUAs and their
+compliance with various Internet protocols.
+
+END:: sendmail-faq//online/index/15
+
+
+ 6.6 Online tutorials for sendmail
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/tutorial/9
+ ENTRY:: March 23, 1996
+ TYPE:: Online sendmail tutorial
+ REVISION:: March 27, 1996; moved URL from RETRIEVAL field to
+ OTHER_ACCESS field.
+ TITLE:: Sendmail V8: A (Smoother) Engine Powers Network Email
+ AUTHOR:: Reich, Richard
+ CONTACT:: Richard Reich <richard@reich.com>
+ DATE:: February 8, 1996
+ COPYRIGHT:: Copyright (c) 1995 The McGraw-Hill Companies, Inc.
+ All Rights Reserved.
+OTHER_ACCESS:: URL:http://www.unixworld.com/unixworld/archives/95/tutorial/
+ 008/008.txt.html
+ LANGUAGE:: English
+ NOTES:: UnixWorld Online: Tutorial: Article No. 008
+
+ABSTRACT::
+
+Good technical introduction. Some useful references. Notably does
+not reference this FAQ as a place to get more information.
+
+END:: sendmail-faq//online/article/9
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/tutorial/16
+ ENTRY:: March 23, 1996
+ TYPE:: Online sendmail tutorial
+ REVISION:: March 27, 1996; moved URL from RETRIEVAL field to
+ OTHER_ACCESS field.
+ TITLE:: Sendmail -- Care and Feeding
+ AUTHOR:: Quinton, Reg
+ CONTACT:: Reg Quinton <reggers@julian.uwo.ca>
+ Computing and Communications Services
+ The University of Western Ontario
+ London, Ontario N6A 5B7
+ Canada
+ DATE:: March 24, 1992
+OTHER_ACCESS:: URL:ftp://ftp.sterling.com/mail/sendmail/uwo-course/
+ sendmail.txt.Z
+ LANGUAGE:: English
+ NOTES:: Postscript version also available. See ftp://ftp.sterling.com/
+ mail/sendmail/uwo-course/sendmail.ps.Z
+
+ABSTRACT::
+
+Dated. Only here until I find better.
+
+END:: sendmail-faq//online/tutorial/16
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/tutorial/21
+ ENTRY:: March 27, 1996
+ TYPE:: Online sendmail tutorial
+ TITLE:: Explosion in a Punctuation Factory
+ AUTHOR:: Bryan Costales
+ CONTACT:: Becca Thomas <editor@unixworld.com>
+ DATE:: January 1994
+ COPYRIGHT:: Copyright (c) 1995 The McGraw-Hill Companies, Inc.
+ All Rights Reserved.
+OTHER_ACCESS:: URL:http://www.unixworld.com/unixworld/archives/94/tutorial/
+ 01/01.txt.html
+ LANGUAGE:: English
+
+ABSTRACT::
+
+Good introduction on how sendmail re-write rules work.
+
+END:: sendmail-faq//online/article/21
+
+
+ 6.7 Online archives of mailing lists and Usenet newsgroups,
+ relating to Internet email
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/archive/18
+ ENTRY:: March 25, 1996
+ TYPE:: Online Usenet newgroup archive
+ REVISION:: March 27, 1996; moved URL from RETRIEVAL field to
+ OTHER_ACCESS field.
+ TITLE:: DejaNews
+OTHER_ACCESS:: URL:http://www.dejanews.com
+ LANGUAGE:: English
+ NOTES:: Archives/indexes only Usenet news.
+
+ABSTRACT::
+
+The first, and still most focussed, Usenet news archive/index site.
+Others archive/index news as well as other things, but none that I've
+seen do it better.
+
+Go to "Power Search" then "Query Filter" if you wish to restrict the
+newsgroups you search on to something like just comp.mail.sendmail and
+not all newsgroups.
+
+END:: sendmail-faq//online/archive/18
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/archive/19
+ ENTRY:: March 25, 1996
+ TYPE:: Online Usenet newgroup archive
+ REVISION:: March 27, 1996; moved URL from RETRIEVAL field to
+ OTHER_ACCESS field.
+ TITLE:: AltaVista
+OTHER_ACCESS:: URL:http://www.altavista.digital.com
+ LANGUAGE:: English
+ NOTES:: Archives/indexes Usenet news and World-wide web pages.
+
+ABSTRACT::
+
+One of the leading indexes of world-wide web pages, and their
+archive/index of Usenet news is obviously secondary.
+
+END:: sendmail-faq//online/archive/19
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/archive/20
+ ENTRY:: March 25, 1996
+ TYPE:: Online Usenet newgroup archive
+ REVISION:: July 9, 1996; Additional information based on experience
+ TITLE:: InReference
+OTHER_ACCESS:: URL:http://www.reference.com
+ LANGUAGE:: English
+ NOTES:: Not officially online yet, in final stages of beta
+
+ABSTRACT::
+
+Has promise to be the best Usenet news/publicly accessible mailing
+list index/archive site in the world. We'll see how well it delivers
+on this promise. It's in the final stages of beta testing (and is now
+open to the public), and seems quite solid. I haven't yet figured out
+how to really make proper use of the underlying power I'm sure is
+there, but it looks good. Of course, you'll need to wait a little
+while as they backfill their archives before searches will turn up all
+that much information, but it already compares favourably to DejaNews.
+
+Some of the best minds I know of are working on this project, so if it
+can be done, I figure they can do it.
+
+END:: sendmail-faq//online/archive/20
+
+ BIB-VERSION:: CS-TR-v2.1
+ ID:: sendmail-faq//online/archive/21
+ ENTRY:: May 24, 1996
+ TYPE:: Online archive of spam/junkmail
+ TITLE:: list-managers spam discussion archives
+ AUTHOR:: Gilman, Al
+ CONTACT:: Al Gilman <asgilman@access.digex.net>
+OTHER_ACCESS:: URL:http://www.access.digex.net/~asgilman/spam/
+OTHER_ACCESS:: URL:ftp://www.access.digex.net/~asgilman/spam/
+ LANGUAGE:: English
+
+ABSTRACT::
+
+These collections of past mail from the list-managers discussion list
+can be retrieved by ftp or HTTP.
+
+For anonymous ftp, open ftp.digex.net and cd to
+/pub/access/asgilman/spam.
+
+For http, G)o to http://www.access.digex.net/~asgilman/spam/ In this
+directory you will find, _inter alia_, two files which are mail
+folders:
+
+ spam -- collects examples of spams
+ spam-NOT -- collects discussion of spam countermeasures
+
+END:: sendmail-faq//online/archive/21
+
+------------------------------
+
+Date: July 9, 1996
+Subject: Q7 -- THANKS!
+
+
+Special thanks to:
+
+ Eric Allman The core of the material here comes from
+ his FAQ for version 8.6.9 sendmail. I
+ couldn't even have gotten started were it
+ not for him. And if he hadn't written
+ sendmail, there obviously wouldn't even
+ be a FAQ. Heck, there might not even be an
+ Internet.
+
+ Paul Southworth Provides FAQ posting services, useful
+ comments on various sections, and the
+ mailclient-faq. I couldn't have kept
+ doing this were it not for his help.
+
+ Ed Ravin Virtually all the material regarding the
+ use of sendmail on AIX is his, and most
+ of it has been carried over verbatim.
+
+Thanks also to:
+
+ Neil Hoggarth, Andras Salamon, Johan Svensson, Christopher X.
+ Candreva, Bill Wohler, Matthew Wall, Henry W. Farkas, Claus
+ Assmann, Curt Sampson, Rebecca Lasher, Jim Davis, David Keegel,
+ Betty Lee, Alain Durand, Walter Schweizer, Christophe Wolfhugel,
+ Al Gilman, Valdis Kletnieks, John Gardiner Myers, Paul DuBois,
+ Adam Bentley, Dave Sill, Dave Wreski, Paul Caloca, Eamonn
+ Coleman, Michael Fuhr, Betty Lee, Derrell Lipman, and the
+ readers and posters of comp.mail.sendmail.
+
+------------------------------
+
+Comments/updates should be sent to <sendmail-faq@etext.org>.
+
+Copyright 1996, by Brad Knowles, all rights reserved
+
+End of comp.mail.sendmail Frequently Asked Questions (FAQ), part 2 of 2
+***********************************************************************
diff --git a/debian/patch.collect b/debian/patch.collect
new file mode 100644
index 0000000..6aad2fd
--- /dev/null
+++ b/debian/patch.collect
@@ -0,0 +1,25 @@
+*** collect.c.orig Wed May 20 02:36:05 1998
+--- collect.c Thu May 28 13:29:09 1998
+***************
+*** 353,360 ****
+ if (*--bp != '\n' || *--bp != '\r')
+ bp++;
+ *bp = '\0';
+! if (bitset(H_EOH, chompheader(buf, FALSE, hdrp, e)))
+! mstate = MS_BODY;
+ break;
+
+ case MS_BODY:
+--- 353,364 ----
+ if (*--bp != '\n' || *--bp != '\r')
+ bp++;
+ *bp = '\0';
+! if (bitset(H_EOH, chompheader(buf, FALSE, hdrp, e))) {
+! mstate = MS_BODY;
+! if (tTd(30, 35))
+! printf("H_EOH, istate=%d, mstate=%d\n", istate, mstate);
+! goto nextstate;
+! }
+ break;
+
+ case MS_BODY:
diff --git a/debian/postinst b/debian/postinst
new file mode 100644
index 0000000..6c4ecbc
--- /dev/null
+++ b/debian/postinst
@@ -0,0 +1,144 @@
+#!/bin/sh -e
+#
+# Debian package postinst
+# Version 1.2
+#
+# Robert Leslie <rob@mars.org>
+
+case "$1" in
+ configure)
+ # continue below
+ ;;
+
+ abort-upgrade|abort-remove|abort-deconfigure)
+ exit 0
+ ;;
+
+ *)
+ echo "postinst called with unknown argument \`$1'" >&2
+ exit 0
+ ;;
+esac
+
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+
+if [ ! -d /etc/mail ]
+then
+ mkdir /etc/mail
+ chown 0.0 /etc/mail
+ chmod 755 /etc/mail
+fi
+
+if [ ! -d /var/spool/mqueue ]
+then
+ mkdir /var/spool/mqueue
+ chown 0.0 /var/spool/mqueue
+ chmod 700 /var/spool/mqueue
+fi
+
+if [ ! -f /var/log/sendmail.st ]
+then
+ touch /var/log/sendmail.st
+ chown 0.0 /var/log/sendmail.st
+ chmod 644 /var/log/sendmail.st
+fi
+
+update-rc.d sendmail defaults >/dev/null
+update-inetd --disable smtp
+
+# Move old configuration files to their new home
+
+if [ -f /etc/sendmail.cf -a \
+ ! -L /etc/sendmail.cf -a \
+ ! -f /etc/mail/sendmail.cf ]
+then
+ echo "This version of the Debian sendmail package keeps its configuration"
+ echo "files under /etc/mail. You already have some sendmail configuration"
+ echo -n "files in /etc; would you like to move them to /etc/mail? [Y] "
+ read yn
+ test -n "$yn" || yn="Y"
+
+ case "$yn" in
+ [Yy]*)
+ echo "Moving /etc/sendmail.* to /etc/mail ..."
+ mv -f /etc/sendmail.* /etc/mail/.
+
+ test ! -f /etc/mail/sendmail.cf || \
+ mv -f /etc/mail/sendmail.cf /etc/mail/sendmail.cf.old
+ ;;
+
+ *)
+ echo "Okay, leaving them where they are; they won't be used."
+ ;;
+ esac
+fi
+
+# Make sure /etc/sendmail.cf points to /etc/mail/sendmail.cf
+
+if [ -e /etc/sendmail.cf ]
+then
+ if [ -L /etc/sendmail.cf ]
+ then
+ rm -f /etc/sendmail.cf
+ else
+ echo "Saving old /etc/sendmail.cf as /etc/sendmail.cf.old ..."
+ mv -f /etc/sendmail.cf /etc/sendmail.cf.old
+ fi
+fi
+
+ln -sf mail/sendmail.cf /etc/sendmail.cf
+
+# Check existing /etc/mail/sendmail.cf
+
+if [ -f /etc/mail/sendmail.cf ]
+then
+ if (sed -n -e "/^DZ/s/^DZ//p" /etc/mail/sendmail.cf \
+ | grep 8.8.8 > /dev/null)
+ then
+ echo "Existing /etc/mail/sendmail.cf found, and it appears it may be"
+ echo -n "compatible with this version of sendmail. Use it? [Y] "
+ read yn
+ test -n "$yn" || yn="Y"
+ else
+ echo "Existing /etc/mail/sendmail.cf found, but it was made for"
+ echo -n "an older version of sendmail. Use it anyway? [N] "
+ read yn
+ test -n "$yn" || yn="N"
+ fi
+
+ case "$yn" in
+ [Yy]*)
+ ;;
+
+ *)
+ echo "Saving old /etc/mail/sendmail.cf" \
+ "as /etc/mail/sendmail.cf.old ..."
+ mv -f /etc/mail/sendmail.cf /etc/mail/sendmail.cf.old
+ ;;
+ esac
+fi
+
+test -f /etc/mail/sendmail.cf || sendmailconfig --no-reload
+
+# Start server
+
+echo -n "Start sendmail now? [Y] "
+read yn
+test -n "$yn" || yn="Y"
+
+case "$yn" in
+ [Nn]*)
+ echo "Not started; to start later, do: /etc/init.d/sendmail start"
+ echo -n "Press [ENTER] "
+ read line
+ ;;
+
+ *)
+ /etc/init.d/sendmail start
+ ;;
+esac
diff --git a/debian/postinst.debhelper b/debian/postinst.debhelper
new file mode 100644
index 0000000..f0e9469
--- /dev/null
+++ b/debian/postinst.debhelper
@@ -0,0 +1,72 @@
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidregister ]; then
+ suidregister -s sendmail /usr/sbin/sendmail root root 4755
+else
+ chown root.root /usr/sbin/sendmail
+ chmod 4755 /usr/sbin/sendmail
+fi
+# End automatically added section
diff --git a/debian/postrm b/debian/postrm
new file mode 100644
index 0000000..2ebac2e
--- /dev/null
+++ b/debian/postrm
@@ -0,0 +1,33 @@
+#!/bin/sh -e
+#
+# Debian package postrm
+# Version 1.2
+#
+# Robert Leslie <rob@mars.org>
+
+case "$1" in
+ remove)
+ ;;
+
+ upgrade)
+ ;;
+
+ purge)
+ rm -rf /var/spool/mqueue
+ rm -f /etc/sendmail.cf /etc/aliases.{db,dir,pag}
+ rm -f /etc/mail/sendmail.{cf,cw,ct,mc}{,.old}
+ rmdir /etc/mail 2>/dev/null || true
+ update-rc.d sendmail remove >/dev/null
+ if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+ fi
+ ;;
+
+ failed-upgrade|abort-install|abort-upgrade|disappear)
+ ;;
+
+ *)
+ echo "postrm called with unknown argument \`$1'" >&2
+ exit 0
+ ;;
+esac
diff --git a/debian/postrm.debhelper b/debian/postrm.debhelper
new file mode 100644
index 0000000..fb8bdab
--- /dev/null
+++ b/debian/postrm.debhelper
@@ -0,0 +1,45 @@
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+fi
+# End automatically added section
+# Automatically added by dh_suidregister
+if [ -e /etc/suid.conf -a -x /usr/sbin/suidunregister ]; then
+ suidunregister -s sendmail /usr/sbin/sendmail
+fi
+# End automatically added section
diff --git a/debian/preinst b/debian/preinst
new file mode 100644
index 0000000..0a2830d
--- /dev/null
+++ b/debian/preinst
@@ -0,0 +1,25 @@
+#!/bin/sh -e
+#
+# Debian package preinst
+# Version 1.2
+#
+# Robert Leslie <rob@mars.org>
+
+case "$1" in
+ install)
+ ;;
+
+ upgrade)
+ start-stop-daemon --stop --quiet --oknodo \
+ --pidfile /var/run/sendmail.pid \
+ --exec /usr/sbin/sendmail 2>/dev/null || true
+ ;;
+
+ abort-upgrade)
+ ;;
+
+ *)
+ echo "preinst called with unknown argument \`$1'" >&2
+ exit 0
+ ;;
+esac
diff --git a/debian/prerm b/debian/prerm
new file mode 100644
index 0000000..6fa8b78
--- /dev/null
+++ b/debian/prerm
@@ -0,0 +1,20 @@
+#!/bin/sh -e
+#
+# Debian package prerm
+# Version 1.2
+#
+# Robert Leslie <rob@mars.org>
+
+case "$1" in
+ remove|upgrade|deconfigure)
+ /etc/init.d/sendmail stop
+ ;;
+
+ failed-upgrade)
+ ;;
+
+ *)
+ echo "prerm called with unknown argument \`$1'" >&2
+ exit 0
+ ;;
+esac
diff --git a/debian/rbl.m4 b/debian/rbl.m4
new file mode 100644
index 0000000..0b740b0
--- /dev/null
+++ b/debian/rbl.m4
@@ -0,0 +1,14 @@
+divert(0)
+VERSIONID(`@(#)rbl.m4 1.2 (RBL) 11/18/97')
+
+LOCAL_RULESETS
+#
+# Deny spammers during MAIL command if the IP address of the incoming
+# connection is in the RBL map (http://maps.vix.com/rbl/)
+#
+Scheck_mail
+R$* $: $(dequote "" $&{client_addr} $)
+R0 $@ OK
+R$-.$-.$-.$- $: $(host $4.$3.$2.$1.rbl.maps.vix.com. $: OK $)
+ROK $@ OK
+R$+ $#error $@ 5.7.1 $: " Mail from " $(dequote "" $&{client_addr}$) " refused, see http://maps.vix.com/rbl/"
diff --git a/debian/rblspam.m4 b/debian/rblspam.m4
new file mode 100644
index 0000000..48d6c29
--- /dev/null
+++ b/debian/rblspam.m4
@@ -0,0 +1,66 @@
+divert(-1)
+# This is a variation on the tradinal RBL filters that dumps email to
+# a separate user rather than bouncing it back. It is recommended that
+# a user spam be created to recieve the mail.
+
+# This works as discussed in the web page http://maps.vix.com/
+
+# The two ways to use the MAPS RBL are: transfer and inquiry. In
+# inquiry mode you start by knowing the IPv4 dotted quad address of
+# some host or mail relay, and you use some network protoco l to ask
+# MAPS whether that host is listed in the RBL. If the host is so
+# listed, you can choose a next step which is appropriate to your site
+# security policy. At our site we reject all mail from hosts listed in
+# the MAPS RB L, and some of our hosts also route all traffic destined
+# for such hosts to a local black hole .
+
+# The rules below direct all such mail to a designated spam
+# user. Please note that this means the mail is not rejected, and the
+# spammer has no incentive to stop; the default configuration rejects
+# the mail with an error; and this not totally in line with the intent
+# of the Mail Abuse Prevention System's Realtime Blackhole List. The
+# are trying to make sure the spammers are delibrately
+# disconnected. For this reason, I have provided a means of rejecting
+# the message (by uncommenting a line) just like the original
+# configuration does.
+
+# Please use this hack after due consideration, this is not for every
+# one.
+
+
+# The simplest way to get started using the MAPS RBL to protect your
+# mail relay ag ainst theft of service by spammers is to arrange for
+# it to make a DNS query (of a stylized name) whenever you receive an
+# incoming mail message from a host whose spam status you do not
+# know. In Sendmail (version 8.8 or later), this is done using
+# configuration rules like these:
+
+
+divert(0)
+VERSIONID(`@(#)my_rbl.m4 1.2 (Manoj Srivastava) 1998-02-05')
+PUSHDIVERT(6)
+# Login of the user selected to recieve all spam
+D{SpamUser} ifelse(_ARG_, `', `spam', `_ARG_')
+POPDIVERT
+
+
+divert(2)
+LOCAL_RULESETS
+
+S98
+# Try and ensure that the sender is not blacklisted
+R$* $: $1 $| $(dequote "" $&{client_addr} $)
+R$* $| $1 # no match, restore
+
+# check with upstream site
+R$* $| $-.$-.$-.$- $: $1 $| $(host $5.$4.$3.$2.rbl.maps.vix.com. $: OK $)
+
+# handle results of lookup
+R$* $| OK $1 # no match, restore
+R$* $| $1 # no match, restore
+
+# Comment this line, and un comment the next to actually reject the message
+R$* $| $+ ${SpamUser} < @ $j . > # save to spam user
+#R$* $| $+ $#error $@ 5.7.1 $: " Mail from " $(dequote "" $&{client_addr} $) " refused, see http://maps.vix.com/rbl/"
+
+divert(0)
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..c5eecb3
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,258 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Debianrules for building a Debian package
+# Version 1.5
+#
+# These rules have been specifically designed NOT to require root to
+# run them. At any time root privileges are required, the command to be
+# executed will be made obvious and root's password will be prompted for.
+# Of course, root may still run this and no password will be required.
+#
+# Robert Leslie <rob@mars.org>
+
+package=sendmail
+version=$(shell expr `pwd` : '.*-\([0-9.].*\)')
+version_main=$(shell expr `pwd` : '.*-\([0-9]*.[0-9.]*\)')
+
+LIBS = -ldb -lresolv -lnsl -lwrap
+DBMDEF = -DNEWDB -DNIS
+ENVDEF = -DHASFLOCK=1 -DTCPWRAPPERS=1 -include $(shell pwd)/debian/el33t.h \
+ -I/usr/include/db
+
+CC=cc
+GCC = $(CC) $(HACK)
+OFLAGS = -O2
+SHELL=/bin/bash
+
+
+.SILENT: rmail/rmail
+
+rmail/rmail:
+ cd rmail && $(GCC) $(OFLAGS) rmail.c -o rmail
+
+
+
+.PHONY: man bin
+
+build:
+ $(checkdir)
+# -ln -sf /usr/include/gdbm-ndbm.h src/ndbm.h
+ cd src && ./makesendmail sendmail \
+ CC="$(GCC)" O="$(OFLAGS)" DBMDEF="$(DBMDEF)" \
+ ENVDEF="$(ENVDEF)" INCDIRS="$(INCDIRS)" \
+ LIBS="$(LIBS)" LIBDIRS=""
+ $(MAKE) -C mailstats -f Makefile.dist mailstats \
+ CC="$(GCC)" O="$(OFLAGS)" \
+ INCDIRS="-I../src" LIBDIRS=""
+ $(MAKE) -C makemap -f Makefile.dist makemap \
+ CC="$(GCC)" O="$(OFLAGS)" \
+ INCDIRS="-I../src -I/usr/include/db" \
+ LIBDIRS="" LIBS="$(LIBS)" DBMDEF="$(DBMDEF)"
+ $(MAKE) -C praliases -f Makefile.dist praliases \
+ CC="$(GCC)" O="$(OFLAGS)" \
+ INCDIRS="-I../src -I/usr/include/db" \
+ LIBDIRS="" LIBS="$(LIBS)"
+# -$(MAKE) -C mail.local -f Makefile.dist mail.local \
+# CC="$(GCC)" O="$(OFLAGS)" INCDIRS="-I../src" \
+# LIBDIRS="" LIBS="" ENVDEF="-DBSD4_4"
+ $(MAKE) -C smrsh -f Makefile.dist smrsh \
+ CC="$(GCC)" O="$(OFLAGS)" \
+ ENVDEF="-DCMDDIR=\\\"/usr/lib/sm.bin\\\" \
+ -DPATH=\\\"/usr/bin:/bin\\\"" \
+ INCDIRS="-I../src" LIBDIRS=""
+ $(MAKE) -f debian/rules rmail/rmail
+ cd doc && { \
+ for doc in changes/changes intro/intro op/op usenix/usenix; \
+ do test -f $$doc.txt || \
+ nroff -me $$doc.me | cat -s > $$doc.txt; done; \
+ }
+ test -f debian/part1 && test -f debian/part2
+ cd debian && gcc -o sensible-mda sensible-mda.c
+ touch build
+
+
+l33ch:
+ cd debian && \
+ wget ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/sendmail-faq/part1
+ cd debian && \
+ wget ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/sendmail-faq/part2
+
+
+man:
+ cp -p debian/runq.1 debian/tmp/usr/man/man1
+ cp -p debian/sendmailconfig.8 debian/tmp/usr/man/man8
+ cp -p debian/sensible-mda.8 debian/tmp/usr/man/man8
+ for file in src/*.[158] mailstats/*.8 makemap/*.8 \
+ praliases/*.8 smrsh/*.8 rmail/*.8; do \
+ base=$$(basename $$file); \
+ ext=$$(echo $$file | sed -e "s/.*\(.\)$$/\1/"); \
+ sed -e "s#/usr/adm/sm.bin#/usr/lib/sm.bin#g" \
+ -e "s#/etc/sendmail.hf#/usr/lib/sendmail.hf#g" \
+ -e "s#/bin:/usr/bin:/usr/ucb#/usr/bin:/bin#g" \
+ -e "s#/etc/rc#/etc/init.d/sendmail#g" $$file \
+ > debian/tmp/usr/man/man$$ext/$$base; \
+ done
+ install -m 644 contrib/etrn.pl debian/tmp/usr/man/man8/etrn.8
+ install -m 644 contrib/expn.pl debian/tmp/usr/man/man8/expn.8
+ cp -p checksendmail/address.resolve debian/tmp/usr/doc/$(package)
+ cp -p checksendmail/checksendmail.8 debian/tmp/usr/man/man8
+
+
+bin:
+ install rmail/rmail debian/tmp/usr/bin
+ cd src && ./makesendmail install-sendmail \
+ DESTDIR="$$(pwd)/../debian/tmp" BINGRP="root"
+ STDIR="$$(pwd)/../debian/tmp/var/log"
+# cd debian/tmp && mv etc/sendmail.hf usr/lib
+ rm -f debian/tmp/etc/sendmail.st
+ $(MAKE) -s -C mailstats -f Makefile.dist install-mailstats \
+ DESTDIR="../debian/tmp"
+ $(MAKE) -s -C makemap -f Makefile.dist install-makemap \
+ DESTDIR="../debian/tmp"
+ $(MAKE) -s -C praliases -f Makefile.dist install-praliases \
+ DESTDIR="../debian/tmp"
+ $(MAKE) -s -C smrsh -f Makefile.dist install-smrsh \
+ BINDIR="../debian/tmp/usr/sbin"
+# -$(MAKE) -s -C mail.local -f Makefile.dist install-mail.local \
+# BINDIR="../debian/tmp/usr/sbin"
+ strip --strip-debug debian/tmp/usr/{bin,sbin}/*
+ install debian/sendmailconfig debian/sensible-mda debian/tmp/usr/sbin
+ install debian/runq debian/tmp/usr/bin
+ sed "s?/usr/local/bin/perl?/usr/bin/perl?g" contrib/etrn.pl \
+ > debian/tmp/usr/sbin/etrn
+ sed "s?/usr/local/bin/perl?/usr/bin/perl?g" contrib/expn.pl \
+ > debian/tmp/usr/bin/expn
+ chmod 755 debian/tmp/usr/sbin/etrn debian/tmp/usr/bin/expn
+ install checksendmail/checksendmail.perl debian/tmp/usr/sbin/checksendmail
+ for file in debian/tmp/usr/bin/{hoststat,mailq,newaliases,purgestat} \
+ debian/tmp/usr/lib/sendmail; do \
+ rm -f $$file && ln -s ../sbin/sendmail $$file; \
+ done
+
+
+
+hacks:
+ cd debian && uudecode check.tar.uue
+ cd debian/tmp/usr/doc/$(package) && tar -xf ../../../../check.tar
+ cd debian/tmp/usr/doc/$(package)/hack; \
+ for file in *; do \
+ sed "s/dbm /hash /g" < $$file \
+ > ../../../lib/sendmail.cf/hack/$$file; \
+ done
+ sed "s/dbm /hash /g" debian/tmp/usr/doc/$(package)/README.check \
+ > debian/tmp/usr/doc/$(package)/README.Spam
+ rm debian/tmp/usr/doc/$(package)/README.check
+ rm -r debian/tmp/usr/doc/$(package)/hack/
+ cp -p debian/{rbl*,nodns}.m4 debian/tmp/usr/lib/sendmail.cf/hack
+
+
+binary-indep: checkroot
+ $(checkdir)
+
+binary-arch: checkroot build
+ $(checkdir)
+ rm -rf debian/tmp && install -d debian/tmp
+ cd debian/tmp && install -d $$(cat ../dirs)
+ cp debian/{conffiles,control} debian/tmp/DEBIAN
+ install debian/{pre*,post*} debian/tmp/DEBIAN
+
+ $(MAKE) -f debian/rules man
+ cp -p doc/*/{*.ps,*.txt} debian/tmp/usr/doc/$(package)
+ cp -p RELEASE_NOTES debian/tmp/usr/doc/$(package)/changelog
+# cp -p debian/changelog \
+# debian/tmp/usr/doc/$(package)/changelog.Debian
+ cp -p cf/README debian/tmp/usr/doc/$(package)/cf.README
+ cp -p debian/part1 debian/tmp/usr/doc/$(package)/FAQ-1.txt
+ cp -p debian/part2 debian/tmp/usr/doc/$(package)/FAQ-2.txt
+ find debian/tmp/usr/doc/$(package) debian/tmp/usr/man \
+ -type f -exec gzip -v9 {} ";"
+ cd debian/tmp/usr/man/man8 && \
+ ln -s sendmail.8.gz ./purgestat.8.gz && \
+ ln -s sendmail.8.gz ./hoststat.8.gz
+ cp -p debian/{README*,copyright} contrib/passwd-to-alias.pl \
+ KNOWNBUGS debian/tmp/usr/doc/$(package)
+ chmod a-x debian/tmp/usr/doc/$(package)/passwd-to-alias.pl
+ cp debian/debproto.mc debian/tmp/usr/lib/sendmail.cf/cf
+ cp -p debian/debian.m4 cf/ostype/* \
+ debian/tmp/usr/lib/sendmail.cf/ostype
+ cp -p cf/domain/* debian/tmp/usr/lib/sendmail.cf/domain
+ cp -a cf/{feature,m4,mailer,sh} debian/tmp/usr/lib/sendmail.cf
+
+ $(MAKE) -f debian/rules bin
+ $(MAKE) -f debian/rules hacks
+ install debian/init.d debian/tmp/etc/init.d/$(package)
+ #install -m 755 debian/ip-up.d debian/tmp/etc/ppp/ip-up.d/$(package)
+ #install -m 755 debian/ip-down.d debian/tmp/etc/ppp/ip-down.d/$(package)
+ cp -p debian/{aliases,nssnodns.conf} debian/tmp/etc
+
+ chmod -R u=rwX,go=rX debian/tmp
+ chown -R root.root debian/tmp
+ chmod 4755 debian/tmp/usr/sbin/sendmail
+ chmod 700 debian/tmp/var/state/sendmail
+ $(MAKE) -s -f debian/rules buildinfo
+
+# dh_installdocs
+# dh_installexamples
+# dh_installmenu
+# dh_installcron
+# dh_installmanpages
+ dh_installchangelogs
+# dh_movefiles
+ dh_strip
+# dh_compress
+ dh_fixperms
+ dh_suidregister
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+# dh_makeshlibs
+ dh_md5sums
+ dh_builddeb
+
+
+clean:
+ $(checkdir)
+ rm -f build
+ test ! -d debian/tmp || rm -rf debian/tmp
+ $(MAKE) -C smrsh -f Makefile.dist clean
+ $(MAKE) -C praliases -f Makefile.dist clean
+ $(MAKE) -C makemap -f Makefile.dist clean
+ $(MAKE) -C mailstats -f Makefile.dist clean
+ $(MAKE) -C mail.local -f Makefile.dist clean
+ rm -f doc/{changes/changes,intro/intro,op/op,usenix/usenix}.txt
+ rm -rf rmail/rmail stamp-build $$(find . -name "*~") src/obj.*
+ rm -rf $$(find debian/* -type d) $$(find src makemap -type l)
+ rm -rf debian/{files*,*substvars*} debian/{check.tar,sensible-mda}
+ find .. -name $(package)*.asc -size 0 -maxdepth 1 -exec rm {} ";"
+ chmod +x debian/{pre*,post*,runq,sendmailconfig}
+
+
+buildinfo:
+ @echo; dpkg -l gcc "libc6*" binutils ldso make dpkg-dev $(BUILDINFO) \
+ | awk '$$1 == "ii" { printf("%s-%s\n", $$2, $$3) }' \
+ | tee debian/tmp/usr/doc/$(package)/buildinfo.Debian; echo
+ chmod 644 debian/tmp/usr/doc/$(package)/buildinfo.Debian
+# cd debian/tmp && md5sum $$(find * -type f -not -regex "DEBIAN/.*") \
+# > DEBIAN/md5sums
+# rm -f debian/tmp/files.sig
+# -cd debian/tmp && pgp -sat +clearsig=on DEBIAN/md5sums -o files.sig \
+# && chmod 644 files.sig \
+# && mv -v files.sig usr/doc/$(package)/checksums.txt
+
+
+define checkdir
+ test -f debian/rules
+endef
+
+# Below here is fairly generic really
+
+binary: binary-indep binary-arch
+
+source diff:
+ @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+checkroot:
+ $(checkdir)
+ test root = "`whoami`"
+
+.PHONY: binary binary-arch binary-indep clean checkroot
diff --git a/debian/runq b/debian/runq
new file mode 100644
index 0000000..b68b35a
--- /dev/null
+++ b/debian/runq
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+usage="Usage: $0 [OPTION]...
+Run the sendmail queue (sendmail -q)
+
+ --help display this help and exit
+ --version output version information and exit
+
+Report bugs to submit@bugs.debian.org"
+
+case $# in
+ 1 )
+ case "z${1}" in
+ z--help )
+ echo "$usage"; exit 0 ;;
+ z--version )
+ echo -n "runq (Debian GNU/Linux) 1.00. ";
+ echo "Copyright (c) 1997 Johnie Ingram. >= GNU GPL 2."
+ exit 0 ;;
+ * ) ;;
+ esac
+ ;;
+ * ) ;;
+esac
+
+exec /usr/sbin/sendmail -q $*
diff --git a/debian/runq.1 b/debian/runq.1
new file mode 100644
index 0000000..99f97a9
--- /dev/null
+++ b/debian/runq.1
@@ -0,0 +1,31 @@
+.TH TRUE 1 "1997 July 20" "Debian Distribution" \" -*- nroff -*-
+.SH NAME
+runq \- run the sendmail queue
+.SH SYNOPSIS
+.B runq
+.br
+.B runq
+.I sendmail options
+.br
+.B runq
+{ \-\-help, \-\-version }
+.SH DESCRIPTION
+This
+.B runq
+command is a wrapper around sendmail which tells it to run the mail
+queue in the background.
+.SH OPTIONS
+When called with exactly one argument, the following options are
+handled internally:
+.TP
+.I "\-\-help"
+Print a usage message on standard output and exit successfully.
+.TP
+.I "\-\-version"
+Print version information on standard output then exit successfully.
+.P
+In other cases, the options are simply passed on to
+.B sendmail -q.
+.SH "SEE ALSO"
+.LP
+.BR sendmail (8).
diff --git a/debian/sendmail-8.8.5-tcpwrap b/debian/sendmail-8.8.5-tcpwrap
new file mode 100644
index 0000000..1cf0971
--- /dev/null
+++ b/debian/sendmail-8.8.5-tcpwrap
@@ -0,0 +1,82 @@
+
+ PREVENT UNAUTHORIZED USE OF YOUR HOSTS AS SMTP RELAY
+
+ Miquel van Smoorenburg <miquels@cistron.nl> 14-Jun-1996
+
+The patch at the end of this file adds a new option to sendmail,
+`W' or `TcpWrappers'. This makes it possible for precompiled distributions
+to ship binaries compiled with -DTCPWRAPPERS without any unexpected
+side-effects, since the option is off by default.
+
+Here's the diff to the sendmail-8.8.5 source:
+
+diff -ru sendmail-8.8.5.orig/src/conf.c sendmail-8.8.5/src/conf.c
+--- sendmail-8.8.5.orig/src/conf.c Tue Jan 21 16:47:13 1997
++++ sendmail-8.8.5/src/conf.c Tue Jun 3 14:26:44 1997
+@@ -4026,7 +4029,8 @@
+ return FALSE;
+
+ #if TCPWRAPPERS
+- if (!hosts_ctl("sendmail", hostname, anynet_ntoa(sap), STRING_UNKNOWN))
++ if (TcpWrappers &&
++ !hosts_ctl("sendmail", hostname, anynet_ntoa(sap), STRING_UNKNOWN))
+ {
+ # ifdef LOG
+ if (LogLevel >= 4)
+diff -ru sendmail-8.8.5.orig/src/readcf.c sendmail-8.8.5/src/readcf.c
+--- sendmail-8.8.5.orig/src/readcf.c Wed Jan 15 02:51:29 1997
++++ sendmail-8.8.5/src/readcf.c Tue Jun 3 15:19:48 1997
+@@ -1424,6 +1424,9 @@
+ { "FallbackMXhost", 'V', FALSE },
+ { "Verbose", 'v', TRUE },
+ { "TryNullMXList", 'w', FALSE },
++#ifdef TCPWRAPPERS
++ { "TcpWrappers", 'W', TRUE },
++#endif
+ { "QueueLA", 'x', FALSE },
+ { "RefuseLA", 'X', FALSE },
+ { "RecipientFactor", 'y', FALSE },
+@@ -2069,6 +2072,11 @@
+ break;
+
+ /* 'W' available -- was wizard password */
++#ifdef TCPWRAPPERS
++ case 'W':
++ TcpWrappers = atobool(val);
++ break;
++#endif
+
+ case 'x': /* load avg at which to auto-queue msgs */
+ QueueLA = atoi(val);
+diff -ru sendmail-8.8.5.orig/src/sendmail.8 sendmail-8.8.5/src/sendmail.8
+--- sendmail-8.8.5.orig/src/sendmail.8 Fri Jan 17 00:25:50 1997
++++ sendmail-8.8.5/src/sendmail.8 Tue Jun 3 15:03:28 1997
+@@ -432,6 +432,15 @@
+ This may not be available if your sendmail does not have the
+ .Dv USERDB
+ option compiled in.
++.It Li TcpWrappers
++Use the
++.Dv sendmail
++entry in
++.Pa /etc/hosts.allow
++to decide if the remote host has access to the SMTP port.
++This may not be available if your sendmail does not have the
++.Dv TCPWRAPPERS
++option compiled in.
+ .It Li ForkEachJob
+ Fork each job during queue runs.
+ May be convenient on memory-poor machines.
+diff -ru sendmail-8.8.5.orig/src/sendmail.h sendmail-8.8.5/src/sendmail.h
+--- sendmail-8.8.5.orig/src/sendmail.h Wed Jan 15 02:51:29 1997
++++ sendmail-8.8.5/src/sendmail.h Tue Jun 3 14:25:43 1997
+@@ -1168,6 +1168,9 @@
+ #ifdef _FFR_DSN_RRT
+ EXTERN bool RrtImpliesDsn; /* turn Return-Receipt-To: into DSN */
+ #endif
++#ifdef TCPWRAPPERS
++EXTERN bool TcpWrappers; /* Use tcp wrappers for access control. */
++#endif
+ EXTERN bool IgnoreHostStatus; /* ignore long term host status files */
+ EXTERN bool SingleThreadDelivery; /* single thread hosts on delivery */
+ EXTERN bool UnsafeGroupWrites; /* group-writable files are unsafe */
diff --git a/debian/sendmail-8.8.8-ismx-4 b/debian/sendmail-8.8.8-ismx-4
new file mode 100644
index 0000000..7185096
--- /dev/null
+++ b/debian/sendmail-8.8.8-ismx-4
@@ -0,0 +1,161 @@
+
+ PREVENT UNAUTHORIZED USE OF YOUR HOSTS AS SMTP RELAY
+
+ Miquel van Smoorenburg <miquels@cistron.nl> 03-Mar-1998
+
+This patch adds a new map type to sendmail-8.8.8, called "ismx". That
+maps checks if we (all names in class 'w') are an MX for a certain domain.
+If so, the input hostname is replaced by our hostname, or TEMPFAIL if the DNS
+lookup failed.
+
+This can be used together with the "check_rcpt" rule to deny relaying for
+domains for which we are officially not an MX, without listing all domains
+in a configuration file. This prevents that your host is being used as
+a spam relay. However your host will still relay for hosts that it is
+officially an MX for, without any extra administration.
+
+Ofcourse you can put a list of IP numbers/networks in the file "LocalIP"
+to list hosts that may use your host as relay or smarthost. This is
+useful for a machine that is used internally as SMTP relay, for e.g.
+Eudora or Pegasus mail clients. The fields in this file are used with
+a substring match; for example 192.168 will match 192.168.0.0/16,
+192.168.1 will match 192.168.1.0/24 and 192.168.1.2 will only match
+that specific IP address. One entry per line.
+
+If you want to add some more hosts/domains you relay for but which
+do not have an MX entry pointing at your server, or which are not
+in class `w', you can put them in the file "RelayTo".
+
+Both files (LocalIP and RelayTo) must exist, even if they are otherwise
+empty. Comments (using `#') are allowed.
+
+
+These are the sendmail rules, with thanks to Niels Bakker <niels@euro.net>
+
+8.8.8-2 Documentation update, rules rewrite
+8.8.8-3 Allow <@a,b:user@c> in MAIL FROM:
+8.8.8-4 Use ismx map to differentiate between soft and hard lookup
+ errors in Scheck_mail
+
+LOCAL_CONFIG
+Kismx ismx
+F{LocalIP} /etc/mail/LocalIP
+FR /etc/mail/RelayTo
+
+LOCAL_RULESETS
+Scheck_mail
+#
+# Check that the domain name is valid.
+#
+R< @ $+ : $+ @ $+ > $: < $2 @ $3 > Strip SMTP route-addr
+R<$*@$=w> $@ <OK> shortcut (class w)
+R$- $@ <OK> local host
+R<> $@ <OK> bounce
+R$* $: <?> $>3 $1 canonify
+R<?> $* < @ $+ . > $: $1 < @ $2 > qualified
+R<?> $* < @ $+ > $: <?> $(ismx $2 $: NOMX $)
+R<?> TEMPFAIL $# error $@ 4.5.1 $: 451 Cannot resolve that - try again later.
+R<?> $* $# error $@ 5.7.1 $: 571 Invalid host name
+
+Scheck_rcpt
+#
+# Local users (LocalIP) can relay anywhere.
+#
+R$+ $: $(dequote "" $&{client_addr} $) $| $1
+R0 $| $* $@ <OK> no client addr: directly invoked
+R$={LocalIP}$* $| $* $@ <OK> from here
+R$* $| $* $: $2 undo damage
+#
+# Anything terminating locally is also OK.
+#
+R$* $: $>Parse0 $>3 $1
+R$+ < @ $* . > $* $: $1 < @ $2 >
+R$+ < @ $=w > $@ <OK> we deliver
+R$+ < @ $=R > $@ <OK> we relay
+#
+# See if we are MX for this host
+#
+R$+ < $* @ $+ > $* $: $1 < $2 @ $(ismx $3 $: NOMX $) > $4
+R$+ < $* @ NOMX > $* $# error $@ 5.7.1 $: 571 I do not relay for that address.
+R$+ < $* @ TEMPFAIL > $* $# error $@ 4.5.1 $: 451 Cannot resolve target domain.
+R$* $@ <OK>
+
+
+Note that if the MX lookup fails, a temporary rather than a fatal error
+code is returned so that the message will not get lost.
+
+Here's the diff to the sendmail-8.8.8 source. Note that if you are
+running Debian/Linux, the sendmail-8.8.8 package already has this patch
+incorporated.
+
+
+diff -u --recursive --new-file sendmail-8.8.8.orig/src/conf.c sendmail-8.8.8/src/conf.c
+--- sendmail-8.8.8.orig/src/conf.c Mon Oct 20 17:41:38 1997
++++ sendmail-8.8.8/src/conf.c Mon Jan 12 11:24:15 1998
+@@ -368,6 +368,10 @@
+ MAPDEF("bestmx", NULL, MCF_OPTFILE,
+ map_parseargs, null_map_open, null_map_close,
+ bestmx_map_lookup, null_map_store);
++
++ MAPDEF("ismx", NULL, MCF_OPTFILE,
++ map_parseargs, null_map_open, null_map_close,
++ ismx_map_lookup, null_map_store);
+ #endif
+
+ MAPDEF("host", NULL, 0,
+diff -u --recursive --new-file sendmail-8.8.8.orig/src/domain.c sendmail-8.8.8/src/domain.c
+--- sendmail-8.8.8.orig/src/domain.c Sat Aug 2 20:06:53 1997
++++ sendmail-8.8.8/src/domain.c Mon Jan 12 11:24:15 1998
+@@ -481,6 +481,52 @@
+ return map_rewrite(map, mxhosts[0], strlen(mxhosts[0]), av);
+ }
+ /*
++** ISMX -- find if we are the MX for a certain host.
++**
++** This is really a hack, but I don't see any obvious way
++** to generalize it at the moment.
++*/
++
++char *
++ismx_map_lookup(map, name, av, statp)
++ MAP *map;
++ char *name;
++ char **av;
++ int *statp;
++{
++ int nmx, i, len;
++ auto int rcode;
++ int saveopts = _res.options;
++ char *mxhosts[MAXMXHOSTS + 1];
++ char *mymx = NULL;
++
++ _res.options &= ~(RES_DNSRCH|RES_DEFNAMES);
++ nmx = getmxrr(name, mxhosts, FALSE, &rcode);
++ _res.options = saveopts;
++ if (rcode != EX_TEMPFAIL) {
++ if (nmx <= 0)
++ return NULL;
++ for(i = 0; i < nmx; i++) {
++ len = strlen(mxhosts[i]);
++ if (len && mxhosts[i][len - 1] == '.')
++ mxhosts[i][len - 1] = 0;
++ if (wordinclass(mxhosts[i], 'w')) {
++ mymx = mxhosts[i];
++ break;
++ }
++ }
++ if (mymx == NULL)
++ return NULL;
++ } else
++ mymx = "TEMPFAIL";
++
++ if (bitset(MF_MATCHONLY, map->map_mflags))
++ return map_rewrite(map, name, strlen(name), NULL);
++ else
++ return map_rewrite(map, mymx, strlen(mymx), av);
++}
++
++ /*
+ ** DNS_GETCANONNAME -- get the canonical name for named host using DNS
+ **
+ ** This algorithm tries to be smart about wildcard MX records.
diff --git a/debian/sendmailconfig b/debian/sendmailconfig
new file mode 100644
index 0000000..3d44a9e
--- /dev/null
+++ b/debian/sendmailconfig
@@ -0,0 +1,566 @@
+#!/bin/sh -e
+#
+# Interactively configure Sendmail for Debian
+#
+# Robert Leslie <rob@mars.org>
+
+PATH="/usr/sbin:/usr/bin:/sbin:/bin"
+
+reload="yes"
+umask 022
+
+###############################################################################
+
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ --no-reload)
+ reload=""
+ shift
+ ;;
+
+ *)
+ echo "Usage: $0 [--no-reload]" >&2
+ exit 1
+ ;;
+ esac
+done
+
+###############################################################################
+
+descrip() {
+ echo ""
+ echo "$1"
+ echo "$1" | sed -e 's/./-/g'
+ cat -
+ echo ""
+}
+
+yesno() {
+ local N="N" Y="Y"
+ local q="$1" def=$(eval "echo -n \$$2")
+
+ while :
+ do
+ echo -n "$q? [$def] "
+ read REPLY
+ REPLY=$(echo -n "$REPLY" | sed -e "s/^\ *//" -e "s/^\t*//")
+ test -n "$REPLY" || REPLY="$def"
+
+ case "$REPLY" in
+ [Yy]*)
+ echo yes > /dev/null
+ eval "$2=\"Y\""
+ return 0
+ ;;
+
+ [Nn]*)
+ echo no > /dev/null
+ eval "$2=\"N\""
+ return 1
+ ;;
+ esac
+ done
+}
+
+input() {
+ local q="$1" def=$(eval "echo -n \$$2")
+
+ echo -n "$q? [$def] "
+ read REPLY
+ REPLY=$(echo "$REPLY" | sed -e 's/^[ ]*//' -e 's/[ ]*$//' | cat)
+ test -n "$REPLY" || REPLY="$def"
+
+ if [ NONE = "$3" ]
+ then
+ test NONE != "$REPLY" || REPLY=""
+ fi
+
+ eval "$2=\"$REPLY\""
+}
+
+testconfig() {
+ CONFIG=$(grep "$1" /etc/mail/sendmail.mc 2>/dev/null)
+}
+
+makecf() {
+ echo "Generating /etc/mail/sendmail.cf from /etc/mail/sendmail.mc ..."
+ m4 /usr/lib/sendmail.cf/m4/cf.m4 /etc/mail/sendmail.mc \
+ >/etc/mail/sendmail.cf.new
+ mv -f /etc/mail/sendmail.cf.new /etc/mail/sendmail.cf
+
+ echo "Updating alias database ..."
+ newaliases
+
+ if [ "$reload" ] && \
+ yesno "Reload the running sendmail now with the new configuration" Y
+ then
+ echo "Reloading sendmail ..."
+ /etc/init.d/sendmail reload >/dev/null
+ fi
+}
+
+###############################################################################
+
+if [ -f /etc/mail/sendmail.mc ]
+then
+ if yesno "Configure sendmail with the existing /etc/mail/sendmail.mc" Y
+ then
+ makecf
+ exit 0
+ fi
+fi
+
+###############################################################################
+
+exec 3>/etc/mail/sendmail.mc.new
+trap "rm -f /etc/mail/sendmail.mc.new" 0
+
+###############################################################################
+
+descrip "Sendmail Configuration" <<EOT
+By answering the following questions, you can configure sendmail for your
+system. Default values are determined either by your existing configuration
+or from common usage.
+EOT
+
+echo -n "Press [ENTER] "
+read REPLY
+
+cat /usr/lib/sendmail.cf/cf/debproto.mc >&3
+
+###############################################################################
+
+descrip "Mail Name" <<EOT
+Your \`mail name' is the hostname portion of the address to be shown on
+outgoing news and mail messages (following the username and @ sign). This
+name will be used by other programs besides sendmail; it should be the single,
+full domain name (FQDN) from which mail will appear to originate.
+EOT
+
+mailname=$(cat /etc/mailname 2>/dev/null || hostname --fqdn)
+input "Mail name" mailname
+
+echo "$mailname" >/etc/mailname
+
+###############################################################################
+
+descrip "Null Client" <<EOT
+A special configuration known as the "null client" can be created for this
+host if all mail should be forwarded to a central hub via a local SMTP-based
+network. This may be a suitable configuration if you want to forward all of
+your mail to your local Internet service provider (ISP) for delivery.
+
+To enable this option, give the name of the host to which all mail should be
+forwarded. Otherwise leave the option empty or answer \`NONE' to disable it.
+EOT
+
+nullclient=""
+! testconfig "FEATURE(nullclient" ||
+ nullclient=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *\([^)]*\).*/\1/')
+
+input "Null client forward host" nullclient NONE
+
+test -z "$nullclient" || echo "FEATURE(nullclient, $nullclient)dnl" >&3
+
+###############################################################################
+
+descrip "Address Canonification" <<EOT
+Usually sendmail will canonify all addresses by consulting a name server and
+resolving hosts to their fully qualified domain name (FQDN). Under special
+circumstances you may want to disable this feature, for example if this
+machine acts only as a mail gateway.
+EOT
+
+test -z "$nullclient" || cat <<EOT
+Since this host will be configured as a null client, this option controls
+whether addresses will be qualified with \`$mailname' when
+sent to the central hub via SMTP. Disabling this feature may cause mail to
+appear to come from (and be qualified by the domain for) the hub machine
+rather than this host.
+
+EOT
+
+nocanonify="N"
+! testconfig "FEATURE(nocanonify)" || nocanonify="Y"
+
+! yesno "Disable address canonification" nocanonify ||
+ echo "FEATURE(nocanonify)dnl" >&3
+
+###############################################################################
+
+if [ -z "$nullclient" ]
+then
+
+###############################################################################
+
+descrip "SMTP Mailer" <<EOT
+If you plan to exchange mail with other computers, you should enable the
+SMTP mailer. Even if you don't plan to exchange mail with other computers,
+it is still a good idea to enable this so local programs can use it.
+EOT
+
+smtp="Y"
+if [ -f /etc/mail/sendmail.mc ]
+then
+ testconfig "MAILER(smtp)" || smtp="N"
+fi
+
+yesno "Enable the SMTP mailer" smtp || true
+
+###############################################################################
+
+descrip "Masquerade Envelope" <<EOT
+If you want mail envelopes (as well as mail headers) to appear to come from
+\`$mailname', you can enable this option.
+EOT
+
+masqenvelope="Y"
+if [ -f /etc/mail/sendmail.mc ]
+then
+ testconfig "FEATURE(masquerade_envelope)" || masqenvelope="N"
+fi
+
+! yesno "Masquerade envelopes" masqenvelope ||
+ echo "FEATURE(masquerade_envelope)dnl" >&3
+
+###############################################################################
+
+descrip "All Masquerade" <<EOT
+If enabled, this feature will cause recipient addresses to also appear to come
+from \`$mailname'. Normally they get the local hostname.
+Although this may be right for ordinary users, it can break local aliases. For
+example, if you send to "localalias", the originating sendmail will find that
+alias and send to all members, but send the message with
+"To: localalias@$mailname". Since that alias likely does
+not exist, replies will fail. Use this feature ONLY if you can guarantee that
+the ENTIRE namespace of \`$mailname' supersets all the
+local entries. If in doubt, it is safe to leave this option disabled.
+EOT
+
+allmasquerade="N"
+! testconfig "FEATURE(allmasquerade)" || allmasquerade="Y"
+
+! yesno "All masquerade" allmasquerade ||
+ echo "FEATURE(allmasquerade)dnl" >&3
+
+###############################################################################
+
+descrip "Always Add Domain" <<EOT
+If enabled, the local host domain is included even on locally delivered mail.
+Normally it is not added unless it is already present.
+EOT
+
+alwaysdomain="N"
+! testconfig "FEATURE(always_add_domain)" || alwaysdomain="Y"
+
+! yesno "Always add domain" alwaysdomain ||
+ echo "FEATURE(always_add_domain)dnl" >&3
+
+###############################################################################
+
+descrip "Mail Acceptance" <<EOT
+Sendmail is usually configured to accept mail for your mail name
+($mailname). However, under special circumstances you
+may not wish sendmail to do this, particularly if (and disabling this option
+generally requires that) mail for \`$mailname' is MXed
+to another host. If in doubt, it is safe to leave this option enabled.
+EOT
+
+acceptmailname="Y"
+if [ -f /etc/mail/sendmail.mc ]
+then
+ testconfig "^Cw.*$mailname" || acceptmailname="N"
+fi
+
+yesno "Accept mail for \`$mailname'" acceptmailname || true
+
+###############################################################################
+
+descrip "Alternate Names" <<EOT
+In addition to the canonical mail name \`$mailname', you can
+add any number of additional alternate names to recognize for receiving mail.
+If other hosts are MXed to you for local mail, this is where you should list
+them. This list is saved into the file /etc/mail/sendmail.cw so it can be
+changed later as needed.
+
+To answer this question, separate each alternate name with a space, or answer
+\`NONE' to eliminate all alternate names.
+EOT
+
+altnames=$(cat /etc/mail/sendmail.cw 2>/dev/null | tr -s '\n \t' ' ' |
+ sed -e 's/^ *//' -e 's/ *$//')
+input "Alternate names" altnames NONE
+
+if [ -n "$altnames" ]
+then
+ echo "$altnames" | tr -s ' \t' '\n' >/etc/mail/sendmail.cw
+else
+ cat /dev/null >/etc/mail/sendmail.cw
+fi
+
+echo "FEATURE(use_cw_file)dnl" >&3
+
+###############################################################################
+
+descrip "Trusted Users" <<EOT
+Sendmail allows a special group of users to set their envelope "From" address
+using the -f option without generating a warning message. If you have
+software such as Majordomo installed, you will want to include the usernames
+from such software here. Note that "root", "daemon", and "uucp" are included
+automatically and do not need to be specified. This list is saved into the
+file /etc/mail/sendmail.ct so it can be changed later as needed.
+
+To answer this question, separate each username with a space, or answer
+\`NONE' to eliminate all usernames.
+EOT
+
+trusted=$(cat /etc/mail/sendmail.ct 2>/dev/null | tr -s '\n \t' ' ' |
+ sed -e 's/^ *//' -e 's/ *$//')
+input "Trusted users" trusted NONE
+
+if [ -n "$trusted" ]
+then
+ echo "$trusted" | tr -s ' \t' '\n' >/etc/mail/sendmail.ct
+else
+ cat /dev/null >/etc/mail/sendmail.ct
+fi
+
+echo "FEATURE(use_ct_file)dnl" >&3
+
+###############################################################################
+
+descrip "Redirect Feature" <<EOT
+If enabled, this feature will allow you to alias old names to
+<new-address>.REDIRECT, causing sendmail to return mail to the sender with
+an error but indicating the recipient's new address.
+EOT
+
+redirect="N"
+! testconfig "FEATURE(redirect)" || redirect="Y"
+
+! yesno "Enable redirect option" redirect || echo "FEATURE(redirect)dnl" >&3
+
+###############################################################################
+
+descrip "UUCP Addresses" <<EOT
+Sendmail can be configured to be smart about UUCP addresses, or it can do
+nothing special with UUCP addresses at all. If you care about UUCP, you will
+need to do some additional configuration, perhaps outside of this script.
+EOT
+
+uucp="N"
+if [ -f /etc/mail/sendmail.mc ]
+then
+ testconfig "FEATURE(nouucp)" || uucp="Y"
+fi
+
+yesno "Enable UUCP addressing" uucp || echo "FEATURE(nouucp)dnl" >&3
+
+###############################################################################
+
+descrip "Sticky Host" <<EOT
+If enabled, mail sent to \`user@$mailname' is marked as
+"sticky" -- that is, the local addresses aren't matched against UDB and don't
+go through ruleset 5. This is used if you want a setup where \`user' is not
+necessarily the same as \`user@$mailname', e.g., to make
+a distinct domain-wide namespace. If in doubt, it is safe to leave this
+option disabled.
+EOT
+
+sticky="N"
+! testconfig "FEATURE(stickyhost)" || sticky="Y"
+
+! yesno "Enable sticky host option" sticky || echo "FEATURE(stickyhost)dnl" >&3
+
+###############################################################################
+
+descrip "DNS" <<EOT
+If you are directly connected to the Internet and have access to a domain
+name server, you should enable this option.
+EOT
+
+dns="Y"
+! testconfig "FEATURE(nodns)" || dns="N"
+
+yesno "Enable DNS" dns || echo "FEATURE(nodns)dnl" >&3
+
+###############################################################################
+
+if [ Y = "$dns" ]
+then
+
+###############################################################################
+
+descrip "Best MX is Local" <<EOT
+If enabled, this option will cause sendmail to accept mail as though locally
+addressed for any host that lists this machine as the best possible MX record.
+This generates additional DNS traffic, but should be OK for low-to-medium
+traffic hosts. N.B.: This feature is fundamentally incompatible with wildcard
+MX records. If you have a wildcard MX record that matches your domain, you
+cannot use this feature.
+EOT
+
+bestmxlocal="N"
+! testconfig "FEATURE(bestmx_is_local)" || bestmxlocal="Y"
+
+! yesno "Assume best MX is local" bestmxlocal ||
+ echo "FEATURE(bestmx_is_local)dnl" >&3
+
+###############################################################################
+
+fi # finished DNS configuration
+
+###############################################################################
+
+descrip "Mailertable" <<EOT
+If enabled, this option causes sendmail to read mail routing rules from
+the text file /etc/mail/mailertable. This is needed for unusual mailers like
+ifmail and fax programs. More information is in /usr/doc/sendmail/op.txt.gz.
+EOT
+
+mailertable="N"
+! testconfig "FEATURE(mailertable" || mailertable="Y"
+
+! yesno "Enable the mailertable feature" mailertable ||
+ echo "FEATURE(mailertable, \`text /etc/mail/mailertable')dnl" >&3
+
+###############################################################################
+
+descrip "Sendmail Restricted Shell" <<EOT
+If enabled, this option causes sendmail to use the sendmail restricted shell
+program (smrsh) instead of /bin/sh for mailing to programs. This improves your
+ability to control what gets run via email; only those programs which appear
+in a special directory can be run. If you enable this option, please carefully
+read the smrsh(8) man page for further information.
+EOT
+
+smrsh="N"
+! testconfig "FEATURE(smrsh" || smrsh="Y"
+
+! yesno "Use the Sendmail Restricted Shell (smrsh)" smrsh ||
+ echo "FEATURE(smrsh, \`/usr/sbin/smrsh')dnl" >&3
+
+###############################################################################
+
+descrip "Mailer Name" <<EOT
+You can change the name used for internally generated outgoing messages.
+Usually this is \`MAILER-DAEMON' but it would not be unreasonable to change
+it to something such as \`postmaster'.
+EOT
+
+daemon="MAILER-DAEMON"
+! testconfig "confMAILER_NAME" ||
+ daemon=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *`\([^'"'"']*\).*/\1/')
+
+input "Mailer name" daemon
+
+test "MAILER-DAEMON" = "$daemon" ||
+ echo "define(\`confMAILER_NAME', \`$daemon')dnl" >&3
+
+###############################################################################
+
+descrip "Me Too" <<EOT
+Sendmail normally excludes the sender address from group expansion. Enabling
+this option will cause the sender to be included.
+EOT
+
+metoo="N"
+! testconfig "confME_TOO.*True" || metoo="Y"
+
+! yesno "Enable me too option" metoo ||
+ echo "define(\`confME_TOO', True)dnl" >&3
+
+###############################################################################
+
+descrip "Message Timeouts" <<EOT
+Sendmail will issue a warning message to the sender if it can't deliver a
+message within a reasonable amount of time. It will also send a failure
+notification and give up trying to deliver the message if it can't deliver it
+after an unreasonable amount of time.
+
+You can configure the message timeouts after which warning and failure
+notifications are sent. Sendmail's defaults are 4 hours and 5 days (4h/5d),
+respectively, but many people feel warnings after only 4 hours are premature.
+EOT
+
+qw="4h"
+! testconfig "confTO_QUEUEWARN" ||
+ qw=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *`\([^'"'"']*\).*/\1/')
+
+qr="5d"
+! testconfig "confTO_QUEUERETURN" ||
+ qr=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *`\([^'"'"']*\).*/\1/')
+
+timeouts="$qw/$qr"
+
+input "Message timeouts" timeouts
+
+qw=$(expr "$timeouts" : '\([^/]*\)/')
+qr=$(expr "$timeouts" : '[^/]*/\(.*\)')
+
+test "4h" = "$qw" || echo "define(\`confTO_QUEUEWARN', \`$qw')dnl" >&3
+test "5d" = "$qr" || echo "define(\`confTO_QUEUERETURN', \`$qr')dnl" >&3
+
+###############################################################################
+
+echo "MAILER(local)dnl" >&3
+
+test "N" = "$smtp" || echo "MAILER(smtp)dnl" >&3
+test "N" = "$acceptmailname" || echo "Cw$mailname" >&3
+
+###############################################################################
+
+if [ -e /etc/ifmail/config ] && [ -e /usr/lib/sendmail.cf/mailer/ifmail.m4 ];
+then
+ echo "MAILER(ifmail)dnl" >&3
+fi
+
+###############################################################################
+
+fi # finished non-"null client" configuration
+
+echo "MASQUERADE_AS($mailname)dnl" >&3
+
+###############################################################################
+
+echo "" >&3
+
+if [ -f /etc/mail/sendmail.mc ]
+then
+ sed -n -e '/^## Custom/,$p' /etc/mail/sendmail.mc >&3
+else
+ echo "## Custom configurations below (will be preserved)" >&3
+fi
+
+descrip "Configuration Complete" <<EOT
+Advanced configuration, such as alternate mailers, the use of mailertables,
+Bitnet domains, and UUCP domains can be accomplished by manually editing the
+/etc/mail/sendmail.mc configuration file and rerunning
+\`$0' to generate the appropriate /etc/mail/sendmail.cf
+file. (Local changes made at the end of /etc/mail/sendmail.mc will be
+preserved by \`$0'.)
+
+The m4 library files for sendmail configuration are kept in the
+/usr/lib/sendmail.cf directory. You may wish to review the documentation in
+/usr/doc/sendmail to assist in further customization.
+
+You may wish to customize your alias database; see the aliases(5) man page
+for information on the format and use of the /etc/aliases file.
+EOT
+
+###############################################################################
+
+exec 3>&-
+
+if [ -f /etc/mail/sendmail.mc ]
+then
+ echo "Saving old /etc/mail/sendmail.mc as /etc/mail/sendmail.mc.old ..."
+ mv -f /etc/mail/sendmail.mc /etc/mail/sendmail.mc.old
+fi
+
+mv -f /etc/mail/sendmail.mc.new /etc/mail/sendmail.mc
+trap 0
+
+makecf
+exit 0
diff --git a/debian/sendmailconfig.8 b/debian/sendmailconfig.8
new file mode 100644
index 0000000..b2cd52c
--- /dev/null
+++ b/debian/sendmailconfig.8
@@ -0,0 +1,41 @@
+.TH SENDMAILCONFIG 8 21-Jan-1997
+.SH NAME
+sendmailconfig \- configure sendmail for Debian systems
+.SH SYNOPSIS
+sendmailconfig [--no-reload]
+.SH DESCRIPTION
+.B sendmailconfig
+is used to simplify the configuration of sendmail(8) for use on Debian
+systems.
+.PP
+In the simplest case, you may run this program to (re)configure sendmail for
+your Debian system at any time. It will modify the file /etc/mail/sendmail.mc
+in order to create a working sendmail configuration which will be written to
+the file /etc/mail/sendmail.cf.
+.PP
+For advanced configurations, you can modify the sendmail.mc file before
+generating sendmail.cf. Future invokations of
+.B sendmailconfig
+will preserve these changes provided they are made at the end of the file.
+.PP
+Normally
+.B sendmailconfig
+will ask if you want to reload sendmail after making changes to its
+configuration. The --no-reload option will avoid this question.
+.SH FILES
+.TP
+/etc/mail/sendmail.mc
+sendmail m4 input to generate sendmail.cf
+.TP
+/etc/mail/sendmail.cf
+actual sendmail configuration file
+.TP
+/etc/mail/sendmail.cw
+names for which we will accept mail in the standard configuration
+.TP
+/etc/mail/sendmail.ct
+names of trusted users in the standard configuration
+.SH SEE ALSO
+sendmail(8)
+.SH AUTHOR
+Robert Leslie <rob@mars.org>
diff --git a/debian/sensible-mda.8 b/debian/sensible-mda.8
new file mode 100644
index 0000000..89e3009
--- /dev/null
+++ b/debian/sensible-mda.8
@@ -0,0 +1,28 @@
+.TH SENDMAILCONFIG 8 21-Jan-1997
+.SH NAME
+sensible-mda - generic sendmail local MDA for Debian systems
+.SH SYNOPSIS
+sensible-mda
+.SH DESCRIPTION
+.B sensible-mda
+is used to simplify the configuration of sendmail(8) for use on Debian
+systems.
+.PP
+.B sensible-mda
+is called by sendmail as a local mailer when the following exists in
+sendmail.mc:
+define(`LOCAL_MAILER_ARGS', `sensible-mda $g $u ${client_addr}')dnl
+.PP
+This program is included so that sendmail can function with either procmail
+or deliver as its MDA (with procmail taking precedence).
+.SH FILES
+.TP
+/etc/mail/sendmail.mc
+sendmail m4 input to generate sendmail.cf
+.TP
+/etc/mail/sendmail.cf
+actual sendmail configuration file
+.SH SEE ALSO
+sendmail(8)
+.SH AUTHOR
+Richard Nelson <cowboy@debian.org>
diff --git a/debian/sensible-mda.c b/debian/sensible-mda.c
new file mode 100644
index 0000000..e9afa31
--- /dev/null
+++ b/debian/sensible-mda.c
@@ -0,0 +1,62 @@
+/*
+ * sensible-mda.c
+ * Copyright (c) 1998, Johnie Ingram.
+ * Copyright (c) 1998, Richard Nelson <cowboy@debian.org>.
+ * Time-stamp: <1998/06/16 14:28:33 cowboy>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include <stdio.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+// TODO: declare -x TCPREMOTEIP="$3"
+
+#define PROCMAIL "/usr/bin/procmail"
+#define DELIVER "/usr/bin/deliver"
+
+static struct stat MDA_stat;
+static int done = 1;
+
+int
+main (int argc, char *argv[])
+{
+
+ if (!stat(PROCMAIL, &MDA_stat)) {
+ if (MDA_stat.st_mode & S_ISUID) {
+ done = 0;
+ execl (PROCMAIL, PROCMAIL, "-t", "-Y", "-f",
+ argv[1], "-d", argv[2], NULL);
+ }
+ else
+ fprintf(stderr, "Ack!?! %s is not setuid!\n", PROCMAIL);
+ }
+
+ if (done && !stat(DELIVER, &MDA_stat)) {
+ if (MDA_stat.st_mode & S_ISUID) {
+ done = 0;
+ execl (DELIVER, DELIVER, "-r", argv[1], argv[2], NULL);
+ }
+ else
+ fprintf(stderr, "Ack!?! %s is not setuid!\n", DELIVER);
+ }
+
+ fprintf (stderr, "Huh? Neither %s nor %s was found (or was suid)!\n",
+ PROCMAIL, DELIVER);
+
+ return (75);
+}
diff --git a/mmuegel/README b/mmuegel/README
new file mode 100644
index 0000000..4547516
--- /dev/null
+++ b/mmuegel/README
@@ -0,0 +1,92 @@
+-------------------------------------------------------------------------------
+Document Revision Control Information:
+ mmuegel
+ /usr/local/ustart/src/mail-tools/dist/foo/README,v
+ 1.1 of 1993/07/28 08:12:53
+-------------------------------------------------------------------------------
+
+1. Introduction
+---------------
+
+These tools may be of use to those sites using sendmail. Both are written in
+Perl. Our site, Mot.COM, receives a ton of mail being a top-level domain
+gateway. We have over 24 domains under us. Needless to say, we must have
+a robust mail system or my head, and others, would be on the chopping block.
+
+2. Description
+--------------
+
+The first tool, cqueue, checks the sendmail queue for problems. We use
+it to flag problems with subdomain mail servers (and even our own servers
+once in a while ;-). We run it via a cron job every hour during the day.
+You may find this too frequent, however.
+
+The other program, postclip, is used to "filter" non-deliverable NDNs that
+get sent to our Postmaster account now and then. This ensures privacy of
+e-mail and helps avoid disk problems from huge NDNs. It is different than
+a brute force "just keep the header" approach because it tries hard to keep
+other parts of the message that look like non-delivery information.
+
+Both have been used for some time at our site with no problems. Everything
+you need should be in this distribution: source, manual pages, and support
+libs. See the manual pages for a complete description of each tool.
+
+3. Installation
+---------------
+
+No fancy Makefile simply because these tools are all under a large
+hierarchy at my site. Installation should be a snap, however. Install
+the nroff(1) man(5) manual pages from the man subdirectory to the
+appropriate directory on your system. This might be something like
+/usr/local/man/man1.
+
+Next, install all of the Perl libraries located in the lib subdirectory
+to your Perl library area. /usr/local/lib/perl is a good bet. The person
+who installed Perl at your site will be able to tell you for sure.
+
+Finally, you need to install the programs. Note that cqueue wants to
+run setuid root by default. This is because the sendmail queue is normally
+only readable by root or some special group. In order to let any user
+run this suidperl is used. suidperl allows a Perl program to run with the
+privileges of another user.
+
+You will have to edit both the cqueue and postclip programs to change
+the #! line at the top of each. Just change the pathname to whatever is
+appropriate on your system. Note that Larry Wall's fixin program from
+the Camel book can also be used to do this. It is very handy. It changes
+#! lines by looking at your PATH.
+
+If you do not have suidperl on your system change the #! line in cqueue
+to reference perl instead of suidperl.
+
+You may also wish to change some constants in cqueue. $DEF_QUEUE should be
+changed to your queue directory if it is not /usr/spool/mqueue. $DEF_TIME
+could be changed easy enough also. It is the time spec for the time duration
+after which a mail message will be reported on if the -a option has not been
+specified. See the manual page for more information and the format of this
+constant (same as the -t argument). Then again, neither of these has to
+be changed. Command line options are there to override their default
+values.
+
+After you have edited the programs as necessary, all that remains is to
+install them to some executable directory. Install postclip mode 555
+and cqueue mode 4555 with owner root (if using suidperl) or mode 555
+(if not using suidperl).
+
+4. Gripes, Comments, Etc
+------------------------
+
+If you start using either of these let me know. I have other mail tools I
+will likely post in the future if these prove useful. Also, if you think
+something is just plain dumb/wrong/stupid let me know!
+
+Cheers,
+-Mike
+
+--
++----------------------------------------------------------------------------+
+| Michael S. Muegel | Internet E-Mail: mmuegel@mot.com |
+| UNIX Applications Startup Group | Moto Dist E-Mail: X10090 |
+| Corporate Information Office | Voice: (708) 576-0507 |
+| Motorola | Fax: (708) 576-4153 |
++----------------------------------------------------------------------------+
diff --git a/mmuegel/libs/date.pl b/mmuegel/libs/date.pl
new file mode 100644
index 0000000..6732438
--- /dev/null
+++ b/mmuegel/libs/date.pl
@@ -0,0 +1,324 @@
+;#
+;# Name
+;# date.pl - Perl emulation of (the output side of) date(1)
+;#
+;# Synopsis
+;# require "date.pl";
+;# $Date = &date(time);
+;# $Date = &date(time, $format);
+;#
+;# Description
+;# This package implements the output formatting functions of date(1) in
+;# Perl. The format options are based on those supported by Ultrix 4.0
+;# plus a couple of additions from SunOS 4.1.1 and elsewhere:
+;#
+;# %a abbreviated weekday name - Sun to Sat
+;# %A full weekday name - Sunday to Saturday
+;# %b abbreviated month name - Jan to Dec
+;# %B full month name - January to December
+;# %c date and time in local format [+]
+;# %C date and time in long local format [+]
+;# %d day of month - 01 to 31
+;# %D date as mm/dd/yy
+;# %e day of month (space padded) - ` 1' to `31'
+;# %E day of month (with suffix: 1st, 2nd, 3rd...)
+;# %f month of year (space padded) - ` 1' to `12'
+;# %h abbreviated month name - Jan to Dec
+;# %H hour - 00 to 23
+;# %i hour (space padded) - ` 1' to `12'
+;# %I hour - 01 to 12
+;# %j day of the year (Julian date) - 001 to 366
+;# %k hour (space padded) - ` 0' to `23'
+;# %l date in ls(1) format
+;# %m month of year - 01 to 12
+;# %M minute - 00 to 59
+;# %n insert a newline character
+;# %p ante-meridiem or post-meridiem indicator (AM or PM)
+;# %r time in AM/PM notation
+;# %R time as HH:MM
+;# %S second - 00 to 59
+;# %t insert a tab character
+;# %T time as HH:MM:SS
+;# %u date/time in date(1) required format
+;# %U week number, Sunday as first day of week - 00 to 53
+;# %V date-time in SysV touch format (mmddHHMMyy)
+;# %w day of week - 0 (Sunday) to 6
+;# %W week number, Monday as first day of week - 00 to 53
+;# %x date in local format [+]
+;# %X time in local format [+]
+;# %y last 2 digits of year - 00 to 99
+;# %Y all 4 digits of year ~ 1700 to 2000 odd ?
+;# %z time zone from TZ environment variable w/ a trailing space
+;# %Z time zone from TZ environment variable
+;# %% insert a `%' character
+;# %+ insert a `+' character
+;#
+;# [+]: These may need adjustment to fit local conventions, see below.
+;#
+;# For the sake of compatibility, a leading `+' in the format
+;# specificaiton is removed if present.
+;#
+;# Remarks
+;# This is version 3.4 of date.pl
+;#
+;# An extension of `ctime.pl' by Waldemar Kebsch (kebsch.pad@nixpbe.UUCP),
+;# as modified by Marion Hakanson (hakanson@ogicse.ogi.edu).
+;#
+;# Unlike date(1), unknown format tags are silently replaced by "".
+;#
+;# defaultTZ is a blatant hack, but I wanted to be able to get date(1)
+;# like behaviour by default and there does'nt seem to be an easy (read
+;# portable) way to get the local TZ name back...
+;#
+;# For a cheap date, try...
+;#
+;# #!/usr/local/bin/perl
+;# require "date.pl";
+;# exit print (&date(time, shift @ARGV) . "\n") ? 0 : 1;
+;#
+;# This package is redistributable under the same terms as apply to
+;# the Perl 4.0 release. See the COPYING file in your Perl kit for
+;# more information.
+;#
+;# Please send any bug reports or comments to tmcgonigal@gallium.com
+;#
+;# Modification History
+;# Nmemonic Version Date Who
+;#
+;# NONE 1.0 02feb91 Terry McGonigal (tmcgonigal@gallium.com)
+;# Created from ctime.pl
+;#
+;# NONE 2.0 07feb91 tmcgonigal
+;# Added some of Marion Hakanson (hakanson@ogicse.ogi.edu)'s ctime.pl
+;# TZ handling changes.
+;#
+;# NONE 2.1 09feb91 tmcgonigal
+;# Corrected week number calculations.
+;#
+;# NONE 2.2 21oct91 tmcgonigal
+;# Added ls(1) date format, `%l'.
+;#
+;# NONE 2.3 06nov91 tmcgonigal
+;# Added SysV touch(1) date-time format, `%V' (pretty thin as
+;# mnemonics go, I know, but `t' and `T' were both gone already!)
+;#
+;# NONE 2.4 05jan92 tmcgonigal
+;# Corrected slight (cosmetic) problem with %V replacment string
+;#
+;# NONE 3.0 09jul92 tmcgonigal
+;# Fixed a couple of problems with &ls as pointed out by
+;# Thomas Richter (richter@ki1.chemie.fu-berlin.de), thanks Thomas!
+;# Also added a couple of SunOS 4.1.1 strftime-ish formats, %i and %k
+;# for space padded hours (` 1' to `12' and ` 0' to `23' respectivly),
+;# and %C for locale long date/time format. Changed &ampmH to take a
+;# pad char parameter to make to evaled code for %i and %k simpler.
+;# Added %E for suffixed day-of-month (ie 1st, 3rd, 4th etc).
+;#
+;# NONE 3.1 16jul92 tmcgonigal
+;# Added `%u' format to generate date/time in date(1) required
+;# format (ie '%y%m%d%H%M.%S').
+;#
+;# NONE 3.2 23jan93 tmcgonigal
+;# Added `%f' format to generate space padded month numbers, added
+;# `%E' to the header comments, it seems to have been left out (and
+;# I'm sure I wanted to use it at some point in the past...).
+;#
+;# NONE 3.3 03feb93 tmcgonigal
+;# Corrected some problems with AM/PM handling pointed out by
+;# Michael S. Muegel (mmuegel@mot.com). Thanks Michael, I hope
+;# this is the behaviour you were looking for, it seems more
+;# correct to me...
+;#
+;# NONE 3.4 26jul93 tmcgonigal
+;# Incorporated some fixes provided by DaviD W. Sanderson
+;# (dws@ssec.wisc.edu): February was spelled incorrectly and
+;# &wkno() was always using the current year while calculating
+;# week numbers, regardless of year implied by the time value
+;# passed to &date(). DaviD also contributed an improved &date()
+;# test script, thanks DaviD, I appreciate the effort. Finally,
+;# changed my mailling address from @gvc.com to @gallium.com
+;# to reflect, well, my new address!
+;#
+;# SccsId = "%W% %E%"
+;#
+require 'timelocal.pl';
+package date;
+
+# Months of the year
+@MoY = ('January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September','October', 'November', 'December');
+
+# days of the week
+@DoW = ('Sunday', 'Monday', 'Tuesday', 'Wednesday',
+ 'Thursday', 'Friday', 'Saturday');
+
+# CUSTOMIZE - defaults
+$defaultTZ = 'CST'; # time zone (hack!)
+$defaultFMT = '%a %h %e %T %z%Y'; # format (ala date(1))
+
+# CUSTOMIZE - `local' formats
+$locTF = '%T'; # time (as HH:MM:SS)
+$locDF = '%D'; # date (as mm/dd/yy)
+$locDTF = '%a %b %d %T %Y'; # date/time (as dow mon dd HH:MM:SS yyyy)
+$locLDTF = '%i:%M:%S %p %A %B %E %Y'; # long date/time (as HH:MM:SS a/p day month dom yyyy)
+
+# Time zone info
+$TZ; # wkno needs this info too
+
+# define the known format tags as associative keys with their associated
+# replacement strings as values. Each replacement string should be
+# an eval-able expresion assigning a value to $rep. These expressions are
+# eval-ed, then the value of $rep is substituted into the supplied
+# format (if any).
+%Tags = ( '%a', q|($rep = $DoW[$wday])=~ s/^(...).*/\1/|, # abbr. weekday name - Sun to Sat
+ '%A', q|$rep = $DoW[$wday]|, # full weekday name - Sunday to Saturday
+ '%b', q|($rep = $MoY[$mon]) =~ s/^(...).*/\1/|, # abbr. month name - Jan to Dec
+ '%B', q|$rep = $MoY[$mon]|, # full month name - January to December
+ '%c', q|$rep = $locDTF; 1|, # date/time in local format
+ '%C', q|$rep = $locLDTF; 1|, # date/time in local long format
+ '%d', q|$rep = &date'pad($mday, 2, "0")|, # day of month - 01 to 31
+ '%D', q|$rep = '%m/%d/%y'|, # date as mm/dd/yy
+ '%e', q|$rep = &date'pad($mday, 2, " ")|, # day of month (space padded) ` 1' to `31'
+ '%E', q|$rep = &date'dsuf($mday)|, # day of month (w/suffix) `1st' to `31st'
+ '%f', q|$rep = &date'pad($mon+1, 2, " ")|, # month of year (space padded) ` 1' to `12'
+ '%h', q|$rep = '%b'|, # abbr. month name (same as %b)
+ '%H', q|$rep = &date'pad($hour, 2, "0")|, # hour - 00 to 23
+ '%i', q|$rep = &date'ampmH($hour, " ")|, # hour (space padded ` 1' to `12'
+ '%I', q|$rep = &date'ampmH($hour, "0")|, # hour - 01 to 12
+ '%j', q|$rep = &date'pad($yday+1, 3, "0")|, # Julian date 001 - 366
+ '%k', q|$rep = &date'pad($hour, 2, " ")|, # hour (space padded) ` 0' to `23'
+ '%l', q|$rep = '%b %d ' . &date'ls($year)|, # ls(1) style date
+ '%m', q|$rep = &date'pad($mon+1, 2, "0")|, # month of year - 01 to 12
+ '%M', q|$rep = &date'pad($min, 2, "0")|, # minute - 00 to 59
+ '%n', q|$rep = "\n"|, # insert a newline
+ '%p', q|$rep = &date'ampmD($hour)|, # insert `AM' or `PM'
+ '%r', q|$rep = '%I:%M:%S %p'|, # time in AM/PM notation
+ '%R', q|$rep = '%H:%M'|, # time as HH:MM
+ '%S', q|$rep = &date'pad($sec, 2, "0")|, # second - 00 to 59
+ '%t', q|$rep = "\t"|, # insert a tab
+ '%T', q|$rep = '%H:%M:%S'|, # time as HH:MM:SS
+ '%u', q|$rep = '%y%m%d%H%M.%S'|, # daaate/time in date(1) required format
+ '%U', q|$rep = &date'wkno($year, $yday, 0)|, # week number (weeks start on Sun) - 00 to 53
+ '%V', q|$rep = '%m%d%H%M%y'|, # SysV touch(1) date-time format (mmddHHMMyy)
+ '%w', q|$rep = $wday; 1|, # day of week - Sunday = 0
+ '%W', q|$rep = &date'wkno($year, $yday, 1)|, # week number (weeks start on Mon) - 00 to 53
+ '%x', q|$rep = $locDF; 1|, # date in local format
+ '%X', q|$rep = $locTF; 1|, # time in local format
+ '%y', q|($rep = $year) =~ s/..(..)/\1/|, # last 2 digits of year - 00 to 99
+ '%Y', q|$rep = "$year"; 1|, # full year ~ 1700 to 2000 odd
+ '%z', q|$rep = $TZ eq "" ? "" : "$TZ "|, # time zone from TZ env var (w/trail. space)
+ '%Z', q|$rep = $TZ; 1|, # time zone from TZ env. var.
+ '%%', q|$rep = '%'; $adv=1|, # insert a `%'
+ '%+', q|$rep = '+'| # insert a `+'
+);
+
+sub main'date {
+ local($time, $format) = @_;
+ local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
+ local($pos, $tag, $rep, $adv) = (0, "", "", 0);
+
+ # default to date/ctime format or strip leading `+'...
+ if ($format eq "") {
+ $format = $defaultFMT;
+ } elsif ($format =~ /^\+/) {
+ $format = $';
+ }
+
+ # Use local time if can't find a TZ in the environment
+ $TZ = defined($ENV{'TZ'}) ? $ENV{'TZ'} : $defaultTZ;
+ ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
+ &gettime ($TZ, $time);
+
+ # Hack to deal with 'PST8PDT' format of TZ
+ # Note that this can't deal with all the esoteric forms, but it
+ # does recognize the most common: [:]STDoff[DST[off][,rule]]
+ if ($TZ =~ /^([^:\d+\-,]{3,})([+-]?\d{1,2}(:\d{1,2}){0,2})([^\d+\-,]{3,})?/) {
+ $TZ = $isdst ? $4 : $1;
+ }
+
+ # watch out in 2070...
+ $year += ($year < 70) ? 2000 : 1900;
+
+ # now loop throught the supplied format looking for tags...
+ while (($pos = index ($format, '%')) != -1) {
+
+ # grab the format tag
+ $tag = substr($format, $pos, 2);
+ $adv = 0; # for `%%' processing
+
+ # do we have a replacement string?
+ if (defined $Tags{$tag}) {
+
+ # trap dead evals...
+ if (! eval $Tags{$tag}) {
+ print STDERR "date.pl: internal error: eval for $tag failed: $@\n";
+ return "";
+ }
+ } else {
+ $rep = "";
+ }
+
+ # do the substitution
+ substr ($format, $pos, 2) =~ s/$tag/$rep/;
+ $pos++ if ($adv);
+ }
+
+ $format;
+}
+
+# dsuf - add `st', `nd', `rd', `th' to a date (ie 1st, 22nd, 29th)
+sub dsuf {
+ local ($mday) = @_;
+
+ return $mday . 'st' if ($mday =~ m/.*1$/);
+ return $mday . 'nd' if ($mday =~ m/.*2$/);
+ return $mday . 'rd' if ($mday =~ m/.*3$/);
+ return $mday . 'th';
+}
+
+# weekno - figure out week number
+sub wkno {
+ local ($year, $yday, $firstweekday) = @_;
+ local ($jan1, @jan1, $wks);
+
+ # figure out the `time' value for January 1 of the given year
+ $jan1 = &maketime ($TZ, 0, 0, 0, 1, 0, $year-1900);
+
+ # figure out what day of the week January 1 was
+ @jan1= &gettime ($TZ, $jan1);
+
+ # and calculate the week number
+ $wks = (($yday + ($jan1[6] - $firstweekday)) + 1)/ 7;
+ $wks += (($wks - int($wks) > 0.0) ? 1 : 0);
+
+ # supply zero padding
+ &pad (int($wks), 2, "0");
+}
+
+# ampmH - figure out am/pm (1 - 12) mode hour value, padded with $p (0 or ' ')
+sub ampmH { local ($h, $p) = @_; &pad($h>12 ? $h-12 : ($h ? $h : 12), 2, $p); }
+
+# ampmD - figure out am/pm designator
+sub ampmD { shift @_ >= 12 ? "PM" : "AM"; }
+
+# gettime - get the time via {local,gmt}time
+sub gettime { ((shift @_) eq 'GMT') ? gmtime(shift @_) : localtime(shift @_); }
+
+# maketime - make a time via time{local,gmt}
+sub maketime { ((shift @_) eq 'GMT') ? &main'timegm(@_) : &main'timelocal(@_); }
+
+# ls - generate the time/year portion of an ls(1) style date
+sub ls {
+ return ((&gettime ($TZ, time))[5] == @_[0]) ? "%R" : " %Y";
+}
+
+# pad - pad $in with leading $pad until lenght $len
+sub pad {
+ local ($in, $len, $pad) = @_;
+ local ($out) = "$in";
+
+ $out = $pad . $out until (length ($out) == $len);
+ return $out;
+}
+
+1;
diff --git a/mmuegel/libs/elapsed.pl b/mmuegel/libs/elapsed.pl
new file mode 100644
index 0000000..e8fc52a
--- /dev/null
+++ b/mmuegel/libs/elapsed.pl
@@ -0,0 +1,123 @@
+;# NAME
+;# elapsed.pl - convert seconds to elapsed time format
+;#
+;# AUTHOR
+;# Michael S. Muegel <mmuegel@mot.com>
+;#
+;# RCS INFORMATION
+;# mmuegel
+;# /usr/local/ustart/src/mail-tools/dist/foo/libs/elapsed.pl,v
+;# 1.1 of 1993/07/28 08:07:19
+
+package elapsed;
+
+# Time field types
+$DAYS = 1;
+$HOURS = 2;
+$MINUTES = 3;
+$SECONDS = 4;
+
+# The array contains four records each with four fields. The fields are,
+# in order:
+#
+# Type Specifies what kind of time field this is. Once of
+# $DAYS, $HOURS, $MINUTES, or $SECONDS.
+#
+# Multiplier Specifies what time field this is via the minimum
+# number of seconds this time field may specify. For
+# example, the minutes field would be non-zero
+# when there are 60 or more seconds.
+#
+# Separator How to separate this time field from the next
+# *greater* field.
+#
+# Format sprintf() format specifier on how to print this
+# time field.
+@MULT_AND_SEPS = ($DAYS, 60 * 60 * 24, "+", "%d",
+ $HOURS, 60 * 60, ":", "%d",
+ $MINUTES, 60, ":", "%02d",
+ $SECONDS, 1, "", "%02d"
+ );
+
+;###############################################################################
+;# Seconds_To_Elapsed
+;#
+;# Coverts a seconds count to form [d+]h:mm:ss. If $Collapse
+;# is true then the result is compacted somewhat. The string returned
+;# will be of the form [d+][[h:]mm]:ss.
+;#
+;# Arguments:
+;# $Seconds, $Collapse
+;#
+;# Examples:
+;# &Seconds_To_Elapsed (0, 0) -> 0:00:00
+;# &Seconds_To_Elapsed (0, 1) -> :00
+;#
+;# &Seconds_To_Elapsed (119, 0) -> 0:01:59
+;# &Seconds_To_Elapsed (119, 1) -> 01:59
+;#
+;# &Seconds_To_Elapsed (3601, 0) -> 1:00:01
+;# &Seconds_To_Elapsed (3601, 1) -> 1:00:01
+;#
+;# &Seconds_To_Elapsed (86401, 0) -> 1+0:00:01
+;# &Seconds_To_Elapsed (86401, 1) -> 1+:01
+;#
+;# Returns:
+;# $Elapsed
+;###############################################################################
+sub main'Seconds_To_Elapsed
+{
+ local ($Seconds, $Collapse) = @_;
+ local ($Type, $Multiplier, @Multipliers, $Separator, $DHMS_Used,
+ $Elapsed, @Mult_And_Seps, $Print_Field);
+
+ $Multiplier = 1;
+ @Mult_And_Seps = @MULT_AND_SEPS;
+
+ # Keep subtracting the number of seconds corresponding to a time field
+ # from the number of seconds passed to the function.
+ while (1)
+ {
+ ($Type, $Multiplier, $Separator, $Format) = splice (@Mult_And_Seps, 0, 4);
+ last if (! $Multiplier);
+ $Seconds -= $DHMS_Used * $Multiplier
+ if ($DHMS_Used = int ($Seconds / $Multiplier));
+
+ # Figure out if we should print this field
+ if ($Type == $DAYS)
+ {
+ $Print_Field = $DHMS_Used;
+ }
+
+ elsif ($Collapse)
+ {
+ if ($Type == $HOURS)
+ {
+ $Print_Field = $DHMS_Used;
+ }
+ elsif ($Type == $MINUTES)
+ {
+ $Print_Field = $DHMS_Used || $Printed_Field {$HOURS};
+ }
+ else
+ {
+ $Format = ":%02d"
+ if (! $Printed_Field {$MINUTES});
+ $Print_Field = 1;
+ };
+ }
+
+ else
+ {
+ $Print_Field = 1;
+ };
+
+ $Printed_Field {$Type} = $Print_Field;
+ $Elapsed .= sprintf ("$Format%s", $DHMS_Used, $Separator)
+ if ($Print_Field);
+ };
+
+ return ($Elapsed);
+};
+
+1;
diff --git a/mmuegel/libs/mail.pl b/mmuegel/libs/mail.pl
new file mode 100644
index 0000000..eeedb11
--- /dev/null
+++ b/mmuegel/libs/mail.pl
@@ -0,0 +1,140 @@
+;# NAME
+;# mail.pl - perl function(s) to handle mail processing
+;#
+;# AUTHOR
+;# Michael S. Muegel (mmuegel@mot.com)
+;#
+;# RCS INFORMATION
+;# mmuegel
+;# /usr/local/ustart/src/mail-tools/dist/foo/libs/mail.pl,v 1.1 1993/07/28 08:07:19 mmuegel Exp
+
+package mail;
+
+# Mailer statement to eval. $Users, $Subject, and $Verbose are substituted
+# via eval
+$BIN_MAILER = "/usr/ucb/mail \$Verbose -s '\$Subject' \$Users";
+
+# Sendmail command to use when $Use_Sendmail is true.
+$SENDMAIL = '/usr/lib/sendmail $Verbose $Users';
+
+;###############################################################################
+;# Send_Mail
+;#
+;# Sends $Message to $Users with a subject of $Subject. If $Message_Is_File
+;# is true then $Message is assumed to be a filename pointing to the mail
+;# message. This is a new option and thus the backwards-compatible hack.
+;# $Users should be a space separated list of mail-ids.
+;#
+;# If everything went OK $Status will be 1 and $Error_Msg can be ignored;
+;# otherwise, $Status will be 0 and $Error_Msg will contain an error message.
+;#
+;# If $Use_Sendmail is 1 then sendmail is used to send the message. Normally
+;# a mailer such as Mail is used. By specifiying this you can include
+;# headers in addition to text in either $Message or $Message_Is_File.
+;# If either $Message or $Message_Is_File contain a Subject: header then
+;# $Subject is ignored; otherwise, a Subject: header is automatically created.
+;# Similar to the Subject: header, if a To: header does not exist one
+;# is automatically created from the $Users argument. The mail is still
+;# sent, however, to the recipients listed in $Users. This is keeping with
+;# normal sendmail usage (header vs. envelope).
+;#
+;# In both bin mailer and sendmail modes $Verbose will turn on verbose mode
+;# (normally just sendmail verbose mode output).
+;#
+;# Arguments:
+;# $Users, $Subject, $Message, $Message_Is_File, $Verbose, $Use_Sendmail
+;#
+;# Returns:
+;# $Status, $Error_Msg
+;###############################################################################
+sub main'Send_Mail
+{
+ local ($Users, $Subject, $Message, $Message_Is_File, $Verbose,
+ $Use_Sendmail) = @_;
+ local ($BIN_MAILER_HANDLE, $Mailer_Command, $Header_Found, %Header_Map,
+ $Header_Extra, $Mailer);
+
+ # If the message is contained in a file read it in so we can have one
+ # consistent interface
+ if ($Message_Is_File)
+ {
+ undef $/;
+ $Message_Is_File = 0;
+ open (Message) || return (0, "error reading $Message: $!");
+ $Message = <Message>;
+ close (Message);
+ };
+
+ # If sendmail mode see if we need to add some headers
+ if ($Use_Sendmail)
+ {
+ # Determine if a header block is included in the message and what headers
+ # are there
+ foreach (split (/\n/, $Message))
+ {
+ last if ($_ eq "");
+ $Header_Found = $Header_Map {$1} = 1 if (/^([A-Z]\S*): /);
+ };
+
+ # Add some headers?
+ if (! $Header_Map {"To"})
+ {
+ $Header_Extra .= "To: " . join (", ", $Users) . "\n";
+ };
+ if (($Subject ne "") && (! $Header_Map {"Subject"}))
+ {
+ $Header_Extra .= "Subject: $Subject\n";
+ };
+
+ # Add the required blank line between header/body if there where no
+ # headers to begin with
+ if ($Header_Found)
+ {
+ $Message = "$Header_Extra$Message";
+ }
+ else
+ {
+ $Message = "$Header_Extra\n$Message";
+ };
+ };
+
+ # Get a string that is the mail command
+ $Verbose = ($Verbose) ? "-v" : "";
+ $Mailer = ($Use_Sendmail) ? $SENDMAIL : $BIN_MAILER;
+ eval "\$Mailer = \"$Mailer\"";
+ return (0, "error setting \$Mailer: $@") if ($@);
+
+ # need to catch SIGPIPE in case the $Mailer call fails
+ $SIG {'PIPE'} = "mail'Cleanup";
+
+ # Open mailer
+ return (0, "can not open mail program: $Mailer") if (! open (MAILER, "| $Mailer"));
+
+ # Send off the mail!
+ print MAILER $Message;
+ close (MAILER);
+ return (0, "error running mail program: $Mailer") if ($?);
+
+ # Everything must have went AOK
+ return (1);
+};
+
+;###############################################################################
+;# Cleanup
+;#
+;# Simply here so we can catch SIGPIPE and not exit.
+;#
+;# Globals:
+;# None
+;#
+;# Arguments:
+;# None
+;#
+;# Returns:
+;# Nothing exciting
+;###############################################################################
+sub Cleanup
+{
+};
+
+1;
diff --git a/mmuegel/libs/mqueue.pl b/mmuegel/libs/mqueue.pl
new file mode 100644
index 0000000..f425ede
--- /dev/null
+++ b/mmuegel/libs/mqueue.pl
@@ -0,0 +1,215 @@
+;# NAME
+;# mqueue.pl - functions to work with the sendmail queue
+;#
+;# DESCRIPTION
+;# Both Get_Queue_IDs and Parse_Control_File are available to get
+;# information about the sendmail queue. The cqueue program is a good
+;# example of how these functions work.
+;#
+;# AUTHOR
+;# Michael S. Muegel (mmuegel@mot.com)
+;#
+;# RCS INFORMATION
+;# mmuegel
+;# /usr/local/ustart/src/mail-tools/dist/foo/libs/mqueue.pl,v
+;# 1.1 of 1993/07/28 08:07:19
+
+package mqueue;
+
+;###############################################################################
+;# Get_Queue_IDs
+;#
+;# Will figure out the queue IDs in $Queue that have both control and data
+;# files. They are returned in @Valid_IDs. Those IDs that have a
+;# control file and no data file are saved to the array globbed by
+;# *Missing_Control_IDs. Likewise, those IDs that have a data file and no
+;# control file are saved to the array globbed by *Missing_Data_IDs.
+;#
+;# If $Skip_Locked is true they a message that has a lock file is skipped
+;# and will not show up in any of the arrays.
+;#
+;# If everything went AOK then $Status is 1; otherwise, $Status is 0 and
+;# $Msg tells what went wrong.
+;#
+;# Globals:
+;# None
+;#
+;# Arguments:
+;# $Queue, $Skip_Locked, *Missing_Control_IDs, *Missing_Data_IDs
+;#
+;# Returns:
+;# $Status, $Msg, @Valid_IDs
+;###############################################################################
+sub main'Get_Queue_IDs
+{
+ local ($Queue, $Skip_Locked, *Missing_Control_IDs,
+ *Missing_Data_IDs) = @_;
+ local (*QUEUE, @Files, %Lock_IDs, %Data_IDs, %Control_IDs, $_);
+
+ # Make sure that the * argument @arrays ar empty
+ @Missing_Control_IDs = @Missing_Data_IDs = ();
+
+ # Save each data, lock, and queue file in @Files
+ opendir (QUEUE, $Queue) || return (0, "error getting directory listing of $Queue");
+ @Files = grep (/^(df|lf|qf)/, readdir (QUEUE));
+ closedir (QUEUE);
+
+ # Create indexed list of data and control files. IF $Skip_Locked is true
+ # then skip either if there is a lock file present.
+ if ($Skip_Locked)
+ {
+ grep ((s/^lf//) && ($Lock_IDs {$_} = 1), @Files);
+ grep ((s/^df//) && (! $Lock_IDs {$_}) && ($Data_IDs {$_} = 1), @Files);
+ grep ((s/^qf//) && (! $Lock_IDs {$_}) && ($Control_IDs {$_} = 1), @Files);
+ }
+ else
+ {
+ grep ((s/^df//) && ($Data_IDs {$_} = 1), @Files);
+ grep ((s/^qf//) && ($Control_IDs {$_} = 1), @Files);
+ };
+
+ # Find missing control and data files and remove them from the lists of each
+ @Missing_Control_IDs = sort (grep ((! $Control_IDs {$_}) && (delete $Data_IDs {$_}), keys (%Data_IDs)));
+ @Missing_Data_IDs = sort (grep ((! $Data_IDs {$_} && (delete $Control_IDs {$_})), keys (%Control_IDs)));
+
+
+ # Return the IDs in an appartently random order
+ return (1, "", keys (%Control_IDs));
+};
+
+
+;###############################################################################
+;# Parse_Control_File
+;#
+;# Will pase a sendmail queue control file for useful information. See the
+;# Sendmail Installtion and Operation Guide (SMM:07) for a complete
+;# explanation of each field.
+;#
+;# The following globbed variables are set (or cleared) by this function:
+;#
+;# $Sender The sender's address.
+;#
+;# @Recipients One or more addresses for the recipient of the mail.
+;#
+;# @Errors_To One or more addresses for addresses to which mail
+;# delivery errors should be sent.
+;#
+;# $Creation_Time The job creation time in time(3) format. That is,
+;# seconds since 00:00:00 GMT 1/1/70.
+;#
+;# $Priority An integer representing the current message priority.
+;# This is used to order the queue. Higher numbers mean
+;# lower priorities.
+;#
+;# $Status_Message The status of the mail message. It can contain any
+;# text.
+;#
+;# @Headers Message headers unparsed but in their original order.
+;# Headers that span multiple lines are not mucked with,
+;# embedded \ns will be evident.
+;#
+;# In all e-mail addresses bounding <> pairs are stripped.
+;#
+;# If everything went AOK then $Status is 1. If the message with queue ID
+;# $Queue_ID just does not exist anymore -1 is returned. This is very
+;# possible and should be allowed for. Otherwise, $Status is 0 and $Msg
+;# tells what went wrong.
+;#
+;# Globals:
+;# None
+;#
+;# Arguments:
+;# $Queue, $Queue_ID, *Sender, *Recipients, *Errors_To, *Creation_Time,
+;# *Priority, *Status_Message, *Headers
+;#
+;# Returns:
+;# $Status, $Msg
+;###############################################################################
+sub main'Parse_Control_File
+{
+ local ($Queue, $Queue_ID, *Sender, *Recipients, *Errors_To, *Creation_Time,
+ *Priority, *Status_Message, *Headers) = @_;
+ local (*Control, $_, $Not_Empty);
+
+ # Required variables and the associated control. If empty at the end of
+ # parsing we return a bad status.
+ @REQUIRED_INFO = ('$Creation_Time', 'T', '$Sender', 'S', '@Recipients', 'R',
+ '$Priority', 'P');
+
+ # Open up the control file for read
+ $Control = "$Queue/qf$Queue_ID";
+ if (! open (Control))
+ {
+ return (-1) if ((-x $Queue) && (! -f "$Queue/qf$Queue_ID") &&
+ (! -f "$Queue/df$Queue_ID"));
+ return (0, "error opening $Control for read: $!");
+ };
+
+ # Reset the globbed variables just in case
+ $Sender = $Creation_Time = $Priority = $Status_Message = "";
+ @Recipients = @Errors_To = @Headers = ();
+
+ # Look for a few things in the control file
+ READ: while (<Control>)
+ {
+ $Not_Empty = 1;
+ chop;
+
+ PARSE:
+ {
+ if (/^T(\d+)$/)
+ {
+ $Creation_Time = $1;
+ }
+ elsif (/^S(<)?([^>]+)/)
+ {
+ $Sender = $2;
+ }
+ elsif (/^R(<)?([^>]+)/)
+ {
+ push (@Recipients, $2);
+ }
+ elsif (/^E(<)?([^>]+)/)
+ {
+ push (@Errors_To, $2);
+ }
+ elsif (/^M(.*)/)
+ {
+ $Status_Message = $1;
+ }
+ elsif (/^P(\d+)$/)
+ {
+ $Priority = $1;
+ }
+ elsif (/^H(.*)/)
+ {
+ $Header = $1;
+ while (<Control>)
+ {
+ chop;
+ last if (/^[A-Z]/);
+ $Header .= "\n$_";
+ };
+ push (@Headers, $Header);
+ redo PARSE if ($_);
+ last if (eof);
+ };
+ };
+ };
+
+ # If the file was empty scream bloody murder
+ return (0, "empty control file") if (! $Not_Empty);
+
+ # Yell if we could not find a required field
+ while (($Var, $Control) = splice (@REQUIRED_INFO, 0, 2))
+ {
+ eval "return (0, 'required control field $Control not found')
+ if (! $Var)";
+ return (0, "error checking \$Var: $@") if ($@);
+ };
+
+ # Everything went AOK
+ return (1);
+};
+
+1;
diff --git a/mmuegel/libs/newgetopts.pl b/mmuegel/libs/newgetopts.pl
new file mode 100644
index 0000000..bc73348
--- /dev/null
+++ b/mmuegel/libs/newgetopts.pl
@@ -0,0 +1,213 @@
+;# NAME
+;# newgetopts.pl - a better newgetopt (which is a better getopts which is
+;# a better getopt ;-)
+;#
+;# AUTHOR
+;# Mike Muegel (mmuegel@mot.com)
+;#
+;# mmuegel
+;# /usr/local/ustart/src/mail-tools/dist/foo/libs/newgetopts.pl,v 1.1 1993/07/28 08:07:19 mmuegel Exp
+
+;###############################################################################
+;# New_Getopts
+;#
+;# Does not care about order of switches, options, and arguments like
+;# getopts.pl. Thus all non-switches/options will be kept in ARGV even if they
+;# are not at the end. If $Pass_Invalid is set all unkown options will be
+;# passed back to the caller by keeping them in @ARGV. This is useful when
+;# parsing a command line for your script while ignoring options that you
+;# may pass to another script. If this is set New_Getopts tries to maintain
+;# the switch clustering on the unkown switches.
+;#
+;# Accepts the special argument -usage to print the Usage string. Also accepts
+;# the special option -version which prints the contents of the string
+;# $VERSION. $VERSION may or may not have an embeded \n in it. If -usage
+;# or -version are specified a status of -1 is returned. Note that the usage
+;# option is only accepted if the usage string is not null.
+;#
+;# $Switches is just like the formal arguemnt of getopts.pl. $Usage is a usage
+;# string with or without a trailing \n. *Switch_To_Order is an optional
+;# pointer to the name of an associative array which will contain a mapping of
+;# switch names to the order in which (if at all) the argument was entered.
+;#
+;# For example, if @ARGV contains -v, -x, test:
+;#
+;# $Switch_To_Order {"v"} = 1;
+;# $Switch_To_Order {"x"} = 2;
+;#
+;# Note that in the case of multiple occurances of an option $Switch_To_Order
+;# will store each occurance of the argument via a string that emulates
+;# an array. This is done by using join ($;, ...). You can retrieve the
+;# array by using split (/$;/, ...).
+;#
+;# *Split_ARGV is an optional pointer to an array which will conatin the
+;# original switches along with their values. For the example used above
+;# Split_ARGV would contain:
+;#
+;# @Split_ARGV = ("v", "", "x", "test");
+;#
+;# Another exciting ;-) feature that newgetopts has. Along with creating the
+;# normal $opt_ scalars for the last value of an argument the list @opt_ is
+;# created. It is an array which contains all the values of arguments to the
+;# basename of the variable. They are stored in the order which they occured
+;# on the command line starting with $[. Note that blank arguments are stored
+;# as "". Along with providing support for multiple options on the command
+;# line this also provides a method of counting the number of times an option
+;# was specified via $#opt_.
+;#
+;# Automatically resets all $opt_, @opt_, %Switch_To_Order, and @Split_ARGV
+;# variables so that New_Getopts may be called more than once from within
+;# the same program. Thus, if $opt_v is set upon entry to New_Getopts and
+;# -v is not in @ARGV $opt_v will not be set upon exit.
+;#
+;# Arguments:
+;# $Switches, $Usage, $Pass_Invalid, *Switch_To_Order, *Split_ARGV
+;#
+;# Returns:
+;# -1, 0, or 1 depending on status (printed Usage/Version, OK, not OK)
+;###############################################################################
+sub New_Getopts
+{
+ local($taint_argumentative, $Usage, $Pass_Invalid, *Switch_To_Order,
+ *Split_ARGV) = @_;
+ local(@args,$_,$first,$rest,$errs, @leftovers, @current_leftovers,
+ %Switch_Found);
+ local($[, $*, $Script_Name, $argumentative);
+
+ # Untaint the argument cluster so that we can use this with taintperl
+ $taint_argumentative =~ /^(.*)$/;
+ $argumentative = $1;
+
+ # Clear anything that might still be set from a previous New_Getopts
+ # call.
+ @Split_ARGV = ();
+
+ # Get the basename of the calling script
+ ($Script_Name = $0) =~ s/.*\///;
+
+ # Make Usage have a trailing \n
+ $Usage .= "\n" if ($Usage !~ /\n$/);
+
+ @args = split( / */, $argumentative );
+
+ # Clear anything that might still be set from a previous New_Getopts call.
+ foreach $first (@args)
+ {
+ next if ($first eq ":");
+ delete $Switch_Found {$first};
+ delete $Switch_To_Order {$first};
+ eval "undef \@opt_$first; undef \$opt_$first;";
+ };
+
+ while (@ARGV)
+ {
+ # Let usage through
+ if (($ARGV[0] eq "-usage") && ($Usage ne "\n"))
+ {
+ print $Usage;
+ exit (-1);
+ }
+
+ elsif ($ARGV[0] eq "-version")
+ {
+ if ($VERSION)
+ {
+ print $VERSION;
+ print "\n" if ($VERSION !~ /\n$/);
+ }
+ else
+ {
+ warn "${Script_Name}: no version information available, sorry\n";
+ }
+ exit (-1);
+ }
+
+ elsif (($_ = $ARGV[0]) =~ /^-(.)(.*)/)
+ {
+ ($first,$rest) = ($1,$2);
+ $pos = index($argumentative,$first);
+
+ $Switch_To_Order {$first} = join ($;, split (/$;/, $Switch_To_Order {$first}), ++$Order);
+
+ if($pos >= $[)
+ {
+ if($args[$pos+1] eq ':')
+ {
+ shift(@ARGV);
+ if($rest eq '')
+ {
+ $rest = shift(@ARGV);
+ }
+
+ eval "\$opt_$first = \$rest;";
+ eval "push (\@opt_$first, \$rest);";
+ push (@Split_ARGV, $first, $rest);
+ }
+ else
+ {
+ eval "\$opt_$first = 1";
+ eval "push (\@opt_$first, '');";
+ push (@Split_ARGV, $first, "");
+
+ if($rest eq '')
+ {
+ shift(@ARGV);
+ }
+ else
+ {
+ $ARGV[0] = "-$rest";
+ }
+ }
+ }
+
+ else
+ {
+ # Save any other switches if $Pass_Valid
+ if ($Pass_Invalid)
+ {
+ push (@current_leftovers, $first);
+ }
+ else
+ {
+ warn "${Script_Name}: unknown option: $first\n";
+ ++$errs;
+ };
+ if($rest ne '')
+ {
+ $ARGV[0] = "-$rest";
+ }
+ else
+ {
+ shift(@ARGV);
+ }
+ }
+ }
+
+ else
+ {
+ push (@leftovers, shift (@ARGV));
+ };
+
+ # Save any other switches if $Pass_Valid
+ if ((@current_leftovers) && ($rest eq ''))
+ {
+ push (@leftovers, "-" . join ("", @current_leftovers));
+ @current_leftovers = ();
+ };
+ };
+
+ # Automatically print Usage if a warning was given
+ @ARGV = @leftovers;
+ if ($errs != 0)
+ {
+ warn $Usage;
+ return (0);
+ }
+ else
+ {
+ return (1);
+ }
+
+}
+
+1;
diff --git a/mmuegel/libs/strings1.pl b/mmuegel/libs/strings1.pl
new file mode 100644
index 0000000..a49335a
--- /dev/null
+++ b/mmuegel/libs/strings1.pl
@@ -0,0 +1,147 @@
+;# NAME
+;# strings1.pl - FUN with strings #1
+;#
+;# NOTES
+;# I wrote Format_Text_Block when I just started programming Perl so
+;# it is probably not very Perlish code. Center is more like it :-).
+;#
+;# AUTHOR
+;# Michael S. Muegel (mmuegel@mot.com)
+;#
+;# RCS INFORMATION
+;# mmuegel
+;# /usr/local/ustart/src/mail-tools/dist/foo/libs/strings1.pl,v 1.1 1993/07/28 08:07:19 mmuegel Exp
+
+package strings1;
+
+;###############################################################################;# Center
+;#
+;# Center $Text assuming the output should be $Columns wide. $Text can span
+;# multiple lines, of course :-). Lines within $Text that contain only
+;# whitespace are not centered and are instead collapsed. This may save time
+;# when printing them later.
+;#
+;# Arguments:
+;# $Text, $Columns
+;#
+;# Returns:
+;# $Centered_Text
+;###############################################################################
+sub main'Center
+{
+ local ($_, $Columns) = @_;
+ local ($*) = 1;
+
+ s@^(.*)$@" " x (($Columns - length ($1)) / 2) . $1@eg;
+ s/^[\t ]*$//g;
+ return ($_);
+};
+
+;###############################################################################
+;# Format_Text_Block
+;#
+;# Formats a text string to be printed to the display or other similar device.
+;# Text in $String will be fomratted such that the following hold:
+;#
+;# + $String contains the (possibly) multi-line text to print. It is
+;# automatically word-wrapped to fit in $Columns.
+;#
+;# + \n'd are maintained and are not folded.
+;#
+;# + $Offset is pre-pended before each separate line of text.
+;#
+;# + If $Offset_Once is $TRUE $Offset will only appear on the first line.
+;# All other lines will be indented to match the amount of whitespace of
+;# $Offset.
+;#
+;# + If $Bullet_Indent is $TRUE $Offset will only be applied to the begining
+;# of lines as they occured in the original $String. Lines that are created
+;# by this routine will always be indented by blank spaces.
+;#
+;# + If $Columns is 0 no word-wrap is done. This might be useful to still
+;# to offset each line in a buffer.
+;#
+;# + If $Split_Expr is supplied the string is split on it. If not supplied
+;# the string is split on " \t\/\-\,\." by default.
+;#
+;# + If $Offset_Blank is $TRUE then empty lines will have $Offset pre-pended
+;# to them. Otherwise, they will still empty.
+;#
+;# This is a realy workhorse routine that I use in many places because of its
+;# veratility.
+;#
+;# Arguments:
+;# $String, $Offset, $Offset_Once, $Bullet_Indent, $Columns, $Split_Expr,
+;# $Offset_Blank
+;#
+;# Returns:
+;# $Buffer
+;###############################################################################
+sub main'Format_Text_Block
+{
+ local ($String, $Real_Offset, $Offset_Once, $Bullet_Indent, $Columns,
+ $Split_Expr, $Offset_Blank) = @_;
+
+ local ($New_Line, $Line, $Chars_Per_Line, $Space_Offset, $Buffer,
+ $Next_New_Line, $Num_Lines, $Num_Offsets, $Offset);
+ local ($*) = 0;
+ local ($BLANK_TAG) = "__FORMAT_BLANK__";
+ local ($Blank_Offset) = $Real_Offset if ($Offset_Blank);
+
+ # What should we split on?
+ $Split_Expr = " \\t\\/\\-\\,\\." if (! $Split_Expr);
+
+ # Pre-process the string - convert blank lines to __FORMAT_BLANK__ sequence
+ $String =~ s/\n\n/\n$BLANK_TAG\n/g;
+ $String =~ s/^\n/$BLANK_TAG\n/g;
+ $String =~ s/\n$/\n$BLANK_TAG/g;
+
+ # If bad $Columns/$Offset combo or no $Columns make a VERRRYYY wide $Column
+ $Offset = $Real_Offset;
+ $Chars_Per_Line = 16000 if (($Chars_Per_Line = $Columns - length ($Offset)) <= 0);
+ $Space_Offset = " " x length ($Offset);
+
+ # Get a buffer
+ foreach $Line (split ("\n", $String))
+ {
+ $Offset = $Real_Offset if ($Bullet_Indent);
+
+ # Find where to split the line
+ if ($Line ne $BLANK_TAG)
+ {
+ $New_Line = "";
+ while ($Line =~ /^([$Split_Expr]*)([^$Split_Expr]+)/)
+ {
+ if (length ("$New_Line$&") >= $Chars_Per_Line)
+ {
+ $Next_New_Line = $+;
+ $New_Line = "$Offset$New_Line$1";
+ $Buffer .= "\n" if ($Num_Lines++);
+ $Buffer .= $New_Line;
+ $Offset = $Space_Offset if (($Offset) && ($Offset_Once));
+ $New_Line = $Next_New_Line;
+ ++$Num_Lines;
+ }
+ else
+ {
+ $New_Line .= $&;
+ };
+ $Line = $';
+ };
+
+ $Buffer .= "\n" if ($Num_Lines++);
+ $Buffer .= "$Offset$New_Line$Line";
+ $Offset = $Space_Offset if (($Offset) && ($Offset_Once));
+ }
+
+ else
+ {
+ $Buffer .= "\n$Blank_Offset";
+ };
+ };
+
+ return ($Buffer);
+
+};
+
+1;
diff --git a/mmuegel/libs/timespec.pl b/mmuegel/libs/timespec.pl
new file mode 100644
index 0000000..06b048d
--- /dev/null
+++ b/mmuegel/libs/timespec.pl
@@ -0,0 +1,60 @@
+;# NAME
+;# timespec.pl - convert a pre-defined time specifyer to seconds
+;#
+;# AUTHOR
+;# Michael S. Muegel (mmuegel@mot.com)
+;#
+;# RCS INFORMATION
+;# mmuegel
+;# /usr/local/ustart/src/mail-tools/dist/foo/libs/timespec.pl,v 1.1 1993/07/28 08:07:19 mmuegel Exp
+
+package timespec;
+
+%TIME_SPEC_TO_SECONDS = ("s", 1,
+ "m", 60,
+ "h", 60 * 60,
+ "d", 60 * 60 * 24
+ );
+
+$VALID_TIME_SPEC_EXPR = "[" . join ("", keys (%TIME_SPEC_TO_SECONDS)) . "]";
+
+;###############################################################################
+;# Time_Spec_To_Seconds
+;#
+;# Converts a string of the form:
+;#
+;# (<number>(s|m|h|d))+
+;#
+;# to seconds. The second part of the time spec specifies seconds, minutes,
+;# hours, or days, respectfully. The first part is the number of those untis.
+;# There can be any number of such specifiers. As an example, 1h30m means 1
+;# hour and 30 minutes.
+;#
+;# If the parsing went OK then $Status is 1, $Msg is undefined, and $Seconds
+;# is $Time_Spec converted to seconds. If something went wrong then $Status
+;# is 0 and $Msg explains what went wrong.
+;#
+;# Arguments:
+;# $Time_Spec
+;#
+;# Returns:
+;# $Status, $Msg, $Seconds
+;###############################################################################
+sub main'Time_Spec_To_Seconds
+{
+ $Time_Spec = $_[0];
+
+ $Seconds = 0;
+ while ($Time_Spec =~ /^(\d+)($VALID_TIME_SPEC_EXPR)/)
+ {
+ $Seconds += $1 * $TIME_SPEC_TO_SECONDS {$2};
+ $Time_Spec = $';
+ };
+
+ return (0, "error parsing time spec: $Time_Spec") if ($Time_Spec ne "");
+ return (1, "", $Seconds);
+
+};
+
+
+1;
diff --git a/mmuegel/man/cqueue.1 b/mmuegel/man/cqueue.1
new file mode 100644
index 0000000..56e534b
--- /dev/null
+++ b/mmuegel/man/cqueue.1
@@ -0,0 +1,166 @@
+.TH CQUEUE 1L
+\"
+\" mmuegel
+\" /usr/local/ustart/src/mail-tools/dist/foo/man/cqueue.1,v 1.1 1993/07/28 08:08:25 mmuegel Exp
+\"
+.ds mp \fBcqueue\fR
+.de IB
+.IP \(bu 2
+..
+.SH NAME
+\*(mp - check sendmail queue for problems
+.SH SYNOPSIS
+.IP \*(mp 7
+[ \fB-abdms\fR ] [ \fB-q\fR \fIqueue-dir\fI ] [ \fB-t\fR \fItime\fR ]
+[ \fB-u\fR \fIusers\fR ] [ \fB-w\fR \fIwidth\fR ]
+.SH DESCRIPTION
+Reports on problems in the sendmail queue. With no options this simply
+means listing messages that have been in the queue longer than a default
+period along with a summary of queue mail by host and status message.
+.SH OPTIONS
+.IP \fB-a\fR 14
+Report on all messages in the queue. This is equivalent to saying \fB-t\fR 0s.
+You may like this command so much that you use it as a replacement for
+\fBmqueue\fR. For example:
+.sp 1
+.RS
+.RS
+\fBalias mqueue cqueue -a\fR
+.RE
+.RE
+.IP \fB-b\fR 14
+Also report on bogus queue files. Those are files that
+have data files and no control files or vice versa.
+.IP \fB-d\fR
+Print a detailed report of mail messages that have been queued longer than
+the specified or default time. Information that is presented includes:
+.RS
+.RS
+.IB
+Sendmail queue identifier.
+.IB
+Date the message was first queued.
+.IB
+Sender of the message.
+.IB
+One or more recipients of the message.
+.IB
+An optional status of the message. This usually indicates why the message
+has not been delivered.
+.RE
+.RE
+.IP \fB-m\fR 14
+Mail off the results if any problems were found.
+Normaly results are printed to stdout. If this option
+is specified they are mailed to one or more users. Results
+are not printed to stdout in this case. Results are \fBonly\fR
+mailed if \*(mp found something wrong.
+.IP "\fB-q\fR \fIqueue-dir\fI"
+The sendmail mail queue directory. Default is \fB/usr/spool/mqueue\fR or
+some other site configured value.
+.IP "\fB-t\fR \fItime\fR"
+List messages that have been in the queue longer than
+\fItime\fR. Time should of the form:
+.sp 1
+.RS
+.RS
+(<number>(s|m|h|d))+
+.sp 1
+.RE
+.RE
+.RS 14
+The second portion of the above definition
+specifies seconds, minutes, hours, or
+days, respectfully. The first portion is the number of
+those units. There can be any number of such specifiers.
+As an example, 1h30m means 1 hour and 30 minutes.
+.sp 1
+The default is 2 hours.
+.RE
+.IP \fB-s\fR 14
+Print a summary of messages that have been queued longer than
+the specified or default time. Two separate types of summaries are printed.
+The first summarizes the queue messages by destination host. The host name
+is gleaned from the recipient addresses for each message.
+Thus the actual host names for this summary should be taken with a grain
+of salt since ruleset 0 has not been applied to the address the host was
+taken from nor were MX records consulted. It would be possible to add
+this; however, the execution time of the script would increase
+dramatically. The second summary is by status message.
+.IP "\fB-u\fR \fIusers\fR"
+Specify list of users to send a mail report to other than
+the invoker. This option is only valid when \fB-m\fR has been
+specified. Multiple recipients may be separated by spaces.
+.IP "\fB-w\fR \fIwidth\fR"
+Specify the page width to which the output should tailored. \fIwidth\fR
+should be an integer representing some character position. The default is
+80 or some other site configured value. Output is folded neatly to match
+\fIwidth\fR.
+.SH EXAMPLES
+.nf
+% \fBdate\fR
+Tue Jan 19 12:07:20 CST 1993
+
+% \fBcqueue -t 21h45m -w 70\fR
+
+Summary of messages in queue longer than 21:45:00 by destination
+host:
+
+ Number of
+ Messages Destination Host
+ --------- ----------------
+ 2 cigseg.rtsg.mot.com
+ 1 mnesouth.corp.mot.com
+ ---------
+ 3
+
+Summary of messages in queue longer than 21:45:00 by status message:
+
+ Number of
+ Messages Status Message
+ --------- --------------
+ 1 Deferred: Connection refused by mnesouth.corp.mot.com
+ 2 Deferred: Host Name Lookup Failure
+ ---------
+ 3
+
+Detail of messages in queue longer than 21:45:00 sorted by creation
+date:
+
+ ID: AA20573
+ Date: 02:09:27 PM 01/18/93
+ Sender: melrose-place-owner@ferkel.ucsb.edu
+ Recipient: pbaker@cigseg.rtsg.mot.com
+ Status: Deferred: Host Name Lookup Failure
+
+ ID: AA20757
+ Date: 02:11:30 PM 01/18/93
+ Sender: 90210-owner@ferkel.ucsb.edu
+ Recipient: pbaker@cigseg.rtsg.mot.com
+ Status: Deferred: Host Name Lookup Failure
+
+ ID: AA21110
+ Date: 02:17:01 PM 01/18/93
+ Sender: rd_lap_wg@mdd.comm.mot.com
+ Recipient: jim_mathis@mnesouth.corp.mot.com
+ Status: Deferred: Connection refused by mnesouth.corp.mot.com
+.fi
+.SH AUTHOR
+.nf
+Michael S. Muegel (mmuegel@mot.com)
+UNIX Applications Startup Group
+Corporate Information Office, Schaumburg, IL
+Motorola, Inc.
+.fi
+.SH COPYRIGHT NOTICE
+Copyright 1993, Motorola, Inc.
+.sp 1
+Permission to use, copy, modify and distribute without charge this
+software, documentation, etc. is granted, provided that this
+comment and the author's name is retained. The author nor Motorola assume any
+responsibility for problems resulting from the use of this software.
+.SH SEE ALSO
+.nf
+\fBsendmail(8)\fR
+\fISendmail Installation and Operation Guide\fR.
+.fi
diff --git a/mmuegel/man/postclip.1 b/mmuegel/man/postclip.1
new file mode 100644
index 0000000..6c33ef2
--- /dev/null
+++ b/mmuegel/man/postclip.1
@@ -0,0 +1,59 @@
+.TH POSTCLIP 1L
+\"
+\" mmuegel
+\" /usr/local/ustart/src/mail-tools/dist/foo/man/postclip.1,v 1.1 1993/07/28 08:08:25 mmuegel Exp
+\"
+.ds mp \fBpostclip\fR
+.SH NAME
+\*(mp - send only the headers to Postmaster
+.SH SYNOPSIS
+\*(mp [ \fB-v\fR ] [ \fIto\fR ... ]
+.SH DESCRIPTION
+\*(mp will forward non-delivery reports to a postmaster after deleting the body
+of the message. This keeps bounced mail private and helps to avoid disk space problems. \*(mp tries its best to keep as much of the header trail as possible.
+Hopefully only the original body of the message will be filtered. Only messages
+that have a subject that begins with 'Returned mail:' are filtered. This
+ensures that other mail is not accidently mucked with. Finally, note that
+\fBsendmail\fR is used to deliver the message after it has been (possibly)
+filtered. All of the original headers will remain intact.
+.sp 1
+You can use this with any \fBsendmail\fR by modifying the Postmaster alias.
+If you use IDA \fBsendmail\fR you could add the following to <machine>.m4:
+.sp 1
+.RS
+define(POSTMASTERBOUNCE, mailer-errors)
+.RE
+.sp 1
+In the aliases file, add a line similar to the following:
+.sp 1
+.RS
+mailer-errors: "|/usr/local/bin/postclip postmaster"
+.RE
+.SH OPTIONS
+.IP \fB-v\fR
+Be verbose about delivery. Probably only useful when debugging \*(mp.
+.IP \fIto\fR
+A list of one or more e-mail ids to send the modified
+Postmaster messages to. If none are specified postmaster
+is used.
+.SH AUTHOR
+.nf
+Michael S. Muegel (mmuegel@mot.com)
+UNIX Applications Startup Group
+Corporate Information Office, Schaumburg, IL
+Motorola, Inc.
+.fi
+.SH CREDITS
+The original idea to filter Postmaster mail was taken from a script by
+Christopher Davis <ckd@eff.org>.
+.SH COPYRIGHT NOTICE
+Copyright 1992, Motorola, Inc.
+.sp 1
+Permission to use, copy, modify and distribute without charge this
+software, documentation, etc. is granted, provided that this
+comment and the author's name is retained. The author nor Motorola assume any
+responsibility for problems resulting from the use of this software.
+.SH SEE ALSO
+.nf
+\fBsendmail(8)\fR
+.fi
diff --git a/mmuegel/src/cqueue b/mmuegel/src/cqueue
new file mode 100644
index 0000000..f94252a
--- /dev/null
+++ b/mmuegel/src/cqueue
@@ -0,0 +1,242 @@
+#!/usr/bin/perl
+
+# NAME
+# cqueue - check sendmail queue for problems
+#
+# SYNOPSIS
+# Type cqueue -usage
+#
+# AUTHOR
+# Michael S. Muegel <mmuegel@mot.com>
+#
+# RCS INFORMATION
+# mmuegel
+# /usr/local/ustart/src/mail-tools/dist/foo/src/cqueue,v 1.1 1993/07/28 08:09:02 mmuegel Exp
+
+# So that date.pl does not yell (Domain/OS version does a ``)
+$ENV{'PATH'} = "";
+
+# A better getopts routine
+require "newgetopts.pl";
+require "timespec.pl";
+require "mail.pl";
+require "date.pl";
+require "mqueue.pl";
+require "strings1.pl";
+require "elapsed.pl";
+
+($Script_Name = $0) =~ s/.*\///;
+
+# Some defaults you may want to change
+$DEF_TIME = "2h";
+$DEF_QUEUE = "/usr/spool/mqueue";
+$DEF_COLUMNS = 80;
+$DATE_FORMAT = "%r %D";
+
+# Constants that probably should not be changed
+$USAGE = "Usage: $Script_Name [ -abdms ] [ -q queue-dir ] [ -t time ] [ -u user ] [ -w width ]\n";
+$VERSION = "${Script_Name} by mmuegel; 1.1 of 1993/07/28 08:09:02";
+$SWITCHES = "abdmst:u:q:w:";
+$SPLIT_EXPR = '\s,\.@!%:';
+$ADDR_PART_EXPR = '[^!@%]+';
+
+# Let getopts parse for switches
+$Status = &New_Getopts ($SWITCHES, $USAGE);
+exit (0) if ($Status == -1);
+exit (1) if (! $Status);
+
+# Check args
+die "${Script_Name}: -u only valid with -m\n" if (($opt_u) && (! $opt_m));
+die "${Script_Name}: -a not valid with -t option\n" if ($opt_a && $opt_t);
+$opt_u = getlogin || (getpwuid ($<))[0] || $ENV{"USER"} || die "${Script_Name}: can not determine who you are!\n" if (! $opt_u);
+
+# Set defaults
+$opt_t = "0s" if ($opt_a);
+$opt_t = $DEF_TIME if ($opt_t eq "");
+$opt_w = $DEF_COLUMNS if ($opt_w eq "");
+$opt_q = $DEF_QUEUE if ($opt_q eq "");
+$opt_s = $opt_d = 1 if (! ($opt_s || $opt_d));
+
+# Untaint the users to mail to
+$opt_u =~ /^(.*)$/;
+$Users = $1;
+
+# Convert time option to seconds and seconds to elapsed form
+die "${Script_Name}: $Msg\n" if (! (($Status, $Msg, $Seconds) = &Time_Spec_To_Seconds ($opt_t))[0]);
+$Elapsed = &Seconds_To_Elapsed ($Seconds, 1);
+$Time_Info = " longer than $Elapsed" if ($Seconds);
+
+# Get the current time
+$Current_Time = time;
+$Current_Date = &date ($Current_Time, $DATE_FORMAT);
+
+($Status, $Msg, @Queue_IDs) = &Get_Queue_IDs ($opt_q, 1, @Missing_Control_IDs,
+ @Missing_Data_IDs);
+die "$Script_Name: $Msg\n" if (! $Status);
+
+# Yell about missing data/control files?
+if ($opt_b)
+{
+
+ $Report = "\nMessages missing control files:\n\n " .
+ join ("\n ", @Missing_Control_IDs) .
+ "\n"
+ if (@Missing_Control_IDs);
+
+ $Report .= "\nMessages missing data files:\n\n " .
+ join ("\n ", @Missing_Data_IDs) .
+ "\n"
+ if (@Missing_Data_IDs);
+};
+
+# See if any mail messages are older than $Seconds
+foreach $Queue_ID (@Queue_IDs)
+{
+ # Get lots of info about this sendmail message via the control file
+ ($Status, $Msg) = &Parse_Control_File ($opt_q, $Queue_ID, *Sender,
+ *Recipients, *Errors_To, *Creation_Time, *Priority, *Status_Message,
+ *Headers);
+ next if ($Status == -1);
+ if (! $Status)
+ {
+ warn "$Script_Name: $Queue_ID: $Msg\n";
+ next;
+ };
+
+ # Report on message if it is older than $Seconds
+ if ($Current_Time - $Creation_Time >= $Seconds)
+ {
+ # Build summary by host information. Keep track of each host destination
+ # encountered.
+ if ($opt_s)
+ {
+ %Host_Map = ();
+ foreach (@Recipients)
+ {
+ if ((/@($ADDR_PART_EXPR)$/) || (/($ADDR_PART_EXPR)!$ADDR_PART_EXPR$/))
+ {
+ ($Host = $1) =~ tr/A-Z/a-z/;
+ $Host_Map {$Host} = 1;
+ }
+ else
+ {
+ warn "$Script_Name: could not find host part from $_; contact author\n";
+ };
+ };
+
+ # For each unique target host add to its stats
+ grep ($Host_Queued {$_}++, keys (%Host_Map));
+
+ # Build summary by message information.
+ $Message_Queued {$Status_Message}++ if ($Status_Message);
+ };
+
+ # Build long report information for this creation time (there may be
+ # more than one message created at the same time)
+ if ($opt_d)
+ {
+ $Creation_Date = &date ($Creation_Time, $DATE_FORMAT);
+ $Recipient_Info = &Format_Text_Block (join (", ", @Recipients),
+ " Recipient: ", 1, 0, $opt_w, $SPLIT_EXPR);
+ $Time_To_Report {$Creation_Time} .= <<"EOS";
+
+ ID: $Queue_ID
+ Date: $Creation_Date
+ Sender: $Sender
+$Recipient_Info
+EOS
+
+ # Add the status message if available to long report
+ if ($Status_Message)
+ {
+ $Time_To_Report {$Creation_Time} .= &Format_Text_Block ($Status_Message,
+ " Status: ", 1, 0, $opt_w, $SPLIT_EXPR) . "\n";
+ };
+ };
+ };
+
+};
+
+# Add the summary report by target host?
+if ($opt_s)
+{
+ foreach $Host (sort (keys (%Host_Queued)))
+ {
+ $Host_Report .= &Format_Text_Block ($Host,
+ sprintf (" %-9d ", $Host_Queued{$Host}), 1, 0, $opt_w,
+ $SPLIT_EXPR) . "\n";
+ $Num_Hosts += $Host_Queued{$Host};
+ };
+ if ($Host_Report)
+ {
+ chop ($Host_Report);
+ $Report .= &Format_Text_Block("\nSummary of messages in queue$Time_Info by destination host:\n", "", 0, 0, $opt_w);
+
+ $Report .= <<"EOS";
+
+ Number of
+ Messages Destination Host
+ --------- ----------------
+$Host_Report
+ ---------
+ $Num_Hosts
+EOS
+ };
+};
+
+# Add the summary by message report?
+if ($opt_s)
+{
+ foreach $Message (sort (keys (%Message_Queued)))
+ {
+ $Message_Report .= &Format_Text_Block ($Message,
+ sprintf (" %-9d ", $Message_Queued{$Message}), 1, 0, $opt_w,
+ $SPLIT_EXPR) . "\n";
+ $Num_Messages += $Message_Queued{$Message};
+ };
+ if ($Message_Report)
+ {
+ chop ($Message_Report);
+ $Report .= &Format_Text_Block ("\nSummary of messages in queue$Time_Info by status message:\n", "", 0, 0, $opt_w);
+
+ $Report .= <<"EOS";
+
+ Number of
+ Messages Status Message
+ --------- --------------
+$Message_Report
+ ---------
+ $Num_Messages
+EOS
+ };
+};
+
+# Add the detailed message reports?
+if ($opt_d)
+{
+ foreach $Time (sort { $a <=> $b} (keys (%Time_To_Report)))
+ {
+ $Report .= &Format_Text_Block ("\nDetail of messages in queue$Time_Info sorted by creation date:\n","", 0, 0, $opt_w) if (! $Detailed_Header++);
+ $Report .= $Time_To_Report {$Time};
+ };
+};
+
+# Now mail or print the report
+if ($Report)
+{
+ $Report .= "\n";
+ if ($opt_m)
+ {
+ ($Status, $Msg) = &Send_Mail ($Users, "sendmail queue report for $Current_Date", $Report, 0);
+ die "${Script_Name}: $Msg" if (! $Status);
+ }
+
+ else
+ {
+ print $Report;
+ };
+
+};
+
+# I am outta here...
+exit (0);
diff --git a/mmuegel/src/postclip b/mmuegel/src/postclip
new file mode 100644
index 0000000..63f6df0
--- /dev/null
+++ b/mmuegel/src/postclip
@@ -0,0 +1,74 @@
+#!/usr/local/bin/perl
+
+# NAME
+# postclip - send only the headers to Postmaster
+#
+# SYNOPSIS
+# postclip [ -v ] [ to ... ]
+#
+# AUTHOR
+# Michael S. Muegel <mmuegel@mot.com>
+#
+# RCS INFORMATION
+# /usr/local/ustart/src/mail-tools/dist/foo/src/postclip,v
+# 1.1 of 1993/07/28 08:09:02
+
+# We use this to send off the mail
+require "newgetopts.pl";
+require "mail.pl";
+
+# Get the basename of the script
+($Script_Name = $0) =~ s/.*\///;
+
+# Some famous constants
+$USAGE = "Usage: $Script_Name [ -v ] [ to ... ]\n";
+$VERSION = "${Script_Name} by mmuegel; 1.1 of 1993/07/28 08:09:02";
+$SWITCHES = "v";
+
+# Let getopts parse for switches
+$Status = &New_Getopts ($SWITCHES, $USAGE);
+exit (0) if ($Status == -1);
+exit (1) if (! $Status);
+
+# Who should we send the modified mail to?
+@ARGV = ("postmaster") if (! @ARGV);
+$Users = join (" ", @ARGV);
+@ARGV = ();
+
+# Suck in the original header and save a few interesting lines
+while (<>)
+{
+ $Buffer .= $_ if (! /^From /);
+ $Subject = $1 if (/^Subject:\s+(.*)$/);
+ $From = $1 if (/^From:\s+(.*)$/);
+ last if (/^$/);
+};
+
+# Do not filter the message unless it has a subject and the subject indicates
+# it is an NDN
+if ($Subject && ($Subject =~ /^returned mail/i))
+{
+ # Slurp input by paragraph. Keep track of the last time we saw what
+ # appeared to be NDN text. We keep this.
+ $/ = "\n\n";
+ $* = 1;
+ while (<>)
+ {
+ push (@Paragraphs, $_);
+ $Last_Error_Para = $#Paragraphs
+ if (/unsent message follows/i || /was not delivered because/);
+ };
+
+ # Now save the NDN text into $Buffer
+ $Buffer .= join ("", @Paragraphs [0..$Last_Error_Para]);
+}
+
+else
+{
+ undef $/;
+ $Buffer .= <>;
+};
+
+# Send off the (possibly) modified mail
+($Status, $Msg) = &Send_Mail ($Users, "", $Buffer, 0, $opt_v, 1);
+die "$Script_Name: $Msg\n" if (! $Status);
diff --git a/src/collect.c b/src/collect.c
index 58f0dc7..d3a1f18 100644
--- a/src/collect.c
+++ b/src/collect.c
@@ -375,8 +375,12 @@ nextstate:
if (*--bp != '\n' || *--bp != '\r')
bp++;
*bp = '\0';
- if (bitset(H_EOH, chompheader(buf, FALSE, hdrp, e)))
- mstate = MS_BODY;
+ if (bitset(H_EOH, chompheader(buf, FALSE, hdrp, e))) {
+ mstate = MS_BODY;
+ if (tTd(30, 35))
+ printf("H_EOH, istate=%d, mstate=%d\n", istate, mstate);
+ goto nextstate;
+ }
break;
case MS_BODY:
diff --git a/src/collect.c.orig b/src/collect.c.orig
new file mode 100644
index 0000000..58f0dc7
--- /dev/null
+++ b/src/collect.c.orig
@@ -0,0 +1,761 @@
+/*
+ * Copyright (c) 1983, 1995-1997 Eric P. Allman
+ * Copyright (c) 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)collect.c 8.72 (Berkeley) 10/6/97";
+#endif /* not lint */
+
+# include <errno.h>
+# include "sendmail.h"
+
+/*
+** COLLECT -- read & parse message header & make temp file.
+**
+** Creates a temporary file name and copies the standard
+** input to that file. Leading UNIX-style "From" lines are
+** stripped off (after important information is extracted).
+**
+** Parameters:
+** fp -- file to read.
+** smtpmode -- if set, we are running SMTP: give an RFC821
+** style message to say we are ready to collect
+** input, and never ignore a single dot to mean
+** end of message.
+** hdrp -- the location to stash the header.
+** e -- the current envelope.
+**
+** Returns:
+** none.
+**
+** Side Effects:
+** Temp file is created and filled.
+** The from person may be set.
+*/
+
+static jmp_buf CtxCollectTimeout;
+static void collecttimeout();
+static bool CollectProgress;
+static EVENT *CollectTimeout;
+
+/* values for input state machine */
+#define IS_NORM 0 /* middle of line */
+#define IS_BOL 1 /* beginning of line */
+#define IS_DOT 2 /* read a dot at beginning of line */
+#define IS_DOTCR 3 /* read ".\r" at beginning of line */
+#define IS_CR 4 /* read a carriage return */
+
+/* values for message state machine */
+#define MS_UFROM 0 /* reading Unix from line */
+#define MS_HEADER 1 /* reading message header */
+#define MS_BODY 2 /* reading message body */
+
+void
+collect(fp, smtpmode, hdrp, e)
+ FILE *fp;
+ bool smtpmode;
+ HDR **hdrp;
+ register ENVELOPE *e;
+{
+ register FILE *volatile tf;
+ volatile bool ignrdot = smtpmode ? FALSE : IgnrDot;
+ volatile time_t dbto = smtpmode ? TimeOuts.to_datablock : 0;
+ register char *volatile bp;
+ volatile int c = EOF;
+ volatile bool inputerr = FALSE;
+ bool headeronly;
+ char *volatile buf;
+ volatile int buflen;
+ volatile int istate;
+ volatile int mstate;
+ u_char *volatile pbp;
+ u_char peekbuf[8];
+ char dfname[MAXQFNAME];
+ char bufbuf[MAXLINE];
+ extern bool isheader();
+ extern void eatheader();
+ extern void tferror();
+
+ headeronly = hdrp != NULL;
+
+ /*
+ ** Create the temp file name and create the file.
+ */
+
+ if (!headeronly)
+ {
+ int tfd;
+ struct stat stbuf;
+
+ strcpy(dfname, queuename(e, 'd'));
+ tfd = dfopen(dfname, O_WRONLY|O_CREAT|O_TRUNC, FileMode, SFF_ANYFILE);
+ if (tfd < 0 || (tf = fdopen(tfd, "w")) == NULL)
+ {
+ syserr("Cannot create %s", dfname);
+ e->e_flags |= EF_NO_BODY_RETN;
+ finis();
+ }
+ if (fstat(fileno(tf), &stbuf) < 0)
+ e->e_dfino = -1;
+ else
+ {
+ e->e_dfdev = stbuf.st_dev;
+ e->e_dfino = stbuf.st_ino;
+ }
+ HasEightBits = FALSE;
+ e->e_msgsize = 0;
+ e->e_flags |= EF_HAS_DF;
+ }
+
+ /*
+ ** Tell ARPANET to go ahead.
+ */
+
+ if (smtpmode)
+ message("354 Enter mail, end with \".\" on a line by itself");
+
+ if (tTd(30, 2))
+ printf("collect\n");
+
+ /*
+ ** Read the message.
+ **
+ ** This is done using two interleaved state machines.
+ ** The input state machine is looking for things like
+ ** hidden dots; the message state machine is handling
+ ** the larger picture (e.g., header versus body).
+ */
+
+ buf = bp = bufbuf;
+ buflen = sizeof bufbuf;
+ pbp = peekbuf;
+ istate = IS_BOL;
+ mstate = SaveFrom ? MS_HEADER : MS_UFROM;
+ CollectProgress = FALSE;
+
+ if (dbto != 0)
+ {
+ /* handle possible input timeout */
+ if (setjmp(CtxCollectTimeout) != 0)
+ {
+ if (LogLevel > 2)
+ sm_syslog(LOG_NOTICE, e->e_id,
+ "timeout waiting for input from %s during message collect",
+ CurHostName ? CurHostName : "<local machine>");
+ errno = 0;
+ usrerr("451 timeout waiting for input during message collect");
+ goto readerr;
+ }
+ CollectTimeout = setevent(dbto, collecttimeout, dbto);
+ }
+
+ for (;;)
+ {
+ if (tTd(30, 35))
+ printf("top, istate=%d, mstate=%d\n", istate, mstate);
+ for (;;)
+ {
+ if (pbp > peekbuf)
+ c = *--pbp;
+ else
+ {
+ while (!feof(fp) && !ferror(fp))
+ {
+ errno = 0;
+ c = getc(fp);
+ if (errno != EINTR)
+ break;
+ clearerr(fp);
+ }
+ CollectProgress = TRUE;
+ if (TrafficLogFile != NULL && !headeronly)
+ {
+ if (istate == IS_BOL)
+ fprintf(TrafficLogFile, "%05d <<< ",
+ (int) getpid());
+ if (c == EOF)
+ fprintf(TrafficLogFile, "[EOF]\n");
+ else
+ putc(c, TrafficLogFile);
+ }
+ if (c == EOF)
+ goto readerr;
+ if (SevenBitInput)
+ c &= 0x7f;
+ else
+ HasEightBits |= bitset(0x80, c);
+ }
+ if (tTd(30, 94))
+ printf("istate=%d, c=%c (0x%x)\n",
+ istate, c, c);
+ switch (istate)
+ {
+ case IS_BOL:
+ if (c == '.')
+ {
+ istate = IS_DOT;
+ continue;
+ }
+ break;
+
+ case IS_DOT:
+ if (c == '\n' && !ignrdot &&
+ !bitset(EF_NL_NOT_EOL, e->e_flags))
+ goto readerr;
+ else if (c == '\r' &&
+ !bitset(EF_CRLF_NOT_EOL, e->e_flags))
+ {
+ istate = IS_DOTCR;
+ continue;
+ }
+ else if (c != '.' ||
+ (OpMode != MD_SMTP &&
+ OpMode != MD_DAEMON &&
+ OpMode != MD_ARPAFTP))
+ {
+ *pbp++ = c;
+ c = '.';
+ }
+ break;
+
+ case IS_DOTCR:
+ if (c == '\n' && !ignrdot)
+ goto readerr;
+ else
+ {
+ /* push back the ".\rx" */
+ *pbp++ = c;
+ *pbp++ = '\r';
+ c = '.';
+ }
+ break;
+
+ case IS_CR:
+ if (c == '\n')
+ istate = IS_BOL;
+ else
+ {
+ ungetc(c, fp);
+ c = '\r';
+ istate = IS_NORM;
+ }
+ goto bufferchar;
+ }
+
+ if (c == '\r' && !bitset(EF_CRLF_NOT_EOL, e->e_flags))
+ {
+ istate = IS_CR;
+ continue;
+ }
+ else if (c == '\n' && !bitset(EF_NL_NOT_EOL, e->e_flags))
+ istate = IS_BOL;
+ else
+ istate = IS_NORM;
+
+bufferchar:
+ if (!headeronly)
+ e->e_msgsize++;
+ if (mstate == MS_BODY)
+ {
+ /* just put the character out */
+ if (MaxMessageSize <= 0 ||
+ e->e_msgsize <= MaxMessageSize)
+ putc(c, tf);
+ continue;
+ }
+
+ /* header -- buffer up */
+ if (bp >= &buf[buflen - 2])
+ {
+ char *obuf;
+
+ if (mstate != MS_HEADER)
+ break;
+
+ /* out of space for header */
+ obuf = buf;
+ if (buflen < MEMCHUNKSIZE)
+ buflen *= 2;
+ else
+ buflen += MEMCHUNKSIZE;
+ buf = xalloc(buflen);
+ bcopy(obuf, buf, bp - obuf);
+ bp = &buf[bp - obuf];
+ if (obuf != bufbuf)
+ free(obuf);
+ }
+ if (c >= 0200 && c <= 0237)
+ {
+#if 0 /* causes complaints -- figure out something for 8.9 */
+ usrerr("Illegal character 0x%x in header", c);
+#endif
+ }
+ else if (c != '\0')
+ *bp++ = c;
+ if (istate == IS_BOL)
+ break;
+ }
+ *bp = '\0';
+
+nextstate:
+ if (tTd(30, 35))
+ printf("nextstate, istate=%d, mstate=%d, line = \"%s\"\n",
+ istate, mstate, buf);
+ switch (mstate)
+ {
+ extern int chompheader();
+
+ case MS_UFROM:
+ mstate = MS_HEADER;
+#ifndef NOTUNIX
+ if (strncmp(buf, "From ", 5) == 0)
+ {
+ extern void eatfrom();
+
+ bp = buf;
+ eatfrom(buf, e);
+ continue;
+ }
+#endif
+ /* fall through */
+
+ case MS_HEADER:
+ if (!isheader(buf))
+ {
+ mstate = MS_BODY;
+ goto nextstate;
+ }
+
+ /* check for possible continuation line */
+ do
+ {
+ clearerr(fp);
+ errno = 0;
+ c = getc(fp);
+ } while (errno == EINTR);
+ if (c != EOF)
+ ungetc(c, fp);
+ if (c == ' ' || c == '\t')
+ {
+ /* yep -- defer this */
+ continue;
+ }
+
+ /* trim off trailing CRLF or NL */
+ if (*--bp != '\n' || *--bp != '\r')
+ bp++;
+ *bp = '\0';
+ if (bitset(H_EOH, chompheader(buf, FALSE, hdrp, e)))
+ mstate = MS_BODY;
+ break;
+
+ case MS_BODY:
+ if (tTd(30, 1))
+ printf("EOH\n");
+ if (headeronly)
+ goto readerr;
+ bp = buf;
+
+ /* toss blank line */
+ if ((!bitset(EF_CRLF_NOT_EOL, e->e_flags) &&
+ bp[0] == '\r' && bp[1] == '\n') ||
+ (!bitset(EF_NL_NOT_EOL, e->e_flags) &&
+ bp[0] == '\n'))
+ {
+ break;
+ }
+
+ /* if not a blank separator, write it out */
+ if (MaxMessageSize <= 0 ||
+ e->e_msgsize <= MaxMessageSize)
+ {
+ while (*bp != '\0')
+ putc(*bp++, tf);
+ }
+ break;
+ }
+ bp = buf;
+ }
+
+readerr:
+ if ((feof(fp) && smtpmode) || ferror(fp))
+ {
+ const char *errmsg = errstring(errno);
+
+ if (tTd(30, 1))
+ printf("collect: premature EOM: %s\n", errmsg);
+ if (LogLevel >= 2)
+ sm_syslog(LOG_WARNING, e->e_id,
+ "collect: premature EOM: %s", errmsg);
+ inputerr = TRUE;
+ }
+
+ /* reset global timer */
+ clrevent(CollectTimeout);
+
+ if (headeronly)
+ return;
+
+ if (tf != NULL &&
+ (fflush(tf) != 0 || ferror(tf) ||
+ (SuperSafe && fsync(fileno(tf)) < 0) ||
+ fclose(tf) < 0))
+ {
+ tferror(tf, e);
+ flush_errors(TRUE);
+ finis();
+ }
+
+ /* An EOF when running SMTP is an error */
+ if (inputerr && (OpMode == MD_SMTP || OpMode == MD_DAEMON))
+ {
+ char *host;
+ char *problem;
+
+ host = RealHostName;
+ if (host == NULL)
+ host = "localhost";
+
+ if (feof(fp))
+ problem = "unexpected close";
+ else if (ferror(fp))
+ problem = "I/O error";
+ else
+ problem = "read timeout";
+ if (LogLevel > 0 && feof(fp))
+ sm_syslog(LOG_NOTICE, e->e_id,
+ "collect: %s on connection from %.100s, sender=%s: %s",
+ problem, host,
+ shortenstring(e->e_from.q_paddr, 203),
+ errstring(errno));
+ if (feof(fp))
+ usrerr("451 collect: %s on connection from %s, from=%s",
+ problem, host,
+ shortenstring(e->e_from.q_paddr, 203));
+ else
+ syserr("451 collect: %s on connection from %s, from=%s",
+ problem, host,
+ shortenstring(e->e_from.q_paddr, 203));
+
+ /* don't return an error indication */
+ e->e_to = NULL;
+ e->e_flags &= ~EF_FATALERRS;
+ e->e_flags |= EF_CLRQUEUE;
+
+ /* and don't try to deliver the partial message either */
+ if (InChild)
+ ExitStat = EX_QUIT;
+ finis();
+ }
+
+ /*
+ ** Find out some information from the headers.
+ ** Examples are who is the from person & the date.
+ */
+
+ eatheader(e, TRUE);
+
+ if (GrabTo && e->e_sendqueue == NULL)
+ usrerr("No recipient addresses found in header");
+
+ /* collect statistics */
+ if (OpMode != MD_VERIFY)
+ {
+ extern void markstats();
+
+ markstats(e, (ADDRESS *) NULL);
+ }
+
+#if _FFR_DSN_RRT_OPTION
+ /*
+ ** If we have a Return-Receipt-To:, turn it into a DSN.
+ */
+
+ if (RrtImpliesDsn && hvalue("return-receipt-to", e->e_header) != NULL)
+ {
+ ADDRESS *q;
+
+ for (q = e->e_sendqueue; q != NULL; q = q->q_next)
+ if (!bitset(QHASNOTIFY, q->q_flags))
+ q->q_flags |= QHASNOTIFY|QPINGONSUCCESS;
+ }
+#endif
+
+ /*
+ ** Add an Apparently-To: line if we have no recipient lines.
+ */
+
+ if (hvalue("to", e->e_header) != NULL ||
+ hvalue("cc", e->e_header) != NULL ||
+ hvalue("apparently-to", e->e_header) != NULL)
+ {
+ /* have a valid recipient header -- delete Bcc: headers */
+ e->e_flags |= EF_DELETE_BCC;
+ }
+ else if (hvalue("bcc", e->e_header) == NULL)
+ {
+ /* no valid recipient headers */
+ register ADDRESS *q;
+ char *hdr = NULL;
+ extern void addheader();
+
+ /* create an Apparently-To: field */
+ /* that or reject the message.... */
+ switch (NoRecipientAction)
+ {
+ case NRA_ADD_APPARENTLY_TO:
+ hdr = "Apparently-To";
+ break;
+
+ case NRA_ADD_TO:
+ hdr = "To";
+ break;
+
+ case NRA_ADD_BCC:
+ addheader("Bcc", " ", &e->e_header);
+ break;
+
+ case NRA_ADD_TO_UNDISCLOSED:
+ addheader("To", "undisclosed-recipients:;", &e->e_header);
+ break;
+ }
+
+ if (hdr != NULL)
+ {
+ for (q = e->e_sendqueue; q != NULL; q = q->q_next)
+ {
+ if (q->q_alias != NULL)
+ continue;
+ if (tTd(30, 3))
+ printf("Adding %s: %s\n",
+ hdr, q->q_paddr);
+ addheader(hdr, q->q_paddr, &e->e_header);
+ }
+ }
+ }
+
+ /* check for message too large */
+ if (MaxMessageSize > 0 && e->e_msgsize > MaxMessageSize)
+ {
+ e->e_flags |= EF_NO_BODY_RETN|EF_CLRQUEUE;
+ e->e_status = "5.2.3";
+ usrerr("552 Message exceeds maximum fixed size (%ld)",
+ MaxMessageSize);
+ if (LogLevel > 6)
+ sm_syslog(LOG_NOTICE, e->e_id,
+ "message size (%ld) exceeds maximum (%ld)",
+ e->e_msgsize, MaxMessageSize);
+ }
+
+ /* check for illegal 8-bit data */
+ if (HasEightBits)
+ {
+ e->e_flags |= EF_HAS8BIT;
+ if (!bitset(MM_PASS8BIT|MM_MIME8BIT, MimeMode) &&
+ !bitset(EF_IS_MIME, e->e_flags))
+ {
+ e->e_status = "5.6.1";
+ usrerr("554 Eight bit data not allowed");
+ }
+ }
+ else
+ {
+ /* if it claimed to be 8 bits, well, it lied.... */
+ if (e->e_bodytype != NULL &&
+ strcasecmp(e->e_bodytype, "8BITMIME") == 0)
+ e->e_bodytype = "7BIT";
+ }
+
+ if ((e->e_dfp = fopen(dfname, "r")) == NULL)
+ {
+ /* we haven't acked receipt yet, so just chuck this */
+ syserr("Cannot reopen %s", dfname);
+ finis();
+ }
+}
+
+
+static void
+collecttimeout(timeout)
+ time_t timeout;
+{
+ /* if no progress was made, die now */
+ if (!CollectProgress)
+ longjmp(CtxCollectTimeout, 1);
+
+ /* otherwise reset the timeout */
+ CollectTimeout = setevent(timeout, collecttimeout, timeout);
+ CollectProgress = FALSE;
+}
+ /*
+** TFERROR -- signal error on writing the temporary file.
+**
+** Parameters:
+** tf -- the file pointer for the temporary file.
+** e -- the current envelope.
+**
+** Returns:
+** none.
+**
+** Side Effects:
+** Gives an error message.
+** Arranges for following output to go elsewhere.
+*/
+
+void
+tferror(tf, e)
+ FILE *tf;
+ register ENVELOPE *e;
+{
+ setstat(EX_IOERR);
+ if (errno == ENOSPC)
+ {
+ struct stat st;
+ long avail;
+ long bsize;
+ extern long freediskspace __P((char *, long *));
+
+ e->e_flags |= EF_NO_BODY_RETN;
+ if (fstat(fileno(tf), &st) < 0)
+ st.st_size = 0;
+ (void) freopen(queuename(e, 'd'), "w", tf);
+ if (st.st_size <= 0)
+ fprintf(tf, "\n*** Mail could not be accepted");
+ else if (sizeof st.st_size > sizeof (long))
+ fprintf(tf, "\n*** Mail of at least %qd bytes could not be accepted\n",
+ st.st_size);
+ else
+ fprintf(tf, "\n*** Mail of at least %ld bytes could not be accepted\n",
+ (long) st.st_size);
+ fprintf(tf, "*** at %s due to lack of disk space for temp file.\n",
+ MyHostName);
+ avail = freediskspace(QueueDir, &bsize);
+ if (avail > 0)
+ {
+ if (bsize > 1024)
+ avail *= bsize / 1024;
+ else if (bsize < 1024)
+ avail /= 1024 / bsize;
+ fprintf(tf, "*** Currently, %ld kilobytes are available for mail temp files.\n",
+ avail);
+ }
+ e->e_status = "4.3.1";
+ usrerr("452 Out of disk space for temp file");
+ }
+ else
+ syserr("collect: Cannot write tf%s", e->e_id);
+ (void) freopen("/dev/null", "w", tf);
+}
+ /*
+** EATFROM -- chew up a UNIX style from line and process
+**
+** This does indeed make some assumptions about the format
+** of UNIX messages.
+**
+** Parameters:
+** fm -- the from line.
+**
+** Returns:
+** none.
+**
+** Side Effects:
+** extracts what information it can from the header,
+** such as the date.
+*/
+
+# ifndef NOTUNIX
+
+char *DowList[] =
+{
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", NULL
+};
+
+char *MonthList[] =
+{
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
+ NULL
+};
+
+void
+eatfrom(fm, e)
+ char *fm;
+ register ENVELOPE *e;
+{
+ register char *p;
+ register char **dt;
+
+ if (tTd(30, 2))
+ printf("eatfrom(%s)\n", fm);
+
+ /* find the date part */
+ p = fm;
+ while (*p != '\0')
+ {
+ /* skip a word */
+ while (*p != '\0' && *p != ' ')
+ p++;
+ while (*p == ' ')
+ p++;
+ if (!(isascii(*p) && isupper(*p)) ||
+ p[3] != ' ' || p[13] != ':' || p[16] != ':')
+ continue;
+
+ /* we have a possible date */
+ for (dt = DowList; *dt != NULL; dt++)
+ if (strncmp(*dt, p, 3) == 0)
+ break;
+ if (*dt == NULL)
+ continue;
+
+ for (dt = MonthList; *dt != NULL; dt++)
+ if (strncmp(*dt, &p[4], 3) == 0)
+ break;
+ if (*dt != NULL)
+ break;
+ }
+
+ if (*p != '\0')
+ {
+ char *q;
+
+ /* we have found a date */
+ q = xalloc(25);
+ (void) strncpy(q, p, 25);
+ q[24] = '\0';
+ q = arpadate(q);
+ define('a', newstr(q), e);
+ }
+}
+
+# endif /* NOTUNIX */
diff --git a/src/collect.sav b/src/collect.sav
new file mode 100644
index 0000000..58f0dc7
--- /dev/null
+++ b/src/collect.sav
@@ -0,0 +1,761 @@
+/*
+ * Copyright (c) 1983, 1995-1997 Eric P. Allman
+ * Copyright (c) 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)collect.c 8.72 (Berkeley) 10/6/97";
+#endif /* not lint */
+
+# include <errno.h>
+# include "sendmail.h"
+
+/*
+** COLLECT -- read & parse message header & make temp file.
+**
+** Creates a temporary file name and copies the standard
+** input to that file. Leading UNIX-style "From" lines are
+** stripped off (after important information is extracted).
+**
+** Parameters:
+** fp -- file to read.
+** smtpmode -- if set, we are running SMTP: give an RFC821
+** style message to say we are ready to collect
+** input, and never ignore a single dot to mean
+** end of message.
+** hdrp -- the location to stash the header.
+** e -- the current envelope.
+**
+** Returns:
+** none.
+**
+** Side Effects:
+** Temp file is created and filled.
+** The from person may be set.
+*/
+
+static jmp_buf CtxCollectTimeout;
+static void collecttimeout();
+static bool CollectProgress;
+static EVENT *CollectTimeout;
+
+/* values for input state machine */
+#define IS_NORM 0 /* middle of line */
+#define IS_BOL 1 /* beginning of line */
+#define IS_DOT 2 /* read a dot at beginning of line */
+#define IS_DOTCR 3 /* read ".\r" at beginning of line */
+#define IS_CR 4 /* read a carriage return */
+
+/* values for message state machine */
+#define MS_UFROM 0 /* reading Unix from line */
+#define MS_HEADER 1 /* reading message header */
+#define MS_BODY 2 /* reading message body */
+
+void
+collect(fp, smtpmode, hdrp, e)
+ FILE *fp;
+ bool smtpmode;
+ HDR **hdrp;
+ register ENVELOPE *e;
+{
+ register FILE *volatile tf;
+ volatile bool ignrdot = smtpmode ? FALSE : IgnrDot;
+ volatile time_t dbto = smtpmode ? TimeOuts.to_datablock : 0;
+ register char *volatile bp;
+ volatile int c = EOF;
+ volatile bool inputerr = FALSE;
+ bool headeronly;
+ char *volatile buf;
+ volatile int buflen;
+ volatile int istate;
+ volatile int mstate;
+ u_char *volatile pbp;
+ u_char peekbuf[8];
+ char dfname[MAXQFNAME];
+ char bufbuf[MAXLINE];
+ extern bool isheader();
+ extern void eatheader();
+ extern void tferror();
+
+ headeronly = hdrp != NULL;
+
+ /*
+ ** Create the temp file name and create the file.
+ */
+
+ if (!headeronly)
+ {
+ int tfd;
+ struct stat stbuf;
+
+ strcpy(dfname, queuename(e, 'd'));
+ tfd = dfopen(dfname, O_WRONLY|O_CREAT|O_TRUNC, FileMode, SFF_ANYFILE);
+ if (tfd < 0 || (tf = fdopen(tfd, "w")) == NULL)
+ {
+ syserr("Cannot create %s", dfname);
+ e->e_flags |= EF_NO_BODY_RETN;
+ finis();
+ }
+ if (fstat(fileno(tf), &stbuf) < 0)
+ e->e_dfino = -1;
+ else
+ {
+ e->e_dfdev = stbuf.st_dev;
+ e->e_dfino = stbuf.st_ino;
+ }
+ HasEightBits = FALSE;
+ e->e_msgsize = 0;
+ e->e_flags |= EF_HAS_DF;
+ }
+
+ /*
+ ** Tell ARPANET to go ahead.
+ */
+
+ if (smtpmode)
+ message("354 Enter mail, end with \".\" on a line by itself");
+
+ if (tTd(30, 2))
+ printf("collect\n");
+
+ /*
+ ** Read the message.
+ **
+ ** This is done using two interleaved state machines.
+ ** The input state machine is looking for things like
+ ** hidden dots; the message state machine is handling
+ ** the larger picture (e.g., header versus body).
+ */
+
+ buf = bp = bufbuf;
+ buflen = sizeof bufbuf;
+ pbp = peekbuf;
+ istate = IS_BOL;
+ mstate = SaveFrom ? MS_HEADER : MS_UFROM;
+ CollectProgress = FALSE;
+
+ if (dbto != 0)
+ {
+ /* handle possible input timeout */
+ if (setjmp(CtxCollectTimeout) != 0)
+ {
+ if (LogLevel > 2)
+ sm_syslog(LOG_NOTICE, e->e_id,
+ "timeout waiting for input from %s during message collect",
+ CurHostName ? CurHostName : "<local machine>");
+ errno = 0;
+ usrerr("451 timeout waiting for input during message collect");
+ goto readerr;
+ }
+ CollectTimeout = setevent(dbto, collecttimeout, dbto);
+ }
+
+ for (;;)
+ {
+ if (tTd(30, 35))
+ printf("top, istate=%d, mstate=%d\n", istate, mstate);
+ for (;;)
+ {
+ if (pbp > peekbuf)
+ c = *--pbp;
+ else
+ {
+ while (!feof(fp) && !ferror(fp))
+ {
+ errno = 0;
+ c = getc(fp);
+ if (errno != EINTR)
+ break;
+ clearerr(fp);
+ }
+ CollectProgress = TRUE;
+ if (TrafficLogFile != NULL && !headeronly)
+ {
+ if (istate == IS_BOL)
+ fprintf(TrafficLogFile, "%05d <<< ",
+ (int) getpid());
+ if (c == EOF)
+ fprintf(TrafficLogFile, "[EOF]\n");
+ else
+ putc(c, TrafficLogFile);
+ }
+ if (c == EOF)
+ goto readerr;
+ if (SevenBitInput)
+ c &= 0x7f;
+ else
+ HasEightBits |= bitset(0x80, c);
+ }
+ if (tTd(30, 94))
+ printf("istate=%d, c=%c (0x%x)\n",
+ istate, c, c);
+ switch (istate)
+ {
+ case IS_BOL:
+ if (c == '.')
+ {
+ istate = IS_DOT;
+ continue;
+ }
+ break;
+
+ case IS_DOT:
+ if (c == '\n' && !ignrdot &&
+ !bitset(EF_NL_NOT_EOL, e->e_flags))
+ goto readerr;
+ else if (c == '\r' &&
+ !bitset(EF_CRLF_NOT_EOL, e->e_flags))
+ {
+ istate = IS_DOTCR;
+ continue;
+ }
+ else if (c != '.' ||
+ (OpMode != MD_SMTP &&
+ OpMode != MD_DAEMON &&
+ OpMode != MD_ARPAFTP))
+ {
+ *pbp++ = c;
+ c = '.';
+ }
+ break;
+
+ case IS_DOTCR:
+ if (c == '\n' && !ignrdot)
+ goto readerr;
+ else
+ {
+ /* push back the ".\rx" */
+ *pbp++ = c;
+ *pbp++ = '\r';
+ c = '.';
+ }
+ break;
+
+ case IS_CR:
+ if (c == '\n')
+ istate = IS_BOL;
+ else
+ {
+ ungetc(c, fp);
+ c = '\r';
+ istate = IS_NORM;
+ }
+ goto bufferchar;
+ }
+
+ if (c == '\r' && !bitset(EF_CRLF_NOT_EOL, e->e_flags))
+ {
+ istate = IS_CR;
+ continue;
+ }
+ else if (c == '\n' && !bitset(EF_NL_NOT_EOL, e->e_flags))
+ istate = IS_BOL;
+ else
+ istate = IS_NORM;
+
+bufferchar:
+ if (!headeronly)
+ e->e_msgsize++;
+ if (mstate == MS_BODY)
+ {
+ /* just put the character out */
+ if (MaxMessageSize <= 0 ||
+ e->e_msgsize <= MaxMessageSize)
+ putc(c, tf);
+ continue;
+ }
+
+ /* header -- buffer up */
+ if (bp >= &buf[buflen - 2])
+ {
+ char *obuf;
+
+ if (mstate != MS_HEADER)
+ break;
+
+ /* out of space for header */
+ obuf = buf;
+ if (buflen < MEMCHUNKSIZE)
+ buflen *= 2;
+ else
+ buflen += MEMCHUNKSIZE;
+ buf = xalloc(buflen);
+ bcopy(obuf, buf, bp - obuf);
+ bp = &buf[bp - obuf];
+ if (obuf != bufbuf)
+ free(obuf);
+ }
+ if (c >= 0200 && c <= 0237)
+ {
+#if 0 /* causes complaints -- figure out something for 8.9 */
+ usrerr("Illegal character 0x%x in header", c);
+#endif
+ }
+ else if (c != '\0')
+ *bp++ = c;
+ if (istate == IS_BOL)
+ break;
+ }
+ *bp = '\0';
+
+nextstate:
+ if (tTd(30, 35))
+ printf("nextstate, istate=%d, mstate=%d, line = \"%s\"\n",
+ istate, mstate, buf);
+ switch (mstate)
+ {
+ extern int chompheader();
+
+ case MS_UFROM:
+ mstate = MS_HEADER;
+#ifndef NOTUNIX
+ if (strncmp(buf, "From ", 5) == 0)
+ {
+ extern void eatfrom();
+
+ bp = buf;
+ eatfrom(buf, e);
+ continue;
+ }
+#endif
+ /* fall through */
+
+ case MS_HEADER:
+ if (!isheader(buf))
+ {
+ mstate = MS_BODY;
+ goto nextstate;
+ }
+
+ /* check for possible continuation line */
+ do
+ {
+ clearerr(fp);
+ errno = 0;
+ c = getc(fp);
+ } while (errno == EINTR);
+ if (c != EOF)
+ ungetc(c, fp);
+ if (c == ' ' || c == '\t')
+ {
+ /* yep -- defer this */
+ continue;
+ }
+
+ /* trim off trailing CRLF or NL */
+ if (*--bp != '\n' || *--bp != '\r')
+ bp++;
+ *bp = '\0';
+ if (bitset(H_EOH, chompheader(buf, FALSE, hdrp, e)))
+ mstate = MS_BODY;
+ break;
+
+ case MS_BODY:
+ if (tTd(30, 1))
+ printf("EOH\n");
+ if (headeronly)
+ goto readerr;
+ bp = buf;
+
+ /* toss blank line */
+ if ((!bitset(EF_CRLF_NOT_EOL, e->e_flags) &&
+ bp[0] == '\r' && bp[1] == '\n') ||
+ (!bitset(EF_NL_NOT_EOL, e->e_flags) &&
+ bp[0] == '\n'))
+ {
+ break;
+ }
+
+ /* if not a blank separator, write it out */
+ if (MaxMessageSize <= 0 ||
+ e->e_msgsize <= MaxMessageSize)
+ {
+ while (*bp != '\0')
+ putc(*bp++, tf);
+ }
+ break;
+ }
+ bp = buf;
+ }
+
+readerr:
+ if ((feof(fp) && smtpmode) || ferror(fp))
+ {
+ const char *errmsg = errstring(errno);
+
+ if (tTd(30, 1))
+ printf("collect: premature EOM: %s\n", errmsg);
+ if (LogLevel >= 2)
+ sm_syslog(LOG_WARNING, e->e_id,
+ "collect: premature EOM: %s", errmsg);
+ inputerr = TRUE;
+ }
+
+ /* reset global timer */
+ clrevent(CollectTimeout);
+
+ if (headeronly)
+ return;
+
+ if (tf != NULL &&
+ (fflush(tf) != 0 || ferror(tf) ||
+ (SuperSafe && fsync(fileno(tf)) < 0) ||
+ fclose(tf) < 0))
+ {
+ tferror(tf, e);
+ flush_errors(TRUE);
+ finis();
+ }
+
+ /* An EOF when running SMTP is an error */
+ if (inputerr && (OpMode == MD_SMTP || OpMode == MD_DAEMON))
+ {
+ char *host;
+ char *problem;
+
+ host = RealHostName;
+ if (host == NULL)
+ host = "localhost";
+
+ if (feof(fp))
+ problem = "unexpected close";
+ else if (ferror(fp))
+ problem = "I/O error";
+ else
+ problem = "read timeout";
+ if (LogLevel > 0 && feof(fp))
+ sm_syslog(LOG_NOTICE, e->e_id,
+ "collect: %s on connection from %.100s, sender=%s: %s",
+ problem, host,
+ shortenstring(e->e_from.q_paddr, 203),
+ errstring(errno));
+ if (feof(fp))
+ usrerr("451 collect: %s on connection from %s, from=%s",
+ problem, host,
+ shortenstring(e->e_from.q_paddr, 203));
+ else
+ syserr("451 collect: %s on connection from %s, from=%s",
+ problem, host,
+ shortenstring(e->e_from.q_paddr, 203));
+
+ /* don't return an error indication */
+ e->e_to = NULL;
+ e->e_flags &= ~EF_FATALERRS;
+ e->e_flags |= EF_CLRQUEUE;
+
+ /* and don't try to deliver the partial message either */
+ if (InChild)
+ ExitStat = EX_QUIT;
+ finis();
+ }
+
+ /*
+ ** Find out some information from the headers.
+ ** Examples are who is the from person & the date.
+ */
+
+ eatheader(e, TRUE);
+
+ if (GrabTo && e->e_sendqueue == NULL)
+ usrerr("No recipient addresses found in header");
+
+ /* collect statistics */
+ if (OpMode != MD_VERIFY)
+ {
+ extern void markstats();
+
+ markstats(e, (ADDRESS *) NULL);
+ }
+
+#if _FFR_DSN_RRT_OPTION
+ /*
+ ** If we have a Return-Receipt-To:, turn it into a DSN.
+ */
+
+ if (RrtImpliesDsn && hvalue("return-receipt-to", e->e_header) != NULL)
+ {
+ ADDRESS *q;
+
+ for (q = e->e_sendqueue; q != NULL; q = q->q_next)
+ if (!bitset(QHASNOTIFY, q->q_flags))
+ q->q_flags |= QHASNOTIFY|QPINGONSUCCESS;
+ }
+#endif
+
+ /*
+ ** Add an Apparently-To: line if we have no recipient lines.
+ */
+
+ if (hvalue("to", e->e_header) != NULL ||
+ hvalue("cc", e->e_header) != NULL ||
+ hvalue("apparently-to", e->e_header) != NULL)
+ {
+ /* have a valid recipient header -- delete Bcc: headers */
+ e->e_flags |= EF_DELETE_BCC;
+ }
+ else if (hvalue("bcc", e->e_header) == NULL)
+ {
+ /* no valid recipient headers */
+ register ADDRESS *q;
+ char *hdr = NULL;
+ extern void addheader();
+
+ /* create an Apparently-To: field */
+ /* that or reject the message.... */
+ switch (NoRecipientAction)
+ {
+ case NRA_ADD_APPARENTLY_TO:
+ hdr = "Apparently-To";
+ break;
+
+ case NRA_ADD_TO:
+ hdr = "To";
+ break;
+
+ case NRA_ADD_BCC:
+ addheader("Bcc", " ", &e->e_header);
+ break;
+
+ case NRA_ADD_TO_UNDISCLOSED:
+ addheader("To", "undisclosed-recipients:;", &e->e_header);
+ break;
+ }
+
+ if (hdr != NULL)
+ {
+ for (q = e->e_sendqueue; q != NULL; q = q->q_next)
+ {
+ if (q->q_alias != NULL)
+ continue;
+ if (tTd(30, 3))
+ printf("Adding %s: %s\n",
+ hdr, q->q_paddr);
+ addheader(hdr, q->q_paddr, &e->e_header);
+ }
+ }
+ }
+
+ /* check for message too large */
+ if (MaxMessageSize > 0 && e->e_msgsize > MaxMessageSize)
+ {
+ e->e_flags |= EF_NO_BODY_RETN|EF_CLRQUEUE;
+ e->e_status = "5.2.3";
+ usrerr("552 Message exceeds maximum fixed size (%ld)",
+ MaxMessageSize);
+ if (LogLevel > 6)
+ sm_syslog(LOG_NOTICE, e->e_id,
+ "message size (%ld) exceeds maximum (%ld)",
+ e->e_msgsize, MaxMessageSize);
+ }
+
+ /* check for illegal 8-bit data */
+ if (HasEightBits)
+ {
+ e->e_flags |= EF_HAS8BIT;
+ if (!bitset(MM_PASS8BIT|MM_MIME8BIT, MimeMode) &&
+ !bitset(EF_IS_MIME, e->e_flags))
+ {
+ e->e_status = "5.6.1";
+ usrerr("554 Eight bit data not allowed");
+ }
+ }
+ else
+ {
+ /* if it claimed to be 8 bits, well, it lied.... */
+ if (e->e_bodytype != NULL &&
+ strcasecmp(e->e_bodytype, "8BITMIME") == 0)
+ e->e_bodytype = "7BIT";
+ }
+
+ if ((e->e_dfp = fopen(dfname, "r")) == NULL)
+ {
+ /* we haven't acked receipt yet, so just chuck this */
+ syserr("Cannot reopen %s", dfname);
+ finis();
+ }
+}
+
+
+static void
+collecttimeout(timeout)
+ time_t timeout;
+{
+ /* if no progress was made, die now */
+ if (!CollectProgress)
+ longjmp(CtxCollectTimeout, 1);
+
+ /* otherwise reset the timeout */
+ CollectTimeout = setevent(timeout, collecttimeout, timeout);
+ CollectProgress = FALSE;
+}
+ /*
+** TFERROR -- signal error on writing the temporary file.
+**
+** Parameters:
+** tf -- the file pointer for the temporary file.
+** e -- the current envelope.
+**
+** Returns:
+** none.
+**
+** Side Effects:
+** Gives an error message.
+** Arranges for following output to go elsewhere.
+*/
+
+void
+tferror(tf, e)
+ FILE *tf;
+ register ENVELOPE *e;
+{
+ setstat(EX_IOERR);
+ if (errno == ENOSPC)
+ {
+ struct stat st;
+ long avail;
+ long bsize;
+ extern long freediskspace __P((char *, long *));
+
+ e->e_flags |= EF_NO_BODY_RETN;
+ if (fstat(fileno(tf), &st) < 0)
+ st.st_size = 0;
+ (void) freopen(queuename(e, 'd'), "w", tf);
+ if (st.st_size <= 0)
+ fprintf(tf, "\n*** Mail could not be accepted");
+ else if (sizeof st.st_size > sizeof (long))
+ fprintf(tf, "\n*** Mail of at least %qd bytes could not be accepted\n",
+ st.st_size);
+ else
+ fprintf(tf, "\n*** Mail of at least %ld bytes could not be accepted\n",
+ (long) st.st_size);
+ fprintf(tf, "*** at %s due to lack of disk space for temp file.\n",
+ MyHostName);
+ avail = freediskspace(QueueDir, &bsize);
+ if (avail > 0)
+ {
+ if (bsize > 1024)
+ avail *= bsize / 1024;
+ else if (bsize < 1024)
+ avail /= 1024 / bsize;
+ fprintf(tf, "*** Currently, %ld kilobytes are available for mail temp files.\n",
+ avail);
+ }
+ e->e_status = "4.3.1";
+ usrerr("452 Out of disk space for temp file");
+ }
+ else
+ syserr("collect: Cannot write tf%s", e->e_id);
+ (void) freopen("/dev/null", "w", tf);
+}
+ /*
+** EATFROM -- chew up a UNIX style from line and process
+**
+** This does indeed make some assumptions about the format
+** of UNIX messages.
+**
+** Parameters:
+** fm -- the from line.
+**
+** Returns:
+** none.
+**
+** Side Effects:
+** extracts what information it can from the header,
+** such as the date.
+*/
+
+# ifndef NOTUNIX
+
+char *DowList[] =
+{
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", NULL
+};
+
+char *MonthList[] =
+{
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
+ NULL
+};
+
+void
+eatfrom(fm, e)
+ char *fm;
+ register ENVELOPE *e;
+{
+ register char *p;
+ register char **dt;
+
+ if (tTd(30, 2))
+ printf("eatfrom(%s)\n", fm);
+
+ /* find the date part */
+ p = fm;
+ while (*p != '\0')
+ {
+ /* skip a word */
+ while (*p != '\0' && *p != ' ')
+ p++;
+ while (*p == ' ')
+ p++;
+ if (!(isascii(*p) && isupper(*p)) ||
+ p[3] != ' ' || p[13] != ':' || p[16] != ':')
+ continue;
+
+ /* we have a possible date */
+ for (dt = DowList; *dt != NULL; dt++)
+ if (strncmp(*dt, p, 3) == 0)
+ break;
+ if (*dt == NULL)
+ continue;
+
+ for (dt = MonthList; *dt != NULL; dt++)
+ if (strncmp(*dt, &p[4], 3) == 0)
+ break;
+ if (*dt != NULL)
+ break;
+ }
+
+ if (*p != '\0')
+ {
+ char *q;
+
+ /* we have found a date */
+ q = xalloc(25);
+ (void) strncpy(q, p, 25);
+ q[24] = '\0';
+ q = arpadate(q);
+ define('a', newstr(q), e);
+ }
+}
+
+# endif /* NOTUNIX */
diff --git a/src/conf.c b/src/conf.c
index cd51efc..d708a27 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -368,6 +368,9 @@ setupmaps()
MAPDEF("bestmx", NULL, MCF_OPTFILE,
map_parseargs, null_map_open, null_map_close,
bestmx_map_lookup, null_map_store);
+ MAPDEF("ismx", NULL, MCF_OPTFILE,
+ map_parseargs, null_map_open, null_map_close,
+ ismx_map_lookup, null_map_store);
#endif
MAPDEF("host", NULL, 0,
@@ -4118,7 +4121,8 @@ validate_connection(sap, hostname, e)
}
#if TCPWRAPPERS
- if (!hosts_ctl("sendmail", hostname, anynet_ntoa(sap), STRING_UNKNOWN))
+ if (TcpWrappers &&
+ !hosts_ctl("sendmail", hostname, anynet_ntoa(sap), STRING_UNKNOWN))
{
if (tTd(48, 4))
printf(" ... validate_connection: BAD (tcpwrappers)\n");
diff --git a/src/conf.h b/src/conf.h
index de37c14..defce4e 100644
--- a/src/conf.h
+++ b/src/conf.h
@@ -1178,7 +1178,7 @@ extern void *malloc();
# define ERRLIST_PREDEFINED /* don't declare sys_errlist */
# define GIDSET_T gid_t /* from <linux/types.h> */
# define HASGETUSERSHELL 0 /* getusershell(3) broken in Slackware 2.0 */
-# define IP_SRCROUTE 0 /* linux <= 1.2.8 doesn't support IP_OPTIONS */
+# define IP_SRCROUTE 0
# define USE_SIGLONGJMP 1 /* sigsetjmp needed for signal handling */
# ifndef HASFLOCK
# include <linux/version.h>
diff --git a/src/domain.c b/src/domain.c
index 2031726..13e4afa 100644
--- a/src/domain.c
+++ b/src/domain.c
@@ -481,6 +481,52 @@ bestmx_map_lookup(map, name, av, statp)
return map_rewrite(map, mxhosts[0], strlen(mxhosts[0]), av);
}
/*
+** ISMX -- find if we are the MX for a certain host.
+**
+** This is really a hack, but I don't see any obvious way
+** to generalize it at the moment.
+*/
+
+char *
+ismx_map_lookup(map, name, av, statp)
+ MAP *map;
+ char *name;
+ char **av;
+ int *statp;
+{
+ int nmx, i, len;
+ auto int rcode;
+ int saveopts = _res.options;
+ char *mxhosts[MAXMXHOSTS + 1];
+ char *mymx = NULL;
+
+ _res.options &= ~(RES_DNSRCH|RES_DEFNAMES);
+ nmx = getmxrr(name, mxhosts, FALSE, &rcode);
+ _res.options = saveopts;
+ if (rcode != EX_TEMPFAIL) {
+ if (nmx <= 0)
+ return NULL;
+ for(i = 0; i < nmx; i++) {
+ len = strlen(mxhosts[i]);
+ if (len && mxhosts[i][len - 1] == '.')
+ mxhosts[i][len - 1] = 0;
+ if (wordinclass(mxhosts[i], 'w')) {
+ mymx = mxhosts[i];
+ break;
+ }
+ }
+ if (mymx == NULL)
+ return NULL;
+ } else
+ mymx = "TEMPFAIL";
+
+ if (bitset(MF_MATCHONLY, map->map_mflags))
+ return map_rewrite(map, name, strlen(name), NULL);
+ else
+ return map_rewrite(map, mymx, strlen(mymx), av);
+}
+
+ /*
** DNS_GETCANONNAME -- get the canonical name for named host using DNS
**
** This algorithm tries to be smart about wildcard MX records.
diff --git a/src/readcf.c b/src/readcf.c
index 681c3d3..04f70f9 100644
--- a/src/readcf.c
+++ b/src/readcf.c
@@ -1431,6 +1431,9 @@ struct optioninfo
{ "FallbackMXhost", 'V', FALSE },
{ "Verbose", 'v', TRUE },
{ "TryNullMXList", 'w', FALSE },
+#ifdef TCPWRAPPERS
+ { "TcpWrappers", 'W', FALSE },
+#endif
{ "QueueLA", 'x', FALSE },
{ "RefuseLA", 'X', FALSE },
{ "RecipientFactor", 'y', FALSE },
@@ -2097,6 +2100,11 @@ setoption(opt, val, safe, sticky, e)
break;
/* 'W' available -- was wizard password */
+#ifdef TCPWRAPPERS
+ case 'W':
+ TcpWrappers = atobool(val);
+ break;
+#endif
case 'x': /* load avg at which to auto-queue msgs */
QueueLA = atoi(val);
diff --git a/src/sendmail.8 b/src/sendmail.8
index 9a0a687..5c11545 100644
--- a/src/sendmail.8
+++ b/src/sendmail.8
@@ -433,6 +433,15 @@ aliases are local to a particular host.
This may not be available if your sendmail does not have the
.Dv USERDB
option compiled in.
+.It Li TcpWrappers
+Use the
+.Dv sendmail
+entry in
+.Pa /etc/hosts.allow
+to decide if the remote host has access to the SMTP port.
+This may not be available if your sendmail does not have the
+.Dv TCPWRAPPERS
+option compiled in.
.It Li ForkEachJob
Fork each job during queue runs.
May be convenient on memory-poor machines.
diff --git a/src/sendmail.h b/src/sendmail.h
index fc3bf49..7524d7b 100644
--- a/src/sendmail.h
+++ b/src/sendmail.h
@@ -1218,6 +1218,9 @@ EXTERN bool DoQueueRun; /* non-interrupt time queue run needed */
#if _FFR_DSN_RRT_OPTION
EXTERN bool RrtImpliesDsn; /* turn Return-Receipt-To: into DSN */
#endif
+#ifdef TCPWRAPPERS
+EXTERN bool TcpWrappers; /* Use tcp wrappers for access control. */
+#endif
EXTERN char *DeadLetterDrop; /* path to dead letter office */
EXTERN bool DontProbeInterfaces; /* don't probe interfaces for names */
EXTERN bool ChownAlwaysSafe; /* treat chown(2) as safe */