clarifications and corrections
[unix-history] / usr / src / usr.sbin / sendmail / doc / op / op.me
index 27478d8..dea786d 100644 (file)
@@ -1,16 +1,18 @@
 .\" Copyright (c) 1983 Eric P. Allman
 .\" Copyright (c) 1983 Eric P. Allman
-.\" Copyright (c) 1983 The Regents of the University of California.
-.\" All rights reserved.
+.\" Copyright (c) 1983, 1993
+.\"    The Regents of the University of California.  All rights reserved.
 .\"
 .\" %sccs.include.redist.roff%
 .\"
 .\"
 .\" %sccs.include.redist.roff%
 .\"
-.\"    @(#)op.me       6.1 (Berkeley) %G%
+.\"    @(#)op.me       8.16 (Berkeley) %G%
 .\"
 .\" eqn op.me | pic | troff -me
 .\"
 .\" eqn op.me | pic | troff -me
-.eh 'SMM:07-%''Sendmail Installation and Operation Guide'
-.oh 'Sendmail Installation and Operation Guide''SMM:07-%'
+.eh 'SMM:08-%''Sendmail Installation and Operation Guide'
+.oh 'Sendmail Installation and Operation Guide''SMM:08-%'
 .\" SD is lib if sendmail is installed in /usr/lib, sbin if in /usr/sbin
 .ds SD sbin
 .\" SD is lib if sendmail is installed in /usr/lib, sbin if in /usr/sbin
 .ds SD sbin
+.\" SB is bin if newaliases/mailq are installed in /usr/bin, ucb if in /usr/ucb
+.ds SB bin
 .nr si 3n
 .de $0
 .(x
 .nr si 3n
 .de $0
 .(x
@@ -25,6 +27,7 @@
 \\$1 \\$2.  \\$3
 .)x
 ..
 \\$1 \\$2.  \\$3
 .)x
 ..
+.sc
 .+c
 .(l C
 .sz 16
 .+c
 .(l C
 .sz 16
@@ -40,9 +43,9 @@ University of California, Berkeley
 Mammoth Project
 eric@CS.Berkeley.EDU
 .sp
 Mammoth Project
 eric@CS.Berkeley.EDU
 .sp
-Version 6.1
+Version 8.16
 .sp
 .sp
-For Sendmail Version 6.1
+For Sendmail Version 8.6
 .)l
 .sp 2
 .pp
 .)l
 .sp 2
 .pp
@@ -77,8 +80,9 @@ incrementally.
 is based on
 RFC822 (Internet Mail Format Protocol),
 RFC821 (Simple Mail Transport Protocol),
 is based on
 RFC822 (Internet Mail Format Protocol),
 RFC821 (Simple Mail Transport Protocol),
+RFC1123 (Internet Host Requirements),
 and
 and
-RFC1123 (Internet Host Requirements).
+RFC1425 (SMTP Service Extensions).
 However, since
 .i sendmail
 is designed to work in a wider world,
 However, since
 .i sendmail
 is designed to work in a wider world,
@@ -121,18 +125,15 @@ in this version of
 The appendixes give a brief
 but detailed explanation of a number of features
 not described in the rest of the paper.
 The appendixes give a brief
 but detailed explanation of a number of features
 not described in the rest of the paper.
+.bp 7
 .sh 1 "BASIC INSTALLATION"
 .pp
 .sh 1 "BASIC INSTALLATION"
 .pp
-.i
-This section is a very rough rewrite;
-please don't assume that it is already completely correct.
-However,
-please send me suggestions so that later versions of this document
-can be more accurate.
-.pp
-There are two basic steps to installing sendmail.
+There are two basic steps to installing
+.i sendmail .
 The hard part is to build the configuration table.
 The hard part is to build the configuration table.
-This is a file that sendmail reads when it starts up
+This is a file that
+.i sendmail
+reads when it starts up
 that describes the mailers it knows about,
 how to parse addresses,
 how to rewrite the message header,
 that describes the mailers it knows about,
 how to parse addresses,
 how to rewrite the message header,
@@ -143,7 +144,8 @@ by adjusting an existing off-the-shelf configuration.
 The second part is actually doing the installation,
 i.e., creating the necessary files, etc.
 .pp
 The second part is actually doing the installation,
 i.e., creating the necessary files, etc.
 .pp
-The remainder of this section will describe the installation of sendmail
+The remainder of this section will describe the installation of
+.i sendmail
 assuming you can use one of the existing configurations
 and that the standard installation parameters are acceptable.
 All pathnames and examples
 assuming you can use one of the existing configurations
 and that the standard installation parameters are acceptable.
 All pathnames and examples
@@ -152,7 +154,7 @@ are given from the root of the
 subtree,
 normally
 .i /usr/src/usr.\*(SD/sendmail
 subtree,
 normally
 .i /usr/src/usr.\*(SD/sendmail
-on 4.3BSD.
+on 4.4BSD.
 .pp
 If you are loading this off the tape,
 continue with the next session.
 .pp
 If you are loading this off the tape,
 continue with the next session.
@@ -160,7 +162,9 @@ If you have a running binary already on your system,
 you should probably skip to section 1.2.
 .sh 2 "Compiling Sendmail"
 .pp
 you should probably skip to section 1.2.
 .sh 2 "Compiling Sendmail"
 .pp
-All sendmail source is in the
+All
+.i sendmail
+source is in the
 .i src
 subdirectory.
 If you are running on a 4.4BSD system,
 .i src
 subdirectory.
 If you are running on a 4.4BSD system,
@@ -185,19 +189,15 @@ syntax.
 .sh 3 "Compilation flags"
 .pp
 .i Sendmail
 .sh 3 "Compilation flags"
 .pp
 .i Sendmail
-supports three different formats
+supports two different formats
 for the
 .i aliases
 database.
 These formats are:
 .nr ii 1i
 for the
 .i aliases
 database.
 These formats are:
 .nr ii 1i
-.ip DBM
-The old, tried and somewhat-true
-.i dbm
-library from V7.
-Try to avoid this.
 .ip NDBM
 .ip NDBM
-A newer version of the above.
+The ``new DBM'' format,
+available on nearly all systems around today.
 This was the preferred format prior to 4.4BSD.
 It allows such complex things as multiple databases
 and closing a currently open database.
 This was the preferred format prior to 4.4BSD.
 It allows such complex things as multiple databases
 and closing a currently open database.
@@ -214,7 +214,7 @@ if you do,
 old databases are read,
 but when a new database is created it will be in NEWDB format.
 As a nasty hack,
 old databases are read,
 but when a new database is created it will be in NEWDB format.
 As a nasty hack,
-if you have both NEWDB and one of the DB formats defined,
+if you have NEWDB, NDBM, and NIS defined,
 and if the file
 .i /var/yp/Makefile
 exists and is readable,
 and if the file
 .i /var/yp/Makefile
 exists and is readable,
@@ -228,7 +228,7 @@ reads the DBM version of the alias file.
 It's ugly as sin,
 but it works.
 .lp
 It's ugly as sin,
 but it works.
 .lp
-If none of these are defined,
+If neither of these are defined,
 .i sendmail
 reads the alias file into memory on every invocation.
 This can be slow and should be avoided.
 .i sendmail
 reads the alias file into memory on every invocation.
 This can be slow and should be avoided.
@@ -253,7 +253,7 @@ routine in your system library, define the UNSETENV compilation flag.
 .pp
 You may also have to define the compilation variable LA_TYPE
 to describe how your load average is computed.
 .pp
 You may also have to define the compilation variable LA_TYPE
 to describe how your load average is computed.
-This is described in detail in section 6.1.
+This and other flags are detailed in section 6.1.
 .sh 3 "Compilation and installation"
 .pp
 After making the local system configuration described above,
 .sh 3 "Compilation and installation"
 .pp
 After making the local system configuration described above,
@@ -277,12 +277,12 @@ make install
 This should install the binary in
 /usr/\*(SD
 and create links from
 This should install the binary in
 /usr/\*(SD
 and create links from
-/usr/bin/newaliases
+/usr/\*(SB/newaliases
 and
 and
-/usr/bin/mailq
+/usr/\*(SB/mailq
 to
 /usr/\*(SD/sendmail.
 to
 /usr/\*(SD/sendmail.
-On BSD4.4 systems it will also format and install man pages.
+On 4.4BSD systems it will also format and install man pages.
 .sh 2 "Configuration Files"
 .pp
 .i Sendmail
 .sh 2 "Configuration Files"
 .pp
 .i Sendmail
@@ -324,7 +324,7 @@ I haven't tested these yet on an isolated LAN environment
 with a single UUCP connection to the outside world.
 If you are in such an environment,
 please send comments to
 with a single UUCP connection to the outside world.
 If you are in such an environment,
 please send comments to
-sendmail@okeeffe.CS.Berkeley.EDU.
+sendmail@CS.Berkeley.EDU.
 .pp
 Our configuration files are processed by
 .i m4
 .pp
 Our configuration files are processed by
 .i m4
@@ -332,7 +332,7 @@ to facilitate local customization;
 the directory
 .i cf
 of the
 the directory
 .i cf
 of the
-sendmail
+.i sendmail
 distribution directory
 contains the source files.
 This directory contains several subdirectories:
 distribution directory
 contains the source files.
 This directory contains several subdirectories:
@@ -381,13 +381,11 @@ These are referenced using the
 .sm FEATURE
 .b m4
 macro.
 .sm FEATURE
 .b m4
 macro.
-Example features are
-no_wildcard_MX
-(which improves performance if you don't have a wildcard MX record
-matching your domain)
-and
+An example feature is
 use_cw_file
 use_cw_file
-(which tells sendmail to read an /etc/sendmail.cw file on startup
+(which tells
+.i sendmail
+to read an /etc/sendmail.cw file on startup
 to find the set of local names).
 .ip hack
 Local hacks, referenced using the
 to find the set of local names).
 .ip hack
 Local hacks, referenced using the
@@ -410,9 +408,11 @@ referenced using the
 .b m4
 macro.
 Defined mailer types in this distribution are
 .b m4
 macro.
 Defined mailer types in this distribution are
+fax,
 local,
 smtp,
 local,
 smtp,
-and uucp.
+uucp,
+and usenet.
 .ip ostype
 Definitions describing various operating system environments
 (such as the location of support files).
 .ip ostype
 Definitions describing various operating system environments
 (such as the location of support files).
@@ -490,11 +490,13 @@ file.
 .pp
 This subsection describes the files that
 comprise the
 .pp
 This subsection describes the files that
 comprise the
-sendmail
+.i sendmail
 installation.
 .sh 3 "/usr/\*(SD/sendmail"
 .pp
 installation.
 .sh 3 "/usr/\*(SD/sendmail"
 .pp
-The binary for sendmail is located in /usr/\*(SD\**.
+The binary for
+.i sendmail
+is located in /usr/\*(SD\**.
 .(f
 \**This is usually
 /usr/sbin
 .(f
 \**This is usually
 /usr/sbin
@@ -518,13 +520,14 @@ and permissions are
 .)f
 .sh 3 "/etc/sendmail.cf"
 .pp
 .)f
 .sh 3 "/etc/sendmail.cf"
 .pp
-This is the configuration file for sendmail.
-This and the frozen configuration file
-are the only two non-library file names compiled into sendmail\**.
+This is the configuration file for
+.i sendmail .
+This is the only non-library file name compiled into
+.i sendmail \**.
 .(f
 \**The system libraries can reference other files;
 in particular, system library subroutines that
 .(f
 \**The system libraries can reference other files;
 in particular, system library subroutines that
-sendmail
+.i sendmail
 calls probably reference
 .i /etc/passwd
 and
 calls probably reference
 .i /etc/passwd
 and
@@ -543,7 +546,7 @@ If you have a particularly unusual system configuration
 you may need to create a special version.
 The format of this file is detailed in later sections
 of this document.
 you may need to create a special version.
 The format of this file is detailed in later sections
 of this document.
-.sh 3 "/usr/ucb/newaliases"
+.sh 3 "/usr/\*(SB/newaliases"
 .pp
 If you are running delivermail,
 it is critical that the
 .pp
 If you are running delivermail,
 it is critical that the
@@ -552,8 +555,8 @@ command be replaced.
 This can just be a link to
 .i sendmail :
 .(b
 This can just be a link to
 .i sendmail :
 .(b
-rm \-f /usr/ucb/newaliases
-ln /usr/\*(SD/sendmail /usr/ucb/newaliases
+rm \-f /usr/\*(SB/newaliases
+ln /usr/\*(SD/sendmail /usr/\*(SB/newaliases
 .)b
 This can be installed in whatever search path you prefer
 for your system.
 .)b
 This can be installed in whatever search path you prefer
 for your system.
@@ -619,24 +622,11 @@ is defined in the
 option of the
 .i sendmail.cf
 file.
 option of the
 .i sendmail.cf
 file.
-.sh 3 "/etc/sendmail.fc"
-.pp
-If you intend to install the frozen version of the configuration file
-(for quick startup)
-you should create the file /etc/sendmail.fc
-and initialize it.
-This step may be safely skipped.
-.(b
-cp /dev/null /etc/sendmail.fc
-chmod 644 /etc/sendmail.fc
-/usr/\*(SD/sendmail \-bz
-.)b
-In general, freeze files are not worth doing
-unless your disks are much faster than your CPU;
-this is seldom true any more.
 .sh 3 "/etc/rc"
 .pp
 .sh 3 "/etc/rc"
 .pp
-It will be necessary to start up the sendmail daemon when your system reboots.
+It will be necessary to start up the
+.i sendmail
+daemon when your system reboots.
 This daemon performs two functions:
 it listens on the SMTP socket for connections
 (to receive mail from a remote system)
 This daemon performs two functions:
 it listens on the SMTP socket for connections
 (to receive mail from a remote system)
@@ -672,6 +662,52 @@ and
 .q \-q30m
 causes it to run the queue every half hour.
 .pp
 .q \-q30m
 causes it to run the queue every half hour.
 .pp
+Some people use a more complex startup script,
+removing zero length qf files and df files for which there is no qf file.
+For example:
+.(b
+# remove zero length qf files
+for qffile in qf*
+do
+       if [ \-r $qffile ]
+       then
+               if [ ! \-s $qffile ]
+               then
+                       echo \-n " <zero: $qffile>" > /dev/console
+                       rm \-f $qffile
+               fi
+       fi
+done
+# rename tf files to be qf if the qf does not exist
+for tffile in tf*
+do
+       qffile=`echo $tffile | sed 's/t/q/'`
+       if [ \-r $tffile \-a ! \-f $qffile ]
+       then
+               echo \-n " <recovering: $tffile>" > /dev/console
+               mv $tffile $qffile
+       else
+               echo \-n " <extra: $tffile>" > /dev/console
+               rm \-f $tffile
+       fi
+done
+# remove df files with no corresponding qf files
+for dffile in df*
+do
+       qffile=`echo $dffile | sed 's/d/q/'`
+       if [ \-r $dffile \-a ! \-f $qffile ]
+       then
+               echo \-n " <incomplete: $dffile>" > /dev/console
+               mv $dffile `echo $dffile | sed 's/d/D/'`
+       fi
+done
+# announce files that have been saved during disaster recovery
+for xffile in [A-Z]f*
+do
+       echo \-n " <panic: $xffile>" > /dev/console
+done
+.)b
+.pp
 If you are not running a version of UNIX
 that supports Berkeley TCP/IP,
 do not include the
 If you are not running a version of UNIX
 that supports Berkeley TCP/IP,
 do not include the
@@ -712,7 +748,7 @@ is defined in the
 option of the
 .i sendmail.cf
 file.
 option of the
 .i sendmail.cf
 file.
-.sh 3 "/usr/ucb/newaliases"
+.sh 3 "/usr/\*(SB/newaliases"
 .pp
 If
 .i sendmail
 .pp
 If
 .i sendmail
@@ -724,7 +760,7 @@ flag
 (i.e., will rebuild the alias database;
 see below).
 This should be a link to /usr/\*(SD/sendmail.
 (i.e., will rebuild the alias database;
 see below).
 This should be a link to /usr/\*(SD/sendmail.
-.sh 3 "/usr/ucb/mailq"
+.sh 3 "/usr/\*(SB/mailq"
 .pp
 If
 .i sendmail
 .pp
 If
 .i sendmail
@@ -739,37 +775,6 @@ will print the contents of the mail queue;
 see below).
 This should be a link to /usr/\*(SD/sendmail.
 .sh 1 "NORMAL OPERATIONS"
 see below).
 This should be a link to /usr/\*(SD/sendmail.
 .sh 1 "NORMAL OPERATIONS"
-.sh 2 "Quick Configuration Startup"
-.pp
-A fast version of the configuration file
-may be set up by using the
-.b \-bz
-flag:
-.(b
-/usr/\*(SD/sendmail \-bz
-.)b
-This creates the file
-.i /etc/sendmail.fc
-(\c
-.q "frozen configuration" ).
-This file is an image of
-.i sendmail 's
-data space after reading in the configuration file.
-If this file exists,
-it is used instead of
-.i /etc/sendmail.cf
-.i sendmail.fc
-must be rebuilt manually every time
-.i sendmail.cf
-is changed.
-.pp
-The frozen configuration file will be ignored
-if a
-.b \-C
-flag is specified
-or if sendmail detects that it is out of date.
-However, the heuristics are not strong
-so this should not be trusted.
 .sh 2 "The System Log"
 .pp
 The system log is supported by the
 .sh 2 "The System Log"
 .pp
 The system log is supported by the
@@ -800,10 +805,12 @@ even the most mundane and uninteresting events
 are recorded for posterity.
 As a convention,
 log levels under ten
 are recorded for posterity.
 As a convention,
 log levels under ten
-are considered
+are considered generally
 .q useful;
 .q useful;
-log levels above ten
-are usually for debugging purposes.
+log levels above 64
+are reserved for debugging purposes.
+Levels from 11\-64 are reserved for verbose information
+that some sites might want.
 .pp
 A complete description of the log levels
 is given in section 4.6.
 .pp
 A complete description of the log levels
 is given in section 4.6.
@@ -814,7 +821,9 @@ However, you may find that manual intervention is sometimes necessary.
 For example,
 if a major host is down for a period of time
 the queue may become clogged.
 For example,
 if a major host is down for a period of time
 the queue may become clogged.
-Although sendmail ought to recover gracefully when the host comes up,
+Although
+.i sendmail
+ought to recover gracefully when the host comes up,
 you may find performance unacceptably bad in the meantime.
 .sh 3 "Printing the queue"
 .pp
 you may find performance unacceptably bad in the meantime.
 .sh 3 "Printing the queue"
 .pp
@@ -824,7 +833,8 @@ using the
 command
 (or by specifying the
 .b \-bp
 command
 (or by specifying the
 .b \-bp
-flag to sendmail):
+flag to
+.i sendmail ):
 .(b
 mailq
 .)b
 .(b
 mailq
 .)b
@@ -942,9 +952,32 @@ This is the form that
 .i sendmail
 actually uses to resolve aliases.
 This technique is used to improve performance.
 .i sendmail
 actually uses to resolve aliases.
 This technique is used to improve performance.
+.pp
+You can also use
+.sm NIS -based
+alias files.
+For example, the specification:
+.(b
+OA/etc/aliases
+OAnis:mail.aliases@my.nis.domain
+.)b
+will first search the /etc/aliases file
+and then the map named
+.q mail.aliases
+in
+.q my.nis.domain .
+.pp
+Additional flags can be added after the colon
+exactly like a
+.b K
+line \(em for example:
+.(b
+OAnis:-N mail.aliases@my.nis.domain
+.)b
+will search the appropriate NIS map and always include null bytes in the key.
 .sh 3 "Rebuilding the alias database"
 .pp
 .sh 3 "Rebuilding the alias database"
 .pp
-The DBM version of the database
+The DB or DBM version of the database
 may be rebuilt explicitly by executing the command
 .(b
 newaliases
 may be rebuilt explicitly by executing the command
 .(b
 newaliases
@@ -972,6 +1005,12 @@ if it might take more than five minutes
 to rebuild the database,
 there is a chance that several processes will start the rebuild process
 simultaneously.
 to rebuild the database,
 there is a chance that several processes will start the rebuild process
 simultaneously.
+.pp
+If you have multiple aliases databases specified,
+the
+.b \-bi
+flag rebuilds all the database types it understands
+(for example, it can rebuild dbm databases but not nis databases).
 .sh 3 "Potential problems"
 .pp
 There are a number of problems that can occur
 .sh 3 "Potential problems"
 .pp
 There are a number of problems that can occur
@@ -998,7 +1037,9 @@ it adds an alias of the form
 @: @
 .)b
 (which is not normally legal).
 @: @
 .)b
 (which is not normally legal).
-Before sendmail will access the database,
+Before
+.i sendmail
+will access the database,
 it checks to insure that this entry exists\**.
 .(f
 \**The
 it checks to insure that this entry exists\**.
 .(f
 \**The
@@ -1040,6 +1081,17 @@ unix-wizards
 due to the inclusion of
 .q nosuchuser
 on the list.
 due to the inclusion of
 .q nosuchuser
 on the list.
+.pp
+List owners also cause the envelope sender address to be modified.
+The contents of the owner alias are used if they point to a single user,
+otherwise the name of the alias itself is used.
+For this reason, and to obey Internet conventions,
+a typical scheme would be:
+.(b
+list:  some, set, of, addresses
+list-request:  list-admin-1, list-admin-2, ...
+owner-list:    list-request
+.)b
 .sh 2 "User Information Database"
 .pp
 If you have a version of
 .sh 2 "User Information Database"
 .pp
 If you have a version of
@@ -1109,9 +1161,17 @@ flag (local delivery) set in the mailer descriptor.
 .pp
 If errors occur anywhere during processing,
 this header will cause error messages to go to
 .pp
 If errors occur anywhere during processing,
 this header will cause error messages to go to
-the listed addresses
-rather than to the sender.
+the listed addresses.
 This is intended for mailing lists.
 This is intended for mailing lists.
+.pp
+The Errors-To: header was created in the bad old days
+when UUCP didn't understand the distinction between an envelope and a header;
+this was a hack to provide what should now be passed
+as the envelope sender address.
+It should go away.
+It is only used if the
+.b l
+option is set.
 .sh 3 "Apparently-To:"
 .pp
 If a message comes in with no recipients listed in the message
 .sh 3 "Apparently-To:"
 .pp
 If a message comes in with no recipients listed in the message
@@ -1125,6 +1185,50 @@ This is not put in as a standard recipient line
 to warn any recipients that the list is not complete.
 .pp
 At least one recipient line is required under RFC 822.
 to warn any recipients that the list is not complete.
 .pp
 At least one recipient line is required under RFC 822.
+.sh 2 "IDENT Protocol Support"
+.pp
+.i Sendmail
+supports the IDENT protocol as defined in RFC 1413.
+Although this enhances identification
+of the author of an email message
+by doing a ``call back'' to the originating system to include
+the owner of a particular TCP connection
+in the audit trail
+it is in no sense perfect;
+a determined forger can easily spoof the IDENT protocol.
+The following description is excerpted from RFC 1413:
+.ba +5
+.lp
+6.  Security Considerations
+.lp
+The information returned by this protocol is at most as trustworthy
+as the host providing it OR the organization operating the host.  For
+example, a PC in an open lab has few if any controls on it to prevent
+a user from having this protocol return any identifier the user
+wants.  Likewise, if the host has been compromised the information
+returned may be completely erroneous and misleading.
+.lp
+The Identification Protocol is not intended as an authorization or
+access control protocol.  At best, it provides some additional
+auditing information with respect to TCP connections.  At worst, it
+can provide misleading, incorrect, or maliciously incorrect
+information.
+.lp
+The use of the information returned by this protocol for other than
+auditing is strongly discouraged.  Specifically, using Identification
+Protocol information to make access control decisions - either as the
+primary method (i.e., no other checks) or as an adjunct to other
+methods may result in a weakening of normal host security.
+.lp
+An Identification server may reveal information about users,
+entities, objects or processes which might normally be considered
+private.  An Identification server provides service which is a rough
+analog of the CallerID services provided by some phone companies and
+many of the same privacy considerations and arguments that apply to
+the CallerID service apply to Identification.  If you wouldn't run a
+"finger" server due to privacy considerations you may not want to run
+this protocol.
+.ba
 .sh 1 "ARGUMENTS"
 .pp
 The complete list of arguments to
 .sh 1 "ARGUMENTS"
 .pp
 The complete list of arguments to
@@ -1151,6 +1255,9 @@ mode
 it should be relatively short,
 since it defines the maximum amount of time that a message
 may sit in the queue.
 it should be relatively short,
 since it defines the maximum amount of time that a message
 may sit in the queue.
+.pp
+RFC 1123 section 5.3.1.1 says that this value should be at least 30 minutes
+(although that probably doesn't make sense if you use ``queue-only'' mode).
 .sh 2 "Daemon Mode"
 .pp
 If you allow incoming mail over an IPC connection,
 .sh 2 "Daemon Mode"
 .pp
 If you allow incoming mail over an IPC connection,
@@ -1182,6 +1289,20 @@ when this is done to watch what happens:
 .(b
 /usr/\*(SD/sendmail \-q \-v
 .)b
 .(b
 /usr/\*(SD/sendmail \-q \-v
 .)b
+.pp
+You can also limit the jobs to those with a particular queue identifier,
+sender, or recipient
+using one of the queue modifiers.
+For example,
+.q \-qRberkeley
+restricts the queue run to jobs that have the string
+.q berkeley
+somewhere in one of the recipient addresses.
+Similarly,
+.q \-qSstring
+limits the run to particular senders and
+.q \-qIstring
+limits it to particular identifiers.
 .sh 2 "Debugging"
 .pp
 There are a fairly large number of debug flags
 .sh 2 "Debugging"
 .pp
 There are a fairly large number of debug flags
@@ -1252,7 +1373,31 @@ for this run only.
 .pp
 Some options have security implications.
 Sendmail allows you to set these,
 .pp
 Some options have security implications.
 Sendmail allows you to set these,
-but refuses to root as root thereafter.
+but refuses to run as root thereafter.
+.sh 2 "Logging Traffic"
+.pp
+Many SMTP implementations do not fully implement the protocol.
+For example, some personal computer based SMTPs
+do not understand continuation lines in reply codes.
+These can be very hard to trace.
+If you suspect such a problem, you can set traffic logging using the
+.b \-X
+flag.
+For example,
+.(b
+/usr/\*(SD/sendmail \-X /tmp/traffic -bd
+.)b
+will log all traffic in the file
+.i /tmp/traffic .
+.pp
+This logs a lot of data very quickly and should never be used
+during normal operations.
+After starting up such a daemon,
+force the errant implementation to send a message to your host.
+All message traffic in and out of
+.i sendmail ,
+including the incoming SMTP traffic,
+will be logged in this file.
 .sh 1 "TUNING"
 .pp
 There are a number of configuration parameters
 .sh 1 "TUNING"
 .pp
 There are a number of configuration parameters
@@ -1262,12 +1407,12 @@ Most of these are set
 using an option in the configuration file.
 For example,
 the line
 using an option in the configuration file.
 For example,
 the line
-.q OT3d
+.q OT5d
 sets option
 .q T
 to the value
 sets option
 .q T
 to the value
-.q 3d
-(three days).
+.q 5d
+(five days).
 .pp
 Most of these options have appropriate defaults for most sites.
 However,
 .pp
 Most of these options have appropriate defaults for most sites.
 However,
@@ -1304,26 +1449,81 @@ flag
 specifies how often a sub-daemon will run the queue.
 This is typically set to between fifteen minutes
 and one hour.
 specifies how often a sub-daemon will run the queue.
 This is typically set to between fifteen minutes
 and one hour.
+RFC 1123 section 5.3.1.1 recommends that this be at least 30 minutes.
 .sh 3 "Read timeouts"
 .pp
 It is possible to time out when reading the standard input
 or when reading from a remote SMTP server.
 .sh 3 "Read timeouts"
 .pp
 It is possible to time out when reading the standard input
 or when reading from a remote SMTP server.
-Technically,
-this is not acceptable within the published protocols.
-However,
-it might be appropriate to set it to something large
-in certain environments
-(such as an hour).
-This will reduce the chance of large numbers of idle daemons
-piling up on your system.
-This timeout is set using the
+These timeouts are set using the
 .b r
 option in the configuration file.
 .b r
 option in the configuration file.
+The argument is a list of
+.i keyword=value
+pairs.
+The recognized keywords, their default values, and the minimum values
+allowed by RFC 1123 section 5.3.2 are:
+.nr ii 1i
+.ip initial
+The wait for the initial 220 greeting message
+[5m, 5m].
+.ip helo
+The wait for a reply from a HELO or EHLO command
+[5m, unspecified].
+This may require a host name lookup, so
+five minutes is probably a reasonable minimum.
+.ip mail\(dg
+The wait for a reply from a MAIL command
+[10m, 5m].
+.ip rcpt\(dg
+The wait for a reply from a RCPT command
+[1h, 5m].
+This should be long
+because it could be pointing at a list
+that takes a long time to expand.
+.ip datainit\(dg
+The wait for a reply from a DATA command
+[5m, 2m].
+.ip datablock\(dg
+The wait for reading a data block
+(that is, the body of the message).
+[1h, 3m].
+This should be long because it also applies to programs
+piping input to
+.i sendmail
+which have no guarantee of promptness.
+.ip datafinal\(dg
+The wait for a reply from the dot terminating a message.
+[1h, 10m].
+If this is shorter than the time actually needed
+for the receiver to deliver the message,
+duplicates will be generated.
+This is discussed in RFC 1047.
+.ip rset
+The wait for a reply from a RSET command
+[5m, unspecified].
+.ip quit
+The wait for a reply from a QUIT command
+[2m, unspecified].
+.ip misc
+The wait for a reply from miscellaneous (but short) commands
+such as NOOP (no-operation) and VERB (go into verbose mode).
+[2m, unspecified].
+.ip command\(dg
+In server SMTP,
+the time to wait for another command.
+[1h, 5m].
+.ip ident
+The timeout waiting for a reply to an IDENT query
+[30s, unspecified].
+.lp
+For compatibility with old configuration files,
+if no ``keyword='' is specified,
+all the timeouts marked with \(dg are set to the indicated value.
 .pp
 .pp
-RFC1123
-recommends that this option be set to five minutes.
+Many of the RFC 1123 minimum values
+may well be too short.
 .i Sendmail
 .i Sendmail
-was designed to the RFC822 protocols,
+was designed to the RFC 822 protocols,
 which did not specify read timeouts;
 hence,
 .i sendmail
 which did not specify read timeouts;
 hence,
 .i sendmail
@@ -1340,16 +1540,17 @@ with the name server;
 this involves network delays,
 and can in some cases can be considerable.
 .)f
 this involves network delays,
 and can in some cases can be considerable.
 .)f
-I recommend a two hour timeout \*-
+I recommend a one hour timeout \*-
 since this failure is rare,
 a long timeout is not onerous
 and may ultimately help reduce network load.
 .pp
 since this failure is rare,
 a long timeout is not onerous
 and may ultimately help reduce network load.
 .pp
-The timeout for a user SMTP process
-waiting for the initial
-.q HELO
-message
-is hard-wired to five minutes.
+For example, the line:
+.(b
+Orcommand=25m,datablock=3h
+.)b
+sets the server SMTP command timeout to 25 minutes
+and the input data block timeout to three hours.
 .sh 3 "Message timeouts"
 .pp
 After sitting in the queue for a few days,
 .sh 3 "Message timeouts"
 .pp
 After sitting in the queue for a few days,
@@ -1378,9 +1579,25 @@ Since this option is global,
 and since you can not
 .i "a priori"
 know how long another host outside your domain will be down,
 and since you can not
 .i "a priori"
 know how long another host outside your domain will be down,
-a three day timeout is recommended.
+a five day timeout is recommended.
 This allows a recipient to fix the problem even if it occurs
 This allows a recipient to fix the problem even if it occurs
-at the beginning of a weekend.
+at the beginning of a long weekend.
+RFC 1123 section 5.3.1.1 says that this parameter
+should be ``at least 4\-5 days''.
+.pp
+The
+.b T
+option can also take a second timeout indicating a time after which
+a warning message should be sent;
+the two timeouts are separated by a slash.
+For example, the value
+.(b
+5d/4h
+.)b
+causes email to fail after five days,
+but a warning message will be sent after four hours.
+This should be large enough that the message will have been tried
+several times.
 .sh 2 "Forking During Queue Runs"
 .pp
 By setting the
 .sh 2 "Forking During Queue Runs"
 .pp
 By setting the
@@ -1413,9 +1630,7 @@ offset by the message class times the
 .q "work class factor"
 and the number of recipients times the
 .q "work recipient factor."
 .q "work class factor"
 and the number of recipients times the
 .q "work recipient factor."
-The priority plus the creation time of the message
-(in seconds since January 1, 1970)
-are used to order the queue.
+The priority is used to order the queue.
 Higher numbers for the priority mean that the message will be processed later
 when running the queue.
 .pp
 Higher numbers for the priority mean that the message will be processed later
 when running the queue.
 .pp
@@ -1439,12 +1654,12 @@ can be set in the configuration file using the
 and
 .b z
 options respectively.
 and
 .b z
 options respectively.
-They default to 1000 (for the recipient factor)
+They default to 30000 (for the recipient factor)
 and 1800
 (for the class factor).
 The initial priority is:
 .EQ
 and 1800
 (for the class factor).
 The initial priority is:
 .EQ
-pri = size - (class times z) + (nrcpt times y)
+pri = size - (class times bold z) + (nrcpt times bold y)
 .EN
 (Remember, higher values for this parameter actually mean
 that the job will be treated with lower priority.)
 .EN
 (Remember, higher values for this parameter actually mean
 that the job will be treated with lower priority.)
@@ -1460,6 +1675,9 @@ This is added to the priority,
 so it normally decreases the precedence of the job,
 on the grounds that jobs that have failed many times
 will tend to fail again in the future.
 so it normally decreases the precedence of the job,
 on the grounds that jobs that have failed many times
 will tend to fail again in the future.
+The
+.b Z
+option defaults to 90000.
 .sh 2 "Load Limiting"
 .pp
 .i Sendmail
 .sh 2 "Load Limiting"
 .pp
 .i Sendmail
@@ -1486,19 +1704,21 @@ plus one
 exceeds the priority of the message \(em
 that is, the message is queued iff:
 .EQ
 exceeds the priority of the message \(em
 that is, the message is queued iff:
 .EQ
-pri > QF over { LA - x + 1 }
+pri > { bold q } over { LA - { bold x } + 1 }
 .EN
 The
 .b q
 .EN
 The
 .b q
-option defaults to 10000,
-so each point of load average is worth 10000
+option defaults to 200000,
+so each point of load average is worth 200000
 priority points
 priority points
-(as described above, that is, bytes + seconds + offsets).
+(as described above).
 .pp
 For drastic cases,
 the
 .b X
 .pp
 For drastic cases,
 the
 .b X
-option defines a load average at which sendmail will refuse
+option defines a load average at which
+.i sendmail
+will refuse
 to accept network connections.
 Locally generated mail
 (including incoming UUCP mail)
 to accept network connections.
 Locally generated mail
 (including incoming UUCP mail)
@@ -1534,76 +1754,57 @@ Mode
 is probably a good compromise.
 However, this mode can cause large numbers of processes
 if you have a mailer that takes a long time to deliver a message.
 is probably a good compromise.
 However, this mode can cause large numbers of processes
 if you have a mailer that takes a long time to deliver a message.
+.pp
+If you run in mode
+.q q
+(queue only)
+.i sendmail
+will not expand aliases and follow .forward files
+upon initial receipt of the mail.
+This speeds up the response to RCPT commands.
 .sh 2 "Log Level"
 .pp
 .sh 2 "Log Level"
 .pp
-The level of logging can be set for sendmail.
+The level of logging can be set for
+.i sendmail .
 The default using a standard configuration table is level 9.
 The levels are as follows:
 .nr ii 0.5i
 .ip 0
 No logging.
 .ip 1
 The default using a standard configuration table is level 9.
 The levels are as follows:
 .nr ii 0.5i
 .ip 0
 No logging.
 .ip 1
-Major problems only.
+Serious system failures and potential security problems.
 .ip 2
 .ip 2
-Message collections and failed deliveries.
+Lost communications (network problems) and protocol failures.
 .ip 3
 .ip 3
-Successful deliveries.
+Other serious failures.
 .ip 4
 .ip 4
-Messages being deferred
-(due to a host being down, etc.).
+Minor failures.
 .ip 5
 .ip 5
-Normal message queueups.
+Message collection statistics.
 .ip 6
 .ip 6
-Unusual but benign incidents,
-e.g.,
-trying to process a locked queue file.
+Creation of error messages,
+VRFY and EXPN commands.
+.ip 7
+Delivery failures (host or user unknown, etc.).
+.ip 8
+Successful deliveries.
 .ip 9
 .ip 9
-Log internal queue id to external message id mappings.
-This can be useful for tracing a message
-as it travels between several hosts.
-Also logs any VRFY or EXPN requests.
-.ip 11
+Messages being deferred
+(due to a host being down, etc.).
+.ip 10
+Database expansion (alias, forward, and userdb lookups).
+.ip 15
+Automatic alias database rebuilds.
+.ip 20
 Logs attempts to run locked queue files.
 These are not errors,
 but can be useful to note if your queue appears to be clogged.
 Logs attempts to run locked queue files.
 These are not errors,
 but can be useful to note if your queue appears to be clogged.
-.ip 12
-Several messages that are basically only of interest
-when debugging.
-.ip 16
-Verbose information regarding the queue.
-.sh 2 "Wildcard MX Records"
-.pp
-Normally, when
-.i sendmail
-is looking up host names from the name server,
-it uses the querytype of
-.q CNAME .
-The
-.b w
-option will ask the name server to use a querytype of
-.q ANY .
-This finds CNAME, A, and MX records,
-and causes the local name server to cache all records it finds,
-thus improving performance.
-.pp
-However, if your site has wildcard MX records, this can cause problems.
-For example, suppose your site has a record directing
-.q "*.HiTech.COM"
-to
-.q "gateway.HiTech.COM" .
-When the resolver looks for (e.g.)
-.q "mammoth.Berkeley.EDU" ,
-it starts by appending the local domain name (in this case,
-.q "HiTech.COM" ),
-thus looking for
-.q "mammoth.Berkeley.EDU.HiTech.COM"
-\*- which of course matches
-.q "*.HiTech.COM" .
-.pp
-If you do not have wildcard MX records in your domain,
-you can set the
-.b w
-option to get better performance.
+.ip 30
+Lost locks (only if using lockf instead of flock).
+.lp
+Additionally,
+values above 64 are reserved for extremely verbose debuggging output.
+No normal site would ever set these.
 .sh 2 "File Modes"
 .pp
 There are a number of files
 .sh 2 "File Modes"
 .pp
 There are a number of files
@@ -1698,7 +1899,7 @@ any intended changes will also be ignored or forgotten.
 .sh 2 "Connection Caching"
 .pp
 When processing the queue,
 .sh 2 "Connection Caching"
 .pp
 When processing the queue,
-.b sendmail
+.i sendmail
 will try to keep the last few open connections open
 to avoid startup and shutdown costs.
 This only applies to IPC connections.
 will try to keep the last few open connections open
 to avoid startup and shutdown costs.
 This only applies to IPC connections.
@@ -1722,7 +1923,7 @@ connections will be closed as quickly as possible.
 The default is one.
 This should be set as appropriate for your system size;
 it will limit the amount of system resources that
 The default is one.
 This should be set as appropriate for your system size;
 it will limit the amount of system resources that
-.b sendmail
+.i sendmail
 will use during queue runs.
 .pp
 The
 will use during queue runs.
 .pp
 The
@@ -1741,20 +1942,29 @@ The default is five minutes.
 If your system supports the name server,
 then the probability is that
 .i sendmail
 If your system supports the name server,
 then the probability is that
 .i sendmail
-will be using it regardless of how you configure sendmail.
-However, if you have nameserver support
-which you are not using,
-sendmail will get a
+will be using it regardless of how you configure
+.i sendmail .
+In particular, the system routine
+.i gethostbyname (3)
+is used to look up host names,
+and most vendor versions try some combination of DNS, NIS,
+and file lookup in /etc/hosts.
+.pp
+However, if you do not have a nameserver configured at all,
+such as at a UUCP-only site,
+.i sendmail
+will get a
 .q "connection refused"
 message when it tries to connect to the name server
 .q "connection refused"
 message when it tries to connect to the name server
-(either by calling
+(either indirectly by calling
 .i gethostbyname
 .i gethostbyname
-or by trying to look up the MX records).
+or directly by looking up MX records).
 If the
 .b I
 option is set,
 .i sendmail
 If the
 .b I
 option is set,
 .i sendmail
-will interpret this to mean a temporary failure;
+will interpret this to mean a temporary failure
+and will queue the mail for later processing;
 otherwise, it ignores the name server data.
 If your name server is running properly,
 the setting of this option is not relevant;
 otherwise, it ignores the name server data.
 If your name server is running properly,
 the setting of this option is not relevant;
@@ -1777,13 +1987,14 @@ and turns off the DNSRCH (search the domain path) options.
 Most resolver libraries default DNSRCH, DEFNAMES, and RECURSE
 flags on and all others off.
 Note the use of the initial ``True'' \*-
 Most resolver libraries default DNSRCH, DEFNAMES, and RECURSE
 flags on and all others off.
 Note the use of the initial ``True'' \*-
-this is for compatibility with previous versions of sendmail,
+this is for compatibility with previous versions of
+.i sendmail ,
 but is not otherwise necessary.
 .pp
 but is not otherwise necessary.
 .pp
-Version 1 configurations
+Version level 1 configurations
 turn DNSRCH and DEFNAMES off when doing delivery lookups,
 but leave them on everywhere else.
 turn DNSRCH and DEFNAMES off when doing delivery lookups,
 but leave them on everywhere else.
-Release 6 of
+Version 8 of
 .i sendmail
 ignores them when doing canonification lookups
 (that is, when using $[ ... $]),
 .i sendmail
 ignores them when doing canonification lookups
 (that is, when using $[ ... $]),
@@ -1802,6 +2013,11 @@ This allows names such as
 ``utc.CS''
 to match the site in Czechoslovakia
 rather than the site in your local Computer Science department.
 ``utc.CS''
 to match the site in Czechoslovakia
 rather than the site in your local Computer Science department.
+It also prefers A and CNAME records over MX records \*-
+that is, if it finds an MX record it makes note of it,
+but keeps looking.
+This way, if you have a wildcard MX record matching your domain,
+it will not assume that all names match.
 .sh 2 "Moving the Per-User Forward Files"
 .pp
 Some sites mount each user's home directory
 .sh 2 "Moving the Per-User Forward Files"
 .pp
 Some sites mount each user's home directory
@@ -1833,6 +2049,83 @@ If you create a directory such as /var/forward,
 it should be mode 1777
 (that is, the sticky bit should be set).
 Users should create the files mode 644.
 it should be mode 1777
 (that is, the sticky bit should be set).
 Users should create the files mode 644.
+.sh 2 "Free Space"
+.pp
+On systems that have the
+.i statfs (2)
+system call,
+you can specify a minimum number of free blocks on the queue filesystem
+using the
+.b b
+option.
+If there are fewer than the indicated number of blocks free
+on the filesystem on which the queue is mounted
+the SMTP server will reject mail
+with the
+452 error code.
+This invites the SMTP client to try again later.
+.pp
+Beware of setting this option too high;
+it can cause rejection of email
+when that mail would be processed without difficulty.
+.pp
+This option can also specify an advertised
+.q "maximum message size"
+for hosts that speak ESMTP.
+.sh 2 "Privacy Flags"
+.pp
+The
+.b p
+option allows you to set certain
+``privacy''
+flags.
+Actually, many of them don't give you any extra privacy,
+rather just insisting that client SMTP servers
+use the HELO command
+before using certain commands.
+.pp
+The option takes a series of flag names;
+the final privacy is the inclusive or of those flags.
+For example:
+.(b
+Op needmailhelo, noexpn
+.)b
+insists that the HELO or EHLO command be used before a MAIL command is accepted
+and disables the EXPN command.
+.pp
+The
+.q restrictmailq
+option restricts printing the queue to the group that owns the queue directory.
+It is absurd to set this if you don't also protect the logs.
+.pp
+The
+.q restrictqrun
+option restricts people running the queue
+(that is, using the
+.b \-q
+command line flag)
+to root and the owner of the queue directory.
+.sh 2 "Send to Me Too"
+.pp
+Normally,
+.i sendmail
+deletes the (envelope) sender from any list expansions.
+For example, if
+.q matt
+sends to a list that contains
+.q matt
+as one of the members he won't get a copy of the message.
+If the
+.b \-m
+(me too)
+command line flag, or if the
+.b m
+option is set in the configuration file,
+this behaviour is supressed.
+Some sites like to run the
+.sm SMTP
+daemon with
+.b \-m .
 .sh 1 "THE WHOLE SCOOP ON THE CONFIGURATION FILE"
 .pp
 This section describes the configuration file
 .sh 1 "THE WHOLE SCOOP ON THE CONFIGURATION FILE"
 .pp
 This section describes the configuration file
@@ -1918,6 +2211,19 @@ the input is rewritten to the
 The
 .i comments
 are ignored.
 The
 .i comments
 are ignored.
+.pp
+Macro expansions of the form
+.b $ \c
+.i x
+are performed when the configuration file is read.
+Expansions of the form
+.b $& \c
+.i x
+are performed at run time using a somewhat less general algorithm.
+This for is intended only for referencing internally defined macros
+such as
+.b $h
+that are changed at runtime.
 .sh 4 "The left hand side"
 .pp
 The left hand side of rewriting rules contains a pattern.
 .sh 4 "The left hand side"
 .pp
 The left hand side of rewriting rules contains a pattern.
@@ -1929,8 +2235,8 @@ The metasymbols are:
 \fB$*\fP       Match zero or more tokens
 \fB$+\fP       Match one or more tokens
 \fB$\-\fP      Match exactly one token
 \fB$*\fP       Match zero or more tokens
 \fB$+\fP       Match one or more tokens
 \fB$\-\fP      Match exactly one token
-\fB$=\fP\fIx\fP        Match any token in class \fIx\fP
-\fB$~\fP\fIx\fP        Match any token not in class \fIx\fP
+\fB$=\fP\fIx\fP        Match any phrase in class \fIx\fP
+\fB$~\fP\fIx\fP        Match any word not in class \fIx\fP
 .)b
 If any of these match,
 they are assigned to the symbol
 .)b
 If any of these match,
 they are assigned to the symbol
@@ -1955,6 +2261,17 @@ the rule will match, and the values passed to the RHS will be:
 $1     UCBARPA
 $2     eric
 .)b
 $1     UCBARPA
 $2     eric
 .)b
+.pp
+Additionally, the LHS can include
+.b $@
+to match zero tokens.
+This is
+.i not
+bound to a
+.b $ \c
+.i N
+on the RHS, and is normally only used when it stands alone
+in order to match the null input.
 .sh 4 "The right hand side"
 .pp
 When the left hand side of a rewriting rule matches,
 .sh 4 "The right hand side"
 .pp
 When the left hand side of a rewriting rule matches,
@@ -1993,7 +2310,15 @@ and
 .b $]
 is looked up using the
 .i gethostent \|(3)
 .b $]
 is looked up using the
 .i gethostent \|(3)
-routines and replaced by the canonical name.
+routines and replaced by the canonical name\**.
+.(f
+\**This is actually
+completely equivalent
+to $(host \fIhostname\fP$).
+In particular, a
+.b $:
+default can be used.
+.)f
 For example,
 .q $[csam$]
 might become
 For example,
 .q $[csam$]
 might become
@@ -2002,6 +2327,10 @@ and
 .q $[[128.32.130.2]$]
 would become
 .q vangogh.CS.Berkeley.EDU.
 .q $[[128.32.130.2]$]
 would become
 .q vangogh.CS.Berkeley.EDU.
+.i Sendmail
+recognizes it's numeric IP address
+without calling the name server
+and replaces it with it's canonical name.
 .pp
 The
 .b $(
 .pp
 The
 .b $(
@@ -2031,26 +2360,47 @@ The
 .b $#
 syntax should
 .i only
 .b $#
 syntax should
 .i only
-be used in ruleset zero.
+be used in ruleset zero
+or a subroutine of ruleset zero.
 It causes evaluation of the ruleset to terminate immediately,
 It causes evaluation of the ruleset to terminate immediately,
-and signals to sendmail that the address has completely resolved.
+and signals to
+.i sendmail
+that the address has completely resolved.
 The complete syntax is:
 .(b
 The complete syntax is:
 .(b
-\fB$#\fP\fImailer\fP\fB$@\fP\fIhost\fP\fB$:\fP\fIuser\fP
+\fB$#\fP\fImailer\fP \fB$@\fP\fIhost\fP \fB$:\fP\fIuser\fP
 .)b
 This specifies the
 {mailer, host, user}
 3-tuple necessary to direct the mailer.
 If the mailer is local
 .)b
 This specifies the
 {mailer, host, user}
 3-tuple necessary to direct the mailer.
 If the mailer is local
-the host part may be omitted.
+the host part may be omitted\**.
+.(f
+\**You may want to use it for special
+.q "per user"
+extensions.
+For example, at CMU you can send email to
+.q jgm+foo ;
+the part after the plus sign
+is not part of the user name,
+and is passed to the local mailer for local use.
+.)f
 The
 .i mailer
 The
 .i mailer
-and
-.i host
 must be a single word,
 but the
 must be a single word,
 but the
+.i host
+and
 .i user
 may be multi-part.
 .i user
 may be multi-part.
+If the
+.i mailer
+is the builtin IPC mailer,
+the
+.i host
+may be a colon-separated list of hosts
+that are searched in order for the first working address
+(exactly like MX records).
 .pp
 A RHS may also be preceded by a
 .b $@
 .pp
 A RHS may also be preceded by a
 .b $@
@@ -2078,7 +2428,7 @@ spec;
 for example:
 .(b
 .ta 8n
 for example:
 .(b
 .ta 8n
-R$+    $:$>7$1
+R$+    $: $>7 $1
 .)b
 matches anything,
 passes that to ruleset seven,
 .)b
 matches anything,
 passes that to ruleset seven,
@@ -2099,7 +2449,170 @@ and finally
 and
 .b $:
 are processed.
 and
 .b $:
 are processed.
-..sh 3 "D \*- define macro"
+.sh 4 "Semantics of rewriting rule sets"
+.pp
+There are five rewriting sets
+that have specific semantics.
+These are related as depicted by figure 2.
+.(z
+.hl
+.ie n \{\
+.(c
+                    +---+
+                 -->| 0 |-->resolved address
+                /   +---+
+               /            +---+   +---+
+              /        ---->| 1 |-->| S |--
+       +---+ / +---+  /     +---+   +---+  \e    +---+
+addr-->| 3 |-->| D |--                      --->| 4 |-->msg
+       +---+   +---+  \e     +---+   +---+  /    +---+
+                        --->| 2 |-->| R |--
+                            +---+   +---+
+.)c
+
+.\}
+.el .ie !"\*(.T"" \
+\{\
+.PS
+boxwid = 0.3i
+boxht = 0.3i
+movewid = 0.3i
+moveht = 0.3i
+linewid = 0.3i
+lineht = 0.3i
+
+       box invis "addr"; arrow
+Box3:  box "3"
+A1:    arrow
+BoxD:  box "D"; line; L1: Here
+C:     [
+       C1:     arrow; box "1"; arrow; box "S"; line; E1: Here
+               move to C1 down 0.5; right
+       C2:     arrow; box "2"; arrow; box "R"; line; E2: Here
+       ] with .w at L1 + (0.5, 0)
+       move to C.e right 0.5
+L4:    arrow; box "4"; arrow; box invis "msg"
+       line from L1 to C.C1
+       line from L1 to C.C2
+       line from C.E1 to L4
+       line from C.E2 to L4
+       move to BoxD.n up 0.6; right
+Box0:  arrow; box "0"
+       arrow; box invis "resolved address" width 1.3
+       line from 1/3 of the way between A1 and BoxD.w to Box0
+.PE
+.\}
+.el .sp 2i
+.ce
+Figure 2 \*- Rewriting set semantics
+.(c
+D \*- sender domain addition
+S \*- mailer-specific sender rewriting
+R \*- mailer-specific recipient rewriting
+.)c
+.hl
+.)z
+.pp
+Ruleset three
+should turn the address into
+.q "canonical form."
+This form should have the basic syntax:
+.(b
+local-part@host-domain-spec
+.)b
+If no
+.q @
+sign is specified,
+then the
+host-domain-spec
+.i may
+be appended from the
+sender address
+(if the
+.b C
+flag is set in the mailer definition
+corresponding to the
+.i sending
+mailer).
+Ruleset three
+is applied by
+.i sendmail
+before doing anything with any address.
+.pp
+Ruleset zero
+is applied after ruleset three
+to addresses that are going to actually specify recipients.
+It must resolve to a
+.i "{mailer, host, user}"
+triple.
+The
+.i mailer
+must be defined in the mailer definitions
+from the configuration file.
+The
+.i host
+is defined into the
+.b $h
+macro
+for use in the argv expansion of the specified mailer.
+.pp
+Rulesets one and two
+are applied to all sender and recipient addresses respectively.
+They are applied before any specification
+in the mailer definition.
+They must never resolve.
+.pp
+Ruleset four is applied to all addresses
+in the message.
+It is typically used
+to translate internal to external form.
+.sh 4 "IPC mailers"
+.pp
+Some special processing occurs
+if the ruleset zero resolves to an IPC mailer
+(that is, a mailer that has
+.q [IPC]
+listed as the Path in the
+.b M
+configuration line.
+The host name passed after
+.q $@
+has MX expansion performed;
+this looks the name up in DNS to find alternate delivery sites.
+.pp
+The host name can also be provided as a dotted quad in square brackets;
+for example:
+.(b
+[128.32.149.78]
+.)b
+This causes direct conversion of the numeric value
+to a TCP/IP host address.
+.pp
+The host name passed in after the
+.q $@
+may also be a colon-separated list of hosts.
+Each is separately MX expanded and the results are concatenated
+to make (essentially) one long MX list.
+The intent here is to create
+.q fake
+MX records that are not published in DNS
+for private internal networks.
+.pp
+As a final special case, the host name can be passed in
+as a text string
+in square brackets:
+.(b
+[ucbvax.berkeley.edu]
+.)b
+This form avoids the MX mapping.
+.b N.B.:
+This is intended only for situations where you have a network firewall,
+so that your MX record points to a gateway machine;
+this machine could then do direct delivery to machines
+within your local domain.
+Use of this feature directly violates RFC 1123 section 5.3.5:
+it should not be used lightly.
+.sh 3 "D \*- define macro"
 .pp
 Macros are named with a single character.
 These may be selected from the entire ASCII set,
 .pp
 Macros are named with a single character.
 These may be selected from the entire ASCII set,
@@ -2128,12 +2641,16 @@ using the construct
 where
 .i x
 is the name of the macro to be interpolated.
 where
 .i x
 is the name of the macro to be interpolated.
-In particular,
-lower case letters are reserved to have
-special semantics,
-used to pass information in or out of sendmail,
-and some special characters are reserved to
-provide conditionals, etc.
+This interpolation is done when the configuration file is read,
+except in
+.b M
+lines.
+The special construct
+.b $& \c
+.i x
+can be used in
+.b R
+lines to get deferred interpolation.
 .pp
 Conditionals can be specified using the syntax:
 .(b
 .pp
 Conditionals can be specified using the syntax:
 .(b
@@ -2153,38 +2670,89 @@ The
 .b $| )
 clause may be omitted.
 .pp
 .b $| )
 clause may be omitted.
 .pp
-The following macros
-.i must
-be defined to transmit information into
-.i sendmail:
-.(b
-.ta 4n
-e      The SMTP entry message
-j      The \*(lqofficial\*(rq domain name for this site
-l      The format of the UNIX from line
-n      The name of the daemon (for error messages)
-o      The set of "operators" in addresses
-q      default format of sender address
-.)b
-The
-.b $e
-macro is printed out when SMTP starts up.
+Lower case macro names are reserved to have
+special semantics,
+used to pass information in or out of
+.i sendmail ,
+and special characters are reserved to
+provide conditionals, etc.
+Upper case names
+(that is,
+.b $A
+through
+.b $Z )
+are specifically reserved for configuration file authors.
+.pp
+The following macros are defined and/or used internally by
+.i sendmail
+for interpolation into argv's for mailers
+or for other contexts.
+The ones marked \(dg are information passed into sendmail\**,
+.(f
+\**As of version 8.6,
+all of these macros have reasonable defaults.
+Previous versions required that they be defined.
+.)f
+the ones marked \(dd are information passed both in and out of sendmail,
+and the unmarked macros are passed out of sendmail
+but are not otherwise used internally.
+These macros are:
+.nr ii 5n
+.ip $a
+.b "The origination date in RFC 822 format."
+.ip $b
+.b "The current date in RFC 822 format."
+.ip $c
+.b "The hop count."
+.ip $d
+.b "The current date in UNIX (ctime) format."
+.ip $e\(dg
+.b "The SMTP entry message."
+This is printed out when SMTP starts up.
 The first word must be the
 .b $j
 The first word must be the
 .b $j
-macro.
-The
+macro as specified by RFC821.
+Defaults to
+.q "$j Sendmail $v ready at $b" .
+Commonly redefined to include the configuration version number, e.g.,
+.q "$j Sendmail $v/$Z ready at $b"
+.ip $f
+.b "The sender (from) address."
+.ip $g
+.b "The sender address relative to the recipient."
+.ip $h
+.b "The recipient host."
+.ip $i
+.b "The queue id."
+.ip $j\(dd
+.b "The \*(lqofficial\*(rq domain name for this site."
+This is fully qualified if the full qualification can be found.
+It
+.i must
+be redefined to be the fully qualified domain name
+if your system is not configured so that information can find
+it automatically.
+.ip $k
+.b "The UUCP node name (from the uname system call)."
+.ip $l\(dg
+.b "The format of the UNIX from line."
+Unless you have changed the UNIX mailbox format,
+you should not change the default,
+which is
+.q "From $g  $d" .
+.ip $m
+.b "The domain part of the \fIgethostname\fP return value."
+Under normal circumstances,
 .b $j
 .b $j
-macro
-should be in RFC821 format.
-The
-.b $l
-and
-.b $n
-macros can be considered constants
-except under terribly unusual circumstances.
-The
-.b $o
-macro consists of a list of characters
+is equivalent to
+.b $w.$m .
+.ip $n\(dg
+.b "The name of the daemon (for error messages)."
+Defaults to
+.q MAILER-DAEMON .
+.ip $o\(dg
+.b "The set of "operators" in addresses."
+A list of characters
 which will be considered tokens
 and which will separate tokens
 when doing parsing.
 which will be considered tokens
 and which will separate tokens
 when doing parsing.
@@ -2199,55 +2767,56 @@ would be scanned as three tokens:
 .q @,
 and
 .q b.
 .q @,
 and
 .q b.
-Finally, the
+Defaults to
+.q ".:@[]" ,
+which is the minimum set necessary to do RFC 822 parsing;
+a richer set of operators is
+.q ".:%@!/[]" ,
+which adds support for UUCP, the %-hack, and X.400 addresses.
+.ip $p
+.b "Sendmail's process id."
+.ip $q\(dg
+.b "Default format of sender address."
+The
 .b $q
 macro specifies how an address should appear in a message
 when it is defaulted.
 .b $q
 macro specifies how an address should appear in a message
 when it is defaulted.
-For example, on our system these definitions are:
-.(b
-De$j Sendmail $v ready at $b
-DnMAILER-DAEMON
-DlFrom $<  $d
-Do.:%@!^/
-Dq$g$?x ($x)$.
-Dj$H.$D
-.)b
-An acceptable alternative for the
-.b $q
-macro is
-.q "$?x$x $.<$g>" .
-These correspond to the following two formats:
+Defaults to
+.q "<$g>" .
+It is commonly redefined to be
+.q "$?x$x <$g>$|$g$."
+or
+.q "$g$?x ($x)$." ,
+corresponding to the following two formats:
 .(b
 .(b
-eric@CS.Berkeley.EDU (Eric Allman)
 Eric Allman <eric@CS.Berkeley.EDU>
 Eric Allman <eric@CS.Berkeley.EDU>
+eric@CS.Berkeley.EDU (Eric Allman)
 .)b
 .)b
+.i Sendmail
+properly quotes names that have special characters
+if the first form is used.
+.ip $r
+.b "Protocol used to receive the message."
+.ip $s
+.b "Sender's host name."
+.ip $t
+.b "A numeric representation of the current time."
+.ip $u
+.b "The recipient user."
+.ip $v
+.b "The version number of \fIsendmail\fP."
+.ip $w\(dd
+.b "The hostname of this site."
 .pp
 .pp
-Some macros are defined by
-.i sendmail
-for interpolation into argv's for mailers
-or for other contexts.
-These macros are:
-.(b
-a      The origination date in RFC 822 format
-b      The current date in RFC 822 format
-c      The hop count
-d      The date in UNIX (ctime) format
-f      The sender (from) address
-g      The sender address relative to the recipient
-h      The recipient host
-i      The queue id
-m      The domain part of the \fIgethostname\fP return value
-p      Sendmail's pid
-r      Protocol used to receive the message
-s      Sender's host name
-t      A numeric representation of the current time
-u      The recipient user
-v      The version number of sendmail
-w      The hostname of this site
-x      The full name of the sender
-z      The home directory of the recipient
-<      The return-path (sender in envelope) relative to recipient
-.)b
+The
+.b $w
+macro is set to the root name of this host (but see below for caveats).
+.ip $x
+.b "The full name of the sender."
+.ip $z
+.b "The home directory of the recipient."
+.ip $_
+.b "The validated sender address."
 .pp
 There are three types of dates that can be used.
 The
 .pp
 There are three types of dates that can be used.
 The
@@ -2272,11 +2841,64 @@ is set to the current time also.
 The
 .b $d
 macro is equivalent to the
 The
 .b $d
 macro is equivalent to the
-.b $a
+.b $b
 macro in UNIX
 (ctime)
 format.
 .pp
 macro in UNIX
 (ctime)
 format.
 .pp
+The macros
+.b $w ,
+.b $j ,
+and
+.b $m
+are set to the identity of this host.
+.i Sendmail
+tries to find the fully qualified name of the host
+if at all possible;
+it does this by calling
+.i gethostname (2)
+to get the current hostname
+and then passing that to
+.i gethostbyname (3)
+which is supposed to return the canonical version of that host name.\**
+.(f
+\**For example, on some systems
+.i gethostname
+might return
+.q foo
+which would be mapped to
+.q foo.bar.com
+by
+.i gethostbyname .
+.)f
+Assuming this is successful,
+.b $j
+is set to the fully qualified name
+and
+.b $m
+is set to the domain part of the name
+(everything after the first dot).
+The
+.b $w
+macro is set to the first word
+(everything before the first dot)
+if you have a level 5 or higher configuration file;
+otherwise, it is set to the same value as
+.b $j .
+If the canonification is not successful,
+it is imperative that the config file set
+.b $j
+to the fully qualified domain name\**.
+.(f
+\**Older versions of sendmail didn't pre-define
+.b $j
+at all, so up until 8.6,
+config files
+.i always
+had to define
+.b $j .
+.)f
+.pp
 The
 .b $f
 macro is the id of the sender
 The
 .b $f
 macro is the id of the sender
@@ -2289,9 +2911,9 @@ macro is set to the address of the sender
 relative to the recipient.
 For example,
 if I send to
 relative to the recipient.
 For example,
 if I send to
-.q bollard@matisse
+.q bollard@matisse.CS.Berkeley.EDU
 from the machine
 from the machine
-.q ucbarpa
+.q vangogh.CS.Berkeley.EDU
 the
 .b $f
 macro will be
 the
 .b $f
 macro will be
@@ -2299,21 +2921,14 @@ macro will be
 and the
 .b $g
 macro will be
 and the
 .b $g
 macro will be
-.q eric@ucbarpa.
-.pp
-The
-.b $<
-macro is identical to the
-.b $g
-macro except that it uses the envelope sender
-instead of the From: address in the body of the message.
+.q eric@vangogh.CS.Berkeley.EDU.
 .pp
 The
 .b $x
 macro is set to the full name of the sender.
 This can be determined in several ways.
 It can be passed as flag to
 .pp
 The
 .b $x
 macro is set to the full name of the sender.
 This can be determined in several ways.
 It can be passed as flag to
-.i sendmail.
+.i sendmail .
 The second choice is the value of the
 .q Full-name:
 line in the header if it exists,
 The second choice is the value of the
 .q Full-name:
 line in the header if it exists,
@@ -2361,10 +2976,7 @@ macro is set to be the version number of
 .i sendmail ;
 this is normally put in timestamps
 and has been proven extremely useful for debugging.
 .i sendmail ;
 this is normally put in timestamps
 and has been proven extremely useful for debugging.
-The
-.b $w
-macro is set to the name of this host
-if it can be determined.
+.pp
 The
 .b $c
 field is set to the
 The
 .b $c
 field is set to the
@@ -2380,132 +2992,22 @@ The
 .b $r
 and
 .b $s
 .b $r
 and
 .b $s
-fields are set to the protocol used to communicate with sendmail
+fields are set to the protocol used to communicate with
+.i sendmail
 and the sending hostname.
 and the sending hostname.
-.sh 4 "Semantics of rewriting rule sets"
-.pp
-There are five rewriting sets
-that have specific semantics.
-These are related as depicted by figure 2.
-.(z
-.hl
-.ie n \{\
-.(c
-                    +---+
-                 -->| 0 |-->resolved address
-                /   +---+
-               /            +---+   +---+
-              /        ---->| 1 |-->| S |--
-       +---+ / +---+  /     +---+   +---+  \e    +---+
-addr-->| 3 |-->| D |--                      --->| 4 |-->msg
-       +---+   +---+  \e     +---+   +---+  /    +---+
-                        --->| 2 |-->| R |--
-                            +---+   +---+
-.)c
-
-.\}
-.el .ie !"\*(.T"" \
-\{\
-.PS
-boxwid = 0.3i
-boxht = 0.3i
-movewid = 0.3i
-moveht = 0.3i
-linewid = 0.3i
-lineht = 0.3i
-
-       box invis "addr"; arrow
-Box3:  box "3"
-A1:    arrow
-BoxD:  box "D"; line; L1: Here
-C:     [
-       C1:     arrow; box "1"; arrow; box "S"; line; E1: Here
-               move to C1 down 0.5; right
-       C2:     arrow; box "2"; arrow; box "R"; line; E2: Here
-       ] with .w at L1 + (0.5, 0)
-       move to C.e right 0.5
-L4:    arrow; box "4"; arrow; box invis "msg"
-       line from L1 to C.C1
-       line from L1 to C.C2
-       line from C.E1 to L4
-       line from C.E2 to L4
-       move to BoxD.n up 0.6; right
-Box0:  arrow; box "0"
-       arrow; box invis "resolved address" width 1.3
-       line from 1/3 of the way between A1 and BoxD.w to Box0
-.PE
-.\}
-.el .sp 2i
-.ce
-Figure 2 \*- Rewriting set semantics
-.(c
-D \*- sender domain addition
-S \*- mailer-specific sender rewriting
-R \*- mailer-specific recipient rewriting
-.)c
-.hl
-.)z
 .pp
 .pp
-Ruleset three
-should turn the address into
-.q "canonical form."
-This form should have the basic syntax:
-.(b
-local-part@host-domain-spec
-.)b
-If no
-.q @
-sign is specified,
-then the
-host-domain-spec
-.i may
-be appended from the
-sender address
-(if the
-.b C
-flag is set in the mailer definition
-corresponding to the
-.i sending
-mailer).
-Ruleset three
-is applied by sendmail
-before doing anything with any address.
-.pp
-Ruleset zero
-is applied after ruleset three
-to addresses that are going to actually specify recipients.
-It must resolve to a
-.i "{mailer, host, user}"
-triple.
 The
 The
-.i mailer
-must be defined in the mailer definitions
-from the configuration file.
-The
-.i host
-is defined into the
-.b $h
-macro
-for use in the argv expansion of the specified mailer.
-.pp
-Rulesets one and two
-are applied to all sender and recipient addresses respectively.
-They are applied before any specification
-in the mailer definition.
-They must never resolve.
-.pp
-Ruleset four is applied to all addresses
-in the message.
-It is typically used
-to translate internal to external form.
+.b $_
+is set to a validated sender host name.
+If the sender is running an RFC 1413 compliant IDENT server,
+it will include the user name on that host.
 .sh 3 "C and F \*- define classes"
 .pp
 .sh 3 "C and F \*- define classes"
 .pp
-Classes of words may be defined
+Classes of phrases may be defined
 to match on the left hand side of rewriting rules,
 where a
 to match on the left hand side of rewriting rules,
 where a
-.q word
-is a sequence of characters that do not contain characters
-in the $o macro.
+.q phrase
+is a sequence of characters that do not contain space characters.
 For example
 a class of all local names for this site
 might be created
 For example
 a class of all local names for this site
 might be created
@@ -2521,8 +3023,8 @@ are reserved for system use.
 The syntax is:
 .(b F
 .b C \c
 The syntax is:
 .(b F
 .b C \c
-.i c\|word1
-.i word2...
+.i c\|phrase1
+.i phrase2...
 .br
 .b F \c
 .i c\|file
 .br
 .b F \c
 .i c\|file
@@ -2547,11 +3049,23 @@ reads the elements of the class
 from the named
 .i file .
 .pp
 from the named
 .i file .
 .pp
+The
+.b $~
+(match entries not in class)
+only matches a single word;
+multi-word entries in the class are ignored in this context.
+.pp
 The class
 .b $=w
 is set to be the set of all names
 this host is known by.
 This can be used to match local hostnames.
 The class
 .b $=w
 is set to be the set of all names
 this host is known by.
 This can be used to match local hostnames.
+.pp
+The class
+.b $=k
+is set to be the same as
+.b $k ,
+that is, the UUCP node name.
 .sh 3 "M \*- define mailer"
 .pp
 Programs and interfaces to mailers
 .sh 3 "M \*- define mailer"
 .pp
 Programs and interfaces to mailers
@@ -2582,6 +3096,7 @@ Argv      An argument vector to pass to this mailer
 Eol    The end-of-line string for this mailer
 Maxsize        The maximum message length to this mailer
 Linelimit      The maximum line length in the message body
 Eol    The end-of-line string for this mailer
 Maxsize        The maximum message length to this mailer
 Linelimit      The maximum line length in the message body
+Directory      The working directory for the mailer
 .)b
 Only the first character of the field name is checked.
 .pp
 .)b
 Only the first character of the field name is checked.
 .pp
@@ -2590,6 +3105,18 @@ Any other flags may be used freely
 to conditionally assign headers to messages
 destined for particular mailers.
 .nr ii 4n
 to conditionally assign headers to messages
 destined for particular mailers.
 .nr ii 4n
+.ip a
+Run Extended SMTP (ESMTP) protocol (defined in RFCs 1425, 1426, and 1427).
+.ip b
+Force a blank line on the end of a message.
+This is intended to work around some stupid versions of
+/bin/mail
+that require a blank line, but do not provide it themselves.
+It would not normally be used on network mail.
+.ip c
+Do not include comments in addresses.
+This should only be used if you have to work around
+a remote mailer that gets confused by comments.
 .ip C
 If mail is
 .i received
 .ip C
 If mail is
 .i received
@@ -2639,6 +3166,27 @@ does not have special permissions).
 This mailer wants a
 .q From:
 header line.
 This mailer wants a
 .q From:
 header line.
+.ip g
+Normally,
+.i sendmail
+sends internally generated email (e.g., error messages)
+using the null return address\**
+.(f
+\**Actually, this only applies to SMTP,
+which uses the ``MAIL FROM:<>'' command.
+.)f
+as required by RFC 1123.
+However, some mailers don't accept a null return address.
+If necessary,
+you can set the
+.b g
+flag to prevent
+.i sendmail
+from obeying the standards;
+error messages will be sent as from the MAILER-DAEMON
+(actually, the value of the
+.b $n
+macro).
 .ip h
 Upper case should be preserved in host names
 for this mailer.
 .ip h
 Upper case should be preserved in host names
 for this mailer.
@@ -2686,12 +3234,13 @@ Do not insert a UNIX-style
 .q From
 line on the front of the message.
 .ip p
 .q From
 line on the front of the message.
 .ip p
-Use the return-path in the SMTP
+Use the route-addr style reverse-path in the SMTP
 .q "MAIL FROM:"
 command
 rather than just the return address;
 .q "MAIL FROM:"
 command
 rather than just the return address;
-although this is required in RFC821,
-many hosts do not process return paths properly.
+although this is required in RFC821 section 3.1,
+many hosts do not process reverse-paths properly.
+Reverse-paths are officially discouraged by RFC 1123.
 .ip P
 This mailer wants a
 .q Return-Path:
 .ip P
 This mailer wants a
 .q Return-Path:
@@ -2746,10 +3295,11 @@ This is the default if the
 flag is set.
 Note that setting this is not
 sufficient to get full eight bit data passed through
 flag is set.
 Note that setting this is not
 sufficient to get full eight bit data passed through
-.i sendmail ;
-the
-.b 8
-option must also be set.
+.i sendmail .
+If the
+.b 7
+option is set, this is essentially always set,
+since the eighth bit was stripped on input.
 .pp
 The mailer with the special name
 .q error
 .pp
 The mailer with the special name
 .q error
@@ -2770,9 +3320,56 @@ and the
 exit status to be returned
 if the LHS matches.
 This mailer is only functional in ruleset zero.
 exit status to be returned
 if the LHS matches.
 This mailer is only functional in ruleset zero.
+.pp
+The mailer named
+.q local
+.i must
+be defined in every configuration file.
+This is used to deliver local mail,
+and is treated specially in several ways.
+Additionally, three other mailers named
+.q prog ,
+.q *file* ,
+and
+.q *include*
+may be defined to tune the delivery of messages to programs,
+files,
+and :include: lists respectively.
+They default to:
+.(b
+Mprog, P=/bin/sh, F=lsD, A=sh \-c $u
+M*file*, P=/dev/null, F=lsDFMPEu, A=FILE
+M*include*, P=/dev/null, F=su, A=INCLUDE
+.)b
+.pp
+The Sender and Recipient rewriting sets
+may either be a simple integer
+or may be two integers separated by a slash;
+if so, the first rewriting set is applied to envelope
+addresses
+and the second is applied to headers.
+.pp
+The Directory
+is actually a colon-separated path of directories to try.
+For example, the definition
+.q D=$z:/
+first tries to execute in the recipient's home directory;
+if that is not available,
+it tries to execute in the root of the filesystem.
+This is intended to be used only on the
+.q prog
+mailer,
+since some shells (such as
+.i csh )
+refuse to execute if they cannot read the home directory.
+Since the queue directory is not normally readable by normal users
+.i csh
+scripts as recipients can fail.
 .sh 3 "H \*- define header"
 .pp
 .sh 3 "H \*- define header"
 .pp
-The format of the header lines that sendmail inserts into the message
+The format of the header lines that
+.i sendmail
+inserts into the message
 are defined by the
 .b H
 line.
 are defined by the
 .b H
 line.
@@ -2852,18 +3449,65 @@ rebuild the database
 .b D
 option is also set)
 or issue a warning.
 .b D
 option is also set)
 or issue a warning.
-.ip A\fIfile\fP
-Use the named
-.i file
-as the alias file.
-If no file is specified,
-use
-.i aliases
-in the current directory.
+.ip "A\fIspec, spec, ...\fP"
+Specify possible alias file(s).
+Each
+.i spec
+should be in the format
+``\c
+.i class \c
+.b :
+.i file ''
+where
+.i class \c
+.b :
+is optional and defaults to ``implicit''.
+Depending on how
+.i sendmail
+is compiled, valid classes are
+.q implicit
+(search through a compiled-in list of alias file types,
+for back compatibility),
+.q hash
+(if
+.sm NEWDB
+is specified),
+.q dbm
+(if
+.sm NDBM
+is specified),
+.q stab
+(internal symbol table \*- not normally used
+unless you have no other database lookup),
+or
+.q nis
+(if
+.sm NIS
+is specified).
+If a list of
+.i spec s
+are provided,
+.i sendmail
+searches them in order.
+.ip b\fIN\fP/\fIM\fP
+Insist on at least
+.i N
+blocks free on the filesystem that holds the queue files
+before accepting email via SMTP.
+If there is insufficient space
+.i sendmail
+gives a 452 response
+to the MAIL command.
+This invites the sender to try again later.
+The optional
+.i M
+is a maximum message size advertised in the ESMTP EHLO response.
+It is currently otherwise unused.
 .ip B\fIc\fP
 Set the blank substitution character to
 .i c .
 Unquoted spaces in addresses are replaced by this character.
 .ip B\fIc\fP
 Set the blank substitution character to
 .i c .
 Unquoted spaces in addresses are replaced by this character.
+Defaults to space (i.e., no change is made).
 .ip c
 If an outgoing mailer is marked as being expensive,
 don't connect immediately.
 .ip c
 If an outgoing mailer is marked as being expensive,
 don't connect immediately.
@@ -2889,6 +3533,9 @@ i Deliver interactively (synchronously)
 b      Deliver in background (asynchronously)
 q      Just queue the message (deliver during queue run)
 .)b
 b      Deliver in background (asynchronously)
 q      Just queue the message (deliver during queue run)
 .)b
+Defaults to ``b'' if no option is specified,
+``i'' if it is specified but given no argument
+(i.e., ``Od'' is equivalent to ``Odi'').
 .ip D
 If set,
 rebuild the alias database if necessary and possible.
 .ip D
 If set,
 rebuild the alias database if necessary and possible.
@@ -2937,6 +3584,8 @@ Set the default group id
 for mailers to run in
 to
 .i n .
 for mailers to run in
 to
 .i n .
+Defaults to 1.
+The value can also be given as a symbolic group name.
 .ip G
 Allow fuzzy matching on the GECOS field.
 If this flag is set,
 .ip G
 Allow fuzzy matching on the GECOS field.
 If this flag is set,
@@ -2954,11 +3603,14 @@ The maximum hop count.
 Messages that have been processed more than
 .i N
 times are assumed to be in a loop and are rejected.
 Messages that have been processed more than
 .i N
 times are assumed to be in a loop and are rejected.
+Defaults to 25.
 .ip H\fIfile\fP
 Specify the help file
 for SMTP.
 .ip i
 Ignore dots in incoming messages.
 .ip H\fIfile\fP
 Specify the help file
 for SMTP.
 .ip i
 Ignore dots in incoming messages.
+This is always disabled (that is, dots are always accepted)
+when reading SMTP mail.
 .ip I
 Insist that the BIND name server be running
 to resolve host names.
 .ip I
 Insist that the BIND name server be running
 to resolve host names.
@@ -2980,6 +3632,9 @@ if the name server is not available.
 Thus, you should
 .i never
 set this option if you do not run the name server.
 Thus, you should
 .i never
 set this option if you do not run the name server.
+.ip j
+If set, send error messages in MIME format
+(see RFC1341 and RFC1344 for details).
 .ip J\fIpath\fP
 Set the path for searching for users' .forward files.
 The default is
 .ip J\fIpath\fP
 Set the path for searching for users' .forward files.
 The default is
@@ -3001,7 +3656,9 @@ and then in
 The maximum number of open connections that will be cached at a time.
 The default is one.
 This delays closing the the current connection until
 The maximum number of open connections that will be cached at a time.
 The default is one.
 This delays closing the the current connection until
-either this invocation of sendmail needs to connect to another host
+either this invocation of
+.i sendmail
+needs to connect to another host
 or it terminates.
 Setting it to zero defaults to the old behavior,
 that is, connections are closed immediately.
 or it terminates.
 Setting it to zero defaults to the old behavior,
 that is, connections are closed immediately.
@@ -3012,7 +3669,7 @@ If this time is exceeded,
 the connection is immediately closed.
 This value should be small (on the order of ten minutes).
 Before
 the connection is immediately closed.
 This value should be small (on the order of ten minutes).
 Before
-.b sendmail
+.i sendmail
 uses a cached connection,
 it always sends a NOOP (no operation) command
 to check the connection;
 uses a cached connection,
 it always sends a NOOP (no operation) command
 to check the connection;
@@ -3022,9 +3679,18 @@ The point of this option is to be a good network neighbor
 and avoid using up excessive resources
 on the other end.
 The default is five minutes.
 and avoid using up excessive resources
 on the other end.
 The default is five minutes.
+.ip l
+If there is an
+.q Errors-To:
+header, send error messages to the addresses listed there.
+They normally go to the envelope sender.
+Use of this option causes
+.i sendmail
+to violate RFC 1123.
 .ip L\fIn\fP
 Set the default log level to
 .i n .
 .ip L\fIn\fP
 Set the default log level to
 .i n .
+Defaults to 9.
 .ip m
 Send to me too,
 even if I am in an alias expansion.
 .ip m
 Send to me too,
 even if I am in an alias expansion.
@@ -3034,6 +3700,8 @@ Set the macro
 to
 .i value .
 This is intended only for use from the command line.
 to
 .i value .
 This is intended only for use from the command line.
+.ip n
+Validate the RHS of aliases when rebuilding the alias database.
 .ip o
 Assume that the headers may be in old format,
 i.e.,
 .ip o
 Assume that the headers may be in old format,
 i.e.,
@@ -3046,10 +3714,61 @@ it will be assumed that commas already exist.
 If this flag is not on,
 only commas delimit names.
 Headers are always output with commas between the names.
 If this flag is not on,
 only commas delimit names.
 Headers are always output with commas between the names.
+.ip O\fIoptions\fP
+Set server SMTP options.
+The options are
+.i key=value
+pairs.
+Known keys are:
+.(b
+.ta 1i
+Port   Name/number of listening port (defaults to "smtp")
+Addr   Address mask (defaults INADDR_ANY)
+Family Address family (defaults to INET)
+Listen Size of listen queue (defaults to 10)
+.)b
+The
+.i Addr ess
+mask may be a numeric address in dot notation
+or a network name.
+.ip p\fI\|opt,opt,...\fP
+Set the privacy
+.i opt ions.
+``Privacy'' is really a misnomer;
+many of these are just a way of insisting on stricter adherence
+to the SMTP protocol.
+The
+.i opt ions
+can be selected from:
+.(b
+.ta \w'needvrfyhelo'u+3n
+public Allow open access
+needmailhelo   Insist on HELO or EHLO command before MAIL
+needexpnhelo   Insist on HELO or EHLO command before EXPN
+noexpn Disallow EXPN entirely
+needvrfyhelo   Insist on HELO or EHLO command before VRFY
+novrfy Disallow VRFY entirely
+restrictmailq  Restrict mailq command
+restrictqrun   Restrict \-q command line flag
+goaway Disallow essentially all SMTP status queries
+.)b
+The
+.q goaway
+pseudo-flag sets all flags except
+.q restrictmailq
+and
+.q restrictqrun .
+If mailq is restricted,
+only people in the same group as the queue directory
+can print the queue.
+If queue runs are restricted,
+only root and the owner of the queue directory
+can run the queue.
 .ip P\fIpostmaster\fP
 If set,
 copies of error messages will be sent to the named
 .i postmaster .
 .ip P\fIpostmaster\fP
 If set,
 copies of error messages will be sent to the named
 .i postmaster .
+Only the header of the failed message is sent.
 Since most errors are user problems,
 this is probably not a good idea on large sites,
 and arguably contains all sorts of privacy violations,
 Since most errors are user problems,
 this is probably not a good idea on large sites,
 and arguably contains all sorts of privacy violations,
@@ -3066,15 +3785,64 @@ and the load average limit
 flag)
 to determine the maximum message priority
 that will be sent.
 flag)
 to determine the maximum message priority
 that will be sent.
-Defaults to 10000.
+Defaults to 600000.
 .ip Q\fIdir\fP
 Use the named
 .i dir
 as the queue directory.
 .ip Q\fIdir\fP
 Use the named
 .i dir
 as the queue directory.
-.ip r\fItime\fP
+.ip r\|\fItimeouts\fP
 Timeout reads after
 .i time
 interval.
 Timeout reads after
 .i time
 interval.
+The
+.i timeouts
+argument is a list of
+.i keyword=value
+pairs.
+The recognized timeouts and their default values, and their
+minimum values specified in RFC 1123 section 5.3.2 are:
+.(b
+.ta \w'datafinal'u+3n
+initial        wait for initial greeting message [5m, 5m]
+helo   reply to HELO or EHLO command [5m, none]
+mail   reply to MAIL command [10m, 5m]
+rcpt   reply to RCPT command [1h, 5m]
+datainit       reply to DATA command [5m, 2m]
+datablock      data block read [1h, 3m]
+datafinal      reply to final ``.'' in data [1h, 10m]
+rset   reply to RSET command [5m, none]
+quit   reply to QUIT command [2m, none]
+misc   reply to NOOP and VERB commands [2m, none]
+command        command read [1h, 5m]
+ident  IDENT protocol timeout [30s, none]
+.)b
+All but
+.q command
+apply to client SMTP.
+For back compatibility,
+a timeout with no ``keyword='' part
+will set all of the longer values.
+.ip R
+Normally,
+.i sendmail
+tries to eliminate any unnecessary explicit routes
+when sending an error message
+(as discussed in RFC 1123 \(sc 5.2.6).
+For example,
+when sending an error message to
+.(b
+<@known1,@known2,@unknown:user@known3>
+.)b
+.i sendmail
+will strip off the
+.q @known1
+in order to make the route as direct as possible.
+However, if the
+.b R
+option is set, this will be disabled,
+and the mail will be sent to the first address in the route,
+even if later addresses are known.
+This may be useful if you are caught behind a firewall.
 .ip s
 Be super-safe when running things,
 i.e.,
 .ip s
 Be super-safe when running things,
 i.e.,
@@ -3087,19 +3855,27 @@ under any circumstances.
 .ip S\fIfile\fP
 Log statistics in the named
 .i file .
 .ip S\fIfile\fP
 Log statistics in the named
 .i file .
-.ip t\fIS,D\fP
-Set the local time zone name to
-.i S
-for standard time and
-.i D
-for daylight time;
-this is only used under version six.
-.ip T\fItime\fP
+.ip t\fItzinfo\fP
+Set the local time zone info to
+.i tzinfo
+\*- for example,
+.q PST8PDT .
+Actually, if this is not set,
+the TZ environment variable is cleared (so the system default is used);
+if set but null, the user's TZ variable is used,
+and if set and non-null the TZ variable is set to this value.
+.ip T\fIrtime/wtime\fP
 Set the queue timeout to
 Set the queue timeout to
-.i time .
+.i rtime .
 After this interval,
 messages that have not been successfully sent
 will be returned to the sender.
 After this interval,
 messages that have not been successfully sent
 will be returned to the sender.
+Defaults to five days.
+The optional
+.i wtime
+is the time after which a warning message is sent.
+If it is missing or zero
+then no warning messages are sent.
 .ip u\fIn\fP
 Set the default userid for mailers to
 .i n .
 .ip u\fIn\fP
 Set the default userid for mailers to
 .i n .
@@ -3107,29 +3883,69 @@ Mailers without the
 .i S
 flag in the mailer definition
 will run as this user.
 .i S
 flag in the mailer definition
 will run as this user.
+Defaults to 1.
+The value can also be given as a symbolic user name.
 .ip U\fIudbspec\fP
 The user database specification.
 .ip v
 Run in verbose mode.
 .ip U\fIudbspec\fP
 The user database specification.
 .ip v
 Run in verbose mode.
+If this is set,
+.i sendmail
+adjusts options
+.b c
+(don't connect to expensive mailers)
+and
+.b d
+(delivery mode)
+so that all mail is delivered completely
+in a single job
+so that you can see the entire delivery process.
+Option
+.b v
+should
+.i never
+be set in the configuration file;
+it is intended for command line use only.
+.ip V\fIfallbackhost\fP
+If specified, the
+.i fallbackhost
+acts like a very low priority MX
+on every host.
+This is intended to be used by sites with poor network connectivity.
 .ip w
 .ip w
-Asserts that this domain does not have wildcard MX records
-in the name server database.
-These wildcards can
-.q capture
-names that are directed outward
-and forward them back to your own site.
-If there are no wildcards matching your domain,
-this option will reduce name server load
-and improve performance.
+If you are the
+.q best
+(that is, lowest preference)
+MX for a given host,
+you should normally detect this situation
+and treat that condition specially,
+by forwarding the mail to a UUCP feed,
+treating it as local,
+or whatever.
+However, in some cases (such as Internet firewalls)
+you may want to try to connect directly to that host
+as though it had no MX records at all.
+Setting this option causes
+.i sendmail
+to try this.
+The downside is that errors in your configuration
+are likely to be diagnosed as
+.q "host unknown"
+or
+.q "message timed out"
+instead of something more meaningful.
+This option is disrecommended.
 .ip x\fILA\fP
 When the system load average exceeds
 .i LA ,
 just queue messages
 (i.e., don't try to send them).
 .ip x\fILA\fP
 When the system load average exceeds
 .i LA ,
 just queue messages
 (i.e., don't try to send them).
+Defaults to 8.
 .ip X\fILA\fP
 When the system load average exceeds
 .i LA ,
 refuse incoming SMTP connections.
 .ip X\fILA\fP
 When the system load average exceeds
 .i LA ,
 refuse incoming SMTP connections.
+Defaults to 12.
 .ip y\fIfact\fP
 The indicated
 .i fact or
 .ip y\fIfact\fP
 The indicated
 .i fact or
@@ -3138,6 +3954,7 @@ is added to the priority (thus
 the priority of the job)
 for each recipient,
 i.e., this value penalizes jobs with large numbers of recipients.
 the priority of the job)
 for each recipient,
 i.e., this value penalizes jobs with large numbers of recipients.
+Defaults to 30000.
 .ip Y
 If set,
 deliver each job that is run from the queue in a separate process.
 .ip Y
 If set,
 deliver each job that is run from the queue in a separate process.
@@ -3154,6 +3971,7 @@ and the
 lines in the configuration file)
 and subtracted from the priority.
 Thus, messages with a higher Priority: will be favored.
 lines in the configuration file)
 and subtracted from the priority.
 Thus, messages with a higher Priority: will be favored.
+Defaults to 1800.
 .ip Z\fIfact\fP
 The
 .i fact or
 .ip Z\fIfact\fP
 The
 .i fact or
@@ -3164,12 +3982,10 @@ each time a job is processed,
 its priority will be decreased by the indicated value.
 In most environments this should be positive,
 since hosts that are down are all too often down for a long time.
 its priority will be decreased by the indicated value.
 In most environments this should be positive,
 since hosts that are down are all too often down for a long time.
-.ip 8
-Preserve eight bits of data in the body on input.
-Normally the input is stripped to seven bits as per RFC822.
-See also the
-.b L
-mailer flag.
+Defaults to 90000.
+.ip 7
+Strip input to seven bits for compatibility with old systems.
+This shouldn't be necessary.
 .lp
 All options can be specified on the command line using the
 \-o flag,
 .lp
 All options can be specified on the command line using the
 \-o flag,
@@ -3177,36 +3993,10 @@ but most will cause
 .i sendmail
 to relinquish its setuid permissions.
 The options that will not cause this are
 .i sendmail
 to relinquish its setuid permissions.
 The options that will not cause this are
-d, e, E, i, L, m, o, r, s, v, C, and 8.
+b, d, e, E, i, L, m, o, p, r, s, v, C, and 7.
 Also, M (define macro) when defining the r or s macros
 is also considered
 .q safe .
 Also, M (define macro) when defining the r or s macros
 is also considered
 .q safe .
-.sh 3 "T \*- define trusted users"
-.pp
-Trusted users
-are those users who are permitted
-to override the sender address
-using the
-.b \-f
-flag.
-These typically are
-.q root,
-.q uucp,
-and
-.q network,
-but on some users it may be convenient
-to extend this list to include other users,
-perhaps to support
-a separate
-UUCP
-login for each host.
-The syntax of this line is:
-.(b F
-.b T \c
-.i user1
-.i user2 ...
-.)b
-There may be more than one of these lines.
 .sh 3 "P \*- precedence definitions"
 .pp
 Values for the
 .sh 3 "P \*- precedence definitions"
 .pp
 Values for the
@@ -3228,15 +4018,31 @@ the message class is set to
 Higher numbers mean higher precedence.
 Numbers less than zero
 have the special property
 Higher numbers mean higher precedence.
 Numbers less than zero
 have the special property
-that error messages will not be returned.
+that if an error occurs during processing
+the body of the message will not be returned;
+this is expected to be used for
+.q "bulk"
+mail such as through mailing lists.
 The default precedence is zero.
 For example,
 our list of precedences is:
 .(b
 Pfirst-class=0
 Pspecial-delivery=100
 The default precedence is zero.
 For example,
 our list of precedences is:
 .(b
 Pfirst-class=0
 Pspecial-delivery=100
+Plist=\-30
+Pbulk=\-60
 Pjunk=\-100
 .)b
 Pjunk=\-100
 .)b
+People writing mailing list exploders
+are encouraged to use
+.q "Precedence: list" .
+Older versions of
+.i sendmail
+(which discarded all error returns for negative precedences)
+didn't recognize this name, giving it a default precedence of zero.
+This allows list maintainers to see error returns
+on both old and new versions of
+.i sendmail .
 .sh 3 "V \*- configuration version level"
 .pp
 To provide compatibility with old configuration files,
 .sh 3 "V \*- configuration version level"
 .pp
 To provide compatibility with old configuration files,
@@ -3248,9 +4054,22 @@ These are not intended to be long term supports;
 rather, they describe compatibility features
 which will probably be removed in future releases.
 .pp
 rather, they describe compatibility features
 which will probably be removed in future releases.
 .pp
+.b N.B.:
+these version
+.i levels
+have nothing
+to do with the version
+.i number
+on the files.
+For example,
+as of this writing
+version 8 config files
+(specifically, 8.6)
+used version level 5 configurations.
+.pp
 .q Old
 .q Old
-configuration files are defined as level one.
-Level two files make the following changes:
+configuration files are defined as version level one.
+Version level two files make the following changes:
 .np
 Host name canonification ($[ ... $])
 appends a dot if the name is recognized;
 .np
 Host name canonification ($[ ... $])
 appends a dot if the name is recognized;
@@ -3263,10 +4082,10 @@ flag \*- you can reset it to anything you prefer
 by declaring the map explicitly.)
 .np
 Default host name extension is consistent throughout processing;
 by declaring the map explicitly.)
 .np
 Default host name extension is consistent throughout processing;
-level one configurations turned off domain extension
+version level one configurations turned off domain extension
 (that is, adding the local domain name)
 during certain points in processing.
 (that is, adding the local domain name)
 during certain points in processing.
-Level two configurations are expected to include a trailing dot
+Version level two configurations are expected to include a trailing dot
 to indicate that the name is already canonical.
 .np
 Local names that are not aliases
 to indicate that the name is already canonical.
 .np
 Local names that are not aliases
@@ -3290,10 +4109,19 @@ but mail sent to
 .q vikki@localhost
 was delivered directly.
 .pp
 .q vikki@localhost
 was delivered directly.
 .pp
-Level three files
+Version level three files
 allow # initiated comments on all lines.
 Exceptions are backslash escaped # marks
 and the $# syntax.
 allow # initiated comments on all lines.
 Exceptions are backslash escaped # marks
 and the $# syntax.
+.pp
+Version level four configurations
+are completely equivalent to level three
+for historical reasons.
+.pp
+Version level five configuration files
+change the default definition of
+.b $w
+to be just the first component of the hostname.
 .sh 3 "K \*- key file declaration"
 .pp
 Special maps can be defined using the line:
 .sh 3 "K \*- key file declaration"
 .pp
 Special maps can be defined using the line:
@@ -3306,7 +4134,8 @@ is the handle by which this map is referenced in the rewriting rules.
 The
 .i mapclass
 is the name of a type of map;
 The
 .i mapclass
 is the name of a type of map;
-these are compiled in to sendmail.
+these are compiled in to
+.i sendmail .
 The
 .i arguments
 are interpreted depending on the class;
 The
 .i arguments
 are interpreted depending on the class;
@@ -3347,7 +4176,7 @@ is a digit)
 is replaced by the corresponding
 .i argument .
 Argument zero
 is replaced by the corresponding
 .i argument .
 Argument zero
-is always the original pattern.
+is always the database key.
 For example, the rule
 .(b
 .ta 1.5i
 For example, the rule
 .(b
 .ta 1.5i
@@ -3382,39 +4211,70 @@ There are four predefined database lookup classes:
 .q hash ,
 and
 .q nis .
 .q hash ,
 and
 .q nis .
-The first requires that sendmail be compiled with the
+The first requires that
+.i sendmail
+be compiled with the
 .b ndbm
 library;
 the second two require the
 .b db
 library,
 .b ndbm
 library;
 the second two require the
 .b db
 library,
-and the third requires that sendmail be compiled with NIS support.
+and the third requires that
+.i sendmail
+be compiled with NIS support.
 All four accept as arguments the some optional flags
 All four accept as arguments the some optional flags
-and a filename (or a mapname for NIS).
+and a filename
+(or a mapname for NIS;
+the filename is the root of the database path,
+so that
+.q .db
+or some other extension appropriate for the database type
+will be added to get the actual database name).
 Known flags are:
 .ip "\-o"
 Indicates that this map is optional \*- that is,
 if it cannot be opened,
 no error is produced,
 Known flags are:
 .ip "\-o"
 Indicates that this map is optional \*- that is,
 if it cannot be opened,
 no error is produced,
-and sendmail will behave as if the map existed but was empty.
+and
+.i sendmail
+will behave as if the map existed but was empty.
 .ip "\-N"
 .ip "\-N"
-Normally sendmail does not include the trailing null byte
-on a string as part of the key.
-If this flag is indicated,
-it will be included.
-This is for compatibility with some methods of building the maps.
+Normally when maps are written,
+the trailing null byte is not included as part of the key.
+If this flag is indicated it will be included.
+During lookups, only the null-byte-included form will be searched.
+See also
+.b \-O.
+.ip "\-O"
+If neither
+.b \-N
+or
+.b \-O
+are specified,
+.i sendmail
+uses an adaptive algorithm to decide whether or not to look for null bytes
+on the end of keys.
+It starts by trying both;
+if it finds any key with a null byte it never tries again without a null byte
+and vice versa.
+If this flag is specified,
+it never tries with a null byte;
+this can speed matches but is never necessary.
+If both
+.b \-N
+and
+.b \-O
+are specified,
+.i sendmail
+will never try any matches at all \(em
+that is, everything will appear to fail.
 .ip "\-a\fIx\fP"
 .ip "\-a\fIx\fP"
-Append the character
+Append the string
 .i x
 on successful matches.
 For example, the default
 .i host
 map appends a dot on successful matches.
 .i x
 on successful matches.
 For example, the default
 .i host
 map appends a dot on successful matches.
-.ip "\-d\fIdomain\fP"
-Use the indicated
-.i domain
-instead of the default domain.
-Used only for NIS maps.
 .ip "\-f"
 Fold upper to lower case before looking up the key.
 .ip "\-m"
 .ip "\-f"
 Fold upper to lower case before looking up the key.
 .ip "\-m"
@@ -3437,14 +4297,26 @@ and
 to the given filename;
 the two
 .i db -based
 to the given filename;
 the two
 .i db -based
-maps do not.
+maps append
+.q \&.db .
+For example, the map specification
+.(b
+Kuucp dbm \-o \-N /usr/lib/uucpmap
+.)b
+specifies an optional map named
+.q uucp
+of class
+.q dbm ;
+it always has null bytes at the end of every string,
+and the data is located in
+/usr/lib/uucpmap.{dir,pag}.
 .pp
 The program
 .i makemap (8)
 can be used to build any of the three database-oriented maps.
 It takes the following flags:
 .ip \-f
 .pp
 The program
 .i makemap (8)
 can be used to build any of the three database-oriented maps.
 It takes the following flags:
 .ip \-f
-Fold upper to lower case in the map.
+Do not fold upper to lower case in the map.
 .ip \-N
 Include null bytes in keys.
 .ip \-o
 .ip \-N
 Include null bytes in keys.
 .ip \-o
@@ -3454,6 +4326,63 @@ Allow replacement of existing keys;
 normally, re-inserting an existing key is an error.
 .ip \-v
 Print what is happening.
 normally, re-inserting an existing key is an error.
 .ip \-v
 Print what is happening.
+.lp
+The
+.i sendmail
+daemon does not have to be restarted to read the new maps
+as long as you change them in place;
+file locking is used so that the maps won't be read
+while they are being updated.\**
+.(f
+\**That is, don't create new maps and then use
+.i mv (1)
+to move them into place.
+I consider this a shortfall (a.k.a. bug) in
+.i sendmail
+which should be fixed in a future release.
+.)f
+.pp
+There are also two builtin maps that are,
+strictly speaking,
+not database lookups.
+.pp
+The
+.q host
+map does host domain canonification;
+given a host name it calls the name server
+to find the canonical name for that host.
+.pp
+The
+.q dequote
+map strips double quotes (") from a name.
+It does not strip backslashes.
+It will not strip quotes if the resulting string
+would contain unscannable syntax
+(that is, basic errors like unbalanced angle brackets;
+more sophisticated errors such as unknown hosts are not checked).
+The intent is for use when trying to accept mail from systems such as
+DECnet
+that routinely quote odd syntax such as
+.(b
+"49ers::ubell"
+.)b
+A typical usage is probably something like:
+.(b
+Kdequote dequote
+
+\&...
+
+R$\-   $: $(dequote $1 $)
+R$\- $+        $: $>3 $1 $2
+.)b
+Care must be taken to prevent unexpected results;
+for example,
+.(b
+"|someprogram < input > output"
+.)b
+will have quotes stripped,
+but the result is probably not what you had in mind.
+Fortunately these cases are rare.
 .pp
 New classes can be added in the routine
 .b setupmaps
 .pp
 New classes can be added in the routine
 .b setupmaps
@@ -3473,6 +4402,13 @@ This section is intended to explain what the real purpose
 of a configuration table is
 and to give you some ideas
 for what your philosophy might be.
 of a configuration table is
 and to give you some ideas
 for what your philosophy might be.
+.pp
+.b "Do not even consider"
+writing your own configuration file
+without carefully studying
+RFC 821, 822, and 1123.
+You should also read RFC 976
+if you are doing UUCP exchange.
 .sh 3 "What you are trying to do"
 .pp
 The configuration table has three major purposes.
 .sh 3 "What you are trying to do"
 .pp
 The configuration table has three major purposes.
@@ -3516,20 +4452,26 @@ of the mailer.
 The particular philosophy you choose will depend heavily
 on the size and structure of your organization.
 I will present a few possible philosophies here.
 The particular philosophy you choose will depend heavily
 on the size and structure of your organization.
 I will present a few possible philosophies here.
+There are as many philosophies as there are config designers;
+feel free to develop your own.
 .pp
 One general point applies to all of these philosophies:
 it is almost always a mistake
 .pp
 One general point applies to all of these philosophies:
 it is almost always a mistake
-to try to do full name resolution.
+to try to do full host route resolution.
 For example,
 For example,
-if you are trying to get names of the form
+if you are on a UUCP-only site
+and you are trying to get names of the form
 .q user@host
 .q user@host
-to the Arpanet,
+to the Internet,
 it does not pay to route them to
 it does not pay to route them to
-.q xyzvax!decvax!ucbvax!c70:user@host
-since you then depend on several links not under your control.
+.q xyzvax!decvax!ucbvax!c70!user@host
+since you then depend on several links not under your control,
+some of which are likely to misparse it anyway.
 The best approach to this problem
 The best approach to this problem
-is to simply forward to
-.q xyzvax!user@host
+is to simply forward the message for
+.q user@host
+to
+.q xyzvax
 and let xyzvax
 worry about it from there.
 In summary,
 and let xyzvax
 worry about it from there.
 In summary,
@@ -3552,14 +4494,16 @@ should be hints rather than solid information.
 .pp
 For example,
 a typical site on our local ether network is
 .pp
 For example,
 a typical site on our local ether network is
-.q monet.
+.q monet
+(actually
+.q monet.CS.Berkeley.EDU ).
 When monet receives mail for delivery,
 it checks whether it knows
 that the destination host is directly reachable;
 if so, mail is sent to that host.
 If it receives mail for any unknown host,
 it just passes it directly to
 When monet receives mail for delivery,
 it checks whether it knows
 that the destination host is directly reachable;
 if so, mail is sent to that host.
 If it receives mail for any unknown host,
 it just passes it directly to
-.q ucbvax,
+.q ucbvax.CS.Berkeley.EDU ,
 our master host.
 Ucbvax may determine that the host name is illegal
 and reject the message,
 our master host.
 Ucbvax may determine that the host name is illegal
 and reject the message,
@@ -3642,11 +4586,50 @@ you might find it useful to know about the names of hosts
 connected directly to you,
 but this is really not necessary
 since this may be determined from the syntax.
 connected directly to you,
 but this is really not necessary
 since this may be determined from the syntax.
+.sh 4 "A completely different philosophy"
+.pp
+This is adapted from Bruce Lilly.
+Any errors in interpretation are mine.
+.pp
+Do minimal changes in ruleset 3:
+fix some common but unambiguous errors (e.g. trailing dot on domains) and
+hide bang paths foo!bar into bar@foo.UUCP.
+The resulting "canonical" form is any valid RFC822/RFC1123/RFC976 address.
+.pp
+Ruleset 0 does the bulk of the work.
+It removes the trailing "@.UUCP" that hides bang paths,
+strips anything not needed to resolve,
+e.g. the phrase from phrase <route-addr> and from named groups,
+rejects unparseable addresses using $#error,
+and finally
+resolves to a mailer/host/user triple.
+Ruleset 0 is rather lengthy
+as it has to handle 3 basic address forms:
+RFC976 bang paths,
+RFC1123 %-hacks
+(including vanilla RFC822 local-part@domain),
+and RFC822 source routes.
+It's also complicated by having to handle named lists.
+.pp
+The header rewriting rulesets 1 and 2
+remove the trailing "@.UUCP" that hides bang paths.
+Ruleset 2 also strips the $# mailer $@ host (for test mode).
+.pp
+Ruleset 4 does absolutely nothing.
+.pp
+The per-mailer rewriting rulesets conform the envelope and
+header addresses to the requirements of the specific
+mailer.
+.pp
+Lots of rulesets-as-subroutines are used.
+.pp
+As a result, header addresses are subject to minimal munging
+(per RFC1123), and the general plan is per RFC822 sect. 3.4.10.
 .sh 3 "Relevant issues"
 .pp
 The canonical form you use
 should almost certainly be as specified in
 .sh 3 "Relevant issues"
 .pp
 The canonical form you use
 should almost certainly be as specified in
-the Arpanet protocols
+the Internet protocols
 RFC819 and RFC822.
 Copies of these RFC's are included on the
 .i sendmail
 RFC819 and RFC822.
 Copies of these RFC's are included on the
 .i sendmail
@@ -3766,11 +4749,10 @@ Test mode shows you the steps it takes
 as it proceeds,
 finally showing you the address it ends up with.
 You may use a comma separated list of rwsets
 as it proceeds,
 finally showing you the address it ends up with.
 You may use a comma separated list of rwsets
-for sequential application of rules to an input;
-ruleset three is always applied first.
+for sequential application of rules to an input.
 For example:
 .(b
 For example:
 .(b
-1,21,4 monet:bollard
+3,1,21,4 monet:bollard
 .)b
 first applies ruleset three to the input
 .q monet:bollard.
 .)b
 first applies ruleset three to the input
 .q monet:bollard.
@@ -3788,6 +4770,21 @@ sendmail \-bt \-d21.99
 turns on an incredible amount of information;
 a single word address
 is probably going to print out several pages worth of information.
 turns on an incredible amount of information;
 a single word address
 is probably going to print out several pages worth of information.
+.pp
+You should be warned that internally,
+.i sendmail
+applies ruleset 3 to all addresses.
+In this version of
+.i sendmail ,
+you will have to do that manually.
+For example, older versions allowed you to use
+.(b
+0 bruce@broadcast.sony.com
+.)b
+This version requires that you use:
+.(b
+3,0 bruce@broadcast.sony.com
+.)b
 .sh 3 "Building mailer descriptions"
 .pp
 To add an outgoing mailer to your mail system,
 .sh 3 "Building mailer descriptions"
 .pp
 To add an outgoing mailer to your mail system,
@@ -3818,7 +4815,7 @@ or
 .b \-r
 flag respectively.
 These flags are only passed if they were passed to
 .b \-r
 flag respectively.
 These flags are only passed if they were passed to
-.i sendmail,
+.i sendmail ,
 so that mailers that give errors under some circumstances
 can be placated.
 If the mailer is not picky
 so that mailers that give errors under some circumstances
 can be placated.
 If the mailer is not picky
@@ -3893,19 +4890,19 @@ that do not already contain a domain spec.
 For example,
 a message of the form:
 .(b
 For example,
 a message of the form:
 .(b
-From: eric@ucbarpa
-To: wnj@monet, mckusick
+From: eric@vangogh.CS.Berkeley.EDU
+To: wnj@monet.CS.Berkeley.EDU, mckusick
 .)b
 will be modified to:
 .(b
 .)b
 will be modified to:
 .(b
-From: eric@ucbarpa
-To: wnj@monet, mckusick@ucbarpa
+From: eric@vangogh.CS.Berkeley.EDU
+To: wnj@monet.CS.Berkeley.EDU, mckusick@vangogh.CS.Berkeley.EDU
 .)b
 .i "if and only if"
 the
 .q C
 flag is defined in the mailer corresponding to
 .)b
 .i "if and only if"
 the
 .q C
 flag is defined in the mailer corresponding to
-.q eric@ucbarpa.
+.q eric@vangogh.CS.Berkeley.EDU.
 .pp
 Other flags are described
 in Appendix C.
 .pp
 Other flags are described
 in Appendix C.
@@ -3930,7 +4927,7 @@ From: eric
 .)b
 might be changed to be:
 .(b
 .)b
 might be changed to be:
 .(b
-From: eric@ucbarpa
+From: eric@vangogh.CS.Berkeley.EDU
 .)b
 or
 .(b
 .)b
 or
 .(b
@@ -3941,6 +4938,15 @@ These sets can also be used
 to do special purpose output rewriting
 in cooperation with ruleset four.
 .pp
 to do special purpose output rewriting
 in cooperation with ruleset four.
 .pp
+The S and R fields
+can be specified as two numbers separated by a slash
+(e.g.,
+.q "S=10/11" ),
+meaning that all envelope addresses will be processed through ruleset 10
+and all header addresses will be processed through ruleset 11.
+With only one number specified,
+both envelope and header rewriting sets are set to the indicated ruleset.
+.pp
 The E field defines the string to use
 as an end-of-line indication.
 A string containing only newline is the default.
 The E field defines the string to use
 as an end-of-line indication.
 A string containing only newline is the default.
@@ -4016,7 +5022,9 @@ and recipient addresses by ruleset twenty-one.
 There is a 100,000 byte limit on messages passed through this mailer.
 .sh 2 "The User Database"
 .pp
 There is a 100,000 byte limit on messages passed through this mailer.
 .sh 2 "The User Database"
 .pp
-If you have a version of sendmail with the user database package
+If you have a version of
+.i sendmail
+with the user database package
 compiled in,
 the handling of sender and recipient addresses
 is modified.
 compiled in,
 the handling of sender and recipient addresses
 is modified.
@@ -4052,6 +5060,13 @@ there should be an appropriate
 record for that name to allow return mail.
 See also
 .i :default:mailname .
 record for that name to allow return mail.
 See also
 .i :default:mailname .
+.ip mailsender
+Changes any mail sent to this address to have the indicated envelope sender.
+This is intended for mailing lists,
+and will normally be the name of an appropriate -request address.
+It is very similar to the owner-\c
+.i list
+syntax in the alias file.
 .ip fullname
 The full name of the user.
 .ip office-address
 .ip fullname
 The full name of the user.
 .ip office-address
@@ -4073,7 +5088,8 @@ In the University this is often just the name of their graduate advisor.
 A pointer to a file from which plan information can be gathered.
 .pp
 As of this writing,
 A pointer to a file from which plan information can be gathered.
 .pp
 As of this writing,
-only a few of these fields are actually being used by sendmail:
+only a few of these fields are actually being used by
+.i sendmail :
 .i maildrop
 and
 .i mailname .
 .i maildrop
 and
 .i mailname .
@@ -4137,43 +5153,84 @@ This section describes what changes can be made
 and what has to be modified to make them.
 .sh 2 "Parameters in src/Makefile"
 .pp
 and what has to be modified to make them.
 .sh 2 "Parameters in src/Makefile"
 .pp
-These parameters are not intended to describe site policy;
-these should be defined in src/conf.h.
-.ip DBM
-If set,
-the
-.q DBM
-package in UNIX is used
-(see
-.i dbm(3X)
-in the UNIX Programmer's Manual).
-If not set,
-a much less efficient algorithm for processing aliases is used.
+These parameters are intended to describe the compilation environment,
+not site policy,
+and should normally be defined in src/Makefile.
 .ip NDBM
 If set,
 the new version of the DBM library
 that allows multiple databases will be used.
 .ip NDBM
 If set,
 the new version of the DBM library
 that allows multiple databases will be used.
-.q DBM
-must also be set.
+If neither NDBM nor NEWDB are set,
+a much less efficient method of alias lookup is used.
 .ip NEWDB
 If set, use the new database package from Berkeley (from 4.4BSD).
 This package is substantially faster than DBM or NDBM.
 .ip NEWDB
 If set, use the new database package from Berkeley (from 4.4BSD).
 This package is substantially faster than DBM or NDBM.
-If NEWDB and DBM are both set,
-sendmail will read old DBM files,
+If NEWDB and NDBM are both set,
+.i sendmail
+will read DBM files,
 but will create and use NEWDB files.
 but will create and use NEWDB files.
+.ip NIS
+Include support for NIS.
+If set together with
+.i both
+NEWDB and NDBM,
+.i sendmail
+will create both DBM and NEWDB files if and only if
+the file /var/yp/Makefile
+exists and is readable.
+This is intended for compatibility with Sun Microsystems'
+.i mkalias
+program used on YP masters.
+.ip SYSTEM5
+Set all of the compilation parameters appropriate for System V.
 .ip LOCKF
 Use System V
 .b lockf
 instead of Berkeley
 .b flock .
 .ip LOCKF
 Use System V
 .b lockf
 instead of Berkeley
 .b flock .
-Due to brain damage in
+Due to the highly unusual semantics of locks
+across forks in
 .b lockf ,
 this should never be used unless absolutely necessary.
 .b lockf ,
 this should never be used unless absolutely necessary.
+Set by default if
+SYSTEM5 is set.
 .ip SYS5TZ
 Use System V
 time zone semantics.
 .ip SYS5TZ
 Use System V
 time zone semantics.
-.ip SYSTEM5
-Set all of the compilation parameters appropriate for System V.
+.ip HASINITGROUPS
+Set this if your system has the
+.i initgroups()
+call
+(if you have multiple group support).
+This is the default if SYSTEM5 is
+.i not
+defined or if you are on HPUX.
+.ip HASUNAME
+Set this if you have the
+.i uname (2)
+system call (or corresponding library routine).
+Set by default if
+SYSTEM5
+is set.
+.ip HASSTATFS
+Set this if you have the
+.i statfs (2)
+system call.
+This will allow you to give a temporary failure
+message to incoming SMTP email
+when you are low on disk space.
+It is set by default on 4.4BSD and OSF/1 systems.
+.ip HASUSTAT
+Set if you have the
+.i ustat (2)
+system call.
+This is an alternative implementation of disk space control.
+You should only set one of HASSTATFS or HASUSTAT;
+the first is preferred.
+.ip _PATH_SENDMAILCF
+The pathname of the sendmail.cf file.
+.ip _PATH_SENDMAILPID
+The pathname of the sendmail.pid file.
 .ip LA_TYPE
 The load average type.
 Details are described below.
 .ip LA_TYPE
 The load average type.
 Details are described below.
@@ -4219,6 +5276,14 @@ usually
 .q _avenrun
 or
 .q avenrun ).
 .q _avenrun
 or
 .q avenrun ).
+.pp
+There are also several compilation flags to indicate the environment
+such as
+.q _AIX3
+and
+.q _SCO_unix_ .
+See the READ_ME
+file for the latest scoop on these flags.
 .sh 2 "Parameters in src/conf.h"
 .pp
 Parameters and compilation options
 .sh 2 "Parameters in src/conf.h"
 .pp
 Parameters and compilation options
@@ -4271,11 +5336,6 @@ field that may be defined
 (using the
 .b P
 line in sendmail.cf).
 (using the
 .b P
 line in sendmail.cf).
-.ip "MAXTRUST [30]"
-The maximum number of trusted users that may be defined
-(using the
-.b T
-line in sendmail.cf).
 .ip "MAXUSERENVIRON [40]"
 The maximum number of items in the user environment
 that will be passed to subordinate mailers.
 .ip "MAXUSERENVIRON [40]"
 The maximum number of items in the user environment
 that will be passed to subordinate mailers.
@@ -4298,10 +5358,18 @@ flag must be used.
 Some people, believing that it was a security hole
 (it was, once)
 have turned it off and thus crippled debuggers.
 Some people, believing that it was a security hole
 (it was, once)
 have turned it off and thus crippled debuggers.
-.ip DAEMON
+.ip NETINET
 If set,
 If set,
-code to run a daemon is compiled in.
-This code is for 4.2 or 4.3BSD.
+support for Internet protocol networking is compiled in.
+Previous versions of
+.i sendmail
+referred to this as
+.sm DAEMON ;
+this old usage is now incorrect.
+.ip NETISO
+If set,
+support for ISO protocol networking is compiled in
+(it may be appropriate to #define this in the Makefile instead of conf.h).
 .ip LOG
 If set,
 the
 .ip LOG
 If set,
 the
@@ -4361,6 +5429,17 @@ This adds a new level of local name expansion
 between aliasing and forwarding.
 It also uses the NEWDB package.
 This may change in future releases.
 between aliasing and forwarding.
 It also uses the NEWDB package.
 This may change in future releases.
+.ip IDENTPROTO
+Compile in the IDENT protocol as defined in RFC 1413.
+This defaults on for all systems except Ultrix,
+which apparently has the interesting
+.q feature
+that when it receives a
+.q "host unreachable"
+message it closes all open connections to that host.
+Since some firewall gateways send this error code
+when you access an unauthorized port (such as 113, used by IDENT),
+Ultrix cannot receive email from such hosts.
 .sh 2 "Configuration in src/conf.c"
 .pp
 The following changes can be made in conf.c.
 .sh 2 "Configuration in src/conf.c"
 .pp
 The following changes can be made in conf.c.
@@ -4431,7 +5510,7 @@ specifies a sender.
 The order of these fields in the
 .i HdrInfo
 table specifies
 The order of these fields in the
 .i HdrInfo
 table specifies
-.i sendmail's
+.i sendmail 's
 preference
 for which field to return error messages to.
 .nr ii 5n
 preference
 for which field to return error messages to.
 .nr ii 5n
@@ -4511,7 +5590,13 @@ the
 and
 .q From:
 fields are always scanned on ARPANET mail
 and
 .q From:
 fields are always scanned on ARPANET mail
-to determine the sender;
+to determine the sender\**;
+.(f
+\**Actually, this is no longer true in SMTP;
+this information is contained in the envelope.
+The older ARPANET protocols did not completely distinguish
+envelope from header.
+.)f
 this is used to perform the
 .q "return to sender"
 function.
 this is used to perform the
 .q "return to sender"
 function.
@@ -4524,50 +5609,6 @@ if possible;
 this is stored in the macro
 .b $x
 and used in a number of ways.
 this is stored in the macro
 .b $x
 and used in a number of ways.
-.sh 3 "SMTP Reply Codes"
-.pp
-The file
-.i conf.c
-also contains the specification of ARPANET reply codes.
-There are four classifications these fall into:
-.(b
-.sz -1
-.ta \w'char  'u +\w'Arpa_TUsrerr[] =  'u +\w'"888";  'u
-char   Arpa_Info[] =   "050";  /* arbitrary info */
-char   Arpa_TSyserr[] =        "455";  /* some (transient) system error */
-char   Arpa_PSyserr[] =        "554";  /* some (permanent) system error */
-char   Arpa_Usrerr[] = "554";  /* some (fatal) user error */
-.sz
-.)b
-The class
-.i Arpa_Info
-is for any information that is not required by the protocol,
-such as forwarding information.
-.i Arpa_TSyserr
-and
-.i Arpa_PSyserr
-is printed by the
-.i syserr
-routine.
-TSyserr
-is printed out for transient errors,
-that is,
-errors that are likely to go away without explicit action
-on the part of a systems administrator.
-PSyserr
-is printed for permanent errors.
-The distinction is made based on the value of
-.i errno .
-Finally,
-.i Arpa_Usrerr
-is the result of a user error
-and is generated by the
-.i usrerr
-routine;
-these are generated when the user has specified something wrong,
-and hence the error is permanent,
-i.e.,
-it will not work simply by resubmitting the request.
 .sh 3 "Restricting Use of Email"
 .pp
 If it is necessary to restrict mail through a relay,
 .sh 3 "Restricting Use of Email"
 .pp
 If it is necessary to restrict mail through a relay,
@@ -4575,20 +5616,23 @@ the
 .i checkcompat
 routine can be modified.
 This routine is called for every recipient address.
 .i checkcompat
 routine can be modified.
 This routine is called for every recipient address.
-It can return
-.b TRUE
-to indicate that the address is acceptable
-and mail processing will continue,
-or it can return
-.b FALSE
-to reject the recipient.
-If it returns false,
-it is up to
+It returns an exit status
+indicating the status of the message.
+The status
+.sm EX_OK
+accepts the address,
+.sm EX_TEMPFAIL
+queues the message for a later try,
+and other values
+(commonly
+.sm EX_UNAVAILABLE )
+reject the message.
+It is up to
 .i checkcompat
 to print an error message
 (using
 .i usrerr )
 .i checkcompat
 to print an error message
 (using
 .i usrerr )
-saying why the message is rejected.
+if the message is rejected.
 For example,
 .i checkcompat
 could read:
 For example,
 .i checkcompat
 could read:
@@ -4596,17 +5640,27 @@ could read:
 .re
 .sz -1
 .ta 4n +4n +4n +4n +4n +4n +4n
 .re
 .sz -1
 .ta 4n +4n +4n +4n +4n +4n +4n
-bool
-checkcompat(to)
+int
+checkcompat(to, e)
        register ADDRESS *to;
        register ADDRESS *to;
+       register ENVELOPE *e;
 \&{
 \&{
-       if (MsgSize > 50000 && to->q_mailer != LocalMailer)
+       register STAB *s;
+
+       s = stab("private", ST_MAILER, ST_FIND);
+       if (s != NULL && e\->e_from.q_mailer != LocalMailer &&
+           to->q_mailer == s->s_mailer)
+       {
+               usrerr("No private net mail allowed through this machine");
+               return (EX_UNAVAILABLE);
+       }
+       if (MsgSize > 50000 && to\->q_mailer != LocalMailer)
        {
                usrerr("Message too large for non-local delivery");
                NoReturn = TRUE;
        {
                usrerr("Message too large for non-local delivery");
                NoReturn = TRUE;
-               return (FALSE);
+               return (EX_UNAVAILABLE);
        }
        }
-       return (TRUE);
+       return (EX_OK);
 }
 .sz
 .)b
 }
 .sz
 .)b
@@ -4656,7 +5710,7 @@ otherwise.
 .pp
 The lookup function is called as
 .(b
 .pp
 The lookup function is called as
 .(b
-\fIxxx\fP_map_lookup(MAP *map, char buf[], int bufsize, char **av)
+\fIxxx\fP_map_lookup(MAP *map, char buf[], int bufsize, char **av, int *statp)
 .)b
 The
 .i map
 .)b
 The
 .i map
@@ -4671,13 +5725,117 @@ The
 .i av
 is a list of arguments passed in from the rewrite line.
 The lookup function should return a pointer to the new value.
 .i av
 is a list of arguments passed in from the rewrite line.
 The lookup function should return a pointer to the new value.
+IF the map lookup fails,
+.i *statp
+should be set to an exit status code;
+in particular, it should be set to
+.sm EX_TEMPFAIL
+if recovery is to be attempted by the higher level code.
+.sh 3 "Queueing Function"
+.pp
+The routine
+.i shouldqueue
+is called to decide if a message should be queued
+or processed immediately.
+Typically this compares the message priority to the current load average.
+The default definition is:
+.(b
+bool
+shouldqueue(pri, ctime)
+       long pri;
+       time_t ctime;
+{
+       if (CurrentLA < QueueLA)
+               return (FALSE);
+       if (CurrentLA >= RefuseLA)
+               return (TRUE);
+       return (pri > (QueueFactor / (CurrentLA \- QueueLA + 1)));
+}
+.)b
+If the current load average
+(global variable
+.i CurrentLA ,
+which is set before this function is called)
+is less than the low threshold load average
+(option
+.b x ,
+variable
+.i QueueLA ),
+.i shouldqueue
+returns
+.sm FALSE
+immediately
+(that is, it should
+.i not
+queue).
+If the current load average exceeds the high threshold load average
+(option
+.b X ,
+variable
+.i RefuseLA ),
+.i shouldqueue
+returns
+.sm TRUE
+immediately.
+Otherwise, it computes the function based on the message priority,
+the queue factor
+(option
+.b q ,
+global variable
+.i QueueFactor ),
+and the current and threshold load averages.
+.pp
+An implementation wishing to take the actual age of the message into account
+can also use the
+.i ctime
+parameter,
+which is the time that the message was first submitted to
+.i sendmail .
+Note that the
+.i pri
+parameter is already weighted
+by the number of times the message has been tried
+(although this tends to lower the priority of the message with time);
+the expectation is that the
+.i ctime
+would be used as an
+.q "escape clause"
+to ensure that messages are eventually processed.
+.sh 3 "Refusing Incoming SMTP Connections"
+.pp
+The function
+.i refuseconnections
+returns
+.sm TRUE
+if incoming SMTP connections should be refused.
+The current implementation is based exclusively on the current load average
+and the refuse load average option
+(option
+.b X ,
+global variable
+.i RefuseLA ):
+.(b
+bool
+refuseconnections()
+{
+       return (CurrentLA >= RefuseLA);
+}
+.)b
+A more clever implementation
+could look at more system resources.
+.sh 3 "Load Average Computation"
+.pp
+The routine
+.i getla
+returns the current load average (as a rounded integer).
+The distribution includes several possible implementations.
 .sh 2 "Configuration in src/daemon.c"
 .pp
 The file
 .i src/daemon.c
 contains a number of routines that are dependent
 on the local networking environment.
 .sh 2 "Configuration in src/daemon.c"
 .pp
 The file
 .i src/daemon.c
 contains a number of routines that are dependent
 on the local networking environment.
-The version supplied is specific to 4.3 BSD.
+The version supplied assumes you have BSD style sockets.
 .pp
 In previous releases,
 we recommended that you modify the routine
 .pp
 In previous releases,
 we recommended that you modify the routine
@@ -4688,11 +5846,11 @@ if you wanted to generalize
 .b $]
 lookups.
 We now recommend that you create a new keyed map instead.
 .b $]
 lookups.
 We now recommend that you create a new keyed map instead.
-.sh 1 "CHANGES IN RELEASE 6"
+.sh 1 "CHANGES IN VERSION 8"
 .pp
 The following summarizes changes
 since the last commonly available version of
 .pp
 The following summarizes changes
 since the last commonly available version of
-.b sendmail
+.i sendmail
 (5.67):
 .sh 2 "Connection Caching"
 .pp
 (5.67):
 .sh 2 "Connection Caching"
 .pp
@@ -4701,15 +5859,75 @@ those connections are cached for possible future use.
 The advent of MX records made this effective for mailing lists;
 in addition,
 substantial performance improvements can be expected for queue processing.
 The advent of MX records made this effective for mailing lists;
 in addition,
 substantial performance improvements can be expected for queue processing.
+.sh 2 "MX Piggybacking"
+.pp
+If two hosts with different names in a single message
+happen to have the same set of MX hosts,
+they can be sent in the same transaction.
+Version 8 notices this and tries to batch the messages.
+.sh 2 "RFC 1123 Compliance"
+.pp
+A number of changes have been made to make
+.i sendmail
+.q "conditionally compliant"
+(that is,
+.i sendmail
+satisfies all of the
+.q MUST
+clauses and most but not all of the
+.q SHOULD
+clauses in RFC 1123).
+.pp
+The major areas of change are (numbers are RFC 1123 section numbers):
+.nr ii \w'5.3.1.1\0\0'u
+.ip 5.2.7
+Response to RCPT command is fast.
+.ip 5.2.8
+Numeric IP addresses are logged in Received: lines.
+.ip 5.2.17
+Self domain literal is properly handled.
+.ip 5.3.2
+Better control over individual timeouts.
+.ip 5.3.3
+Error messages are sent as
+.q From:<> .
+.ip 5.3.3
+Error messages are never sent to
+.q <> .
+.ip 5.3.3
+Route-addrs are pruned.
+.lp
+The areas in which
+.i sendmail
+is not
+.q "unconditionally compliant"
+are:
+.ip 5.2.6
+.i Sendmail
+does do header munging.
+.ip 5.2.10
+.i Sendmail
+doesn't always use the exact SMTP message text
+as listed in RFC 821.
+.ip 5.3.1.1
+.i Sendmail
+doesn't guarantee only one connect for each host in queue runs.
+.ip 5.3.1.1
+.i Sendmail
+doesn't always provide adequate concurrency limits.
+.sh 2 "Extended SMTP Support"
+.pp
+Version 8 includes both sending and receiving support for Extended
+SMTP support as defined by RFC 1425 (basic) and RFC 1427 (SIZE);
+and limited support for RFC 1426 (BODY).
 .sh 2 "Eight-Bit Clean"
 .pp
 Previous versions of
 .sh 2 "Eight-Bit Clean"
 .pp
 Previous versions of
-.b sendmail
+.i sendmail
 used the 0200 bit for quoting.
 This version avoids that use.
 However, for compatibility with RFC 822,
 used the 0200 bit for quoting.
 This version avoids that use.
 However, for compatibility with RFC 822,
-the default is still to strip the eighth bit;
-set option `8' to get full 8-bit clean processing.
+you can set option `7' to get seven bit stripping.
 .pp
 Individual mailers can still produce seven bit out put using the
 `7' mailer flag.
 .pp
 Individual mailers can still produce seven bit out put using the
 `7' mailer flag.
@@ -4727,37 +5945,125 @@ had a number of annoying
 .q features
 which have been removed in this release.
 In particular,
 .q features
 which have been removed in this release.
 In particular,
-these more tightly bind (pun intended) the name server to sendmail,
+these more tightly bind (pun intended) the name server to
+.i sendmail ,
 so that the name server resolution rules are incorporated directly into
 .b sendmail .
 .sh 2 "Keyed Files"
 .pp
 Generalized keyed files is an idea taken directly from
 .sm IDA
 so that the name server resolution rules are incorporated directly into
 .b sendmail .
 .sh 2 "Keyed Files"
 .pp
 Generalized keyed files is an idea taken directly from
 .sm IDA
-.b sendmail
+.i sendmail
 (albeit with a completely different implementation).
 They can be useful on large sites.
 .pp
 (albeit with a completely different implementation).
 They can be useful on large sites.
 .pp
-R6 also understands YP.
+Version 8 also understands YP.
+.sh 2 "Multi-Word Classes"
+.pp
+Classes can now be multiple words.
+For example,
+.(b
+CShofmann.CS.Berkeley.EDU
+.)b
+allows you to match the entire string
+.q hofmann.CS.Berkeley.EDU
+using the single construct
+.q $=S .
+.sh 2 "Deferred Macro Expansion"
+.pp
+The
+.b $& \c
+.i x
+construct has been adopted from
+.sm IDA .
+.sh 2 "IDENT Protocol Support"
+.pp
+The IDENT protocol as defined in RFC 1413 is supported.
 .sh 2 "Parsing Bug Fixes"
 .pp
 A number of small bugs having to do with things like
 backslash-escaped quotes inside of comments
 have been fixed.
 .sh 2 "Parsing Bug Fixes"
 .pp
 A number of small bugs having to do with things like
 backslash-escaped quotes inside of comments
 have been fixed.
-.sh 2 "Separate From/Return-Path Processing"
+.sh 2 "Separate Envelope/Header Processing"
 .pp
 Since the From: line is passed in separately from the envelope sender,
 these have both been made visible;
 the
 .pp
 Since the From: line is passed in separately from the envelope sender,
 these have both been made visible;
 the
-.b $<
-macro gives access to the envelope sender information.
+.b $g
+macro is set to the envelope sender during processing
+of mailer argument vectors
+and the header sender during processing of headers.
+.pp
+It is also possible to specify separate per-mailer
+envelope and header processing.
+The
+.b S enderRWSet
+and
+.b R ecipientRWset
+arguments for mailers
+can be specified as
+.i envelope/header
+to give different rewritings for envelope versus header addresses.
+.sh 2 "Owner-List Propagates to Envelope"
+.pp
+When an alias has an associated owner\-list name,
+that alias is used to change the envelope sender address.
+This will cause downstream errors to be returned to that owner.
 .sh 2 "Dynamic Header Allocation"
 .pp
 The fixed size limit on header lines has been eliminated.
 .sh 2 "Dynamic Header Allocation"
 .pp
 The fixed size limit on header lines has been eliminated.
-.sh 2 "New Command Line Flag"
+.sh 2 "New Command Line Flags"
+.pp
+The
+.b \-B
+flag has been added to pass in body type information.
 .pp
 .pp
-The \-p flag has been added
+The
+.b \-p
+flag has been added
 to pass in protocol information.
 to pass in protocol information.
+.pp
+The
+.b \-X
+flag has been added
+to allow logging of all protocol in and out of
+.i sendmail
+for debugging.
+.sh 2 "Enhanced Command Line Flags"
+.pp
+The
+.b \-q
+flag can limit limit a queue run to specific recipients, senders, or queue ids
+using
+.b \-qR\c
+.i substring ,
+.b \-qS\c
+.i substring ,
+or
+.b \-qI\c
+.i substring
+respectively.
+.sh 2 "New and Old Configuration Line Types"
+.pp
+The
+.b T
+(Trusted users) configuration line has been deleted.
+It will still be accepted but will be ignored.
+.pp
+The
+.b K
+line has been added to declare database maps.
+.pp
+The
+.b V
+line has been added to declare the configuration version level.
+.pp
+The
+.b M
+line has a
+.q D=
+field that lets you change into a temporary directory while that mailer
+is running.
 .sh 2 "New Options"
 .pp
 Several new options have been added,
 .sh 2 "New Options"
 .pp
 Several new options have been added,
@@ -4766,6 +6072,9 @@ others to allow tuning that was previously available
 only by recompiling.
 They are described in detail in Section 5.1.5.
 Briefly,
 only by recompiling.
 They are described in detail in Section 5.1.5.
 Briefly,
+.nr ii 0.5i
+.ip b
+Insist on a minimum number of disk blocks.
 .ip C
 Set checkpoint interval.
 .ip E
 .ip C
 Set checkpoint interval.
 .ip E
@@ -4774,21 +6083,98 @@ Default error message.
 Enable GECOS matching.
 .ip h
 Maximum hop count.
 Enable GECOS matching.
 .ip h
 Maximum hop count.
+.ip j
+Send errors in MIME-encapsulated format.
 .ip J
 Forward file path.
 .ip k
 Connection cache size
 .ip K
 Connection cache lifetime.
 .ip J
 Forward file path.
 .ip k
 Connection cache size
 .ip K
 Connection cache lifetime.
+.ip l
+Enable Errors-To: header.
+These headers violate RFC 1123;
+this option is included to provide back compatibility
+with old versions of
+.i sendmail .
+.ip O
+Set incoming SMTP daemon options, such as an alternate SMTP port.
+.ip p
+Privacy options.
+.ip R
+Don't prune route-addrs.
 .ip U
 User database spec.
 .ip U
 User database spec.
+.ip V
+Fallback
+.q MX
+host.
 .ip w
 .ip w
-Domain has no wildcard MX.
-.ip 8
-Run eight bit clean.
+.q "Best MX"
+handling technique.
+.ip 7
+Do not run eight bit clean.
+.sh 2 "Extended Options"
+.pp
+The
+.b r
+(read timeout),
+.b I
+(use BIND),
+and
+.b T
+(queue timeout)
+options have been extended to pass in more information.
+.sh 2 "New Mailer Flags"
+.pp
+Several new mailer flags have been added.
+.ip a
+Try to use ESMTP when creating a connection.
+If this is not set,
+.i sendmail
+will still try if the other end hints that it knows about ESMTP
+in its greeting message;
+this flag says to try even if it doesn't hint.
+If the EHLO (extended hello)
+command fails,
+.i sendmail
+falls back to old SMTP.
+.ip b
+Ensure that there is a blank line at the end of all messages.
+.ip c
+Strip all comments from addresses;
+this should only be used as a last resort
+when dealing with cranky mailers.
+.ip g
+Never use the null sender as the envelope sender,
+even when running SMTP.
+Although this violates RFC 1123,
+it may be necessary when you must deal with some obnoxious old hosts.
+.ip 7
+Strip all output to 7 bits.
+.sh 2 "New Pre-Defined Macros"
+.pp
+The following macros are pre-defined:
+.ip $k
+The UUCP node name,
+nominally from
+.i uname (2)
+call.
+.ip $m
+The domain part of our full hostname.
+.ip $_
+The RFC 1413-provided sender address.
+.sh 2 "New LHS Token"
+.pp
+Version 8 allows
+.b $@
+on the Left Hand Side of an
+.q R
+line to match zero tokens.
+This is intended to be used to match the null input.
 .sh 2 "Bigger Defaults"
 .pp
 .sh 2 "Bigger Defaults"
 .pp
-Release 6 allows up to 100 rulesets instead of 30.
+Version 8 allows up to 100 rulesets instead of 30.
 It is recommended that rulesets 0\-9 be reserved for
 .i sendmail 's
 dedicated use in future releases.
 It is recommended that rulesets 0\-9 be reserved for
 .i sendmail 's
 dedicated use in future releases.
@@ -4797,6 +6183,13 @@ The total number of MX records that can be used has been raised to 20.
 .pp
 The number of queued messages that can be handled at one time
 has been raised from 600 to 1000.
 .pp
 The number of queued messages that can be handled at one time
 has been raised from 600 to 1000.
+.sh 2 "Different Default Tuning Parameters"
+.pp
+Version 8 has changed the default parameters
+for tuning queue costs
+to make the number of recipients more important
+than the size of the message (for small messages).
+This is reasonable if you are connected with reasonably fast links.
 .sh 2 "Auto-Quoting in Addresses"
 .pp
 Previously, the
 .sh 2 "Auto-Quoting in Addresses"
 .pp
 Previously, the
@@ -4810,11 +6203,117 @@ This version puts quotes around such names.
 .pp
 Several names have been built in to the $@ portion of the $#error
 mailer.
 .pp
 Several names have been built in to the $@ portion of the $#error
 mailer.
+.sh 2 "SMTP VRFY Doesn't Expand"
+.pp
+Previous versions of
+.i sendmail
+treated VRFY and EXPN the same.
+In this version,
+VRFY doesn't expand aliases or follow .forward files.
+EXPN still does.
+.pp
+As an optimization, if you run with your default delivery mode being
+queue-only,
+the RCPT command will also not chase aliases and .forward files.
+It will chase them when it processes the queue.
+.sh 2 "[IPC] Mailers Allow Multiple Hosts"
+.pp
+When an address resolves to a mailer that has
+.q [IPC]
+as its
+.q Path ,
+the $@ part (host name)
+can be a colon-separated list of hosts instead of a single hostname.
+This asks
+.i sendmail
+to search the list for the first entry that is available
+exactly as though it were an MX record.
+The intent is to route internal traffic through internal networks
+without publishing an MX record to the net.
+MX expansion is still done on the individual items.
+.sh 2 "Aliases Extended"
+.pp
+The implementation has been merged with maps.
+Among other things,
+this supports NIS-based aliases.
 .sh 2 "Portability and Security Enhancements"
 .pp
 A number of internal changes have been made to enhance portability.
 .pp
 Several fixes have been made to increase the paranoia factor.
 .sh 2 "Portability and Security Enhancements"
 .pp
 A number of internal changes have been made to enhance portability.
 .pp
 Several fixes have been made to increase the paranoia factor.
+.sh 2 "Miscellaneous Changes"
+.pp
+.i Sendmail
+writes a
+.i /etc/sendmail.pid
+file with the current process id of the SMTP daemon.
+.pp
+Two people using the same program in their .forward file
+are considered different
+so that duplicate elimination doesn't delete one of them.
+.pp
+The
+.i mailstats
+program prints mailer names
+and gets the location of the
+.i sendmail.st
+file from
+.i /etc/sendmail.cf .
+.pp
+Many minor bugs have been fixed, such as handling of backslashes
+inside of quotes.
+.pp
+A hook (ruleset 5) has been added
+to allow rewriting of local addresses after aliasing.
+.sh 1 "ACKNOWLEDGEMENTS"
+.pp
+I've worked on
+.i sendmail
+for many years,
+and many employers have been remarkably patient
+about letting me work on a large project
+that was not part of my official job.
+This includes time on the INGRES Project at Berkeley,
+at Britton Lee,
+and again on the Mammoth Project at Berkeley.
+.pp
+Much of the second wave of improvements
+should be credited to Bryan Costales of ICSI.
+As he passed me drafts of his book on
+.i sendmail
+I was inspired to start working on things again.
+Bryan was also available to bounce ideas off of.
+.pp
+Many, many people contributed chunks of code and ideas to
+.i sendmail .
+It has proven to be a group network effort.
+Version 8 in particular was a group project.
+The following people made notable contributions:
+.(l
+Keith Bostic, CSRG, University of California, Berkeley
+Michael J. Corrigan, University of California, San Diego
+Bryan Costales, International Computer Science Institute
+Pa\*:r (Pell) Emanuelsson
+Craig Everhart, Transarc Corporation
+Tom Ivar Helbekkmo, Norwegian School of Economics
+Allan E. Johannesen, WPI
+Jonathan Kamens, OpenVision Technologies, Inc.
+Takahiro Kanbe, Fuji Xerox Information Systems Co., Ltd.
+Brian Kantor, University of California, San Diego
+Murray S. Kucherawy, HookUp Communication Corp.
+Bruce Lilly, Sony U.S.
+Karl London
+Nakamura Motonori, Kyoto University
+John Gardiner Myers, Carnegie Mellon University
+Neil Rickert, Northern Illinois University
+Eric Schnoebelen, Convex Computer Corp.
+Eric Wassenaar, National Institute for Nuclear and High Energy Physics, Amsterdam
+Christophe Wolfhugel, Herve Schauer Consultants (Paris)
+.)l
+I apologize for anyone I have omitted, misspelled, misattributed, or
+otherwise missed.
+Many other people have contributed ideas, comments, and encouragement.
+I appreciate their contribution as well.
 .++ A
 .+c "COMMAND LINE FLAGS"
 .ba 0
 .++ A
 .+c "COMMAND LINE FLAGS"
 .ba 0
@@ -4835,8 +6334,9 @@ t Run in test mode
 v      Just verify addresses, don't collect or deliver
 i      Initialize the alias database
 p      Print the mail queue
 v      Just verify addresses, don't collect or deliver
 i      Initialize the alias database
 p      Print the mail queue
-z      Freeze the configuration file
 .)b
 .)b
+.ip \-B\fItype\fP
+Indicate body type.
 .ip \-C\fIfile\fP
 Use a different configuration file.
 .i Sendmail
 .ip \-C\fIfile\fP
 Use a different configuration file.
 .i Sendmail
@@ -4847,13 +6347,6 @@ Set debugging level.
 .ip "\-f\ \fIaddr\fP"
 The sender's machine address is
 .i addr .
 .ip "\-f\ \fIaddr\fP"
 The sender's machine address is
 .i addr .
-This flag is ignored unless the real user
-is listed as a
-.q "trusted user"
-or if
-.i addr
-contains an exclamation point
-(because of certain restrictions in UUCP).
 .ip \-F\fIname\fP
 Sets the full name of this user to
 .i name .
 .ip \-F\fIname\fP
 Sets the full name of this user to
 .i name .
@@ -4901,9 +6394,28 @@ this is equivalent to using \-p.)
 .ip \-q\fItime\fP
 Try to process the queued up mail.
 If the time is given,
 .ip \-q\fItime\fP
 Try to process the queued up mail.
 If the time is given,
-a sendmail will run through the queue at the specified interval
+a
+.i sendmail
+will run through the queue at the specified interval
 to deliver queued mail;
 otherwise, it only runs once.
 to deliver queued mail;
 otherwise, it only runs once.
+.ip \-q\fIXstring\fP
+Run the queue once,
+limiting the jobs to those matching
+.i Xstring .
+The key letter
+.i X
+can be
+.b I
+to limit based on queue identifier,
+.b R
+to limit based on recipient,
+or
+.b S
+to limit based on sender.
+A particular queued job is accepted if one of the corresponding addresses
+contains the indicated
+.i string .
 .ip \-t
 Read the header for
 .q To: ,
 .ip \-t
 Read the header for
 .q To: ,
@@ -4916,6 +6428,13 @@ The
 line will be deleted before sending.
 Any addresses in the argument vector will be deleted
 from the send list.
 line will be deleted before sending.
 Any addresses in the argument vector will be deleted
 from the send list.
+.ip "\-X \fIlogfile\fP"
+Log all traffic in and out of
+.i sendmail
+in the indicated
+.i logfile
+for debugging mailer problems.
+This produces a lot of data very quickly and should be used sparingly.
 .pp
 There are a number of options that may be specified as
 primitive flags
 .pp
 There are a number of options that may be specified as
 primitive flags
@@ -4940,15 +6459,18 @@ or
 .i /usr/spool/mqueue .
 .pp
 All queue files have the name
 .i /usr/spool/mqueue .
 .pp
 All queue files have the name
-\fIx\fP\|\fBf\fP\fIAA99999\fP
+\fIx\fP\|\fBf\fP\fIAAA99999\fP
 where
 where
-.i AA99999
+.i AAA99999
 is the
 .i id
 for this message
 and the
 .i x
 is a type.
 is the
 .i id
 for this message
 and the
 .i x
 is a type.
+The first letter of the id encodes the hour of the day
+that the message was received by the system
+(with A being the hour between midnight and 1:00AM).
 All files with the same id collectively define one message.
 .pp
 The types are:
 All files with the same id collectively define one message.
 .pp
 The types are:
@@ -4978,7 +6500,7 @@ due to a race condition.
 It should exist for no more than a few milliseconds
 at any given time.
 [This is only used on old versions of
 It should exist for no more than a few milliseconds
 at any given time.
 [This is only used on old versions of
-sendmail;
+.i sendmail ;
 it is not used 
 on newer versions.]
 .ip q
 it is not used 
 on newer versions.]
 .ip q
@@ -5015,9 +6537,15 @@ These use the same syntax
 as header definitions in the configuration file.
 .ip C
 The controlling address.
 as header definitions in the configuration file.
 .ip C
 The controlling address.
+The syntax is
+.q localuser:aliasname .
 Recipient addresses following this line
 Recipient addresses following this line
-will be flagged as having resulted from an alias of this name.
-This affect the actual UNIX user id used for delivery.
+will be flagged so that deliveries will be run as the
+.i localuser
+(a user name from the /etc/passwd file);
+.i aliasname
+is the name of the alias that expanded to this address
+(used for printing messages).
 .ip R
 A recipient address.
 This will normally be completely aliased,
 .ip R
 A recipient address.
 This will normally be completely aliased,
@@ -5049,6 +6577,15 @@ This line is printed by the
 command,
 and is generally used to store status information.
 It can contain any text.
 command,
 and is generally used to store status information.
 It can contain any text.
+.ip F
+Flag bits, represented as one letter per flag.
+Defined flag bits are
+.b r
+indicating that this is a response message
+and
+.b w
+indicating that a warning message has been sent
+announcing that the mail has been delayed.
 .ip $
 A macro definition.
 The values of certain macros
 .ip $
 A macro definition.
 The values of certain macros
@@ -5057,6 +6594,17 @@ The values of certain macros
 and
 .b $s )
 are passed through to the queue run phase.
 and
 .b $s )
 are passed through to the queue run phase.
+.ip B
+The body type.
+The remainder of the line is a text string defining the body type.
+If this field is missing,
+the body type is assumed to be
+.q "undefined"
+and no special processing is attempted.
+Legal values are
+.q 7BIT
+and
+.q 8BITMIME .
 .pp
 As an example,
 the following is a queue file sent to
 .pp
 As an example,
 the following is a queue file sent to
@@ -5071,18 +6619,17 @@ nothing can replace looking at what your own system generates.
 .(b
 P835771
 T404261372
 .(b
 P835771
 T404261372
-DdfAA13557
+DdfAAA13557
 Seric
 Seric
-Cdaemon
 Eowner-sendmail@vangogh.CS.Berkeley.EDU
 Eowner-sendmail@vangogh.CS.Berkeley.EDU
-Ceric
+Ceric:sendmail@vangogh.CS.Berkeley.EDU
 Reric@mammoth.Berkeley.EDU
 Rbostic@okeeffe.CS.Berkeley.EDU
 H?P?return-path: <owner-sendmail@vangogh.CS.Berkeley.EDU>
 Reric@mammoth.Berkeley.EDU
 Rbostic@okeeffe.CS.Berkeley.EDU
 H?P?return-path: <owner-sendmail@vangogh.CS.Berkeley.EDU>
-Hreceived: by vangogh.CS.Berkeley.EDU (5.108/2.7) id AA06703;
+Hreceived: by vangogh.CS.Berkeley.EDU (5.108/2.7) id AAA06703;
        Fri, 17 Jul 92 00:28:55 -0700
 Hreceived: from mail.CS.Berkeley.EDU by vangogh.CS.Berkeley.EDU (5.108/2.7)
        Fri, 17 Jul 92 00:28:55 -0700
 Hreceived: from mail.CS.Berkeley.EDU by vangogh.CS.Berkeley.EDU (5.108/2.7)
-       id AA06698; Fri, 17 Jul 92 00:28:54 -0700
+       id AAA06698; Fri, 17 Jul 92 00:28:54 -0700
 Hreceived: from [128.32.31.21] by mail.CS.Berkeley.EDU (5.96/2.5)
        id AA22777; Fri, 17 Jul 92 03:29:14 -0400
 Hreceived: by foo.bar.baz.de (5.57/Ultrix3.0-C)
 Hreceived: from [128.32.31.21] by mail.CS.Berkeley.EDU (5.96/2.5)
        id AA22777; Fri, 17 Jul 92 03:29:14 -0400
 Hreceived: by foo.bar.baz.de (5.57/Ultrix3.0-C)
@@ -5113,7 +6660,7 @@ check there to find the actual pathnames.
 .ip "/usr/\*(SD/sendmail"
 The binary of
 .i sendmail .
 .ip "/usr/\*(SD/sendmail"
 The binary of
 .i sendmail .
-.ip /usr/bin/newaliases
+.ip /usr/\*(SB/newaliases
 A link to /usr/\*(SD/sendmail;
 causes the alias database to be rebuilt.
 Running this program is completely equivalent to giving
 A link to /usr/\*(SD/sendmail;
 causes the alias database to be rebuilt.
 Running this program is completely equivalent to giving
@@ -5121,7 +6668,7 @@ Running this program is completely equivalent to giving
 the
 .b \-bi
 flag.
 the
 .b \-bi
 flag.
-.ip /usr/bin/mailq
+.ip /usr/\*(SB/mailq
 Prints a listing of the mail queue.
 This program is equivalent to using the
 .b \-bp
 Prints a listing of the mail queue.
 This program is equivalent to using the
 .b \-bp
@@ -5130,13 +6677,18 @@ flag to
 .ip /etc/sendmail.cf
 The configuration file,
 in textual form.
 .ip /etc/sendmail.cf
 The configuration file,
 in textual form.
-.ip /etc/sendmail.fc
-The configuration file
-represented as a memory image.
 .ip /usr/lib/sendmail.hf
 The SMTP help file.
 .ip /etc/sendmail.st
 A statistics file; need not be present.
 .ip /usr/lib/sendmail.hf
 The SMTP help file.
 .ip /etc/sendmail.st
 A statistics file; need not be present.
+.ip /etc/sendmail.pid
+Created in daemon mode;
+it contains the process id of the current SMTP daemon.
+If you use this in scripts;
+use ``head \-1'' to get just the first line;
+later versions of
+.i sendmail
+may add information to subsequent lines.
 .ip /etc/aliases
 The textual version of the alias file.
 .ip /etc/aliases.{pag,dir}
 .ip /etc/aliases
 The textual version of the alias file.
 .ip /etc/aliases.{pag,dir}
@@ -5171,10 +6723,9 @@ A transcript of the current session.
 .\"Eric Allman
 .\"Britton-Lee, Inc.
 .\".sp
 .\"Eric Allman
 .\"Britton-Lee, Inc.
 .\".sp
-.\"Version 6.1
+.\"Version 8.16
 .\".ce 0
 .\".ce 0
-.pn 2
-.bp
+.bp 2
 .ce
 .sz 12
 TABLE OF CONTENTS
 .ce
 .sz 12
 TABLE OF CONTENTS