summaryrefslogtreecommitdiff
path: root/contrib/sendmail/doc/op/op.me
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sendmail/doc/op/op.me')
-rw-r--r--contrib/sendmail/doc/op/op.me10787
1 files changed, 0 insertions, 10787 deletions
diff --git a/contrib/sendmail/doc/op/op.me b/contrib/sendmail/doc/op/op.me
deleted file mode 100644
index be3340de2f38a..0000000000000
--- a/contrib/sendmail/doc/op/op.me
+++ /dev/null
@@ -1,10787 +0,0 @@
-.\" Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers.
-.\" All rights reserved.
-.\" Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved.
-.\" Copyright (c) 1983, 1993
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" By using this file, you agree to the terms and conditions set
-.\" forth in the LICENSE file which can be found at the top level of
-.\" the sendmail distribution.
-.\"
-.\"
-.\" $Id: op.me,v 8.609.2.17 2002/12/18 22:50:15 ca Exp $
-.\"
-.\" eqn op.me | pic | troff -me
-.\"
-.\" Define \(sc if not defined (for text output)
-.\"
-.if !c \(sc .char \(sc S
-.\"
-.\" Define \(dg as "*" for text output and create a new .DG macro
-.\" which describes the symbol.
-.\"
-.if n .ds { [
-.if n .ds } ]
-.ie !c \(dg \{\
-.char \(dg *
-.de DG
-an asterick
-..
-.\}
-.el \{\
-.de DG
-a dagger
-..
-.\}
-.\"
-.\" Define \(dd as "#" for text output and create a new .DD macro
-.\" which describes the symbol.
-.\"
-.ie !c \(dd \{\
-.char \(dd #
-.de DD
-a pound sign
-..
-.\}
-.el \{\
-.de DD
-a double dagger
-..
-.\}
-.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
-.\" 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
-.in \\$3u*3n
-.ti -3n
-\\$2. \\$1
-.)x
-..
-.de $C
-.(x
-.in 0
-\\$1 \\$2. \\$3
-.)x
-..
-.+c
-.(l C
-.sz 16
-.b SENDMAIL\u\s-6TM\s0\d
-.sz 12
-.sp
-.b "INSTALLATION AND OPERATION GUIDE"
-.(f
-.b DISCLAIMER:
-This documentation is under modification.
-.)f
-.sz 10
-.sp
-.r
-Eric Allman
-Gregory Neil Shapiro
-Claus Assmann
-Sendmail, Inc.
-.sp
-.de Ve
-Version \\$2
-..
-.Ve $Revision: 8.609.2.17 $
-.rm Ve
-.sp
-For Sendmail Version 8.12
-.)l
-.(f
-Sendmail is a trademark of Sendmail, Inc.
-.)f
-.sp 2
-.pp
-.i Sendmail \u\s-2TM\s0\d
-implements a general purpose internetwork mail routing facility
-under the UNIX\(rg
-operating system.
-It is not tied to any one transport protocol \*-
-its function may be likened to a crossbar switch,
-relaying messages from one domain into another.
-In the process,
-it can do a limited amount of message header editing
-to put the message into a format that is appropriate
-for the receiving domain.
-All of this is done under the control of a configuration file.
-.pp
-Due to the requirements of flexibility
-for
-.i sendmail ,
-the configuration file can seem somewhat unapproachable.
-However, there are only a few basic configurations
-for most sites,
-for which standard configuration files have been supplied.
-Most other configurations
-can be built by adjusting an existing configuration file
-incrementally.
-.pp
-.i Sendmail
-is based on
-RFC 821 (Simple Mail Transport Protocol),
-RFC 822 (Internet Mail Headers Format),
-RFC 974 (MX routing),
-RFC 1123 (Internet Host Requirements),
-RFC 1413 (Identification server),
-RFC 1652 (SMTP 8BITMIME Extension),
-RFC 1869 (SMTP Service Extensions),
-RFC 1870 (SMTP SIZE Extension),
-RFC 1891 (SMTP Delivery Status Notifications),
-RFC 1892 (Multipart/Report),
-RFC 1893 (Enhanced Mail System Status Codes),
-RFC 1894 (Delivery Status Notifications),
-RFC 1985 (SMTP Service Extension for Remote Message Queue Starting),
-RFC 2033 (Local Message Transmission Protocol),
-RFC 2034 (SMTP Service Extension for Returning Enhanced Error Codes),
-RFC 2045 (MIME),
-RFC 2476 (Message Submission),
-RFC 2487 (SMTP Service Extension for Secure SMTP over TLS),
-RFC 2554 (SMTP Service Extension for Authentication),
-RFC 2821 (Simple Mail Transfer Protocol),
-RFC 2822 (Internet Message Format),
-RFC 2852 (Deliver By SMTP Service Extension),
-and
-RFC 2920 (SMTP Service Extension for Command Pipelining).
-However, since
-.i sendmail
-is designed to work in a wider world,
-in many cases it can be configured to exceed these protocols.
-These cases are described herein.
-.pp
-Although
-.i sendmail
-is intended to run
-without the need for monitoring,
-it has a number of features
-that may be used to monitor or adjust the operation
-under unusual circumstances.
-These features are described.
-.pp
-Section one describes how to do a basic
-.i sendmail
-installation.
-Section two
-explains the day-to-day information you should know
-to maintain your mail system.
-If you have a relatively normal site,
-these two sections should contain sufficient information
-for you to install
-.i sendmail
-and keep it happy.
-Section three
-has information regarding the command line arguments.
-Section four
-describes some parameters that may be safely tweaked.
-Section five
-contains the nitty-gritty information about the configuration
-file.
-This section is for masochists
-and people who must write their own configuration file.
-Section six
-describes configuration that can be done at compile time.
-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
-There are two basic steps to installing
-.i sendmail .
-First, you have to compile and install the binary.
-If
-.i sendmail
-has already been ported to your operating system
-that should be simple.
-Second, you must build a run-time configuration file.
-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,
-and the settings of various options.
-Although the configuration file can be quite complex,
-a configuration can usually be built
-using an M4-based configuration language.
-Assuming you have the standard
-.i sendmail
-distribution, see
-.i cf/README
-for further information.
-.pp
-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
-are given from the root of the
-.i sendmail
-subtree,
-normally
-.i /usr/src/usr.\*(SD/sendmail
-on 4.4BSD-based systems.
-.pp
-Continue with the next section if you need/want to compile
-.i sendmail
-yourself.
-If you have a running binary already on your system,
-you should probably skip to section 1.2.
-.sh 2 "Compiling Sendmail"
-.pp
-All
-.i sendmail
-source is in the
-.i sendmail
-subdirectory.
-To compile sendmail,
-.q cd
-into the
-.i sendmail
-directory and type
-.(b
-\&./Build
-.)b
-This will leave the binary in an appropriately named subdirectory,
-e.g.,
-obj.BSD-OS.2.1.i386.
-It works for multiple object versions
-compiled out of the same directory.
-.sh 3 "Tweaking the Build Invocation"
-.pp
-You can give parameters on the
-.i Build
-command.
-In most cases these are only used when the
-.i obj.*
-directory is first created.
-To restart from scratch, use
-.i -c .
-These commands include:
-.nr ii 0.5i
-.ip "\-L \fIlibdirs\fP"
-A list of directories to search for libraries.
-.ip "\-I \fIincdirs\fP"
-A list of directories to search for include files.
-.ip "\-E \fIenvar\fP=\fIvalue\fP"
-Set an environment variable to an indicated
-.i value
-before compiling.
-.ip "\-c"
-Create a new
-.i obj.*
-tree before running.
-.ip "\-f \fIsiteconfig\fP"
-Read the indicated site configuration file.
-If this parameter is not specified,
-.i Build
-includes
-.i all
-of the files
-.i $BUILDTOOLS/Site/site.$oscf.m4
-and
-.i $BUILDTOOLS/Site/site.config.m4 ,
-where $BUILDTOOLS is normally
-.i \&../devtools
-and $oscf is the same name as used on the
-.i obj.*
-directory.
-See below for a description of the site configuration file.
-.ip "\-S"
-Skip auto-configuration.
-.i Build
-will avoid auto-detecting libraries if this is set.
-All libraries and map definitions must be specified
-in the site configuration file.
-.lp
-Most other parameters are passed to the
-.i make
-program; for details see
-.i $BUILDTOOLS/README .
-.sh 3 "Creating a Site Configuration File"
-.\"XXX
-.pp
-(This section is not yet complete.
-For now, see the file devtools/README for details.)
-See sendmail/README for various compilation flags that can be set.
-.sh 3 "Tweaking the Makefile"
-.pp
-.\" .b "XXX This should all be in the Site Configuration File section."
-.i Sendmail
-supports two different formats
-for the local (on disk) version of databases,
-notably the
-.i aliases
-database.
-At least one of these should be defined if at all possible.
-.nr ii 1i
-.ip NDBM
-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.
-.ip NEWDB
-The Berkeley DB package.
-If you have this, use it.
-It allows
-long records,
-multiple open databases,
-real in-memory caching,
-and so forth.
-You can define this in conjunction with
-.sm NDBM ;
-if you do,
-old alias databases are read,
-but when a new database is created it will be in NEWDB format.
-As a nasty hack,
-if you have NEWDB, NDBM, and NIS defined,
-and if the alias file name includes the substring
-.q /yp/ ,
-.i sendmail
-will create both new and old versions of the alias file
-during a
-.i newalias
-command.
-This is required because the Sun NIS/YP system
-reads the DBM version of the alias file.
-It's ugly as sin,
-but it works.
-.lp
-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.
-There are also several methods for remote database access:
-.ip LDAP
-Lightweight Directory Access Protocol.
-.ip NIS
-Sun's Network Information Services (formerly YP).
-.ip NISPLUS
-Sun's NIS+ services.
-.ip NETINFO
-NeXT's NetInfo service.
-.ip HESIOD
-Hesiod service (from Athena).
-.lp
-Other compilation flags are set in
-.i conf.h
-and should be predefined for you
-unless you are porting to a new environment.
-For more options see
-.i sendmail/README .
-.sh 3 "Compilation and installation"
-.pp
-After making the local system configuration described above,
-You should be able to compile and install the system.
-The script
-.q Build
-is the best approach on most systems:
-.(b
-\&./Build
-.)b
-This will use
-.i uname (1)
-to create a custom Makefile for your environment.
-.pp
-If you are installing in the standard places,
-you should be able to install using
-.(b
-\&./Build install
-.)b
-This should install the binary in
-/usr/\*(SD
-and create links from
-/usr/\*(SB/newaliases
-and
-/usr/\*(SB/mailq
-to
-/usr/\*(SD/sendmail.
-On most systems it will also format and install man pages.
-Notice: as of version 8.12
-.i sendmail
-will no longer be installed set-user-ID root by default.
-If you really want to use the old method, you can specify it as target:
-.(b
-\&./Build install-set-user-id
-.)b
-.sh 2 "Configuration Files"
-.pp
-.i Sendmail
-cannot operate without a configuration file.
-The configuration defines the mail delivery mechanisms understood at this site,
-how to access them,
-how to forward email to remote mail systems,
-and a number of tuning parameters.
-This configuration file is detailed
-in the later portion of this document.
-.pp
-The
-.i sendmail
-configuration can be daunting at first.
-The world is complex,
-and the mail configuration reflects that.
-The distribution includes an m4-based configuration package
-that hides a lot of the complexity.
-See
-.i cf/README
-for details.
-.pp
-Our configuration files are processed by
-.i m4
-to facilitate local customization;
-the directory
-.i cf
-of the
-.i sendmail
-distribution directory
-contains the source files.
-This directory contains several subdirectories:
-.nr ii 1i
-.ip cf
-Both site-dependent and site-independent descriptions of hosts.
-These can be literal host names
-(e.g.,
-.q ucbvax.mc )
-when the hosts are gateways
-or more general descriptions
-(such as
-.q "generic-solaris2.mc"
-as a general description of an SMTP-connected host
-running Solaris 2.x.
-Files ending
-.b \&.mc
-(``M4 Configuration'')
-are the input descriptions;
-the output is in the corresponding
-.b \&.cf
-file.
-The general structure of these files is described below.
-.ip domain
-Site-dependent subdomain descriptions.
-These are tied to the way your organization wants to do addressing.
-For example,
-.b domain/CS.Berkeley.EDU.m4
-is our description for hosts in the CS.Berkeley.EDU subdomain.
-These are referenced using the
-.sm DOMAIN
-.b m4
-macro in the
-.b \&.mc
-file.
-.ip feature
-Definitions of specific features that some particular host in your site
-might want.
-These are referenced using the
-.sm FEATURE
-.b m4
-macro.
-An example feature is
-use_cw_file
-(which tells
-.i sendmail
-to read an /etc/mail/local-host-names file on startup
-to find the set of local names).
-.ip hack
-Local hacks, referenced using the
-.sm HACK
-.b m4
-macro.
-Try to avoid these.
-The point of having them here is to make it clear that they smell.
-.ip m4
-Site-independent
-.i m4 (1)
-include files that have information common to all configuration files.
-This can be thought of as a
-.q #include
-directory.
-.ip mailer
-Definitions of mailers,
-referenced using the
-.sm MAILER
-.b m4
-macro.
-The mailer types that are known in this distribution are
-fax,
-local,
-smtp,
-uucp,
-and usenet.
-For example, to include support for the UUCP-based mailers,
-use
-.q MAILER(uucp) .
-.ip ostype
-Definitions describing various operating system environments
-(such as the location of support files).
-These are referenced using the
-.sm OSTYPE
-.b m4
-macro.
-.ip sh
-Shell files used by the
-.b m4
-build process.
-You shouldn't have to mess with these.
-.ip siteconfig
-Local UUCP connectivity information.
-This directory has been supplanted by the mailertable feature;
-any new configurations should use that feature to do UUCP
-(and other) routing.
-The use of this directory is deprecated.
-.pp
-If you are in a new domain
-(e.g., a company),
-you will probably want to create a
-cf/domain
-file for your domain.
-This consists primarily of relay definitions
-and features you want enabled site-wide:
-for example, Berkeley's domain definition
-defines relays for
-BitNET
-and UUCP.
-These are specific to Berkeley,
-and should be fully-qualified internet-style domain names.
-Please check to make certain they are reasonable for your domain.
-.pp
-Subdomains at Berkeley are also represented in the
-cf/domain
-directory.
-For example,
-the domain
-CS.Berkeley.EDU
-is the Computer Science subdomain,
-EECS.Berkeley.EDU
-is the Electrical Engineering and Computer Sciences subdomain,
-and
-S2K.Berkeley.EDU
-is the Sequoia 2000 subdomain.
-You will probably have to add an entry to this directory
-to be appropriate for your domain.
-.pp
-You will have to use or create
-.b \&.mc
-files in the
-.i cf/cf
-subdirectory for your hosts.
-This is detailed in the
-cf/README
-file.
-.sh 2 "Details of Installation Files"
-.pp
-This subsection describes the files that
-comprise the
-.i sendmail
-installation.
-.sh 3 "/usr/\*(SD/sendmail"
-.pp
-The binary for
-.i sendmail
-is located in /usr/\*(SD\**.
-.(f
-\**This is usually
-/usr/sbin
-on 4.4BSD and newer systems;
-many systems install it in
-/usr/lib.
-I understand it is in /usr/ucblib
-on System V Release 4.
-.)f
-It should be set-group-ID smmsp as described in
-sendmail/SECURITY.
-For security reasons,
-/, /usr, and /usr/\*(SD
-should be owned by root, mode 0755\**.
-.(f
-\**Some vendors ship them owned by bin;
-this creates a security hole that is not actually related to
-.i sendmail .
-Other important directories that should have restrictive ownerships
-and permissions are
-/bin, /usr/bin, /etc, /etc/mail, /usr/etc, /lib, and /usr/lib.
-.)f
-.sh 3 "/etc/mail/sendmail.cf"
-.pp
-This is the main configuration file for
-.i sendmail \**.
-.(f
-\**Actually, the pathname varies depending on the operating system;
-/etc/mail is the preferred directory.
-Some older systems install it in
-.b /usr/lib/sendmail.cf ,
-and I've also seen it in
-.b /usr/ucblib .
-If you want to move this file,
-add -D_PATH_SENDMAILCF=\e"/file/name\e"
-to the flags passed to the C compiler.
-Moving this file is not recommended:
-other programs and scripts know of this location.
-.)f
-This is one of the two non-library file names compiled into
-.i sendmail \**,
-the other is /etc/mail/submit.cf.
-.(f
-\**The system libraries can reference other files;
-in particular, system library subroutines that
-.i sendmail
-calls probably reference
-.i /etc/passwd
-and
-.i /etc/resolv.conf .
-.)f
-.pp
-The configuration file is normally created
-using the distribution files described above.
-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.
-.sh 3 "/etc/mail/submit.cf"
-.pp
-This is the configuration file for
-.i sendmail
-when it is used for initial mail submission, in which case
-it is also called ``Mail Submission Program'' (MSP)
-in contrast to ``Mail Transfer Agent'' (MTA).
-Starting with version 8.12,
-.i sendmail
-uses one of two different configuration files based on its operation mode
-(or the new
-.b \-A
-option).
-For initial mail submission, i.e., if one of the options
-.b \-bm
-(default),
-.b \-bs ,
-or
-.b \-t
-is specified, submit.cf is used (if available),
-for other operations sendmail.cf is used.
-Details can be found in
-.i sendmail/SECURITY .
-submit.cf is shipped with sendmail (in cf/cf/) and is installed by default.
-If changes to the configuration need to be made, start with
-cf/cf/submit.mc and follow the instruction in cf/README.
-.sh 3 "/usr/\*(SB/newaliases"
-.pp
-The
-.i newaliases
-command should just be a link to
-.i sendmail :
-.(b
-rm \-f /usr/\*(SB/newaliases
-ln \-s /usr/\*(SD/sendmail /usr/\*(SB/newaliases
-.)b
-This can be installed in whatever search path you prefer
-for your system.
-.sh 3 "/usr/\*(SB/hoststat"
-.pp
-The
-.i hoststat
-command should just be a link to
-.i sendmail ,
-in a fashion similar to
-.i newaliases .
-This command lists the status of the last mail transaction
-with all remote hosts. The
-.b \-v
-flag will prevent the status display from being truncated.
-It functions only when the
-.b HostStatusDirectory
-option is set.
-.sh 3 "/usr/\*(SB/purgestat"
-.pp
-This command is also a link to
-.i sendmail .
-It flushes expired (Timeout.hoststatus) information that is stored in the
-.b HostStatusDirectory
-tree.
-.sh 3 "/var/spool/mqueue"
-.pp
-The directory
-.i /var/spool/mqueue
-should be created to hold the mail queue.
-This directory should be mode 0700
-and owned by root.
-.pp
-The actual path of this directory
-is defined by the
-.b QueueDirectory
-option of the
-.i sendmail.cf
-file.
-To use multiple queues,
-supply a value ending with an asterisk.
-For example,
-.i /var/spool/mqueue/qd*
-will use all of the directories or symbolic links to directories
-beginning with `qd' in
-.i /var/spool/mqueue
-as queue directories.
-Do not change the queue directory structure
-while sendmail is running.
-.pp
-If these directories have subdirectories or symbolic links to directories
-named `qf', `df', and `xf', then these will be used for the different
-queue file types.
-That is, the data files are stored in the `df' subdirectory,
-the transcript files are stored in the `xf' subdirectory, and
-all others are stored in the `qf' subdirectory.
-.pp
-If shared memory support is compiled in,
-.i sendmail
-stores the available diskspace in a shared memory segment
-to make the values readily available to all children without
-incurring system overhead.
-In this case, only the daemon updates the data;
-i.e., the sendmail daemon creates the shared memory segment
-and deletes it if it is terminated.
-To use this,
-.i sendmail
-must have been compiled with support for shared memory
-(-DSM_CONF_SHM)
-and the option
-.b SharedMemoryKey
-must be set.
-Notice: do not use the same key for
-.i sendmail
-invocations with different queue directories
-or different queue group declarations.
-Access to shared memory is not controlled by locks,
-i.e., there is a race condition when data in the shared memory is updated.
-However, since operation of
-.i sendmail
-does not rely on the data in the shared memory, this does not negatively
-influence the behavior.
-.sh 3 "/var/spool/clientmqueue"
-.pp
-The directory
-.i /var/spool/clientmqueue
-should be created to hold the mail queue.
-This directory should be mode 0770
-and owned by user smmsp, group smmsp.
-.pp
-The actual path of this directory
-is defined by the
-.b QueueDirectory
-option of the
-.i submit.cf
-file.
-.sh 3 "/var/spool/mqueue/.hoststat"
-.pp
-This is a typical value for the
-.b HostStatusDirectory
-option,
-containing one file per host
-that this sendmail has chatted with recently.
-It is normally a subdirectory of
-.i mqueue .
-.sh 3 "/etc/mail/aliases*"
-.pp
-The system aliases are held in
-.q /etc/mail/aliases .
-A sample is given in
-.q sendmail/aliases
-which includes some aliases which
-.i must
-be defined:
-.(b
-cp sendmail/aliases /etc/mail/aliases
-.i "edit /etc/mail/aliases"
-.)b
-You should extend this file with any aliases that are apropos to your system.
-.pp
-Normally
-.i sendmail
-looks at a database version of the files,
-stored either in
-.q /etc/mail/aliases.dir
-and
-.q /etc/mail/aliases.pag
-or
-.q /etc/mail/aliases.db
-depending on which database package you are using.
-The actual path of this file
-is defined in the
-.b AliasFile
-option of the
-.i sendmail.cf
-file.
-.pp
-The permissions of the alias file and the database versions
-should be 0640 to prevent local denial of service attacks
-as explained in the top level
-.b README
-in the sendmail distribution.
-If the permissions 0640 are used, be sure that only trusted users belong
-to the group assigned to those files. Otherwise, files should not even
-be group readable.
-.sh 3 "/etc/rc or /etc/init.d/sendmail"
-.pp
-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)
-and it processes the queue periodically
-to insure that mail gets delivered when hosts come up.
-.pp
-If necessary, add the following lines to
-.q /etc/rc
-(or
-.q /etc/rc.local
-as appropriate)
-in the area where it is starting up the daemons
-on a BSD-base system,
-or on a System-V-based system
-in one of the startup files, typically
-.q /etc/init.d/sendmail :
-.(b
-if [ \-f /usr/\*(SD/sendmail \-a \-f /etc/mail/sendmail.cf ]; then
- (cd /var/spool/mqueue; rm \-f xf*)
- /usr/\*(SD/sendmail \-bd \-q30m &
- echo \-n ' sendmail' >/dev/console
-fi
-.)b
-The
-.q cd
-and
-.q rm
-commands insure that all transcript files have been removed;
-extraneous transcript files may be left around
-if the system goes down in the middle of processing a message.
-The line that actually invokes
-.i sendmail
-has two flags:
-.q \-bd
-causes it to listen on the SMTP port,
-and
-.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, see Figure 1
-for an example of a complex script which does this clean up.
-.(z
-.hl
-#!/bin/sh
-# 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
- if [ \-f $tffile ]
- then
- echo \-n " <extra: $tffile>" > /dev/console
- rm \-f $tffile
- fi
- 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
- if [ \-f $xffile ]
- then
- echo \-n " <panic: $xffile>" > /dev/console
- fi
-done
-.sp
-.ce
-Figure 1 \(em A complex startup script
-.hl
-.)z
-.sh 3 "/etc/mail/helpfile"
-.pp
-This is the help file used by the SMTP
-.b HELP
-command.
-It should be copied from
-.q sendmail/helpfile :
-.(b
-cp sendmail/helpfile /etc/mail/helpfile
-.)b
-The actual path of this file
-is defined in the
-.b HelpFile
-option of the
-.i sendmail.cf
-file.
-.sh 3 "/etc/mail/statistics"
-.pp
-If you wish to collect statistics
-about your mail traffic,
-you should create the file
-.q /etc/mail/statistics :
-.(b
-cp /dev/null /etc/mail/statistics
-chmod 0600 /etc/mail/statistics
-.)b
-This file does not grow.
-It is printed with the program
-.q mailstats/mailstats.c.
-The actual path of this file
-is defined in the
-.b S
-option of the
-.i sendmail.cf
-file.
-.sh 3 "/usr/\*(SB/mailq"
-.pp
-If
-.i sendmail
-is invoked as
-.q mailq,
-it will simulate the
-.b \-bp
-flag
-(i.e.,
-.i sendmail
-will print the contents of the mail queue;
-see below).
-This should be a link to /usr/\*(SD/sendmail.
-.sh 3 "sendmail.pid"
-.pp
-.i sendmail
-stores its current pid in the file specifed by the
-.b PidFile
-option (default is _PATH_SENDMAILPID).
-.i sendmail
-uses
-.b TempFileMode
-(which defaults to 0600) as
-the permissions of that file
-to prevent local denial of service attacks
-as explained in the top level
-.b README
-in the sendmail distribution.
-If the file already exists, then it might be necessary to
-change the permissions accordingly, e.g.,
-.(b
-chmod 0600 /var/run/sendmail.pid
-.)b
-.sh 3 "Map Files"
-.pp
-To prevent local denial of service attacks
-as explained in the top level
-.b README
-in the sendmail distribution,
-the permissions of map files created by
-.i makemap
-should be 0640.
-The use of 0640 implies that only trusted users belong to the group
-assigned to those files.
-If those files already exist, then it might be necessary to
-change the permissions accordingly, e.g.,
-.(b
-cd /etc/mail
-chmod 0640 *.db *.pag *.dir
-.)b
-.sh 1 "NORMAL OPERATIONS"
-.sh 2 "The System Log"
-.pp
-The system log is supported by the
-.i syslogd \|(8)
-program.
-All messages from
-.i sendmail
-are logged under the
-.sm LOG_MAIL
-facility\**.
-.(f
-\**Except on Ultrix,
-which does not support facilities in the syslog.
-.)f
-.sh 3 "Format"
-.pp
-Each line in the system log
-consists of a timestamp,
-the name of the machine that generated it
-(for logging from several machines
-over the local area network),
-the word
-.q sendmail: ,
-and a message\**.
-.(f
-\**This format may vary slightly if your vendor has changed
-the syntax.
-.)f
-Most messages are a sequence of
-.i name \c
-=\c
-.i value
-pairs.
-.pp
-The two most common lines are logged when a message is processed.
-The first logs the receipt of a message;
-there will be exactly one of these per message.
-Some fields may be omitted if they do not contain interesting information.
-Fields are:
-.ip from
-The envelope sender address.
-.ip size
-The size of the message in bytes.
-.ip class
-The class (i.e., numeric precedence) of the message.
-.ip pri
-The initial message priority (used for queue sorting).
-.ip nrcpts
-The number of envelope recipients for this message
-(after aliasing and forwarding).
-.ip msgid
-The message id of the message (from the header).
-.ip proto
-The protocol used to receive this message (e.g., ESMTP or UUCP)
-.ip daemon
-The daemon name from the
-.b DaemonPortOptions
-setting.
-.ip relay
-The machine from which it was received.
-.lp
-There is also one line logged per delivery attempt
-(so there can be several per message if delivery is deferred
-or there are multiple recipients).
-Fields are:
-.ip to
-A comma-separated list of the recipients to this mailer.
-.ip ctladdr
-The ``controlling user'', that is, the name of the user
-whose credentials we use for delivery.
-.ip delay
-The total delay between the time this message was received
-and the current delivery attempt.
-.ip xdelay
-The amount of time needed in this delivery attempt
-(normally indicative of the speed of the connection).
-.ip mailer
-The name of the mailer used to deliver to this recipient.
-.ip relay
-The name of the host that actually accepted (or rejected) this recipient.
-.ip dsn
-The enhanced error code (RFC 2034) if available.
-.ip stat
-The delivery status.
-.lp
-Not all fields are present in all messages;
-for example, the relay is usually not listed for local deliveries.
-.sh 3 "Levels"
-.pp
-If you have
-.i syslogd \|(8)
-or an equivalent installed,
-you will be able to do logging.
-There is a large amount of information that can be logged.
-The log is arranged as a succession of levels.
-At the lowest level
-only extremely strange situations are logged.
-At the highest level,
-even the most mundane and uninteresting events
-are recorded for posterity.
-As a convention,
-log levels under ten
-are considered generally
-.q useful;
-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
-.\" XREF
-4.6.
-.sh 2 "Dumping State"
-.pp
-You can ask
-.i sendmail
-to log a dump of the open files
-and the connection cache
-by sending it a
-.sm SIGUSR1
-signal.
-The results are logged at
-.sm LOG_DEBUG
-priority.
-.sh 2 "The Mail Queues"
-.pp
-Mail messages may either be delivered immediately or be held for later
-delivery.
-Held messages are placed into a holding directory called a mail queue.
-.pp
-A mail message may be queued for these reasons:
-.bu
-If a mail message is temporarily undeliverable, it is queued
-and delivery is attempted later.
-If the message is addressed to multiple recipients, it is queued
-only for those recipients to whom delivery is not immediately possible.
-.bu
-If the SuperSafe option is set to true,
-all mail messages are queued while delivery is attempted.
-.bu
-If the DeliveryMode option is set to queue-only or defer,
-all mail is queued, and no immediate delivery is attempted.
-.bu
-If the load average becomes higher than the value of the QueueLA option
-and the
-.b QueueFactor
-(\c
-.b q )
-option divided by the difference in the current load average and the
-.b QueueLA
-option plus one
-is less than the priority of the message,
-messages are queued rather than immediately delivered.
-.bu
-One or more addresses are marked as expensive and delivery is postponed
-until the next queue run or one or more address are marked as held via
-mailer which uses the hold mailer flag.
-.sh 3 "Queue Groups and Queue Directories"
-.pp
-There are one or more mail queues.
-Each mail queue belongs to a queue group.
-There is always a default queue group that is called ``mqueue''
-(which is where messages go by default unless otherwise specified).
-The directory or directories which comprise the default queue group
-are specified by the QueueDirectory option.
-There are zero or more
-additional named queue groups declared using the
-.b Q
-command in the configuration file.
-.pp
-By default, a queued message is placed in the queue group
-associated with the first recipient in the recipient list.
-A recipient address is mapped to a queue group as follows.
-First, if there is a ruleset called ``queuegroup'',
-and if this ruleset maps the address to a queue group name,
-then that queue group is chosen.
-That is, the argument for the ruleset is the recipient address
-and the result should be
-.b $#
-followed by the name of a queue group.
-Otherwise, if the mailer associated with the address specifies
-a queue group, then that queue group is chosen.
-Otherwise, the default queue group is chosen.
-.pp
-A message with multiple recipients will be split
-if different queue groups are chosen
-by the mapping of recipients to queue groups.
-.pp
-When a message is placed in a queue group, and the queue group has
-more than one queue, a queue is selected randomly.
-.pp
-If a message with multiple recipients is placed into a queue group
-with the 'r' option (maximum number of recipients per message)
-set to a positive value
-.i N ,
-and if there are more than
-.i N
-recipients
-in the message, then the message will be split into multiple messages,
-each of which have at most
-.i N
-recipients.
-.pp
-Notice: if multiple queue groups are used, do
-.b not
-move queue files around, e.g., into a different queue directory.
-This may have weird effects and can cause mail not to be delivered.
-Queue files and directories should be treated as opaque
-and should not be manipulated directly.
-.sh 3 "Queue Runs"
-.pp
-.i sendmail
-has two different ways to process the queue(s).
-The first one is to start queue runners after certain intervals
-(``normal'' queue runners),
-the second one is to keep queue runner processes around
-(``persistent'' queue runners).
-How to select either of these types is discussed in the appendix
-``COMMAND LINE FLAGS''.
-Persistent queue runners have the advantage that no new processes
-need to be spawned at certain intervals; they just sleep for
-a specified time after they finished a queue run.
-Another advantage of persistent queue runners is that only one process
-belonging to a workgroup (a workgroup is a set of queue groups)
-collects the data for a queue run
-and then multiple queue runner may go ahead using that data.
-This can significantly reduce the disk I/O necessary to read the
-queue files compared to starting multiple queue runners directly.
-Their disadvantage is that a new queue run is only started
-after all queue runners belonging to a group finished their tasks.
-In case one of the queue runners tries delivery to a slow recipient site
-at the end of a queue run, the next queue run may be substantially delayed.
-In general this should be smoothed out due to the distribution of
-those slow jobs, however, for sites with small number of
-queue entries this might introduce noticable delays.
-In general, persistent queue runners are only useful for
-sites with big queues.
-.sh 3 "Manual Intervention"
-.pp
-Under normal conditions the mail queue will be processed transparently.
-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.
-Although
-.i sendmail
-ought to recover gracefully when the host comes up,
-you may find performance unacceptably bad in the meantime.
-In that case you want to check the content of the queue
-and manipulate it as explained in the next two sections.
-.sh 3 "Printing the queue"
-.pp
-The contents of the queue(s) can be printed
-using the
-.i mailq
-command
-(or by specifying the
-.b \-bp
-flag to
-.i sendmail ):
-.(b
-mailq
-.)b
-This will produce a listing of the queue id's,
-the size of the message,
-the date the message entered the queue,
-and the sender and recipients.
-If shared memory support is compiled in,
-the flag
-.b \-bP
-can be used to print the number of entries in the queue(s),
-provided a process updates the data.
-However, as explained earlier, the output might be slightly wrong,
-since access to the shared memory is not locked.
-For example,
-``unknown number of entries''
-might be shown.
-The internal counters are updated after each queue run
-to the correct value again.
-.sh 3 "Forcing the queue"
-.pp
-.i Sendmail
-should run the queue automatically at intervals.
-When using multiple queues,
-a separate process will by default be created to
-run each of the queues
-unless the queue run is initiated by a user
-with the verbose flag.
-The algorithm is to read and sort the queue,
-and then to attempt to process all jobs in order.
-When it attempts to run the job,
-.i sendmail
-first checks to see if the job is locked.
-If so, it ignores the job.
-.pp
-There is no attempt to insure that only one queue processor
-exists at any time,
-since there is no guarantee that a job cannot take forever
-to process
-(however,
-.i sendmail
-does include heuristics to try to abort jobs
-that are taking absurd amounts of time;
-technically, this violates RFC 821, but is blessed by RFC 1123).
-Due to the locking algorithm,
-it is impossible for one job to freeze the entire queue.
-However,
-an uncooperative recipient host
-or a program recipient
-that never returns
-can accumulate many processes in your system.
-Unfortunately,
-there is no completely general way to solve this.
-.pp
-In some cases,
-you may find that a major host going down
-for a couple of days
-may create a prohibitively large queue.
-This will result in
-.i sendmail
-spending an inordinate amount of time
-sorting the queue.
-This situation can be fixed by moving the queue to a temporary place
-and creating a new queue.
-The old queue can be run later when the offending host returns to service.
-.pp
-To do this,
-it is acceptable to move the entire queue directory:
-.(b
-cd /var/spool
-mv mqueue omqueue; mkdir mqueue; chmod 0700 mqueue
-.)b
-You should then kill the existing daemon
-(since it will still be processing in the old queue directory)
-and create a new daemon.
-.pp
-To run the old mail queue, issue the following command:
-.(b
-/usr/\*(SD/sendmail \-C /etc/mail/queue.cf \-q
-.)b
-The
-.b \-C
-flag specifies an alternate configuration file
-.b queue.cf
-which should refer to the moved queue directory
-.(b
-O QueueDirectory=/var/spool/omqueue
-.)b
-and the
-.b \-q
-flag says to just run every job in the queue.
-You can also specify the moved queue directory on the command line
-.(b
-/usr/\*(SD/sendmail \-oQ/var/spool/omqueue \-q
-.)b
-but this requires that you do not have
-queue groups in the configuration file,
-because those are not subdirectories of the moved directory.
-See the section about "Queue Group Declaration" for details;
-you most likely need a different configuration file to correctly deal
-with this problem.
-However, a proper configuration of queue groups should avoid
-filling up queue directories, so you shouldn't run into
-this problem.
-If you have a tendency toward voyeurism,
-you can use the
-.b \-v
-flag to watch what is going on.
-.pp
-When the queue is finally emptied,
-you can remove the directory:
-.(b
-rmdir /var/spool/omqueue
-.)b
-.sh 2 "Disk Based Connection Information"
-.pp
-.i Sendmail
-stores a large amount of information about each remote system it
-has connected to in memory. It is possible to preserve some
-of this information on disk as well, by using the
-.b HostStatusDirectory
-option, so that it may be shared between several invocations of
-.i sendmail .
-This allows mail to be queued immediately or skipped during a queue run if
-there has been a recent failure in connecting to a remote machine.
-.pp
-Additionally enabling
-.b SingleThreadDelivery
-has the added effect of single-threading mail delivery to a destination.
-This can be quite helpful
-if the remote machine is running an SMTP server that is easily overloaded
-or cannot accept more than a single connection at a time,
-but can cause some messages to be punted to a future queue run.
-It also applies to
-.i all
-hosts, so setting this because you have one machine on site
-that runs some software that is easily overrun
-can cause mail to other hosts to be slowed down.
-If this option is set,
-you probably want to set the
-.b MinQueueAge
-option as well and run the queue fairly frequently;
-this way jobs that are skipped because another
-.i sendmail
-is talking to the same host will be tried again quickly
-rather than being delayed for a long time.
-.pp
-The disk based host information is stored in a subdirectory of the
-.b mqueue
-directory called
-.b \&.hoststat \**.
-.(f
-\**This is the usual value of the
-.b HostStatusDirectory
-option;
-it can, of course, go anywhere you like in your filesystem.
-.)f
-Removing this directory and its subdirectories has an effect similar to
-the
-.i purgestat
-command and is completely safe.
-However,
-.i purgestat
-only removes expired (Timeout.hoststatus) data.
-The information in these directories can
-be perused with the
-.i hoststat
-command, which will indicate the host name, the last access, and the
-status of that access.
-An asterisk in the left most column indicates that a
-.i sendmail
-process currently has the host locked for mail delivery.
-.pp
-The disk based connection information is treated the same way as memory based
-connection information for the purpose of timeouts.
-By default, information about host failures is valid for 30 minutes.
-This can be adjusted with
-the
-.b Timeout.hoststatus
-option.
-.pp
-The connection information stored on disk may be expired at any time
-with the
-.i purgestat
-command or by invoking sendmail with the
-.b \-bH
-switch.
-The connection information may be viewed with the
-.i hoststat
-command or by invoking sendmail with the
-.b \-bh
-switch.
-.sh 2 "The Service Switch"
-.pp
-The implementation of certain system services
-such as host and user name lookup
-is controlled by the service switch.
-If the host operating system supports such a switch,
-and sendmail knows about it,
-.i sendmail
-will use the native version.
-Ultrix, Solaris, and DEC OSF/1 are examples of such systems\**.
-.(f
-\**HP-UX 10 has service switch support,
-but since the APIs are apparently not available in the libraries
-.i sendmail
-does not use the native service switch in this release.
-.)f
-.pp
-If the underlying operating system does not support a service switch
-(e.g., SunOS 4.X, HP-UX, BSD)
-then
-.i sendmail
-will provide a stub implementation.
-The
-.b ServiceSwitchFile
-option points to the name of a file that has the service definitions.
-Each line has the name of a service
-and the possible implementations of that service.
-For example, the file:
-.(b
-hosts dns files nis
-aliases files nis
-.)b
-will ask
-.i sendmail
-to look for hosts in the Domain Name System first.
-If the requested host name is not found, it tries local files,
-and if that fails it tries NIS.
-Similarly, when looking for aliases
-it will try the local files first followed by NIS.
-.pp
-Notice: since
-.i sendmail
-must access MX records for correct operation, it will use
-DNS if it is configured in the
-.b ServiceSwitchFile
-file.
-Hence an entry like
-.(b
-hosts files dns
-.)b
-will not avoid DNS lookups even if a host can be found
-in /etc/hosts.
-.pp
-Service switches are not completely integrated.
-For example, despite the fact that the host entry listed in the above example
-specifies to look in NIS,
-on SunOS this won't happen because the system implementation of
-.i gethostbyname \|(3)
-doesn't understand this.
-.sh 2 "The Alias Database"
-.pp
-After recipient addresses are read from the SMTP connection
-or command line
-they are parsed by ruleset 0,
-which must resolve to a
-{\c
-.i mailer ,
-.i host ,
-.i address }
-triple.
-If the flags selected by the
-.i mailer
-include the
-.b A
-(aliasable) flag,
-the
-.i address
-part of the triple is looked up as the key
-(i.e., the left hand side)
-into the alias database.
-If there is a match, the address is deleted from the send queue
-and all addresses on the right hand side of the alias
-are added in place of the alias that was found.
-This is a recursive operation,
-so aliases found in the right hand side of the alias
-are similarly expanded.
-.pp
-The alias database exists in two forms.
-One is a text form,
-maintained in the file
-.i /etc/mail/aliases.
-The aliases are of the form
-.(b
-name: name1, name2, ...
-.)b
-Only local names may be aliased;
-e.g.,
-.(b
-eric@prep.ai.MIT.EDU: eric@CS.Berkeley.EDU
-.)b
-will not have the desired effect
-(except on prep.ai.MIT.EDU,
-and they probably don't want me)\**.
-.(f
-\**Actually, any mailer that has the `A' mailer flag set
-will permit aliasing;
-this is normally limited to the local mailer.
-.)f
-Aliases may be continued by starting any continuation lines
-with a space or a tab or by putting a backslash directly before
-the newline.
-Blank lines and lines beginning with a sharp sign
-(\c
-.q # )
-are comments.
-.pp
-The second form is processed by the
-.i ndbm \|(3)\**
-.(f
-\**The
-.i gdbm
-package does not work.
-.)f
-or the Berkeley DB library.
-This form is in the file
-.i /etc/mail/aliases.db
-(if using NEWDB)
-or
-.i /etc/mail/aliases.dir
-and
-.i /etc/mail/aliases.pag
-(if using NDBM).
-This is the form that
-.i sendmail
-actually uses to resolve aliases.
-This technique is used to improve performance.
-.pp
-The control of search order is actually set by the service switch.
-Essentially, the entry
-.(b
-O AliasFile=switch:aliases
-.)b
-is always added as the first alias entry;
-also, the first alias file name without a class
-(e.g., without
-.q nis:
-on the front)
-will be used as the name of the file for a ``files'' entry
-in the aliases switch.
-For example, if the configuration file contains
-.(b
-O AliasFile=/etc/mail/aliases
-.)b
-and the service switch contains
-.(b
-aliases nis files nisplus
-.)b
-then aliases will first be searched in the NIS database,
-then in /etc/mail/aliases,
-then in the NIS+ database.
-.pp
-You can also use
-.sm NIS -based
-alias files.
-For example, the specification:
-.(b
-O AliasFile=/etc/mail/aliases
-O AliasFile=nis:mail.aliases@my.nis.domain
-.)b
-will first search the /etc/mail/aliases file
-and then the map named
-.q mail.aliases
-in
-.q my.nis.domain .
-Warning: if you build your own
-.sm NIS -based
-alias files,
-be sure to provide the
-.b \-l
-flag to
-.i makedbm (8)
-to map upper case letters in the keys to lower case;
-otherwise, aliases with upper case letters in their names
-won't match incoming addresses.
-.pp
-Additional flags can be added after the colon
-exactly like a
-.b K
-line \(em for example:
-.(b
-O AliasFile=nis:\-N mail.aliases@my.nis.domain
-.)b
-will search the appropriate NIS map and always include null bytes in the key.
-Also:
-.(b
-O AliasFile=nis:\-f mail.aliases@my.nis.domain
-.)b
-will prevent sendmail from downcasing the key before the alias lookup.
-.sh 3 "Rebuilding the alias database"
-.pp
-The
-.i hash
-or
-.i dbm
-version of the database
-may be rebuilt explicitly by executing the command
-.(b
-newaliases
-.)b
-This is equivalent to giving
-.i sendmail
-the
-.b \-bi
-flag:
-.(b
-/usr/\*(SD/sendmail \-bi
-.)b
-.pp
-If you have multiple aliases databases specified,
-the
-.b \-bi
-flag rebuilds all the database types it understands
-(for example, it can rebuild NDBM databases but not NIS databases).
-.sh 3 "Potential problems"
-.pp
-There are a number of problems that can occur
-with the alias database.
-They all result from a
-.i sendmail
-process accessing the DBM version
-while it is only partially built.
-This can happen under two circumstances:
-One process accesses the database
-while another process is rebuilding it,
-or the process rebuilding the database dies
-(due to being killed or a system crash)
-before completing the rebuild.
-.pp
-Sendmail has three techniques to try to relieve these problems.
-First, it ignores interrupts while rebuilding the database;
-this avoids the problem of someone aborting the process
-leaving a partially rebuilt database.
-Second,
-it locks the database source file during the rebuild \(em
-but that may not work over NFS or if the file is unwritable.
-Third,
-at the end of the rebuild
-it adds an alias of the form
-.(b
-@: @
-.)b
-(which is not normally legal).
-Before
-.i sendmail
-will access the database,
-it checks to insure that this entry exists\**.
-.(f
-\**The
-.b AliasWait
-option is required in the configuration
-for this action to occur.
-This should normally be specified.
-.)f
-.sh 3 "List owners"
-.pp
-If an error occurs on sending to a certain address,
-say
-.q \fIx\fP ,
-.i sendmail
-will look for an alias
-of the form
-.q owner-\fIx\fP
-to receive the errors.
-This is typically useful
-for a mailing list
-where the submitter of the list
-has no control over the maintenance of the list itself;
-in this case the list maintainer would be the owner of the list.
-For example:
-.(b
-unix-wizards: eric@ucbarpa, wnj@monet, nosuchuser,
- sam@matisse
-owner-unix-wizards: unix-wizards-request
-unix-wizards-request: eric@ucbarpa
-.)b
-would cause
-.q eric@ucbarpa
-to get the error that will occur
-when someone sends to
-unix-wizards
-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,
-the
-.q owner-
-address normally points at the
-.q -request
-address; this causes messages to go out with the typical Internet convention
-of using ``\c
-.i list -request''
-as the return address.
-.sh 2 "User Information Database"
-.pp
-This option is deprecated, use virtusertable and genericstable instead
-as explained in
-.i cf/README .
-If you have a version of
-.i sendmail
-with the user information database
-compiled in,
-and you have specified one or more databases using the
-.b U
-option,
-the databases will be searched for a
-.i user :maildrop
-entry.
-If found, the mail will be sent to the specified address.
-.sh 2 "Per-User Forwarding (.forward Files)"
-.pp
-As an alternative to the alias database,
-any user may put a file with the name
-.q .forward
-in his or her home directory.
-If this file exists,
-.i sendmail
-redirects mail for that user
-to the list of addresses listed in the .forward file.
-Note that aliases are fully expanded before forward files are referenced.
-For example, if the home directory for user
-.q mckusick
-has a .forward file with contents:
-.(b
-mckusick@ernie
-kirk@calder
-.)b
-then any mail arriving for
-.q mckusick
-will be redirected to the specified accounts.
-.pp
-Actually, the configuration file defines a sequence of filenames to check.
-By default, this is the user's .forward file,
-but can be defined to be more generally using the
-.b ForwardPath
-option.
-If you change this,
-you will have to inform your user base of the change;
-\&.forward is pretty well incorporated into the collective subconscious.
-.sh 2 "Special Header Lines"
-.pp
-Several header lines have special interpretations
-defined by the configuration file.
-Others have interpretations built into
-.i sendmail
-that cannot be changed without changing the code.
-These built-ins are described here.
-.sh 3 "Errors-To:"
-.pp
-If errors occur anywhere during processing,
-this header will cause error messages to go to
-the listed addresses.
-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 UseErrorsTo
-option is set.
-.pp
-The Errors-To: header is officially deprecated
-and will go away in a future release.
-.sh 3 "Apparently-To:"
-.pp
-RFC 822 requires at least one recipient field
-(To:, Cc:, or Bcc: line)
-in every message.
-If a message comes in with no recipients listed in the message
-then
-.i sendmail
-will adjust the header based on the
-.q NoRecipientAction
-option.
-One of the possible actions is to add an
-.q "Apparently-To:"
-header line for any recipients it is aware of.
-.pp
-The Apparently-To: header is non-standard
-and is both deprecated and strongly discouraged.
-.sh 3 "Precedence"
-.pp
-The Precedence: header can be used as a crude control of message priority.
-It tweaks the sort order in the queue
-and can be configured to change the message timeout values.
-The precedence of a message also controls how
-delivery status notifications (DSNs)
-are processed for that message.
-.sh 2 "IDENT Protocol Support"
-.pp
-.i Sendmail
-supports the IDENT protocol as defined in RFC 1413.
-Note that the RFC states
-a client should wait at least 30 seconds for a response.
-The default Timeout.ident is 5 seconds
-as many sites have adopted the practice of dropping IDENT queries.
-This has lead to delays processing mail.
-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
-.lp
-In some cases your system may not work properly with IDENT support
-due to a bug in the TCP/IP implementation.
-The symptoms will be that for some hosts
-the SMTP connection will be closed
-almost immediately.
-If this is true or if you do not want to use IDENT,
-you should set the IDENT timeout to zero;
-this will disable the IDENT protocol.
-.sh 1 "ARGUMENTS"
-.pp
-The complete list of arguments to
-.i sendmail
-is described in detail in Appendix A.
-Some important arguments are described here.
-.sh 2 "Queue Interval"
-.pp
-The amount of time between forking a process
-to run through the queue is defined by the
-.b \-q
-flag.
-If you run with delivery mode set to
-.b i
-or
-.b b
-this can be relatively large, since it will only be relevant
-when a host that was down comes back up.
-If you run in
-.b q
-mode it should be relatively short,
-since it defines the maximum amount of time that a message
-may sit in the queue.
-(See also the MinQueueAge option.)
-.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).
-.pp
-Notice: the meaning of the interval time depends on whether normal
-queue runners or persistent queue runners are used.
-For the former, it is the time between subsequent starts of a queue run.
-For the latter, it is the time sendmail waits after a persistent queue
-runner has finished its work to start the next one.
-Hence for persistent queue runners this interval should be very low,
-typically no more than two minutes.
-.sh 2 "Daemon Mode"
-.pp
-If you allow incoming mail over an IPC connection,
-you should have a daemon running.
-This should be set by your
-.i /etc/rc
-file using the
-.b \-bd
-flag.
-The
-.b \-bd
-flag and the
-.b \-q
-flag may be combined in one call:
-.(b
-/usr/\*(SD/sendmail \-bd \-q30m
-.)b
-.pp
-An alternative approach is to invoke sendmail from
-.i inetd (8)
-(use the
-.b \-bs \ \-Am
-flags to ask sendmail to speak SMTP on its standard input and output
-and to run as MTA).
-This works and allows you to wrap
-.i sendmail
-in a TCP wrapper program,
-but may be a bit slower since the configuration file
-has to be re-read on every message that comes in.
-If you do this, you still need to have a
-.i sendmail
-running to flush the queue:
-.(b
-/usr/\*(SD/sendmail \-q30m
-.)b
-.sh 2 "Forcing the Queue"
-.pp
-In some cases you may find that the queue has gotten clogged for some reason.
-You can force a queue run
-using the
-.b \-q
-flag (with no value).
-It is entertaining to use the
-.b \-v
-flag (verbose)
-when this is done to watch what happens:
-.(b
-/usr/\*(SD/sendmail \-q \-v
-.)b
-.pp
-You can also limit the jobs to those with a particular queue identifier,
-recipient, sender, or queue group
-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,
-.q \-qIstring
-limits it to particular queue identifiers, and
-.q \-qGstring
-limits it to a particular queue group.
-The named queue group will be run even if it is set to have 0 runners.
-You may also place an
-.b !
-before the
-.b I
-or
-.b R
-or
-.b S
-to indicate that jobs are limited to not including a particular queue
-identifier, recipient or sender.
-For example,
-.q \-q!Rseattle
-limits the queue run to jobs that do not have the string
-.q seattle
-somewhere in one of the recipient addresses.
-Should you need to terminate the queue jobs currently active then a SIGTERM
-to the parent of the process (or processes) will cleanly stop the jobs.
-.sh 2 "Debugging"
-.pp
-There are a fairly large number of debug flags
-built into
-.i sendmail .
-Each debug flag has a category and a level.
-Higher levels increase the level of debugging activity;
-in most cases, this means to print out more information.
-The convention is that levels greater than nine are
-.q absurd,
-i.e.,
-they print out so much information that you wouldn't normally
-want to see them except for debugging that particular piece of code.
-.pp
-You should
-.b never
-run a production sendmail server in debug mode.
-Many of the debug flags will result in debug output being sent over the
-SMTP channel.
-This will confuse many mail programs.
-However, for testing purposes, it can be useful
-when sending mail manually via
-telnet to the port you are using while debugging.
-.pp
-A debug category is either an integer, like 42,
-or a name, like ANSI.
-You can specify a range of numeric debug categories
-using the syntax 17-42.
-You can specify a set of named debug categories using
-a glob pattern like
-.q sm_trace_* .
-At present, only
-.q *
-and
-.q ?
-are supported in these glob patterns.
-.pp
-Debug flags are set using the
-.b \-d
-option;
-the syntax is:
-.(b
-.ta \w'debug-categories:M 'u
-debug-flag: \fB\-d\fP debug-list
-debug-list: debug-option [ , debug-option ]*
-debug-option: debug-categories [ . debug-level ]
-debug-categories: integer | integer \- integer | category-pattern
-category-pattern: [a-zA-Z_*?][a-zA-Z0-9_*?]*
-debug-level: integer
-.)b
-where spaces are for reading ease only.
-For example,
-.(b
-\-d12 Set category 12 to level 1
-\-d12.3 Set category 12 to level 3
-\-d3\-17 Set categories 3 through 17 to level 1
-\-d3\-17.4 Set categories 3 through 17 to level 4
-\-dANSI Set category ANSI to level 1
-\-dsm_trace_*.3 Set all named categories matching sm_trace_* to level 3
-.)b
-For a complete list of the available debug flags
-you will have to look at the code
-and the
-.i TRACEFLAGS
-file in the sendmail distribution
-(they are too dynamic to keep this document up to date).
-For a list of named debug categories in the sendmail binary, use
-.(b
-ident /usr/sbin/sendmail | grep Debug
-.)b
-.sh 2 "Changing the Values of Options"
-.pp
-Options can be overridden using the
-.b \-o
-or
-.b \-O
-command line flags.
-For example,
-.(b
-/usr/\*(SD/sendmail \-oT2m
-.)b
-sets the
-.b T
-(timeout) option to two minutes
-for this run only;
-the equivalent line using the long option name is
-.(b
-/usr/\*(SD/sendmail -OTimeout.queuereturn=2m
-.)b
-.pp
-Some options have security implications.
-Sendmail allows you to set these,
-but relinquishes its set-user-ID or set-group-ID permissions thereafter\**.
-.(f
-\**That is, it sets its effective uid to the real uid;
-thus, if you are executing as root,
-as from root's crontab file or during system startup
-the root permissions will still be honored.
-.)f
-.sh 2 "Trying a Different Configuration File"
-.pp
-An alternative configuration file
-can be specified using the
-.b \-C
-flag; for example,
-.(b
-/usr/\*(SD/sendmail \-Ctest.cf \-oQ/tmp/mqueue
-.)b
-uses the configuration file
-.i test.cf
-instead of the default
-.i /etc/mail/sendmail.cf.
-If the
-.b \-C
-flag has no value
-it defaults to
-.i sendmail.cf
-in the current directory.
-.pp
-.i Sendmail
-gives up set-user-ID root permissions
-(if it has been installed set-user-ID root)
-when you use this flag, so it is common to use a publicly writable directory
-(such as /tmp)
-as the queue directory (QueueDirectory or Q option) while testing.
-.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
-.b 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 2 "Testing Configuration Files"
-.pp
-When you build a configuration table,
-you can do a certain amount of testing
-using the
-.q "test mode"
-of
-.i sendmail .
-For example,
-you could invoke
-.i sendmail
-as:
-.(b
-sendmail \-bt \-Ctest.cf
-.)b
-which would read the configuration file
-.q test.cf
-and enter test mode.
-In this mode,
-you enter lines of the form:
-.(b
-rwset address
-.)b
-where
-.i rwset
-is the rewriting set you want to use
-and
-.i address
-is an address to apply the set to.
-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
-for sequential application of rules to an input.
-For example:
-.(b
-3,1,21,4 monet:bollard
-.)b
-first applies ruleset three to the input
-.q monet:bollard.
-Ruleset one is then applied to the output of ruleset three,
-followed similarly by rulesets twenty-one and four.
-.pp
-If you need more detail,
-you can also use the
-.q \-d21
-flag to turn on more debugging.
-For example,
-.(b
-sendmail \-bt \-d21.99
-.)b
-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 test mode
-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
-.pp
-As of version 8.7,
-some other syntaxes are available in test mode:
-.nr ii 1i
-.ip \&.D\|x\|value
-defines macro
-.i x
-to have the indicated
-.i value .
-This is useful when debugging rules that use the
-.b $& \c
-.i x
-syntax.
-.ip \&.C\|c\|value
-adds the indicated
-.i value
-to class
-.i c .
-.ip \&=S\|ruleset
-dumps the contents of the indicated ruleset.
-.ip \-d\|debug-spec
-is equivalent to the command-line flag.
-.lp
-Version 8.9 introduced more features:
-.nr ii 1i
-.ip ?
-shows a help message.
-.ip =M
-display the known mailers.
-.ip $m
-print the value of macro m.
-.ip $=c
-print the contents of class c.
-.ip /mx\ host
-returns the MX records for `host'.
-.ip /parse\ address
-parse address, returning the value of
-.i crackaddr ,
-and the parsed address.
-.ip /try\ mailer\ addr
-rewrite address into the form it will have when
-presented to the indicated mailer.
-.ip /tryflags\ flags
-set flags used by parsing. The flags can be `H' for
-Header or `E' for Envelope, and `S' for Sender or `R'
-for Recipient. These can be combined, `HR' sets
-flags for header recipients.
-.ip /canon\ hostname
-try to canonify hostname.
-.ip /map\ mapname\ key
-look up `key' in the indicated `mapname'.
-.ip /quit
-quit address test mode.
-.lp
-.sh 2 "Persistent Host Status Information"
-.pp
-When
-.b HostStatusDirectory
-is enabled,
-information about the status of hosts is maintained on disk
-and can thus be shared between different instantiations of
-.i sendmail .
-The status of the last connection with each remote host
-may be viewed with the command:
-.(b
-sendmail \-bh
-.)b
-This information may be flushed with the command:
-.(b
-sendmail \-bH
-.)b
-Flushing the information prevents new
-.i sendmail
-processes from loading it,
-but does not prevent existing processes from using the status information
-that they already have.
-.sh 1 "TUNING"
-.pp
-There are a number of configuration parameters
-you may want to change,
-depending on the requirements of your site.
-Most of these are set
-using an option in the configuration file.
-For example,
-the line
-.q "O Timeout.queuereturn=5d"
-sets option
-.q Timeout.queuereturn
-to the value
-.q 5d
-(five days).
-.pp
-Most of these options have appropriate defaults for most sites.
-However,
-sites having very high mail loads may find they need to tune them
-as appropriate for their mail load.
-In particular,
-sites experiencing a large number of small messages,
-many of which are delivered to many recipients,
-may find that they need to adjust the parameters
-dealing with queue priorities.
-.pp
-All versions of
-.i sendmail
-prior to 8.7
-had single character option names.
-As of 8.7,
-options have long (multi-character names).
-Although old short names are still accepted,
-most new options do not have short equivalents.
-.pp
-This section only describes the options you are most likely
-to want to tweak;
-read section
-.\"XREF
-5
-for more details.
-.sh 2 "Timeouts"
-.pp
-All time intervals are set
-using a scaled syntax.
-For example,
-.q 10m
-represents ten minutes, whereas
-.q 2h30m
-represents two and a half hours.
-The full set of scales is:
-.(b
-.ta 4n
-s seconds
-m minutes
-h hours
-d days
-w weeks
-.)b
-.sh 3 "Queue interval"
-.pp
-The argument to the
-.b \-q
-flag specifies how often a sub-daemon will run the queue.
-This is typically set to between fifteen minutes and one hour.
-If not set, or set to zero,
-the queue will not be run automatically.
-RFC 1123 section 5.3.1.1 recommends that this be at least 30 minutes.
-Should you need to terminate the queue jobs currently active then a SIGTERM
-to the parent of the process (or processes) will cleanly stop the jobs.
-.sh 3 "Read timeouts"
-.pp
-Timeouts all have option names
-.q Timeout.\fIsuboption\fP .
-Most of these control SMTP operations.
-The recognized
-.i suboption s,
-their default values, and the minimum values
-allowed by RFC 2821 section 4.5.3.2 (or RFC 1123 section 5.3.2) are:
-.nr ii 1i
-.ip connect
-The time to wait for an SMTP connection to open
-(the
-.i connect (2)
-system call)
-[0, unspecified].
-If zero, uses the kernel default.
-In no case can this option extend the timeout
-longer than the kernel provides, but it can shorten it.
-This is to get around kernels that provide an absurdly long connection timeout
-(90 minutes in one case).
-.ip iconnect
-The same as
-.i connect,
-except it applies only to the initial attempt to connect to a host
-for a given message
-[0, unspecified].
-The concept is that this should be very short (a few seconds);
-hosts that are well connected and responsive will thus be serviced immediately.
-Hosts that are slow will not hold up other deliveries in the initial
-delivery attempt.
-.ip aconnect
-[0, unspecified]
-The overall timeout waiting for all connection for a single delivery
-attempt to succeed.
-If 0, no overall limit is applied.
-This can be used to restrict the total amount of time trying to connect to
-a long list of host that could accept an e-mail for the recipient.
-This timeout does not apply to
-.b FallbackMXhost ,
-i.e., if the time is exhausted, the
-.b FallbackMXhost
-is tried next.
-.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
-(see below).
-.ip datainit\(dg
-The wait for a reply from a DATA command
-[5m, 2m].
-.ip datablock\(dg\(dd
-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\(dd
-In server SMTP,
-the time to wait for another command.
-[1h, 5m].
-.ip ident\(dd
-The timeout waiting for a reply to an IDENT query
-[5s\**, unspecified].
-.(f
-\**On some systems the default is zero to turn the protocol off entirely.
-.)f
-.ip lhlo
-The wait for a reply to an LMTP LHLO command
-[2m, unspecified].
-.ip auth
-The timeout for a reply in an SMTP AUTH dialogue
-[10m, unspecified].
-.ip starttls
-The timeout for a reply to an SMTP STARTTLS command and the TLS handshake
-[1h, unspecified].
-.ip fileopen\(dd
-The timeout for opening .forward and :include: files [60s, none].
-.ip control\(dd
-The timeout for a complete control socket transaction to complete [2m, none].
-.ip hoststatus\(dd
-How long status information about a host
-(e.g., host down)
-will be cached before it is considered stale
-[30m, unspecified].
-.ip resolver.retrans\(dd
-The resolver's
-retransmission time interval
-(in seconds)
-[varies].
-Sets both
-.i Timeout.resolver.retrans.first
-and
-.i Timeout.resolver.retrans.normal .
-.ip resolver.retrans.first\(dd
-The resolver's
-retransmission time interval
-(in seconds)
-for the first attempt to
-deliver a message
-[varies].
-.ip resolver.retrans.normal\(dd
-The resolver's
-retransmission time interval
-(in seconds)
-for all resolver lookups
-except the first delivery attempt
-[varies].
-.ip resolver.retry\(dd
-The number of times
-to retransmit a resolver query.
-Sets both
-.i Timeout.resolver.retry.first
-and
-.i Timeout.resolver.retry.normal
-[varies].
-.ip resolver.retry.first\(dd
-The number of times
-to retransmit a resolver query
-for the first attempt
-to deliver a message
-[varies].
-.ip resolver.retry.normal\(dd
-The number of times
-to retransmit a resolver query
-for all resolver lookups
- except the first delivery attempt
-[varies].
-.lp
-For compatibility with old configuration files,
-if no
-.i suboption
-is specified,
-all the timeouts marked with
-.DG
-(\(dg) are set to the indicated value.
-All but those marked with
-.DD
-(\(dd) apply to client SMTP.
-.pp
-For example, the lines:
-.(b
-O Timeout.command=25m
-O Timeout.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,
-an undeliverable message will time out.
-This is to insure that at least the sender is aware
-of the inability to send a message.
-The timeout is typically set to five days.
-It is sometimes considered convenient to also send a warning message
-if the message is in the queue longer than a few hours
-(assuming you normally have good connectivity;
-if your messages normally took several hours to send
-you wouldn't want to do this because it wouldn't be an unusual event).
-These timeouts are set using the
-.b Timeout.queuereturn
-and
-.b Timeout.queuewarn
-options in the configuration file
-(previously both were set using the
-.b T
-option).
-.pp
-If the message is submitted using the
-.sm NOTIFY
-.sm SMTP
-extension,
-warning messages will only be sent if
-.sm NOTIFY=DELAY
-is specified.
-The queuereturn and queuewarn timeouts
-can be further qualified with a tag based on the Precedence: field
-in the message;
-they must be one of
-.q urgent
-(indicating a positive non-zero precedence)
-.q normal
-(indicating a zero precedence), or
-.q non-urgent
-(indicating negative precedences).
-For example, setting
-.q Timeout.queuewarn.urgent=1h
-sets the warning timeout for urgent messages only
-to one hour.
-The default if no precedence is indicated
-is to set the timeout for all precedences.
-The value "now" can be used for
--O Timeout.queuereturn
-to return entries immediately during a queue run,
-e.g., to bounce messages independent of their time in the queue.
-.pp
-Since these options are global,
-and since you cannot know
-.i "a priori"
-how long another host outside your domain will be down,
-a five day timeout is recommended.
-This allows a recipient to fix the problem even if it occurs
-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 Timeout.queuewarn
-value can be piggybacked on the
-.b T
-option by indicating a time after which
-a warning message should be sent;
-the two timeouts are separated by a slash.
-For example, the line
-.(b
-OT5d/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
-.b ForkEachJob
-(\c
-.b Y )
-option,
-.i sendmail
-will fork before each individual message
-while running the queue.
-This option was used with earlier releases to prevent
-.i sendmail
-from consuming large amounts of memory.
-It should no longer be necessary with
-.i sendmail
-8.12.
-If the
-.b ForkEachJob
-option is not set,
-.i sendmail
-will keep track of hosts that are down during a queue run,
-which can improve performance dramatically.
-.pp
-If the
-.b ForkEachJob
-option is set,
-.i sendmail
-cannot use connection caching.
-.sh 2 "Queue Priorities"
-.pp
-Every message is assigned a priority when it is first instantiated,
-consisting of the message size (in bytes)
-offset by the message class
-(which is determined from the Precedence: header)
-times the
-.q "work class factor"
-and the number of recipients times the
-.q "work recipient factor."
-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
-The message size is included so that large messages are penalized
-relative to small messages.
-The message class allows users to send
-.q "high priority"
-messages by including a
-.q Precedence:
-field in their message;
-the value of this field is looked up in the
-.b P
-lines of the configuration file.
-Since the number of recipients affects the amount of load a message presents
-to the system,
-this is also included into the priority.
-.pp
-The recipient and class factors
-can be set in the configuration file using the
-.b RecipientFactor
-(\c
-.b y )
-and
-.b ClassFactor
-(\c
-.b z )
-options respectively.
-They default to 30000 (for the recipient factor)
-and 1800
-(for the class factor).
-The initial priority is:
-.EQ
-pri = msgsize - (class times bold ClassFactor) + (nrcpt times bold RecipientFactor)
-.EN
-(Remember, higher values for this parameter actually mean
-that the job will be treated with lower priority.)
-.pp
-The priority of a job can also be adjusted each time it is processed
-(that is, each time an attempt is made to deliver it)
-using the
-.q "work time factor,"
-set by the
-.b RetryFactor
-(\c
-.b Z )
-option.
-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.
-The
-.b RetryFactor
-option defaults to 90000.
-.sh 2 "Load Limiting"
-.pp
-.i Sendmail
-can be asked to queue (but not deliver) mail
-if the system load average gets too high using the
-.b QueueLA
-(\c
-.b x )
-option.
-When the load average exceeds the value of the
-.b QueueLA
-option, the delivery mode is set to
-.b q
-(queue only) if the
-.b QueueFactor
-(\c
-.b q )
-option divided by the difference in the current load average and the
-.b QueueLA
-option plus one
-is less than the priority of the message \(em
-that is, the message is queued iff:
-.EQ
-pri > { bold QueueFactor } over { LA - { bold QueueLA } + 1 }
-.EN
-The
-.b QueueFactor
-option defaults to 600000,
-so each point of load average is worth 600000 priority points
-(as described above).
-.pp
-For drastic cases, the
-.b RefuseLA
-(\c
-.b X )
-option defines a load average at which
-.i sendmail
-will refuse to accept network connections.
-Locally generated mail, i.e., mail which is not submitted via SMTP
-(including incoming UUCP mail),
-is still accepted.
-Notice that the MSP submits mail to the MTA via SMTP, and hence
-mail will be queued in the client queue in such a case.
-Therefore it is necessary to run the client mail queue periodically.
-.sh 2 "Resource Limits"
-.pp
-.i Sendmail
-has several parameters to control resource usage.
-Besides those mentionted in the previous section, there are at least
-.b MaxDaemonChildren ,
-.b ConnectionRateThrottle ,
-.b MaxQueueChildren ,
-and
-.b MaxRunnersPerQueue .
-The latter two limit the number of
-.i sendmail
-processes that operate on the queue.
-These are discussed in the section
-``Queue Group Declaration''.
-The former two can be used to limit the number of incoming connections.
-Their appropriate values depend on the host operating system and
-the hardware, e.g., amount of memory.
-In many situations it might be useful to set limits to prevent
-to have too many
-.i sendmail
-processes, however, these limits can be abused to mount a
-denial of service attack.
-For example, if
-.b MaxDaemonChildren=10
-then an attacker needs to open only 10 SMTP sessions to the server,
-leave them idle for most of the time,
-and no more connections will be accepted.
-.sh 2 "Delivery Mode"
-.pp
-There are a number of delivery modes that
-.i sendmail
-can operate in,
-set by the
-.b DeliveryMode
-(\c
-.b d )
-configuration option.
-These modes
-specify how quickly mail will be delivered.
-Legal modes are:
-.(b
-.ta 4n
-i deliver interactively (synchronously)
-b deliver in background (asynchronously)
-q queue only (don't deliver)
-d defer delivery attempts (don't deliver)
-.)b
-There are tradeoffs.
-Mode
-.q i
-gives the sender the quickest feedback,
-but may slow down some mailers and
-is hardly ever necessary.
-Mode
-.q b
-delivers promptly but
-can cause large numbers of processes
-if you have a mailer that takes a long time to deliver a message.
-Mode
-.q q
-minimizes the load on your machine,
-but means that delivery may be delayed for up to the queue interval.
-Mode
-.q d
-is identical to mode
-.q q
-except that it also prevents lookups in maps including the
-.b -D
-flag from working during the initial queue phase;
-it is intended for ``dial on demand'' sites where DNS lookups
-might cost real money.
-Some simple error messages
-(e.g., host unknown during the SMTP protocol)
-will be delayed using this mode.
-Mode
-.q b
-is the usual default.
-.pp
-If you run in mode
-.q q
-(queue only),
-.q d
-(defer),
-or
-.q b
-(deliver in background)
-.i sendmail
-will not expand aliases and follow .forward files
-upon initial receipt of the mail.
-This speeds up the response to RCPT commands.
-Mode
-.q i
-should not be used by the SMTP server.
-.sh 2 "Log Level"
-.pp
-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
-Minimal logging.
-.ip 1
-Serious system failures and potential security problems.
-.ip 2
-Lost communications (network problems) and protocol failures.
-.ip 3
-Other serious failures, malformed addresses, transient forward/include
-errors, connection timeouts.
-.ip 4
-Minor failures, out of date alias databases, connection rejections
-via check_ rulesets.
-.ip 5
-Message collection statistics.
-.ip 6
-Creation of error messages,
-VRFY and EXPN commands.
-.ip 7
-Delivery failures (host or user unknown, etc.).
-.ip 8
-Successful deliveries and alias database rebuilds.
-.ip 9
-Messages being deferred
-(due to a host being down, etc.).
-.ip 10
-Database expansion (alias, forward, and userdb lookups)
-and authentication information.
-.ip 11
-NIS errors and end of job processing.
-.ip 12
-Logs all SMTP connections.
-.ip 13
-Log bad user shells, files with improper permissions, and other
-questionable situations.
-.ip 14
-Logs refused connections.
-.ip 15
-Log all incoming and outgoing SMTP commands.
-.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.
-.ip 30
-Lost locks (only if using lockf instead of flock).
-.lp
-Additionally,
-values above 64 are reserved for extremely verbose debugging output.
-No normal site would ever set these.
-.sh 2 "File Modes"
-.pp
-The modes used for files depend on what functionality you want
-and the level of security you require.
-In many cases
-.i sendmail
-does careful checking of the modes
-of files and directories
-to avoid accidental compromise;
-if you want to make it possible to have group-writable support files
-you may need to use the
-.b DontBlameSendmail
-option to turn off some of these checks.
-.sh 3 "To suid or not to suid?"
-.pp
-.i Sendmail
-is no longer installed
-set-user-ID to root.
-sendmail/SECURITY
-explains how to configure and install
-.i sendmail
-without set-user-ID to root but set-group-ID
-which is the default configuration starting with 8.12.
-.pp
-The daemon usually runs as root, unless other measures are taken.
-At the point where
-.i sendmail
-is about to
-.i exec \|(2)
-a mailer,
-it checks to see if the userid is zero (root);
-if so,
-it resets the userid and groupid to a default
-(set by the
-.b U=
-equate in the mailer line;
-if that is not set, the
-.b DefaultUser
-option is used).
-This can be overridden
-by setting the
-.b S
-flag to the mailer
-for mailers that are trusted
-and must be called as root.
-However,
-this will cause mail processing
-to be accounted
-(using
-.i sa \|(8))
-to root
-rather than to the user sending the mail.
-.pp
-A middle ground is to set the
-.b RunAsUser
-option.
-This causes
-.i sendmail
-to become the indicated user as soon as it has done the startup
-that requires root privileges
-(primarily, opening the
-.sm SMTP
-socket).
-If you use
-.b RunAsUser ,
-the queue directory
-(normally
-.i /var/spool/mqueue )
-should be owned by that user,
-and all files and databases
-(including user
-.i \&.forward
-files,
-alias files,
-:include: files,
-and external databases)
-must be readable by that user.
-Also, since sendmail will not be able to change it's uid,
-delivery to programs or files will be marked as unsafe,
-e.g., undeliverable,
-in
-.i \&.forward ,
-aliases,
-and :include: files.
-Administrators can override this by setting the
-.b DontBlameSendmail
-option to the setting
-.b NonRootSafeAddr .
-.b RunAsUser
-is probably best suited for firewall configurations
-that don't have regular user logins.
-If the option is used on a system which performs local delivery,
-then the local delivery agent must have the proper permissions
-(i.e., usually set-user-ID root)
-since it will be invoked by the
-.b RunAsUser ,
-not by root.
-.sh 3 "Turning off security checks"
-.pp
-.i Sendmail
-is very particular about the modes of files that it reads or writes.
-For example, by default it will refuse to read most files
-that are group writable
-on the grounds that they might have been tampered with
-by someone other than the owner;
-it will even refuse to read files in group writable directories.
-Also, sendmail will refuse to create a new aliases database in an
-unsafe directory. You can get around this by manually creating the
-database file as a trusted user ahead of time and then rebuilding the
-aliases database with
-.b newaliases .
-.pp
-If you are
-.i quite
-sure that your configuration is safe and you want
-.i sendmail
-to avoid these security checks,
-you can turn off certain checks using the
-.b DontBlameSendmail
-option.
-This option takes one or more names that disable checks.
-In the descriptions that follow,
-.q "unsafe directory"
-means a directory that is writable by anyone other than the owner.
-The values are:
-.nr ii 0.5i
-.ip Safe
-No special handling.
-.ip AssumeSafeChown
-Assume that the
-.i chown
-system call is restricted to root.
-Since some versions of UNIX permit regular users
-to give away their files to other users on some filesystems,
-.i sendmail
-often cannot assume that a given file was created by the owner,
-particularly when it is in a writable directory.
-You can set this flag if you know that file giveaway is restricted
-on your system.
-.ip ClassFileInUnsafeDirPath
-When reading class files (using the
-.b F
-line in the configuration file),
-allow files that are in unsafe directories.
-.ip DontWarnForwardFileInUnsafeDirPath
-Prevent logging of
-unsafe directory path warnings
-for non-existent forward files.
-.ip ErrorHeaderInUnsafeDirPath
-Allow the file named in the
-.b ErrorHeader
-option to be in an unsafe directory.
-.ip FileDeliveryToHardLink
-Allow delivery to files that are hard links.
-.ip FileDeliveryToSymLink
-Allow delivery to files that are symbolic links.
-.ip ForwardFileInGroupWritableDirPath
-Allow
-.i \&.forward
-files in group writable directories.
-.ip ForwardFileInUnsafeDirPath
-Allow
-.i \&.forward
-files in unsafe directories.
-.ip ForwardFileInUnsafeDirPathSafe
-Allow a
-.i \&.forward
-file that is in an unsafe directory to include references
-to program and files.
-.ip GroupReadableKeyFile
-Accept a group-readable key file for STARTTLS.
-.ip GroupReadableSASLDBFile
-Accept a group-readable Cyrus SASL password file.
-.ip GroupWritableAliasFile
-Allow group-writable alias files.
-.ip GroupWritableDirPathSafe
-Change the definition of
-.q "unsafe directory"
-to consider group-writable directories to be safe.
-World-writable directories are always unsafe.
-.ip GroupWritableForwardFile
-Allow group writable
-.i \&.forward
-files.
-.ip GroupWritableForwardFileSafe
-Accept group-writable
-.i \&.forward
-files as safe for program and file delivery.
-.ip GroupWritableIncludeFile
-Allow group wriable
-.i :include:
-files.
-.ip GroupWritableIncludeFileSafe
-Accept group-writable
-.i :include:
-files as safe for program and file delivery.
-.ip GroupWritableSASLDBFile
-Accept a group-writable Cyrus SASL password file.
-.ip HelpFileInUnsafeDirPath
-Allow the file named in the
-.b HelpFile
-option to be in an unsafe directory.
-.ip IncludeFileInGroupWritableDirPath
-Allow
-.i :include:
-files in group writable directories.
-.ip IncludeFileInUnsafeDirPath
-Allow
-.i :include:
-files in unsafe directories.
-.ip IncludeFileInUnsafeDirPathSafe
-Allow a
-.i :include:
-file that is in an unsafe directory to include references
-to program and files.
-.ip InsufficientEntropy
-Try to use STARTTLS even if the PRNG for OpenSSL is not properly seeded
-despite the security problems.
-.ip LinkedAliasFileInWritableDir
-Allow an alias file that is a link in a writable directory.
-.ip LinkedClassFileInWritableDir
-Allow class files that are links in writable directories.
-.ip LinkedForwardFileInWritableDir
-Allow
-.i \&.forward
-files that are links in writable directories.
-.ip LinkedIncludeFileInWritableDir
-Allow
-.i :include:
-files that are links in writable directories.
-.ip LinkedMapInWritableDir
-Allow map files that are links in writable directories.
-This includes alias database files.
-.ip LinkedServiceSwitchFileInWritableDir
-Allow the service switch file to be a link
-even if the directory is writable.
-.ip MapInUnsafeDirPath
-Allow maps (e.g.,
-.i hash ,
-.i btree ,
-and
-.i dbm
-files)
-in unsafe directories.
-This includes alias database files.
-.ip NonRootSafeAddr
-Do not mark file and program deliveries as unsafe
-if sendmail is not running with root privileges.
-.ip RunProgramInUnsafeDirPath
-Run programs that are in writable directories without logging a warning.
-.ip RunWritableProgram
-Run programs that are group- or world-writable without logging a warning.
-.ip TrustStickyBit
-Allow group or world writable directories
-if the sticky bit is set on the directory.
-Do not set this on systems which do not honor
-the sticky bit on directories.
-.ip WorldWritableAliasFile
-Accept world-writable alias files.
-.ip WorldWritableForwardfile
-Allow world writable
-.i \&.forward
-files.
-.ip WorldWritableIncludefile
-Allow world wriable
-.i :include:
-files.
-.ip WriteMapToHardLink
-Allow writes to maps that are hard links.
-.ip WriteMapToSymLink
-Allow writes to maps that are symbolic links.
-.ip WriteStatsToHardLink
-Allow the status file to be a hard link.
-.ip WriteStatsToSymLink
-Allow the status file to be a symbolic link.
-.sh 2 "Connection Caching"
-.pp
-When processing the queue,
-.i sendmail
-will try to keep the last few open connections open
-to avoid startup and shutdown costs.
-This only applies to IPC connections.
-.pp
-When trying to open a connection
-the cache is first searched.
-If an open connection is found, it is probed to see if it is still active
-by sending a
-.sm RSET
-command.
-It is not an error if this fails;
-instead, the connection is closed and reopened.
-.pp
-Two parameters control the connection cache.
-The
-.b ConnectionCacheSize
-(\c
-.b k )
-option defines the number of simultaneous open connections
-that will be permitted.
-If it is set to zero,
-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
-.i sendmail
-will use during queue runs.
-Never set this higher than 4.
-.pp
-The
-.b ConnectionCacheTimeout
-(\c
-.b K )
-option specifies the maximum time that any cached connection
-will be permitted to idle.
-When the idle time exceeds this value
-the connection is closed.
-This number should be small
-(under ten minutes)
-to prevent you from grabbing too many resources
-from other hosts.
-The default is five minutes.
-.sh 2 "Name Server Access"
-.pp
-Control of host address lookups is set by the
-.b hosts
-service entry in your service switch file.
-If you are on a system that has built-in service switch support
-(e.g., Ultrix, Solaris, or DEC OSF/1)
-then your system is probably configured properly already.
-Otherwise,
-.i sendmail
-will consult the file
-.b /etc/mail/service.switch ,
-which should be created.
-.i Sendmail
-only uses two entries:
-.b hosts
-and
-.b aliases ,
-although system routines may use other services
-(notably the
-.b passwd
-service for user name lookups by
-.i getpwname ).
-.pp
-However, some systems (such as SunOS 4.X)
-will do DNS lookups
-regardless of the setting of the service switch entry.
-In particular, the system routine
-.i gethostbyname (3)
-is used to look up host names,
-and many vendor versions try some combination of DNS, NIS,
-and file lookup in /etc/hosts
-without consulting a service switch.
-.i Sendmail
-makes no attempt to work around this problem,
-and the DNS lookup will be done anyway.
-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.
-If the
-.b hosts
-switch entry has the service
-.q dns
-listed somewhere in the list,
-.i sendmail
-will interpret this to mean a temporary failure
-and will queue the mail for later processing;
-otherwise, it ignores the name server data.
-.pp
-The same technique is used to decide whether to do MX lookups.
-If you want MX support, you
-.i must
-have
-.q dns
-listed as a service in the
-.b hosts
-switch entry.
-.pp
-The
-.b ResolverOptions
-(\c
-.b I )
-option allows you to tweak name server options.
-The command line takes a series of flags as documented in
-.i resolver (3)
-(with the leading
-.q RES_
-deleted).
-Each can be preceded by an optional `+' or `\(mi'.
-For example, the line
-.(b
-O ResolverOptions=+AAONLY \(miDNSRCH
-.)b
-turns on the AAONLY (accept authoritative answers only)
-and turns off the DNSRCH (search the domain path) options.
-Most resolver libraries default DNSRCH, DEFNAMES, and RECURSE
-flags on and all others off.
-If NETINET6 is enabled, most libraries default to USE_INET6 as well.
-You can also include
-.q HasWildcardMX
-to specify that there is a wildcard MX record matching your domain;
-this turns off MX matching when canonifying names,
-which can lead to inappropriate canonifications.
-Use
-.q WorkAroundBrokenAAAA
-when faced with a broken nameserver that returns SERVFAIL
-(a temporary failure)
-on T_AAAA (IPv6) lookups
-during hostname canonification.
-Notice: it might be necessary to apply the same (or similar) options to
-.i submit.cf
-too.
-.pp
-Version level 1 configurations (see the section about
-Configuration Version Level)
-turn DNSRCH and DEFNAMES off when doing delivery lookups,
-but leave them on everywhere else.
-Version 8 of
-.i sendmail
-ignores them when doing canonification lookups
-(that is, when using $[ ... $]),
-and always does the search.
-If you don't want to do automatic name extension,
-don't call $[ ... $].
-.pp
-The search rules for $[ ... $] are somewhat different than usual.
-If the name being looked up
-has at least one dot, it always tries the unmodified name first.
-If that fails, it tries the reduced search path,
-and lastly tries the unmodified name
-(but only for names without a dot,
-since names with a dot have already been tried).
-This allows names such as
-``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.
-.pp
-To completely turn off all name server access
-on systems without service switch support
-(such as SunOS 4.X)
-you will have to recompile with
-\-DNAMED_BIND=0
-and remove \-lresolv from the list of libraries to be searched
-when linking.
-.sh 2 "Moving the Per-User Forward Files"
-.pp
-Some sites mount each user's home directory
-from a local disk on their workstation,
-so that local access is fast.
-However, the result is that .forward file lookups
-from a central mail server are slow.
-In some cases,
-mail can even be delivered on machines inappropriately
-because of a file server being down.
-The performance can be especially bad if you run the automounter.
-.pp
-The
-.b ForwardPath
-(\c
-.b J )
-option allows you to set a path of forward files.
-For example, the config file line
-.(b
-O ForwardPath=/var/forward/$u:$z/.forward.$w
-.)b
-would first look for a file with the same name as the user's login
-in /var/forward;
-if that is not found (or is inaccessible)
-the file
-``.forward.\c
-.i machinename ''
-in the user's home directory is searched.
-A truly perverse site could also search by sender
-by using $r, $s, or $f.
-.pp
-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 0644.
-Note that you must use the
-ForwardFileInUnsafeDirPath and
-ForwardFileInUnsafeDirPathSafe
-flags with the
-.b DontBlameSendmail
-option to allow forward files in a world writable directory.
-This might also be used as a denial of service attack
-(users could create forward files for other users);
-a better approach might be to create
-/var/forward
-mode 0755
-and create empty files for each user,
-owned by that user,
-mode 0644.
-If you do this, you don't have to set the DontBlameSendmail options
-indicated above.
-.sh 2 "Free Space"
-.pp
-On systems that have one of the system calls in the
-.i statfs (2)
-family
-(including
-.i statvfs
-and
-.i ustat ),
-you can specify a minimum number of free blocks on the queue filesystem
-using the
-.b MinFreeBlocks
-(\c
-.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.
-.sh 2 "Maximum Message Size"
-.pp
-To avoid overflowing your system with a large message,
-the
-.b MaxMessageSize
-option can be set to set an absolute limit
-on the size of any one message.
-This will be advertised in the ESMTP dialogue
-and checked during message collection.
-.sh 2 "Privacy Flags"
-.pp
-The
-.b PrivacyOptions
-(\c
-.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
-or adding extra headers to indicate possible spoof attempts.
-.pp
-The option takes a series of flag names;
-the final privacy is the inclusive or of those flags.
-For example:
-.(b
-O PrivacyOptions=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 flags are detailed in section
-.\"XREF
-5.6.
-.sh 2 "Send to Me Too"
-.pp
-Beginning with version 8.10,
-.i sendmail
-includes by default the (envelope) sender in any list expansions.
-For example, if
-.q matt
-sends to a list that contains
-.q matt
-as one of the members he will get a copy of the message.
-If the
-.b MeToo
-option is set to
-.sm FALSE
-(in the configuration file or via the command line),
-this behavior is changed, i.e.,
-the (envelope) sender is excluded in list expansions.
-.sh 1 "THE WHOLE SCOOP ON THE CONFIGURATION FILE"
-.pp
-This section describes the configuration file
-in detail.
-.pp
-There is one point that should be made clear immediately:
-the syntax of the configuration file
-is designed to be reasonably easy to parse,
-since this is done every time
-.i sendmail
-starts up,
-rather than easy for a human to read or write.
-The configuration file should be generated via the method described in
-.b cf/README ,
-it should not be edited directly unless someone is familiar
-with the internals of the syntax described here and it is
-not possible to achieve the desired result via the default method.
-.pp
-The configuration file is organized as a series of lines,
-each of which begins with a single character
-defining the semantics for the rest of the line.
-Lines beginning with a space or a tab
-are continuation lines
-(although the semantics are not well defined in many places).
-Blank lines and lines beginning with a sharp symbol
-(`#')
-are comments.
-.sh 2 "R and S \*- Rewriting Rules"
-.pp
-The core of address parsing
-are the rewriting rules.
-These are an ordered production system.
-.i Sendmail
-scans through the set of rewriting rules
-looking for a match on the left hand side
-(LHS)
-of the rule.
-When a rule matches,
-the address is replaced by the right hand side
-(RHS)
-of the rule.
-.pp
-There are several sets of rewriting rules.
-Some of the rewriting sets are used internally
-and must have specific semantics.
-Other rewriting sets
-do not have specifically assigned semantics,
-and may be referenced by the mailer definitions
-or by other rewriting sets.
-.pp
-The syntax of these two commands are:
-.(b F
-.b S \c
-.i n
-.)b
-Sets the current ruleset being collected to
-.i n .
-If you begin a ruleset more than once
-it appends to the old definition.
-.(b F
-.b R \c
-.i lhs
-.i rhs
-.i comments
-.)b
-The
-fields must be separated
-by at least one tab character;
-there may be embedded spaces
-in the fields.
-The
-.i lhs
-is a pattern that is applied to the input.
-If it matches,
-the input is rewritten to the
-.i rhs .
-The
-.i comments
-are ignored.
-.pp
-Macro expansions of the form
-.b $ \c
-.i x
-are performed when the configuration file is read.
-A literal
-.b $
-can be included using
-.b $$ .
-Expansions of the form
-.b $& \c
-.i x
-are performed at run time using a somewhat less general algorithm.
-This is intended only for referencing internally defined macros
-such as
-.b $h
-that are changed at runtime.
-.sh 3 "The left hand side"
-.pp
-The left hand side of rewriting rules contains a pattern.
-Normal words are simply matched directly.
-Metasyntax is introduced using a dollar sign.
-The metasymbols are:
-.(b
-.ta \w'\fB$=\fP\fIx\fP 'u
-\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 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 $ \c
-.i n
-for replacement on the right hand side,
-where
-.i n
-is the index in the LHS.
-For example,
-if the LHS:
-.(b
-$\-:$+
-.)b
-is applied to the input:
-.(b
-UCBARPA:eric
-.)b
-the rule will match, and the values passed to the RHS will be:
-.(b
-.ta 4n
-$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 3 "The right hand side"
-.pp
-When the left hand side of a rewriting rule matches,
-the input is deleted and replaced by the right hand side.
-Tokens are copied directly from the RHS
-unless they begin with a dollar sign.
-Metasymbols are:
-.(b
-.ta \w'$#mailer\0\0\0'u
-\fB$\fP\fIn\fP Substitute indefinite token \fIn\fP from LHS
-\fB$[\fP\fIname\fP\fB$]\fP Canonicalize \fIname\fP
-\fB$(\fP\fImap key\fP \fB$@\fP\fIarguments\fP \fB$:\fP\fIdefault\fP \fB$)\fP
- Generalized keyed mapping function
-\fB$>\fP\fIn\fP \*(lqCall\*(rq ruleset \fIn\fP
-\fB$#\fP\fImailer\fP Resolve to \fImailer\fP
-\fB$@\fP\fIhost\fP Specify \fIhost\fP
-\fB$:\fP\fIuser\fP Specify \fIuser\fP
-.)b
-.pp
-The
-.b $ \c
-.i n
-syntax substitutes the corresponding value from a
-.b $+ ,
-.b $\- ,
-.b $* ,
-.b $= ,
-or
-.b $~
-match on the LHS.
-It may be used anywhere.
-.pp
-A host name enclosed between
-.b $[
-and
-.b $]
-is looked up in the host database(s)
-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 $[ftp$]
-might become
-.q ftp.CS.Berkeley.EDU
-and
-.q $[[128.32.130.2]$]
-would become
-.q vangogh.CS.Berkeley.EDU.
-.i Sendmail
-recognizes its numeric IP address
-without calling the name server
-and replaces it with its canonical name.
-.pp
-The
-.b $(
-\&...
-.b $)
-syntax is a more general form of lookup;
-it uses a named map instead of an implicit map.
-If no lookup is found, the indicated
-.i default
-is inserted;
-if no default is specified and no lookup matches,
-the value is left unchanged.
-The
-.i arguments
-are passed to the map for possible use.
-.pp
-The
-.b $> \c
-.i n
-syntax
-causes the remainder of the line to be substituted as usual
-and then passed as the argument to ruleset
-.i n .
-The final value of ruleset
-.i n
-then becomes
-the substitution for this rule.
-The
-.b $>
-syntax expands everything after the ruleset name
-to the end of the replacement string
-and then passes that as the initial input to the ruleset.
-Recursive calls are allowed.
-For example,
-.(b
-$>0 $>3 $1
-.)b
-expands $1, passes that to ruleset 3, and then passes the result
-of ruleset 3 to ruleset 0.
-.pp
-The
-.b $#
-syntax should
-.i only
-be used in ruleset zero,
-a subroutine of ruleset zero,
-or rulesets that return decisions (e.g., check_rcpt).
-It causes evaluation of the ruleset to terminate immediately,
-and signals to
-.i sendmail
-that the address has completely resolved.
-The complete syntax for ruleset 0 is:
-.(b
-\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
-the host part may be omitted\**.
-.(f
-\**You may want to use it for special
-.q "per user"
-extensions.
-For example, in the address
-.q jgm+foo@CMU.EDU ;
-the
-.q +foo
-part is not part of the user name,
-and is passed to the local mailer for local use.
-.)f
-The
-.i mailer
-must be a single word,
-but the
-.i host
-and
-.i user
-may be multi-part.
-If the
-.i mailer
-is the built-in 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).
-The
-.i user
-is later rewritten by the mailer-specific envelope rewriting set
-and assigned to the
-.b $u
-macro.
-As a special case, if the mailer specified has the
-.b F=@
-flag specified
-and the first character of the
-.b $:
-value is
-.q @ ,
-the
-.q @
-is stripped off, and a flag is set in the address descriptor
-that causes sendmail to not do ruleset 5 processing.
-.pp
-Normally, a rule that matches is retried,
-that is,
-the rule loops until it fails.
-A RHS may also be preceded by a
-.b $@
-or a
-.b $:
-to change this behavior.
-A
-.b $@
-prefix causes the ruleset to return with the remainder of the RHS
-as the value.
-A
-.b $:
-prefix causes the rule to terminate immediately,
-but the ruleset to continue;
-this can be used to avoid continued application of a rule.
-The prefix is stripped before continuing.
-.pp
-The
-.b $@
-and
-.b $:
-prefixes may precede a
-.b $>
-spec;
-for example:
-.(b
-.ta 8n
-R$+ $: $>7 $1
-.)b
-matches anything,
-passes that to ruleset seven,
-and continues;
-the
-.b $:
-is necessary to avoid an infinite loop.
-.pp
-Substitution occurs in the order described,
-that is,
-parameters from the LHS are substituted,
-hostnames are canonicalized,
-.q subroutines
-are called,
-and finally
-.b $# ,
-.b $@ ,
-and
-.b $:
-are processed.
-.sh 3 "Semantics of rewriting rule sets"
-.pp
-There are six rewriting sets
-that have specific semantics.
-Five of these are related as depicted by figure 1.
-.(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 1 \*- 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
-Ruleset three
-is applied by
-.i sendmail
-before doing anything with any address.
-.pp
-If no
-.q @
-sign is specified,
-then the
-host-domain-spec
-.i may
-be appended (box
-.q D
-in Figure 1)
-from the
-sender address
-(if the
-.b C
-flag is set in the mailer definition
-corresponding to the
-.i sending
-mailer).
-.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, address}"
-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.
-.pp
-In addition,
-ruleset 5 is applied to all local addresses
-(specifically, those that resolve to a mailer with the `F=5'
-flag set)
-that do not have aliases.
-This allows a last minute hook for local names.
-.sh 3 "Ruleset hooks"
-.pp
-A few extra rulesets are defined as
-.q hooks
-that can be defined to get special features.
-They are all named rulesets.
-The
-.q check_*
-forms all give accept/reject status;
-falling off the end or returning normally is an accept,
-and resolving to
-.b $#error
-is a reject.
-Many of these can also resolve to the special mailer name
-.b $#discard ;
-this accepts the message as though it were successful
-but then discards it without delivery.
-Note,
-this mailer cannot be chosen as a mailer in ruleset 0.
-Note also that all
-.q check_*
-rulesets have to deal with temporary failures, especially for map lookups,
-themselves, i.e., they should return a temporary error code
-or at least they should make a proper decision in those cases.
-.sh 4 "check_relay"
-.pp
-The
-.i check_relay
-ruleset is called after a connection is accepted by the daemon.
-It is not called when sendmail is started using the
-.b \-bs
-option.
-It is passed
-.(b
-client.host.name $| client.host.address
-.)b
-where
-.b $|
-is a metacharacter separating the two parts.
-This ruleset can reject connections from various locations.
-Note that it only checks the connecting SMTP client IP address and hostname.
-It does not check for third party message relaying.
-The
-.i check_rcpt
-ruleset discussed below usually does third party message relay checking.
-.sh 4 "check_mail"
-.pp
-The
-.i check_mail
-ruleset is passed the user name parameter of the
-.sm "SMTP MAIL"
-command.
-It can accept or reject the address.
-.sh 4 "check_rcpt"
-.pp
-The
-.i check_rcpt
-ruleset is passed the user name parameter of the
-.sm "SMTP RCPT"
-command.
-It can accept or reject the address.
-.sh 4 "check_data"
-.pp
-The
-.i check_data
-ruleset is called after the
-.sm "SMTP DATA"
-command, its parameter is the number of recipients.
-It can accept or reject the command.
-.sh 4 "check_compat"
-.pp
-The
-.i check_compat
-ruleset is passed
-.(b
-sender-address $| recipient-address
-.)b
-where
-.b $|
-is a metacharacter separating the addresses.
-It can accept or reject mail transfer between these two addresses
-much like the
-.i checkcompat()
-function.
-.sh 4 "check_eoh"
-.pp
-The
-.i check_eoh
-ruleset is passed
-.(b
-number-of-headers $| size-of-headers
-.)b
-where
-.b $|
-is a metacharacter separating the numbers.
-These numbers can be used for size comparisons with the
-.b arith
-map.
-The ruleset is triggered after
-all of the headers have been read.
-It can be used to correlate information gathered
-from those headers using the
-.b macro
-storage map.
-One possible use is to check for a missing header.
-For example:
-.(b
-.ta 1.5i
-Kstorage macro
-HMessage-Id: $>CheckMessageId
-
-SCheckMessageId
-# Record the presence of the header
-R$* $: $(storage {MessageIdCheck} $@ OK $) $1
-R< $+ @ $+ > $@ OK
-R$* $#error $: 553 Header Error
-
-Scheck_eoh
-# Check the macro
-R$* $: < $&{MessageIdCheck} >
-# Clear the macro for the next message
-R$* $: $(storage {MessageIdCheck} $) $1
-# Has a Message-Id: header
-R< $+ > $@ OK
-# Allow missing Message-Id: from local mail
-R$* $: < $&{client_name} >
-R< > $@ OK
-R< $=w > $@ OK
-# Otherwise, reject the mail
-R$* $#error $: 553 Header Error
-.)b
-Keep in mind the Message-Id: header is not a required header and
-is not a guaranteed spam indicator.
-This ruleset is an example and
-should probably not be used in production.
-.sh 4 "check_etrn"
-.pp
-The
-.i check_etrn
-ruleset is passed the parameter of the
-.sm "SMTP ETRN"
-command.
-It can accept or reject the command.
-.sh 4 "check_expn"
-.pp
-The
-.i check_expn
-ruleset is passed the user name parameter of the
-.sm "SMTP EXPN"
-command.
-It can accept or reject the address.
-.sh 4 "check_vrfy"
-.pp
-The
-.i check_vrfy
-ruleset is passed the user name parameter of the
-.sm "SMTP VRFY"
-command.
-It can accept or reject the command.
-.sh 4 "trust_auth"
-.pp
-The
-.i trust_auth
-ruleset is passed the AUTH= parameter of the
-.sm "SMTP MAIL"
-command.
-It is used to determine whether this value should be
-trusted. In order to make this decision, the ruleset
-may make use of the various
-.b ${auth_*}
-macros.
-If the ruleset does resolve to the
-.q error
-mailer the AUTH= parameter is not trusted and hence
-not passed on to the next relay.
-.sh 4 "tls_client"
-.pp
-The
-.i tls_client
-ruleset is called when sendmail acts as server, after a STARTTLS command
-has been issued, and from
-.i check_mail.
-The parameter is the value of
-.b ${verify}
-and STARTTLS or MAIL, respectively.
-If the ruleset does resolve to the
-.q error
-mailer, the appropriate error code is returned to the client.
-.sh 4 "tls_server"
-.pp
-The
-.i tls_server
-ruleset is called when sendmail acts as client after a STARTTLS command
-(should) have been issued.
-The parameter is the value of
-.b ${verify} .
-If the ruleset does resolve to the
-.q error
-mailer, the connection is aborted
-(treated as non-deliverable with a permanent or temporary error).
-.sh 4 "tls_rcpt"
-.pp
-The
-.i tls_rcpt
-ruleset is called each time before a RCPT TO command is sent.
-The parameter is the current recipient.
-If the ruleset does resolve to the
-.q error
-mailer, the RCPT TO command is suppressed
-(treated as non-deliverable with a permanent or temporary error).
-This ruleset allows to require encryption or verification of
-the recipient's MTA even if the mail is somehow redirected
-to another host.
-For example, sending mail to
-.i luke@endmail.org
-may get redirected to a host named
-.i death.star
-and hence the tls_server ruleset won't apply.
-By introducing per recipient restrictions such attacks
-(e.g., via DNS spoofing) can be made impossible.
-See
-.i cf/README
-how this ruleset can be used.
-.sh 4 "srv_features"
-.pp
-The
-.i srv_features
-ruleset is called with the connecting client's host name
-when a client connects to sendmail.
-This ruleset should return
-.b $#
-followed by a list of options (single characters
-delimited by white space).
-If the return value starts with anything else it is silently ignored.
-Generally upper case characters turn off a feature
-while lower case characters turn it on.
-The option `S' causes the server not to offer STARTTLS.
-This is useful to interact with MTAs/MUAs that have broken
-STARTTLS implementations by simply not offering it.
-`V' turns off the request for a client certificate
-during the TLS handshake.
-Option `A' and `P' suppress SMTP AUTH and PIPELINING, respectively.
-The ruleset may return `$#temp' to indicate that there is a temporary
-problem determining the correct features, e.g., if a map is unavailable.
-In that case, the SMTP server issues a temporary failure and does not
-accept email.
-.sh 4 "try_tls"
-.pp
-The
-.i try_tls
-ruleset is called when sendmail connects to another MTA.
-If the ruleset does resolve to the
-.q error
-mailer, sendmail does not try STARTTLS even if it is offered.
-This is useful to interact with MTAs that have broken
-STARTTLS implementations by simply not using it.
-.sh 4 "authinfo"
-.pp
-The
-.i authinfo
-ruleset is called when sendmail tries to authenticate to another MTA.
-It should return
-.b $#
-followed by a list of tokens that are used for SMTP AUTH.
-If the return value starts with anything else it is silently ignored.
-Each token is a tagged string of the form:
-"TDstring"
-(including the quotes), where
-.(b
-.ta 9n
-T Tag which describes the item
-D Delimiter: ':' simple text follows
- '=' string is base64 encoded
-string Value of the item
-.)b
-Valid values for the tag are:
-.(b
-.ta 9n
-U user (authorization) id
-I authentication id
-P password
-R realm
-M list of mechanisms delimited by spaces
-.)b
-If this ruleset is defined, the option
-.b DefaultAuthInfo
-is ignored (even if the ruleset does not return a ``useful'' result).
-.sh 4 "queuegroup"
-.pp
-The
-.i queuegroup
-ruleset is used to map an address to a queue group name.
-It should return
-.b $#
-followed by the name of a queue group.
-If the return value starts with anything else it is silently ignored.
-See the section about Queue Groups and Queue Directories
-for further information.
-.sh 3 "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 if not delivering via a named socket;
-this looks the name up in DNS to find alternate delivery sites.
-.pp
-The host name can also be provided as a dotted quad
-or an IPv6 address in square brackets;
-for example:
-.(b
-[128.32.149.78]
-.)b
-or
-.(b
-[IPv6:2002:c0a8:51d2::23f4]
-.)b
-This causes direct conversion of the numeric value
-to an 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.:
-.i
-This is intended only for situations where you have a network firewall
-or other host that will do special processing for all your mail,
-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.
-.r
-.sh 2 "D \*- Define Macro"
-.pp
-Macros are named with a single character
-or with a word in {braces}.
-The names ``x'' and ``{x}'' denote the same macro
-for every single character ``x''.
-Single character names may be selected from the entire ASCII set,
-but user-defined macros
-should be selected from the set of upper case letters only.
-Lower case letters
-and special symbols
-are used internally.
-Long names beginning with a lower case letter or a punctuation character
-are reserved for use by sendmail,
-so user-defined long macro names should begin with an upper case letter.
-.pp
-The syntax for macro definitions is:
-.(b F
-.b D \c
-.i x\|val
-.)b
-where
-.i x
-is the name of the macro
-(which may be a single character
-or a word in braces)
-and
-.i val
-is the value it should have.
-There should be no spaces given
-that do not actually belong in the macro value.
-.pp
-Macros are interpolated
-using the construct
-.b $ \c
-.i x ,
-where
-.i x
-is the name of the macro to be interpolated.
-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
-$?x text1 $| text2 $.
-.)b
-This interpolates
-.i text1
-if the macro
-.b $x
-is set and non-null,
-and
-.i text2
-otherwise.
-The
-.q else
-(\c
-.b $| )
-clause may be omitted.
-.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
-The origination date in RFC 822 format.
-This is extracted from the Date: line.
-.ip $b
-The current date in RFC 822 format.
-.ip $c
-The hop count.
-This is a count of the number of Received: lines
-plus the value of the
-.b \-h
-command line flag.
-.ip $d
-The current date in UNIX (ctime) format.
-.ip $e\(dg
-(Obsolete; use SmtpGreetingMessage option instead.)
-The SMTP entry message.
-This is printed out when SMTP starts up.
-The first word must be the
-.b $j
-macro as specified by RFC 821.
-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
-The envelope sender (from) address.
-.ip $g
-The sender address relative to the recipient.
-For example, if
-.b $f
-is
-.q foo ,
-.b $g
-will be
-.q host!foo ,
-.q foo@host.domain ,
-or whatever is appropriate for the receiving mailer.
-.ip $h
-The recipient host.
-This is set in ruleset 0 from the $@ field of a parsed address.
-.ip $i
-The queue id,
-e.g.,
-.q f344MXxp018717 .
-.ip $j\(dd
-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
-The UUCP node name (from the uname system call).
-.ip $l\(dg
-(Obsolete; use UnixFromLine option instead.)
-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
-The domain part of the \fIgethostname\fP return value.
-Under normal circumstances,
-.b $j
-is equivalent to
-.b $w.$m .
-.ip $n\(dg
-The name of the daemon (for error messages).
-Defaults to
-.q MAILER-DAEMON .
-.ip $o\(dg
-(Obsolete: use OperatorChars option instead.)
-The set of \*(lqoperators\*(rq in addresses.
-A list of characters
-which will be considered tokens
-and which will separate tokens
-when doing parsing.
-For example, if
-.q @
-were in the
-.b $o
-macro, then the input
-.q a@b
-would be scanned as three tokens:
-.q a,
-.q @,
-and
-.q b.
-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
-Sendmail's process id.
-.ip $q\(dg
-Default format of sender address.
-The
-.b $q
-macro specifies how an address should appear in a message
-when it is defaulted.
-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
-Eric Allman <eric@CS.Berkeley.EDU>
-eric@CS.Berkeley.EDU (Eric Allman)
-.)b
-.i Sendmail
-properly quotes names that have special characters
-if the first form is used.
-.ip $r
-Protocol used to receive the message.
-Set from the
-.b \-p
-command line flag or by the SMTP server code.
-.ip $s
-Sender's host name.
-Set from the
-.b \-p
-command line flag or by the SMTP server code.
-.ip $t
-A numeric representation of the current time.
-.ip $u
-The recipient user.
-.ip $v
-The version number of the
-.i sendmail
-binary.
-.ip $w\(dd
-The hostname of this site.
-This is the root name of this host (but see below for caveats).
-.ip $x
-The full name of the sender.
-.ip $z
-The home directory of the recipient.
-.ip $_
-The validated sender address.
-See also
-.b ${client_resolve} .
-.ip ${addr_type}
-The type of the address which is currently being rewritten.
-This macro contains up to three characters, the first
-is either `e' or `h' for envelope/header address,
-the second is a space,
-and the third is either `s' or `r' for sender/recipient address.
-Notice: for header addresses no distinction is currently made
-between sender and recipient addresses, i.e., the macro contains
-only `h'.
-.ip ${alg_bits}
-The maximum keylength (in bits) of the symmetric encryption algorithm
-used for a TLS connection.
-This may be less than the effective keylength,
-which is stored in
-.b ${cipher_bits} ,
-for ``export controlled'' algorithms.
-.ip ${auth_authen}
-The client's authentication credentials as determined by authentication
-(only set if successful).
-The format depends on the mechanism used, it might be just `user',
-or `user@realm', or something similar (SMTP AUTH only).
-.ip ${auth_author}
-The authorization identity, i.e. the AUTH= parameter of the
-.sm "SMTP MAIL"
-command if supplied.
-.ip ${auth_type}
-The mechanism used for SMTP authentication
-(only set if successful).
-.ip ${auth_ssf}
-The keylength (in bits) of the symmetric encryption algorithm
-used for the security layer of a SASL mechanism.
-.ip ${bodytype}
-The message body type
-(7BIT or 8BITMIME),
-as determined from the envelope.
-.ip ${cert_issuer}
-The DN (distinguished name) of the CA (certificate authority)
-that signed the presented certificate (the cert issuer)
-(STARTTLS only).
-.ip ${cert_md5}
-The MD5 hash of the presented certificate (STARTTLS only).
-.ip ${cert_subject}
-The DN of the presented certificate (called the cert subject)
-(STARTTLS only).
-.ip ${cipher}
-The cipher suite used for the connection, e.g., EDH-DSS-DES-CBC3-SHA,
-EDH-RSA-DES-CBC-SHA, DES-CBC-MD5, DES-CBC3-SHA
-(STARTTLS only).
-.ip ${cipher_bits}
-The effective keylength (in bits) of the symmetric encryption algorithm
-used for a TLS connection.
-.ip ${client_addr}
-The IP address of the SMTP client.
-IPv6 addresses are tagged with "IPv6:" before the address.
-Defined in the SMTP server only.
-.ip ${client_name}
-The host name of the SMTP client.
-This may be the client's bracketed IP address
-in the form [ nnn.nnn.nnn.nnn ] for IPv4
-and [ IPv6:nnnn:...:nnnn ] for IPv6
-if the client's
-IP address is not resolvable, or if it is resolvable
-but the IP address of the resolved hostname
-doesn't match the original IP address.
-Defined in the SMTP server only.
-See also
-.b ${client_resolve} .
-.ip ${client_port}
-The port number of the SMTP client.
-Defined in the SMTP server only.
-.ip ${client_resolve}
-Holds the result of the resolve call for
-.b ${client_name} .
-Possible values are:
-.(b
-.ta 10n
-OK resolved successfully
-FAIL permanent lookup failure
-FORGED forward lookup doesn't match reverse lookup
-TEMP temporary lookup failure
-.)b
-Defined in the SMTP server only.
-.i sendmail
-performs a hostname lookup on the IP address of the connecting client.
-Next the IP addresses of that hostname are looked up.
-If the client IP address does not appear in that list,
-then the hostname is maybe forged.
-This is reflected as the value FORGED for
-.b ${client_resolve}
-and it also shows up in
-.b $_
-as "(may be forged)".
-.ip ${cn_issuer}
-The CN (common name) of the CA that signed the presented certificate
-(STARTTLS only).
-.ip ${cn_subject}
-The CN (common name) of the presented certificate
-(STARTTLS only).
-.ip ${currHeader}
-Header value as quoted string
-(possibly truncated to
-.b MAXNAME ).
-This macro is only available in header check rulesets.
-.ip ${daemon_addr}
-The IP address the daemon is listening on for connections.
-.ip ${daemon_family}
-The network family
-if the daemon is accepting network connections.
-Possible values include
-.q inet ,
-.q inet6 ,
-.q iso ,
-.q ns ,
-.q x.25
-.ip ${daemon_flags}
-The flags for the daemon as specified by the
-Modifier= part of
-.b DaemonPortOptions
-whereby the flags are separated from each other by spaces,
-and upper case flags are doubled.
-That is,
-Modifier=Ea
-will be represented as
-"EE a" in
-.b ${daemon_flags} ,
-which is required for testing the flags in rulesets.
-.ip ${daemon_info}
-Some information about a daemon as a text string.
-For example,
-.q SMTP+queueing@00:30:00 .
-.ip ${daemon_name}
-The name of the daemon from
-.b DaemonPortOptions
-Name= suboption.
-If this suboption is not set,
-"Daemon#",
-where # is the daemon number,
-is used.
-.ip ${daemon_port}
-The port the daemon is accepting connection on.
-Unless
-.b DaemonPortOptions
-is set, this will most likely be
-.q 25 .
-.ip ${deliveryMode}
-The current delivery mode sendmail is using.
-It is initially set to the value of the
-.b DeliveryMode
-option.
-.ip ${envid}
-The envelope id parameter (ENVID=) passed to sendmail as part of the envelope.
-.ip ${hdrlen}
-The length of the header value which is stored in
-${currHeader} (before possible truncation).
-If this value is greater than or equal to
-.b MAXNAME
-the header has been truncated.
-.ip ${hdr_name}
-The name of the header field for which the current header
-check ruleset has been called.
-This is useful for a default header check ruleset to get
-the name of the header;
-the macro is only available in header check rulesets.
-.ip ${if_addr}
-The IP address of the interface of an incoming connection
-unless it is in the loopback net.
-IPv6 addresses are tagged with "IPv6:" before the address.
-.ip ${if_addr_out}
-The IP address of the interface of an outgoing connection
-unless it is in the loopback net.
-IPv6 addresses are tagged with "IPv6:" before the address.
-.ip ${if_family}
-The IP family of the interface of an incoming connection
-unless it is in the loopback net.
-.ip ${if_family_out}
-The IP family of the interface of an outgoing connection
-unless it is in the loopback net.
-.ip ${if_name}
-The hostname associated with the interface of an incoming connection.
-This macro can be used for
-SmtpGreetingMessage and HReceived for virtual hosting.
-For example:
-.(b
-O SmtpGreetingMessage=$?{if_name}${if_name}$|$j$. MTA
-.)b
-.ip ${if_name_out}
-The name of the interface of an outgoing connection.
-.ip ${load_avg}
-The current load average.
-.ip ${mail_addr}
-The address part of the resolved triple of the address given for the
-.sm "SMTP MAIL"
-command.
-Defined in the SMTP server only.
-.ip ${mail_host}
-The host from the resolved triple of the address given for the
-.sm "SMTP MAIL"
-command.
-Defined in the SMTP server only.
-.ip ${mail_mailer}
-The mailer from the resolved triple of the address given for the
-.sm "SMTP MAIL"
-command.
-Defined in the SMTP server only.
-.ip ${msg_size}
-The value of the SIZE= parameter,
-i.e., usually the size of the message (in an ESMTP dialogue),
-before the message has been collected, thereafter
-the message size as computed by
-.i sendmail
-(and can be used in check_compat).
-.ip ${nrcpts}
-The number of validated recipients for a single message.
-Note: since recipient validation happens after
-.i check_rcpt
-has been called, the value in this ruleset
-is one less than what might be expected.
-.ip ${ntries}
-The number of delivery attempts.
-.ip ${opMode}
-The current operation mode (from the
-.b \-b
-flag).
-.ip ${queue_interval}
-The queue run interval given by the
-.b \-q
-flag.
-For example,
-.b \-q30m
-would set
-.b ${queue_interval}
-to
-.q 00:30:00 .
-.ip ${rcpt_addr}
-The address part of the resolved triple of the address given for the
-.sm "SMTP RCPT"
-command.
-Defined in the SMTP server only after a RCPT command.
-.ip ${rcpt_host}
-The host from the resolved triple of the address given for the
-.sm "SMTP RCPT"
-command.
-Defined in the SMTP server only after a RCPT command.
-.ip ${rcpt_mailer}
-The mailer from the resolved triple of the address given for the
-.sm "SMTP RCPT"
-command.
-Defined in the SMTP server only after a RCPT command.
-.ip ${server_addr}
-The address of the server of the current outgoing SMTP connection.
-For LMTP delivery the macro is set to the name of the mailer.
-.ip ${server_name}
-The name of the server of the current outgoing SMTP or LMTP connection.
-.ip ${tls_version}
-The TLS/SSL version used for the connection, e.g., TLSv1, SSLv3, SSLv2;
-defined after STARTTLS has been used.
-.ip ${verify}
-The result of the verification of the presented cert;
-only defined after STARTTLS has been used.
-Possible values are:
-.(b
-.ta 13n
-OK verification succeeded.
-NO no cert presented.
-NOT no cert requested.
-FAIL cert presented but could not be verified,
- e.g., the signing CA is missing.
-NONE STARTTLS has not been performed.
-TEMP temporary error occurred.
-PROTOCOL some protocol error occurred.
-SOFTWARE STARTTLS handshake failed,
- which is a fatal error for this session,
- the e-mail will be queued.
-.)b
-.pp
-There are three types of dates that can be used.
-The
-.b $a
-and
-.b $b
-macros are in RFC 822 format;
-.b $a
-is the time as extracted from the
-.q Date:
-line of the message
-(if there was one),
-and
-.b $b
-is the current date and time
-(used for postmarks).
-If no
-.q Date:
-line is found in the incoming message,
-.b $a
-is set to the current time also.
-The
-.b $d
-macro is equivalent to the
-.b $b
-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
-as originally determined;
-when mailing to a specific host
-the
-.b $g
-macro is set to the address of the sender
-.ul
-relative to the recipient.
-For example,
-if I send to
-.q bollard@matisse.CS.Berkeley.EDU
-from the machine
-.q vangogh.CS.Berkeley.EDU
-the
-.b $f
-macro will be
-.q eric
-and the
-.b $g
-macro will be
-.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
-.i sendmail .
-It can be defined in the
-.sm NAME
-environment variable.
-The third choice is the value of the
-.q Full-Name:
-line in the header if it exists,
-and the fourth choice is the comment field
-of a
-.q From:
-line.
-If all of these fail,
-and if the message is being originated locally,
-the full name is looked up in the
-.i /etc/passwd
-file.
-.pp
-When sending,
-the
-.b $h ,
-.b $u ,
-and
-.b $z
-macros get set to the host, user, and home directory
-(if local)
-of the recipient.
-The first two are set from the
-.b $@
-and
-.b $:
-part of the rewriting rules, respectively.
-.pp
-The
-.b $p
-and
-.b $t
-macros are used to create unique strings
-(e.g., for the
-.q Message-Id:
-field).
-The
-.b $i
-macro is set to the queue id on this host;
-if put into the timestamp line
-it can be extremely useful for tracking messages.
-The
-.b $v
-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.
-.pp
-The
-.b $c
-field is set to the
-.q "hop count,"
-i.e., the number of times this message has been processed.
-This can be determined
-by the
-.b \-h
-flag on the command line
-or by counting the timestamps in the message.
-.pp
-The
-.b $r
-and
-.b $s
-fields are set to the protocol used to communicate with
-.i sendmail
-and the sending hostname.
-They can be set together using the
-.b \-p
-command line flag or separately using the
-.b \-M
-or
-.b \-oM
-flags.
-.pp
-The
-.b $_
-is set to a validated sender host name.
-If the sender is running an RFC 1413 compliant IDENT server
-and the receiver has the IDENT protocol turned on,
-it will include the user name on that host.
-.pp
-The
-.b ${client_name} ,
-.b ${client_addr} ,
-and
-.b ${client_port}
-macros
-are set to the name, address, and port number of the SMTP client
-who is invoking
-.i sendmail
-as a server.
-These can be used in the
-.i check_*
-rulesets (using the
-.b $&
-deferred evaluation form, of course!).
-.sh 2 "C and F \*- Define Classes"
-.pp
-Classes of phrases may be defined
-to match on the left hand side of rewriting rules,
-where a
-.q phrase
-is a sequence of characters that does not contain space characters.
-For example
-a class of all local names for this site
-might be created
-so that attempts to send to oneself
-can be eliminated.
-These can either be defined directly in the configuration file
-or read in from another file.
-Classes are named as a single letter or a word in {braces}.
-Class names beginning with lower case letters
-and special characters are reserved for system use.
-Classes defined in config files may be given names
-from the set of upper case letters for short names
-or beginning with an upper case letter for long names.
-.pp
-The syntax is:
-.(b F
-.b C \c
-.i c\|phrase1
-.i phrase2...
-.br
-.b F \c
-.i c\|file
-.br
-.b F \c
-.i c\||program
-.br
-.b F \c
-.i c\|[mapkey]@mapclass:mapspec
-.)b
-The first form defines the class
-.i c
-to match any of the named words.
-If
-.i phrase1
-or
-.i phrase2
-is another class,
-e.g.,
-.i $=S ,
-the contents of class
-.i S
-are added to class
-.i c .
-It is permissible to split them among multiple lines;
-for example, the two forms:
-.(b
-CHmonet ucbmonet
-.)b
-and
-.(b
-CHmonet
-CHucbmonet
-.)b
-are equivalent.
-The ``F'' forms
-read the elements of the class
-.i c
-from the named
-.i file ,
-.i program ,
-or
-.i "map specification" .
-Each element should be listed on a separate line.
-To specify an optional file, use ``\-o'' between the class
-name and the file name, e.g.,
-.(b
-Fc \-o /path/to/file
-.)b
-If the file can't be used,
-.i sendmail
-will not complain but silently ignore it.
-The map form should be an optional map key, an at sign,
-and a map class followed by the specification for that map.
-Examples include:
-.(b
-F{VirtHosts}@ldap:\-k (&(objectClass=virtHosts)(host=*)) \-v host
-F{MyClass}foo@hash:/etc/mail/classes
-.)b
-will fill the class
-.b $={VirtHosts}
-from an LDAP map lookup and
-.b $={MyClass}
-from a hash database map lookup of the
-.b foo .
-There is also a built-in schema that can be accessed by only specifying:
-.(b
-F{\c
-.i ClassName }@LDAP
-.)b
-This will tell sendmail to use the default schema:
-.(b
-\-k (&(objectClass=sendmailMTAClass)
- (sendmailMTAClassName=\c
-.i ClassName )
- (|(sendmailMTACluster=${sendmailMTACluster})
- (sendmailMTAHost=$j)))
-\-v sendmailMTAClassValue
-.)b
-Note that the lookup is only done when sendmail is initially started.
-.pp
-Elements of classes can be accessed in rules using
-.b $=
-or
-.b $~ .
-The
-.b $~
-(match entries not in class)
-only matches a single word;
-multi-word entries in the class are ignored in this context.
-.pp
-Some classes have internal meaning to
-.i sendmail :
-.nr ii 0.5i
-.\".ip $=b
-.\"A set of Content-Types that will not have the newline character
-.\"translated to CR-LF before encoding into base64 MIME.
-.\"The class can have major times
-.\"(e.g.,
-.\".q image )
-.\"or full types
-.\"(such as
-.\".q application/octet-stream ).
-.\"The class is initialized with
-.\".q application/octet-stream ,
-.\".q image ,
-.\".q audio ,
-.\"and
-.\".q video .
-.ip $=e
-contains the Content-Transfer-Encodings that can be 8\(->7 bit encoded.
-It is predefined to contain
-.q 7bit ,
-.q 8bit ,
-and
-.q binary .
-.ip $=k
-set to be the same as
-.b $k ,
-that is, the UUCP node name.
-.ip $=m
-set to the set of domains by which this host is known,
-initially just
-.b $m .
-.ip $=n
-can be set to the set of MIME body types
-that can never be eight to seven bit encoded.
-It defaults to
-.q multipart/signed .
-Message types
-.q message/*
-and
-.q multipart/*
-are never encoded directly.
-Multipart messages are always handled recursively.
-The handling of message/* messages
-are controlled by class
-.b $=s .
-.ip $=q
-A set of Content-Types that will never be encoded as base64
-(if they have to be encoded, they will be encoded as quoted-printable).
-It can have primary types
-(e.g.,
-.q text )
-or full types
-(such as
-.q text/plain ).
-The class is initialized to have
-.q text/plain
-only.
-.ip $=s
-contains the set of subtypes of message that can be treated recursively.
-By default it contains only
-.q rfc822 .
-Other
-.q message/*
-types cannot be 8\(->7 bit encoded.
-If a message containing eight bit data is sent to a seven bit host,
-and that message cannot be encoded into seven bits,
-it will be stripped to 7 bits.
-.ip $=t
-set to the set of trusted users by the
-.b T
-configuration line.
-If you want to read trusted users from a file, use
-.b Ft \c
-.i /file/name .
-.ip $=w
-set to be the set of all names
-this host is known by.
-This can be used to match local hostnames.
-.ip $={persistentMacros}
-set to the macros would should be saved across queue runs.
-Care should be taken when adding macro names to this class.
-.pp
-.i Sendmail
-can be compiled to allow a
-.i scanf (3)
-string on the
-.b F
-line.
-This lets you do simplistic parsing of text files.
-For example, to read all the user names in your system
-.i /etc/passwd
-file into a class, use
-.(b
-FL/etc/passwd %[^:]
-.)b
-which reads every line up to the first colon.
-.sh 2 "M \*- Define Mailer"
-.pp
-Programs and interfaces to mailers
-are defined in this line.
-The format is:
-.(b F
-.b M \c
-.i name ,
-{\c
-.i field =\c
-.i value \|}*
-.)b
-where
-.i name
-is the name of the mailer
-(used internally only)
-and the
-.q field=name
-pairs define attributes of the mailer.
-Fields are:
-.(b
-.ta 1i
-Path The pathname of the mailer
-Flags Special flags for this mailer
-Sender Rewriting set(s) for sender addresses
-Recipient Rewriting set(s) for recipient addresses
-recipients Maximum number of recipients per connection
-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
-maxmessages The maximum message deliveries per connection
-Linelimit The maximum line length in the message body
-Directory The working directory for the mailer
-Userid The default user and group id to run as
-Nice The nice(2) increment for the mailer
-Charset The default character set for 8-bit characters
-Type Type information for DSN diagnostics
-Wait The maximum time to wait for the mailer
-Queuegroup The default queue group for the mailer
-/ The root directory for the mailer
-.)b
-Only the first character of the field name is checked
-(it's case-sensitive).
-.pp
-The following flags may be set in the mailer description.
-Any other flags may be used freely
-to conditionally assign headers to messages
-destined for particular mailers.
-Flags marked with \(dg
-are not interpreted by the
-.i sendmail
-binary;
-these are the conventionally used to correlate to the flags portion
-of the
-.b H
-line.
-Flags marked with \(dd
-apply to the mailers for the sender address
-rather than the usual recipient mailers.
-.nr ii 4n
-.ip a
-Run Extended SMTP (ESMTP) protocol (defined in RFCs 1869, 1652, and 1870).
-This flag defaults on if the SMTP greeting message includes the word
-.q ESMTP .
-.ip A
-Look up the user part of the address in the alias database.
-Normally this is only set for local mailers.
-.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.
-This strips addresses of the form
-.q "Phrase <address>"
-or
-.q "address (Comment)"
-down to just
-.q address .
-.ip C\(dd
-If mail is
-.i received
-from a mailer with this flag set,
-any addresses in the header that do not have an at sign
-(\c
-.q @ )
-after being rewritten by ruleset three
-will have the
-.q @domain
-clause from the sender envelope address
-tacked on.
-This allows mail with headers of the form:
-.(b
-From: usera@hosta
-To: userb@hostb, userc
-.)b
-to be rewritten as:
-.(b
-From: usera@hosta
-To: userb@hostb, userc@hosta
-.)b
-automatically.
-However, it doesn't really work reliably.
-.ip d
-Do not include angle brackets around route-address syntax addresses.
-This is useful on mailers that are going to pass addresses to a shell
-that might interpret angle brackets as I/O redirection.
-However, it does not protect against other shell metacharacters.
-Therefore, passing addresses to a shell should not be considered secure.
-.ip D\(dg
-This mailer wants a
-.q Date:
-header line.
-.ip e
-This mailer is expensive to connect to,
-so try to avoid connecting normally;
-any necessary connection will occur during a queue run.
-See also option
-.b HoldExpensive .
-.ip E
-Escape lines beginning with
-.q From\0
-in the message with a `>' sign.
-.ip f
-The mailer wants a
-.b \-f
-.i from
-flag,
-but only if this is a network forward operation
-(i.e.,
-the mailer will give an error
-if the executing user
-does not have special permissions).
-.ip F\(dg
-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
-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
-(the $@ portion of the mailer triplet resolved from ruleset 0)
-for this mailer.
-.ip i
-Do User Database rewriting on envelope sender address.
-.ip I
-This mailer will be speaking SMTP
-to another
-.i sendmail
-\*-
-as such it can use special protocol features.
-This flag should not be used except for debugging purposes
-because it uses
-.b VERB
-as SMTP command.
-.ip j
-Do User Database rewriting on recipients as well as senders.
-.ip k
-Normally when
-.i sendmail
-connects to a host via SMTP,
-it checks to make sure that this isn't accidently the same host name
-as might happen if
-.i sendmail
-is misconfigured or if a long-haul network interface is set in loopback mode.
-This flag disables the loopback check.
-It should only be used under very unusual circumstances.
-.ip K
-Currently unimplemented.
-Reserved for chunking.
-.ip l
-This mailer is local
-(i.e.,
-final delivery will be performed).
-.ip L
-Limit the line lengths as specified in RFC 821.
-This deprecated option should be replaced by the
-.b L=
-mail declaration.
-For historic reasons, the
-.b L
-flag also sets the
-.b 7
-flag.
-.ip m
-This mailer can send to multiple users
-on the same host
-in one transaction.
-When a
-.b $u
-macro occurs in the
-.i argv
-part of the mailer definition,
-that field will be repeated as necessary
-for all qualifying users.
-Removing this flag can defeat duplicate supression on a remote site
-as each recipient is sent in a separate transaction.
-.ip M\(dg
-This mailer wants a
-.q Message-Id:
-header line.
-.ip n
-Do not insert a UNIX-style
-.q From
-line on the front of the message.
-.ip o
-Always run as the owner of the recipient mailbox.
-Normally
-.i sendmail
-runs as the sender for locally generated mail
-or as
-.q daemon
-(actually, the user specified in the
-.b u
-option)
-when delivering network mail.
-The normal behavior is required by most local mailers,
-which will not allow the envelope sender address
-to be set unless the mailer is running as daemon.
-This flag is ignored if the
-.b S
-flag is set.
-.ip p
-Use the route-addr style reverse-path in the SMTP
-.q "MAIL FROM:"
-command
-rather than just the return address;
-although this is required in RFC 821 section 3.1,
-many hosts do not process reverse-paths properly.
-Reverse-paths are officially discouraged by RFC 1123.
-.ip P\(dg
-This mailer wants a
-.q Return-Path:
-line.
-.ip q
-When an address that resolves to this mailer is verified
-(SMTP VRFY command),
-generate 250 responses instead of 252 responses.
-This will imply that the address is local.
-.ip r
-Same as
-.b f ,
-but sends a
-.b \-r
-flag.
-.ip R
-Open SMTP connections from a
-.q secure
-port.
-Secure ports aren't
-(secure, that is)
-except on UNIX machines,
-so it is unclear that this adds anything.
-.i sendmail
-must be running as root to be able to use this flag.
-.ip s
-Strip quote characters (" and \e) off of the address
-before calling the mailer.
-.ip S
-Don't reset the userid
-before calling the mailer.
-This would be used in a secure environment
-where
-.i sendmail
-ran as root.
-This could be used to avoid forged addresses.
-If the
-.b U=
-field is also specified,
-this flag causes the effective user id to be set to that user.
-.ip u
-Upper case should be preserved in user names for this mailer. Standards
-require preservation of case in the local part of addresses, except for
-those address for which your system accepts responsibility.
-RFC 2142 provides a long list of addresses which should be case
-insensitive.
-If you use this flag, you may be violating RFC 2142.
-Note that postmaster is always treated as a case insensitive address
-regardless of this flag.
-.ip U
-This mailer wants UUCP-style
-.q From
-lines with the ugly
-.q "remote from <host>"
-on the end.
-.ip w
-The user must have a valid account on this machine,
-i.e.,
-.i getpwnam
-must succeed.
-If not, the mail is bounced.
-See also the
-.b MailBoxDatabase
-option.
-This is required to get
-.q \&.forward
-capability.
-.ip x\(dg
-This mailer wants a
-.q Full-Name:
-header line.
-.ip X
-This mailer wants to use the hidden dot algorithm as specified in RFC 821;
-basically, any line beginning with a dot will have an extra dot prepended
-(to be stripped at the other end).
-This insures that lines in the message containing a dot
-will not terminate the message prematurely.
-.ip z
-Run Local Mail Transfer Protocol (LMTP)
-between
-.i sendmail
-and the local mailer.
-This is a variant on SMTP
-defined in RFC 2033
-that is specifically designed for delivery to a local mailbox.
-.ip Z
-Apply DialDelay (if set) to this mailer.
-.ip 0
-Don't look up MX records for hosts sent via SMTP/LMTP.
-Do not apply
-.b FallbackMXhost
-either.
-.ip 1
-Don't send null characters ('\\0') to this mailer.
-.ip 2
-Don't use ESMTP even if offered; this is useful for broken
-systems that offer ESMTP but fail on EHLO (without recovering
-when HELO is tried next).
-.ip 3
-Extend the list of characters converted to =XX notation
-when converting to Quoted-Printable
-to include those that don't map cleanly between ASCII and EBCDIC.
-Useful if you have IBM mainframes on site.
-.ip 5
-If no aliases are found for this address,
-pass the address through ruleset 5 for possible alternate resolution.
-This is intended to forward the mail to an alternate delivery spot.
-.ip 6
-Strip headers to seven bits.
-.ip 7
-Strip all output to seven bits.
-This is the default if the
-.b L
-flag is set.
-Note that clearing this option is not
-sufficient to get full eight bit data passed through
-.i sendmail .
-If the
-.b 7
-option is set, this is essentially always set,
-since the eighth bit was stripped on input.
-Note that this option will only impact messages
-that didn't have 8\(->7 bit MIME conversions performed.
-.ip 8
-If set,
-it is acceptable to send eight bit data to this mailer;
-the usual attempt to do 8\(->7 bit MIME conversions will be bypassed.
-.ip 9
-If set,
-do
-.i limited
-7\(->8 bit MIME conversions.
-These conversions are limited to text/plain data.
-.ip :
-Check addresses to see if they begin
-.q :include: ;
-if they do, convert them to the
-.q *include*
-mailer.
-.ip |
-Check addresses to see if they begin with a `|';
-if they do, convert them to the
-.q prog
-mailer.
-.ip /
-Check addresses to see if they begin with a `/';
-if they do, convert them to the
-.q *file*
-mailer.
-.ip @
-Look up addresses in the user database.
-.ip %
-Do not attempt delivery on initial recipient of a message
-or on queue runs
-unless the queued message is selected
-using one of the -qI/-qR/-qS queue run modifiers
-or an ETRN request.
-.pp
-Configuration files prior to level 6
-assume the `A', `w', `5', `:', `|', `/', and `@' options
-on the mailer named
-.q local .
-.pp
-The mailer with the special name
-.q error
-can be used to generate a user error.
-The (optional) host field is an exit status to be returned,
-and the user field is a message to be printed.
-The exit status may be numeric or one of the values
-USAGE, NOUSER, NOHOST, UNAVAILABLE, SOFTWARE, TEMPFAIL, PROTOCOL, or CONFIG
-to return the corresponding EX_ exit code,
-or an enhanced error code as described in RFC 1893,
-.ul
-Enhanced Mail System Status Codes.
-For example, the entry:
-.(b
-$#error $@ NOHOST $: Host unknown in this domain
-.)b
-on the RHS of a rule
-will cause the specified error to be generated
-and the
-.q "Host unknown"
-exit status to be returned
-if the LHS matches.
-This mailer is only functional in rulesets 0, 5,
-or one of the check_* rulesets.
-.pp
-The mailer with the special name
-.q discard
-causes any mail sent to it to be discarded
-but otherwise treated as though it were successfully delivered.
-This mailer cannot be used in ruleset 0,
-only in the various address checking rulesets.
-.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=lsoDq9, T=DNS/RFC822/X-Unix, A=sh \-c $u
-M*file*, P=[FILE], F=lsDFMPEouq9, T=DNS/RFC822/X-Unix, A=FILE $u
-M*include*, P=/dev/null, F=su, A=INCLUDE $u
-.)b
-.pp
-Builtin pathnames are [FILE] and [IPC], the former is used for
-delivery to files, the latter for delivery via interprocess communication.
-For mailers that use [IPC] as pathname the argument vector (A=)
-must start with TCP or FILE for delivery via a TCP or a Unix domain socket.
-If TCP is used, the second argument must be the name of the host
-to contact.
-Optionally a third argument can be used to specify a port,
-the default is smtp (port 25).
-If FILE is used, the second argument must be the name of
-the Unix domain socket.
-.pp
-If the argument vector does not contain $u then
-.i sendmail
-will speak SMTP (or LMTP if the mailer flag z is specified) to the mailer.
-.pp
-If no Eol field is defined, then the default is "\\r\\n" for
-SMTP mailers and "\\n" of others.
-.pp
-The Sender and Recipient rewriting sets
-may either be a simple ruleset id
-or may be two ids separated by a slash;
-if so, the first rewriting set is applied to envelope
-addresses
-and the second is applied to headers.
-Setting any value to zero disables corresponding mailer-specific rewriting.
-.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 current directory.
-Since the queue directory is not normally readable by unprivileged users
-.i csh
-scripts as recipients can fail.
-.pp
-The Userid
-specifies the default user and group id to run as,
-overriding the
-.b DefaultUser
-option (q.v.).
-If the
-.b S
-mailer flag is also specified,
-this user and group will be set as the
-effective uid and gid for the process.
-This may be given as
-.i user:group
-to set both the user and group id;
-either may be an integer or a symbolic name to be looked up
-in the
-.i passwd
-and
-.i group
-files respectively.
-If only a symbolic user name is specified,
-the group id in the
-.i passwd
-file for that user is used as the group id.
-.pp
-The Charset field
-is used when converting a message to MIME;
-this is the character set used in the
-Content-Type: header.
-If this is not set, the
-.b DefaultCharset
-option is used,
-and if that is not set, the value
-.q unknown-8bit
-is used.
-.b WARNING:
-this field applies to the sender's mailer,
-not the recipient's mailer.
-For example, if the envelope sender address
-lists an address on the local network
-and the recipient is on an external network,
-the character set will be set from the Charset= field
-for the local network mailer,
-not that of the external network mailer.
-.pp
-The Type= field
-sets the type information
-used in MIME error messages
-as defined by
-RFC 1894.
-It is actually three values separated by slashes:
-the MTA-type (that is, the description of how hosts are named),
-the address type (the description of e-mail addresses),
-and the diagnostic type (the description of error diagnostic codes).
-Each of these must be a registered value
-or begin with
-.q X\- .
-The default is
-.q dns/rfc822/smtp .
-.pp
-The m= field specifies the maximum number of messages
-to attempt to deliver on a single SMTP or LMTP connection.
-The default is infinite.
-.pp
-The r= field specifies the maximum number of recipients
-to attempt to deliver in a single envelope.
-It defaults to 100.
-.pp
-The /= field specifies a new root directory for the mailer. The path is
-macro expanded and then passed to the
-.q chroot
-system call. The root directory is changed before the Directory field is
-consulted or the uid is changed.
-.pp
-The Wait= field specifies the maximum time to wait for the
-mailer to return after sending all data to it.
-This applies to mailers that have been forked by
-.i sendmail .
-.pp
-The Queuegroup= field specifies the default queue group in which
-received mail should be queued.
-This can be overridden by other means as explained in section
-``Queue Groups and Queue Directories''.
-.sh 2 "H \*- Define Header"
-.pp
-The format of the header lines that
-.i sendmail
-inserts into the message
-are defined by the
-.b H
-line.
-The syntax of this line is one of the following:
-.(b F
-.b H \c
-.i hname \c
-.b :
-.i htemplate
-.)b
-.(b F
-.b H [\c
-.b ? \c
-.i mflags \c
-.b ? \c
-.b ]\c
-.i hname \c
-.b :
-.i htemplate
-.)b
-.(b F
-.b H [\c
-.b ?$ \c
-.i {macro} \c
-.b ? \c
-.b ]\c
-.i hname \c
-.b :
-.i htemplate
-.)b
-Continuation lines in this spec
-are reflected directly into the outgoing message.
-The
-.i htemplate
-is macro-expanded before insertion into the message.
-If the
-.i mflags
-(surrounded by question marks)
-are specified,
-at least one of the specified flags
-must be stated in the mailer definition
-for this header to be automatically output.
-If a
-.i ${macro}
-(surrounded by question marks)
-is specified,
-the header will be automatically output
-if the macro is set.
-The macro may be set using any of the normal methods,
-including using the
-.b macro
-storage map in a ruleset.
-If one of these headers is in the input
-it is reflected to the output
-regardless of these flags or macros.
-Notice:
-If a
-.i ${macro}
-is used to set a header, then it is useful to add that macro to class
-.i $={persistentMacros}
-which consists of the macros that should be saved across queue runs.
-.pp
-Some headers have special semantics
-that will be described later.
-.pp
-A secondary syntax allows validation of headers as they are being read.
-To enable validation, use:
-.(b
-.b H \c
-.i Header \c
-.b ": $>" \c
-.i Ruleset
-.b H \c
-.i Header \c
-.b ": $>+" \c
-.i Ruleset
-.)b
-The indicated
-.i Ruleset
-is called for the specified
-.i Header ,
-and can return
-.b $#error
-to reject the message or
-.b $#discard
-to discard the message
-(as with the other
-.b check_ *
-rulesets).
-The ruleset receives the header field-body as argument,
-i.e., not the header field-name; see also
-${hdr_name} and ${currHeader}.
-The header is treated as a structured field,
-that is,
-text in parentheses is deleted before processing,
-unless the second form
-.b $>+
-is used.
-Note: only one ruleset can be associated with a header;
-.i sendmail
-will silently ignore multiple entries.
-.pp
-For example, the configuration lines:
-.(b
-HMessage-Id: $>CheckMessageId
-
-SCheckMessageId
-R< $+ @ $+ > $@ OK
-R$* $#error $: Illegal Message-Id header
-.)b
-would refuse any message that had a Message-Id: header of any of the
-following forms:
-.(b
-Message-Id: <>
-Message-Id: some text
-Message-Id: <legal text@domain> extra crud
-.)b
-A default ruleset that is called for headers which don't have a
-specific ruleset defined for them can be specified by:
-.(b
-.b H \c
-.i * \c
-.b ": $>" \c
-.i Ruleset
-.)b
-or
-.(b
-.b H \c
-.i * \c
-.b ": $>+" \c
-.i Ruleset
-.)b
-.sh 2 "O \*- Set Option"
-.pp
-There are a number of global options that
-can be set from a configuration file.
-Options are represented by full words;
-some are also representable as single characters for back compatibility.
-The syntax of this line is:
-.(b F
-.b O \0
-.i option \c
-.b = \c
-.i value
-.)b
-This sets option
-.i option
-to be
-.i value .
-Note that there
-.i must
-be a space between the letter `O' and the name of the option.
-An older version is:
-.(b F
-.b O \c
-.i o\|value
-.)b
-where the option
-.i o
-is a single character.
-Depending on the option,
-.i value
-may be a string, an integer,
-a boolean
-(with legal values
-.q t ,
-.q T ,
-.q f ,
-or
-.q F ;
-the default is TRUE),
-or
-a time interval.
-.pp
-All filenames used in options should be absolute paths,
-i.e., starting with '/'.
-Relative filenames most likely cause surprises during operation
-(unless otherwise noted).
-.pp
-The options supported (with the old, one character names in brackets) are:
-.nr ii 1i
-.ip "AliasFile=\fIspec, spec, ...\fP"
-[A]
-Specify possible alias file(s).
-Each
-.i spec
-should be in the format
-``\c
-.i class \c
-.b :
-.i info ''
-where
-.i class \c
-.b :
-is optional and defaults to ``implicit''.
-Note that
-.i info
-is required for all
-.i class es
-except
-.q ldap .
-For the
-.q ldap
-class,
-if
-.i info
-is not specified,
-a default
-.i info
-value is used as follows:
-.(b
-\-k (&(objectClass=sendmailMTAAliasObject)
- (sendmailMTAAliasName=aliases)
- (|(sendmailMTACluster=${sendmailMTACluster})
- (sendmailMTAHost=$j))
- (sendmailMTAKey=%0))
-\-v sendmailMTAAliasValue
-.)b
-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 btree
-(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),
-.q sequence
-(use a sequence of maps
-previously declared),
-.q ldap
-(if
-.sm LDAPMAP
-is specified),
-or
-.q nis
-(if
-.sm NIS
-is specified).
-If a list of
-.i spec s
-are provided,
-.i sendmail
-searches them in order.
-.ip AliasWait=\fItimeout\fP
-[a]
-If set,
-wait up to
-.i timeout
-(units default to minutes)
-for an
-.q @:@
-entry to exist in the alias database
-before starting up.
-If it does not appear in the
-.i timeout
-interval issue a warning.
-.ip AllowBogusHELO
-[no short name]
-If set, allow HELO SMTP commands that don't include a host name.
-Setting this violates RFC 1123 section 5.2.5,
-but is necessary to interoperate with several SMTP clients.
-If there is a value, it is still checked for legitimacy.
-.ip AuthMaxBits=\fIN\fP
-[no short name]
-Limit the maximum encryption strength for the security layer in
-SMTP AUTH (SASL). Default is essentially unlimited.
-This allows to turn off additional encryption in SASL if
-STARTTLS is already encrypting the communication, because the
-existing encryption strength is taken into account when choosing
-an algorithm for the security layer.
-For example, if STARTTLS is used and the symmetric cipher is 3DES,
-then the the keylength (in bits) is 168.
-Hence setting
-.b AuthMaxBits
-to 168 will disable any encryption in SASL.
-.ip AuthMechanisms
-[no short name]
-List of authentication mechanisms for AUTH (separated by spaces).
-The advertised list of authentication mechanisms will be the
-intersection of this list and the list of available mechanisms as
-determined by the Cyrus SASL library.
-If STARTTLS is active, EXTERNAL will be added to this list.
-In that case, the value of {cert_subject} is used as authentication id.
-.ip AuthOptions
-[no short name]
-List of options for SMTP AUTH consisting of single characters
-with intervening white space or commas.
-.(b
-.ta 4n
-A Use the AUTH= parameter for the MAIL FROM
- command only when authentication succeeded.
- This can be used as a workaround for broken
- MTAs that do not implement RFC 2554 correctly.
-a protection from active (non-dictionary) attacks
- during authentication exchange.
-c require mechanisms which pass client credentials,
- and allow mechanisms which can pass credentials
- to do so.
-d don't permit mechanisms susceptible to passive
- dictionary attack.
-f require forward secrecy between sessions
- (breaking one won't help break next).
-p don't permit mechanisms susceptible to simple
- passive attack (e.g., PLAIN, LOGIN), unless a
- security layer is active.
-y don't permit mechanisms that allow anonymous login.
-.)b
-The first option applies to sendmail as a client, the others to a server.
-Example:
-.(b
-O AuthOptions=p,y
-.)b
-would disallow ANONYMOUS as AUTH mechanism and would
-allow PLAIN and LOGIN only if a security layer (e.g.,
-provided by STARTTLS) is already active.
-The options 'a', 'c', 'd', 'f', 'p', and 'y' refer to properties of the
-selected SASL mechanisms.
-Explanations of these properties can be found in the Cyrus SASL documentation.
-.ip BadRcptThrottle=\fIN\fP
-[no short name]
-If set and more than the specified number of recipients in a single SMTP
-envelope are rejected, sleep for one second after each rejected RCPT command.
-.ip BlankSub=\fIc\fP
-[B]
-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 CACertPath
-[no short name]
-Path to directory with certificates of CAs.
-This directory directory must contain the hashes of each CA certificate
-as filenames (or as links to them).
-.ip CACertFile
-[no short name]
-File containing one or more CA certificates;
-see section about STARTTLS for more information.
-.ip CheckAliases
-[n]
-Validate the RHS of aliases when rebuilding the alias database.
-.ip CheckpointInterval=\fIN\fP
-[C]
-Checkpoints the queue every
-.i N
-(default 10)
-addresses sent.
-If your system crashes during delivery to a large list,
-this prevents retransmission to any but the last
-.i N
-recipients.
-.ip ClassFactor=\fIfact\fP
-[z]
-The indicated
-.i fact or
-is multiplied by the message class
-(determined by the Precedence: field in the user header
-and the
-.b P
-lines in the configuration file)
-and subtracted from the priority.
-Thus, messages with a higher Priority: will be favored.
-Defaults to 1800.
-.ip ClientCertFile
-[no short name]
-File containing the certificate of the client, i.e., this certificate
-is used when
-.i sendmail
-acts as client (for STARTTLS).
-.ip ClientKeyFile
-[no short name]
-File containing the private key belonging to the client certificate
-(for STARTTLS if
-.i sendmail
-runs as client).
-.ip ClientPortOptions=\fIoptions\fP
-[O]
-Set client SMTP options.
-The options are
-.i key=value
-pairs separated by commas.
-Known keys are:
-.(b
-.ta 1i
-Port Name/number of source port for connection (defaults to any free port)
-Addr Address mask (defaults INADDR_ANY)
-Family Address family (defaults to INET)
-SndBufSize Size of TCP send buffer
-RcvBufSize Size of TCP receive buffer
-Modifier Options (flags) for the daemon
-.)b
-The
-.i Addr ess
-mask may be a numeric address in dot notation
-or a network name.
-.i Modifier
-can be the following character:
-.(b
-.ta 1i
-h use name of interface for HELO command
-A don't use AUTH when sending e-mail
-S don't use STARTTLS when sending e-mail
-.)b
-If ``h'' is set, the name corresponding to the outgoing interface
-address (whether chosen via the Connection parameter or
-the default) is used for the HELO/EHLO command.
-However, the name must not start with a square bracket
-and it must contain at least one dot.
-This is a simple test whether the name is not
-an IP address (in square brackets) but a qualified hostname.
-Note that multiple ClientPortOptions settings are allowed
-in order to give settings for each protocol family
-(e.g., one for Family=inet and one for Family=inet6).
-A restriction placed on one family only affects
-outgoing connections on that particular family.
-.ip ColonOkInAddr
-[no short name]
-If set, colons are acceptable in e-mail addresses
-(e.g.,
-.q host:user ).
-If not set, colons indicate the beginning of a RFC 822 group construct
-(\c
-.q "groupname: member1, member2, ... memberN;" ).
-Doubled colons are always acceptable
-(\c
-.q nodename::user )
-and proper route-addr nesting is understood
-(\c
-.q <@relay:user@host> ).
-Furthermore, this option defaults on if the configuration version level
-is less than 6 (for back compatibility).
-However, it must be off for full compatibility with RFC 822.
-.ip ConnectionCacheSize=\fIN\fP
-[k]
-The maximum number of open connections that will be cached at a time.
-The default is one.
-This delays closing the current connection until
-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.
-Since this consumes file descriptors,
-the connection cache should be kept small:
-4 is probably a practical maximum.
-.ip ConnectionCacheTimeout=\fItimeout\fP
-[K]
-The maximum amount of time a cached connection will be permitted to idle
-without activity.
-If this time is exceeded,
-the connection is immediately closed.
-This value should be small (on the order of ten minutes).
-Before
-.i sendmail
-uses a cached connection,
-it always sends a RSET command
-to check the connection;
-if this fails, it reopens the connection.
-This keeps your end from failing if the other end times out.
-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.
-.ip ConnectOnlyTo=\fIaddress\fP
-[no short name]
-This can be used to
-override the connection address (for testing purposes).
-.ip ConnectionRateThrottle=\fIN\fP
-[no short name]
-If set to a positive value,
-allow no more than
-.i N
-incoming connections in a one second period per daemon.
-This is intended to flatten out peaks
-and allow the load average checking to cut in.
-Defaults to zero (no limits).
-.ip ControlSocketName=\fIname\fP
-[no short name]
-Name of the control socket for daemon management.
-A running
-.i sendmail
-daemon can be controlled through this named socket.
-Available commands are:
-.i help,
-.i restart,
-.i shutdown,
-and
-.i status.
-The
-.i status
-command returns the current number of daemon children,
-the maximum number of daemon children,
-the free disk space (in blocks) of the queue directory,
-and the load average of the machine expressed as an integer.
-If not set, no control socket will be available.
-Solaris and pre-4.4BSD kernel users should see the note in sendmail/README .
-.ip DHParameters
-File with DH parameters for STARTTLS.
-This is only required if a ciphersuite containing DSA/DH is used.
-This is only for people with a good knowledge of TLS, all others
-can ignore this option.
-.ip DaemonPortOptions=\fIoptions\fP
-[O]
-Set server SMTP options.
-Each instance of
-.b DaemonPortOptions
-leads to an additional incoming socket.
-The options are
-.i key=value
-pairs.
-Known keys are:
-.(b
-.ta 1i
-Name User-definable name for the daemon (defaults to "Daemon#")
-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)
-Modifier Options (flags) for the daemon
-SndBufSize Size of TCP send buffer
-RcvBufSize Size of TCP receive buffer
-.)b
-The
-.i Name
-key is used for error messages and logging.
-The
-.i Addr ess
-mask may be a numeric address in dot notation
-or a network name.
-The
-.i Family
-key defaults to INET (IPv4).
-IPv6 users who wish to also accept IPv6 connections
-should add additional Family=inet6
-.b DaemonPortOptions
-lines.
-.i Modifier
-can be a sequence (without any delimiters)
-of the following characters:
-.(b
-.ta 1i
-a always require authentication
-b bind to interface through which mail has been received
-c perform hostname canonification (.cf)
-f require fully qualified hostname (.cf)
-u allow unqualified addresses (.cf)
-A disable AUTH (overrides 'a' modifier)
-C don't perform hostname canonification
-E disallow ETRN (see RFC 2476)
-O optional; if opening the socket fails ignore it
-S don't offer STARTTLS
-.)b
-That is, one way to specify a message submission agent (MSA) that
-always requires authentication is:
-.(b
-O DaemonPortOptions=Name=MSA, Port=587, M=Ea
-.)b
-The modifiers that are marked with "(.cf)" have only
-effect in the standard configuration file, in which
-they are available via
-.b ${daemon_flags} .
-Notice: Do
-.b not
-use the ``a'' modifier on a public accessible MTA!
-It should only be used for a MSA that is accessed by authorized
-users for initial mail submission.
-Users must authenticate to use a MSA which has this option turned on.
-The flags ``c'' and ``C'' can change the default for
-hostname canonification in the
-.i sendmail.cf
-file.
-See the relevant documentation for
-.sm FEATURE(nocanonify) .
-The modifier ``f'' disallows addresses of the form
-.b user@host
-unless they are submitted directly.
-The flag ``u'' allows unqualified sender addresses,
-i.e., those without @host.
-``b'' forces sendmail to bind to the interface
-through which the e-mail has been
-received for the outgoing connection.
-.b WARNING:
-Use ``b''
-only if outgoing mail can be routed through the incoming connection's
-interface to its destination. No attempt is made to catch problems due to a
-misconfiguration of this parameter, use it only for virtual hosting
-where each virtual interface can connect to every possible location.
-This will also override possible settings via
-.b ClientPortOptions.
-Note,
-.i sendmail
-will listen on a new socket
-for each occurence of the
-.b DaemonPortOptions
-option in a configuration file.
-The modifier ``O'' causes sendmail to ignore a socket
-if it can't be opened.
-This applies to failures from the socket(2) and bind(2) calls.
-.ip DefaultAuthInfo
-[no short name]
-Filename that contains default authentication information for outgoing
-connections. This file must contain the user id, the authorization id,
-the password (plain text), the realm and the list of mechanisms to use
-on separate lines and must be readable by
-root (or the trusted user) only.
-If no realm is specified,
-.b $j
-is used.
-If no mechanisms are specified, the list given by
-.b AuthMechanisms
-is used.
-Notice: this option is deprecated and will be removed in future versions.
-Moreover, it doesn't work for the MSP since it can't read the file
-(the file must not be group/world-readable otherwise
-.i sendmail
-will complain).
-Use the authinfo ruleset instead which provides more control over
-the usage of the data anyway.
-.ip DefaultCharSet=\fIcharset\fP
-[no short name]
-When a message that has 8-bit characters but is not in MIME format
-is converted to MIME
-(see the EightBitMode option)
-a character set must be included in the Content-Type: header.
-This character set is normally set from the Charset= field
-of the mailer descriptor.
-If that is not set, the value of this option is used.
-If this option is not set, the value
-.q unknown-8bit
-is used.
-.ip DataFileBufferSize=\fIthreshold\fP
-[no short name]
-Set the
-.i threshold ,
-in bytes,
-before a memory-based
-queue data file
-becomes disk-based.
-The default is 4096 bytes.
-.ip DeadLetterDrop=\fIfile\fP
-[no short name]
-Defines the location of the system-wide dead.letter file,
-formerly hardcoded to /usr/tmp/dead.letter.
-If this option is not set (the default),
-sendmail will not attempt to save to a system-wide dead.letter file
-in the event
-it cannot bounce the mail to the user or postmaster.
-Instead, it will rename the qf file
-as it has in the past
-when the dead.letter file could not be opened.
-.ip DefaultUser=\fIuser:group\fP
-[u]
-Set the default userid for mailers to
-.i user:group .
-If
-.i group
-is omitted and
-.i user
-is a user name
-(as opposed to a numeric user id)
-the default group listed in the /etc/passwd file for that user is used
-as the default group.
-Both
-.i user
-and
-.i group
-may be numeric.
-Mailers without the
-.i S
-flag in the mailer definition
-will run as this user.
-Defaults to 1:1.
-The value can also be given as a symbolic user name.\**
-.(f
-\**The old
-.b g
-option has been combined into the
-.b DefaultUser
-option.
-.)f
-.ip DelayLA=\fILA\fP
-[no short name]
-When the system load average exceeds
-.i LA ,
-.i sendmail
-will sleep for one second on most SMTP commands and
-before accepting connections.
-.ip DeliverByMin=\fItime\fP
-[0]
-Set minimum time for Deliver By SMTP Service Extension (RFC 2852).
-If 0, no time is listed, if less than 0, the extension is not offered,
-if greater than 0, it is listed as minimum time
-for the EHLO keyword DELIVERBY.
-.ip DeliveryMode=\fIx\fP
-[d]
-Deliver in mode
-.i x .
-Legal modes are:
-.(b
-.ta 4n
-i Deliver interactively (synchronously)
-b Deliver in background (asynchronously)
-q Just queue the message (deliver during queue run)
-d Defer delivery and all map lookups (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'').
-The
-.b \-v
-command line flag sets this to
-.b i .
-.ip DialDelay=\fIsleeptime\fP
-[no short name]
-Dial-on-demand network connections can see timeouts
-if a connection is opened before the call is set up.
-If this is set to an interval and a connection times out
-on the first connection being attempted
-.i sendmail
-will sleep for this amount of time and try again.
-This should give your system time to establish the connection
-to your service provider.
-Units default to seconds, so
-.q DialDelay=5
-uses a five second delay.
-Defaults to zero
-(no retry).
-This delay only applies to mailers which have the
-Z flag set.
-.ip DirectSubmissionModifiers=\fImodifiers\fP
-Defines
-.b ${daemon_flags}
-for direct (command line) submissions.
-If not set,
-.b ${daemon_flags}
-is either "CC f" if the option
-.b \-G
-is used or "c u" otherwise.
-Note that only the the "CC", "c", "f", and "u" flags are checked.
-.ip DontBlameSendmail=\fIoption,option,...\fP
-[no short name]
-In order to avoid possible cracking attempts
-caused by world- and group-writable files and directories,
-.i sendmail
-does paranoid checking when opening most of its support files.
-If for some reason you absolutely must run with,
-for example,
-a group-writable
-.i /etc
-directory,
-then you will have to turn off this checking
-(at the cost of making your system more vulnerable to attack).
-The possible arguments have been described earlier.
-The details of these flags are described above.
-.\"XXX should have more here!!! XXX
-.b "Use of this option is not recommended."
-.ip DontExpandCnames
-[no short name]
-The standards say that all host addresses used in a mail message
-must be fully canonical.
-For example, if your host is named
-.q Cruft.Foo.ORG
-and also has an alias of
-.q FTP.Foo.ORG ,
-the former name must be used at all times.
-This is enforced during host name canonification
-($[ ... $] lookups).
-If this option is set, the protocols are ignored and the
-.q wrong
-thing is done.
-However, the IETF is moving toward changing this standard,
-so the behavior may become acceptable.
-Please note that hosts downstream may still rewrite the address
-to be the true canonical name however.
-.ip DontInitGroups
-[no short name]
-If set,
-.i sendmail
-will avoid using the initgroups(3) call.
-If you are running NIS,
-this causes a sequential scan of the groups.byname map,
-which can cause your NIS server to be badly overloaded in a large domain.
-The cost of this is that the only group found for users
-will be their primary group (the one in the password file),
-which will make file access permissions somewhat more restrictive.
-Has no effect on systems that don't have group lists.
-.ip DontProbeInterfaces
-[no short name]
-.i Sendmail
-normally finds the names of all interfaces active on your machine
-when it starts up
-and adds their name to the
-.b $=w
-class of known host aliases.
-If you have a large number of virtual interfaces
-or if your DNS inverse lookups are slow
-this can be time consuming.
-This option turns off that probing.
-However, you will need to be certain to include all variant names
-in the
-.b $=w
-class by some other mechanism.
-If set to
-.b loopback ,
-loopback interfaces (e.g., lo0) will not be probed.
-.ip DontPruneRoutes
-[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,@known3:user@unknown>
-.)b
-.i sendmail
-will strip off the
-.q @known1,@known2
-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 DoubleBounceAddress=\fIerror-address\fP
-[no short name]
-If an error occurs when sending an error message,
-send the error report
-(termed a
-.q "double bounce"
-because it is an error
-.q bounce
-that occurs when trying to send another error
-.q bounce )
-to the indicated address.
-The address is macro expanded
-at the time of delivery.
-If not set, defaults to
-.q postmaster .
-If set to an empty string, double bounces are dropped.
-.ip EightBitMode=\fIaction\fP
-[8]
-Set handling of eight-bit data.
-There are two kinds of eight-bit data:
-that declared as such using the
-.b BODY=8BITMIME
-ESMTP declaration or the
-.b \-B8BITMIME
-command line flag,
-and undeclared 8-bit data, that is,
-input that just happens to be eight bits.
-There are three basic operations that can happen:
-undeclared 8-bit data can be automatically converted to 8BITMIME,
-undeclared 8-bit data can be passed as-is without conversion to MIME
-(``just send 8''),
-and declared 8-bit data can be converted to 7-bits
-for transmission to a non-8BITMIME mailer.
-The possible
-.i action s
-are:
-.(b
-.\" r Reject undeclared 8-bit data;
-.\" don't convert 8BITMIME\(->7BIT (``reject'')
- s Reject undeclared 8-bit data (``strict'')
-.\" do convert 8BITMIME\(->7BIT (``strict'')
-.\" c Convert undeclared 8-bit data to MIME;
-.\" don't convert 8BITMIME\(->7BIT (``convert'')
- m Convert undeclared 8-bit data to MIME (``mime'')
-.\" do convert 8BITMIME\(->7BIT (``mime'')
-.\" j Pass undeclared 8-bit data;
-.\" don't convert 8BITMIME\(->7BIT (``just send 8'')
- p Pass undeclared 8-bit data (``pass'')
-.\" do convert 8BITMIME\(->7BIT (``pass'')
-.\" a Adaptive algorithm: see below
-.)b
-.\"The adaptive algorithm is to accept 8-bit data,
-.\"converting it to 8BITMIME only if the receiver understands that,
-.\"otherwise just passing it as undeclared 8-bit data;
-.\"8BITMIME\(->7BIT conversions are done.
-In all cases properly declared 8BITMIME data will be converted to 7BIT
-as needed.
-.ip ErrorHeader=\fIfile-or-message\fP
-[E]
-Prepend error messages with the indicated message.
-If it begins with a slash,
-it is assumed to be the pathname of a file
-containing a message (this is the recommended setting).
-Otherwise, it is a literal message.
-The error file might contain the name, email address, and/or phone number
-of a local postmaster who could provide assistance
-to end users.
-If the option is missing or null,
-or if it names a file which does not exist or which is not readable,
-no message is printed.
-.ip ErrorMode=\fIx\fP
-[e]
-Dispose of errors using mode
-.i x .
-The values for
-.i x
-are:
-.(b
-p Print error messages (default)
-q No messages, just give exit status
-m Mail back errors
-w Write back errors (mail if user not logged in)
-e Mail back errors (when applicable) and give zero exit stat always
-.)b
-Note that the last mode,
-.q e ,
-is for Berknet error processing and
-should not be used in normal circumstances.
-.ip FallbackMXhost=\fIfallbackhost\fP
-[V]
-If specified, the
-.i fallbackhost
-acts like a very low priority MX
-on every host.
-MX records will be looked up for this host,
-unless the name is surrounded by square brackets.
-This is intended to be used by sites with poor network connectivity.
-Messages which are undeliverable due to temporary address failures
-(e.g., DNS failure)
-also go to the FallbackMXhost.
-.ip FastSplit
-[no short name]
-If set to a value greater than zero (the default is one),
-it suppresses the MX lookups on addresses
-when they are initially sorted, i.e., for the first delivery attempt.
-This usually results in faster envelope splitting unless the MX records
-are readily available in a local DNS cache.
-To enforce initial sorting based on MX records set
-.b FastSplit
-to zero.
-If the mail is submitted directly from the command line, then
-the value also limits the number of processes to deliver the envelopes;
-if more envelopes are created they are only queued up
-and must be taken care of by a queue run.
-Since the default submission method is via SMTP (either from a MUA
-or via the MSP), the value of
-.b FastSplit
-is seldom used to limit the number of processes to deliver the envelopes.
-.ip ForkEachJob
-[Y]
-If set,
-deliver each job that is run from the queue in a separate process.
-.ip ForwardPath=\fIpath\fP
-[J]
-Set the path for searching for users' .forward files.
-The default is
-.q $z/.forward .
-Some sites that use the automounter may prefer to change this to
-.q /var/forward/$u
-to search a file with the same name as the user in a system directory.
-It can also be set to a sequence of paths separated by colons;
-.i sendmail
-stops at the first file it can successfully and safely open.
-For example,
-.q /var/forward/$u:$z/.forward
-will search first in /var/forward/\c
-.i username
-and then in
-.i ~username /.forward
-(but only if the first file does not exist).
-.ip HelpFile=\fIfile\fP
-[H]
-Specify the help file
-for SMTP.
-If no file name is specified, "helpfile" is used.
-.ip HoldExpensive
-[c]
-If an outgoing mailer is marked as being expensive,
-don't connect immediately.
-This requires that queueing be compiled in,
-since it will depend on a queue run process to
-actually send the mail.
-.ip HostsFile=\fIpath\fP
-[no short name]
-The path to the hosts database,
-normally
-.q /etc/hosts .
-This option is only consulted when sendmail
-is canonifying addresses,
-and then only when
-.q files
-is in the
-.q hosts
-service switch entry.
-In particular, this file is
-.i never
-used when looking up host addresses;
-that is under the control of the system
-.i gethostbyname (3)
-routine.
-.ip HostStatusDirectory=\fIpath\fP
-[no short name]
-The location of the long term host status information.
-When set,
-information about the status of hosts
-(e.g., host down or not accepting connections)
-will be shared between all
-.i sendmail
-processes;
-normally, this information is only held within a single queue run.
-This option requires a connection cache of at least 1 to function.
-If the option begins with a leading `/',
-it is an absolute pathname;
-otherwise,
-it is relative to the mail queue directory.
-A suggested value for sites desiring persistent host status is
-.q \&.hoststat
-(i.e., a subdirectory of the queue directory).
-.ip IgnoreDots
-[i]
-Ignore dots in incoming messages.
-This is always disabled (that is, dots are always accepted)
-when reading SMTP mail.
-.ip InputMailFilters=\fIname,name,...\fP
-A comma separated list of filters which determines which filters
-(see the "X \*- Mail Filter (Milter) Definitions" section)
-and the invocation sequence are contacted for incoming SMTP messages.
-If none are set, no filters will be contacted.
-.ip LDAPDefaultSpec=\fIspec\fP
-[no short name]
-Sets a default map specification for LDAP maps.
-The value should only contain LDAP specific settings
-such as
-.q "-h host -p port -d bindDN" .
-The settings will be used for all LDAP maps
-unless the individual map specification overrides a setting.
-This option should be set before any LDAP maps are defined.
-.ip LogLevel=\fIn\fP
-[L]
-Set the log level to
-.i n .
-Defaults to 9.
-.ip M\fIx\|value\fP
-[no long version]
-Set the macro
-.i x
-to
-.i value .
-This is intended only for use from the command line.
-The
-.b \-M
-flag is preferred.
-.ip MailboxDatabase
-[no short name]
-Type of lookup to find information about local mailboxes,
-defaults to ``pw'' which uses
-.i getpwnam .
-Other types can be introduced by adding them to the source code,
-see libsm/mbdb.c for details.
-.ip UseMSP
-[no short name]
-Use as mail submission program, i.e.,
-allow group writable queue files
-if the group is the same as that of a set-group-ID sendmail binary.
-See the file
-.b sendmail/SECURITY
-in the distribution tarball.
-.ip MatchGECOS
-[G]
-Allow fuzzy matching on the GECOS field.
-If this flag is set,
-and the usual user name lookups fail
-(that is, there is no alias with this name and a
-.i getpwnam
-fails),
-sequentially search the password file
-for a matching entry in the GECOS field.
-This also requires that MATCHGECOS
-be turned on during compilation.
-This option is not recommended.
-.ip MaxAliasRecursion=\fIN\fP
-[no short name]
-The maximum depth of alias recursion (default: 10).
-.ip MaxDaemonChildren=\fIN\fP
-[no short name]
-If set,
-.i sendmail
-will refuse connections when it has more than
-.i N
-children processing incoming mail or automatic queue runs.
-This does not limit the number of outgoing connections.
-If not set, there is no limit to the number of children --
-that is, the system load averaging controls this.
-.ip MaxHeadersLength=\fIN\fP
-[no short name]
-The maximum length of the sum of all headers.
-This can be used to prevent a denial of service attack.
-The default is no limit.
-.ip MaxHopCount=\fIN\fP
-[h]
-The maximum hop count.
-Messages that have been processed more than
-.i N
-times are assumed to be in a loop and are rejected.
-Defaults to 25.
-.ip MaxMessageSize=\fIN\fP
-[no short name]
-Specify the maximum message size
-to be advertised in the ESMTP EHLO response.
-Messages larger than this will be rejected.
-.ip MaxMimeHeaderLength=\fIN[/M]\fP
-[no short name]
-Sets the maximum length of certain MIME header field values to
-.i N
-characters.
-These MIME header fields are determined by being a member of
-class {checkMIMETextHeaders}, which currently contains only
-the header Content-Description.
-For some of these headers which take parameters,
-the maximum length of each parameter is set to
-.i M
-if specified. If
-.i /M
-is not specified, one half of
-.i N
-will be used.
-By default,
-these values are 0, meaning no checks are done.
-.ip MaxQueueChildren=\fIN\fP
-[no short name]
-When set, this limits the number of concurrent queue runner processes to
-.i N.
-This helps to control the amount of system resources used when processing
-the queue. When there are multiple queue groups defined and the total number
-of queue runners for these queue groups would exceed
-.i MaxQueueChildren
-then the queue groups will not all run concurrently. That is, some portion
-of the queue groups will run concurrently such that
-.i MaxQueueChildren
-will not be exceeded, while the remaining queue groups will be run later (in
-round robin order). See also
-.i MaxRunnersPerQueue
-and the section \fBQueue Group Declaration\fP.
-Notice:
-.i sendmail
-does not count individual queue runners, but only sets of processes
-that act on a workgroup.
-Hence the actual number of queue runners may be lower than the limit
-imposed by
-.i MaxQueueChildren .
-This discrepancy can be large if some queue runners have to wait
-for a slow server and if short intervals are used.
-.ip MaxQueueRunSize=\fIN\fP
-[no short name]
-The maximum number of jobs that will be processed
-in a single queue run.
-If not set, there is no limit on the size.
-If you have very large queues or a very short queue run interval
-this could be unstable.
-However, since the first
-.i N
-jobs in queue directory order are run (rather than the
-.i N
-highest priority jobs)
-this should be set as high as possible to avoid
-.q losing
-jobs that happen to fall late in the queue directory.
-.ip MaxRecipientsPerMessage=\fIN\fP
-[no short name]
-The maximum number of recipients that will be accepted per message
-in an SMTP transaction.
-Note: setting this too low can interfere with sending mail from
-MUAs that use SMTP for initial submission.
-If not set, there is no limit on the number of recipients per envelope.
-.ip MaxRunnersPerQueue=\fIN\fP
-[no short name]
-This sets the default maximum number of queue runners for queue groups.
-Up to
-.i N
-queue runners will work in parallel on a queue group's messages.
-This is useful where the processing of a message in the queue might
-delay the processing of subsequent messages. Such a delay may be the result
-of non-erroneous situations such as a low bandwidth connection.
-May be overridden on a per queue group basis by setting the
-.i Runners
-option; see the section \fBQueue Group Declaration\fP.
-The default is 1 when not set.
-.ip MeToo
-[m]
-Send to me too,
-even if I am in an alias expansion.
-This option is deprecated
-and will be removed from a future version.
-.ip Milter
-[no short name]
-This option has several sub(sub)options.
-The names of the suboptions are separated by dots.
-At the first level the following options are available:
-.(b
-.ta \w'LogLevel'u+3n
-LogLevel Log level for input mail filter actions, defaults to LogLevel.
-macros Specifies list of macro to transmit to filters.
- See list below.
-.)b
-The ``macros'' option has the following suboptions
-which specify the list of macro to transmit to milters
-after a certain event occurred.
-.(b
-.ta \w'envfrom'u+3n
-connect After session connection start
-helo After HELO command
-envfrom After MAIL FROM command
-envrcpt After RCPT TO command
-.)b
-By default the lists of macros are empty.
-Example:
-.(b
-O Milter.LogLevel=12
-O Milter.macros.connect=j, _, {daemon_name}
-.)b
-.ip MinFreeBlocks=\fIN\fP
-[b]
-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.
-.ip MinQueueAge=\fIage\fP
-[no short name]
-Don't process any queued jobs
-that have been in the queue less than the indicated time interval.
-This is intended to allow you to get responsiveness
-by processing the queue fairly frequently
-without thrashing your system by trying jobs too often.
-The default units are minutes.
-.ip MustQuoteChars=\fIs\fP
-[no short name]
-Sets the list of characters that must be quoted if used in a full name
-that is in the phrase part of a ``phrase <address>'' syntax.
-The default is ``\'.''.
-The characters ``@,;:\e()[]'' are always added to this list.
-.ip NiceQueueRun
-[no short name]
-The priority of queue runners (nice(3)).
-This value must be greater or equal zero.
-.ip NoRecipientAction
-[no short name]
-The action to take when you receive a message that has no valid
-recipient headers (To:, Cc:, Bcc:, or Apparently-To: \(em
-the last included for back compatibility with old
-.i sendmail s).
-It can be
-.b None
-to pass the message on unmodified,
-which violates the protocol,
-.b Add-To
-to add a To: header with any recipients it can find in the envelope
-(which might expose Bcc: recipients),
-.b Add-Apparently-To
-to add an Apparently-To: header
-(this is only for back-compatibility
-and is officially deprecated),
-.b Add-To-Undisclosed
-to add a header
-.q "To: undisclosed-recipients:;"
-to make the header legal without disclosing anything,
-or
-.b Add-Bcc
-to add an empty Bcc: header.
-.ip OldStyleHeaders
-[o]
-Assume that the headers may be in old format,
-i.e.,
-spaces delimit names.
-This actually turns on
-an adaptive algorithm:
-if any recipient address contains a comma, parenthesis,
-or angle bracket,
-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.
-Defaults to off.
-.ip OperatorChars=\fIcharlist\fP
-[$o macro]
-The list of characters that are considered to be
-.q operators ,
-that is, characters that delimit tokens.
-All operator characters are tokens by themselves;
-sequences of non-operator characters are also tokens.
-White space characters separate tokens
-but are not tokens themselves \(em for example,
-.q AAA.BBB
-has three tokens, but
-.q "AAA BBB"
-has two.
-If not set, OperatorChars defaults to
-.q \&.\|:\|@\|[\|] ;
-additionally, the characters
-.q (\|)\|<\|>\|,\|;
-are always operators.
-Note that OperatorChars must be set in the
-configuration file before any rulesets.
-.ip PidFile=\fIfilename\fP
-[no short name]
-Filename of the pid file.
-(default is _PATH_SENDMAILPID).
-The
-.i filename
-is macro-expanded before it is opened.
-.ip PostmasterCopy=\fIpostmaster\fP
-[P]
-If set,
-copies of error messages will be sent to the named
-.i postmaster .
-Only the header of the failed message is sent.
-Errors resulting from messages with a negative precedence will not be 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,
-but it seems to be popular with certain operating systems vendors.
-The address is macro expanded
-at the time of delivery.
-Defaults to no postmaster copies.
-.ip PrivacyOptions=\fI\|opt,opt,...\fP
-[p]
-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, implies noverb.
-needvrfyhelo Insist on HELO or EHLO command before VRFY
-novrfy Disallow VRFY entirely
-noetrn Disallow ETRN entirely
-noverb Disallow VERB entirely
-restrictmailq Restrict mailq command
-restrictqrun Restrict \-q command line flag
-restrictexpand Restrict \-bv and \-v command line flags
-noreceipts Don't return success DSNs\**
-nobodyreturn Don't return the body of a message with DSNs
-goaway Disallow essentially all SMTP status queries
-authwarnings Put X-Authentication-Warning: headers in messages
- and log warnings
-.)b
-.(f
-\**N.B.:
-the
-.b noreceipts
-flag turns off support for RFC 1891
-(Delivery Status Notification).
-.)f
-The
-.q goaway
-pseudo-flag sets all flags except
-.q noreceipts ,
-.q restrictmailq ,
-.q restrictqrun ,
-.q restrictexpand ,
-.q noetrn ,
-and
-.q nobodyreturn .
-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.
-The
-.q restrictexpand
-pseudo-flag instructs
-.i sendmail
-to drop privileges when the
-.b \-bv
-option is given by users who are neither root nor the TrustedUser
-so users cannot read private aliases, forwards, or :include: files.
-It will add the
-.q NonRootSafeAddr
-to the
-.q DontBlameSendmail
-option to prevent misleading unsafe address warnings.
-It also overrides the
-.b \-v
-(verbose) command line option to prevent information leakage.
-Authentication Warnings add warnings about various conditions
-that may indicate attempts to spoof the mail system,
-such as using a non-standard queue directory.
-.ip ProcessTitlePrefix=\fIstring\fP
-[no short name]
-Prefix the process title shown on 'ps' listings with
-.i string .
-The
-.i string
-will be macro processed.
-.ip QueueDirectory=\fIdir\fP
-[Q]
-The QueueDirectory option serves two purposes.
-First, it specifies the directory or set of directories that comprise
-the default queue group.
-Second, it specifies the directory D which is the ancestor of all queue
-directories, and which sendmail uses as its current working directory.
-When sendmail dumps core, it leaves its core files in D.
-There are two cases.
-If \fIdir\fR ends with an asterisk (eg, \fI/var/spool/mqueue/qd*\fR),
-then all of the directories or symbolic links to directories
-beginning with `qd' in
-.i /var/spool/mqueue
-will be used as queue directories of the default queue group,
-and
-.i /var/spool/mqueue
-will be used as the working directory D.
-Otherwise,
-\fIdir\fR must name a directory (usually \fI/var/spool/mqueue\fR):
-the default queue group consists of the single queue directory \fIdir\fR,
-and the working directory D is set to \fIdir\fR.
-To define additional groups of queue directories,
-use the configuration file `Q' command.
-Do not change the queue directory structure
-while sendmail is running.
-.ip QueueFactor=\fIfactor\fP
-[q]
-Use
-.i factor
-as the multiplier in the map function
-to decide when to just queue up jobs rather than run them.
-This value is divided by the difference between the current load average
-and the load average limit
-(\c
-.b QueueLA
-option)
-to determine the maximum message priority
-that will be sent.
-Defaults to 600000.
-.ip QueueLA=\fILA\fP
-[x]
-When the system load average exceeds
-.i LA
-and the
-.b QueueFactor
-(\c
-.b q )
-option divided by the difference in the current load average and the
-.b QueueLA
-option plus one
-is less than the priority of the message,
-just queue messages
-(i.e., don't try to send them).
-Defaults to 8 multiplied by
-the number of processors online on the system
-(if that can be determined).
-.ip QueueFileMode=\fImode\fP
-[no short name]
-Default permissions for queue files (octal).
-If not set, sendmail uses 0600 unless its real
-and effective uid are different in which case it uses 0644.
-.ip QueueSortOrder=\fIalgorithm\fP
-[no short name]
-Sets the
-.i algorithm
-used for sorting the queue.
-Only the first character of the value is used.
-Legal values are
-.q host
-(to order by the name of the first host name of the first recipient),
-.q filename
-(to order by the name of the queue file name),
-.q time
-(to order by the submission/creation time),
-.q random
-(to order randomly),
-.q modification
-(to order by the modification time of the qf file (older entries first)),
-and
-.q priority
-(to order by message priority).
-Host ordering makes better use of the connection cache,
-but may tend to process low priority messages
-that go to a single host
-over high priority messages that go to several hosts;
-it probably shouldn't be used on slow network links.
-Filename and modification time ordering saves the overhead of
-reading all of the queued items
-before starting the queue run.
-Creation (submission) time ordering is almost always a bad idea,
-since it allows large, bulk mail to go out
-before smaller, personal mail,
-but may have applicability on some hosts with very fast connections.
-Random is useful if several queue runners are started by hand
-which try to drain the same queue since odds are they will be working
-on different parts of the queue at the same time.
-Priority ordering is the default.
-.ip QueueTimeout=\fItimeout\fP
-[T]
-A synonym for
-.q Timeout.queuereturn .
-Use that form instead of the
-.q QueueTimeout
-form.
-.ip RandFile
-[no short name]
-Name of file containing random data or the name of the UNIX socket
-if EGD is used.
-A (required) prefix "egd:" or "file:" specifies the type.
-STARTTLS requires this filename if the compile flag HASURANDOMDEV is not set
-(see sendmail/README).
-.ip ResolverOptions=\fIoptions\fP
-[I]
-Set resolver options.
-Values can be set using
-.b + \c
-.i flag
-and cleared using
-.b \- \c
-.i flag ;
-the
-.i flag s
-can be
-.q debug ,
-.q aaonly ,
-.q usevc ,
-.q primary ,
-.q igntc ,
-.q recurse ,
-.q defnames ,
-.q stayopen ,
-.q use_inet6 ,
-or
-.q dnsrch .
-The string
-.q HasWildcardMX
-(without a
-.b +
-or
-.b \- )
-can be specified to turn off matching against MX records
-when doing name canonifications.
-The string
-.q WorkAroundBrokenAAAA
-(without a
-.b +
-or
-.b \- )
-can be specified to work around some broken nameservers
-which return SERVFAIL (a temporary failure) on T_AAAA (IPv6) lookups.
-Notice: it might be necessary to apply the same (or similar) options to
-.i submit.cf
-too.
-.ip RrtImpliesDsn
-[R]
-If this option is set, a
-.q Return-Receipt-To:
-header causes the request of a DSN, which is sent to
-the envelope sender as required by RFC 1891,
-not to the address given in the header.
-.ip RunAsUser=\fIuser\fP
-[no short name]
-The
-.i user
-parameter may be a user name
-(looked up in
-.i /etc/passwd )
-or a numeric user id;
-either form can have
-.q ":group"
-attached
-(where group can be numeric or symbolic).
-If set to a non-zero (non-root) value,
-.i sendmail
-will change to this user id shortly after startup\**.
-.(f
-\**When running as a daemon,
-it changes to this user after accepting a connection
-but before reading any
-.sm SMTP
-commands.
-.)f
-This avoids a certain class of security problems.
-However, this means that all
-.q \&.forward
-and
-.q :include:
-files must be readable by the indicated
-.i user
-and all files to be written must be writable by
-.i user
-Also, all file and program deliveries will be marked unsafe
-unless the option
-.b DontBlameSendmail=NonRootSafeAddr
-is set,
-in which case the delivery will be done as
-.i user .
-It is also incompatible with the
-.b SafeFileEnvironment
-option.
-In other words, it may not actually add much to security on an average system,
-and may in fact detract from security
-(because other file permissions must be loosened).
-However, it should be useful on firewalls and other
-places where users don't have accounts and the aliases file is
-well constrained.
-.ip RecipientFactor=\fIfact\fP
-[y]
-The indicated
-.i fact or
-is added to the priority (thus
-.i lowering
-the priority of the job)
-for each recipient,
-i.e., this value penalizes jobs with large numbers of recipients.
-Defaults to 30000.
-.ip RefuseLA=\fILA\fP
-[X]
-When the system load average exceeds
-.i LA ,
-refuse incoming SMTP connections.
-Defaults to 12 multiplied by
-the number of processors online on the system
-(if that can be determined).
-.ip RetryFactor=\fIfact\fP
-[Z]
-The
-.i fact or
-is added to the priority
-every time a job is processed.
-Thus,
-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.
-Defaults to 90000.
-.ip SafeFileEnvironment=\fIdir\fP
-[no short name]
-If this option is set,
-.i sendmail
-will do a
-.i chroot (2)
-call into the indicated
-.i dir ectory
-before doing any file writes.
-If the file name specified by the user begins with
-.i dir ,
-that partial path name will be stripped off before writing,
-so (for example)
-if the SafeFileEnvironment variable is set to
-.q /safe
-then aliases of
-.q /safe/logs/file
-and
-.q /logs/file
-actually indicate the same file.
-Additionally, if this option is set,
-.i sendmail
-refuses to deliver to symbolic links.
-.ip SaveFromLine
-[f]
-Save
-UNIX-style
-.q From
-lines at the front of headers.
-Normally they are assumed redundant
-and discarded.
-.ip SharedMemoryKey
-[no short name]
-Key to use for shared memory segment;
-if not set (or 0), shared memory will not be used.
-Requires support for shared memory to be compiled into
-.i sendmail .
-If this option is set,
-.i sendmail
-can share some data between different instances.
-For example, the number of entries in a queue directory
-or the available space in a file system.
-This allows for more efficient program execution, since only
-one process needs to update the data instead of each individual
-process gathering the data each time it is required.
-.ip SendMimeErrors
-[j]
-If set, send error messages in MIME format
-(see RFC 2045 and RFC 1344 for details).
-If disabled,
-.i sendmail
-will not return the DSN keyword in response to an EHLO
-and will not do Delivery Status Notification processing as described in
-RFC 1891.
-.ip ServerCertFile
-[no short name]
-File containing the certificate of the server, i.e., this certificate
-is used when sendmail acts as server
-(used for STARTTLS).
-.ip ServerKeyFile
-[no short name]
-File containing the private key belonging to the server certificate
-(used for STARTTLS).
-.ip ServiceSwitchFile=\fIfilename\fP
-[no short name]
-If your host operating system has a service switch abstraction
-(e.g., /etc/nsswitch.conf on Solaris
-or /etc/svc.conf on Ultrix and DEC OSF/1)
-that service will be consulted and this option is ignored.
-Otherwise, this is the name of a file
-that provides the list of methods used to implement particular services.
-The syntax is a series of lines,
-each of which is a sequence of words.
-The first word is the service name,
-and following words are service types.
-The services that
-.i sendmail
-consults directly are
-.q aliases
-and
-.q hosts.
-Service types can be
-.q dns ,
-.q nis ,
-.q nisplus ,
-or
-.q files
-(with the caveat that the appropriate support
-must be compiled in
-before the service can be referenced).
-If ServiceSwitchFile is not specified, it defaults to
-/etc/mail/service.switch.
-If that file does not exist, the default switch is:
-.(b
-aliases files
-hosts dns nis files
-.)b
-The default file is
-.q /etc/mail/service.switch .
-.ip SevenBitInput
-[7]
-Strip input to seven bits for compatibility with old systems.
-This shouldn't be necessary.
-.ip SingleLineFromHeader
-[no short name]
-If set, From: lines that have embedded newlines are unwrapped
-onto one line.
-This is to get around a botch in Lotus Notes
-that apparently cannot understand legally wrapped RFC 822 headers.
-.ip SingleThreadDelivery
-[no short name]
-If set, a client machine will never try to open two SMTP connections
-to a single server machine at the same time,
-even in different processes.
-That is, if another
-.i sendmail
-is already talking to some host a new
-.i sendmail
-will not open another connection.
-This property is of mixed value;
-although this reduces the load on the other machine,
-it can cause mail to be delayed
-(for example, if one
-.i sendmail
-is delivering a huge message, other
-.i sendmail s
-won't be able to send even small messages).
-Also, it requires another file descriptor
-(for the lock file)
-per connection, so you may have to reduce the
-.b ConnectionCacheSize
-option to avoid running out of per-process file descriptors.
-Requires the
-.b HostStatusDirectory
-option.
-.ip SmtpGreetingMessage=\fImessage\fP
-[$e macro]
-The message printed when the SMTP server starts up.
-Defaults to
-.q "$j Sendmail $v ready at $b".
-.ip StatusFile=\fIfile\fP
-[S]
-Log summary statistics in the named
-.i file .
-If no file name is specified, "statistics" is used.
-If not set,
-no summary statistics are saved.
-This file does not grow in size.
-It can be printed using the
-.i mailstats (8)
-program.
-.ip SuperSafe
-[s]
-This option can be set to True, False, or Interactive.
-If set to True,
-.i sendmail
-will be super-safe when running things,
-i.e., always instantiate the queue file,
-even if you are going to attempt immediate delivery.
-.i Sendmail
-always instantiates the queue file
-before returning control to the client
-under any circumstances.
-This should really
-.i always
-be set to True.
-The Interactive value has been introduced in 8.12 and can
-be used together with
-.b DeliveryMode=i .
-It skips some synchronization calls which are effectively
-doubled in the code execution path for this mode.
-.ip TLSSrvOptions
-[no short name]
-List of options for SMTP STARTTLS for the server
-consisting of single characters
-with intervening white space or commas.
-The flag ``V'' disables client verification, and hence
-it is not possible to use a client certificate for relaying.
-Currently there are no other flags available.
-.ip TempFileMode=\fImode\fP
-[F]
-The file mode for transcript files, files to which
-.i sendmail
-delivers directly, files in the
-.b HostStatusDirectory ,
-and
-.b StatusFile .
-It is interpreted in octal by default.
-Defaults to 0600.
-.ip Timeout.\fItype\fP=\|\fItimeout\fP
-[r; subsumes old T option as well]
-Set timeout values.
-For more information,
-see section
-.\" XREF
-4.1.
-.ip TimeZoneSpec=\fItzinfo\fP
-[t]
-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 TrustedUser=\fIuser\fP
-[no short name]
-The
-.i user
-parameter may be a user name
-(looked up in
-.i /etc/passwd )
-or a numeric user id.
-Trusted user for file ownership and starting the daemon. If set, generated
-alias databases and the control socket (if configured) will automatically
-be owned by this user.
-.ip TryNullMXList
-[w]
-If this system is the
-.q best
-(that is, lowest preference)
-MX for a given host,
-its configuration rules 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 UnixFromLine=\fIfromline\fP
-[$l macro]
-Defines the format used when
-.i sendmail
-must add a UNIX-style From_ line
-(that is, a line beginning
-.q From<space>user ).
-Defaults to
-.q "From $g $d" .
-Don't change this unless your system uses a different UNIX mailbox format
-(very unlikely).
-.ip UnsafeGroupWrites
-[no short name]
-If set (default),
-:include: and .forward files that are group writable are considered
-.q unsafe ,
-that is,
-they cannot reference programs or write directly to files.
-World writable :include: and .forward files
-are always unsafe.
-Note: use
-.b DontBlameSendmail
-instead; this option is deprecated.
-.ip UseErrorsTo
-[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.
-This option is disrecommended and deprecated.
-.ip UserDatabaseSpec=\fIudbspec\fP
-[U]
-The user database specification.
-.ip Verbose
-[v]
-Run in verbose mode.
-If this is set,
-.i sendmail
-adjusts options
-.b HoldExpensive
-(old
-.b c )
-and
-.b DeliveryMode
-(old
-.b d )
-so that all mail is delivered completely
-in a single job
-so that you can see the entire delivery process.
-Option
-.b Verbose
-should
-.i never
-be set in the configuration file;
-it is intended for command line use only.
-.ip XscriptFileBufferSize=\fIthreshold\fP
-[no short name]
-Set the
-.i threshold ,
-in bytes,
-before a memory-based
-queue transcript file
-becomes disk-based.
-The default is 4096 bytes.
-.lp
-All options can be specified on the command line using the
-\-O or \-o flag,
-but most will cause
-.i sendmail
-to relinquish its set-user-ID permissions.
-The options that will not cause this are
-SevenBitInput [7],
-EightBitMode [8],
-MinFreeBlocks [b],
-CheckpointInterval [C],
-DeliveryMode [d],
-ErrorMode [e],
-IgnoreDots [i],
-SendMimeErrors [j],
-LogLevel [L],
-MeToo [m],
-OldStyleHeaders [o],
-PrivacyOptions [p],
-SuperSafe [s],
-Verbose [v],
-QueueSortOrder,
-MinQueueAge,
-DefaultCharSet,
-Dial Delay,
-NoRecipientAction,
-ColonOkInAddr,
-MaxQueueRunSize,
-SingleLineFromHeader,
-and
-AllowBogusHELO.
-Actually, PrivacyOptions [p] given on the command line
-are added to those already specified in the
-.i sendmail.cf
-file, i.e., they can't be reset.
-Also, M (define macro) when defining the r or s macros
-is also considered
-.q safe .
-.sh 2 "P \*- Precedence Definitions"
-.pp
-Values for the
-.q "Precedence:"
-field may be defined using the
-.b P
-control line.
-The syntax of this field is:
-.(b
-\fBP\fP\fIname\fP\fB=\fP\fInum\fP
-.)b
-When the
-.i name
-is found in a
-.q Precedence:
-field,
-the message class is set to
-.i num .
-Higher numbers mean higher precedence.
-Numbers less than zero
-have the special property
-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
-Plist=\-30
-Pbulk=\-60
-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 2 "V \*- Configuration Version Level"
-.pp
-To provide compatibility with old configuration files,
-the
-.b V
-line has been added to define some very basic semantics
-of the configuration file.
-These are not intended to be long term supports;
-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 10 config files
-(specifically, 8.10)
-used version level 9 configurations.
-.pp
-.q Old
-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;
-this gives the config file a way of finding out if anything matched.
-(Actually, this just initializes the
-.q host
-map with the
-.q \-a.
-flag \*- you can reset it to anything you prefer
-by declaring the map explicitly.)
-.np
-Default host name extension is consistent throughout processing;
-version level one configurations turned off domain extension
-(that is, adding the local domain name)
-during certain points in processing.
-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
-are passed through a new distinguished ruleset five;
-this can be used to append a local relay.
-This behavior can be prevented by resolving the local name
-with an initial `@'.
-That is, something that resolves to a local mailer and a user name of
-.q vikki
-will be passed through ruleset five,
-but a user name of
-.q @vikki
-will have the `@' stripped,
-will not be passed through ruleset five,
-but will otherwise be treated the same as the prior example.
-The expectation is that this might be used to implement a policy
-where mail sent to
-.q vikki
-was handled by a central hub,
-but mail sent to
-.q vikki@localhost
-was delivered directly.
-.pp
-Version level three files
-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.
-.pp
-Version level six configuration files
-change many of the local processing options
-(such as aliasing and matching the beginning of the address for
-`|' characters)
-to be mailer flags;
-this allows fine-grained control over the special local processing.
-Level six configuration files may also use long option names.
-The
-.b ColonOkInAddr
-option (to allow colons in the local-part of addresses)
-defaults
-.b on
-for lower numbered configuration files;
-the configuration file requires some additional intelligence
-to properly handle the RFC 822 group construct.
-.pp
-Version level seven configuration files
-used new option names to replace old macros
-(\c
-.b $e
-became
-.b SmtpGreetingMessage ,
-.b $l
-became
-.b UnixFromLine ,
-and
-.b $o
-became
-.b OperatorChars .
-Also, prior to version seven,
-the
-.b F=q
-flag (use 250 instead of 252 return value for
-.sm "SMTP VRFY"
-commands)
-was assumed.
-.pp
-Version level eight configuration files allow
-.b $#
-on the left hand side of ruleset lines.
-.pp
-Version level nine configuration files allow
-parentheses in rulesets, i.e. they are not treated
-as comments and hence removed.
-.pp
-Version level ten configuration files allow
-queue group definitions.
-.pp
-The
-.b V
-line may have an optional
-.b / \c
-.i vendor
-to indicate that this configuration file uses modifications
-specific to a particular vendor\**.
-.(f
-\**And of course, vendors are encouraged to add themselves
-to the list of recognized vendors by editing the routine
-.i setvendor
-in
-.i conf.c .
-Please send e-mail to sendmail@Sendmail.ORG
-to register your vendor dialect.
-.)f
-You may use
-.q /Berkeley
-to emphasize that this configuration file
-uses the Berkeley dialect of
-.i sendmail .
-.sh 2 "K \*- Key File Declaration"
-.pp
-Special maps can be defined using the line:
-.(b
-Kmapname mapclass arguments
-.)b
-The
-.i mapname
-is the handle by which this map is referenced in the rewriting rules.
-The
-.i mapclass
-is the name of a type of map;
-these are compiled in to
-.i sendmail .
-The
-.i arguments
-are interpreted depending on the class;
-typically,
-there would be a single argument naming the file containing the map.
-.pp
-Maps are referenced using the syntax:
-.(b
-$( \fImap\fP \fIkey\fP $@ \fIarguments\fP $: \fIdefault\fP $)
-.)b
-where either or both of the
-.i arguments
-or
-.i default
-portion may be omitted.
-The
-.i "$@ arguments"
-may appear more than once.
-The indicated
-.i key
-and
-.i arguments
-are passed to the appropriate mapping function.
-If it returns a value, it replaces the input.
-If it does not return a value and the
-.i default
-is specified, the
-.i default
-replaces the input.
-Otherwise, the input is unchanged.
-.pp
-The
-.i arguments
-are passed to the map for arbitrary use.
-Most map classes can interpolate these arguments
-into their values using the syntax
-.q %\fIn\fP
-(where
-.i n
-is a digit)
-to indicate the corresponding
-.i argument .
-Argument
-.q %0
-indicates the database key.
-For example, the rule
-.(b
-.ta 1.5i
-R$\- ! $+ $: $(uucp $1 $@ $2 $: $2 @ $1 . UUCP $)
-.)b
-Looks up the UUCP name in a (user defined) UUCP map;
-if not found it turns it into
-.q \&.UUCP
-form.
-The database might contain records like:
-.(b
-decvax %1@%0.DEC.COM
-research %1@%0.ATT.COM
-.)b
-Note that
-.i default
-clauses never do this mapping.
-.pp
-The built-in map with both name and class
-.q host
-is the host name canonicalization lookup.
-Thus,
-the syntax:
-.(b
-$(host \fIhostname\fP$)
-.)b
-is equivalent to:
-.(b
-$[\fIhostname\fP$]
-.)b
-.pp
-There are many defined classes.
-.ip dbm
-Database lookups using the ndbm(3) library.
-.i Sendmail
-must be compiled with
-.b NDBM
-defined.
-.ip btree
-Database lookups using the btree interface to the Berkeley DB
-library.
-.i Sendmail
-must be compiled with
-.b NEWDB
-defined.
-.ip hash
-Database lookups using the hash interface to the Berkeley DB
-library.
-.i Sendmail
-must be compiled with
-.b NEWDB
-defined.
-.ip nis
-NIS lookups.
-.i Sendmail
-must be compiled with
-.b NIS
-defined.
-.ip nisplus
-NIS+ lookups.
-.i Sendmail
-must be compiled with
-.b NISPLUS
-defined.
-The argument is the name of the table to use for lookups,
-and the
-.b \-k
-and
-.b \-v
-flags may be used to set the key and value columns respectively.
-.ip hesiod
-Hesiod lookups.
-.i Sendmail
-must be compiled with
-.b HESIOD
-defined.
-.ip ldap
-LDAP X500 directory lookups.
-.i Sendmail
-must be compiled with
-.b LDAPMAP
-defined.
-The map supports most of the standard arguments
-and most of the command line arguments of the
-.i ldapsearch
-program.
-Note that,
-by default,
-if a single query matches multiple values,
-only the first value will be returned
-unless the
-.b \-z
-(value separator)
-map flag is set.
-Also, the
-.b \-1
-map flag will treat a multiple value return
-as if there were no matches.
-.ip netinfo
-NeXT NetInfo lookups.
-.i Sendmail
-must be compiled with
-.b NETINFO
-defined.
-.ip text
-Text file lookups.
-The format of the text file is defined by the
-.b \-k
-(key field number),
-.b \-v
-(value field number),
-and
-.b \-z
-(field delimiter)
-flags.
-.ip ph
-PH query map.
-Contributed and supported by
-Mark Roth, roth@uiuc.edu.
-For more information,
-consult the web site
-.q http://www-dev.cso.uiuc.edu/sendmail/ .
-.ip nsd
-nsd map for IRIX 6.5 and later.
-Contributed and supported by Bob Mende of SGI,
-mende@sgi.com.
-.ip stab
-Internal symbol table lookups.
-Used internally for aliasing.
-.ip implicit
-Really should be called
-.q alias
-\(em this is used to get the default lookups
-for alias files,
-and is the default if no class is specified for alias files.
-.ip user
-Looks up users using
-.i getpwnam (3).
-The
-.b \-v
-flag can be used to specify the name of the field to return
-(although this is normally used only to check the existence
-of a user).
-.ip host
-Canonifies host domain names.
-Given a host name it calls the name server
-to find the canonical name for that host.
-.ip bestmx
-Returns the best MX record for a host name given as the key.
-The current machine is always preferred \*-
-that is, if the current machine is one of the hosts listed as a
-lowest-preference MX record, then it will be guaranteed to be returned.
-This can be used to find out if this machine is the target for an MX record,
-and mail can be accepted on that basis.
-If the
-.b \-z
-flag is given, then all MX names are returned,
-separated by the given delimiter.
-.ip dns
-This map requires the option -R to specify the DNS resource record
-type to lookup. The following types are supported:
-A, AAAA, AFSDB, CNAME, MX, NS, PTR, SRV, and TXT.
-A map lookup will return only one record.
-Hence for some types, e.g., MX records, the return value might be a random
-element of the list due to randomizing in the DNS resolver.
-.ip sequence
-The arguments on the `K' line are a list of maps;
-the resulting map searches the argument maps in order
-until it finds a match for the indicated key.
-For example, if the key definition is:
-.(b
-Kmap1 ...
-Kmap2 ...
-Kseqmap sequence map1 map2
-.)b
-then a lookup against
-.q seqmap
-first does a lookup in map1.
-If that is found, it returns immediately.
-Otherwise, the same key is used for map2.
-.ip syslog
-the key is logged via
-.i syslogd \|(8).
-The lookup returns the empty string.
-.ip switch
-Much like the
-.q sequence
-map except that the order of maps is determined by the service switch.
-The argument is the name of the service to be looked up;
-the values from the service switch are appended to the map name
-to create new map names.
-For example, consider the key definition:
-.(b
-Kali switch aliases
-.)b
-together with the service switch entry:
-.(b
-aliases nis files
-.)b
-This causes a query against the map
-.q ali
-to search maps named
-.q ali.nis
-and
-.q ali.files
-in that order.
-.ip dequote
-Strip double quotes (") from a name.
-It does not strip backslashes,
-and 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.
-.ip regex
-The map definition on the
-.b K
-line contains a regular expression.
-Any key input is compared to that expression using the
-POSIX regular expressions routines regcomp(), regerr(), and regexec().
-Refer to the documentation for those routines for more information
-about the regular expression matching.
-No rewriting of the key is done if the
-.b \-m
-flag is used. Without it, the key is discarded or if
-.b \-s
-if used, it is substituted by the substring matches, delimited by
-.b $|
-or the string specified with the the
-.b \-d
-flag. The flags available for the map are
-.(b
-.ta 4n
--n not
--f case sensitive
--b basic regular expressions (default is extended)
--s substring match
--d set the delimiter used for -s
--a append string to key
--m match only, do not replace/discard value
--D perform no lookup in deferred delivery mode.
-.)b
-The
-.b \-s
-flag can include an optional parameter which can be used
-to select the substrings in the result of the lookup. For example,
-.(b
--s1,3,4
-.)b
-Notes: to match a
-.b $
-in a string,
-\\$$
-must be used.
-If the pattern contains spaces, they must be replaced
-with the blank substitution character, unless it is
-space itself.
-.ip program
-The arguments on the
-.b K
-line are the pathname to a program and any initial parameters to be passed.
-When the map is called,
-the key is added to the initial parameters
-and the program is invoked
-as the default user/group id.
-The first line of standard output is returned as the value of the lookup.
-This has many potential security problems,
-and has terrible performance;
-it should be used only when absolutely necessary.
-.ip macro
-Set or clear a macro value.
-To set a macro,
-pass the value as the first argument in the map lookup.
-To clear a macro,
-do not pass an argument in the map lookup.
-The map always returns the empty string.
-Example of typical usage include:
-.(b
-Kstorage macro
-
-\&...
-
-# set macro ${MyMacro} to the ruleset match
-R$+ $: $(storage {MyMacro} $@ $1 $) $1
-# set macro ${MyMacro} to an empty string
-R$* $: $(storage {MyMacro} $@ $) $1
-# clear macro ${MyMacro}
-R$\- $: $(storage {MyMacro} $) $1
-.)b
-.ip arith
-Perform simple arithmetic operations.
-The operation is given as key, currently +, -, *, /, %,
-|, & (bitwise OR, AND),
-l (for less than), and = are supported.
-The two operands are given as arguments.
-The lookup returns the result of the computation,
-i.e.
-.sm TRUE
-or
-.sm FALSE
-for comparisons, integer values otherwise.
-All options which are possible for maps are ignored.
-A simple example is:
-.(b
-Kcomp arith
-
-\&...
-
-Scheck_etrn
-R$* $: $(comp l $@ $&{load_avg} $@ 7 $) $1
-RFALSE $# error \&...
-.)b
-.pp
-Most of these accept as arguments the same optional flags
-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,
-and
-.i sendmail
-will behave as if the map existed but was empty.
-.ip "\-N, \-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
-.b \-N
-is specified it never tries without a null byte and
-if
-.b \-O
-is specified it never tries with a null byte.
-Setting one of
-these can speed matches but are 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"
-Append the string
-.i x
-on successful matches.
-For example, the default
-.i host
-map appends a dot on successful matches.
-.ip "\-T\fIx\fP"
-Append the string
-.i x
-on temporary failures.
-For example,
-.i x
-would be appended if a DNS lookup returned
-.q "server failed"
-or an NIS lookup could not locate a server.
-See also the
-.b \-t
-flag.
-.ip "\-f"
-Do not fold upper to lower case before looking up the key.
-.ip "\-m"
-Match only (without replacing the value).
-If you only care about the existence of a key and not the value
-(as you might when searching the NIS map
-.q hosts.byname
-for example),
-this flag prevents the map from substituting the value.
-However,
-The \-a argument is still appended on a match,
-and the default is still taken if the match fails.
-.ip "\-k\fIkeycol\fP"
-The key column name (for NIS+) or number
-(for text lookups).
-For LDAP maps this is an LDAP filter string
-in which %s is replaced with the literal contents of the lookup key
-and %0 is replaced with the LDAP escaped contents of the lookup key
-according to RFC 2254.
-.ip "\-v\fIvalcol\fP"
-The value column name (for NIS+) or number
-(for text lookups).
-For LDAP maps this is the name of one or more
-attributes to be returned;
-multiple attributes can be separated by commas.
-If not specified, all attributes found in the match
-will be returned.
-.ip "\-z\fIdelim\fP"
-The column delimiter (for text lookups).
-It can be a single character or one of the special strings
-.q \|\en
-or
-.q \|\et
-to indicate newline or tab respectively.
-If omitted entirely,
-the column separator is any sequence of white space.
-For LDAP maps this is the separator character
-to combine multiple values
-into a single return string.
-If not set,
-the LDAP lookup will only return the first match found.
-.ip "\-t"
-Normally, when a map attempts to do a lookup
-and the server fails
-(e.g.,
-.i sendmail
-couldn't contact any name server;
-this is
-.i not
-the same as an entry not being found in the map),
-the message being processed is queued for future processing.
-The
-.b \-t
-flag turns off this behavior,
-letting the temporary failure (server down)
-act as though it were a permanent failure (entry not found).
-It is particularly useful for DNS lookups,
-where someone else's misconfigured name server can cause problems
-on your machine.
-However, care must be taken to ensure that you don't bounce mail
-that would be resolved correctly if you tried again.
-A common strategy is to forward such mail
-to another, possibly better connected, mail server.
-.ip "\-D"
-Perform no lookup in deferred delivery mode.
-This flag is set by default for the
-.i host
-map.
-.ip "\-S\fIspacesub\fP
-The character to use to replace space characters
-after a successful map lookup (esp. useful for regex
-and syslog maps).
-.ip "\-s\fIspacesub\fP
-For the dequote map only,
-the character to use to replace space characters
-after a successful dequote.
-.ip "\-q"
-Don't dequote the key before lookup.
-.ip "\-L\fIlevel\fP
-For the syslog map only, it specifies the level
-to use for the syslog call.
-.ip "\-A"
-When rebuilding an alias file,
-the
-.b \-A
-flag causes duplicate entries in the text version
-to be merged.
-For example, two entries:
-.(b
-list: user1, user2
-list: user3
-.)b
-would be treated as though it were the single entry
-.(b
-list: user1, user2, user3
-.)b
-in the presence of the
-.b \-A
-flag.
-.pp
-Some additional flags are available for the host and dns maps:
-.ip "\-d"
-delay: specify the resolver's retransmission time interval (in seconds).
-.ip "\-r"
-retry: specify the number of times to retransmit a resolver query.
-.pp
-The following additional flags are present in the ldap map only:
-.ip "\-R"
-Do not auto chase referrals. sendmail must be compiled with
-.b \-DLDAP_REFERRALS
-to use this flag.
-.ip "\-n"
-Retrieve attribute names only.
-.ip "\-V\fIsep\fP"
-Retrieve both attributes name and value(s),
-separated by
-.i sep .
-.ip "\-r\fIderef\fP"
-Set the alias dereference option to one of never, always, search, or find.
-.ip "\-s\fIscope\fP"
-Set search scope to one of base, one (one level), or sub (subtree).
-.ip "\-h\fIhost\fP"
-LDAP server hostname.
-Some LDAP libraries allow you to specify multiple, space-separated hosts for
-redundancy.
-In addition, each of the hosts listed can be followed by a colon and a port
-number to override the default LDAP port.
-.ip "\-b\fIbase\fP"
-LDAP search base.
-.ip "\-p\fIport\fP"
-LDAP service port.
-.ip "\-l\fItimelimit\fP"
-Time limit for LDAP queries.
-.ip "\-Z\fIsizelimit\fP"
-Size (number of matches) limit for LDAP queries.
-.ip "\-d\fIdistinguished_name\fP"
-The distinguished name to use to login to the LDAP server.
-.ip "\-M\fImethod\fP"
-The method to authenticate to the LDAP server.
-Should be one of
-.b LDAP_AUTH_NONE ,
-.b LDAP_AUTH_SIMPLE ,
-or
-.b LDAP_AUTH_KRBV4 .
-.ip "\-P\fIpasswordfile\fP"
-The file containing the secret key for the
-.b LDAP_AUTH_SIMPLE
-authentication method
-or the name of the Kerberos ticket file for
-.b LDAP_AUTH_KRBV4 .
-.ip "\-1"
-Force LDAP searches to only succeed if a single match is found.
-If multiple values are found,
-the search is treated as if no match was found.
-.pp
-The
-.i dbm
-map appends the strings
-.q \&.pag
-and
-.q \&.dir
-to the given filename;
-the
-.i hash
-and
-.i btree
-maps append
-.q \&.db .
-For example, the map specification
-.(b
-Kuucp dbm \-o \-N /etc/mail/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
-/etc/mail/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
-Do not fold upper to lower case in the map.
-.ip \-N
-Include null bytes in keys.
-.ip \-o
-Append to an existing (old) file.
-.ip \-r
-Allow replacement of existing keys;
-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.
-.pp
-New classes can be added in the routine
-.b setupmaps
-in file
-.b conf.c .
-.sh 2 "Q \*- Queue Group Declaration"
-.pp
-In addition to the option
-.i QueueDirectory,
-queue groups can be declared that define a (group of) queue directories
-under a common name.
-The syntax is as follows:
-.(b F
-.b Q \c
-.i name
-{, \c
-.i field =\c
-.i value \|}+
-.)b
-where
-.i name
-is the symbolic name of the queue group under which
-it can be referenced in various places
-and the
-.q field=name
-pairs define attributes of the queue group.
-Fields are:
-.ip Flags
-Flags for this queue group.
-.ip Nice
-The nice(2) increment for the queue group.
-This value must be greater or equal zero.
-.ip Interval
-The time between two queue runs.
-.ip Path
-The queue directory of the group (required).
-.ip Runners
-The number of parallel runners processing the queue.
-Note that
-.b F=f
-must be set if this value is greater than one.
-.ip Jobs
-The maximum number of jobs (messages delivered) per queue run.
-.ip recipients
-The maximum number of recipients per envelope.
-Envelopes with more than this number of recipients will be split
-into multiple envelopes in the same queue directory.
-The default value 0 means no limit.
-.lp
-Only the first character of the field name is checked.
-.pp
-By default, a queue group named
-.i mqueue
-is defined that uses the value of the
-.i QueueDirectory
-option as path.
-Notice: all paths that are used for queue groups must
-be subdirectories of
-.i QueueDirectory .
-Since they can be symbolic links, this isn't a real restriction,
-If
-.i QueueDirectory
-uses a wildcard, then the directory one level up is considered
-the ``base'' directory which all other queue directories must share.
-Please make sure that the queue directories do not overlap,
-e.g., do not specify
-.(b
-O QueueDirectory=/var/spool/mqueue/*
-Qone, P=/var/spool/mqueue/dir1
-Qtwo, P=/var/spool/mqueue/dir2
-.)b
-because this also includes
-.q dir1
-and
-.q dir2
-in the default queue group.
-However,
-.(b
-O QueueDirectory=/var/spool/mqueue/main*
-Qone, P=/var/spool/mqueue/dir
-Qtwo, P=/var/spool/mqueue/other*
-.)b
-is a valid queue group specification.
-.pp
-Options listed in the ``Flags'' field can be used to modify
-the behavior of a queue group.
-The ``f'' flag must be set if multiple queue runners are
-supposed to work on the entries in a queue group.
-Otherwise
-.i sendmail
-will work on the entries strictly sequentially.
-.pp
-The ``Interval'' field sets the time between queue runs.
-If no queue group specific interval is set, then the parameter of the
-.b -q
-option from the command line is used.
-.pp
-To control the overall number of concurrently active queue runners
-the option
-.b MaxQueueChildren
-can be set.
-This limits the number of processes used for running the queues to
-.b MaxQueueChildren ,
-though at any one time fewer processes may be active
-as a result of queue options, completed queue runs, system load, etc.
-.pp
-The maximum number of queue runners for an individual queue group can be
-controlled via the
-.b Runners
-option.
-If set to 0, entries in the queue will not be processed, which
-is useful to ``quarantine'' queue files.
-The number of runners per queue group may also be set with the option
-.b MaxRunnersPerQueue ,
-which applies to queue groups that have no individual limit.
-That is, the default value for
-.b Runners
-is
-.b MaxRunnersPerQueue
-if set, otherwise 1.
-.pp
-The field Jobs describes the maximum number of jobs
-(messages delivered) per queue run, which is the queue group specific
-value of
-.b MaxQueueRunSize .
-.pp
-Notice: queue groups should be declared after all queue related options
-have been set because queue groups take their defaults from those options.
-If an option is set after a queue group declaration, the values of
-options in the queue group are set to the defaults of
-.i sendmail
-unless explicitly set in the declaration.
-.pp
-Each envelope is assigned to a queue group based on the algorithm
-described in section
-``Queue Groups and Queue Directories''.
-.sh 2 "X \*- Mail Filter (Milter) Definitions"
-.pp
-The
-.i sendmail
-Mail Filter API (Milter) is designed to allow third-party programs access
-to mail messages as they are being processed in order to filter
-meta-information and content.
-They are declared in the configuration file as:
-.(b F
-.b X \c
-.i name
-{, \c
-.i field =\c
-.i value \|}*
-.)b
-where
-.i name
-is the name of the filter
-(used internally only)
-and the
-.q field=name
-pairs define attributes of the filter.
-Also see the documentation for the
-.b InputMailFilters
-option for more information.
-.pp
-Fields are:
-.(b
-.ta 1i
-Socket The socket specification
-Flags Special flags for this filter
-Timeouts Timeouts for this filter
-.)b
-Only the first character of the field name is checked
-(it's case-sensitive).
-.pp
-The socket specification is one of the following forms:
-.(b F
-.b S= \c
-.b inet \c
-.b :
-.i port
-.b @
-.i host
-.)b
-.(b F
-.b S= \c
-.b inet6 \c
-.b :
-.i port
-.b @
-.i host
-.)b
-.(b F
-.b S= \c
-.b local \c
-.b :
-.i path
-.)b
-The first two describe an IPv4 or IPv6 socket listening on a certain
-.i port
-at a given
-.i host
-or IP address.
-The final form describes a named socket on the filesystem at the given
-.i path .
-.pp
-The following flags may be set in the filter description.
-.nr ii 4n
-.ip R
-Reject connection if filter unavailable.
-.ip T
-Temporary fail connection if filter unavailable.
-.pp
-The timeouts can be set using the four fields inside of the
-.b T=
-equate:
-.nr ii 4n
-.ip C
-Timeout for connecting to a filter.
-If set to 0, the system's
-.i connect()
-timeout will be used.
-.ip S
-Timeout for sending information from the MTA to a filter.
-.ip R
-Timeout for reading reply from the filter.
-.ip E
-Overall timeout between sending end-of-message to filter and waiting for
-the final acknowledgment.
-.pp
-Note the separator between each timeout field is a
-.b ';' .
-The default values (if not set) are:
-.b T=C:5m;S:10s;R:10s;E:5m
-where
-.b s
-is seconds and
-.b m
-is minutes.
-.pp
-Examples:
-.(b
-Xfilter1, S=local:/var/run/f1.sock, F=R
-Xfilter2, S=inet6:999@localhost, F=T, T=S:1s;R:1s;E:5m
-Xfilter3, S=inet:3333@localhost, T=C:2m
-.)b
-.sh 2 "The User Database"
-.pp
-The user database is deprecated in favor of ``virtusertable''
-and ``genericstable'' as explained in the file
-.b cf/README .
-If you have a version of
-.i sendmail
-with the user database package
-compiled in,
-the handling of sender and recipient addresses
-is modified.
-.pp
-The location of this database is controlled with the
-.b UserDatabaseSpec
-option.
-.sh 3 "Structure of the user database"
-.pp
-The database is a sorted (BTree-based) structure.
-User records are stored with the key:
-.(b
-\fIuser-name\fP\fB:\fP\fIfield-name\fP
-.)b
-The sorted database format ensures that user records are clustered together.
-Meta-information is always stored with a leading colon.
-.pp
-Field names define both the syntax and semantics of the value.
-Defined fields include:
-.nr ii 1i
-.ip maildrop
-The delivery address for this user.
-There may be multiple values of this record.
-In particular,
-mailing lists will have one
-.i maildrop
-record for each user on the list.
-.ip "mailname"
-The outgoing mailname for this user.
-For each outgoing name,
-there should be an appropriate
-.i maildrop
-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
-The office address for this user.
-.ip office-phone
-The office phone number for this user.
-.ip office-fax
-The office FAX number for this user.
-.ip home-address
-The home address for this user.
-.ip home-phone
-The home phone number for this user.
-.ip home-fax
-The home FAX number for this user.
-.ip project
-A (short) description of the project this person is affiliated with.
-In the University this is often just the name of their graduate advisor.
-.ip plan
-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
-.i sendmail :
-.i maildrop
-and
-.i mailname .
-A
-.i finger
-program that uses the other fields is planned.
-.sh 3 "User database semantics"
-.pp
-When the rewriting rules submit an address to the local mailer,
-the user name is passed through the alias file.
-If no alias is found (or if the alias points back to the same address),
-the name (with
-.q :maildrop
-appended)
-is then used as a key in the user database.
-If no match occurs (or if the maildrop points at the same address),
-forwarding is tried.
-.pp
-If the first token of the user name returned by ruleset 0
-is an
-.q @
-sign, the user database lookup is skipped.
-The intent is that the user database will act as a set of defaults
-for a cluster (in our case, the Computer Science Division);
-mail sent to a specific machine should ignore these defaults.
-.pp
-When mail is sent,
-the name of the sending user is looked up in the database.
-If that user has a
-.q mailname
-record,
-the value of that record is used as their outgoing name.
-For example, I might have a record:
-.(b
-eric:mailname Eric.Allman@CS.Berkeley.EDU
-.)b
-This would cause my outgoing mail to be sent as Eric.Allman.
-.pp
-If a
-.q maildrop
-is found for the user,
-but no corresponding
-.q mailname
-record exists,
-the record
-.q :default:mailname
-is consulted.
-If present, this is the name of a host to override the local host.
-For example, in our case we would set it to
-.q CS.Berkeley.EDU .
-The effect is that anyone known in the database
-gets their outgoing mail stamped as
-.q user@CS.Berkeley.EDU ,
-but people not listed in the database use the local hostname.
-.sh 3 "Creating the database\**"
-.(f
-\**These instructions are known to be incomplete.
-Other features are available which provide similar functionality,
-e.g., virtual hosting and mapping local addresses into a
-generic form as explained in cf/README.
-.)f
-.pp
-The user database is built from a text file
-using the
-.i makemap
-utility
-(in the distribution in the makemap subdirectory).
-The text file is a series of lines corresponding to userdb records;
-each line has a key and a value separated by white space.
-The key is always in the format described above \*-
-for example:
-.(b
-eric:maildrop
-.)b
-This file is normally installed in a system directory;
-for example, it might be called
-.i /etc/mail/userdb .
-To make the database version of the map, run the program:
-.(b
-makemap btree /etc/mail/userdb < /etc/mail/userdb
-.)b
-Then create a config file that uses this.
-For example, using the V8 M4 configuration, include the
-following line in your .mc file:
-.(b
-define(\`confUSERDB_SPEC\', /etc/mail/userdb.db)
-.)b
-.sh 1 "OTHER CONFIGURATION"
-.pp
-There are some configuration changes that can be made by
-recompiling
-.i sendmail .
-This section describes what changes can be made
-and what has to be modified to make them.
-In most cases this should be unnecessary
-unless you are porting
-.i sendmail
-to a new environment.
-.sh 2 "Parameters in devtools/OS/$oscf"
-.pp
-These parameters are intended to describe the compilation environment,
-not site policy,
-and should normally be defined in the operating system
-configuration file.
-.b "This section needs a complete rewrite."
-.ip NDBM
-If set,
-the new version of the DBM library
-that allows multiple databases will be used.
-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.
-If NEWDB and NDBM are both set,
-.i sendmail
-will read DBM 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
-an alias file includes the substring
-.q /yp/
-in the name.
-This is intended for compatibility with Sun Microsystems'
-.i mkalias
-program used on YP masters.
-.ip NISPLUS
-Compile in support for NIS+.
-.ip NETINFO
-Compile in support for NetInfo (NeXT stations).
-.ip LDAPMAP
-Compile in support for LDAP X500 queries.
-Requires libldap and liblber
-from the Umich LDAP 3.2 or 3.3 release
-or equivalent libraries for other LDAP libraries
-such as OpenLDAP.
-.ip HESIOD
-Compile in support for Hesiod.
-.ip MAP_NSD
-Compile in support for IRIX NSD lookups.
-.ip MAP_REGEX
-Compile in support for regular expression matching.
-.ip DNSMAP
-Compile in support for DNS map lookups in the
-.i sendmail.cf
-file.
-.ip PH_MAP
-Compile in support for ph lookups.
-.ip SASL
-Compile in support for SASL,
-a required component for SMTP Authentication support.
-.ip STARTTLS
-Compile in support for STARTTLS.
-.ip EGD
-Compile in support for the "Entropy Gathering Daemon"
-to provide better random data for TLS.
-.ip TCPWRAPPERS
-Compile in support for TCP Wrappers.
-.ip _PATH_SENDMAILCF
-The pathname of the sendmail.cf file.
-.ip _PATH_SENDMAILPID
-The pathname of the sendmail.pid file.
-.ip SM_CONF_SHM
-Compile in support for shared memory, see section about
-"/var/spool/mqueue".
-.ip MILTER
-Compile in support for contacting external mail filters built with the
-Milter API.
-.pp
-There are also several compilation flags to indicate the environment
-such as
-.q _AIX3
-and
-.q _SCO_unix_ .
-See the sendmail/README
-file for the latest scoop on these flags.
-.sh 2 "Parameters in sendmail/conf.h"
-.pp
-Parameters and compilation options
-are defined in conf.h.
-Most of these need not normally be tweaked;
-common parameters are all in sendmail.cf.
-However, the sizes of certain primitive vectors, etc.,
-are included in this file.
-The numbers following the parameters
-are their default value.
-.pp
-This document is not the best source of information
-for compilation flags in conf.h \(em
-see sendmail/README or sendmail/conf.h itself.
-.nr ii 1.2i
-.ip "MAXLINE [2048]"
-The maximum line length of any input line.
-If message lines exceed this length
-they will still be processed correctly;
-however, header lines,
-configuration file lines,
-alias lines,
-etc.,
-must fit within this limit.
-.ip "MAXNAME [256]"
-The maximum length of any name,
-such as a host or a user name.
-.ip "MAXPV [256]"
-The maximum number of parameters to any mailer.
-This limits the number of recipients that may be passed in one transaction.
-It can be set to any arbitrary number above about 10,
-since
-.i sendmail
-will break up a delivery into smaller batches as needed.
-A higher number may reduce load on your system, however.
-.ip "MAXQUEUEGROUPS [50]"
-The maximum number of queue groups.
-.ip "MAXATOM [1000]"
-The maximum number of atoms
-(tokens)
-in a single address.
-For example,
-the address
-.q "eric@CS.Berkeley.EDU"
-is seven atoms.
-.ip "MAXMAILERS [25]"
-The maximum number of mailers that may be defined
-in the configuration file.
-This value is defined in include/sendmail/sendmail.h.
-.ip "MAXRWSETS [200]"
-The maximum number of rewriting sets
-that may be defined.
-The first half of these are reserved for numeric specification
-(e.g., ``S92''),
-while the upper half are reserved for auto-numbering
-(e.g., ``Sfoo'').
-Thus, with a value of 200 an attempt to use ``S99'' will succeed,
-but ``S100'' will fail.
-.ip "MAXPRIORITIES [25]"
-The maximum number of values for the
-.q Precedence:
-field that may be defined
-(using the
-.b P
-line in sendmail.cf).
-.ip "MAXUSERENVIRON [100]"
-The maximum number of items in the user environment
-that will be passed to subordinate mailers.
-.ip "MAXMXHOSTS [100]"
-The maximum number of MX records we will accept for any single host.
-.ip "MAXMAPSTACK [12]"
-The maximum number of maps that may be "stacked" in a
-.b sequence
-class map.
-.ip "MAXMIMEARGS [20]"
-The maximum number of arguments in a MIME Content-Type: header;
-additional arguments will be ignored.
-.ip "MAXMIMENESTING [20]"
-The maximum depth to which MIME messages may be nested
-(that is, nested Message or Multipart documents;
-this does not limit the number of components in a single Multipart document).
-.ip "MAXDAEMONS [10]"
-The maximum number of sockets sendmail will open for accepting connections
-on different ports.
-.ip "MAXMACNAMELEN [25]"
-The maximum length of a macro name.
-.lp
-A number of other compilation options exist.
-These specify whether or not specific code should be compiled in.
-Ones marked with \(dg
-are 0/1 valued.
-.nr ii 1.2i
-.ip NETINET\(dg
-If set,
-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.
-Defaults on;
-turn it off in the Makefile
-if your system doesn't support the Internet protocols.
-.ip NETINET6\(dg
-If set,
-support for IPv6 networking is compiled in.
-It must be separately enabled by adding
-.b DaemonPortOptions
-settings.
-.ip NETISO\(dg
-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 NETUNIX\(dg
-If set,
-support for UNIX domain sockets is compiled in.
-This is used for control socket support.
-.ip LOG
-If set,
-the
-.i syslog
-routine in use at some sites is used.
-This makes an informational log record
-for each message processed,
-and makes a higher priority log record
-for internal system errors.
-.b "STRONGLY RECOMMENDED"
-\(em if you want no logging, turn it off in the configuration file.
-.ip MATCHGECOS\(dg
-Compile in the code to do ``fuzzy matching'' on the GECOS field
-in /etc/passwd.
-This also requires that the
-.b MatchGECOS
-option be turned on.
-.ip NAMED_BIND\(dg
-Compile in code to use the
-Berkeley Internet Name Domain (BIND) server
-to resolve TCP/IP host names.
-.ip NOTUNIX
-If you are using a non-UNIX mail format,
-you can set this flag to turn off special processing
-of UNIX-style
-.q "From "
-lines.
-.ip USERDB\(dg
-Include the
-.b experimental
-Berkeley user information database package.
-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.
-.lp
-The following options are normally turned on
-in per-operating-system clauses in conf.h.
-.ip IDENTPROTO\(dg
-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.
-.ip SYSTEM5
-Set all of the compilation parameters appropriate for System V.
-.ip HASFLOCK\(dg
-Use Berkeley-style
-.b flock
-instead of System V
-.b lockf
-to do file locking.
-Due to the highly unusual semantics of locks
-across forks in
-.b lockf ,
-this should always be used if at all possible.
-.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 HASGETDTABLESIZE
-Set this if you have the
-.i getdtablesize (2)
-system call.
-.ip HASWAITPID
-Set this if you have the
-.i haswaitpid (2)
-system call.
-.ip FAST_PID_RECYCLE
-Set this if your system can possibly
-reuse the same pid in the same second of time.
-.ip SFS_TYPE
-The mechanism that can be used to get file system capacity information.
-The values can be one of
-SFS_USTAT (use the ustat(2) syscall),
-SFS_4ARGS (use the four argument statfs(2) syscall),
-SFS_VFS (use the two argument statfs(2) syscall including <sys/vfs.h>),
-SFS_MOUNT (use the two argument statfs(2) syscall including <sys/mount.h>),
-SFS_STATFS (use the two argument statfs(2) syscall including <sys/statfs.h>),
-SFS_STATVFS (use the two argument statfs(2) syscall including <sys/statvfs.h>),
-or
-SFS_NONE (no way to get this information).
-.ip LA_TYPE
-The load average type.
-Details are described below.
-.lp
-The are several built-in ways of computing the load average.
-.i Sendmail
-tries to auto-configure them based on imperfect guesses;
-you can select one using the
-.i cc
-option
-.b \-DLA_TYPE= \c
-.i type ,
-where
-.i type
-is:
-.ip LA_INT
-The kernel stores the load average in the kernel as an array of long integers.
-The actual values are scaled by a factor FSCALE
-(default 256).
-.ip LA_SHORT
-The kernel stores the load average in the kernel as an array of short integers.
-The actual values are scaled by a factor FSCALE
-(default 256).
-.ip LA_FLOAT
-The kernel stores the load average in the kernel as an array of
-double precision floats.
-.ip LA_MACH
-Use MACH-style load averages.
-.ip LA_SUBR
-Call the
-.i getloadavg
-routine to get the load average as an array of doubles.
-.ip LA_ZERO
-Always return zero as the load average.
-This is the fallback case.
-.lp
-If type
-.sm LA_INT ,
-.sm LA_SHORT ,
-or
-.sm LA_FLOAT
-is specified,
-you may also need to specify
-.sm _PATH_UNIX
-(the path to your system binary)
-and
-.sm LA_AVENRUN
-(the name of the variable containing the load average in the kernel;
-usually
-.q _avenrun
-or
-.q avenrun ).
-.sh 2 "Configuration in sendmail/conf.c"
-.pp
-The following changes can be made in conf.c.
-.sh 3 "Built-in Header Semantics"
-.pp
-Not all header semantics are defined in the configuration file.
-Header lines that should only be included by certain mailers
-(as well as other more obscure semantics)
-must be specified in the
-.i HdrInfo
-table in
-.i conf.c .
-This table contains the header name
-(which should be in all lower case)
-and a set of header control flags (described below),
-The flags are:
-.ip H_ACHECK
-Normally when the check is made to see if a header line is compatible
-with a mailer,
-.i sendmail
-will not delete an existing line.
-If this flag is set,
-.i sendmail
-will delete
-even existing header lines.
-That is,
-if this bit is set and the mailer does not have flag bits set
-that intersect with the required mailer flags
-in the header definition in
-sendmail.cf,
-the header line is
-.i always
-deleted.
-.ip H_EOH
-If this header field is set,
-treat it like a blank line,
-i.e.,
-it will signal the end of the header
-and the beginning of the message text.
-.ip H_FORCE
-Add this header entry
-even if one existed in the message before.
-If a header entry does not have this bit set,
-.i sendmail
-will not add another header line if a header line
-of this name already existed.
-This would normally be used to stamp the message
-by everyone who handled it.
-.ip H_TRACE
-If set,
-this is a timestamp
-(trace)
-field.
-If the number of trace fields in a message
-exceeds a preset amount
-the message is returned
-on the assumption that it has an aliasing loop.
-.ip H_RCPT
-If set,
-this field contains recipient addresses.
-This is used by the
-.b \-t
-flag to determine who to send to
-when it is collecting recipients from the message.
-.ip H_FROM
-This flag indicates that this field
-specifies a sender.
-The order of these fields in the
-.i HdrInfo
-table specifies
-.i sendmail 's
-preference
-for which field to return error messages to.
-.ip H_ERRORSTO
-Addresses in this header should receive error messages.
-.ip H_CTE
-This header is a Content-Transfer-Encoding header.
-.ip H_CTYPE
-This header is a Content-Type header.
-.ip H_STRIPVAL
-Strip the value from the header (for Bcc:).
-.nr ii 5n
-.lp
-Let's look at a sample
-.i HdrInfo
-specification:
-.(b
-.ta 4n +\w'"content-transfer-encoding", 'u
-struct hdrinfo HdrInfo[] =
-\&{
- /* originator fields, most to least significant */
- "resent-sender", H_FROM,
- "resent-from", H_FROM,
- "sender", H_FROM,
- "from", H_FROM,
- "full-name", H_ACHECK,
- "errors-to", H_FROM\^|\^H_ERRORSTO,
- /* destination fields */
- "to", H_RCPT,
- "resent-to", H_RCPT,
- "cc", H_RCPT,
- "bcc", H_RCPT\^|\^H_STRIPVAL,
- /* message identification and control */
- "message", H_EOH,
- "text", H_EOH,
- /* trace fields */
- "received", H_TRACE\^|\^H_FORCE,
- /* miscellaneous fields */
- "content-transfer-encoding", H_CTE,
- "content-type", H_CTYPE,
-
- NULL, 0,
-};
-.)b
-This structure indicates that the
-.q To: ,
-.q Resent-To: ,
-and
-.q Cc:
-fields
-all specify recipient addresses.
-Any
-.q Full-Name:
-field will be deleted unless the required mailer flag
-(indicated in the configuration file)
-is specified.
-The
-.q Message:
-and
-.q Text:
-fields will terminate the header;
-these are used by random dissenters around the network world.
-The
-.q Received:
-field will always be added,
-and can be used to trace messages.
-.pp
-There are a number of important points here.
-First,
-header fields are not added automatically just because they are in the
-.i HdrInfo
-structure;
-they must be specified in the configuration file
-in order to be added to the message.
-Any header fields mentioned in the configuration file but not
-mentioned in the
-.i HdrInfo
-structure have default processing performed;
-that is,
-they are added unless they were in the message already.
-Second,
-the
-.i HdrInfo
-structure only specifies cliched processing;
-certain headers are processed specially by ad hoc code
-regardless of the status specified in
-.i HdrInfo .
-For example,
-the
-.q Sender:
-and
-.q From:
-fields are always scanned on ARPANET mail
-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.
-The
-.q "From:"
-and
-.q "Full-Name:"
-fields are used to determine the full name of the sender
-if possible;
-this is stored in the macro
-.b $x
-and used in a number of ways.
-.sh 3 "Restricting Use of Email"
-.pp
-If it is necessary to restrict mail through a relay,
-the
-.i checkcompat
-routine can be modified.
-This routine is called for every recipient address.
-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 )
-if the message is rejected.
-For example,
-.i checkcompat
-could read:
-.(b
-.re
-.sz -1
-.ta 4n +4n +4n +4n +4n +4n +4n
-int
-checkcompat(to, e)
- register ADDRESS *to;
- register ENVELOPE *e;
-\&{
- 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 && bitnset(M_LOCALMAILER, to\->q_mailer))
- {
- usrerr("Message too large for non-local delivery");
- e\->e_flags |= EF_NORETURN;
- return (EX_UNAVAILABLE);
- }
- return (EX_OK);
-}
-.sz
-.)b
-This would reject messages greater than 50000 bytes
-unless they were local.
-The
-.i EF_NORETURN
-flag can be set in
-.i e\(->e_flags
-to suppress the return of the actual body
-of the message in the error return.
-The actual use of this routine is highly dependent on the
-implementation,
-and use should be limited.
-.sh 3 "New Database Map Classes"
-.pp
-New key maps can be added by creating a class initialization function
-and a lookup function.
-These are then added to the routine
-.i setupmaps.
-.pp
-The initialization function is called as
-.(b
-\fIxxx\fP_map_init(MAP *map, char *args)
-.)b
-The
-.i map
-is an internal data structure.
-The
-.i args
-is a pointer to the portion of the configuration file line
-following the map class name;
-flags and filenames can be extracted from this line.
-The initialization function must return
-.sm true
-if it successfully opened the map,
-.sm false
-otherwise.
-.pp
-The lookup function is called as
-.(b
-\fIxxx\fP_map_lookup(MAP *map, char buf[], char **av, int *statp)
-.)b
-The
-.i map
-defines the map internally.
-The
-.i buf
-has the input key.
-This may be (and often is) used destructively.
-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.
-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;
- 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 (RefuseLA > 0 && 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.
-If you are porting to a new environment
-you may need to add some new tweaks.\**
-.(f
-\**If you do, please send updates to
-sendmail@Sendmail.ORG.
-.)f
-.sh 2 "Configuration in sendmail/daemon.c"
-.pp
-The file
-.i sendmail/daemon.c
-contains a number of routines that are dependent
-on the local networking environment.
-The version supplied assumes you have BSD style sockets.
-.pp
-In previous releases,
-we recommended that you modify the routine
-.i maphostname
-if you wanted to generalize
-.b $[
-\&...\&
-.b $]
-lookups.
-We now recommend that you create a new keyed map instead.
-.sh 2 "STARTTLS"
-.pp
-In this section we assume that
-.i sendmail
-has been compiled with support for STARTTLS.
-To properly understand the use of STARTTLS in
-.i sendmail ,
-it is necessary to understand at least some basics about X.509 certificates
-and public key cryptography.
-This information can be found in books about SSL/TLS
-or on WWW sites, e.g.,
-.q http://www.OpenSSL.org/ .
-.sh 3 "Certificates for STARTTLS"
-.pp
-When acting as a server,
-.i sendmail
-requires X.509 certificates to support STARTTLS:
-one as certificate for the server (ServerCertFile and corresponding
-private ServerKeyFile)
-at least one root CA (CACertFile),
-i.e., a certificate that is used to sign other certificates,
-and a path to a directory which contains other CAs (CACertPath).
-The file specified via
-CACertFile
-can contain several certificates of CAs.
-The DNs of these certificates are sent
-to the client during the TLS handshake (as part of the
-CertificateRequest) as the list of acceptable CAs.
-However, do not list too many root CAs in that file, otherwise
-the TLS handshake may fail; e.g.,
-.(b
-error:14094417:SSL routines:SSL3_READ_BYTES:
-sslv3 alert illegal parameter:s3_pkt.c:964:SSL alert number 47
-.)b
-You should probably put only the CA cert into that file
-that signed your own cert(s), or at least only those you trust.
-The CACertPath directory must contain the hashes of each CA certificate
-as filenames (or as links to them).
-Symbolic links can be generated with the following
-two (Bourne) shell commands:
-.(b
-C=FileName_of_CA_Certificate
-ln -s $C `openssl x509 -noout -hash < $C`.0
-.)b
-An X.509 certificate is also required for authentication in client mode
-(ClientCertFile and corresponding private ClientKeyFile), however,
-.i sendmail
-will always use STARTTLS when offered by a server.
-The client and server certificates can be identical.
-Certificates can be obtained from a certificate authority
-or created with the help of OpenSSL.
-The required format for certificates and private keys is PEM.
-To allow for automatic startup of sendmail, private keys
-(ServerKeyFile, ClientKeyFile)
-must be stored unencrypted.
-The keys are only protected by the permissions of the file system.
-Never make a private key available to a third party.
-.sh 3 "Encoding of STARTTLS related Macros"
-.pp
-Macros that contain STARTTLS related data which comes from outside
-sources, e.g., all macros containing information from certificates,
-are encoded to avoid problems with non-printable or special characters.
-The latter are '<', '>', '(', ')', '"', '+', and ' '.
-All of these characters are replaced by their value in hexadecimal
-with a leading '+'.
-For example:
-.(b
-/C=US/ST=California/O=endmail.org/OU=private/CN=Darth Mail (Cert)/
-Email=darth+cert@endmail.org
-.)b
-is encoded as:
-.(b
-/C=US/ST=California/O=endmail.org/OU=private/
-CN=Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org
-.)b
-(line breaks have been inserted for readability).
-The macros which are subject to this encoding are
-{cert_subject}, {cert_issuer}, {cn_subject}, and {cn_issuer}.
-.sh 3 "PRNG for STARTTLS"
-.pp
-STARTTLS requires a strong pseudo random number generator (PRNG)
-to operate properly.
-Depending on the TLS library you use, it may be required to explicitly
-initialize the PRNG with random data.
-OpenSSL makes use of
-.b /dev/urandom(4)
-if available (this corresponds to the compile flag HASURANDOMDEV).
-On systems which lack this support, a random file must be specified in the
-.i sendmail.cf
-file using the option RandFile.
-It is
-.b strongly
-advised to use the "Entropy Gathering Daemon" EGD
-from Brian Warner on those systems to provide useful random data.
-In this case,
-.i sendmail
-must be compiled with the flag EGD, and the
-RandFile option must point to the EGD socket.
-If neither
-.b /dev/urandom(4)
-nor EGD are available, you have to make sure
-that useful random data is available all the time in RandFile.
-If the file hasn't been modified in the last 10 minutes before
-it is supposed to be used by
-.i sendmail
-the content is considered obsolete.
-One method for generating this file is:
-.(b
-openssl rand -out /etc/mail/randfile -rand \c
-.i /path/to/file:... \c
-256
-.)b
-See the OpenSSL documentation for more information.
-In this case, the PRNG for TLS is only
-seeded with other random data if the
-.b DontBlameSendmail
-option
-.b InsufficientEntropy
-is set.
-This is most likely not sufficient for certain actions, e.g.,
-generation of (temporary) keys.
-.pp
-Please see the OpenSSL documentation or other sources
-for further information about certificates, their creation and their usage,
-the importance of a good PRNG, and other aspects of TLS.
-.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
-the University of California at Berkeley,
-at Britton Lee,
-and again on the Mammoth and Titan Projects at Berkeley.
-.pp
-Much of the second wave of improvements
-resulting in version 8.1
-should be credited to Bryan Costales of the
-International Computer Science Institute.
-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
-Gregory Neil Shapiro
-of Worcester Polytechnic Institute
-has become instrumental in all phases of
-.i sendmail
-support and development,
-and was largely responsible for getting versions 8.8 and 8.9
-out the door.
-.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 and organizations made notable contributions:
-.(l
-Claus Assmann
-John Beck, Hewlett-Packard & Sun Microsystems
-Keith Bostic, CSRG, University of California, Berkeley
-Andrew Cheng, Sun Microsystems
-Michael J. Corrigan, University of California, San Diego
-Bryan Costales, International Computer Science Institute & InfoBeat
-Pa\*:r (Pell) Emanuelsson
-Craig Everhart, Transarc Corporation
-Per Hedeland, Ericsson
-Tom Ivar Helbekkmo, Norwegian School of Economics
-Kari Hurtta, Finnish Meteorological Institute
-Allan E. Johannesen, WPI
-Jonathan Kamens, OpenVision Technologies, Inc.
-Takahiro Kanbe, Fuji Xerox Information Systems Co., Ltd.
-Brian Kantor, University of California, San Diego
-John Kennedy, Cal State University, Chico
-Murray S. Kucherawy, HookUp Communication Corp.
-Bruce Lilly, Sony U.S.
-Karl London
-Motonori Nakamura, Ritsumeikan University & Kyoto University
-John Gardiner Myers, Carnegie Mellon University
-Neil Rickert, Northern Illinois University
-Gregory Neil Shapiro, WPI
-Eric Schnoebelen, Convex Computer Corp.
-Eric Wassenaar, National Institute for Nuclear and High Energy Physics, Amsterdam
-Randall Winchester, University of Maryland
-Christophe Wolfhugel, Pasteur Institute & Herve Schauer Consultants (Paris)
-Exactis.com, Inc.
-.)l
-I apologize for anyone I have omitted, misspelled, misattributed, or
-otherwise missed.
-At this point, I suspect that at least a hundred people
-have contributed code,
-and many more have contributed ideas, comments, and encouragement.
-I've tried to list them in the RELEASE_NOTES in the distribution directory.
-I appreciate their contribution as well.
-.pp
-Special thanks are reserved for Michael Corrigan and Christophe Wolfhugel,
-who besides being wonderful guinea pigs and contributors
-have also consented to be added to the ``sendmail@Sendmail.ORG'' list
-and, by answering the bulk of the questions sent to that list,
-have freed me up to do other work.
-.++ A
-.+c "COMMAND LINE FLAGS"
-.ba 0
-.nr ii 1i
-.pp
-Arguments must be presented with flags before addresses.
-The flags are:
-.ip \-A\fIx\fP
-Select an alternative .cf file which is either
-.i sendmail.cf
-for
-.b \-Am
-or
-.i submit.cf
-for
-.b \-Ac .
-By default the .cf file is chosen based on the operation mode.
-For
-.b -bm
-(default),
-.b -bs ,
-and
-.b -t
-it is
-.i submit.cf
-if it exists, for all others it is
-.i sendmail.cf .
-.ip \-b\fIx\fP
-Set operation mode to
-.i x .
-Operation modes are:
-.(b
-.ta 4n
-m Deliver mail (default)
-s Speak SMTP on input side
-a\(dg ``Arpanet'' mode (get envelope sender information from header)
-d Run as a daemon in background
-D Run as a daemon in foreground
-t Run in test mode
-v Just verify addresses, don't collect or deliver
-i Initialize the alias database
-p Print the mail queue
-P Print overview over the mail queue (requires shared memory)
-h Print the persistent host status database
-H Purge expired entries from the persistent host status database
-.)b
-.(f
-\(dgDeprecated.
-.)f
-.ip \-B\fItype\fP
-Indicate body type.
-.ip \-C\fIfile\fP
-Use a different configuration file.
-.i Sendmail
-runs as the invoking user (rather than root)
-when this flag is specified.
-.ip \-d\fIlevel\fP
-Set debugging level.
-.ip "\-f\ \fIaddr\fP"
-The envelope sender address is set to
-.i addr .
-This address may also be used in the From: header
-if that header is missing during initial submission.
-The envelope sender address is used as the recipient
-for delivery status notifications
-and may also appear in a Return-Path: header.
-.ip \-F\ \fIname\fP
-Sets the full name of this user to
-.i name .
-.ip \-G
-When accepting messages via the command line,
-indicate that they are for relay (gateway) submission.
-sendmail may complain about syntactically invalid messages,
-e.g., unqualified host names,
-rather than fixing them when this flag is set.
-sendmail will not do any canonicalization in this mode.
-.ip "\-h\ \fIcnt\fP"
-Sets the
-.q "hop count"
-to
-.i cnt .
-This represents the number of times this message has been processed
-by
-.i sendmail
-(to the extent that it is supported by the underlying networks).
-.i Cnt
-is incremented during processing,
-and if it reaches
-MAXHOP
-(currently 25)
-.i sendmail
-throws away the message with an error.
-.ip "\-L \fItag\fP"
-Sets the identifier used for syslog.
-Note that this identifier is set
-as early as possible.
-However,
-.i sendmail
-may be used
-if problems arise
-before the command line arguments
-are processed.
-.ip \-n
-Don't do aliasing or forwarding.
-.ip "\-N \fInotifications\fP"
-Tag all addresses being sent as wanting the indicated
-.i notifications ,
-which consists of the word
-.q NEVER
-or a comma-separated list of
-.q SUCCESS ,
-.q FAILURE ,
-and
-.q DELAY
-for successful delivery,
-failure,
-and a message that is stuck in a queue somewhere.
-The default is
-.q FAILURE,DELAY .
-.ip "\-r\ \fIaddr\fP"
-An obsolete form of
-.b \-f .
-.ip \-o\fIx\|value\fP
-Set option
-.i x
-to the specified
-.i value .
-These options are described in Section 5.6.
-.ip \-O\fIoption\fP\fB=\fP\fIvalue\fP
-Set
-.i option
-to the specified
-.i value
-(for long form option names).
-These options are described in Section 5.6.
-.ip \-M\fIx\|value\fP
-Set macro
-.i x
-to the specified
-.i value .
-.ip \-p\fIprotocol\fP
-Set the sending protocol.
-Programs are encouraged to set this.
-The protocol field can be in the form
-.i protocol \c
-.b : \c
-.i host
-to set both the sending protocol and sending host.
-For example,
-.q \-pUUCP:uunet
-sets the sending protocol to UUCP
-and the sending host to uunet.
-(Some existing programs use \-oM to set the r and s macros;
-this is equivalent to using \-p.)
-.ip \-q\fItime\fP
-Try to process the queued up mail.
-If the time is given,
-a
-.i sendmail
-will start one or more processes to run through the queue(s) at the specified
-time interval to deliver queued mail; otherwise, it only runs once.
-Each of these processes acts on a workgroup.
-These processes are also known as workgroup processes or WGP's for short.
-Each workgroup is responsible for controlling the processing of one or
-more queues; workgroups help manage the use of system resources by sendmail.
-Each workgroup may have one or more children concurrently processing
-queues depending on the setting of \fIMaxQueueChildren\fP.
-.ip \-qp\fItime\fP
-Similar to \-q with a time argument,
-except that instead of periodically starting WGP's
-sendmail starts persistent WGP's
-that alternate between processing queues and sleeping.
-The sleep time is specified by the time argument; it defaults to 1 second,
-except that a WGP always sleeps at least 5 seconds if their queues were
-empty in the previous run.
-Persistent processes are managed by a queue control process (QCP).
-The QCP is the parent process of the WGP's.
-Typically the QCP will be the sendmail daemon (when started with \-bd or \-bD)
-or a special process (named Queue control) (when started without \-bd or \-bD).
-If a persistent WGP ceases to be active for some reason
-another WGP will be started by the QCP for the same workgroup
-in most cases. When a persistent WGP has core dumped, the debug flag
-\fIno_persistent_restart\fP is set or the specific persistent WGP has been
-restarted too many times already then the WGP will not be started again
-and a message will be logged to this effect.
-To stop (SIGTERM) or restart (SIGHUP) persistent WGP's the appropriate
-signal should be sent to the QCP. The QCP will propagate the signal to all of
-the WGP's and if appropriate restart the persistent WGP's.
-.ip \-q\fIGname\fP
-Run the jobs in the queue group
-.i name
-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 .
-The optional ! character negates the condition tested.
-Multiple
-.i \-q\fIX\fP
-flags are permitted,
-with items with the same key letter
-.q or'ed
-together, and items with different key letters
-.q and'ed
-together.
-.ip "\-R ret"
-What information you want returned if the message bounces;
-.i ret
-can be
-.q HDRS
-for headers only or
-.q FULL
-for headers plus body.
-This is a request only;
-the other end is not required to honor the parameter.
-If
-.q HDRS
-is specified local bounces also return only the headers.
-.ip \-t
-Read the header for
-.q To: ,
-.q Cc: ,
-and
-.q Bcc:
-lines, and send to everyone listed in those lists.
-The
-.q Bcc:
-line will be deleted before sending.
-Any addresses in the argument vector will be deleted
-from the send list.
-.ip "\-V envid"
-The indicated
-.i envid
-is passed with the envelope of the message
-and returned if the message bounces.
-.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.
-These are the e, i, m, and v options.
-Also,
-the f option
-may be specified as the
-.b \-s
-flag.
-The DSN related options
-.q "\-N" ,
-.q "\-R" ,
-and
-.q "\-V"
-have no effects on
-.i sendmail
-running as daemon.
-.+c "QUEUE FILE FORMATS"
-.pp
-This appendix describes the format of the queue files.
-These files live in a queue directory.
-The individual qf, df, and xf files
-may be stored in separate
-.i qf/ ,
-.i df/ ,
-and
-.i xf/
-subdirectories
-if they are present in the queue directory.
-.pp
-All queue files have the name
-.i ttYMDhmsNNppppp
-where
-.i YMDhmsNNppppp
-is the
-.i id
-for this message
-and the
-.i tt
-is a type.
-The individual letters in the
-.i id
-are:
-.nr ii 0.5i
-.ip Y
-Encoded year
-.ip M
-Encoded month
-.ip D
-Encoded day
-.ip h
-Encoded hour
-.ip m
-Encoded minute
-.ip s
-Encoded second
-.ip NN
-Encoded envelope number
-.ip ppppp
-At least five decimal digits of the process ID
-.pp
-All files with the same id collectively define one message.
-Due to the use of memory-buffered files,
-some of these files may never appear on disk.
-.pp
-The types are:
-.nr ii 0.5i
-.ip qf
-The queue control file.
-This file contains the information necessary to process the job.
-.ip df
-The data file.
-The message body (excluding the header) is kept in this file.
-Sometimes the df file is not stored in the same directory as the qf file;
-in this case,
-the qf file contains a `d' record which names the queue directory
-that contains the df file.
-.ip tf
-A temporary file.
-This is an image of the
-.b qf
-file when it is being rebuilt.
-It should be renamed to a
-.b qf
-file very quickly.
-.ip xf
-A transcript file,
-existing during the life of a session
-showing everything that happens
-during that session.
-Sometimes the xf file must be generated before a queue group has been selected;
-in this case,
-the xf file will be stored in a directory of the default queue group.
-.ip Qf
-A ``lost'' queue control file.
-.i sendmail
-renames a
-.b qf
-file to
-.b Qf
-if there is a severe (configuration) problem that cannot be solved without
-human intervention.
-Search the logfile for the queue file id to figure out what happened.
-After you resolved the problem, you can rename the
-.b Qf
-file to
-.b qf
-and send it again.
-.pp
-The
-.b qf
-file is structured as a series of lines
-each beginning with a code letter.
-The lines are as follows:
-.ip V
-The version number of the queue file format,
-used to allow new
-.i sendmail
-binaries to read queue files created by older versions.
-Defaults to version zero.
-Must be the first line of the file if present.
-For 8.12 the version number is 6.
-.ip A
-The information given by the AUTH= parameter of the
-.q "MAIL FROM:"
-command or $f@$j
-if sendmail has been called directly.
-.ip H
-A header definition.
-There may be any number of these lines.
-The order is important:
-they represent the order in the final message.
-These use the same syntax
-as header definitions in the configuration file.
-.ip C
-The controlling address.
-The syntax is
-.q localuser:aliasname .
-Recipient addresses following this line
-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 Q
-The ``original recipient'',
-specified by the ORCPT= field in an ESMTP transaction.
-Used exclusively for Delivery Status Notifications.
-It applies only to the following `R' line.
-.ip r
-The ``final recipient''
-used for Delivery Status Notifications.
-It applies only to the following `R' line.
-.ip R
-A recipient address.
-This will normally be completely aliased,
-but is actually realiased when the job is processed.
-There will be one line for each recipient.
-Version 1 qf files
-also include a leading colon-terminated list of flags,
-which can be
-`S' to return a message on successful final delivery,
-`F' to return a message on failure,
-`D' to return a message if the message is delayed,
-`B' to indicate that the body should be returned,
-`N' to suppress returning the body,
-and
-`P' to declare this as a ``primary'' (command line or SMTP-session) address.
-.ip S
-The sender address.
-There may only be one of these lines.
-.ip T
-The job creation time.
-This is used to compute when to time out the job.
-.ip P
-The current message priority.
-This is used to order the queue.
-Higher numbers mean lower priorities.
-The priority changes
-as the message sits in the queue.
-The initial priority depends on the message class
-and the size of the message.
-.ip M
-A message.
-This line is printed by the
-.i mailq
-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.
-Other flag bits are:
-.b 8 :
-the body contains 8bit data,
-.b b :
-a Bcc: header should be removed,
-.b d :
-the mail has RET parameters (see RFC 1894),
-.b n :
-the body of the message should not be returned
-in case of an error,
-.b s :
-the envelope has been split.
-.ip N
-The total number of delivery attempts.
-.ip K
-The time (as seconds since January 1, 1970)
-of the last delivery attempt.
-.ip d
-If the df file is in a different directory than the qf file,
-then a `d' record is present,
-specifying the directory in which the df file resides.
-.ip I
-The i-number of the data file;
-this can be used to recover your mail queue
-after a disastrous disk crash.
-.ip $
-A macro definition.
-The values of certain macros
-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 .
-.ip Z
-The original envelope id (from the ESMTP transaction).
-For Deliver Status Notifications only.
-.pp
-As an example,
-the following is a queue file sent to
-.q eric@mammoth.Berkeley.EDU
-and
-.q bostic@okeeffe.CS.Berkeley.EDU \**:
-.(f
-\**This example is contrived and probably inaccurate for your environment.
-Glance over it to get an idea;
-nothing can replace looking at what your own system generates.
-.)f
-.(b
-V4
-T711358135
-K904446490
-N0
-P2100941
-$_eric@localhost
-${daemon_flags}
-Seric
-Ceric:100:1000:sendmail@vangogh.CS.Berkeley.EDU
-RPFD:eric@mammoth.Berkeley.EDU
-RPFD:bostic@okeeffe.CS.Berkeley.EDU
-H?P?Return-path: <^g>
-H??Received: by vangogh.CS.Berkeley.EDU (5.108/2.7) id AAA06703;
- Fri, 17 Jul 1992 00:28:55 -0700
-H??Received: from mail.CS.Berkeley.EDU by vangogh.CS.Berkeley.EDU (5.108/2.7)
- id AAA06698; Fri, 17 Jul 1992 00:28:54 -0700
-H??Received: from [128.32.31.21] by mail.CS.Berkeley.EDU (5.96/2.5)
- id AA22777; Fri, 17 Jul 1992 03:29:14 -0400
-H??Received: by foo.bar.baz.de (5.57/Ultrix3.0-C)
- id AA22757; Fri, 17 Jul 1992 09:31:25 GMT
-H?F?From: eric@foo.bar.baz.de (Eric Allman)
-H?x?Full-name: Eric Allman
-H??Message-id: <9207170931.AA22757@foo.bar.baz.de>
-H??To: sendmail@vangogh.CS.Berkeley.EDU
-H??Subject: this is an example message
-.)b
-This shows
-the person who sent the message,
-the submission time
-(in seconds since January 1, 1970),
-the message priority,
-the message class,
-the recipients,
-and the headers for the message.
-.+c "SUMMARY OF SUPPORT FILES"
-.pp
-This is a summary of the support files
-that
-.i sendmail
-creates or generates.
-Many of these can be changed by editing the sendmail.cf file;
-check there to find the actual pathnames.
-.nr ii 1i
-.ip "/usr/\*(SD/sendmail"
-The binary of
-.i sendmail .
-.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
-.i sendmail
-the
-.b \-bi
-flag.
-.ip /usr/\*(SB/mailq
-Prints a listing of the mail queue.
-This program is equivalent to using the
-.b \-bp
-flag to
-.i sendmail .
-.ip /etc/mail/sendmail.cf
-The configuration file,
-in textual form.
-.ip /etc/mail/helpfile
-The SMTP help file.
-.ip /etc/mail/statistics
-A statistics file; need not be present.
-.ip /etc/mail/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;
-the second line contains the command line used to invoke the daemon,
-and later versions of
-.i sendmail
-may add more information to subsequent lines.
-.ip /etc/mail/aliases
-The textual version of the alias file.
-.ip /etc/mail/aliases.db
-The alias file in
-.i hash \|(3)
-format.
-.ip /etc/mail/aliases.{pag,dir}
-The alias file in
-.i ndbm \|(3)
-format.
-.ip /var/spool/mqueue
-The directory in which the mail queue(s)
-and temporary files reside.
-.ip /var/spool/mqueue/qf*
-Control (queue) files for messages.
-.ip /var/spool/mqueue/df*
-Data files.
-.ip /var/spool/mqueue/tf*
-Temporary versions of the qf files,
-used during queue file rebuild.
-.ip /var/spool/mqueue/xf*
-A transcript of the current session.
-.if o \
-\{\
-. bp
-. rs
-. sp |4i
-. ce 2
-This page intentionally left blank;
-replace it with a blank sheet for double-sided output.
-.\}
-.\".ro
-.\".ls 1
-.\".tp
-.\".sp 2i
-.\".in 0
-.\".ce 100
-.\".sz 24
-.\".b SENDMAIL
-.\".sz 14
-.\".sp
-.\"INSTALLATION AND OPERATION GUIDE
-.\".sp
-.\".sz 10
-.\"Eric Allman
-.\".sp
-.\"Version $Revision: 8.609.2.17 $
-.\".ce 0
-.bp 3
-.ce
-.sz 12
-TABLE OF CONTENTS
-.sz 10
-.sp
-.\" remove some things to avoid "out of temp file space" problem
-.rm sh
-.rm (x
-.rm )x
-.rm ip
-.rm pp
-.rm lp
-.rm he
-.rm fo
-.rm eh
-.rm oh
-.rm ef
-.rm of
-.xp
-.if o \
-\{\
-. bp
-. rs
-. sp |4i
-. ce 2
-This page intentionally left blank;
-replace it with a blank sheet for double-sided output.
-.\}