Book HomeTCP/IP Network AdministrationSearch this book

E.3. m4 sendmail Macros

The sendmail distribution comes with several sample configuration files. Chapter 10, "sendmail " provides an example of how the tcpproto.mc file is modified to produce a configuration file suitable for a Linux system. The prototype files are m4 macro configuration files that produce usable sendmail.cf files as output. The prototype files are located in the sendmail/cf/cf directory of the sendmail distribution. Use those prototypes as examples of reasonable sendmail configurations.

All of the sendmail configuration files are composed of the following m4 macros: [164]

[164]By convention, m4 macros are shown in uppercase, and built-in m4 commands are shown in lowercase.

divert

Directs the output of the m4 process.

dnl

Deletes all characters up to the next newline.

VERSIONID

Defines the version number of the .mc source file. RCS or SCCS version numbers are commonly used. This command is optional.

OSTYPE

Points to the m4 source file that contains the operating system-specific information for this configuration. This is required.

DOMAIN

Points to the m4 source file that contains configuration information specific to this domain. This is optional.

LOCAL_DOMAIN

Defines the hostname aliases for the server.

CANONIFY_DOMAIN

Defines domains that should be converted to canonical format even if the nocanonify feature is set.

CANONIFY_DOMAIN_FILE

Identifies a file that contains the list of domains that should be converted to canonical format even if the nocanonify feature is set.

GENERICS_DOMAIN

Defines domain names that should be processed through the genericstable database.

GENERICS_DOMAIN_FILE

Identifies a file that contains the list of domains that should be processed through the genericstable database.

LDAPROUTE_DOMAIN

Defines domains that should be routed according to directions found in the LDAP directory.

LDAPROUTE_DOMAIN_FILE

Identifies a file that lists the domains that should be routed according to directions found in the LDAP directory.

RELAY_DOMAIN

Defines the domains for which this server should relay mail.

RELAY_DOMAIN_FILE

Identifies a file that lists the domains for which this server should relay mail.

VIRTUSER_DOMAIN

Defines the virtual domains that should be processed through the virtusertable.

VIRTUSER_DOMAIN_FILE

Identifies a file that lists the virtual domains that should be processed through the virtusertable.

FEATURE

Points to an m4 source file that defines an optional sendmail feature. This is not required for m4 to process the .mc source file, but many configurations have multiple FEATURE entries.

MASQUERADE_AS

Defines the domain name used to masquerade outgoing mail.

MASQUERADE_DOMAIN

Defines domains that should be masqueraded.

MASQUERADE_DOMAIN_FILE

Identifies a file that lists the domains that should be masqueraded.

MASQUERADE_EXCEPTION

Defines a host that should not be masqueraded even if the domain is being masqueraded.

EXPOSED_USER

Defines usernames that prevent masquerading. If the user portion of the address contains one of these names, the host portion of the address is not masqueraded.

HACK

Points to an m4 source file that contains site-specific configuration information. This is a temporary configuration used to fix a temporary problem. The use of HACK is discouraged.

SITE

Identifies a locally connected UUCP host.

SITECONFIG

Points to a source file that contains m4 SITE commands that define the UUCP sites connected to this host. The format of the command is: SITECONFIG(file, local-hostname, class), which reads the UUCP hostnames from file into class.

UUCPSMTP

Maps a UUCP hostname to an Internet hostname.

define

Defines a local value. Most "defines" are done in the m4 source files that are called by the .mc file, not in the .mc file itself. It can define a value for a sendmail.cf macro, option, or other command.

undefine

Clears the value set for a configuration parameter.

MAILER

Points to an m4 source file that contains the configuration commands that define a sendmail mailer. At least one AILER command must appear in the configuration file. Generally more than one MAILER command is used.

MAILER_DEFINITIONS

Heads a section of sendmail.cf commands that define a custom mailer.

MODIFY_MAILER_FLAGS

Overrides the flags defined for a mailer.

MAIL_FILTER

Defines a mail filter.

INPUT_MAIL_FILTER

Defines a mail filter and the variables necessary to call the filter.

DAEMON_OPTIONS

Defines runtime options for the sendmail daemon.

TRUST_AUTH_MECH

Defines a list of trusted authorization mechanisms.

LOCAL_RULE_n

Heads a section of code to be added to ruleset n, where n is 0, 1, 2, or 3. The code that follows the LOCAL_RULE_n command is composed of standard sendmail.cf rewrite rules.[165] The LOCAL_RULE_n command is rarely used.

[165]The one exception to this is the UUCPSMTP macro that can be used in the local rule.

LOCAL_RULESETS

Heads a section of code that defines a custom ruleset.

LOCAL_USER

Defines usernames that should be exempted from relaying even when local mail is being relayed.

LOCAL_NET_CONFIG

Heads a section of sendmail.cf code that defines how mail destined for the local host is processed.

LOCAL_CONFIG

Heads a section of code to be added to the sendmail.cf file after the local information section and before the rewrite rules. The section of code contains standard sendmail.cf configuration commands. This macro is rarely used.

The built-in m4 commands shown above -- those listed in lowercase characters -- are divided between those that control the flow of output and those that set macro values. The two commands that control the flow of output are dnl and divert. Text following the dnl command is not sent to the output file. Thus it is used at the beginning of a line on a comment. The divert(-1) command sends output to the "bit-bucket" and marks the start of a block of comments. The divert(0) command directs output to standard m4 processing. In addition to -1 and 0, the divert command accepts nine other numeric arguments: the values 1 to 9. These other values are used in the m4 macro source code to direct data to various parts of the sendmail.cf file. You will not use these values in your own configuration. Instead you will use other commands to direct data to specific parts of the sendmail.cf file.

The commands LOCAL_CONFIG, LOCAL_USER, LOCAL_RULESETS, AILER_DEFINITION, LOCAL_NET_CONFIG, and LOCAL_RULE allow you to send data to various parts of the sendmail.cf file without using the various divert values directly. Commands such as LOCAL_CONFIG and MAILER_DEFINITION mark the start of raw sendmail.cf code that should be included in some part of the output file. These commands make it possible for you to customize the sendmail.cf file in any possible way.

The built-in m4 commands define and undefine set macro values. define sets a variable to a value and undefine resets it to its default value. More configuration parameters can be controlled through the define command than through any other, and, correspondingly, more of this appendix is dedicated to define parameters than to anything else.

Almost half of the m4 macros act like the define command and simply set a parameter to a value. MASQUERADE_AS, ASQUERADE_DOMAIN, RELAY_DOMAIN, and VIRTUSER_DOMAIN_FILE are all examples of commands used to set variables.

The TRUST_AUTH_MECH macro is a good example of a macro that complements a define. As you'll see in Section E.3.1, "define" of this appendix, the parameter confAUTH_MECHANISMS can be used to define the trusted authentication mechanisms your server advertises to other servers. The TRUST_AUTH_MECH macro is the inverse of this. It identifies the mechanism that your server accepts from other servers. The same list of keywords used to configure the confAUTH_MECHANISMS parameter in Section E.3.1, "define" can be used to configure TRUST_AUTH_MECHANISMS.

The macro names OSTYPE, DOMAIN, FEATURE, MAILER, HACK, and SITECONFIG are all names of subdirectories within the cf directory. The value passed to each of these macros is the name of a file within the specified directory. For example, the command FEATURE(nouucp) tells m4 to load the file nouucp.m4 from the ostype directory and process the m4 source code found there. The .m4 source files pointed to by the OSTYPE, DOMAIN, FEATURE, and MAILER commands are built primarily from define and FEATURE commands.

Two of the macros that are also directory names, SITECONFIG and HACK, are rarely used. SITECONFIG points to a source file that contains SITE macros that define the UUCP sites connected to the local host. You create the file containing the SITE macros yourself and then invoke it with the SITECONFIG command. These commands, along with UUCPSMTP, are obsolete and maintained only for backward compatibility.

The HACK macro points to an m4 source file that contains a temporary site-specific fix to a sendmail problem. You create the file in the hack directory and then use the HACK command to add that file to the configuration. The use of hacks is discouraged and is generally unnecessary.

The following section provides additional information about the OSTYPE, DOMAIN, FEATURE, and MAILER macros and details of the various commands used to build the m4 source files they call. Chapter 10, "sendmail " provides an example of building a custom DOMAIN macro source file. The source files can contain any of the macros we have already mentioned as well as the additional ones documented below. The macro configuration (.mc) file also can contain any of the commands documented below. In fact, pretty much any macro can appear in any file.

To bring some order out of this chaos, the commands are organized according to the files they are most likely to appear in, which is similar to the organization found in the documentation that comes with the sendmail distribution. Just remember, actual implementation files may have a different organization. We start by examining the define macros and the FEATURE macros that are the primary building blocks of all the other files.

E.3.1. define

The syntax of the define macro is:

define(`parameter', `value')

where parameter is the keyword name of a sendmail configuration parameter and value is the value assigned to that configuration parameter. The parameter and the value are normally enclosed in single quotes to prevent inappropriate macro expansion. These are not balanced quotes. The opening quote is a grave sign (`), and the closing quote is an apostrophe (').

Many of the configuration parameters that can be set using the define command are shown below. Most of the parameters correspond to sendmail options, macros, or classes. The name of the option, macro, or class set by the parameter is listed in the parameter description enclosed in square brackets ([]). Macro names begin with a dollar sign ($j), class names begin with a dollar sign and an equals sign ($=w), and options are shown with long option names (SingleThreadDelivery). To find out more about these parameters, see the descriptions of the macros, options, and classes they represent that are provided later in this appendix.

Because many define parameters are equivalent to options, macros, and classes, the command:

define(`confDOMAIN_NAME', `rodent.wrotethebook.com')

placed in an m4 source file has the same effect as:

Djrodent.wrotethebook.com

placed directly in the sendmail.cf file. If you compile and install a new version of sendmail, build your configuration with m4 and set values for macros, classes, and options with the m4 define macro.

The list of define parameters is quite long. However, because most of the parameters default to a reasonable value, they do not have to be explicitly set in the m4 source file. The default value of each parameter is shown in the listing -- unless there is no default.

confMAILER_NAME

Default is MAILER-DAEMON. The sender name used on error messages. [$n]

confDOMAIN_NAME

The full hostname. [$j]

confCF_VERSION

The configuration file's version number. [$Z]

confFROM_HEADER

Default is $?x$x <$g>$|$g$. . The From: header format.

confRECEIVED_HEADER

Default is $?sfrom $s $.$?_($?s$|from $.$_) $.by $j ($v/$Z)$?r with $r$. id $i$?u for $u$.; $b . The Received: header format.

confCW_FILE

Default is /etc/sendmail.cw. The file of local host aliases. [$=w]

confCT_FILE

Default is /etc/sendmail.ct. The file of trusted usernames. [$=t]

confTRUSTED_USERS

Trusted usernames to add to root, uucp, and daemon.

confSMTP_MAILER

Default is esmtp. The mailer used for SMTP connections; must be smtp, smtp8, or esmtp.

confUUCP_MAILER

Default is uucp-old. The default UUCP mailer.

confLOCAL_MAILER

Default is local. The mailer used for local connections.

confRELAY_MAILER

Default is relay. The default mailer name for relaying.

confSEVEN_BIT_INPUT

Default is False. Forces input to seven bits. [SevenBitInput]

confEIGHT_BIT_HANDLING

Default is pass8. Defines how 8-bit data is handled. [EightBitMode]

confALIAS_WAIT

Default is 10m. The amount of time to wait for alias file rebuild. [AliasWait]

confMIN_FREE_BLOCKS

Default is 100. The minimum number of free blocks on the queue filesystem that must be available to accept SMTP mail. [MinFreeBlocks]

confMAX_MESSAGE_SIZE

Default is infinite. The maximum message size. [MaxMessageSize]

confBLANK_SUB

The character used to replace unquoted blank characters in email addresses. [BlankSub]

confCON_EXPENSIVE

Default is False. Tells system to hold mail bound for mailers that have the e flag set until the next queue run. [HoldExpensive]

confCHECKPOINT_INTERVAL

Default is 10. Tells system to checkpoint the queue files after this number of queued items are processed. [CheckpointInterval]

confDELIVERY_MODE

Default is background. Sets the default delivery mode. [DeliveryMode]

confAUTO_REBUILD

Default is False. Automatically rebuilds alias file. [AutoRebuildAliases]

confERROR_MODE

Default is print. Defines how errors are handled. [ErrorMode]

confERROR_MESSAGE

Points to a file containing a message that is prepended to error messages. [ErrorHeader]

confSAVE_FROM_LINES

Tells system not to discard Unix From: lines. They are discarded if this is not set. [SaveFromLine]

confTEMP_FILE_MODE

Default is 0600. File mode for temporary files. [TempFileMode]

confMATCH_GECOS

Tells system to match the email username to the GECOS field. This match is not done if this is not set. [MatchGECOS]

confMAX_HOP

Default is 25. The counter used to determine mail loops. [MaxHopCount]

confIGNORE_DOTS

Default is False. Tells system to ignore dots in incoming messages. [IgnoreDots]

confBIND_OPTS

Default is undefined. Sets options for DNS resolver. [ResolverOptions]

confMIME_FORMAT_ERRORS

Default is True. Tells system to send MIME-encapsulated error messages. [SendMimeErrors]

confFORWARD_PATH

Default is $z/.forward.$w:$z/.forward. Places to search for .forward files. [ForwardPath]

confMCI_CACHE_SIZE

Default is 2. The number of open connections that can be cached. [ConnectionCacheSize]

confMCI_CACHE_TIMEOUT

Default is 5m. The amount of time inactive open connections are held in the cache. [ConnectionCacheTimeout]

confHOST_STATUS_DIRECTORY

Directory in which host status is saved. [HostStatusDirectory]

confUSE_ERRORS_TO

Default is False. Delivers errors using the Errors-To: header. [UseErrorsTo]

confLOG_LEVEL

Default is 9. Level of detail for the log file. [LogLevel]

confME_TOO

Default is False. Sends a copy to the sender. [MeToo]

confCHECK_ALIASES

Default is False. Looks up every alias during alias file build. [CheckAliases]

confOLD_STYLE_HEADERS

Default is True. Treats headers without special characters as old style. [OldStyleHeaders]

confDAEMON_OPTIONS

SMTP daemon options. [DaemonPortOptions]

confPRIVACY_FLAGS

Default is authwarnings. These flags restrict the use of some mail commands. [PrivacyOptions]

confCOPY_ERRORS_TO

Address to receive copies of error messages. [PostmasterCopy]

confQUEUE_FACTOR

Default is 600000. Used to calculate when a loaded system should queue mail instead of attempting delivery. [QueueFactor]

confDONT_PRUNE_ROUTES

Default is False. Don't prune route-addresses to the minimum possible. [DontPruneRoutes]

confSAFE_QUEUE

Create a queue file, then attempt delivery. This is not done unless this parameter is specified. [SuperSafe]

confTO_INITIAL

Default is 5m. Maximum time to wait for the initial connect response. [Timeout.initial]

confTO_CONNECT

Default is 0. Maximum time to wait for a connect to complete. [Timeout.connect]

confTO_ICONNECT

Maximum time to wait for the very first connect attempt to a host. [Timeout.iconnect]

confTO_HELO

Default is 5m. Maximum time to wait for a HELO or EHLO response. [Timeout.helo]

confTO_MAIL

Default is 10m. Maximum time to wait for a MAIL command response. [Timeout.mail]

confTO_RCPT

Default is 1h. Maximum time to wait for a RCPT command response. [Timeout.rcpt]

confTO_DATAINIT

Default is 5m. Maximum time to wait for a DATA command response. [Timeout.datainit]

confTO_DATABLOCK

Default is 1h. Maximum time to wait for a block during DATA phase. [Timeout.datablock]

confTO_DATAFINAL

Default is 1h. Maximum time to wait for a response to the terminating ".". [Timeout.datafinal]

confTO_RSET

Default is 5m. Maximum time to wait for a RSET command response. [Timeout.rset]

confTO_QUIT

Default is 2m. Maximum time to wait for a QUIT command response. [Timeout.quit]

confTO_MISC

Default is 2m. Maximum time to wait for other SMTP command responses. [Timeout.misc]

confTO_COMMAND

Default is 1h. Maximum time to wait for a command to be issued. [Timeout.command]

confTO_IDENT

Default is 30s. Maximum time to wait for an IDENT query response. [Timeout.ident]

confTO_FILEOPEN

Default is 60s. Maximum time to wait for a file open. [Timeout.fileopen]

confTO_QUEUERETURN

Default is 5d. Time until a message is returned from the queue as undeliverable. [Timeout.queuereturn]

confTO_QUEUERETURN_NORMAL

"Undeliverable" timeout for normal priority messages. [Timeout.queuereturn.normal]

confTO_QUEUERETURN_URGENT

"Undeliverable" timeout for urgent priority messages. [Timeout.queuereturn.urgent]

confTO_QUEUERETURN_NONURGENT

"Undeliverable" timeout for low priority messages. [Timeout.queuereturn.non-urgent]

confTO_QUEUEWARN

Default is 4h. Time until a "still queued" warning is sent about a message. [Timeout.queuewarn]

confTO_QUEUEWARN_NORMAL

Time until a "still queued" warning is sent for normal priority messages. [Timeout.queuewarn.normal]

confTO_QUEUEWARN_URGENT

Time until a "still queued" warning is sent for urgent priority messages. [Timeout.queuewarn.urgent]

confTO_QUEUEWARN_NONURGENT

Time until a "still queued" warning is sent for low priority messages. [Timeout.queuewarn.non-urgent]

confTO_HOSTSTATUS

Default is 30m. Time for stale host status information. [Timeout.hoststatus]

confTIME_ZONE

Default is USE_SYSTEM. Sets time zone from the system (USE_SYSTEM) or the TZ variable (USE_TZ). [TimeZoneSpec]

confDEF_USER_ID

Default is 1:1. Default user ID and group ID. [DefaultUser]

confUSERDB_SPEC

Path of the user database file. [UserDatabaseSpec]

confFALLBACK_MX

Backup MX host. [FallbackMXhost]

confTRY_NULL_MX_LIST

Default is False. Instructs system to connect to the remote host directly if the MX points to the local host. [TryNullMXList]

confQUEUE_LA

Default is 8. Sends mail directly to the queue when this load average is reached. [QueueLA]

confREFUSE_LA

Default is 12. Refuses incoming SMTP connections at this load average. [RefuseLA]

confMAX_DAEMON_CHILDREN

If set, refuses connection when this number of children is reached. [MaxDaemonChildren]

confCONNECTION_RATE_THROTTLE

Maximum number of connections permitted per second, if set. [ConnectionRateThrottle]

confWORK_RECIPIENT_FACTOR

Default is 30000. Factor used to lower the priority of a job for each additional recipient. [RecipientFactor]

confSEPARATE_PROC

Default is False. Delivers messages with separate processes. [ForkEachJob]

confWORK_CLASS_FACTOR

Default is 1800. The factor used to favor a high-priority job. [ClassFactor]

confWORK_TIME_FACTOR

Default is 90000. Factor used to lower the priority of a job for each delivery attempt. [RetryFactor]

confQUEUE_SORT_ORDER

Default is Priority. Sorts queue by Priority or Host order. [QueueSortOrder]

confMIN_QUEUE_AGE

Default is 0. Minimum time a job must be queued. [MinQueueAge]

confDEF_CHAR_SET

Default is unknown-8bit. Default character set for unlabeled 8-bit IME data. [DefaultCharSet]

confSERVICE_SWITCH_FILE

Default is /etc/service.switch. The path to the service switch file. [ServiceSwitchFile]

confHOSTS_FILE

Default is /etc/hosts. The path to the hostnames file. [HostsFile]

confDIAL_DELAY

Default is 0s. Amount of time to delay before retrying a "dial on demand" connection. 0s means "don't retry." [DialDelay]

confNO_RCPT_ACTION

Default is none. Handling for mail with no recipient headers: do nothing (none); add To: header (add-to); add Apparently-To: header (add-apparently-to); add a Bcc: header (add-bcc); add "To: undisclosed-recipients" header (add-to-undisclosed). [NoRecipientAction]

confSAFE_FILE_ENV

Default is undefined. chroot( ) to this directory before writing files. [SafeFileEnvironment]

confCOLON_OK_IN_ADDR

Default is True. Treats colons as regular characters in addresses. [ColonOkInAddr]

confMAX_QUEUE_RUN_SIZE

Default is 0. Limits the number of entries processed in a queue run. means no limit. [MaxQueueRunSize]

confDONT_EXPAND_CNAMES

Default is False. If true, don't convert nicknames to canonical names. False means to convert. [DontExpandCnames]

confFROM_LINE

Default is From $g $d. The format of the Unix From: line. [UnixFromLine]

confOPERATORS

Default is .:%@!^/[]+. Address operator characters. [OperatorChars]

confSMTP_LOGIN_MSG

Default is $j sendmail $v/$Z; $b. The SMTP greeting message. [SmtpGreetingMessage]

confDONT_INIT_GROUPS

Default is False. If true, disable the initgroups(3) routine. False means to use the initgroups(3) routine. [DontInitGroups]

confUNSAFE_GROUP_WRITES

Default is False. If true, don't reference programs or files from group-writable :include: and .forward files. [UnsafeGroupWrites]

confDOUBLE_BOUNCE_ADDRESS

Default is postmaster. When errors occur sending an error message, send the second error message to this address. [DoubleBounceAddress]

confRUN_AS_USER

Default is undefined. Run as this user to read and deliver mail. [RunAsUser]

confSINGLE_THREAD_DELIVERY

Default is False. Force single-threaded mail delivery when set with HostStatusDirectory. [SingleThreadDelivery]

confALLOW_BOGUS_HELO

Defines normally illegal special characters that will be allowed in the DNS hostname on a HELO or EHLO command line. [AllowBogusHELO]

confAUTH_MECHANISMS

Defines a space-separated list of authentication mechanisms that will be advertised by this server. Possible values are GSSAPI, KERBEROS_V4, DIGEST-MD5, and CRAM-MD5. [AuthMechanisms]

confAUTH_OPTIONS

The AUTH= argument is added to the MAIL FROM header only when authentication succeeds if this is set to A. [AuthOptions]

confCACERT

Identifies a file containing a cryptographic certificate from a certificate authority. [CACERTFile]

confCACERT_PATH

Defines the path to the directory that contains the cryptographic certificates. [CACERTPath]

confCLIENT_CERT

Identifies the file containing the cryptographic certificate sendmail uses when it acts as client. [ClientCertFile]

confCLIENT_KEY

Identifies the file containing the private key associated with the certificate used when sendmail acts as a client. [ClientKeyFile]

confCLIENT_OPTIONS

Defines the port options used for outbound SMTP client connections. [ClientPortOptions]

confCONNECT_ONLY_TO

Limits connectivity. Used for testing by the sendmail developers. This is not used in production environments. [ConnectOnlyTo]

confCONTROL_SOCKET_NAME

Defines a socket used for managing the sendmail daemon. [ControlSocketName]

confCR_FILE

Points to the file that lists the hosts for which this server will relay mail. Defaults to /etc/mail/relay-domains. [$=R]

confDEAD_LETTER_DROP

Defines the file where failed messages that could not be returned to the sender or sent to the postmaster are saved. [DeadLetterDrop]

confDEF_AUTH_INFO

Identifies the file that contains the authentication information used for outbound connections. [DefaultAuthInfo]

confDF_BUFFER_SIZE

Defines the maximum amount of buffer memory that will be used before a disk file is used. [DataFileBufferSize]

confDH_PARAMETERS

Identifies the file that contains the DH parameters for the DSA/DH digital signature algorithm. [DHParameters]

confDONT_BLAME_SENDMAIL

Tells sendmail to perform certain file security checks. By default, all checks are performed. This option weakens the security of your server. See the DontBlameSendmail option later in this appendix for a full list of the values that can be used with this parameter. [DontBlameSendmail]

confDONT_PROBE_INTERFACES

Tells sendmail not to automatically accept the addresses of the server's network interfaces as valid addresses if set to true. Defaults to false. [DontProbeInterface]

confEBINDIR

Defines the directory where executables for FEATURE(`local_lmtp') and FEATURE(`smrsh') are stored. The default directory is /usr/libexec.

confLDAP_DEFAULT_SPEC

Defines the defaults used for LDAP databases unless specifically overridden by a K command for an individual map. [LDAPDefaultSpec]

confMAX_ALIAS_RECURSION

Aliases can refer to other aliases. This sets the maximum depth that alias references can be nested. The default is 10. [MaxAliasRecursion]

confMAX_HEADERS_LENGTH

Defines the maximum length of the sum of all headers in bytes. [MaxHeadersLength]

confMAX_MIME_HEADER_LENGTH

Defines the maximum length of MIME headers. [MaxMimeHeaderLength]

confMAX_RCPTS_PER_MESSAGE

Defines the maximum number of recipients allowed for a piece of mail. [MaxRecipientsPerMessage]

confMUST_QUOTE_CHARS

Adds characters to the list of characters that must be quoted when they are included in the user's full name ($x). The characters @,;:\( )[] are always quoted. By default . and ` are added to the list. [MustQuoteChars]

confPID_FILE

Specifies the path of the PID file. [PidFile]

confPROCESS_TITLE_PREFIX

Identifies the string used on this system as the prefix for the process title in ps listings. [ProcessTitlePrefix]

confRAND_FILE

Identifies the file that contains random data needed by STARTTLS if sendmail was not compiled with the HASURANDOM flag. [RandFile]

confREJECT_MSG

Defines the message displayed when mail is rejected because of the access control database. Defaults to "550 Access denied".

confRRT_IMPLIES_DSN

True tells sendmail to interpret a Return-Receipt-To: header as a request for delivery status notification (DSN). The default is false. [RrtImpliesDsn]

confSERVER_CERT

Identifies the file that contains the cryptographic certificate used when this system acts as server. [ServerCertFile]

confSERVER_KEY

Identifies the file that contains the private key associated with the cryptographic certificate used when this system acts as server. [ServerKeyFile]

confSINGLE_LINE_FROM_HEADER

True forces a multiline From: line to a single line. The default is false. [SingleLineFromHeader]

confTO_RESOLVER_RETRANS

Defines, in seconds, the retransmission timer for all resolver lookups. [Timeout.resolver.retrans]

confTO_RESOLVER_RETRANS_FIRST

Defines, in seconds, the retransmission timer for the resolver lookup for the first attempt to deliver a message. [Timeout.resolver.retrans.first]

confTO_RESOLVER_RETRANS_NORMAL

Defines, in seconds, the retransmission timer for all resolver lookups after the first attempt to deliver a message. [Timeout.resolver.retrans.normal]

confTO_RESOLVER_RETRY

Defines the total number of times to retry a resolver query. [Timeout.resolver.retry]

confTO_RESOLVER_RETRY_FIRST

Defines the number of times the resolver query for the first delivery attempt is retried. [Timeout.resolver.retry.first]

confTO_RESOLVER_RETRY_NORMAL

Defines the number of times to retry resolver queries after the first delivery attempt. [Timeout.resolver.retry.normal]

confTRUSTED_USER

Defines the user who controls the sendmail daemon and owns the files created by sendmail. Do not confuse this option with confTRUSTED_USERS. [TrustedUser]

confXF_BUFFER_SIZE

Defines the maximum amount of buffer memory that can be used for a transcript file before the file must be written to disk. The default is 4096 bytes. [XScriptFileBufferSize]

define macros are the most common macros in the m4 source files. The next most commonly used macro is the FEATURE macro.

E.3.2. FEATURE

The FEATURE macro processes m4 source code from the cf/feature directory. Source files in that directory define optional sendmail features that you may wish to include in your configuration. The syntax of the FEATURE macro is:

FEATURE(name, [argument])

The FEATURE source file can be called with or without an optional argument. If an argument is passed to the source file, the argument is used by the source file to generate code for the sendmail.cf file. For example:

FEATURE(`mailertable', `hash /etc/mail/mailertable')

generates the code for accessing the mailertable and defines that table as being a hash database located in the file /etc/mail/mailertable.

There are several features available in sendmail V8. They are all listed in Table E-3. The table provides the name of each feature and its purpose.

Table E-3. sendmail features

Name

Purpose

use_cw_file

Load $=w from /etc/mail/local-host-names.

use_ct_file

Load $=t from /etc/mail/trusted-users.

relay_based_on_MX

Relay mail for any site whose MX points to this server.

relay_entire_domain

Relay mail for any host in your domain.

relay_hosts_only

Only relay mail for hosts listed in the access database.

relay_local_from

Relay mail if the source is a local host.

relay_mail_from

Relay mail if the sender is listed as RELAY in the access database.

promiscuous_relay

Relay mail from any site to any site.

rbl

The obsolete Realtime Blackhole List feature has been replaced by dnsbl.

dnsbl

Reject mail from hosts listed in a DNS-based rejection list. Replaces rbl.

blacklist_recipients

Filter incoming mail based on values set in the access database.

delay_checks

Delay the check_mail and check_relay rulesets until check_rcpt is called.

loose_relay_check

Disable validity checks for addresses that use the % hack.

redirect

Support the .REDIRECT pseudo-domain.

no_default_msa

Allow the default configuration of the Message Submission Agent to be overridden by the DAEMON_OPTIONS macro.

nouucp

Don't include UUCP address processing.

nocanonify

Don't convert names with $[name$] syntax.

stickyhost

Treat "user" differently than "[email protected]".[166]

mailertable

Mail routing using a mailer table.

domaintable

Domain name mapping using a domain table.

access_db

Relay control using the access database.

bitdomain

Use a table to map bitnet hosts to Internet addresses.

uucpdomain

Use a table to map UUCP hosts to Internet addresses.

accept_unqualified_senders

Allow network mail from addresses that do not include a valid hostname.

accept_unresolvable_domains

Accept mail from hosts that are unknown to DNS.

always_add_domain

Add the local hostname to all locally delivered mail.

allmasquerade

Also masquerade recipient addresses.

limited_masquerade

Only masquerade hosts listed in $=M.

masquerade_entire_domain

Masquerade all hosts within the masquerading domains.

masquerade_envelope

Also masquerade envelope addresses. The default is to masquerade only header addresses.

genericstable

Use a table to rewrite local addresses.

generics_entire_domain

Map domain names identified in class G through the genericstable.

virtusertable

Map virtual domain names to real mail addresses.

virtuser_entire_domain

Map domain names through the virtusertable.

ldap_routing

Enable LDAP-based email routing.

nodns

Don't include DNS support.

nullclient

Forward all mail to a central server.

local_lmtp

Use mail.local with LMTP support.

local_procmail

Use procmail as the local mailer.

bestmx_is_local

Accept mail as local when it is addressed to a host that lists us as its MX server.

smrsh

Use smrsh as the prog mailer.

[166] See the discussion of "stickyhost" in the "DOMAIN" section later in this appendix.

The use_cw_file and the use_ct_file features are equivalent to Fw/etc/sendmail.cw and Fw/etc/sendmail.ct commands in the sendmail.cf file. See Chapter 10, "sendmail " for descriptions of host aliases ($=w) and trusted users ($=t).

The .REDIRECT pseudo-domain code returns an error message to the sender telling the sender to try a new address for the recipient. This is used to handle mail for people who no longer read mail at your site but who are still getting mail sent to a very old address. Enable this feature with the FEATURE(redirect) command and then add aliases for each obsolete mailing address in the form:

 old-address new-address.REDIRECT

For example, assume that Edward Winslow is no longer a valid user of crab.wrotethebook.com. Therefore, his old username, ed, should no longer accept mail. His new mailing address is [email protected]. We enter the following alias in the /etc/aliases file:

 ed    [email protected]

Now when mail is sent to the ed account on crab, the following error is returned to the sender:

 551 User not local; please try <[email protected]>

Several of the FEATURE macros actually remove features from the sendmail.cf file instead of adding them. nouucp removes the code to handle UUCP addresses for systems that do not have access to UUCP networks, and nodns removes the code for DNS lookups for systems that do not have access to DNS. nocanonify disables the $[name]$ syntax that converts nicknames and IP addresses to canonical names. Finally, the nullclient feature strips everything out of the configuration except for the ability to forward mail to a single mail server via a local SMTP link. The name of the mail server is provided as the argument on the nullclient command line. For example, FEATURE(nullclient, ms.big.com) forwards all mail to ms.big.com without any local mail processing.

Several features relate to mail relaying and masquerading. Examples include stickyhost, relay_based_on_MX, allmasquerade, limited_masquerade, and masquerade_entire_domain. All of these features are covered in the "DOMAIN" section later in this appendix.

Several of the features define databases that are used to perform special address processing. All of these features accept an optional argument that defines the database. (See the sample mailertable command at the beginning of this section for an example of defining the database with the optional argument.) If the optional argument is not provided, the database description always defaults to hash -o /etc/mail/filename, where filename matches the name of the feature. For example, mailertable defaults to the definition hash -o /etc/mail/mailertable. The database features are:

mailertable

Maps host and domain names to specific mailer:host pairs. If the host or domain name in the recipient addresses matches a key field in the mailertable database, it returns the mailer and host for that address. The format of mailertable entries is:

domain-name mailer:host

where domain-name is either a full hostname (host plus domain) or a domain name. If a domain name is used it must start with a dot (.), and it will match every host in the specified domain.

domaintable

Converts an old domain name to a new domain name. The old name is the key and the new name is the value returned for the key.

bitdomain

Converts a Bitnet hostname to an Internet hostname. The Bitnet name is the key and the Internet hostname is the value returned. The bitdomain program that comes with sendmail can be used to build this database.

uucpdomain

Converts a UUCP name to an Internet hostname. The key is the UUCP hostname and the value returned is the Internet hostname.

genericstable

Converts a sender email address. The key to the database is either a username or a full email address (username and hostname). The value returned by the database is the new email address. genericstable is often used to convert the same address as those processed for masquerading and thus the features that affect masquerading and those that affect the genericstable conversion are set to exactly the same values. If you use the genericstable and you use masquerading, set GENERICS_DOMAIN and GENERICS_DOMAIN_FILE to the same values as MASQUERADE_DOMAIN and MASQUERADE_DOMAIN_FILE.

virtusertable

Aliases incoming email addresses. Essentially, this is an extended alias database for aliasing addresses that are not local to this host. The key to the database is a full email address or a domain name. The value returned by the database is the recipient address to which the mail is delivered. If a domain name is used as a key, it must begin with an at-sign (@). Mail addressed to any user in the specified domain is sent to the recipient defined by the virtusertable database. Any hostname used as a key in the virtusertable database must also be defined in class w or class {VirtHost}. A hostname can be added to class w with the LOCAL_DOMAIN macro. Hostnames can be added to the {VirtHost} class using the VIRTUSER_DOMAIN macro. The {VirtHost} class can be loaded from a file using the VIRTUSER_DOMAIN_FILE macro.

Some features are important in the fight against spam because they help you control what mail your server will deliver or forward on for delivery. These are accept_unqualified_senders, accept_unresolvable_domains, access_db, blacklist_recipients, and dnsbl. The access database lists email sources and how mail from these sources should be treated. The dnsbl uses a special DNS database to reject mail from specific sources. The blacklist_recipients feature extends the access_db and dnsbl controls to email destinations as well as email sources. Two of the features, accept_unqualified_senders and accept_unresolvable_domains, weaken relay controls by allowing relaying for hosts or domains that cannot be found via DNS. Use care when adjusting these controls.

Two of the remaining FEATURE commands relate to domains. The always_add_domain macro makes sendmail add the local hostname to all locally delivered mail, even to those pieces of mail that would normally have just a username as an address. The bestmx_is_local feature accepts mail addressed to a host that lists the local host as its preferred MX server as if the mail was local mail. If this feature is not used, mail bound for a remote host is sent directly to the remote host even if its MX record lists the local host as its preferred MX server. The bestmx_is_local feature should not be used if you use a wildcard MX record for your domain.

The last two features are used to select optional programs for the local and the prog mailers. local_procmail selects procmail as the local mailer. Provide the path to procmail as the argument in the FEATURE command. The smrsh feature selects the sendmail Restricted SHell (smrsh) as the prog mailer. smrsh provides improved security over /bin/sh, which is normally used as the prog mailer. Provide the path to smrsh as the argument in the FEATURE command.

The FEATURE commands discussed in this section and the define macros discussed previously are used to build the m4 source files. The following sections describe the purpose and structure of the OSTYPE, DOMAIN, and MAILER source files.

E.3.3. OSTYPE

The source file for the OSTYPE macro defines operating system-specific parameters. Many operating systems are predefined. Look in the sendmail/cf/ostype directory for a full listing of the systems that are already defined.

OSTYPE source files are mostly composed of define macros. Table E-4 lists the define parameters most frequently associated with the OSTYPE source file and the function of each parameter. If a default value is assigned to a parameter, it is shown enclosed in square brackets after the functional description.

Function

ALIAS_FILE

Name of the alias file. [/etc/mail/aliases]

HELP_FILE

Name of the help file. [/etc/mail/helpfile]

QUEUE_DIR

Directory containing queue files. [/var/spool/mqueue]

STATUS_FILE

Name of the status file. [/etc/mail/statistics]

LOCAL_MAILER_PATH

The local mail delivery program. [/bin/mail]

LOCAL_MAILER_FLAGS

Local mailer flags added to "lsDFMAW5:/|@q". [Prmn9]

LOCAL_MAILER_ARGS

Arguments for local mail delivery. [mail -d $u]

LOCAL_MAILER_MAX

Maximum size of local mail.

LOCAL_MAILER_CHARSET

Character set for local 8-bit MIME mail.

LOCAL_MAILER_DSN_DIAGNOSTIC_CODE

The delivery status notification code used for local mail. [X-Unix]

LOCAL_MAILER_EOL

The end-of-line character for local mail.

LOCAL_MAILER_MAXMSG

The maximum number of messages delivered with a single connection.

LOCAL_SHELL_PATH

Shell used to deliver piped email. [/bin/sh]

LOCAL_SHELL_FLAGS

Flags added to lsDFM for the shell mailer. [eu9]

LOCAL_SHELL_ARGS

Arguments for the "prog" mail. [sh -c $u]

LOCAL_SHELL_DIR

Directory in which the shell should run. [$z:/]

USENET_MAILER_PATH

Program used for news. [/usr/lib/news/inews]

USENET_MAILER_FLAGS

Usenet mailer flags. [rDFMmn]

USENET_MAILER_ARGS

Arguments for the usenet mailer. [-m -h -n]

USENET_MAILER_MAX

Maximum size of usenet mail messages. [100000]

SMTP_MAILER_FLAGS

Flags added to "mDFMuX" for all SMTP mailers.

SMTP_MAILER_MAX

Maximum size of messages for all SMTP mailers.

SMTP_MAILER_ARGS

smtp mailer arguments. [IPC $h]

ESMTP_MAILER_ARGS

esmtp mailer arguments. [IPC $h]

DSMTP_MAILER_ARGS

dsmtp mailer arguments. [IPC $h]

SMTP8_MAILER_ARGS

smtp8 mailer arguments. [IPC $h]

RELAY_MAILER_ARGS

relay mailer arguments. [IPC $h]

RELAY_MAILER_FLAGS

Flags added to "mDFMuX" for the relay mailer.

RELAY_MAIL_MAXMSG

The maximum number of messages for the relay mailer delivered by a single connection.

SMTP_MAILER_CHARSET

Character set for SMTP 8-bit MIME mail.

SMTP_MAIL_MAXMSG

The maximum number of SMTP messages delivered by a single connection.

UUCP_MAILER_PATH

Path to the UUCP mail program. [/usr/bin/uux]

UUCP_MAILER_FLAGS

Flags added to "DFMhuU" for the UUCP mailer.

UUCP_MAILER_ARGS

UUCP mailer arguments. [uux - -r -z -a$g -gC $h!rmail ($u)]

UUCP_MAILER_MAX

Maximum size for UUCP messages. [100000]

UUCP_MAILER_CHARSET

Character set for UUCP 8-bit MIME mail.

FAX_MAILER_PATH

Path to the FAX program. [/usr/local/lib/fax/mailfax]

FAX_MAILER_ARGS

FAX mailer arguments. [mailfax $u $h $f]

FAX_MAILER_MAX

Maximum size of a FAX. [100000]

POP_MAILER_PATH

Path of the POP mailer. [/usr/lib/mh/spop]

POP_MAILER_FLAGS

Flags added to "lsDFMq" for the POP mailer. [Penu]

POP_MAILER_ARGS

POP mailer arguments. [pop $u]

PROCMAIL_MAILER_PATH

Path to the procmail program. [/usr/local/bin/procmail]

PROCMAIL_MAILER_FLAGS

Flags added to "DFM" for the Procmail mailer. [SPhnu9]

PROCMAIL_MAILER_ARGS

Procmail mailer arguments. [procmail -Y -m $h $f $u]

PROCMAIL_MAILER_MAX

Maximum size message for the Procmail mailer.

MAIL11_MAILER_PATH

Path to the mail11 mailer. [/usr/etc/mail11]

MAIL11_MAILER_FLAGS

Flags for the mail11 mailer. [nsFx]

MAIL11_MAILER_ARGS

mail11 mailer arguments. [mail11 $g $x $h $u]

PH_MAILER_PATH

Path to the phquery program. [/usr/local/etc/phquery]

PH_MAILER_FLAGS

Flags for the phquery mailer. [ehmu]

PH_MAILER_ARGS

phquery mailer arguments. [phquery -- $u]

QPAGE_MAILER_ARGS

qpage mailer arguments. [qpage -10 -m -P$u]

QPAGE_MAILER_FLAGS

Flags for the qpage mailer. [mDFMs]

QPAGE_MAILER_MAX

Maximum qpage mailer message size. [4096]

QPAGE_MAILER_PATH

Path to the qpage mailer. [/usr/local/bin/qpage]

CYRUS_MAILER_FLAGS

Flags added to "lsDFMnPq" for the cyrus mailer. [A5@/:|]

CYRUS_MAILER_PATH

Path to the cyrus mailer. [/usr/cyrus/bin/deliver]

CYRUS_MAILER_ARGS

cyrus mailer arguments. [deliver -e -m $h -- $u]

CYRUS_MAILER_MAX

Maximum size message for the cyrus mailer.

CYRUS_MAILER_USER

User and group used for the cyrus mailer. [cyrus:mail]

CYRUS_BB_MAILER_FLAGS

Flags added to "lsDFMnP" for the cyrusbb mailer.

CYRUS_BB_MAILER_ARGS

cyrusbb mailer arguments. [deliver -e -m $u]

Despite the long list of parameters in Table E-4, most OSTYPE macros are very short. There are a few reasons for this. First, many of the parameters in the table are redundant. They define the same things for different mailers, and no operating system uses all of the mailers. Second, the default values are often correct. A define only needs to be made if the operating system requires a value different from the default.

E.3.4. DOMAIN

The DOMAIN source file defines configuration parameters that are related to the local domain. Chapter 10, "sendmail " provides an example of a DOMAIN file built for the imaginary wrotethebook.com domain.

Table E-5 shows some define macros that commonly appear in DOMAIN files. (See the syntax of the define macro earlier.) This table lists the parameters and the function of each parameter. All of these parameters are used to define mail relay hosts. The value provided for each parameter is either a hostname, i.e., the name of a mail relay server, or a mailer:hostname pair where the mailer is the internal name of a local sendmail mailer and the hostname is the name of the remote mail relay server. If only a hostname is used, the mailer defaults to relay, which is the name of the SMTP relay mailer. If no values are provided for these parameters, the BITNET, DECNET, and FAX pseudo-domains are not used, and the local host must be able to handle its own UUCP and "local" mail.

Table E-5. Mail relay define macros

Parameter

Function

UUCP_RELAY

Server for UUCP-addressed email

BITNET_RELAY

Server for BITNET-addressed email

DECNET_RELAY

Server for DECNET-addressed email

FAX_RELAY

Server for mail to the .FAX pseudo-domain[167]

LOCAL_RELAY

Server for unqualified names

LUSER_RELAY

Server for apparently local names that really aren't local

MAIL_HUB

Server for all incoming mail

SMART_HOST

Server for all outgoing mail

[167] The "fax" mailer overrides this value.

The precedence of the relays defined by these parameters is from the most specific to the least specific. If both the UUCP_RELAY and the SMART_HOST relay are defined, the UUCP_RELAY is used for outgoing UUCP mail even though the SMART_HOST relay is defined as handling "all" outgoing mail. If you define both LOCAL_RELAY and AIL_HUB, you must also use the FEATURE(stickyhost) command to get the expected behavior.

When the stickyhost feature is specified, LOCAL_RELAY handles all local addresses that do not have a host part, and MAIL_HUB handles all local addresses that do have a host part. If stickyhost is not specified and both relays are defined, the LOCAL_RELAY is ignored and AIL_HUB handles all local addresses.

In addition to the defines shown in Table E-5, there is a group of macros that relate to masquerading and relaying that also appear in the DOMAIN source file. Some of these are used in the examples in Chapter 10, "sendmail ". The macros are:

LOCAL_USER(usernames)

Defines local usernames that should not be relayed even if LOCAL_RELAY or MAIL_HUB is defined. This command is the same as adding usernames to class L in the sendmail.cf file.

MASQUERADE_AS(host.domain)

Converts the host portion of the sender address on outgoing mail to the domain name defined by host.domain. Sender addresses that have no hostname or that have a hostname found in the w class are converted. This has the same effect as defining host.domain for the M macro in the sendmail.cf file. See examples of MASQUERADE_AS and macro M in Chapter 10, "sendmail ".

MASQUERADE_DOMAIN(otherhost.domain)

Converts the host portion of the sender address on outgoing mail to the domain name defined by the MASQUERADE_AS command, if the host portion of the sender address matches otherhost.domain. This command must be used in conjunction with MASQUERADE_AS. Its effect is the same as adding hostnames to class M in the sendmail.cf file. See Chapter 10, "sendmail ".

MASQUERADE_DOMAIN_FILE(filename)

Loads otherhost.domain hostnames from the file identified by filename. This can be used in place of multiple MASQUERADE_DOMAIN commands. Its effect is the same as loading class M from a file by using the FMfilename command in the sendmail.cf file.

MASQUERADE_EXCEPTION(host.domain)

This macro defines a host that is not masqueraded, even if it belongs to a domain that is being masqueraded. This allows you to masquerade an entire domain with the MASQUERADE_DOMAIN macro and then exempt a few hosts that should be exposed to the outside world.

EXPOSED_USER(username)

Disables masquerading when the user portion of the sender address matches username. Some usernames, such as root, occur on many systems and are therefore not unique across a domain. For those usernames, converting the host portion of the address makes it impossible to sort out where the message really came from and makes replies impossible. This command prevents the ASQUERADE_AS command from having an effect on the sender addresses for specific users. This is the same as setting the values in class E in the sendmail.cf file.

RELAY_DOMAIN(otherhost.domain)

This macro identifies a host for which mail should be relayed. The host identified in this manner is added to class R.

RELAY_DOMAIN_FILE(filename)

This macro identifies a file that contains a list of hosts for which mail should be relayed. This macro loads class R from the specified file.

There are several features that affect relaying and masquerading. We have already discussed FEATURE(stickyhost). Others are:

FEATURE(masquerade_envelope)

Causes envelope addresses to be masqueraded in the same way that sender addresses are masqueraded. See Chapter 10, "sendmail " for an example of this command.

FEATURE(allmasquerade)

Causes recipient addresses to be masqueraded in the same way that sender addresses are masqueraded. Thus, if the host portion of the recipient address matches the requirements of the MASQUERADE_AS command, it is converted. Don't use this feature unless you are positive that every alias known to the local system is also known to the mail server that handles mail for the masquerade domain.

FEATURE(limited_masquerade)

Limits masquerading to those hosts defined in class M. The hosts defined in class w are not masqueraded.

FEATURE(masquerade_entire_domain)

Causes MASQUERADE_DOMAIN to be interpreted as referring to all hosts within an entire domain. If this feature is not used, only an address that exactly matches the value defined by MASQUERADE_DOMAIN is converted. If this feature is used, all addresses that end with the value defined by MASQUERADE_DOMAIN are converted. For example, assume that the options MASQUERADE_AS(wrotethebook.com) and ASQUERADE_DOMAIN(sales.wrotethebook.com) are defined. If FEATURE(masquerade_entire_domain) is set, every hostname in the sales.wrotethebook.com domain is converted to wrotethebook.com on outgoing email. Otherwise, only the hostname sales.wrotethebook.com is converted.

Some features define how the server handles mail if it is the mail relay server. These features, which are mentioned in the "FEATURE" section earlier in this appendix, are:

FEATURE(access_db)

Adds the code necessary to use the access database. The access database maps a user, a domain name, or an IP address to a keyword that tells sendmail how to handle relaying for the host, domain, or network.

FEATURE(blacklist_recipient)

Uses the access database to control delivery of mail based on the recipient address. The basic access_db feature controls relaying and delivery based on the source of the message. This feature adds to that the ability to control mail relaying and delivery based on the destination.

FEATURE(dnsbl)

Controls mail delivery based on a DNS blacklist. Source addresses and destination addresses listed in the DNS blacklist database may be denied mail delivery or relay services.

FEATURE(promiscuous_relay)

Relays mail from any site to any site. Normally, sendmail does not relay mail. Mail relays can be abused by spammers and spoofers. Enable them with caution.

FEATURE(relay_entire_domain)

Relays mail from any domain defined in class M to any site.

FEATURE(relay_hosts_only)

Relays mail from any host defined in the access database or in class R.

FEATURE(relay_based_on_MX)

Relays mail from any site for which your system is the MX server.

FEATURE(relay_local_from)

Relays mail with a sender address that contains your local domain name.

Inbound mail can also be filtered to reduce the impact of spammers. Two macros are available for this purpose:

MAIL_FILTER(`name', `equates')

This macro defines a mail filter using the Sendmail Mail Filter API syntax.

INPUT_MAIL_FILTER(`name', `equates')

This macro defines a mail filter and sets up the call for that mail filter.

The DOMAIN source file is also used for features and macros that directly relate to DNS. These features are:

FEATURE(accept_unqualified_senders)

This feature accepts mail even if the sender address does not include a hostname. Normally, only mail from a user directly logged on to the system is accepted without a hostname. This is a dangerous feature that should be used only on an isolated network.

FEATURE(accept_unresolvable_domains)

This feature accepts mail from hostnames that cannot be resolved by DNS. This is a dangerous feature that is used only on systems that lack full-time DNS service.

FEATURE(always_add_domain)

This feature adds the hostname of the system to all local mail. With this feature enabled on a server named [email protected], mail from the local user craig to the local user kathy would be delivered as mail from craig@[email protected] to kathy@[email protected].

FEATURE(bestmx_is_local)

With this feature, mail addressed to any host that lists the local server as its MX server is accepted by the server as local mail.

The DNS macros are:

CANONIFY_DOMAIN(domain)

This macro defines a domain name that will be passed to DNS for conversion to its canonical form even if the nocanonify feature is in use. Computers can be known by aliases. The official domain name of a host stored in DNS is called its canonical name. This macro is generally used to enable canonification of the local domain when nocanonify is in use.

CANONIFY_DOMAIN_FILE(filename)

This macro identifies a file containing a list of domain names that should be converted to canonical form even if nocanonify has been selected.

LOCAL_DOMAIN(alias-hostname)

This macro defines an alias for the local host. Mail addressed to the alias will be accepted as if it were addressed directly to the local host.

The macros and features described in this section are not limited to the DOMAIN source file. They can appear in any m4 source file, and, in fact, are often found in the macro control file. However, they are most naturally associated with the DOMAIN file as indicated by the documentation in the cf/cf/README file.

E.3.5. MAILER

It is possible that you will need to customize a file location in an OSTYPE file or that define domain-specific information in a DOMAIN file, but unless you develop your own mail delivery program you will not need to create a MAILER source file. Instead, you will need to invoke one or more existing files in your macro configuration file.

The available MAILER files are listed in Table E-6. This table lists each MAILER value and its function. These are invoked using the MAILER(value) command in the macro configuration (.mc) file, where value is one of the mailer names from the table.

Function

local

The local and prog mailers

smtp

All SMTP mailers: smtp, esmtp, smtp8, and relay

uucp

All UUCP mailers: uucp-old (uucp) and uucp-new (suucp)

usenet

Usenet news support

fax

Fax support using FlexFAX software

pop

Post Office Protocol (POP) support

procmail

An interface for procmail

mail11

The DECnet mail11 mailer

phquery

The phquery program for CSO phone book

qpage

The QuickPage mailer used to send email to a pager

cyrus

The cyrus and cyrusbb mailers

Your macro configuration file should have a MAILER(local) and a MAILER(smtp) entry. This gives you the local and prog mailers required by sendmail, the smtp mailer for standard SMTP mail, the esmtp mailer for Extended SMTP, the smtp8 mailer for 8-bit MIME mail, and the relay mailer for the various mail relay servers mentioned in the "DOMAIN" section of this appendix. Selecting local and smtp provides everything you need for a standard TCP/IP installation.

Of all the remaining mailers, only uucp is widely used. uucp provides UUCP mail support for systems directly connected to UUCP networks. The uucp-old mailer supports standard UUCP mail, and the uucp-new mailer is used for remote sites that can handle multiple recipients in one transfer. The system needs the mailer that is correct for the capabilities of the remote site. Use class U to define the hostnames of systems that need the old mailer, and class Y for the names of remote systems that can work with the new mailer. Specify AILER(uucp) after the MAILER(smtp) entry if your system has both TCP/IP and UUCP connections. Ordering the MAILER statements in this way adds two more mailers to the two standard UUCP mailers: the uucp-dom mailer to support standard domain names, and the uucp-uudom mailer to support standard domain names with a standard UUCP envelope.

The other mailers are rarely used:

usenet

Modifies the sendmail rewrite rules to send local mail that contains ".usenet" in the username to the program inews. Instead of this mailer, choose a user mail agent that supports Usenet news. Don't hack sendmail to handle it.

fax

This is an experimental mailer that supports HylaFax software.

pop

On most systems, POP support is provided separately by the popd daemon, and the MAILER(pop) command is not used.

procmail

Only provides an interface to procmail for use in the mailertable. The sendmail V8 distribution does not provide procmail. Even when procmail is used as the local mailer, as it is in Slackware Linux, the MAILER(procmail) command is not required.

mail11

Only used on DECNET mail networks that use the mail11 mailer.

phquery

Provides a name lookup program for the CSO phone book (ph) directory service. User directory services are usually configured in the user mail agent, not in sendmail.

qpage

Provides an interface from email to pagers using the QuickPage program.

cyrus

This is a local mail delivery program with a mailbox architecture. cyrus and cyrusbb mailers are not widely used.

This concludes our discussion of m4 macros. The output of all of the files and commands that go into the m4 processor is a sendmail.cf file. The remainder of this appendix provides additional details about the sendmail.cf configuration. The bulk of information about sendmail.cf is found in Chapter 10, "sendmail ".



Library Navigation Links

Copyright © 2002 O'Reilly & Associates. All rights reserved.