xref: /titanic_52/usr/src/cmd/sendmail/cf/README (revision 49218d4f8e4d84d1c08aeb267bcf6e451f2056dc)
17c478bd9Sstevel@tonic-gate
27c478bd9Sstevel@tonic-gate		SENDMAIL CONFIGURATION FILES
37c478bd9Sstevel@tonic-gate
47c478bd9Sstevel@tonic-gateThis document describes the sendmail configuration files.  It
57c478bd9Sstevel@tonic-gateexplains how to create a sendmail.cf file for use with sendmail.
67c478bd9Sstevel@tonic-gateIt also describes how to set options for sendmail which are explained
77c478bd9Sstevel@tonic-gatein the Sendmail Installation and Operation guide, which can be found
87c478bd9Sstevel@tonic-gateon-line at http://www.sendmail.org/%7Eca/email/doc8.12/op.html .
97c478bd9Sstevel@tonic-gateRecall this URL throughout this document when references to
107c478bd9Sstevel@tonic-gatedoc/op/op.* are made.
117c478bd9Sstevel@tonic-gate
127c478bd9Sstevel@tonic-gateTable of Content:
137c478bd9Sstevel@tonic-gate
147c478bd9Sstevel@tonic-gateINTRODUCTION AND EXAMPLE
157c478bd9Sstevel@tonic-gateA BRIEF INTRODUCTION TO M4
167c478bd9Sstevel@tonic-gateFILE LOCATIONS
177c478bd9Sstevel@tonic-gateOSTYPE
187c478bd9Sstevel@tonic-gateDOMAINS
197c478bd9Sstevel@tonic-gateMAILERS
207c478bd9Sstevel@tonic-gateFEATURES
217c478bd9Sstevel@tonic-gateHACKS
227c478bd9Sstevel@tonic-gateSITE CONFIGURATION
237c478bd9Sstevel@tonic-gateUSING UUCP MAILERS
247c478bd9Sstevel@tonic-gateTWEAKING RULESETS
257c478bd9Sstevel@tonic-gateMASQUERADING AND RELAYING
267c478bd9Sstevel@tonic-gateUSING LDAP FOR ALIASES, MAPS, AND CLASSES
277c478bd9Sstevel@tonic-gateLDAP ROUTING
287c478bd9Sstevel@tonic-gateANTI-SPAM CONFIGURATION CONTROL
297c478bd9Sstevel@tonic-gateCONNECTION CONTROL
307c478bd9Sstevel@tonic-gateSTARTTLS
317c478bd9Sstevel@tonic-gateADDING NEW MAILERS OR RULESETS
327c478bd9Sstevel@tonic-gateADDING NEW MAIL FILTERS
337c478bd9Sstevel@tonic-gateQUEUE GROUP DEFINITIONS
347c478bd9Sstevel@tonic-gateNON-SMTP BASED CONFIGURATIONS
357c478bd9Sstevel@tonic-gateWHO AM I?
367c478bd9Sstevel@tonic-gateACCEPTING MAIL FOR MULTIPLE NAMES
377c478bd9Sstevel@tonic-gateUSING MAILERTABLES
387c478bd9Sstevel@tonic-gateUSING USERDB TO MAP FULL NAMES
397c478bd9Sstevel@tonic-gateMISCELLANEOUS SPECIAL FEATURES
407c478bd9Sstevel@tonic-gateSECURITY NOTES
417c478bd9Sstevel@tonic-gateTWEAKING CONFIGURATION OPTIONS
427c478bd9Sstevel@tonic-gateMESSAGE SUBMISSION PROGRAM
437c478bd9Sstevel@tonic-gateFORMAT OF FILES AND MAPS
447c478bd9Sstevel@tonic-gateDIRECTORY LAYOUT
457c478bd9Sstevel@tonic-gateADMINISTRATIVE DETAILS
467c478bd9Sstevel@tonic-gate
477c478bd9Sstevel@tonic-gate
487c478bd9Sstevel@tonic-gate+--------------------------+
497c478bd9Sstevel@tonic-gate| INTRODUCTION AND EXAMPLE |
507c478bd9Sstevel@tonic-gate+--------------------------+
517c478bd9Sstevel@tonic-gate
527c478bd9Sstevel@tonic-gateConfiguration files are contained in the subdirectory "cf", with a
537c478bd9Sstevel@tonic-gatesuffix ".mc".  They must be run through "m4" to produce a ".cf" file.
547c478bd9Sstevel@tonic-gateYou must pre-load "cf.m4":
557c478bd9Sstevel@tonic-gate
567c478bd9Sstevel@tonic-gate	m4 ${CFDIR}/m4/cf.m4 config.mc > config.cf
577c478bd9Sstevel@tonic-gate
587c478bd9Sstevel@tonic-gateAlternatively, you can simply:
597c478bd9Sstevel@tonic-gate
607c478bd9Sstevel@tonic-gate	cd ${CFDIR}/cf
617c478bd9Sstevel@tonic-gate	/usr/ccs/bin/make config.cf
627c478bd9Sstevel@tonic-gate
637c478bd9Sstevel@tonic-gatewhere ${CFDIR} is the root of the cf directory and config.mc is the
647c478bd9Sstevel@tonic-gatename of your configuration file.  If you are running a version of M4
657c478bd9Sstevel@tonic-gatethat understands the __file__ builtin (versions of GNU m4 >= 0.75 do
667c478bd9Sstevel@tonic-gatethis, but the versions distributed with 4.4BSD and derivatives do not)
677c478bd9Sstevel@tonic-gateor the -I flag (ditto), then ${CFDIR} can be in an arbitrary directory.
687c478bd9Sstevel@tonic-gateFor "traditional" versions, ${CFDIR} ***MUST*** be "..", or you MUST
697c478bd9Sstevel@tonic-gateuse -D_CF_DIR_=/path/to/cf/dir/ -- note the trailing slash!  For example:
707c478bd9Sstevel@tonic-gate
717c478bd9Sstevel@tonic-gate	m4 -D_CF_DIR_=${CFDIR}/ ${CFDIR}/m4/cf.m4 config.mc > config.cf
727c478bd9Sstevel@tonic-gate
737c478bd9Sstevel@tonic-gateLet's examine a typical .mc file:
747c478bd9Sstevel@tonic-gate
757c478bd9Sstevel@tonic-gate	divert(-1)
767c478bd9Sstevel@tonic-gate	#
77*49218d4fSjbeck	# Copyright (c) 1998-2005 Sendmail, Inc. and its suppliers.
787c478bd9Sstevel@tonic-gate	#	All rights reserved.
797c478bd9Sstevel@tonic-gate	# Copyright (c) 1983 Eric P. Allman.  All rights reserved.
807c478bd9Sstevel@tonic-gate	# Copyright (c) 1988, 1993
817c478bd9Sstevel@tonic-gate	#	The Regents of the University of California.  All rights reserved.
827c478bd9Sstevel@tonic-gate	#
837c478bd9Sstevel@tonic-gate	# By using this file, you agree to the terms and conditions set
847c478bd9Sstevel@tonic-gate	# forth in the LICENSE file which can be found at the top level of
857c478bd9Sstevel@tonic-gate	# the sendmail distribution.
867c478bd9Sstevel@tonic-gate	#
877c478bd9Sstevel@tonic-gate
887c478bd9Sstevel@tonic-gate	#
897c478bd9Sstevel@tonic-gate	#  This is a Berkeley-specific configuration file for HP-UX 9.x.
907c478bd9Sstevel@tonic-gate	#  It applies only to the Computer Science Division at Berkeley,
917c478bd9Sstevel@tonic-gate	#  and should not be used elsewhere.   It is provided on the sendmail
927c478bd9Sstevel@tonic-gate	#  distribution as a sample only.  To create your own configuration
937c478bd9Sstevel@tonic-gate	#  file, create an appropriate domain file in ../domain, change the
947c478bd9Sstevel@tonic-gate	#  `DOMAIN' macro below to reference that file, and copy the result
957c478bd9Sstevel@tonic-gate	#  to a name of your own choosing.
967c478bd9Sstevel@tonic-gate	#
977c478bd9Sstevel@tonic-gate	divert(0)
987c478bd9Sstevel@tonic-gate
997c478bd9Sstevel@tonic-gateThe divert(-1) will delete the crud in the resulting output file.
1007c478bd9Sstevel@tonic-gateThe copyright notice can be replaced by whatever your lawyers require;
1017c478bd9Sstevel@tonic-gateour lawyers require the one that is included in these files.  A copyleft
1027c478bd9Sstevel@tonic-gateis a copyright by another name.  The divert(0) restores regular output.
1037c478bd9Sstevel@tonic-gate
1047c478bd9Sstevel@tonic-gate	VERSIONID(`<SCCS or RCS version id>')
1057c478bd9Sstevel@tonic-gate
1067c478bd9Sstevel@tonic-gateVERSIONID is a macro that stuffs the version information into the
1077c478bd9Sstevel@tonic-gateresulting file.  You could use SCCS, RCS, CVS, something else, or
1087c478bd9Sstevel@tonic-gateomit it completely.  This is not the same as the version id included
1097c478bd9Sstevel@tonic-gatein SMTP greeting messages -- this is defined in m4/version.m4.
1107c478bd9Sstevel@tonic-gate
1117c478bd9Sstevel@tonic-gate	OSTYPE(`hpux9')dnl
1127c478bd9Sstevel@tonic-gate
1137c478bd9Sstevel@tonic-gateYou must specify an OSTYPE to properly configure things such as the
1147c478bd9Sstevel@tonic-gatepathname of the help and status files, the flags needed for the local
1157c478bd9Sstevel@tonic-gatemailer, and other important things.  If you omit it, you will get an
1167c478bd9Sstevel@tonic-gateerror when you try to build the configuration.  Look at the ostype
1177c478bd9Sstevel@tonic-gatedirectory for the list of known operating system types.
1187c478bd9Sstevel@tonic-gate
1197c478bd9Sstevel@tonic-gate	DOMAIN(`CS.Berkeley.EDU')dnl
1207c478bd9Sstevel@tonic-gate
1217c478bd9Sstevel@tonic-gateThis example is specific to the Computer Science Division at Berkeley.
1227c478bd9Sstevel@tonic-gateYou can use "DOMAIN(`generic')" to get a sufficiently bland definition
1237c478bd9Sstevel@tonic-gatethat may well work for you, or you can create a customized domain
1247c478bd9Sstevel@tonic-gatedefinition appropriate for your environment.
1257c478bd9Sstevel@tonic-gate
1267c478bd9Sstevel@tonic-gate	MAILER(`local')
1277c478bd9Sstevel@tonic-gate	MAILER(`smtp')
1287c478bd9Sstevel@tonic-gate
1297c478bd9Sstevel@tonic-gateThese describe the mailers used at the default CS site.  The local
1307c478bd9Sstevel@tonic-gatemailer is always included automatically.  Beware: MAILER declarations
1317c478bd9Sstevel@tonic-gateshould only be followed by LOCAL_* sections.  The general rules are
1327c478bd9Sstevel@tonic-gatethat the order should be:
1337c478bd9Sstevel@tonic-gate
1347c478bd9Sstevel@tonic-gate	VERSIONID
1357c478bd9Sstevel@tonic-gate	OSTYPE
1367c478bd9Sstevel@tonic-gate	DOMAIN
1377c478bd9Sstevel@tonic-gate	FEATURE
1387c478bd9Sstevel@tonic-gate	local macro definitions
1397c478bd9Sstevel@tonic-gate	MAILER
1407c478bd9Sstevel@tonic-gate	LOCAL_CONFIG
1417c478bd9Sstevel@tonic-gate	LOCAL_RULE_*
1427c478bd9Sstevel@tonic-gate	LOCAL_RULESETS
1437c478bd9Sstevel@tonic-gate
1447c478bd9Sstevel@tonic-gateThere are a few exceptions to this rule.  Local macro definitions which
1457c478bd9Sstevel@tonic-gateinfluence a FEATURE() should be done before that feature.  For example,
1467c478bd9Sstevel@tonic-gatea define(`PROCMAIL_MAILER_PATH', ...) should be done before
1477c478bd9Sstevel@tonic-gateFEATURE(`local_procmail').
1487c478bd9Sstevel@tonic-gate
1497c478bd9Sstevel@tonic-gate
1507c478bd9Sstevel@tonic-gate+----------------------------+
1517c478bd9Sstevel@tonic-gate| A BRIEF INTRODUCTION TO M4 |
1527c478bd9Sstevel@tonic-gate+----------------------------+
1537c478bd9Sstevel@tonic-gate
1547c478bd9Sstevel@tonic-gateSendmail uses the M4 macro processor to ``compile'' the configuration
1557c478bd9Sstevel@tonic-gatefiles.  The most important thing to know is that M4 is stream-based,
1567c478bd9Sstevel@tonic-gatethat is, it doesn't understand about lines.  For this reason, in some
1577c478bd9Sstevel@tonic-gateplaces you may see the word ``dnl'', which stands for ``delete
1587c478bd9Sstevel@tonic-gatethrough newline''; essentially, it deletes all characters starting
1597c478bd9Sstevel@tonic-gateat the ``dnl'' up to and including the next newline character.  In
1607c478bd9Sstevel@tonic-gatemost cases sendmail uses this only to avoid lots of unnecessary
1617c478bd9Sstevel@tonic-gateblank lines in the output.
1627c478bd9Sstevel@tonic-gate
1637c478bd9Sstevel@tonic-gateOther important directives are define(A, B) which defines the macro
1647c478bd9Sstevel@tonic-gate``A'' to have value ``B''.  Macros are expanded as they are read, so
1657c478bd9Sstevel@tonic-gateone normally quotes both values to prevent expansion.  For example,
1667c478bd9Sstevel@tonic-gate
1677c478bd9Sstevel@tonic-gate	define(`SMART_HOST', `smart.foo.com')
1687c478bd9Sstevel@tonic-gate
1697c478bd9Sstevel@tonic-gateOne word of warning:  M4 macros are expanded even in lines that appear
1707c478bd9Sstevel@tonic-gateto be comments.  For example, if you have
1717c478bd9Sstevel@tonic-gate
1727c478bd9Sstevel@tonic-gate	# See FEATURE(`foo') above
1737c478bd9Sstevel@tonic-gate
1747c478bd9Sstevel@tonic-gateit will not do what you expect, because the FEATURE(`foo') will be
1757c478bd9Sstevel@tonic-gateexpanded.  This also applies to
1767c478bd9Sstevel@tonic-gate
1777c478bd9Sstevel@tonic-gate	# And then define the $X macro to be the return address
1787c478bd9Sstevel@tonic-gate
1797c478bd9Sstevel@tonic-gatebecause ``define'' is an M4 keyword.  If you want to use them, surround
1807c478bd9Sstevel@tonic-gatethem with directed quotes, `like this'.
1817c478bd9Sstevel@tonic-gate
1827c478bd9Sstevel@tonic-gateSince m4 uses single quotes (opening "`" and closing "'") to quote
1837c478bd9Sstevel@tonic-gatearguments, those quotes can't be used in arguments.  For example,
1847c478bd9Sstevel@tonic-gateit is not possible to define a rejection message containing a single
1857c478bd9Sstevel@tonic-gatequote. Usually there are simple workarounds by changing those
1867c478bd9Sstevel@tonic-gatemessages; in the worst case it might be ok to change the value
1877c478bd9Sstevel@tonic-gatedirectly in the generated .cf file, which however is not advised.
1887c478bd9Sstevel@tonic-gate
1897c478bd9Sstevel@tonic-gate+----------------+
1907c478bd9Sstevel@tonic-gate| FILE LOCATIONS |
1917c478bd9Sstevel@tonic-gate+----------------+
1927c478bd9Sstevel@tonic-gate
1937c478bd9Sstevel@tonic-gatesendmail 8.9 has introduced a new configuration directory for sendmail
1947c478bd9Sstevel@tonic-gaterelated files, /etc/mail.  The new files available for sendmail 8.9 --
1957c478bd9Sstevel@tonic-gatethe class {R} /etc/mail/relay-domains and the access database
1967c478bd9Sstevel@tonic-gate/etc/mail/access -- take advantage of this new directory.  Beginning with
1977c478bd9Sstevel@tonic-gate8.10, all files will use this directory by default (some options may be
1987c478bd9Sstevel@tonic-gateset by OSTYPE() files).  This new directory should help to restore
1997c478bd9Sstevel@tonic-gateuniformity to sendmail's file locations.
2007c478bd9Sstevel@tonic-gate
2017c478bd9Sstevel@tonic-gateBelow is a table of some of the common changes:
2027c478bd9Sstevel@tonic-gate
2037c478bd9Sstevel@tonic-gateOld filename			New filename
2047c478bd9Sstevel@tonic-gate------------			------------
2057c478bd9Sstevel@tonic-gate/etc/bitdomain			/etc/mail/bitdomain
2067c478bd9Sstevel@tonic-gate/etc/domaintable		/etc/mail/domaintable
2077c478bd9Sstevel@tonic-gate/etc/genericstable		/etc/mail/genericstable
2087c478bd9Sstevel@tonic-gate/etc/uudomain			/etc/mail/uudomain
2097c478bd9Sstevel@tonic-gate/etc/virtusertable		/etc/mail/virtusertable
2107c478bd9Sstevel@tonic-gate/etc/userdb			/etc/mail/userdb
2117c478bd9Sstevel@tonic-gate
2127c478bd9Sstevel@tonic-gate/etc/aliases			/etc/mail/aliases
2137c478bd9Sstevel@tonic-gate/etc/sendmail/aliases		/etc/mail/aliases
2147c478bd9Sstevel@tonic-gate/etc/ucbmail/aliases		/etc/mail/aliases
2157c478bd9Sstevel@tonic-gate/usr/adm/sendmail/aliases	/etc/mail/aliases
2167c478bd9Sstevel@tonic-gate/usr/lib/aliases		/etc/mail/aliases
2177c478bd9Sstevel@tonic-gate/usr/lib/mail/aliases		/etc/mail/aliases
2187c478bd9Sstevel@tonic-gate/usr/ucblib/aliases		/etc/mail/aliases
2197c478bd9Sstevel@tonic-gate
2207c478bd9Sstevel@tonic-gate/etc/sendmail.cw		/etc/mail/local-host-names
2217c478bd9Sstevel@tonic-gate/etc/mail/sendmail.cw		/etc/mail/local-host-names
2227c478bd9Sstevel@tonic-gate/etc/sendmail/sendmail.cw	/etc/mail/local-host-names
2237c478bd9Sstevel@tonic-gate
2247c478bd9Sstevel@tonic-gate/etc/sendmail.ct		/etc/mail/trusted-users
2257c478bd9Sstevel@tonic-gate
2267c478bd9Sstevel@tonic-gate/etc/sendmail.oE		/etc/mail/error-header
2277c478bd9Sstevel@tonic-gate
2287c478bd9Sstevel@tonic-gate/etc/sendmail.hf		/etc/mail/helpfile
2297c478bd9Sstevel@tonic-gate/etc/mail/sendmail.hf		/etc/mail/helpfile
2307c478bd9Sstevel@tonic-gate/usr/ucblib/sendmail.hf		/etc/mail/helpfile
2317c478bd9Sstevel@tonic-gate/etc/ucbmail/sendmail.hf	/etc/mail/helpfile
2327c478bd9Sstevel@tonic-gate/usr/lib/sendmail.hf		/etc/mail/helpfile
2337c478bd9Sstevel@tonic-gate/usr/share/lib/sendmail.hf	/etc/mail/helpfile
2347c478bd9Sstevel@tonic-gate/usr/share/misc/sendmail.hf	/etc/mail/helpfile
2357c478bd9Sstevel@tonic-gate/share/misc/sendmail.hf		/etc/mail/helpfile
2367c478bd9Sstevel@tonic-gate
2377c478bd9Sstevel@tonic-gate/etc/service.switch		/etc/mail/service.switch
2387c478bd9Sstevel@tonic-gate
2397c478bd9Sstevel@tonic-gate/etc/sendmail.st		/etc/mail/statistics
2407c478bd9Sstevel@tonic-gate/etc/mail/sendmail.st		/etc/mail/statistics
2417c478bd9Sstevel@tonic-gate/etc/mailer/sendmail.st		/etc/mail/statistics
2427c478bd9Sstevel@tonic-gate/etc/sendmail/sendmail.st	/etc/mail/statistics
2437c478bd9Sstevel@tonic-gate/usr/lib/sendmail.st		/etc/mail/statistics
2447c478bd9Sstevel@tonic-gate/usr/ucblib/sendmail.st		/etc/mail/statistics
2457c478bd9Sstevel@tonic-gate
2467c478bd9Sstevel@tonic-gateNote that all of these paths actually use a new m4 macro MAIL_SETTINGS_DIR
2477c478bd9Sstevel@tonic-gateto create the pathnames.  The default value of this variable is
2487c478bd9Sstevel@tonic-gate`/etc/mail/'.  If you set this macro to a different value, you MUST include
2497c478bd9Sstevel@tonic-gatea trailing slash.
2507c478bd9Sstevel@tonic-gate
2517c478bd9Sstevel@tonic-gateNotice: all filenames used in a .mc (or .cf) file should be absolute
2527c478bd9Sstevel@tonic-gate(starting at the root, i.e., with '/').  Relative filenames most
2537c478bd9Sstevel@tonic-gatelikely cause surprises during operations (unless otherwise noted).
2547c478bd9Sstevel@tonic-gate
2557c478bd9Sstevel@tonic-gate
2567c478bd9Sstevel@tonic-gate+--------+
2577c478bd9Sstevel@tonic-gate| OSTYPE |
2587c478bd9Sstevel@tonic-gate+--------+
2597c478bd9Sstevel@tonic-gate
2607c478bd9Sstevel@tonic-gateYou MUST define an operating system environment, or the configuration
2617c478bd9Sstevel@tonic-gatefile build will puke.  There are several environments available; look
2627c478bd9Sstevel@tonic-gateat the "ostype" directory for the current list.  This macro changes
2637c478bd9Sstevel@tonic-gatethings like the location of the alias file and queue directory.  Some
2647c478bd9Sstevel@tonic-gateof these files are identical to one another.
2657c478bd9Sstevel@tonic-gate
2667c478bd9Sstevel@tonic-gateIt is IMPERATIVE that the OSTYPE occur before any MAILER definitions.
2677c478bd9Sstevel@tonic-gateIn general, the OSTYPE macro should go immediately after any version
2687c478bd9Sstevel@tonic-gateinformation, and MAILER definitions should always go last.
2697c478bd9Sstevel@tonic-gate
2707c478bd9Sstevel@tonic-gateOperating system definitions are usually easy to write.  They may define
2717c478bd9Sstevel@tonic-gatethe following variables (everything defaults, so an ostype file may be
2727c478bd9Sstevel@tonic-gateempty).  Unfortunately, the list of configuration-supported systems is
2737c478bd9Sstevel@tonic-gatenot as broad as the list of source-supported systems, since many of
2747c478bd9Sstevel@tonic-gatethe source contributors do not include corresponding ostype files.
2757c478bd9Sstevel@tonic-gate
2767c478bd9Sstevel@tonic-gateALIAS_FILE		[/etc/mail/aliases] The location of the text version
2777c478bd9Sstevel@tonic-gate			of the alias file(s).  It can be a comma-separated
2787c478bd9Sstevel@tonic-gate			list of names (but be sure you quote values with
2797c478bd9Sstevel@tonic-gate			commas in them -- for example, use
2807c478bd9Sstevel@tonic-gate				define(`ALIAS_FILE', `a,b')
2817c478bd9Sstevel@tonic-gate			to get "a" and "b" both listed as alias files;
2827c478bd9Sstevel@tonic-gate			otherwise the define() primitive only sees "a").
2837c478bd9Sstevel@tonic-gateHELP_FILE		[/etc/mail/helpfile] The name of the file
2847c478bd9Sstevel@tonic-gate			containing information printed in response to
2857c478bd9Sstevel@tonic-gate			the SMTP HELP command.
2867c478bd9Sstevel@tonic-gateQUEUE_DIR		[/var/spool/mqueue] The directory containing
2877c478bd9Sstevel@tonic-gate			queue files.  To use multiple queues, supply
2887c478bd9Sstevel@tonic-gate			a value ending with an asterisk.  For
2897c478bd9Sstevel@tonic-gate			example, /var/spool/mqueue/qd* will use all of the
2907c478bd9Sstevel@tonic-gate			directories or symbolic links to directories
2917c478bd9Sstevel@tonic-gate			beginning with 'qd' in /var/spool/mqueue as queue
2927c478bd9Sstevel@tonic-gate			directories.  The names 'qf', 'df', and 'xf' are
2937c478bd9Sstevel@tonic-gate			reserved as specific subdirectories for the
2947c478bd9Sstevel@tonic-gate			corresponding queue file types as explained in
2957c478bd9Sstevel@tonic-gate			doc/op/op.me.  See also QUEUE GROUP DEFINITIONS.
2967c478bd9Sstevel@tonic-gateMSP_QUEUE_DIR		[/var/spool/clientmqueue] The directory containing
2977c478bd9Sstevel@tonic-gate			queue files for the MSP (Mail Submission Program).
2987c478bd9Sstevel@tonic-gateSTATUS_FILE		[/etc/mail/statistics] The file containing status
2997c478bd9Sstevel@tonic-gate			information.
3007c478bd9Sstevel@tonic-gateLOCAL_MAILER_PATH	[/bin/mail] The program used to deliver local mail.
3017c478bd9Sstevel@tonic-gateLOCAL_MAILER_FLAGS	[Prmn9] The flags used by the local mailer.  The
3027c478bd9Sstevel@tonic-gate			flags lsDFMAw5:/|@q are always included.
3037c478bd9Sstevel@tonic-gateLOCAL_MAILER_ARGS	[mail -d $u] The arguments passed to deliver local
3047c478bd9Sstevel@tonic-gate			mail.
3057c478bd9Sstevel@tonic-gateLOCAL_MAILER_MAX	[undefined] If defined, the maximum size of local
3067c478bd9Sstevel@tonic-gate			mail that you are willing to accept.
3077c478bd9Sstevel@tonic-gateLOCAL_MAILER_MAXMSGS	[undefined] If defined, the maximum number of
3087c478bd9Sstevel@tonic-gate			messages to deliver in a single connection.  Only
3097c478bd9Sstevel@tonic-gate			useful for LMTP local mailers.
3107c478bd9Sstevel@tonic-gateLOCAL_MAILER_CHARSET	[undefined] If defined, messages containing 8-bit data
3117c478bd9Sstevel@tonic-gate			that ARRIVE from an address that resolves to the
3127c478bd9Sstevel@tonic-gate			local mailer and which are converted to MIME will be
3137c478bd9Sstevel@tonic-gate			labeled with this character set.
3147c478bd9Sstevel@tonic-gateLOCAL_MAILER_EOL	[undefined] If defined, the string to use as the
3157c478bd9Sstevel@tonic-gate			end of line for the local mailer.
3167c478bd9Sstevel@tonic-gateLOCAL_MAILER_DSN_DIAGNOSTIC_CODE
3177c478bd9Sstevel@tonic-gate			[X-Unix] The DSN Diagnostic-Code value for the
3187c478bd9Sstevel@tonic-gate			local mailer.  This should be changed with care.
3197c478bd9Sstevel@tonic-gateLOCAL_SHELL_PATH	[/bin/sh] The shell used to deliver piped email.
3207c478bd9Sstevel@tonic-gateLOCAL_SHELL_FLAGS	[eu9] The flags used by the shell mailer.  The
3217c478bd9Sstevel@tonic-gate			flags lsDFM are always included.
3227c478bd9Sstevel@tonic-gateLOCAL_SHELL_ARGS	[sh -c $u] The arguments passed to deliver "prog"
3237c478bd9Sstevel@tonic-gate			mail.
3247c478bd9Sstevel@tonic-gateLOCAL_SHELL_DIR		[$z:/] The directory search path in which the
3257c478bd9Sstevel@tonic-gate			shell should run.
3267c478bd9Sstevel@tonic-gateLOCAL_MAILER_QGRP	[undefined] The queue group for the local mailer.
3277c478bd9Sstevel@tonic-gateSMTP_MAILER_FLAGS	[undefined] Flags added to SMTP mailer.  Default
3287c478bd9Sstevel@tonic-gate			flags are `mDFMuX' for all SMTP-based mailers; the
3297c478bd9Sstevel@tonic-gate			"esmtp" mailer adds `a'; "smtp8" adds `8'; and
3307c478bd9Sstevel@tonic-gate			"dsmtp" adds `%'.
3317c478bd9Sstevel@tonic-gateRELAY_MAILER_FLAGS	[undefined] Flags added to the relay mailer.  Default
3327c478bd9Sstevel@tonic-gate			flags are `mDFMuX' for all SMTP-based mailers; the
3337c478bd9Sstevel@tonic-gate			relay mailer adds `a8'.  If this is not defined,
3347c478bd9Sstevel@tonic-gate			then SMTP_MAILER_FLAGS is used.
3357c478bd9Sstevel@tonic-gateSMTP_MAILER_MAX		[undefined] The maximum size of messages that will
3367c478bd9Sstevel@tonic-gate			be transported using the smtp, smtp8, esmtp, or dsmtp
3377c478bd9Sstevel@tonic-gate			mailers.
3387c478bd9Sstevel@tonic-gateSMTP_MAILER_MAXMSGS	[undefined] If defined, the maximum number of
3397c478bd9Sstevel@tonic-gate			messages to deliver in a single connection for the
3407c478bd9Sstevel@tonic-gate			smtp, smtp8, esmtp, or dsmtp mailers.
3417c478bd9Sstevel@tonic-gateSMTP_MAILER_MAXRCPTS	[undefined] If defined, the maximum number of
3427c478bd9Sstevel@tonic-gate			recipients to deliver in a single connection for the
3437c478bd9Sstevel@tonic-gate			smtp, smtp8, esmtp, or dsmtp mailers.
3447c478bd9Sstevel@tonic-gateSMTP_MAILER_ARGS	[TCP $h] The arguments passed to the smtp mailer.
3457c478bd9Sstevel@tonic-gate			About the only reason you would want to change this
3467c478bd9Sstevel@tonic-gate			would be to change the default port.
3477c478bd9Sstevel@tonic-gateESMTP_MAILER_ARGS	[TCP $h] The arguments passed to the esmtp mailer.
3487c478bd9Sstevel@tonic-gateSMTP8_MAILER_ARGS	[TCP $h] The arguments passed to the smtp8 mailer.
3497c478bd9Sstevel@tonic-gateDSMTP_MAILER_ARGS	[TCP $h] The arguments passed to the dsmtp mailer.
3507c478bd9Sstevel@tonic-gateRELAY_MAILER_ARGS	[TCP $h] The arguments passed to the relay mailer.
3517c478bd9Sstevel@tonic-gateSMTP_MAILER_QGRP	[undefined] The queue group for the smtp mailer.
3527c478bd9Sstevel@tonic-gateESMTP_MAILER_QGRP	[undefined] The queue group for the esmtp mailer.
3537c478bd9Sstevel@tonic-gateSMTP8_MAILER_QGRP	[undefined] The queue group for the smtp8 mailer.
3547c478bd9Sstevel@tonic-gateDSMTP_MAILER_QGRP	[undefined] The queue group for the dsmtp mailer.
3557c478bd9Sstevel@tonic-gateRELAY_MAILER_QGRP	[undefined] The queue group for the relay mailer.
3567c478bd9Sstevel@tonic-gateRELAY_MAILER_MAXMSGS	[undefined] If defined, the maximum number of
3577c478bd9Sstevel@tonic-gate			messages to deliver in a single connection for the
3587c478bd9Sstevel@tonic-gate			relay mailer.
3597c478bd9Sstevel@tonic-gateSMTP_MAILER_CHARSET	[undefined] If defined, messages containing 8-bit data
3607c478bd9Sstevel@tonic-gate			that ARRIVE from an address that resolves to one of
3617c478bd9Sstevel@tonic-gate			the SMTP mailers and which are converted to MIME will
3627c478bd9Sstevel@tonic-gate			be labeled with this character set.
3637c478bd9Sstevel@tonic-gateUUCP_MAILER_PATH	[/usr/bin/uux] The program used to send UUCP mail.
3647c478bd9Sstevel@tonic-gateUUCP_MAILER_FLAGS	[undefined] Flags added to UUCP mailer.  Default
3657c478bd9Sstevel@tonic-gate			flags are `DFMhuU' (and `m' for uucp-new mailer,
3667c478bd9Sstevel@tonic-gate			minus `U' for uucp-dom mailer).
3677c478bd9Sstevel@tonic-gateUUCP_MAILER_ARGS	[uux - -r -z -a$g -gC $h!rmail ($u)] The arguments
3687c478bd9Sstevel@tonic-gate			passed to the UUCP mailer.
3697c478bd9Sstevel@tonic-gateUUCP_MAILER_MAX		[100000] The maximum size message accepted for
3707c478bd9Sstevel@tonic-gate			transmission by the UUCP mailers.
3717c478bd9Sstevel@tonic-gateUUCP_MAILER_CHARSET	[undefined] If defined, messages containing 8-bit data
3727c478bd9Sstevel@tonic-gate			that ARRIVE from an address that resolves to one of
3737c478bd9Sstevel@tonic-gate			the UUCP mailers and which are converted to MIME will
3747c478bd9Sstevel@tonic-gate			be labeled with this character set.
3757c478bd9Sstevel@tonic-gateUUCP_MAILER_QGRP	[undefined] The queue group for the UUCP mailers.
3767c478bd9Sstevel@tonic-gatePROCMAIL_MAILER_PATH	[/usr/local/bin/procmail] The path to the procmail
3777c478bd9Sstevel@tonic-gate			program.  This is also used by
3787c478bd9Sstevel@tonic-gate			FEATURE(`local_procmail').
3797c478bd9Sstevel@tonic-gatePROCMAIL_MAILER_FLAGS	[SPhnu9] Flags added to Procmail mailer.  Flags
3807c478bd9Sstevel@tonic-gate			DFM are always set.  This is NOT used by
3817c478bd9Sstevel@tonic-gate			FEATURE(`local_procmail'); tweak LOCAL_MAILER_FLAGS
3827c478bd9Sstevel@tonic-gate			instead.
3837c478bd9Sstevel@tonic-gatePROCMAIL_MAILER_ARGS	[procmail -Y -m $h $f $u] The arguments passed to
3847c478bd9Sstevel@tonic-gate			the Procmail mailer.  This is NOT used by
3857c478bd9Sstevel@tonic-gate			FEATURE(`local_procmail'); tweak LOCAL_MAILER_ARGS
3867c478bd9Sstevel@tonic-gate			instead.
3877c478bd9Sstevel@tonic-gatePROCMAIL_MAILER_MAX	[undefined] If set, the maximum size message that
3887c478bd9Sstevel@tonic-gate			will be accepted by the procmail mailer.
3897c478bd9Sstevel@tonic-gatePROCMAIL_MAILER_QGRP	[undefined] The queue group for the procmail mailer.
3907c478bd9Sstevel@tonic-gateconfEBINDIR		[/usr/libexec] The directory for executables.
3917c478bd9Sstevel@tonic-gate			Currently used for FEATURE(`local_lmtp') and
3927c478bd9Sstevel@tonic-gate			FEATURE(`smrsh').
3937c478bd9Sstevel@tonic-gateLOCAL_PROG_QGRP		[undefined] The queue group for the prog mailer.
3947c478bd9Sstevel@tonic-gate
3957c478bd9Sstevel@tonic-gateNote: to tweak Name_MAILER_FLAGS use the macro MODIFY_MAILER_FLAGS:
396*49218d4fSjbeckMODIFY_MAILER_FLAGS(`Name', `change') where Name is the first part
397*49218d4fSjbeckof the macro Name_MAILER_FLAGS (note: that means Name is entirely in
398*49218d4fSjbeckupper case) and change can be: flags that should be used directly
399*49218d4fSjbeck(thus overriding the default value), or if it starts with `+' (`-')
400*49218d4fSjbeckthen those flags are added to (removed from) the default value.
401*49218d4fSjbeckExample:
4027c478bd9Sstevel@tonic-gate
4037c478bd9Sstevel@tonic-gate	MODIFY_MAILER_FLAGS(`LOCAL', `+e')
4047c478bd9Sstevel@tonic-gate
4057c478bd9Sstevel@tonic-gatewill add the flag `e' to LOCAL_MAILER_FLAGS.  Notice: there are
4067c478bd9Sstevel@tonic-gateseveral smtp mailers all of which are manipulated individually.
4077c478bd9Sstevel@tonic-gateSee the section MAILERS for the available mailer names.
4087c478bd9Sstevel@tonic-gateWARNING: The FEATUREs local_lmtp and local_procmail set LOCAL_MAILER_FLAGS
4097c478bd9Sstevel@tonic-gateunconditionally, i.e., without respecting any definitions in an
4107c478bd9Sstevel@tonic-gateOSTYPE setting.
4117c478bd9Sstevel@tonic-gate
4127c478bd9Sstevel@tonic-gate
4137c478bd9Sstevel@tonic-gate+---------+
4147c478bd9Sstevel@tonic-gate| DOMAINS |
4157c478bd9Sstevel@tonic-gate+---------+
4167c478bd9Sstevel@tonic-gate
4177c478bd9Sstevel@tonic-gateYou will probably want to collect domain-dependent defines into one
4187c478bd9Sstevel@tonic-gatefile, referenced by the DOMAIN macro.  For example, the Berkeley
4197c478bd9Sstevel@tonic-gatedomain file includes definitions for several internal distinguished
4207c478bd9Sstevel@tonic-gatehosts:
4217c478bd9Sstevel@tonic-gate
4227c478bd9Sstevel@tonic-gateUUCP_RELAY	The host that will accept UUCP-addressed email.
4237c478bd9Sstevel@tonic-gate		If not defined, all UUCP sites must be directly
4247c478bd9Sstevel@tonic-gate		connected.
4257c478bd9Sstevel@tonic-gateBITNET_RELAY	The host that will accept BITNET-addressed email.
4267c478bd9Sstevel@tonic-gate		If not defined, the .BITNET pseudo-domain won't work.
4277c478bd9Sstevel@tonic-gateDECNET_RELAY	The host that will accept DECNET-addressed email.
4287c478bd9Sstevel@tonic-gate		If not defined, the .DECNET pseudo-domain and addresses
4297c478bd9Sstevel@tonic-gate		of the form node::user will not work.
4307c478bd9Sstevel@tonic-gateFAX_RELAY	The host that will accept mail to the .FAX pseudo-domain.
4317c478bd9Sstevel@tonic-gate		The "fax" mailer overrides this value.
4327c478bd9Sstevel@tonic-gateLOCAL_RELAY	The site that will handle unqualified names -- that
4337c478bd9Sstevel@tonic-gate		is, names without an @domain extension.
4347c478bd9Sstevel@tonic-gate		Normally MAIL_HUB is preferred for this function.
4357c478bd9Sstevel@tonic-gate		LOCAL_RELAY is mostly useful in conjunction with
4367c478bd9Sstevel@tonic-gate		FEATURE(`stickyhost') -- see the discussion of
4377c478bd9Sstevel@tonic-gate		stickyhost below.  If not set, they are assumed to
4387c478bd9Sstevel@tonic-gate		belong on this machine.  This allows you to have a
4397c478bd9Sstevel@tonic-gate		central site to store a company- or department-wide
4407c478bd9Sstevel@tonic-gate		alias database.  This only works at small sites,
4417c478bd9Sstevel@tonic-gate		and only with some user agents.
4427c478bd9Sstevel@tonic-gateLUSER_RELAY	The site that will handle lusers -- that is, apparently
4437c478bd9Sstevel@tonic-gate		local names that aren't local accounts or aliases.  To
4447c478bd9Sstevel@tonic-gate		specify a local user instead of a site, set this to
4457c478bd9Sstevel@tonic-gate		``local:username''.
4467c478bd9Sstevel@tonic-gate
4477c478bd9Sstevel@tonic-gateAny of these can be either ``mailer:hostname'' (in which case the
4487c478bd9Sstevel@tonic-gatemailer is the internal mailer name, such as ``uucp-new'' and the hostname
4497c478bd9Sstevel@tonic-gateis the name of the host as appropriate for that mailer) or just a
4507c478bd9Sstevel@tonic-gate``hostname'', in which case a default mailer type (usually ``relay'',
4517c478bd9Sstevel@tonic-gatea variant on SMTP) is used.  WARNING: if you have a wildcard MX
4527c478bd9Sstevel@tonic-gaterecord matching your domain, you probably want to define these to
4537c478bd9Sstevel@tonic-gatehave a trailing dot so that you won't get the mail diverted back
4547c478bd9Sstevel@tonic-gateto yourself.
4557c478bd9Sstevel@tonic-gate
4567c478bd9Sstevel@tonic-gateThe domain file can also be used to define a domain name, if needed
4577c478bd9Sstevel@tonic-gate(using "DD<domain>") and set certain site-wide features.  If all hosts
4587c478bd9Sstevel@tonic-gateat your site masquerade behind one email name, you could also use
4597c478bd9Sstevel@tonic-gateMASQUERADE_AS here.
4607c478bd9Sstevel@tonic-gate
4617c478bd9Sstevel@tonic-gateYou do not have to define a domain -- in particular, if you are a
4627c478bd9Sstevel@tonic-gatesingle machine sitting off somewhere, it is probably more work than
4637c478bd9Sstevel@tonic-gateit's worth.  This is just a mechanism for combining "domain dependent
4647c478bd9Sstevel@tonic-gateknowledge" into one place.
4657c478bd9Sstevel@tonic-gate
4667c478bd9Sstevel@tonic-gate
4677c478bd9Sstevel@tonic-gate+---------+
4687c478bd9Sstevel@tonic-gate| MAILERS |
4697c478bd9Sstevel@tonic-gate+---------+
4707c478bd9Sstevel@tonic-gate
4717c478bd9Sstevel@tonic-gateThere are fewer mailers supported in this version than the previous
4727c478bd9Sstevel@tonic-gateversion, owing mostly to a simpler world.  As a general rule, put the
4737c478bd9Sstevel@tonic-gateMAILER definitions last in your .mc file.
4747c478bd9Sstevel@tonic-gate
4757c478bd9Sstevel@tonic-gatelocal		The local and prog mailers.  You will almost always
4767c478bd9Sstevel@tonic-gate		need these; the only exception is if you relay ALL
4777c478bd9Sstevel@tonic-gate		your mail to another site.  This mailer is included
4787c478bd9Sstevel@tonic-gate		automatically.
4797c478bd9Sstevel@tonic-gate
4807c478bd9Sstevel@tonic-gatesmtp		The Simple Mail Transport Protocol mailer.  This does
4817c478bd9Sstevel@tonic-gate		not hide hosts behind a gateway or another other
4827c478bd9Sstevel@tonic-gate		such hack; it assumes a world where everyone is
4837c478bd9Sstevel@tonic-gate		running the name server.  This file actually defines
4847c478bd9Sstevel@tonic-gate		five mailers: "smtp" for regular (old-style) SMTP to
4857c478bd9Sstevel@tonic-gate		other servers, "esmtp" for extended SMTP to other
4867c478bd9Sstevel@tonic-gate		servers, "smtp8" to do SMTP to other servers without
4877c478bd9Sstevel@tonic-gate		converting 8-bit data to MIME (essentially, this is
4887c478bd9Sstevel@tonic-gate		your statement that you know the other end is 8-bit
4897c478bd9Sstevel@tonic-gate		clean even if it doesn't say so), "dsmtp" to do on
4907c478bd9Sstevel@tonic-gate		demand delivery, and "relay" for transmission to the
4917c478bd9Sstevel@tonic-gate		RELAY_HOST, LUSER_RELAY, or MAIL_HUB.
4927c478bd9Sstevel@tonic-gate
4937c478bd9Sstevel@tonic-gateuucp		The UNIX-to-UNIX Copy Program mailer.  Actually, this
4947c478bd9Sstevel@tonic-gate		defines two mailers, "uucp-old" (a.k.a. "uucp") and
4957c478bd9Sstevel@tonic-gate		"uucp-new" (a.k.a. "suucp").  The latter is for when you
4967c478bd9Sstevel@tonic-gate		know that the UUCP mailer at the other end can handle
4977c478bd9Sstevel@tonic-gate		multiple recipients in one transfer.  If the smtp mailer
4987c478bd9Sstevel@tonic-gate		is included in your configuration, two other mailers
4997c478bd9Sstevel@tonic-gate		("uucp-dom" and "uucp-uudom") are also defined [warning: you
5007c478bd9Sstevel@tonic-gate		MUST specify MAILER(`smtp') before MAILER(`uucp')].  When you
5017c478bd9Sstevel@tonic-gate		include the uucp mailer, sendmail looks for all names in
5027c478bd9Sstevel@tonic-gate		class {U} and sends them to the uucp-old mailer; all
5037c478bd9Sstevel@tonic-gate		names in class {Y} are sent to uucp-new; and all
5047c478bd9Sstevel@tonic-gate		names in class {Z} are sent to uucp-uudom.  Note that
5057c478bd9Sstevel@tonic-gate		this is a function of what version of rmail runs on
5067c478bd9Sstevel@tonic-gate		the receiving end, and hence may be out of your control.
5077c478bd9Sstevel@tonic-gate		See the section below describing UUCP mailers in more
5087c478bd9Sstevel@tonic-gate		detail.
5097c478bd9Sstevel@tonic-gate
5107c478bd9Sstevel@tonic-gateprocmail	An interface to procmail (does not come with sendmail).
5117c478bd9Sstevel@tonic-gate		This is designed to be used in mailertables.  For example,
5127c478bd9Sstevel@tonic-gate		a common question is "how do I forward all mail for a given
5137c478bd9Sstevel@tonic-gate		domain to a single person?".  If you have this mailer
5147c478bd9Sstevel@tonic-gate		defined, you could set up a mailertable reading:
5157c478bd9Sstevel@tonic-gate
5167c478bd9Sstevel@tonic-gate			host.com	procmail:/etc/procmailrcs/host.com
5177c478bd9Sstevel@tonic-gate
5187c478bd9Sstevel@tonic-gate		with the file /etc/procmailrcs/host.com reading:
5197c478bd9Sstevel@tonic-gate
5207c478bd9Sstevel@tonic-gate			:0	# forward mail for host.com
5217c478bd9Sstevel@tonic-gate			! -oi -f $1 person@other.host
5227c478bd9Sstevel@tonic-gate
5237c478bd9Sstevel@tonic-gate		This would arrange for (anything)@host.com to be sent
5247c478bd9Sstevel@tonic-gate		to person@other.host.  In a procmail script, $1 is the
5257c478bd9Sstevel@tonic-gate		name of the sender and $2 is the name of the recipient.
5267c478bd9Sstevel@tonic-gate		If you use this with FEATURE(`local_procmail'), the FEATURE
5277c478bd9Sstevel@tonic-gate		should be listed first.
5287c478bd9Sstevel@tonic-gate
5297c478bd9Sstevel@tonic-gate		Of course there are other ways to solve this particular
5307c478bd9Sstevel@tonic-gate		problem, e.g., a catch-all entry in a virtusertable.
5317c478bd9Sstevel@tonic-gate
5327c478bd9Sstevel@tonic-gateThe local mailer accepts addresses of the form "user+detail", where
5337c478bd9Sstevel@tonic-gatethe "+detail" is not used for mailbox matching but is available
5347c478bd9Sstevel@tonic-gateto certain local mail programs (in particular, see
5357c478bd9Sstevel@tonic-gateFEATURE(`local_procmail')).  For example, "eric", "eric+sendmail", and
5367c478bd9Sstevel@tonic-gate"eric+sww" all indicate the same user, but additional arguments <null>,
5377c478bd9Sstevel@tonic-gate"sendmail", and "sww" may be provided for use in sorting mail.
5387c478bd9Sstevel@tonic-gate
5397c478bd9Sstevel@tonic-gate
5407c478bd9Sstevel@tonic-gate+----------+
5417c478bd9Sstevel@tonic-gate| FEATURES |
5427c478bd9Sstevel@tonic-gate+----------+
5437c478bd9Sstevel@tonic-gate
5447c478bd9Sstevel@tonic-gateSpecial features can be requested using the "FEATURE" macro.  For
5457c478bd9Sstevel@tonic-gateexample, the .mc line:
5467c478bd9Sstevel@tonic-gate
5477c478bd9Sstevel@tonic-gate	FEATURE(`use_cw_file')
5487c478bd9Sstevel@tonic-gate
5497c478bd9Sstevel@tonic-gatetells sendmail that you want to have it read an /etc/mail/local-host-names
5507c478bd9Sstevel@tonic-gatefile to get values for class {w}.  A FEATURE may contain up to 9
5517c478bd9Sstevel@tonic-gateoptional parameters -- for example:
5527c478bd9Sstevel@tonic-gate
5537c478bd9Sstevel@tonic-gate	FEATURE(`mailertable', `dbm /usr/lib/mailertable')
5547c478bd9Sstevel@tonic-gate
5557c478bd9Sstevel@tonic-gateThe default database map type for the table features can be set with
5567c478bd9Sstevel@tonic-gate
5577c478bd9Sstevel@tonic-gate	define(`DATABASE_MAP_TYPE', `dbm')
5587c478bd9Sstevel@tonic-gate
5597c478bd9Sstevel@tonic-gatewhich would set it to use ndbm databases.  The default is the Berkeley DB
5607c478bd9Sstevel@tonic-gatehash database format.  Note that you must still declare a database map type
5617c478bd9Sstevel@tonic-gateif you specify an argument to a FEATURE.  DATABASE_MAP_TYPE is only used
5627c478bd9Sstevel@tonic-gateif no argument is given for the FEATURE.  It must be specified before any
5637c478bd9Sstevel@tonic-gatefeature that uses a map.
5647c478bd9Sstevel@tonic-gate
5657c478bd9Sstevel@tonic-gateAlso, features which can take a map definition as an argument can also take
5667c478bd9Sstevel@tonic-gatethe special keyword `LDAP'.  If that keyword is used, the map will use the
5677c478bd9Sstevel@tonic-gateLDAP definition described in the ``USING LDAP FOR ALIASES, MAPS, AND
5687c478bd9Sstevel@tonic-gateCLASSES'' section below.
5697c478bd9Sstevel@tonic-gate
5707c478bd9Sstevel@tonic-gateAvailable features are:
5717c478bd9Sstevel@tonic-gate
5727c478bd9Sstevel@tonic-gateuse_cw_file	Read the file /etc/mail/local-host-names file to get
5737c478bd9Sstevel@tonic-gate		alternate names for this host.  This might be used if you
5747c478bd9Sstevel@tonic-gate		were on a host that MXed for a dynamic set of other hosts.
5757c478bd9Sstevel@tonic-gate		If the set is static, just including the line "Cw<name1>
5767c478bd9Sstevel@tonic-gate		<name2> ..." (where the names are fully qualified domain
5777c478bd9Sstevel@tonic-gate		names) is probably superior.  The actual filename can be
5787c478bd9Sstevel@tonic-gate		overridden by redefining confCW_FILE.
5797c478bd9Sstevel@tonic-gate
5807c478bd9Sstevel@tonic-gateuse_ct_file	Read the file /etc/mail/trusted-users file to get the
5817c478bd9Sstevel@tonic-gate		names of users that will be ``trusted'', that is, able to
5827c478bd9Sstevel@tonic-gate		set their envelope from address using -f without generating
5837c478bd9Sstevel@tonic-gate		a warning message.  The actual filename can be overridden
5847c478bd9Sstevel@tonic-gate		by redefining confCT_FILE.
5857c478bd9Sstevel@tonic-gate
5867c478bd9Sstevel@tonic-gateredirect	Reject all mail addressed to "address.REDIRECT" with
5877c478bd9Sstevel@tonic-gate		a ``551 User has moved; please try <address>'' message.
5887c478bd9Sstevel@tonic-gate		If this is set, you can alias people who have left
5897c478bd9Sstevel@tonic-gate		to their new address with ".REDIRECT" appended.
5907c478bd9Sstevel@tonic-gate
5917c478bd9Sstevel@tonic-gatenouucp		Don't route UUCP addresses.  This feature takes one
5927c478bd9Sstevel@tonic-gate		parameter:
5937c478bd9Sstevel@tonic-gate		`reject': reject addresses which have "!" in the local
5947c478bd9Sstevel@tonic-gate			part unless it originates from a system
5957c478bd9Sstevel@tonic-gate			that is allowed to relay.
5967c478bd9Sstevel@tonic-gate		`nospecial': don't do anything special with "!".
5977c478bd9Sstevel@tonic-gate		Warnings: 1. See the notice in the anti-spam section.
5987c478bd9Sstevel@tonic-gate		2. don't remove "!" from OperatorChars if `reject' is
5997c478bd9Sstevel@tonic-gate		given as parameter.
6007c478bd9Sstevel@tonic-gate
6017c478bd9Sstevel@tonic-gatenocanonify	Don't pass addresses to $[ ... $] for canonification
6027c478bd9Sstevel@tonic-gate		by default, i.e., host/domain names are considered canonical,
6037c478bd9Sstevel@tonic-gate		except for unqualified names, which must not be used in this
6047c478bd9Sstevel@tonic-gate		mode (violation of the standard).  It can be changed by
6057c478bd9Sstevel@tonic-gate		setting the DaemonPortOptions modifiers (M=).  That is,
6067c478bd9Sstevel@tonic-gate		FEATURE(`nocanonify') will be overridden by setting the
6077c478bd9Sstevel@tonic-gate		'c' flag.  Conversely, if FEATURE(`nocanonify') is not used,
6087c478bd9Sstevel@tonic-gate		it can be emulated by setting the 'C' flag
6097c478bd9Sstevel@tonic-gate		(DaemonPortOptions=Modifiers=C).  This would generally only
6107c478bd9Sstevel@tonic-gate		be used by sites that only act as mail gateways or which have
6117c478bd9Sstevel@tonic-gate		user agents that do full canonification themselves.  You may
6127c478bd9Sstevel@tonic-gate		also want to use
6137c478bd9Sstevel@tonic-gate		"define(`confBIND_OPTS', `-DNSRCH -DEFNAMES')" to turn off
6147c478bd9Sstevel@tonic-gate		the usual resolver options that do a similar thing.
6157c478bd9Sstevel@tonic-gate
6167c478bd9Sstevel@tonic-gate		An exception list for FEATURE(`nocanonify') can be
6177c478bd9Sstevel@tonic-gate		specified with CANONIFY_DOMAIN or CANONIFY_DOMAIN_FILE,
6187c478bd9Sstevel@tonic-gate		i.e., a list of domains which are nevertheless passed to
6197c478bd9Sstevel@tonic-gate		$[ ... $] for canonification.  This is useful to turn on
6207c478bd9Sstevel@tonic-gate		canonification for local domains, e.g., use
6217c478bd9Sstevel@tonic-gate		CANONIFY_DOMAIN(`my.domain my') to canonify addresses
6227c478bd9Sstevel@tonic-gate		which end in "my.domain" or "my".
6237c478bd9Sstevel@tonic-gate		Another way to require canonification in the local
6247c478bd9Sstevel@tonic-gate		domain is CANONIFY_DOMAIN(`$=m').
6257c478bd9Sstevel@tonic-gate
6267c478bd9Sstevel@tonic-gate		A trailing dot is added to addresses with more than
6277c478bd9Sstevel@tonic-gate		one component in it such that other features which
6287c478bd9Sstevel@tonic-gate		expect a trailing dot (e.g., virtusertable) will
6297c478bd9Sstevel@tonic-gate		still work.
6307c478bd9Sstevel@tonic-gate
6317c478bd9Sstevel@tonic-gate		If `canonify_hosts' is specified as parameter, i.e.,
6327c478bd9Sstevel@tonic-gate		FEATURE(`nocanonify', `canonify_hosts'), then
6337c478bd9Sstevel@tonic-gate		addresses which have only a hostname, e.g.,
6347c478bd9Sstevel@tonic-gate		<user@host>, will be canonified (and hopefully fully
6357c478bd9Sstevel@tonic-gate		qualified), too.
6367c478bd9Sstevel@tonic-gate
6377c478bd9Sstevel@tonic-gatestickyhost	This feature is sometimes used with LOCAL_RELAY,
6387c478bd9Sstevel@tonic-gate		although it can be used for a different effect with
6397c478bd9Sstevel@tonic-gate		MAIL_HUB.
6407c478bd9Sstevel@tonic-gate
6417c478bd9Sstevel@tonic-gate		When used without MAIL_HUB, email sent to
6427c478bd9Sstevel@tonic-gate		"user@local.host" are marked as "sticky" -- that
6437c478bd9Sstevel@tonic-gate		is, the local addresses aren't matched against UDB,
6447c478bd9Sstevel@tonic-gate		don't go through ruleset 5, and are not forwarded to
6457c478bd9Sstevel@tonic-gate		the LOCAL_RELAY (if defined).
6467c478bd9Sstevel@tonic-gate
6477c478bd9Sstevel@tonic-gate		With MAIL_HUB, mail addressed to "user@local.host"
6487c478bd9Sstevel@tonic-gate		is forwarded to the mail hub, with the envelope
6497c478bd9Sstevel@tonic-gate		address still remaining "user@local.host".
6507c478bd9Sstevel@tonic-gate		Without stickyhost, the envelope would be changed
6517c478bd9Sstevel@tonic-gate		to "user@mail_hub", in order to protect against
6527c478bd9Sstevel@tonic-gate		mailing loops.
6537c478bd9Sstevel@tonic-gate
6547c478bd9Sstevel@tonic-gatemailertable	Include a "mailer table" which can be used to override
6557c478bd9Sstevel@tonic-gate		routing for particular domains (which are not in class {w},
6567c478bd9Sstevel@tonic-gate		i.e.  local host names).  The argument of the FEATURE may be
6577c478bd9Sstevel@tonic-gate		the key definition.  If none is specified, the definition
6587c478bd9Sstevel@tonic-gate		used is:
6597c478bd9Sstevel@tonic-gate
6607c478bd9Sstevel@tonic-gate			hash /etc/mail/mailertable
6617c478bd9Sstevel@tonic-gate
6627c478bd9Sstevel@tonic-gate		Keys in this database are fully qualified domain names
6637c478bd9Sstevel@tonic-gate		or partial domains preceded by a dot -- for example,
6647c478bd9Sstevel@tonic-gate		"vangogh.CS.Berkeley.EDU" or ".CS.Berkeley.EDU".  As a
6657c478bd9Sstevel@tonic-gate		special case of the latter, "." matches any domain not
6667c478bd9Sstevel@tonic-gate		covered by other keys.  Values must be of the form:
6677c478bd9Sstevel@tonic-gate			mailer:domain
6687c478bd9Sstevel@tonic-gate		where "mailer" is the internal mailer name, and "domain"
6697c478bd9Sstevel@tonic-gate		is where to send the message.  These maps are not
6707c478bd9Sstevel@tonic-gate		reflected into the message header.  As a special case,
6717c478bd9Sstevel@tonic-gate		the forms:
6727c478bd9Sstevel@tonic-gate			local:user
6737c478bd9Sstevel@tonic-gate		will forward to the indicated user using the local mailer,
6747c478bd9Sstevel@tonic-gate			local:
6757c478bd9Sstevel@tonic-gate		will forward to the original user in the e-mail address
6767c478bd9Sstevel@tonic-gate		using the local mailer, and
6777c478bd9Sstevel@tonic-gate			error:code message
6787c478bd9Sstevel@tonic-gate			error:D.S.N:code message
6797c478bd9Sstevel@tonic-gate		will give an error message with the indicated SMTP reply
6807c478bd9Sstevel@tonic-gate		code and message, where D.S.N is an RFC 1893 compliant
6817c478bd9Sstevel@tonic-gate		error code.
6827c478bd9Sstevel@tonic-gate
6837c478bd9Sstevel@tonic-gatedomaintable	Include a "domain table" which can be used to provide
6847c478bd9Sstevel@tonic-gate		domain name mapping.  Use of this should really be
6857c478bd9Sstevel@tonic-gate		limited to your own domains.  It may be useful if you
6867c478bd9Sstevel@tonic-gate		change names (e.g., your company changes names from
6877c478bd9Sstevel@tonic-gate		oldname.com to newname.com).  The argument of the
6887c478bd9Sstevel@tonic-gate		FEATURE may be the key definition.  If none is specified,
6897c478bd9Sstevel@tonic-gate		the definition used is:
6907c478bd9Sstevel@tonic-gate
6917c478bd9Sstevel@tonic-gate			hash /etc/mail/domaintable
6927c478bd9Sstevel@tonic-gate
6937c478bd9Sstevel@tonic-gate		The key in this table is the domain name; the value is
6947c478bd9Sstevel@tonic-gate		the new (fully qualified) domain.  Anything in the
6957c478bd9Sstevel@tonic-gate		domaintable is reflected into headers; that is, this
6967c478bd9Sstevel@tonic-gate		is done in ruleset 3.
6977c478bd9Sstevel@tonic-gate
6987c478bd9Sstevel@tonic-gatebitdomain	Look up bitnet hosts in a table to try to turn them into
6997c478bd9Sstevel@tonic-gate		internet addresses.  The table can be built using the
7007c478bd9Sstevel@tonic-gate		bitdomain program contributed by John Gardiner Myers.
7017c478bd9Sstevel@tonic-gate		The argument of the FEATURE may be the key definition; if
7027c478bd9Sstevel@tonic-gate		none is specified, the definition used is:
7037c478bd9Sstevel@tonic-gate
7047c478bd9Sstevel@tonic-gate			hash /etc/mail/bitdomain
7057c478bd9Sstevel@tonic-gate
7067c478bd9Sstevel@tonic-gate		Keys are the bitnet hostname; values are the corresponding
7077c478bd9Sstevel@tonic-gate		internet hostname.
7087c478bd9Sstevel@tonic-gate
7097c478bd9Sstevel@tonic-gateuucpdomain	Similar feature for UUCP hosts.  The default map definition
7107c478bd9Sstevel@tonic-gate		is:
7117c478bd9Sstevel@tonic-gate
7127c478bd9Sstevel@tonic-gate			hash /etc/mail/uudomain
7137c478bd9Sstevel@tonic-gate
7147c478bd9Sstevel@tonic-gate		At the moment there is no automagic tool to build this
7157c478bd9Sstevel@tonic-gate		database.
7167c478bd9Sstevel@tonic-gate
7177c478bd9Sstevel@tonic-gatealways_add_domain
7187c478bd9Sstevel@tonic-gate		Include the local host domain even on locally delivered
7197c478bd9Sstevel@tonic-gate		mail.  Normally it is not added on unqualified names.
7207c478bd9Sstevel@tonic-gate		However, if you use a shared message store but do not use
7217c478bd9Sstevel@tonic-gate		the same user name space everywhere, you may need the host
7227c478bd9Sstevel@tonic-gate		name on local names.  An optional argument specifies
7237c478bd9Sstevel@tonic-gate		another domain to be added than the local.
7247c478bd9Sstevel@tonic-gate
7257c478bd9Sstevel@tonic-gateallmasquerade	If masquerading is enabled (using MASQUERADE_AS), this
7267c478bd9Sstevel@tonic-gate		feature will cause recipient addresses to also masquerade
7277c478bd9Sstevel@tonic-gate		as being from the masquerade host.  Normally they get
7287c478bd9Sstevel@tonic-gate		the local hostname.  Although this may be right for
7297c478bd9Sstevel@tonic-gate		ordinary users, it can break local aliases.  For example,
7307c478bd9Sstevel@tonic-gate		if you send to "localalias", the originating sendmail will
7317c478bd9Sstevel@tonic-gate		find that alias and send to all members, but send the
7327c478bd9Sstevel@tonic-gate		message with "To: localalias@masqueradehost".  Since that
7337c478bd9Sstevel@tonic-gate		alias likely does not exist, replies will fail.  Use this
7347c478bd9Sstevel@tonic-gate		feature ONLY if you can guarantee that the ENTIRE
7357c478bd9Sstevel@tonic-gate		namespace on your masquerade host supersets all the
7367c478bd9Sstevel@tonic-gate		local entries.
7377c478bd9Sstevel@tonic-gate
7387c478bd9Sstevel@tonic-gatelimited_masquerade
7397c478bd9Sstevel@tonic-gate		Normally, any hosts listed in class {w} are masqueraded.  If
7407c478bd9Sstevel@tonic-gate		this feature is given, only the hosts listed in class {M} (see
7417c478bd9Sstevel@tonic-gate		below:  MASQUERADE_DOMAIN) are masqueraded.  This is useful
7427c478bd9Sstevel@tonic-gate		if you have several domains with disjoint namespaces hosted
7437c478bd9Sstevel@tonic-gate		on the same machine.
7447c478bd9Sstevel@tonic-gate
7457c478bd9Sstevel@tonic-gatemasquerade_entire_domain
7467c478bd9Sstevel@tonic-gate		If masquerading is enabled (using MASQUERADE_AS) and
7477c478bd9Sstevel@tonic-gate		MASQUERADE_DOMAIN (see below) is set, this feature will
7487c478bd9Sstevel@tonic-gate		cause addresses to be rewritten such that the masquerading
7497c478bd9Sstevel@tonic-gate		domains are actually entire domains to be hidden.  All
7507c478bd9Sstevel@tonic-gate		hosts within the masquerading domains will be rewritten
7517c478bd9Sstevel@tonic-gate		to the masquerade name (used in MASQUERADE_AS).  For example,
7527c478bd9Sstevel@tonic-gate		if you have:
7537c478bd9Sstevel@tonic-gate
7547c478bd9Sstevel@tonic-gate			MASQUERADE_AS(`masq.com')
7557c478bd9Sstevel@tonic-gate			MASQUERADE_DOMAIN(`foo.org')
7567c478bd9Sstevel@tonic-gate			MASQUERADE_DOMAIN(`bar.com')
7577c478bd9Sstevel@tonic-gate
7587c478bd9Sstevel@tonic-gate		then *foo.org and *bar.com are converted to masq.com.  Without
7597c478bd9Sstevel@tonic-gate		this feature, only foo.org and bar.com are masqueraded.
7607c478bd9Sstevel@tonic-gate
7617c478bd9Sstevel@tonic-gate		    NOTE: only domains within your jurisdiction and
7627c478bd9Sstevel@tonic-gate		    current hierarchy should be masqueraded using this.
7637c478bd9Sstevel@tonic-gate
7647c478bd9Sstevel@tonic-gatelocal_no_masquerade
7657c478bd9Sstevel@tonic-gate		This feature prevents the local mailer from masquerading even
7667c478bd9Sstevel@tonic-gate		if MASQUERADE_AS is used.  MASQUERADE_AS will only have effect
7677c478bd9Sstevel@tonic-gate		on addresses of mail going outside the local domain.
7687c478bd9Sstevel@tonic-gate
7697c478bd9Sstevel@tonic-gatemasquerade_envelope
7707c478bd9Sstevel@tonic-gate		If masquerading is enabled (using MASQUERADE_AS) or the
7717c478bd9Sstevel@tonic-gate		genericstable is in use, this feature will cause envelope
7727c478bd9Sstevel@tonic-gate		addresses to also masquerade as being from the masquerade
7737c478bd9Sstevel@tonic-gate		host.  Normally only the header addresses are masqueraded.
7747c478bd9Sstevel@tonic-gate
7757c478bd9Sstevel@tonic-gategenericstable	This feature will cause unqualified addresses (i.e., without
7767c478bd9Sstevel@tonic-gate		a domain) and addresses with a domain listed in class {G}
7777c478bd9Sstevel@tonic-gate		to be looked up in a map and turned into another ("generic")
7787c478bd9Sstevel@tonic-gate		form, which can change both the domain name and the user name.
7797c478bd9Sstevel@tonic-gate		Notice: if you use an MSP (as it is default starting with
7807c478bd9Sstevel@tonic-gate		8.12), the MTA will only receive qualified addresses from the
7817c478bd9Sstevel@tonic-gate		MSP (as required by the RFCs).  Hence you need to add your
7827c478bd9Sstevel@tonic-gate		domain to class {G}.  This feature is similar to the userdb
7837c478bd9Sstevel@tonic-gate		functionality.  The same types of addresses as for
7847c478bd9Sstevel@tonic-gate		masquerading are looked up, i.e., only header sender
7857c478bd9Sstevel@tonic-gate		addresses unless the allmasquerade and/or masquerade_envelope
7867c478bd9Sstevel@tonic-gate		features are given.  Qualified addresses must have the domain
7877c478bd9Sstevel@tonic-gate		part in class {G}; entries can be added to this class by the
7887c478bd9Sstevel@tonic-gate		macros GENERICS_DOMAIN or GENERICS_DOMAIN_FILE (analogously
7897c478bd9Sstevel@tonic-gate		to MASQUERADE_DOMAIN and MASQUERADE_DOMAIN_FILE, see below).
7907c478bd9Sstevel@tonic-gate
7917c478bd9Sstevel@tonic-gate		The argument of FEATURE(`genericstable') may be the map
7927c478bd9Sstevel@tonic-gate		definition; the default map definition is:
7937c478bd9Sstevel@tonic-gate
7947c478bd9Sstevel@tonic-gate			hash /etc/mail/genericstable
7957c478bd9Sstevel@tonic-gate
7967c478bd9Sstevel@tonic-gate		The key for this table is either the full address, the domain
7977c478bd9Sstevel@tonic-gate		(with a leading @; the localpart is passed as first argument)
7987c478bd9Sstevel@tonic-gate		or the unqualified username (tried in the order mentioned);
7997c478bd9Sstevel@tonic-gate		the value is the new user address.  If the new user address
8007c478bd9Sstevel@tonic-gate		does not include a domain, it will be qualified in the standard
8017c478bd9Sstevel@tonic-gate		manner, i.e., using $j or the masquerade name.  Note that the
8027c478bd9Sstevel@tonic-gate		address being looked up must be fully qualified.  For local
8037c478bd9Sstevel@tonic-gate		mail, it is necessary to use FEATURE(`always_add_domain')
8047c478bd9Sstevel@tonic-gate		for the addresses to be qualified.
8057c478bd9Sstevel@tonic-gate		The "+detail" of an address is passed as %1, so entries like
8067c478bd9Sstevel@tonic-gate
8077c478bd9Sstevel@tonic-gate			old+*@foo.org	new+%1@example.com
8087c478bd9Sstevel@tonic-gate			gen+*@foo.org	%1@example.com
8097c478bd9Sstevel@tonic-gate
8107c478bd9Sstevel@tonic-gate		and other forms are possible.
8117c478bd9Sstevel@tonic-gate
8127c478bd9Sstevel@tonic-gategenerics_entire_domain
8137c478bd9Sstevel@tonic-gate		If the genericstable is enabled and GENERICS_DOMAIN or
8147c478bd9Sstevel@tonic-gate		GENERICS_DOMAIN_FILE is used, this feature will cause
8157c478bd9Sstevel@tonic-gate		addresses to be searched in the map if their domain
8167c478bd9Sstevel@tonic-gate		parts are subdomains of elements in class {G}.
8177c478bd9Sstevel@tonic-gate
8187c478bd9Sstevel@tonic-gatevirtusertable	A domain-specific form of aliasing, allowing multiple
8197c478bd9Sstevel@tonic-gate		virtual domains to be hosted on one machine.  For example,
820*49218d4fSjbeck		if the virtuser table contains:
8217c478bd9Sstevel@tonic-gate
8227c478bd9Sstevel@tonic-gate			info@foo.com	foo-info
8237c478bd9Sstevel@tonic-gate			info@bar.com	bar-info
8247c478bd9Sstevel@tonic-gate			joe@bar.com	error:nouser 550 No such user here
8257c478bd9Sstevel@tonic-gate			jax@bar.com	error:5.7.0:550 Address invalid
8267c478bd9Sstevel@tonic-gate			@baz.org	jane@example.net
8277c478bd9Sstevel@tonic-gate
8287c478bd9Sstevel@tonic-gate		then mail addressed to info@foo.com will be sent to the
8297c478bd9Sstevel@tonic-gate		address foo-info, mail addressed to info@bar.com will be
8307c478bd9Sstevel@tonic-gate		delivered to bar-info, and mail addressed to anyone at baz.org
8317c478bd9Sstevel@tonic-gate		will be sent to jane@example.net, mail to joe@bar.com will
8327c478bd9Sstevel@tonic-gate		be rejected with the specified error message, and mail to
8337c478bd9Sstevel@tonic-gate		jax@bar.com will also have a RFC 1893 compliant error code
8347c478bd9Sstevel@tonic-gate		5.7.0.
8357c478bd9Sstevel@tonic-gate
8367c478bd9Sstevel@tonic-gate		The username from the original address is passed
8377c478bd9Sstevel@tonic-gate		as %1 allowing:
8387c478bd9Sstevel@tonic-gate
8397c478bd9Sstevel@tonic-gate			@foo.org	%1@example.com
8407c478bd9Sstevel@tonic-gate
8417c478bd9Sstevel@tonic-gate		meaning someone@foo.org will be sent to someone@example.com.
8427c478bd9Sstevel@tonic-gate		Additionally, if the local part consists of "user+detail"
8437c478bd9Sstevel@tonic-gate		then "detail" is passed as %2 and "+detail" is passed as %3
8447c478bd9Sstevel@tonic-gate		when a match against user+* is attempted, so entries like
8457c478bd9Sstevel@tonic-gate
8467c478bd9Sstevel@tonic-gate			old+*@foo.org	new+%2@example.com
8477c478bd9Sstevel@tonic-gate			gen+*@foo.org	%2@example.com
8487c478bd9Sstevel@tonic-gate			+*@foo.org	%1%3@example.com
8497c478bd9Sstevel@tonic-gate			X++@foo.org	Z%3@example.com
8507c478bd9Sstevel@tonic-gate			@bar.org	%1%3
8517c478bd9Sstevel@tonic-gate
8527c478bd9Sstevel@tonic-gate		and other forms are possible.  Note: to preserve "+detail"
8537c478bd9Sstevel@tonic-gate		for a default case (@domain) %1%3 must be used as RHS.
8547c478bd9Sstevel@tonic-gate		There are two wildcards after "+": "+" matches only a non-empty
8557c478bd9Sstevel@tonic-gate		detail, "*" matches also empty details, e.g., user+@foo.org
8567c478bd9Sstevel@tonic-gate		matches +*@foo.org but not ++@foo.org.  This can be used
8577c478bd9Sstevel@tonic-gate		to ensure that the parameters %2 and %3 are not empty.
8587c478bd9Sstevel@tonic-gate
8597c478bd9Sstevel@tonic-gate		All the host names on the left hand side (foo.com, bar.com,
8607c478bd9Sstevel@tonic-gate		and baz.org) must be in class {w} or class {VirtHost}.  The
8617c478bd9Sstevel@tonic-gate		latter can be defined by the macros VIRTUSER_DOMAIN or
8627c478bd9Sstevel@tonic-gate		VIRTUSER_DOMAIN_FILE (analogously to MASQUERADE_DOMAIN and
8637c478bd9Sstevel@tonic-gate		MASQUERADE_DOMAIN_FILE, see below).  If VIRTUSER_DOMAIN or
8647c478bd9Sstevel@tonic-gate		VIRTUSER_DOMAIN_FILE is used, then the entries of class
8657c478bd9Sstevel@tonic-gate		{VirtHost} are added to class {R}, i.e., relaying is allowed
8667c478bd9Sstevel@tonic-gate		to (and from) those domains.  The default map definition is:
8677c478bd9Sstevel@tonic-gate
8687c478bd9Sstevel@tonic-gate			hash /etc/mail/virtusertable
8697c478bd9Sstevel@tonic-gate
8707c478bd9Sstevel@tonic-gate		A new definition can be specified as the second argument of
8717c478bd9Sstevel@tonic-gate		the FEATURE macro, such as
8727c478bd9Sstevel@tonic-gate
8737c478bd9Sstevel@tonic-gate			FEATURE(`virtusertable', `dbm /etc/mail/virtusers')
8747c478bd9Sstevel@tonic-gate
8757c478bd9Sstevel@tonic-gatevirtuser_entire_domain
8767c478bd9Sstevel@tonic-gate		If the virtusertable is enabled and VIRTUSER_DOMAIN or
8777c478bd9Sstevel@tonic-gate		VIRTUSER_DOMAIN_FILE is used, this feature will cause
8787c478bd9Sstevel@tonic-gate		addresses to be searched in the map if their domain
8797c478bd9Sstevel@tonic-gate		parts are subdomains of elements in class {VirtHost}.
8807c478bd9Sstevel@tonic-gate
8817c478bd9Sstevel@tonic-gateldap_routing	Implement LDAP-based e-mail recipient routing according to
8827c478bd9Sstevel@tonic-gate		the Internet Draft draft-lachman-laser-ldap-mail-routing-01.
8837c478bd9Sstevel@tonic-gate		This provides a method to re-route addresses with a
8847c478bd9Sstevel@tonic-gate		domain portion in class {LDAPRoute} to either a
8857c478bd9Sstevel@tonic-gate		different mail host or a different address.  Hosts can
8867c478bd9Sstevel@tonic-gate		be added to this class using LDAPROUTE_DOMAIN and
8877c478bd9Sstevel@tonic-gate		LDAPROUTE_DOMAIN_FILE (analogously to MASQUERADE_DOMAIN and
8887c478bd9Sstevel@tonic-gate		MASQUERADE_DOMAIN_FILE, see below).
8897c478bd9Sstevel@tonic-gate
8907c478bd9Sstevel@tonic-gate		See the LDAP ROUTING section below for more information.
8917c478bd9Sstevel@tonic-gate
8927c478bd9Sstevel@tonic-gatenodns		If you aren't running DNS at your site (for example,
8937c478bd9Sstevel@tonic-gate		you are UUCP-only connected).  It's hard to consider
8947c478bd9Sstevel@tonic-gate		this a "feature", but hey, it had to go somewhere.
8957c478bd9Sstevel@tonic-gate		Actually, as of 8.7 this is a no-op -- remove "dns" from
8967c478bd9Sstevel@tonic-gate		the hosts service switch entry instead.
8977c478bd9Sstevel@tonic-gate
8987c478bd9Sstevel@tonic-gatenullclient	This is a special case -- it creates a configuration file
8997c478bd9Sstevel@tonic-gate		containing nothing but support for forwarding all mail to a
9007c478bd9Sstevel@tonic-gate		central hub via a local SMTP-based network.  The argument
9017c478bd9Sstevel@tonic-gate		is the name of that hub.
9027c478bd9Sstevel@tonic-gate
9037c478bd9Sstevel@tonic-gate		The only other feature that should be used in conjunction
9047c478bd9Sstevel@tonic-gate		with this one is FEATURE(`nocanonify').  No mailers
9057c478bd9Sstevel@tonic-gate		should be defined.  No aliasing or forwarding is done.
9067c478bd9Sstevel@tonic-gate
9077c478bd9Sstevel@tonic-gatelocal_lmtp	Use an LMTP capable local mailer.  The argument to this
9087c478bd9Sstevel@tonic-gate		feature is the pathname of an LMTP capable mailer.  By
9097c478bd9Sstevel@tonic-gate		default, mail.local is used.  This is expected to be the
9107c478bd9Sstevel@tonic-gate		mail.local which came with the 8.9 distribution which is
9117c478bd9Sstevel@tonic-gate		LMTP capable.  The path to mail.local is set by the
9127c478bd9Sstevel@tonic-gate		confEBINDIR m4 variable -- making the default
9137c478bd9Sstevel@tonic-gate		LOCAL_MAILER_PATH /usr/libexec/mail.local.
9147c478bd9Sstevel@tonic-gate		If a different LMTP capable mailer is used, its pathname
9157c478bd9Sstevel@tonic-gate		can be specified as second parameter and the arguments
9167c478bd9Sstevel@tonic-gate		passed to it (A=) as third parameter, e.g.,
9177c478bd9Sstevel@tonic-gate
9187c478bd9Sstevel@tonic-gate			FEATURE(`local_lmtp', `/usr/local/bin/lmtp', `lmtp')
9197c478bd9Sstevel@tonic-gate
9207c478bd9Sstevel@tonic-gate		WARNING: This feature sets LOCAL_MAILER_FLAGS unconditionally,
9217c478bd9Sstevel@tonic-gate		i.e., without respecting any definitions in an OSTYPE setting.
9227c478bd9Sstevel@tonic-gate
9237c478bd9Sstevel@tonic-gatelocal_procmail	Use procmail or another delivery agent as the local mailer.
9247c478bd9Sstevel@tonic-gate		The argument to this feature is the pathname of the
9257c478bd9Sstevel@tonic-gate		delivery agent, which defaults to PROCMAIL_MAILER_PATH.
9267c478bd9Sstevel@tonic-gate		Note that this does NOT use PROCMAIL_MAILER_FLAGS or
9277c478bd9Sstevel@tonic-gate		PROCMAIL_MAILER_ARGS for the local mailer; tweak
9287c478bd9Sstevel@tonic-gate		LOCAL_MAILER_FLAGS and LOCAL_MAILER_ARGS instead, or
9297c478bd9Sstevel@tonic-gate		specify the appropriate parameters.  When procmail is used,
9307c478bd9Sstevel@tonic-gate		the local mailer can make use of the
9317c478bd9Sstevel@tonic-gate		"user+indicator@local.host" syntax; normally the +indicator
9327c478bd9Sstevel@tonic-gate		is just tossed, but by default it is passed as the -a
9337c478bd9Sstevel@tonic-gate		argument to procmail.
9347c478bd9Sstevel@tonic-gate
9357c478bd9Sstevel@tonic-gate		This feature can take up to three arguments:
9367c478bd9Sstevel@tonic-gate
9377c478bd9Sstevel@tonic-gate		1. Path to the mailer program
9387c478bd9Sstevel@tonic-gate		   [default: /usr/local/bin/procmail]
9397c478bd9Sstevel@tonic-gate		2. Argument vector including name of the program
9407c478bd9Sstevel@tonic-gate		   [default: procmail -Y -a $h -d $u]
9417c478bd9Sstevel@tonic-gate		3. Flags for the mailer [default: SPfhn9]
9427c478bd9Sstevel@tonic-gate
9437c478bd9Sstevel@tonic-gate		Empty arguments cause the defaults to be taken.
9447c478bd9Sstevel@tonic-gate		Note that if you are on a system with a broken
9457c478bd9Sstevel@tonic-gate		setreuid() call, you may need to add -f $f to the procmail
9467c478bd9Sstevel@tonic-gate		argument vector to pass the proper sender to procmail.
9477c478bd9Sstevel@tonic-gate
9487c478bd9Sstevel@tonic-gate		For example, this allows it to use the maildrop
9497c478bd9Sstevel@tonic-gate		(http://www.flounder.net/~mrsam/maildrop/) mailer instead
9507c478bd9Sstevel@tonic-gate		by specifying:
9517c478bd9Sstevel@tonic-gate
9527c478bd9Sstevel@tonic-gate		FEATURE(`local_procmail', `/usr/local/bin/maildrop',
9537c478bd9Sstevel@tonic-gate		 `maildrop -d $u')
9547c478bd9Sstevel@tonic-gate
9557c478bd9Sstevel@tonic-gate		or scanmails using:
9567c478bd9Sstevel@tonic-gate
9577c478bd9Sstevel@tonic-gate		FEATURE(`local_procmail', `/usr/local/bin/scanmails')
9587c478bd9Sstevel@tonic-gate
9597c478bd9Sstevel@tonic-gate		WARNING: This feature sets LOCAL_MAILER_FLAGS unconditionally,
9607c478bd9Sstevel@tonic-gate		i.e.,  without respecting any definitions in an OSTYPE setting.
9617c478bd9Sstevel@tonic-gate
9627c478bd9Sstevel@tonic-gatebestmx_is_local	Accept mail as though locally addressed for any host that
9637c478bd9Sstevel@tonic-gate		lists us as the best possible MX record.  This generates
9647c478bd9Sstevel@tonic-gate		additional DNS traffic, but should be OK for low to
9657c478bd9Sstevel@tonic-gate		medium traffic hosts.  The argument may be a set of
9667c478bd9Sstevel@tonic-gate		domains, which will limit the feature to only apply to
9677c478bd9Sstevel@tonic-gate		these domains -- this will reduce unnecessary DNS
9687c478bd9Sstevel@tonic-gate		traffic.  THIS FEATURE IS FUNDAMENTALLY INCOMPATIBLE WITH
9697c478bd9Sstevel@tonic-gate		WILDCARD MX RECORDS!!!  If you have a wildcard MX record
9707c478bd9Sstevel@tonic-gate		that matches your domain, you cannot use this feature.
9717c478bd9Sstevel@tonic-gate
9727c478bd9Sstevel@tonic-gatesmrsh		Use the SendMail Restricted SHell (smrsh) provided
9737c478bd9Sstevel@tonic-gate		with the distribution instead of /bin/sh for mailing
9747c478bd9Sstevel@tonic-gate		to programs.  This improves the ability of the local
9757c478bd9Sstevel@tonic-gate		system administrator to control what gets run via
9767c478bd9Sstevel@tonic-gate		e-mail.  If an argument is provided it is used as the
9777c478bd9Sstevel@tonic-gate		pathname to smrsh; otherwise, the path defined by
9787c478bd9Sstevel@tonic-gate		confEBINDIR is used for the smrsh binary -- by default,
9797c478bd9Sstevel@tonic-gate		/usr/libexec/smrsh is assumed.
9807c478bd9Sstevel@tonic-gate
9817c478bd9Sstevel@tonic-gatepromiscuous_relay
9827c478bd9Sstevel@tonic-gate		By default, the sendmail configuration files do not permit
9837c478bd9Sstevel@tonic-gate		mail relaying (that is, accepting mail from outside your
9847c478bd9Sstevel@tonic-gate		local host (class {w}) and sending it to another host than
9857c478bd9Sstevel@tonic-gate		your local host).  This option sets your site to allow
9867c478bd9Sstevel@tonic-gate		mail relaying from any site to any site.  In almost all
9877c478bd9Sstevel@tonic-gate		cases, it is better to control relaying more carefully
9887c478bd9Sstevel@tonic-gate		with the access map, class {R}, or authentication.  Domains
9897c478bd9Sstevel@tonic-gate		can be added to class {R} by the macros RELAY_DOMAIN or
9907c478bd9Sstevel@tonic-gate		RELAY_DOMAIN_FILE (analogously to MASQUERADE_DOMAIN and
9917c478bd9Sstevel@tonic-gate		MASQUERADE_DOMAIN_FILE, see below).
9927c478bd9Sstevel@tonic-gate
9937c478bd9Sstevel@tonic-gaterelay_entire_domain
9947c478bd9Sstevel@tonic-gate		This option allows any host in your domain as defined by
9957c478bd9Sstevel@tonic-gate		class {m} to use your server for relaying.  Notice: make
9967c478bd9Sstevel@tonic-gate		sure that your domain is not just a top level domain,
9977c478bd9Sstevel@tonic-gate		e.g., com.  This can happen if you give your host a name
9987c478bd9Sstevel@tonic-gate		like example.com instead of host.example.com.
9997c478bd9Sstevel@tonic-gate
10007c478bd9Sstevel@tonic-gaterelay_hosts_only
10017c478bd9Sstevel@tonic-gate		By default, names that are listed as RELAY in the access
10027c478bd9Sstevel@tonic-gate		db and class {R} are treated as domain names, not host names.
10037c478bd9Sstevel@tonic-gate		For example, if you specify ``foo.com'', then mail to or
10047c478bd9Sstevel@tonic-gate		from foo.com, abc.foo.com, or a.very.deep.domain.foo.com
10057c478bd9Sstevel@tonic-gate		will all be accepted for relaying.  This feature changes
10067c478bd9Sstevel@tonic-gate		the behaviour to lookup individual host names only.
10077c478bd9Sstevel@tonic-gate
10087c478bd9Sstevel@tonic-gaterelay_based_on_MX
10097c478bd9Sstevel@tonic-gate		Turns on the ability to allow relaying based on the MX
10107c478bd9Sstevel@tonic-gate		records of the host portion of an incoming recipient; that
10117c478bd9Sstevel@tonic-gate		is, if an MX record for host foo.com points to your site,
10127c478bd9Sstevel@tonic-gate		you will accept and relay mail addressed to foo.com.  See
10137c478bd9Sstevel@tonic-gate		description below for more information before using this
10147c478bd9Sstevel@tonic-gate		feature.  Also, see the KNOWNBUGS entry regarding bestmx
10157c478bd9Sstevel@tonic-gate		map lookups.
10167c478bd9Sstevel@tonic-gate
10177c478bd9Sstevel@tonic-gate		FEATURE(`relay_based_on_MX') does not necessarily allow
10187c478bd9Sstevel@tonic-gate		routing of these messages which you expect to be allowed,
10197c478bd9Sstevel@tonic-gate		if route address syntax (or %-hack syntax) is used.  If
10207c478bd9Sstevel@tonic-gate		this is a problem, add entries to the access-table or use
10217c478bd9Sstevel@tonic-gate		FEATURE(`loose_relay_check').
10227c478bd9Sstevel@tonic-gate
10237c478bd9Sstevel@tonic-gaterelay_mail_from
10247c478bd9Sstevel@tonic-gate		Allows relaying if the mail sender is listed as RELAY in
10257c478bd9Sstevel@tonic-gate		the access map.  If an optional argument `domain' (this
10267c478bd9Sstevel@tonic-gate		is the literal word `domain', not a placeholder) is given,
10277c478bd9Sstevel@tonic-gate		relaying can be allowed just based on the domain portion
10287c478bd9Sstevel@tonic-gate		of the sender address.  This feature should only be used if
10297c478bd9Sstevel@tonic-gate		absolutely necessary as the sender address can be easily
10307c478bd9Sstevel@tonic-gate		forged.  Use of this feature requires the "From:" tag to
10317c478bd9Sstevel@tonic-gate		be used for the key in the access map; see the discussion
10327c478bd9Sstevel@tonic-gate		of tags and FEATURE(`relay_mail_from') in the section on
10337c478bd9Sstevel@tonic-gate		anti-spam configuration control.
10347c478bd9Sstevel@tonic-gate
10357c478bd9Sstevel@tonic-gaterelay_local_from
10367c478bd9Sstevel@tonic-gate		Allows relaying if the domain portion of the mail sender
10377c478bd9Sstevel@tonic-gate		is a local host.  This should only be used if absolutely
10387c478bd9Sstevel@tonic-gate		necessary as it opens a window for spammers.  Specifically,
10397c478bd9Sstevel@tonic-gate		they can send mail to your mail server that claims to be
10407c478bd9Sstevel@tonic-gate		from your domain (either directly or via a routed address),
10417c478bd9Sstevel@tonic-gate		and you will go ahead and relay it out to arbitrary hosts
10427c478bd9Sstevel@tonic-gate		on the Internet.
10437c478bd9Sstevel@tonic-gate
10447c478bd9Sstevel@tonic-gateaccept_unqualified_senders
10457c478bd9Sstevel@tonic-gate		Normally, MAIL FROM: commands in the SMTP session will be
10467c478bd9Sstevel@tonic-gate		refused if the connection is a network connection and the
10477c478bd9Sstevel@tonic-gate		sender address does not include a domain name.  If your
10487c478bd9Sstevel@tonic-gate		setup sends local mail unqualified (i.e., MAIL FROM:<joe>),
10497c478bd9Sstevel@tonic-gate		you will need to use this feature to accept unqualified
10507c478bd9Sstevel@tonic-gate		sender addresses.  Setting the DaemonPortOptions modifier
10517c478bd9Sstevel@tonic-gate		'u' overrides the default behavior, i.e., unqualified
10527c478bd9Sstevel@tonic-gate		addresses are accepted even without this FEATURE.
10537c478bd9Sstevel@tonic-gate		If this FEATURE is not used, the DaemonPortOptions modifier
10547c478bd9Sstevel@tonic-gate		'f' can be used to enforce fully qualified addresses.
10557c478bd9Sstevel@tonic-gate
10567c478bd9Sstevel@tonic-gateaccept_unresolvable_domains
10577c478bd9Sstevel@tonic-gate		Normally, MAIL FROM: commands in the SMTP session will be
10587c478bd9Sstevel@tonic-gate		refused if the host part of the argument to MAIL FROM:
10597c478bd9Sstevel@tonic-gate		cannot be located in the host name service (e.g., an A or
10607c478bd9Sstevel@tonic-gate		MX record in DNS).  If you are inside a firewall that has
10617c478bd9Sstevel@tonic-gate		only a limited view of the Internet host name space, this
10627c478bd9Sstevel@tonic-gate		could cause problems.  In this case you probably want to
10637c478bd9Sstevel@tonic-gate		use this feature to accept all domains on input, even if
10647c478bd9Sstevel@tonic-gate		they are unresolvable.
10657c478bd9Sstevel@tonic-gate
10667c478bd9Sstevel@tonic-gateaccess_db	Turns on the access database feature.  The access db gives
10677c478bd9Sstevel@tonic-gate		you the ability to allow or refuse to accept mail from
10687c478bd9Sstevel@tonic-gate		specified domains for administrative reasons.  Moreover,
10697c478bd9Sstevel@tonic-gate		it can control the behavior of sendmail in various situations.
10707c478bd9Sstevel@tonic-gate		By default, the access database specification is:
10717c478bd9Sstevel@tonic-gate
10727c478bd9Sstevel@tonic-gate			hash -T<TMPF> /etc/mail/access
10737c478bd9Sstevel@tonic-gate
10747c478bd9Sstevel@tonic-gate		See the anti-spam configuration control section for further
10757c478bd9Sstevel@tonic-gate		important information about this feature.  Notice:
10767c478bd9Sstevel@tonic-gate		"-T<TMPF>" is meant literal, do not replace it by anything.
10777c478bd9Sstevel@tonic-gate
10787c478bd9Sstevel@tonic-gateblacklist_recipients
10797c478bd9Sstevel@tonic-gate		Turns on the ability to block incoming mail for certain
10807c478bd9Sstevel@tonic-gate		recipient usernames, hostnames, or addresses.  For
10817c478bd9Sstevel@tonic-gate		example, you can block incoming mail to user nobody,
10827c478bd9Sstevel@tonic-gate		host foo.mydomain.com, or guest@bar.mydomain.com.
10837c478bd9Sstevel@tonic-gate		These specifications are put in the access db as
10847c478bd9Sstevel@tonic-gate		described in the anti-spam configuration control section
10857c478bd9Sstevel@tonic-gate		later in this document.
10867c478bd9Sstevel@tonic-gate
10877c478bd9Sstevel@tonic-gatedelay_checks	The rulesets check_mail and check_relay will not be called
10887c478bd9Sstevel@tonic-gate		when a client connects or issues a MAIL command, respectively.
10897c478bd9Sstevel@tonic-gate		Instead, those rulesets will be called by the check_rcpt
10907c478bd9Sstevel@tonic-gate		ruleset; they will be skipped under certain circumstances.
10917c478bd9Sstevel@tonic-gate		See "Delay all checks" in the anti-spam configuration control
10927c478bd9Sstevel@tonic-gate		section.  Note: this feature is incompatible to the versions
10937c478bd9Sstevel@tonic-gate		in 8.10 and 8.11.
10947c478bd9Sstevel@tonic-gate
10957c478bd9Sstevel@tonic-gateuse_client_ptr	If this feature is enabled then check_relay will override
10967c478bd9Sstevel@tonic-gate		its first argument with $&{client_ptr}.  This is useful for
10977c478bd9Sstevel@tonic-gate		rejections based on the unverified hostname of client,
10987c478bd9Sstevel@tonic-gate		which turns on the same behavior as in earlier sendmail
10997c478bd9Sstevel@tonic-gate		versions when delay_checks was not in use.  See doc/op/op.*
11007c478bd9Sstevel@tonic-gate		about check_relay, {client_name}, and {client_ptr}.
11017c478bd9Sstevel@tonic-gate
11027c478bd9Sstevel@tonic-gatednsbl		Turns on rejection of hosts found in an DNS based rejection
11037c478bd9Sstevel@tonic-gate		list.  If an argument is provided it is used as the domain
11047c478bd9Sstevel@tonic-gate		in which blocked hosts are listed; otherwise it defaults to
11057c478bd9Sstevel@tonic-gate		blackholes.mail-abuse.org.  An explanation for an DNS based
11067c478bd9Sstevel@tonic-gate		rejection list can be found at http://mail-abuse.org/rbl/.
11077c478bd9Sstevel@tonic-gate		A second argument can be used to change the default error
11087c478bd9Sstevel@tonic-gate		message.  Without that second argument, the error message
11097c478bd9Sstevel@tonic-gate		will be
11107c478bd9Sstevel@tonic-gate			Rejected: IP-ADDRESS listed at SERVER
11117c478bd9Sstevel@tonic-gate		where IP-ADDRESS and SERVER are replaced by the appropriate
11127c478bd9Sstevel@tonic-gate		information.  By default, temporary lookup failures are
11137c478bd9Sstevel@tonic-gate		ignored.  This behavior can be changed by specifying a
11147c478bd9Sstevel@tonic-gate		third argument, which must be either `t' or a full error
11157c478bd9Sstevel@tonic-gate		message.  See the anti-spam configuration control section for
11167c478bd9Sstevel@tonic-gate		an example.  The dnsbl feature can be included several times
11177c478bd9Sstevel@tonic-gate		to query different DNS based rejection lists.  See also
11187c478bd9Sstevel@tonic-gate		enhdnsbl for an enhanced version.
11197c478bd9Sstevel@tonic-gate
11207c478bd9Sstevel@tonic-gate		Set the DNSBL_MAP mc option to change the default map
11217c478bd9Sstevel@tonic-gate		definition from `host'.  Set the DNSBL_MAP_OPT mc option
11227c478bd9Sstevel@tonic-gate		to add additional options to the map specification used.
11237c478bd9Sstevel@tonic-gate
11247c478bd9Sstevel@tonic-gate		Some DNS based rejection lists cause failures if asked
11257c478bd9Sstevel@tonic-gate		for AAAA records. If your sendmail version is compiled
11267c478bd9Sstevel@tonic-gate		with IPv6 support (NETINET6) and you experience this
11277c478bd9Sstevel@tonic-gate		problem, add
11287c478bd9Sstevel@tonic-gate
11297c478bd9Sstevel@tonic-gate			define(`DNSBL_MAP', `dns -R A')
11307c478bd9Sstevel@tonic-gate
11317c478bd9Sstevel@tonic-gate		before the first use of this feature.  Alternatively you
11327c478bd9Sstevel@tonic-gate		can use enhdnsbl instead (see below).  Moreover, this
11337c478bd9Sstevel@tonic-gate		statement can be used to reduce the number of DNS retries,
11347c478bd9Sstevel@tonic-gate		e.g.,
11357c478bd9Sstevel@tonic-gate
11367c478bd9Sstevel@tonic-gate			define(`DNSBL_MAP', `dns -R A -r2')
11377c478bd9Sstevel@tonic-gate
11387c478bd9Sstevel@tonic-gate		See below (EDNSBL_TO) for an explanation.
11397c478bd9Sstevel@tonic-gate
11407c478bd9Sstevel@tonic-gate		NOTE: The default DNS blacklist, blackholes.mail-abuse.org,
11417c478bd9Sstevel@tonic-gate		is a service offered by the Mail Abuse Prevention System
11427c478bd9Sstevel@tonic-gate		(MAPS).  As of July 31, 2001, MAPS is a subscription
11437c478bd9Sstevel@tonic-gate		service, so using that network address won't work if you
11447c478bd9Sstevel@tonic-gate		haven't subscribed.  Contact MAPS to subscribe
11457c478bd9Sstevel@tonic-gate		(http://mail-abuse.org/).
11467c478bd9Sstevel@tonic-gate
11477c478bd9Sstevel@tonic-gateenhdnsbl	Enhanced version of dnsbl (see above).  Further arguments
11487c478bd9Sstevel@tonic-gate		(up to 5) can be used to specify specific return values
11497c478bd9Sstevel@tonic-gate		from lookups.  Temporary lookup failures are ignored unless
11507c478bd9Sstevel@tonic-gate		a third argument is given, which must be either `t' or a full
11517c478bd9Sstevel@tonic-gate		error message.  By default, any successful lookup will
11527c478bd9Sstevel@tonic-gate		generate an error.  Otherwise the result of the lookup is
11537c478bd9Sstevel@tonic-gate		compared with the supplied argument(s), and only if a match
11547c478bd9Sstevel@tonic-gate		occurs an error is generated.  For example,
11557c478bd9Sstevel@tonic-gate
11567c478bd9Sstevel@tonic-gate		FEATURE(`enhdnsbl', `dnsbl.example.com', `', `t', `127.0.0.2.')
11577c478bd9Sstevel@tonic-gate
11587c478bd9Sstevel@tonic-gate		will reject the e-mail if the lookup returns the value
11597c478bd9Sstevel@tonic-gate		``127.0.0.2.'', or generate a 451 response if the lookup
11607c478bd9Sstevel@tonic-gate		temporarily failed.  The arguments can contain metasymbols
11617c478bd9Sstevel@tonic-gate		as they are allowed in the LHS of rules.  As the example
11627c478bd9Sstevel@tonic-gate		shows, the default values are also used if an empty argument,
11637c478bd9Sstevel@tonic-gate		i.e., `', is specified.  This feature requires that sendmail
11647c478bd9Sstevel@tonic-gate		has been compiled with the flag DNSMAP (see sendmail/README).
11657c478bd9Sstevel@tonic-gate
11667c478bd9Sstevel@tonic-gate		Set the EDNSBL_TO mc option to change the DNS retry count
11677c478bd9Sstevel@tonic-gate		from the default value of 5, this can be very useful when
11687c478bd9Sstevel@tonic-gate		a DNS server is not responding, which in turn may cause
11697c478bd9Sstevel@tonic-gate		clients to time out (an entry stating
11707c478bd9Sstevel@tonic-gate
11717c478bd9Sstevel@tonic-gate			did not issue MAIL/EXPN/VRFY/ETRN
11727c478bd9Sstevel@tonic-gate
11737c478bd9Sstevel@tonic-gate		will be logged).
11747c478bd9Sstevel@tonic-gate
11757c478bd9Sstevel@tonic-gateratecontrol	Enable simple ruleset to do connection rate control
11767c478bd9Sstevel@tonic-gate		checking.  This requires entries in access_db of the form
11777c478bd9Sstevel@tonic-gate
11787c478bd9Sstevel@tonic-gate			ClientRate:IP.ADD.RE.SS		LIMIT
11797c478bd9Sstevel@tonic-gate
11807c478bd9Sstevel@tonic-gate		The RHS specifies the maximum number of connections
11817c478bd9Sstevel@tonic-gate		(an integer number) over the time interval defined
11827c478bd9Sstevel@tonic-gate		by ConnectionRateWindowSize, where 0 means unlimited.
11837c478bd9Sstevel@tonic-gate
11847c478bd9Sstevel@tonic-gate		Take the following example:
11857c478bd9Sstevel@tonic-gate
11867c478bd9Sstevel@tonic-gate			ClientRate:10.1.2.3		4
11877c478bd9Sstevel@tonic-gate			ClientRate:127.0.0.1		0
11887c478bd9Sstevel@tonic-gate			ClientRate:			10
11897c478bd9Sstevel@tonic-gate
11907c478bd9Sstevel@tonic-gate		10.1.2.3 can only make up to 4 connections, the
11917c478bd9Sstevel@tonic-gate		general limit it 10, and 127.0.0.1 can make an unlimited
11927c478bd9Sstevel@tonic-gate		number of connections per ConnectionRateWindowSize.
11937c478bd9Sstevel@tonic-gate
11947c478bd9Sstevel@tonic-gate		See also CONNECTION CONTROL.
11957c478bd9Sstevel@tonic-gate
11967c478bd9Sstevel@tonic-gateconncontrol	Enable a simple check of the number of incoming SMTP
11977c478bd9Sstevel@tonic-gate		connections.  This requires entries in access_db of the
11987c478bd9Sstevel@tonic-gate		form
11997c478bd9Sstevel@tonic-gate
12007c478bd9Sstevel@tonic-gate			ClientConn:IP.ADD.RE.SS		LIMIT
12017c478bd9Sstevel@tonic-gate
12027c478bd9Sstevel@tonic-gate		The RHS specifies the maximum number of open connections
12037c478bd9Sstevel@tonic-gate		(an integer number).
12047c478bd9Sstevel@tonic-gate
12057c478bd9Sstevel@tonic-gate		Take the following example:
12067c478bd9Sstevel@tonic-gate
12077c478bd9Sstevel@tonic-gate			ClientConn:10.1.2.3		4
12087c478bd9Sstevel@tonic-gate			ClientConn:127.0.0.1		0
12097c478bd9Sstevel@tonic-gate			ClientConn:			10
12107c478bd9Sstevel@tonic-gate
12117c478bd9Sstevel@tonic-gate		10.1.2.3 can only have up to 4 open connections, the
12127c478bd9Sstevel@tonic-gate		general limit it 10, and 127.0.0.1 does not have any
12137c478bd9Sstevel@tonic-gate		explicit limit.
12147c478bd9Sstevel@tonic-gate
12157c478bd9Sstevel@tonic-gate		See also CONNECTION CONTROL.
12167c478bd9Sstevel@tonic-gate
12177c478bd9Sstevel@tonic-gatemtamark		Experimental support for "Marking Mail Transfer Agents in
12187c478bd9Sstevel@tonic-gate		Reverse DNS with TXT RRs" (MTAMark), see
12197c478bd9Sstevel@tonic-gate		draft-stumpf-dns-mtamark-01.  Optional arguments are:
12207c478bd9Sstevel@tonic-gate
12217c478bd9Sstevel@tonic-gate		1. Error message, default:
12227c478bd9Sstevel@tonic-gate
12237c478bd9Sstevel@tonic-gate			550 Rejected: $&{client_addr} not listed as MTA
12247c478bd9Sstevel@tonic-gate
12257c478bd9Sstevel@tonic-gate		2. Temporary lookup failures are ignored unless a second
12267c478bd9Sstevel@tonic-gate		argument is given, which must be either `t' or a full
12277c478bd9Sstevel@tonic-gate		error message.
12287c478bd9Sstevel@tonic-gate
12297c478bd9Sstevel@tonic-gate		3. Lookup prefix, default: _perm._smtp._srv.  This should
12307c478bd9Sstevel@tonic-gate		not be changed unless the draft changes it.
12317c478bd9Sstevel@tonic-gate
12327c478bd9Sstevel@tonic-gate		Example:
12337c478bd9Sstevel@tonic-gate
12347c478bd9Sstevel@tonic-gate			FEATURE(`mtamark', `', `t')
12357c478bd9Sstevel@tonic-gate
12367c478bd9Sstevel@tonic-gatelookupdotdomain	Look up also .domain in the access map.  This allows to
12377c478bd9Sstevel@tonic-gate		match only subdomains.  It does not work well with
12387c478bd9Sstevel@tonic-gate		FEATURE(`relay_hosts_only'), because most lookups for
12397c478bd9Sstevel@tonic-gate		subdomains are suppressed by the latter feature.
12407c478bd9Sstevel@tonic-gate
12417c478bd9Sstevel@tonic-gateloose_relay_check
12427c478bd9Sstevel@tonic-gate		Normally, if % addressing is used for a recipient, e.g.
12437c478bd9Sstevel@tonic-gate		user%site@othersite, and othersite is in class {R}, the
12447c478bd9Sstevel@tonic-gate		check_rcpt ruleset will strip @othersite and recheck
12457c478bd9Sstevel@tonic-gate		user@site for relaying.  This feature changes that
12467c478bd9Sstevel@tonic-gate		behavior.  It should not be needed for most installations.
12477c478bd9Sstevel@tonic-gate
12487c478bd9Sstevel@tonic-gatepreserve_luser_host
12497c478bd9Sstevel@tonic-gate		Preserve the name of the recipient host if LUSER_RELAY is
12507c478bd9Sstevel@tonic-gate		used.  Without this option, the domain part of the
12517c478bd9Sstevel@tonic-gate		recipient address will be replaced by the host specified as
12527c478bd9Sstevel@tonic-gate		LUSER_RELAY.  This feature only works if the hostname is
12537c478bd9Sstevel@tonic-gate		passed to the mailer (see mailer triple in op.me).  Note
12547c478bd9Sstevel@tonic-gate		that in the default configuration the local mailer does not
12557c478bd9Sstevel@tonic-gate		receive the hostname, i.e., the mailer triple has an empty
12567c478bd9Sstevel@tonic-gate		hostname.
12577c478bd9Sstevel@tonic-gate
12587c478bd9Sstevel@tonic-gatepreserve_local_plus_detail
12597c478bd9Sstevel@tonic-gate		Preserve the +detail portion of the address when passing
12607c478bd9Sstevel@tonic-gate		address to local delivery agent.  Disables alias and
12617c478bd9Sstevel@tonic-gate		.forward +detail stripping (e.g., given user+detail, only
12627c478bd9Sstevel@tonic-gate		that address will be looked up in the alias file; user+* and
12637c478bd9Sstevel@tonic-gate		user will not be looked up).  Only use if the local
12647c478bd9Sstevel@tonic-gate		delivery agent in use supports +detail addressing.
12657c478bd9Sstevel@tonic-gate
12667c478bd9Sstevel@tonic-gatecompat_check	Enable ruleset check_compat to look up pairs of addresses
12677c478bd9Sstevel@tonic-gate		with the Compat: tag --	Compat:sender<@>recipient -- in the
12687c478bd9Sstevel@tonic-gate		access map.  Valid values for the RHS include
12697c478bd9Sstevel@tonic-gate			DISCARD	silently discard recipient
12707c478bd9Sstevel@tonic-gate			TEMP:	return a temporary error
12717c478bd9Sstevel@tonic-gate			ERROR:	return a permanent error
12727c478bd9Sstevel@tonic-gate		In the last two cases, a 4xy/5xy SMTP reply code should
12737c478bd9Sstevel@tonic-gate		follow the colon.
12747c478bd9Sstevel@tonic-gate
12757c478bd9Sstevel@tonic-gateno_default_msa	Don't generate the default MSA daemon, i.e.,
12767c478bd9Sstevel@tonic-gate		DAEMON_OPTIONS(`Port=587,Name=MSA,M=E')
12777c478bd9Sstevel@tonic-gate		To define a MSA daemon with other parameters, use this
12787c478bd9Sstevel@tonic-gate		FEATURE and introduce new settings via DAEMON_OPTIONS().
12797c478bd9Sstevel@tonic-gate
12807c478bd9Sstevel@tonic-gatemsp		Defines config file for Message Submission Program.
12817c478bd9Sstevel@tonic-gate		See cf/submit.mc for how
12827c478bd9Sstevel@tonic-gate		to use it.  An optional argument can be used to override
12837c478bd9Sstevel@tonic-gate		the default of `[localhost]' to use as host to send all
12847c478bd9Sstevel@tonic-gate		e-mails to.  Note that MX records will be used if the
12857c478bd9Sstevel@tonic-gate		specified hostname is not in square brackets (e.g.,
12867c478bd9Sstevel@tonic-gate		[hostname]).  If `MSA' is specified as second argument then
12877c478bd9Sstevel@tonic-gate		port 587 is used to contact the server.  Example:
12887c478bd9Sstevel@tonic-gate
12897c478bd9Sstevel@tonic-gate			FEATURE(`msp', `', `MSA')
12907c478bd9Sstevel@tonic-gate
12917c478bd9Sstevel@tonic-gate		Some more hints about possible changes can be found below
12927c478bd9Sstevel@tonic-gate		in the section MESSAGE SUBMISSION PROGRAM.
12937c478bd9Sstevel@tonic-gate
12947c478bd9Sstevel@tonic-gate		Note: Due to many problems, submit.mc uses
12957c478bd9Sstevel@tonic-gate
12967c478bd9Sstevel@tonic-gate			FEATURE(`msp', `[127.0.0.1]')
12977c478bd9Sstevel@tonic-gate
12987c478bd9Sstevel@tonic-gate		by default.  If you have a machine with IPv6 only,
12997c478bd9Sstevel@tonic-gate		change it to
13007c478bd9Sstevel@tonic-gate
13017c478bd9Sstevel@tonic-gate			FEATURE(`msp', `[IPv6:::1]')
13027c478bd9Sstevel@tonic-gate
13037c478bd9Sstevel@tonic-gate		If you want to continue using '[localhost]', (the behavior
13047c478bd9Sstevel@tonic-gate		up to 8.12.6), use
13057c478bd9Sstevel@tonic-gate
13067c478bd9Sstevel@tonic-gate			FEATURE(`msp')
13077c478bd9Sstevel@tonic-gate
13087c478bd9Sstevel@tonic-gatequeuegroup	A simple example how to select a queue group based
13097c478bd9Sstevel@tonic-gate		on the full e-mail address or the domain of the
13107c478bd9Sstevel@tonic-gate		recipient.  Selection is done via entries in the
13117c478bd9Sstevel@tonic-gate		access map using the tag QGRP:, for example:
13127c478bd9Sstevel@tonic-gate
13137c478bd9Sstevel@tonic-gate			QGRP:example.com	main
13147c478bd9Sstevel@tonic-gate			QGRP:friend@some.org	others
13157c478bd9Sstevel@tonic-gate			QGRP:my.domain		local
13167c478bd9Sstevel@tonic-gate
13177c478bd9Sstevel@tonic-gate		where "main", "others", and "local" are names of
13187c478bd9Sstevel@tonic-gate		queue groups.  If an argument is specified, it is used
13197c478bd9Sstevel@tonic-gate		as default queue group.
13207c478bd9Sstevel@tonic-gate
13217c478bd9Sstevel@tonic-gate		Note: please read the warning in doc/op/op.me about
13227c478bd9Sstevel@tonic-gate		queue groups and possible queue manipulations.
13237c478bd9Sstevel@tonic-gate
13247c478bd9Sstevel@tonic-gategreet_pause	Adds the greet_pause ruleset which enables open proxy
13257c478bd9Sstevel@tonic-gate		and SMTP slamming protection.  The feature can take an
13267c478bd9Sstevel@tonic-gate		argument specifying the milliseconds to wait:
13277c478bd9Sstevel@tonic-gate
13287c478bd9Sstevel@tonic-gate			FEATURE(`greet_pause', `5000')  dnl 5 seconds
13297c478bd9Sstevel@tonic-gate
13307c478bd9Sstevel@tonic-gate		If FEATURE(`access_db') is enabled, an access database
13317c478bd9Sstevel@tonic-gate		lookup with the GreetPause tag is done using client
13327c478bd9Sstevel@tonic-gate		hostname, domain, IP address, or subnet to determine the
13337c478bd9Sstevel@tonic-gate		pause time:
13347c478bd9Sstevel@tonic-gate
13357c478bd9Sstevel@tonic-gate			GreetPause:my.domain	0
13367c478bd9Sstevel@tonic-gate			GreetPause:example.com	5000
13377c478bd9Sstevel@tonic-gate			GreetPause:10.1.2	2000
13387c478bd9Sstevel@tonic-gate			GreetPause:127.0.0.1	0
13397c478bd9Sstevel@tonic-gate
13407c478bd9Sstevel@tonic-gate		When using FEATURE(`access_db'), the optional
13417c478bd9Sstevel@tonic-gate		FEATURE(`greet_pause') argument becomes the default if
13427c478bd9Sstevel@tonic-gate		nothing is found in the access database.  A ruleset called
13437c478bd9Sstevel@tonic-gate		Local_greet_pause can be used for local modifications, e.g.,
13447c478bd9Sstevel@tonic-gate
13457c478bd9Sstevel@tonic-gate			LOCAL_RULESETS
13467c478bd9Sstevel@tonic-gate			SLocal_greet_pause
13477c478bd9Sstevel@tonic-gate			R$*		$: $&{daemon_flags}
13487c478bd9Sstevel@tonic-gate			R$* a $*	$# 0
13497c478bd9Sstevel@tonic-gate
13507c478bd9Sstevel@tonic-gate+--------------------+
13517c478bd9Sstevel@tonic-gate| USING UUCP MAILERS |
13527c478bd9Sstevel@tonic-gate+--------------------+
13537c478bd9Sstevel@tonic-gate
13547c478bd9Sstevel@tonic-gateIt's hard to get UUCP mailers right because of the extremely ad hoc
13557c478bd9Sstevel@tonic-gatenature of UUCP addressing.  These config files are really designed
13567c478bd9Sstevel@tonic-gatefor domain-based addressing, even for UUCP sites.
13577c478bd9Sstevel@tonic-gate
13587c478bd9Sstevel@tonic-gateThere are four UUCP mailers available.  The choice of which one to
13597c478bd9Sstevel@tonic-gateuse is partly a matter of local preferences and what is running at
13607c478bd9Sstevel@tonic-gatethe other end of your UUCP connection.  Unlike good protocols that
13617c478bd9Sstevel@tonic-gatedefine what will go over the wire, UUCP uses the policy that you
13627c478bd9Sstevel@tonic-gateshould do what is right for the other end; if they change, you have
13637c478bd9Sstevel@tonic-gateto change.  This makes it hard to do the right thing, and discourages
13647c478bd9Sstevel@tonic-gatepeople from updating their software.  In general, if you can avoid
13657c478bd9Sstevel@tonic-gateUUCP, please do.
13667c478bd9Sstevel@tonic-gate
13677c478bd9Sstevel@tonic-gateThe major choice is whether to go for a domainized scheme or a
13687c478bd9Sstevel@tonic-gatenon-domainized scheme.  This depends entirely on what the other
13697c478bd9Sstevel@tonic-gateend will recognize.  If at all possible, you should encourage the
13707c478bd9Sstevel@tonic-gateother end to go to a domain-based system -- non-domainized addresses
13717c478bd9Sstevel@tonic-gatedon't work entirely properly.
13727c478bd9Sstevel@tonic-gate
13737c478bd9Sstevel@tonic-gateThe four mailers are:
13747c478bd9Sstevel@tonic-gate
13757c478bd9Sstevel@tonic-gate    uucp-old (obsolete name: "uucp")
13767c478bd9Sstevel@tonic-gate	This is the oldest, the worst (but the closest to UUCP) way of
13777c478bd9Sstevel@tonic-gate	sending messages across UUCP connections.  It does bangify
13787c478bd9Sstevel@tonic-gate	everything and prepends $U (your UUCP name) to the sender's
13797c478bd9Sstevel@tonic-gate	address (which can already be a bang path itself).  It can
13807c478bd9Sstevel@tonic-gate	only send to one address at a time, so it spends a lot of
13817c478bd9Sstevel@tonic-gate	time copying duplicates of messages.  Avoid this if at all
13827c478bd9Sstevel@tonic-gate	possible.
13837c478bd9Sstevel@tonic-gate
13847c478bd9Sstevel@tonic-gate    uucp-new (obsolete name: "suucp")
13857c478bd9Sstevel@tonic-gate	The same as above, except that it assumes that in one rmail
13867c478bd9Sstevel@tonic-gate	command you can specify several recipients.  It still has a
13877c478bd9Sstevel@tonic-gate	lot of other problems.
13887c478bd9Sstevel@tonic-gate
13897c478bd9Sstevel@tonic-gate    uucp-dom
13907c478bd9Sstevel@tonic-gate	This UUCP mailer keeps everything as domain addresses.
13917c478bd9Sstevel@tonic-gate	Basically, it uses the SMTP mailer rewriting rules.  This mailer
13927c478bd9Sstevel@tonic-gate	is only included if MAILER(`smtp') is specified before
13937c478bd9Sstevel@tonic-gate	MAILER(`uucp').
13947c478bd9Sstevel@tonic-gate
13957c478bd9Sstevel@tonic-gate	Unfortunately, a lot of UUCP mailer transport agents require
13967c478bd9Sstevel@tonic-gate	bangified addresses in the envelope, although you can use
13977c478bd9Sstevel@tonic-gate	domain-based addresses in the message header.  (The envelope
13987c478bd9Sstevel@tonic-gate	shows up as the From_ line on UNIX mail.)  So....
13997c478bd9Sstevel@tonic-gate
14007c478bd9Sstevel@tonic-gate    uucp-uudom
14017c478bd9Sstevel@tonic-gate	This is a cross between uucp-new (for the envelope addresses)
14027c478bd9Sstevel@tonic-gate	and uucp-dom (for the header addresses).  It bangifies the
14037c478bd9Sstevel@tonic-gate	envelope sender (From_ line in messages) without adding the
14047c478bd9Sstevel@tonic-gate	local hostname, unless there is no host name on the address
14057c478bd9Sstevel@tonic-gate	at all (e.g., "wolf") or the host component is a UUCP host name
14067c478bd9Sstevel@tonic-gate	instead of a domain name ("somehost!wolf" instead of
14077c478bd9Sstevel@tonic-gate	"some.dom.ain!wolf").  This is also included only if MAILER(`smtp')
14087c478bd9Sstevel@tonic-gate	is also specified earlier.
14097c478bd9Sstevel@tonic-gate
14107c478bd9Sstevel@tonic-gateExamples:
14117c478bd9Sstevel@tonic-gate
14127c478bd9Sstevel@tonic-gateOn host grasp.insa-lyon.fr (UUCP host name "grasp"), the following
14137c478bd9Sstevel@tonic-gatesummarizes the sender rewriting for various mailers.
14147c478bd9Sstevel@tonic-gate
14157c478bd9Sstevel@tonic-gateMailer		sender		rewriting in the envelope
14167c478bd9Sstevel@tonic-gate------		------		-------------------------
14177c478bd9Sstevel@tonic-gateuucp-{old,new}	wolf		grasp!wolf
14187c478bd9Sstevel@tonic-gateuucp-dom	wolf		wolf@grasp.insa-lyon.fr
14197c478bd9Sstevel@tonic-gateuucp-uudom	wolf		grasp.insa-lyon.fr!wolf
14207c478bd9Sstevel@tonic-gate
14217c478bd9Sstevel@tonic-gateuucp-{old,new}	wolf@fr.net	grasp!fr.net!wolf
14227c478bd9Sstevel@tonic-gateuucp-dom	wolf@fr.net	wolf@fr.net
14237c478bd9Sstevel@tonic-gateuucp-uudom	wolf@fr.net	fr.net!wolf
14247c478bd9Sstevel@tonic-gate
14257c478bd9Sstevel@tonic-gateuucp-{old,new}	somehost!wolf	grasp!somehost!wolf
14267c478bd9Sstevel@tonic-gateuucp-dom	somehost!wolf	somehost!wolf@grasp.insa-lyon.fr
14277c478bd9Sstevel@tonic-gateuucp-uudom	somehost!wolf	grasp.insa-lyon.fr!somehost!wolf
14287c478bd9Sstevel@tonic-gate
14297c478bd9Sstevel@tonic-gateIf you are using one of the domainized UUCP mailers, you really want
14307c478bd9Sstevel@tonic-gateto convert all UUCP addresses to domain format -- otherwise, it will
14317c478bd9Sstevel@tonic-gatedo it for you (and probably not the way you expected).  For example,
14327c478bd9Sstevel@tonic-gateif you have the address foo!bar!baz (and you are not sending to foo),
14337c478bd9Sstevel@tonic-gatethe heuristics will add the @uucp.relay.name or @local.host.name to
14347c478bd9Sstevel@tonic-gatethis address.  However, if you map foo to foo.host.name first, it
14357c478bd9Sstevel@tonic-gatewill not add the local hostname.  You can do this using the uucpdomain
14367c478bd9Sstevel@tonic-gatefeature.
14377c478bd9Sstevel@tonic-gate
14387c478bd9Sstevel@tonic-gate
14397c478bd9Sstevel@tonic-gate+-------------------+
14407c478bd9Sstevel@tonic-gate| TWEAKING RULESETS |
14417c478bd9Sstevel@tonic-gate+-------------------+
14427c478bd9Sstevel@tonic-gate
14437c478bd9Sstevel@tonic-gateFor more complex configurations, you can define special rules.
14447c478bd9Sstevel@tonic-gateThe macro LOCAL_RULE_3 introduces rules that are used in canonicalizing
14457c478bd9Sstevel@tonic-gatethe names.  Any modifications made here are reflected in the header.
14467c478bd9Sstevel@tonic-gate
14477c478bd9Sstevel@tonic-gateA common use is to convert old UUCP addresses to SMTP addresses using
14487c478bd9Sstevel@tonic-gatethe UUCPSMTP macro.  For example:
14497c478bd9Sstevel@tonic-gate
14507c478bd9Sstevel@tonic-gate	LOCAL_RULE_3
14517c478bd9Sstevel@tonic-gate	UUCPSMTP(`decvax',	`decvax.dec.com')
14527c478bd9Sstevel@tonic-gate	UUCPSMTP(`research',	`research.att.com')
14537c478bd9Sstevel@tonic-gate
14547c478bd9Sstevel@tonic-gatewill cause addresses of the form "decvax!user" and "research!user"
14557c478bd9Sstevel@tonic-gateto be converted to "user@decvax.dec.com" and "user@research.att.com"
14567c478bd9Sstevel@tonic-gaterespectively.
14577c478bd9Sstevel@tonic-gate
14587c478bd9Sstevel@tonic-gateThis could also be used to look up hosts in a database map:
14597c478bd9Sstevel@tonic-gate
14607c478bd9Sstevel@tonic-gate	LOCAL_RULE_3
14617c478bd9Sstevel@tonic-gate	R$* < @ $+ > $*		$: $1 < @ $(hostmap $2 $) > $3
14627c478bd9Sstevel@tonic-gate
14637c478bd9Sstevel@tonic-gateThis map would be defined in the LOCAL_CONFIG portion, as shown below.
14647c478bd9Sstevel@tonic-gate
14657c478bd9Sstevel@tonic-gateSimilarly, LOCAL_RULE_0 can be used to introduce new parsing rules.
14667c478bd9Sstevel@tonic-gateFor example, new rules are needed to parse hostnames that you accept
14677c478bd9Sstevel@tonic-gatevia MX records.  For example, you might have:
14687c478bd9Sstevel@tonic-gate
14697c478bd9Sstevel@tonic-gate	LOCAL_RULE_0
14707c478bd9Sstevel@tonic-gate	R$+ <@ host.dom.ain.>	$#uucp $@ cnmat $: $1 < @ host.dom.ain.>
14717c478bd9Sstevel@tonic-gate
14727c478bd9Sstevel@tonic-gateYou would use this if you had installed an MX record for cnmat.Berkeley.EDU
14737c478bd9Sstevel@tonic-gatepointing at this host; this rule catches the message and forwards it on
14747c478bd9Sstevel@tonic-gateusing UUCP.
14757c478bd9Sstevel@tonic-gate
14767c478bd9Sstevel@tonic-gateYou can also tweak rulesets 1 and 2 using LOCAL_RULE_1 and LOCAL_RULE_2.
14777c478bd9Sstevel@tonic-gateThese rulesets are normally empty.
14787c478bd9Sstevel@tonic-gate
14797c478bd9Sstevel@tonic-gateA similar macro is LOCAL_CONFIG.  This introduces lines added after the
14807c478bd9Sstevel@tonic-gateboilerplate option setting but before rulesets.  Do not declare rulesets in
14817c478bd9Sstevel@tonic-gatethe LOCAL_CONFIG section.  It can be used to declare local database maps or
14827c478bd9Sstevel@tonic-gatewhatever.  For example:
14837c478bd9Sstevel@tonic-gate
14847c478bd9Sstevel@tonic-gate	LOCAL_CONFIG
14857c478bd9Sstevel@tonic-gate	Khostmap hash /etc/mail/hostmap
14867c478bd9Sstevel@tonic-gate	Kyplocal nis -m hosts.byname
14877c478bd9Sstevel@tonic-gate
14887c478bd9Sstevel@tonic-gate
14897c478bd9Sstevel@tonic-gate+---------------------------+
14907c478bd9Sstevel@tonic-gate| MASQUERADING AND RELAYING |
14917c478bd9Sstevel@tonic-gate+---------------------------+
14927c478bd9Sstevel@tonic-gate
14937c478bd9Sstevel@tonic-gateYou can have your host masquerade as another using
14947c478bd9Sstevel@tonic-gate
14957c478bd9Sstevel@tonic-gate	MASQUERADE_AS(`host.domain')
14967c478bd9Sstevel@tonic-gate
14977c478bd9Sstevel@tonic-gateThis causes mail being sent to be labeled as coming from the
14987c478bd9Sstevel@tonic-gateindicated host.domain, rather than $j.  One normally masquerades as
14997c478bd9Sstevel@tonic-gateone of one's own subdomains (for example, it's unlikely that
15007c478bd9Sstevel@tonic-gateBerkeley would choose to masquerade as an MIT site).  This
15017c478bd9Sstevel@tonic-gatebehaviour is modified by a plethora of FEATUREs; in particular, see
15027c478bd9Sstevel@tonic-gatemasquerade_envelope, allmasquerade, limited_masquerade, and
15037c478bd9Sstevel@tonic-gatemasquerade_entire_domain.
15047c478bd9Sstevel@tonic-gate
15057c478bd9Sstevel@tonic-gateThe masquerade name is not normally canonified, so it is important
15067c478bd9Sstevel@tonic-gatethat it be your One True Name, that is, fully qualified and not a
15077c478bd9Sstevel@tonic-gateCNAME.  However, if you use a CNAME, the receiving side may canonify
15087c478bd9Sstevel@tonic-gateit for you, so don't think you can cheat CNAME mapping this way.
15097c478bd9Sstevel@tonic-gate
15107c478bd9Sstevel@tonic-gateNormally the only addresses that are masqueraded are those that come
15117c478bd9Sstevel@tonic-gatefrom this host (that is, are either unqualified or in class {w}, the list
15127c478bd9Sstevel@tonic-gateof local domain names).  You can augment this list, which is realized
15137c478bd9Sstevel@tonic-gateby class {M} using
15147c478bd9Sstevel@tonic-gate
15157c478bd9Sstevel@tonic-gate	MASQUERADE_DOMAIN(`otherhost.domain')
15167c478bd9Sstevel@tonic-gate
15177c478bd9Sstevel@tonic-gateThe effect of this is that although mail to user@otherhost.domain
15187c478bd9Sstevel@tonic-gatewill not be delivered locally, any mail including any user@otherhost.domain
15197c478bd9Sstevel@tonic-gatewill, when relayed, be rewritten to have the MASQUERADE_AS address.
15207c478bd9Sstevel@tonic-gateThis can be a space-separated list of names.
15217c478bd9Sstevel@tonic-gate
15227c478bd9Sstevel@tonic-gateIf these names are in a file, you can use
15237c478bd9Sstevel@tonic-gate
15247c478bd9Sstevel@tonic-gate	MASQUERADE_DOMAIN_FILE(`filename')
15257c478bd9Sstevel@tonic-gate
15267c478bd9Sstevel@tonic-gateto read the list of names from the indicated file (i.e., to add
15277c478bd9Sstevel@tonic-gateelements to class {M}).
15287c478bd9Sstevel@tonic-gate
15297c478bd9Sstevel@tonic-gateTo exempt hosts or subdomains from being masqueraded, you can use
15307c478bd9Sstevel@tonic-gate
15317c478bd9Sstevel@tonic-gate	MASQUERADE_EXCEPTION(`host.domain')
15327c478bd9Sstevel@tonic-gate
15337c478bd9Sstevel@tonic-gateThis can come handy if you want to masquerade a whole domain
15347c478bd9Sstevel@tonic-gateexcept for one (or a few) host(s).  If these names are in a file,
15357c478bd9Sstevel@tonic-gateyou can use
15367c478bd9Sstevel@tonic-gate
15377c478bd9Sstevel@tonic-gate	MASQUERADE_EXCEPTION_FILE(`filename')
15387c478bd9Sstevel@tonic-gate
15397c478bd9Sstevel@tonic-gateNormally only header addresses are masqueraded.  If you want to
15407c478bd9Sstevel@tonic-gatemasquerade the envelope as well, use
15417c478bd9Sstevel@tonic-gate
15427c478bd9Sstevel@tonic-gate	FEATURE(`masquerade_envelope')
15437c478bd9Sstevel@tonic-gate
15447c478bd9Sstevel@tonic-gateThere are always users that need to be "exposed" -- that is, their
15457c478bd9Sstevel@tonic-gateinternal site name should be displayed instead of the masquerade name.
15467c478bd9Sstevel@tonic-gateRoot is an example (which has been "exposed" by default prior to 8.10).
15477c478bd9Sstevel@tonic-gateYou can add users to this list using
15487c478bd9Sstevel@tonic-gate
15497c478bd9Sstevel@tonic-gate	EXPOSED_USER(`usernames')
15507c478bd9Sstevel@tonic-gate
15517c478bd9Sstevel@tonic-gateThis adds users to class {E}; you could also use
15527c478bd9Sstevel@tonic-gate
15537c478bd9Sstevel@tonic-gate	EXPOSED_USER_FILE(`filename')
15547c478bd9Sstevel@tonic-gate
15557c478bd9Sstevel@tonic-gateYou can also arrange to relay all unqualified names (that is, names
15567c478bd9Sstevel@tonic-gatewithout @host) to a relay host.  For example, if you have a central
15577c478bd9Sstevel@tonic-gateemail server, you might relay to that host so that users don't have
15587c478bd9Sstevel@tonic-gateto have .forward files or aliases.  You can do this using
15597c478bd9Sstevel@tonic-gate
15607c478bd9Sstevel@tonic-gate	define(`LOCAL_RELAY', `mailer:hostname')
15617c478bd9Sstevel@tonic-gate
15627c478bd9Sstevel@tonic-gateThe ``mailer:'' can be omitted, in which case the mailer defaults to
15637c478bd9Sstevel@tonic-gate"relay".  There are some user names that you don't want relayed, perhaps
15647c478bd9Sstevel@tonic-gatebecause of local aliases.  A common example is root, which may be
15657c478bd9Sstevel@tonic-gatelocally aliased.  You can add entries to this list using
15667c478bd9Sstevel@tonic-gate
15677c478bd9Sstevel@tonic-gate	LOCAL_USER(`usernames')
15687c478bd9Sstevel@tonic-gate
15697c478bd9Sstevel@tonic-gateThis adds users to class {L}; you could also use
15707c478bd9Sstevel@tonic-gate
15717c478bd9Sstevel@tonic-gate	LOCAL_USER_FILE(`filename')
15727c478bd9Sstevel@tonic-gate
15737c478bd9Sstevel@tonic-gateIf you want all incoming mail sent to a centralized hub, as for a
15747c478bd9Sstevel@tonic-gateshared /var/spool/mail scheme, use
15757c478bd9Sstevel@tonic-gate
15767c478bd9Sstevel@tonic-gate	define(`MAIL_HUB', `mailer:hostname')
15777c478bd9Sstevel@tonic-gate
15787c478bd9Sstevel@tonic-gateAgain, ``mailer:'' defaults to "relay".  If you define both LOCAL_RELAY
15797c478bd9Sstevel@tonic-gateand MAIL_HUB _AND_ you have FEATURE(`stickyhost'), unqualified names will
15807c478bd9Sstevel@tonic-gatebe sent to the LOCAL_RELAY and other local names will be sent to MAIL_HUB.
15817c478bd9Sstevel@tonic-gateNote: there is a (long standing) bug which keeps this combination from
15827c478bd9Sstevel@tonic-gateworking for addresses of the form user+detail.
15837c478bd9Sstevel@tonic-gateNames in class {L} will be delivered locally, so you MUST have aliases or
15847c478bd9Sstevel@tonic-gate.forward files for them.
15857c478bd9Sstevel@tonic-gate
15867c478bd9Sstevel@tonic-gateFor example, if you are on machine mastodon.CS.Berkeley.EDU and you have
15877c478bd9Sstevel@tonic-gateFEATURE(`stickyhost'), the following combinations of settings will have the
15887c478bd9Sstevel@tonic-gateindicated effects:
15897c478bd9Sstevel@tonic-gate
15907c478bd9Sstevel@tonic-gateemail sent to....	eric			  eric@mastodon.CS.Berkeley.EDU
15917c478bd9Sstevel@tonic-gate
15927c478bd9Sstevel@tonic-gateLOCAL_RELAY set to	mail.CS.Berkeley.EDU	  (delivered locally)
15937c478bd9Sstevel@tonic-gatemail.CS.Berkeley.EDU	  (no local aliasing)	    (aliasing done)
15947c478bd9Sstevel@tonic-gate
15957c478bd9Sstevel@tonic-gateMAIL_HUB set to		mammoth.CS.Berkeley.EDU	  mammoth.CS.Berkeley.EDU
15967c478bd9Sstevel@tonic-gatemammoth.CS.Berkeley.EDU	  (aliasing done)	    (aliasing done)
15977c478bd9Sstevel@tonic-gate
15987c478bd9Sstevel@tonic-gateBoth LOCAL_RELAY and	mail.CS.Berkeley.EDU	  mammoth.CS.Berkeley.EDU
15997c478bd9Sstevel@tonic-gateMAIL_HUB set as above	  (no local aliasing)	    (aliasing done)
16007c478bd9Sstevel@tonic-gate
16017c478bd9Sstevel@tonic-gateIf you do not have FEATURE(`stickyhost') set, then LOCAL_RELAY and
16027c478bd9Sstevel@tonic-gateMAIL_HUB act identically, with MAIL_HUB taking precedence.
16037c478bd9Sstevel@tonic-gate
16047c478bd9Sstevel@tonic-gateIf you want all outgoing mail to go to a central relay site, define
16057c478bd9Sstevel@tonic-gateSMART_HOST as well.  Briefly:
16067c478bd9Sstevel@tonic-gate
16077c478bd9Sstevel@tonic-gate	LOCAL_RELAY applies to unqualified names (e.g., "eric").
16087c478bd9Sstevel@tonic-gate	MAIL_HUB applies to names qualified with the name of the
16097c478bd9Sstevel@tonic-gate		local host (e.g., "eric@mastodon.CS.Berkeley.EDU").
16107c478bd9Sstevel@tonic-gate	SMART_HOST applies to names qualified with other hosts or
16117c478bd9Sstevel@tonic-gate		bracketed addresses (e.g., "eric@mastodon.CS.Berkeley.EDU"
16127c478bd9Sstevel@tonic-gate		or "eric@[127.0.0.1]").
16137c478bd9Sstevel@tonic-gate
16147c478bd9Sstevel@tonic-gateHowever, beware that other relays (e.g., UUCP_RELAY, BITNET_RELAY,
16157c478bd9Sstevel@tonic-gateDECNET_RELAY, and FAX_RELAY) take precedence over SMART_HOST, so if you
16167c478bd9Sstevel@tonic-gatereally want absolutely everything to go to a single central site you will
16177c478bd9Sstevel@tonic-gateneed to unset all the other relays -- or better yet, find or build a
16187c478bd9Sstevel@tonic-gateminimal config file that does this.
16197c478bd9Sstevel@tonic-gate
16207c478bd9Sstevel@tonic-gateFor duplicate suppression to work properly, the host name is best
16217c478bd9Sstevel@tonic-gatespecified with a terminal dot:
16227c478bd9Sstevel@tonic-gate
16237c478bd9Sstevel@tonic-gate	define(`MAIL_HUB', `host.domain.')
16247c478bd9Sstevel@tonic-gate	      note the trailing dot ---^
16257c478bd9Sstevel@tonic-gate
16267c478bd9Sstevel@tonic-gate
16277c478bd9Sstevel@tonic-gate+-------------------------------------------+
16287c478bd9Sstevel@tonic-gate| USING LDAP FOR ALIASES, MAPS, AND CLASSES |
16297c478bd9Sstevel@tonic-gate+-------------------------------------------+
16307c478bd9Sstevel@tonic-gate
16317c478bd9Sstevel@tonic-gateLDAP can be used for aliases, maps, and classes by either specifying your
16327c478bd9Sstevel@tonic-gateown LDAP map specification or using the built-in default LDAP map
16337c478bd9Sstevel@tonic-gatespecification.  The built-in default specifications all provide lookups
16347c478bd9Sstevel@tonic-gatewhich match against either the machine's fully qualified hostname (${j}) or
16357c478bd9Sstevel@tonic-gatea "cluster".  The cluster allows you to share LDAP entries among a large
16367c478bd9Sstevel@tonic-gatenumber of machines without having to enter each of the machine names into
16377c478bd9Sstevel@tonic-gateeach LDAP entry.  To set the LDAP cluster name to use for a particular
16387c478bd9Sstevel@tonic-gatemachine or set of machines, set the confLDAP_CLUSTER m4 variable to a
16397c478bd9Sstevel@tonic-gateunique name.  For example:
16407c478bd9Sstevel@tonic-gate
16417c478bd9Sstevel@tonic-gate	define(`confLDAP_CLUSTER', `Servers')
16427c478bd9Sstevel@tonic-gate
16437c478bd9Sstevel@tonic-gateHere, the word `Servers' will be the cluster name.  As an example, assume
16447c478bd9Sstevel@tonic-gatethat smtp.sendmail.org, etrn.sendmail.org, and mx.sendmail.org all belong
16457c478bd9Sstevel@tonic-gateto the Servers cluster.
16467c478bd9Sstevel@tonic-gate
16477c478bd9Sstevel@tonic-gateSome of the LDAP LDIF examples below show use of the Servers cluster.
16487c478bd9Sstevel@tonic-gateEvery entry must have either a sendmailMTAHost or sendmailMTACluster
16497c478bd9Sstevel@tonic-gateattribute or it will be ignored.  Be careful as mixing clusters and
16507c478bd9Sstevel@tonic-gateindividual host records can have surprising results (see the CAUTION
16517c478bd9Sstevel@tonic-gatesections below).
16527c478bd9Sstevel@tonic-gate
16537c478bd9Sstevel@tonic-gateSee the file cf/sendmail.schema for the actual LDAP schemas.  Note that
16547c478bd9Sstevel@tonic-gatethis schema (and therefore the lookups and examples below) is experimental
16557c478bd9Sstevel@tonic-gateat this point as it has had little public review.  Therefore, it may change
1656*49218d4fSjbeckin future versions.  Feedback via sendmail-YYYY@support.sendmail.org is
1657*49218d4fSjbeckencouraged (replace YYYY with the current year, e.g., 2005).
16587c478bd9Sstevel@tonic-gate
16597c478bd9Sstevel@tonic-gate-------
16607c478bd9Sstevel@tonic-gateAliases
16617c478bd9Sstevel@tonic-gate-------
16627c478bd9Sstevel@tonic-gate
16637c478bd9Sstevel@tonic-gateThe ALIAS_FILE (O AliasFile) option can be set to use LDAP for alias
16647c478bd9Sstevel@tonic-gatelookups.  To use the default schema, simply use:
16657c478bd9Sstevel@tonic-gate
16667c478bd9Sstevel@tonic-gate	define(`ALIAS_FILE', `ldap:')
16677c478bd9Sstevel@tonic-gate
16687c478bd9Sstevel@tonic-gateBy doing so, you will use the default schema which expands to a map
16697c478bd9Sstevel@tonic-gatedeclared as follows:
16707c478bd9Sstevel@tonic-gate
16717c478bd9Sstevel@tonic-gate	ldap -k (&(objectClass=sendmailMTAAliasObject)
16727c478bd9Sstevel@tonic-gate		  (sendmailMTAAliasGrouping=aliases)
16737c478bd9Sstevel@tonic-gate		  (|(sendmailMTACluster=${sendmailMTACluster})
16747c478bd9Sstevel@tonic-gate		    (sendmailMTAHost=$j))
16757c478bd9Sstevel@tonic-gate		  (sendmailMTAKey=%0))
16767c478bd9Sstevel@tonic-gate	     -v sendmailMTAAliasValue,sendmailMTAAliasSearch:FILTER:sendmailMTAAliasObject,sendmailMTAAliasURL:URL:sendmailMTAAliasObject
16777c478bd9Sstevel@tonic-gate
16787c478bd9Sstevel@tonic-gate
16797c478bd9Sstevel@tonic-gateNOTE: The macros shown above ${sendmailMTACluster} and $j are not actually
16807c478bd9Sstevel@tonic-gateused when the binary expands the `ldap:' token as the AliasFile option is
16817c478bd9Sstevel@tonic-gatenot actually macro-expanded when read from the sendmail.cf file.
16827c478bd9Sstevel@tonic-gate
16837c478bd9Sstevel@tonic-gateExample LDAP LDIF entries might be:
16847c478bd9Sstevel@tonic-gate
16857c478bd9Sstevel@tonic-gate	dn: sendmailMTAKey=sendmail-list, dc=sendmail, dc=org
16867c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
16877c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAlias
16887c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAliasObject
16897c478bd9Sstevel@tonic-gate	sendmailMTAAliasGrouping: aliases
16907c478bd9Sstevel@tonic-gate	sendmailMTAHost: etrn.sendmail.org
16917c478bd9Sstevel@tonic-gate	sendmailMTAKey: sendmail-list
16927c478bd9Sstevel@tonic-gate	sendmailMTAAliasValue: ca@example.org
16937c478bd9Sstevel@tonic-gate	sendmailMTAAliasValue: eric
16947c478bd9Sstevel@tonic-gate	sendmailMTAAliasValue: gshapiro@example.com
16957c478bd9Sstevel@tonic-gate
16967c478bd9Sstevel@tonic-gate	dn: sendmailMTAKey=owner-sendmail-list, dc=sendmail, dc=org
16977c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
16987c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAlias
16997c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAliasObject
17007c478bd9Sstevel@tonic-gate	sendmailMTAAliasGrouping: aliases
17017c478bd9Sstevel@tonic-gate	sendmailMTAHost: etrn.sendmail.org
17027c478bd9Sstevel@tonic-gate	sendmailMTAKey: owner-sendmail-list
17037c478bd9Sstevel@tonic-gate	sendmailMTAAliasValue: eric
17047c478bd9Sstevel@tonic-gate
17057c478bd9Sstevel@tonic-gate	dn: sendmailMTAKey=postmaster, dc=sendmail, dc=org
17067c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
17077c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAlias
17087c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAliasObject
17097c478bd9Sstevel@tonic-gate	sendmailMTAAliasGrouping: aliases
17107c478bd9Sstevel@tonic-gate	sendmailMTACluster: Servers
17117c478bd9Sstevel@tonic-gate	sendmailMTAKey: postmaster
17127c478bd9Sstevel@tonic-gate	sendmailMTAAliasValue: eric
17137c478bd9Sstevel@tonic-gate
17147c478bd9Sstevel@tonic-gateHere, the aliases sendmail-list and owner-sendmail-list will be available
17157c478bd9Sstevel@tonic-gateonly on etrn.sendmail.org but the postmaster alias will be available on
17167c478bd9Sstevel@tonic-gateevery machine in the Servers cluster (including etrn.sendmail.org).
17177c478bd9Sstevel@tonic-gate
17187c478bd9Sstevel@tonic-gateCAUTION: aliases are additive so that entries like these:
17197c478bd9Sstevel@tonic-gate
17207c478bd9Sstevel@tonic-gate	dn: sendmailMTAKey=bob, dc=sendmail, dc=org
17217c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
17227c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAlias
17237c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAliasObject
17247c478bd9Sstevel@tonic-gate	sendmailMTAAliasGrouping: aliases
17257c478bd9Sstevel@tonic-gate	sendmailMTACluster: Servers
17267c478bd9Sstevel@tonic-gate	sendmailMTAKey: bob
17277c478bd9Sstevel@tonic-gate	sendmailMTAAliasValue: eric
17287c478bd9Sstevel@tonic-gate
17297c478bd9Sstevel@tonic-gate	dn: sendmailMTAKey=bobetrn, dc=sendmail, dc=org
17307c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
17317c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAlias
17327c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAAliasObject
17337c478bd9Sstevel@tonic-gate	sendmailMTAAliasGrouping: aliases
17347c478bd9Sstevel@tonic-gate	sendmailMTAHost: etrn.sendmail.org
17357c478bd9Sstevel@tonic-gate	sendmailMTAKey: bob
17367c478bd9Sstevel@tonic-gate	sendmailMTAAliasValue: gshapiro
17377c478bd9Sstevel@tonic-gate
17387c478bd9Sstevel@tonic-gatewould mean that on all of the hosts in the cluster, mail to bob would go to
17397c478bd9Sstevel@tonic-gateeric EXCEPT on etrn.sendmail.org in which case it would go to BOTH eric and
17407c478bd9Sstevel@tonic-gategshapiro.
17417c478bd9Sstevel@tonic-gate
17427c478bd9Sstevel@tonic-gateIf you prefer not to use the default LDAP schema for your aliases, you can
17437c478bd9Sstevel@tonic-gatespecify the map parameters when setting ALIAS_FILE.  For example:
17447c478bd9Sstevel@tonic-gate
17457c478bd9Sstevel@tonic-gate	define(`ALIAS_FILE', `ldap:-k (&(objectClass=mailGroup)(mail=%0)) -v mgrpRFC822MailMember')
17467c478bd9Sstevel@tonic-gate
17477c478bd9Sstevel@tonic-gate----
17487c478bd9Sstevel@tonic-gateMaps
17497c478bd9Sstevel@tonic-gate----
17507c478bd9Sstevel@tonic-gate
17517c478bd9Sstevel@tonic-gateFEATURE()'s which take an optional map definition argument (e.g., access,
17527c478bd9Sstevel@tonic-gatemailertable, virtusertable, etc.) can instead take the special keyword
17537c478bd9Sstevel@tonic-gate`LDAP', e.g.:
17547c478bd9Sstevel@tonic-gate
17557c478bd9Sstevel@tonic-gate	FEATURE(`access_db', `LDAP')
17567c478bd9Sstevel@tonic-gate	FEATURE(`virtusertable', `LDAP')
17577c478bd9Sstevel@tonic-gate
17587c478bd9Sstevel@tonic-gateWhen this keyword is given, that map will use LDAP lookups consisting of
17597c478bd9Sstevel@tonic-gatethe objectClass sendmailMTAClassObject, the attribute sendmailMTAMapName
17607c478bd9Sstevel@tonic-gatewith the map name, a search attribute of sendmailMTAKey, and the value
17617c478bd9Sstevel@tonic-gateattribute sendmailMTAMapValue.
17627c478bd9Sstevel@tonic-gate
17637c478bd9Sstevel@tonic-gateThe values for sendmailMTAMapName are:
17647c478bd9Sstevel@tonic-gate
17657c478bd9Sstevel@tonic-gate	FEATURE()		sendmailMTAMapName
17667c478bd9Sstevel@tonic-gate	---------		------------------
17677c478bd9Sstevel@tonic-gate	access_db		access
17687c478bd9Sstevel@tonic-gate	authinfo		authinfo
17697c478bd9Sstevel@tonic-gate	bitdomain		bitdomain
17707c478bd9Sstevel@tonic-gate	domaintable		domain
17717c478bd9Sstevel@tonic-gate	genericstable		generics
17727c478bd9Sstevel@tonic-gate	mailertable		mailer
17737c478bd9Sstevel@tonic-gate	uucpdomain		uucpdomain
17747c478bd9Sstevel@tonic-gate	virtusertable		virtuser
17757c478bd9Sstevel@tonic-gate
17767c478bd9Sstevel@tonic-gateFor example, FEATURE(`mailertable', `LDAP') would use the map definition:
17777c478bd9Sstevel@tonic-gate
17787c478bd9Sstevel@tonic-gate	Kmailertable ldap -k (&(objectClass=sendmailMTAMapObject)
17797c478bd9Sstevel@tonic-gate			       (sendmailMTAMapName=mailer)
17807c478bd9Sstevel@tonic-gate			       (|(sendmailMTACluster=${sendmailMTACluster})
17817c478bd9Sstevel@tonic-gate				 (sendmailMTAHost=$j))
17827c478bd9Sstevel@tonic-gate			       (sendmailMTAKey=%0))
17837c478bd9Sstevel@tonic-gate			  -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject
17847c478bd9Sstevel@tonic-gate
17857c478bd9Sstevel@tonic-gateAn example LDAP LDIF entry using this map might be:
17867c478bd9Sstevel@tonic-gate
17877c478bd9Sstevel@tonic-gate	dn: sendmailMTAMapName=mailer, dc=sendmail, dc=org
17887c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
17897c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAMap
17907c478bd9Sstevel@tonic-gate	sendmailMTACluster: Servers
17917c478bd9Sstevel@tonic-gate	sendmailMTAMapName: mailer
17927c478bd9Sstevel@tonic-gate
17937c478bd9Sstevel@tonic-gate	dn: sendmailMTAKey=example.com, sendmailMTAMapName=mailer, dc=sendmail, dc=org
17947c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
17957c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAMap
17967c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAMapObject
17977c478bd9Sstevel@tonic-gate	sendmailMTAMapName: mailer
17987c478bd9Sstevel@tonic-gate	sendmailMTACluster: Servers
17997c478bd9Sstevel@tonic-gate	sendmailMTAKey: example.com
18007c478bd9Sstevel@tonic-gate	sendmailMTAMapValue: relay:[smtp.example.com]
18017c478bd9Sstevel@tonic-gate
18027c478bd9Sstevel@tonic-gateCAUTION: If your LDAP database contains the record above and *ALSO* a host
18037c478bd9Sstevel@tonic-gatespecific record such as:
18047c478bd9Sstevel@tonic-gate
18057c478bd9Sstevel@tonic-gate	dn: sendmailMTAKey=example.com@etrn, sendmailMTAMapName=mailer, dc=sendmail, dc=org
18067c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
18077c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAMap
18087c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAMapObject
18097c478bd9Sstevel@tonic-gate	sendmailMTAMapName: mailer
18107c478bd9Sstevel@tonic-gate	sendmailMTAHost: etrn.sendmail.org
18117c478bd9Sstevel@tonic-gate	sendmailMTAKey: example.com
18127c478bd9Sstevel@tonic-gate	sendmailMTAMapValue: relay:[mx.example.com]
18137c478bd9Sstevel@tonic-gate
18147c478bd9Sstevel@tonic-gatethen these entries will give unexpected results.  When the lookup is done
18157c478bd9Sstevel@tonic-gateon etrn.sendmail.org, the effect is that there is *NO* match at all as maps
18167c478bd9Sstevel@tonic-gaterequire a single match.  Since the host etrn.sendmail.org is also in the
18177c478bd9Sstevel@tonic-gateServers cluster, LDAP would return two answers for the example.com map key
18187c478bd9Sstevel@tonic-gatein which case sendmail would treat this as no match at all.
18197c478bd9Sstevel@tonic-gate
18207c478bd9Sstevel@tonic-gateIf you prefer not to use the default LDAP schema for your maps, you can
18217c478bd9Sstevel@tonic-gatespecify the map parameters when using the FEATURE().  For example:
18227c478bd9Sstevel@tonic-gate
18237c478bd9Sstevel@tonic-gate	FEATURE(`access_db', `ldap:-1 -k (&(objectClass=mapDatabase)(key=%0)) -v value')
18247c478bd9Sstevel@tonic-gate
18257c478bd9Sstevel@tonic-gate-------
18267c478bd9Sstevel@tonic-gateClasses
18277c478bd9Sstevel@tonic-gate-------
18287c478bd9Sstevel@tonic-gate
18297c478bd9Sstevel@tonic-gateNormally, classes can be filled via files or programs.  As of 8.12, they
18307c478bd9Sstevel@tonic-gatecan also be filled via map lookups using a new syntax:
18317c478bd9Sstevel@tonic-gate
18327c478bd9Sstevel@tonic-gate	F{ClassName}mapkey@mapclass:mapspec
18337c478bd9Sstevel@tonic-gate
18347c478bd9Sstevel@tonic-gatemapkey is optional and if not provided the map key will be empty.  This can
18357c478bd9Sstevel@tonic-gatebe used with LDAP to read classes from LDAP.  Note that the lookup is only
18367c478bd9Sstevel@tonic-gatedone when sendmail is initially started.  Use the special value `@LDAP' to
18377c478bd9Sstevel@tonic-gateuse the default LDAP schema.  For example:
18387c478bd9Sstevel@tonic-gate
18397c478bd9Sstevel@tonic-gate	RELAY_DOMAIN_FILE(`@LDAP')
18407c478bd9Sstevel@tonic-gate
18417c478bd9Sstevel@tonic-gatewould put all of the attribute sendmailMTAClassValue values of LDAP records
18427c478bd9Sstevel@tonic-gatewith objectClass sendmailMTAClass and an attribute sendmailMTAClassName of
18437c478bd9Sstevel@tonic-gate'R' into class $={R}.  In other words, it is equivalent to the LDAP map
18447c478bd9Sstevel@tonic-gatespecification:
18457c478bd9Sstevel@tonic-gate
18467c478bd9Sstevel@tonic-gate	F{R}@ldap:-k (&(objectClass=sendmailMTAClass)
18477c478bd9Sstevel@tonic-gate		       (sendmailMTAClassName=R)
18487c478bd9Sstevel@tonic-gate		       (|(sendmailMTACluster=${sendmailMTACluster})
18497c478bd9Sstevel@tonic-gate			 (sendmailMTAHost=$j)))
18507c478bd9Sstevel@tonic-gate		  -v sendmailMTAClassValue,sendmailMTAClassSearch:FILTER:sendmailMTAClass,sendmailMTAClassURL:URL:sendmailMTAClass
18517c478bd9Sstevel@tonic-gate
18527c478bd9Sstevel@tonic-gateNOTE: The macros shown above ${sendmailMTACluster} and $j are not actually
18537c478bd9Sstevel@tonic-gateused when the binary expands the `@LDAP' token as class declarations are
18547c478bd9Sstevel@tonic-gatenot actually macro-expanded when read from the sendmail.cf file.
18557c478bd9Sstevel@tonic-gate
18567c478bd9Sstevel@tonic-gateThis can be used with class related commands such as RELAY_DOMAIN_FILE(),
18577c478bd9Sstevel@tonic-gateMASQUERADE_DOMAIN_FILE(), etc:
18587c478bd9Sstevel@tonic-gate
18597c478bd9Sstevel@tonic-gate	Command				sendmailMTAClassName
18607c478bd9Sstevel@tonic-gate	-------				--------------------
18617c478bd9Sstevel@tonic-gate	CANONIFY_DOMAIN_FILE()		Canonify
18627c478bd9Sstevel@tonic-gate	EXPOSED_USER_FILE()		E
18637c478bd9Sstevel@tonic-gate	GENERICS_DOMAIN_FILE()		G
18647c478bd9Sstevel@tonic-gate	LDAPROUTE_DOMAIN_FILE()		LDAPRoute
18657c478bd9Sstevel@tonic-gate	LDAPROUTE_EQUIVALENT_FILE()	LDAPRouteEquiv
18667c478bd9Sstevel@tonic-gate	LOCAL_USER_FILE()		L
18677c478bd9Sstevel@tonic-gate	MASQUERADE_DOMAIN_FILE()	M
18687c478bd9Sstevel@tonic-gate	MASQUERADE_EXCEPTION_FILE()	N
18697c478bd9Sstevel@tonic-gate	RELAY_DOMAIN_FILE()		R
18707c478bd9Sstevel@tonic-gate	VIRTUSER_DOMAIN_FILE()		VirtHost
18717c478bd9Sstevel@tonic-gate
18727c478bd9Sstevel@tonic-gateYou can also add your own as any 'F'ile class of the form:
18737c478bd9Sstevel@tonic-gate
18747c478bd9Sstevel@tonic-gate	F{ClassName}@LDAP
18757c478bd9Sstevel@tonic-gate	  ^^^^^^^^^
18767c478bd9Sstevel@tonic-gatewill use "ClassName" for the sendmailMTAClassName.
18777c478bd9Sstevel@tonic-gate
18787c478bd9Sstevel@tonic-gateAn example LDAP LDIF entry would look like:
18797c478bd9Sstevel@tonic-gate
18807c478bd9Sstevel@tonic-gate	dn: sendmailMTAClassName=R, dc=sendmail, dc=org
18817c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
18827c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAClass
18837c478bd9Sstevel@tonic-gate	sendmailMTACluster: Servers
18847c478bd9Sstevel@tonic-gate	sendmailMTAClassName: R
18857c478bd9Sstevel@tonic-gate	sendmailMTAClassValue: sendmail.org
18867c478bd9Sstevel@tonic-gate	sendmailMTAClassValue: example.com
18877c478bd9Sstevel@tonic-gate	sendmailMTAClassValue: 10.56.23
18887c478bd9Sstevel@tonic-gate
18897c478bd9Sstevel@tonic-gateCAUTION: If your LDAP database contains the record above and *ALSO* a host
18907c478bd9Sstevel@tonic-gatespecific record such as:
18917c478bd9Sstevel@tonic-gate
18927c478bd9Sstevel@tonic-gate	dn: sendmailMTAClassName=R@etrn.sendmail.org, dc=sendmail, dc=org
18937c478bd9Sstevel@tonic-gate	objectClass: sendmailMTA
18947c478bd9Sstevel@tonic-gate	objectClass: sendmailMTAClass
18957c478bd9Sstevel@tonic-gate	sendmailMTAHost: etrn.sendmail.org
18967c478bd9Sstevel@tonic-gate	sendmailMTAClassName: R
18977c478bd9Sstevel@tonic-gate	sendmailMTAClassValue: example.com
18987c478bd9Sstevel@tonic-gate
18997c478bd9Sstevel@tonic-gatethe result will be similar to the aliases caution above.  When the lookup
19007c478bd9Sstevel@tonic-gateis done on etrn.sendmail.org, $={R} would contain all of the entries (from
19017c478bd9Sstevel@tonic-gateboth the cluster match and the host match).  In other words, the effective
19027c478bd9Sstevel@tonic-gateis additive.
19037c478bd9Sstevel@tonic-gate
19047c478bd9Sstevel@tonic-gateIf you prefer not to use the default LDAP schema for your classes, you can
19057c478bd9Sstevel@tonic-gatespecify the map parameters when using the class command.  For example:
19067c478bd9Sstevel@tonic-gate
19077c478bd9Sstevel@tonic-gate	VIRTUSER_DOMAIN_FILE(`@ldap:-k (&(objectClass=virtHosts)(host=*)) -v host')
19087c478bd9Sstevel@tonic-gate
19097c478bd9Sstevel@tonic-gateRemember, macros can not be used in a class declaration as the binary does
19107c478bd9Sstevel@tonic-gatenot expand them.
19117c478bd9Sstevel@tonic-gate
19127c478bd9Sstevel@tonic-gate
19137c478bd9Sstevel@tonic-gate+--------------+
19147c478bd9Sstevel@tonic-gate| LDAP ROUTING |
19157c478bd9Sstevel@tonic-gate+--------------+
19167c478bd9Sstevel@tonic-gate
19177c478bd9Sstevel@tonic-gateFEATURE(`ldap_routing') can be used to implement the IETF Internet Draft
19187c478bd9Sstevel@tonic-gateLDAP Schema for Intranet Mail Routing
19197c478bd9Sstevel@tonic-gate(draft-lachman-laser-ldap-mail-routing-01).  This feature enables
19207c478bd9Sstevel@tonic-gateLDAP-based rerouting of a particular address to either a different host
19217c478bd9Sstevel@tonic-gateor a different address.  The LDAP lookup is first attempted on the full
19227c478bd9Sstevel@tonic-gateaddress (e.g., user@example.com) and then on the domain portion
19237c478bd9Sstevel@tonic-gate(e.g., @example.com).  Be sure to setup your domain for LDAP routing using
19247c478bd9Sstevel@tonic-gateLDAPROUTE_DOMAIN(), e.g.:
19257c478bd9Sstevel@tonic-gate
19267c478bd9Sstevel@tonic-gate	LDAPROUTE_DOMAIN(`example.com')
19277c478bd9Sstevel@tonic-gate
19287c478bd9Sstevel@tonic-gateAdditionally, you can specify equivalent domains for LDAP routing using
19297c478bd9Sstevel@tonic-gateLDAPROUTE_EQUIVALENT() and LDAPROUTE_EQUIVALENT_FILE().  'Equivalent'
19307c478bd9Sstevel@tonic-gatehostnames are mapped to $M (the masqueraded hostname for the server) before
19317c478bd9Sstevel@tonic-gatethe LDAP query.  For example, if the mail is addressed to
19327c478bd9Sstevel@tonic-gateuser@host1.example.com, normally the LDAP lookup would only be done for
19337c478bd9Sstevel@tonic-gate'user@host1.example.com' and '@host1.example.com'.   However, if
19347c478bd9Sstevel@tonic-gateLDAPROUTE_EQUIVALENT(`host1.example.com') is used, the lookups would also be
19357c478bd9Sstevel@tonic-gatedone on 'user@example.com' and '@example.com' after attempting the
19367c478bd9Sstevel@tonic-gatehost1.example.com lookups.
19377c478bd9Sstevel@tonic-gate
19387c478bd9Sstevel@tonic-gateBy default, the feature will use the schemas as specified in the draft
19397c478bd9Sstevel@tonic-gateand will not reject addresses not found by the LDAP lookup.  However,
19407c478bd9Sstevel@tonic-gatethis behavior can be changed by giving additional arguments to the FEATURE()
19417c478bd9Sstevel@tonic-gatecommand:
19427c478bd9Sstevel@tonic-gate
19437c478bd9Sstevel@tonic-gate FEATURE(`ldap_routing', <mailHost>, <mailRoutingAddress>, <bounce>,
19447c478bd9Sstevel@tonic-gate		 <detail>, <nodomain>, <tempfail>)
19457c478bd9Sstevel@tonic-gate
19467c478bd9Sstevel@tonic-gatewhere <mailHost> is a map definition describing how to lookup an alternative
19477c478bd9Sstevel@tonic-gatemail host for a particular address; <mailRoutingAddress> is a map definition
19487c478bd9Sstevel@tonic-gatedescribing how to lookup an alternative address for a particular address;
19497c478bd9Sstevel@tonic-gatethe <bounce> argument, if present and not the word "passthru", dictates
19507c478bd9Sstevel@tonic-gatethat mail should be bounced if neither a mailHost nor mailRoutingAddress
19517c478bd9Sstevel@tonic-gateis found, if set to "sendertoo", the sender will be rejected if not
19527c478bd9Sstevel@tonic-gatefound in LDAP; and <detail> indicates what actions to take if the address
19537c478bd9Sstevel@tonic-gatecontains +detail information -- `strip' tries the lookup with the +detail
19547c478bd9Sstevel@tonic-gateand if no matches are found, strips the +detail and tries the lookup again;
19557c478bd9Sstevel@tonic-gate`preserve', does the same as `strip' but if a mailRoutingAddress match is
19567c478bd9Sstevel@tonic-gatefound, the +detail information is copied to the new address; the <nodomain>
19577c478bd9Sstevel@tonic-gateargument, if present, will prevent the @domain lookup if the full
19587c478bd9Sstevel@tonic-gateaddress is not found in LDAP; the <tempfail> argument, if set to
19597c478bd9Sstevel@tonic-gate"tempfail", instructs the rules to give an SMTP 4XX temporary
19607c478bd9Sstevel@tonic-gateerror if the LDAP server gives the MTA a temporary failure, or if set to
19617c478bd9Sstevel@tonic-gate"queue" (the default), the MTA will locally queue the mail.
19627c478bd9Sstevel@tonic-gate
19637c478bd9Sstevel@tonic-gateThe default <mailHost> map definition is:
19647c478bd9Sstevel@tonic-gate
19657c478bd9Sstevel@tonic-gate	ldap -1 -T<TMPF> -v mailHost -k (&(objectClass=inetLocalMailRecipient)
19667c478bd9Sstevel@tonic-gate				 (mailLocalAddress=%0))
19677c478bd9Sstevel@tonic-gate
19687c478bd9Sstevel@tonic-gateThe default <mailRoutingAddress> map definition is:
19697c478bd9Sstevel@tonic-gate
19707c478bd9Sstevel@tonic-gate	ldap -1 -T<TMPF> -v mailRoutingAddress
19717c478bd9Sstevel@tonic-gate			 -k (&(objectClass=inetLocalMailRecipient)
19727c478bd9Sstevel@tonic-gate			      (mailLocalAddress=%0))
19737c478bd9Sstevel@tonic-gate
19747c478bd9Sstevel@tonic-gateNote that neither includes the LDAP server hostname (-h server) or base DN
19757c478bd9Sstevel@tonic-gate(-b o=org,c=COUNTRY), both necessary for LDAP queries.  It is presumed that
19767c478bd9Sstevel@tonic-gateyour .mc file contains a setting for the confLDAP_DEFAULT_SPEC option with
19777c478bd9Sstevel@tonic-gatethese settings.  If this is not the case, the map definitions should be
19787c478bd9Sstevel@tonic-gatechanged as described above.  The "-T<TMPF>" is required in any user
19797c478bd9Sstevel@tonic-gatespecified map definition to catch temporary errors.
19807c478bd9Sstevel@tonic-gate
19817c478bd9Sstevel@tonic-gateThe following possibilities exist as a result of an LDAP lookup on an
19827c478bd9Sstevel@tonic-gateaddress:
19837c478bd9Sstevel@tonic-gate
19847c478bd9Sstevel@tonic-gate	mailHost is	mailRoutingAddress is	Results in
19857c478bd9Sstevel@tonic-gate	-----------	---------------------	----------
19867c478bd9Sstevel@tonic-gate	set to a	set			mail delivered to
19877c478bd9Sstevel@tonic-gate	"local" host				mailRoutingAddress
19887c478bd9Sstevel@tonic-gate
19897c478bd9Sstevel@tonic-gate	set to a	not set			delivered to
19907c478bd9Sstevel@tonic-gate	"local" host				original address
19917c478bd9Sstevel@tonic-gate
19927c478bd9Sstevel@tonic-gate	set to a	set			mailRoutingAddress
19937c478bd9Sstevel@tonic-gate	remote host				relayed to mailHost
19947c478bd9Sstevel@tonic-gate
19957c478bd9Sstevel@tonic-gate	set to a	not set			original address
19967c478bd9Sstevel@tonic-gate	remote host				relayed to mailHost
19977c478bd9Sstevel@tonic-gate
19987c478bd9Sstevel@tonic-gate	not set		set			mail delivered to
19997c478bd9Sstevel@tonic-gate						mailRoutingAddress
20007c478bd9Sstevel@tonic-gate
20017c478bd9Sstevel@tonic-gate	not set		not set			delivered to
20027c478bd9Sstevel@tonic-gate						original address *OR*
20037c478bd9Sstevel@tonic-gate						bounced as unknown user
20047c478bd9Sstevel@tonic-gate
20057c478bd9Sstevel@tonic-gateThe term "local" host above means the host specified is in class {w}.  If
20067c478bd9Sstevel@tonic-gatethe result would mean sending the mail to a different host, that host is
20077c478bd9Sstevel@tonic-gatelooked up in the mailertable before delivery.
20087c478bd9Sstevel@tonic-gate
20097c478bd9Sstevel@tonic-gateNote that the last case depends on whether the third argument is given
20107c478bd9Sstevel@tonic-gateto the FEATURE() command.  The default is to deliver the message to the
20117c478bd9Sstevel@tonic-gateoriginal address.
20127c478bd9Sstevel@tonic-gate
20137c478bd9Sstevel@tonic-gateThe LDAP entries should be set up with an objectClass of
20147c478bd9Sstevel@tonic-gateinetLocalMailRecipient and the address be listed in a mailLocalAddress
20157c478bd9Sstevel@tonic-gateattribute.  If present, there must be only one mailHost attribute and it
20167c478bd9Sstevel@tonic-gatemust contain a fully qualified host name as its value.  Similarly, if
20177c478bd9Sstevel@tonic-gatepresent, there must be only one mailRoutingAddress attribute and it must
20187c478bd9Sstevel@tonic-gatecontain an RFC 822 compliant address.  Some example LDAP records (in LDIF
20197c478bd9Sstevel@tonic-gateformat):
20207c478bd9Sstevel@tonic-gate
20217c478bd9Sstevel@tonic-gate	dn: uid=tom, o=example.com, c=US
20227c478bd9Sstevel@tonic-gate	objectClass: inetLocalMailRecipient
20237c478bd9Sstevel@tonic-gate	mailLocalAddress: tom@example.com
20247c478bd9Sstevel@tonic-gate	mailRoutingAddress: thomas@mailhost.example.com
20257c478bd9Sstevel@tonic-gate
20267c478bd9Sstevel@tonic-gateThis would deliver mail for tom@example.com to thomas@mailhost.example.com.
20277c478bd9Sstevel@tonic-gate
20287c478bd9Sstevel@tonic-gate	dn: uid=dick, o=example.com, c=US
20297c478bd9Sstevel@tonic-gate	objectClass: inetLocalMailRecipient
20307c478bd9Sstevel@tonic-gate	mailLocalAddress: dick@example.com
20317c478bd9Sstevel@tonic-gate	mailHost: eng.example.com
20327c478bd9Sstevel@tonic-gate
20337c478bd9Sstevel@tonic-gateThis would relay mail for dick@example.com to the same address but redirect
20347c478bd9Sstevel@tonic-gatethe mail to MX records listed for the host eng.example.com (unless the
20357c478bd9Sstevel@tonic-gatemailertable overrides).
20367c478bd9Sstevel@tonic-gate
20377c478bd9Sstevel@tonic-gate	dn: uid=harry, o=example.com, c=US
20387c478bd9Sstevel@tonic-gate	objectClass: inetLocalMailRecipient
20397c478bd9Sstevel@tonic-gate	mailLocalAddress: harry@example.com
20407c478bd9Sstevel@tonic-gate	mailHost: mktmail.example.com
20417c478bd9Sstevel@tonic-gate	mailRoutingAddress: harry@mkt.example.com
20427c478bd9Sstevel@tonic-gate
20437c478bd9Sstevel@tonic-gateThis would relay mail for harry@example.com to the MX records listed for
20447c478bd9Sstevel@tonic-gatethe host mktmail.example.com using the new address harry@mkt.example.com
20457c478bd9Sstevel@tonic-gatewhen talking to that host.
20467c478bd9Sstevel@tonic-gate
20477c478bd9Sstevel@tonic-gate	dn: uid=virtual.example.com, o=example.com, c=US
20487c478bd9Sstevel@tonic-gate	objectClass: inetLocalMailRecipient
20497c478bd9Sstevel@tonic-gate	mailLocalAddress: @virtual.example.com
20507c478bd9Sstevel@tonic-gate	mailHost: server.example.com
20517c478bd9Sstevel@tonic-gate	mailRoutingAddress: virtual@example.com
20527c478bd9Sstevel@tonic-gate
20537c478bd9Sstevel@tonic-gateThis would send all mail destined for any username @virtual.example.com to
20547c478bd9Sstevel@tonic-gatethe machine server.example.com's MX servers and deliver to the address
20557c478bd9Sstevel@tonic-gatevirtual@example.com on that relay machine.
20567c478bd9Sstevel@tonic-gate
20577c478bd9Sstevel@tonic-gate
20587c478bd9Sstevel@tonic-gate+---------------------------------+
20597c478bd9Sstevel@tonic-gate| ANTI-SPAM CONFIGURATION CONTROL |
20607c478bd9Sstevel@tonic-gate+---------------------------------+
20617c478bd9Sstevel@tonic-gate
20627c478bd9Sstevel@tonic-gateThe primary anti-spam features available in sendmail are:
20637c478bd9Sstevel@tonic-gate
20647c478bd9Sstevel@tonic-gate* Relaying is denied by default.
20657c478bd9Sstevel@tonic-gate* Better checking on sender information.
20667c478bd9Sstevel@tonic-gate* Access database.
20677c478bd9Sstevel@tonic-gate* Header checks.
20687c478bd9Sstevel@tonic-gate
20697c478bd9Sstevel@tonic-gateRelaying (transmission of messages from a site outside your host (class
20707c478bd9Sstevel@tonic-gate{w}) to another site except yours) is denied by default.  Note that this
20717c478bd9Sstevel@tonic-gatechanged in sendmail 8.9; previous versions allowed relaying by default.
20727c478bd9Sstevel@tonic-gateIf you really want to revert to the old behaviour, you will need to use
20737c478bd9Sstevel@tonic-gateFEATURE(`promiscuous_relay').  You can allow certain domains to relay
20747c478bd9Sstevel@tonic-gatethrough your server by adding their domain name or IP address to class
20757c478bd9Sstevel@tonic-gate{R} using RELAY_DOMAIN() and RELAY_DOMAIN_FILE() or via the access database
20767c478bd9Sstevel@tonic-gate(described below).  Note that IPv6 addresses must be prefaced with "IPv6:".
20777c478bd9Sstevel@tonic-gateThe file consists (like any other file based class) of entries listed on
20787c478bd9Sstevel@tonic-gateseparate lines, e.g.,
20797c478bd9Sstevel@tonic-gate
20807c478bd9Sstevel@tonic-gate	sendmail.org
20817c478bd9Sstevel@tonic-gate	128.32
20827c478bd9Sstevel@tonic-gate	IPv6:2002:c0a8:02c7
20837c478bd9Sstevel@tonic-gate	IPv6:2002:c0a8:51d2::23f4
20847c478bd9Sstevel@tonic-gate	host.mydomain.com
20857c478bd9Sstevel@tonic-gate	[UNIX:localhost]
20867c478bd9Sstevel@tonic-gate
20877c478bd9Sstevel@tonic-gateNotice: the last entry allows relaying for connections via a UNIX
20887c478bd9Sstevel@tonic-gatesocket to the MTA/MSP.  This might be necessary if your configuration
20897c478bd9Sstevel@tonic-gatedoesn't allow relaying by other means in that case, e.g., by having
20907c478bd9Sstevel@tonic-gatelocalhost.$m in class {R} (make sure $m is not just a top level
20917c478bd9Sstevel@tonic-gatedomain).
20927c478bd9Sstevel@tonic-gate
20937c478bd9Sstevel@tonic-gateIf you use
20947c478bd9Sstevel@tonic-gate
20957c478bd9Sstevel@tonic-gate	FEATURE(`relay_entire_domain')
20967c478bd9Sstevel@tonic-gate
20977c478bd9Sstevel@tonic-gatethen any host in any of your local domains (that is, class {m})
20987c478bd9Sstevel@tonic-gatewill be relayed (that is, you will accept mail either to or from any
20997c478bd9Sstevel@tonic-gatehost in your domain).
21007c478bd9Sstevel@tonic-gate
21017c478bd9Sstevel@tonic-gateYou can also allow relaying based on the MX records of the host
21027c478bd9Sstevel@tonic-gateportion of an incoming recipient address by using
21037c478bd9Sstevel@tonic-gate
21047c478bd9Sstevel@tonic-gate	FEATURE(`relay_based_on_MX')
21057c478bd9Sstevel@tonic-gate
21067c478bd9Sstevel@tonic-gateFor example, if your server receives a recipient of user@domain.com
21077c478bd9Sstevel@tonic-gateand domain.com lists your server in its MX records, the mail will be
21087c478bd9Sstevel@tonic-gateaccepted for relay to domain.com.  This feature may cause problems
21097c478bd9Sstevel@tonic-gateif MX lookups for the recipient domain are slow or time out.  In that
21107c478bd9Sstevel@tonic-gatecase, mail will be temporarily rejected.  It is usually better to
21117c478bd9Sstevel@tonic-gatemaintain a list of hosts/domains for which the server acts as relay.
21127c478bd9Sstevel@tonic-gateNote also that this feature will stop spammers from using your host
21137c478bd9Sstevel@tonic-gateto relay spam but it will not stop outsiders from using your server
21147c478bd9Sstevel@tonic-gateas a relay for their site (that is, they set up an MX record pointing
21157c478bd9Sstevel@tonic-gateto your mail server, and you will relay mail addressed to them
21167c478bd9Sstevel@tonic-gatewithout any prior arrangement).  Along the same lines,
21177c478bd9Sstevel@tonic-gate
21187c478bd9Sstevel@tonic-gate	FEATURE(`relay_local_from')
21197c478bd9Sstevel@tonic-gate
21207c478bd9Sstevel@tonic-gatewill allow relaying if the sender specifies a return path (i.e.
21217c478bd9Sstevel@tonic-gateMAIL FROM:<user@domain>) domain which is a local domain.  This is a
21227c478bd9Sstevel@tonic-gatedangerous feature as it will allow spammers to spam using your mail
21237c478bd9Sstevel@tonic-gateserver by simply specifying a return address of user@your.domain.com.
21247c478bd9Sstevel@tonic-gateIt should not be used unless absolutely necessary.
21257c478bd9Sstevel@tonic-gateA slightly better solution is
21267c478bd9Sstevel@tonic-gate
21277c478bd9Sstevel@tonic-gate	FEATURE(`relay_mail_from')
21287c478bd9Sstevel@tonic-gate
21297c478bd9Sstevel@tonic-gatewhich allows relaying if the mail sender is listed as RELAY in the
21307c478bd9Sstevel@tonic-gateaccess map.  If an optional argument `domain' (this is the literal
21317c478bd9Sstevel@tonic-gateword `domain', not a placeholder) is given, the domain portion of
21327c478bd9Sstevel@tonic-gatethe mail sender is also checked to allowing relaying.  This option
21337c478bd9Sstevel@tonic-gateonly works together with the tag From: for the LHS of the access
21347c478bd9Sstevel@tonic-gatemap entries.  This feature allows spammers to abuse your mail server
21357c478bd9Sstevel@tonic-gateby specifying a return address that you enabled in your access file.
21367c478bd9Sstevel@tonic-gateThis may be harder to figure out for spammers, but it should not
21377c478bd9Sstevel@tonic-gatebe used unless necessary.  Instead use STARTTLS to
21387c478bd9Sstevel@tonic-gateallow relaying for roaming users.
21397c478bd9Sstevel@tonic-gate
21407c478bd9Sstevel@tonic-gate
21417c478bd9Sstevel@tonic-gateIf source routing is used in the recipient address (e.g.,
21427c478bd9Sstevel@tonic-gateRCPT TO:<user%site.com@othersite.com>), sendmail will check
21437c478bd9Sstevel@tonic-gateuser@site.com for relaying if othersite.com is an allowed relay host
21447c478bd9Sstevel@tonic-gatein either class {R}, class {m} if FEATURE(`relay_entire_domain') is used,
21457c478bd9Sstevel@tonic-gateor the access database if FEATURE(`access_db') is used.  To prevent
21467c478bd9Sstevel@tonic-gatethe address from being stripped down, use:
21477c478bd9Sstevel@tonic-gate
21487c478bd9Sstevel@tonic-gate	FEATURE(`loose_relay_check')
21497c478bd9Sstevel@tonic-gate
21507c478bd9Sstevel@tonic-gateIf you think you need to use this feature, you probably do not.  This
21517c478bd9Sstevel@tonic-gateshould only be used for sites which have no control over the addresses
21527c478bd9Sstevel@tonic-gatethat they provide a gateway for.  Use this FEATURE with caution as it
21537c478bd9Sstevel@tonic-gatecan allow spammers to relay through your server if not setup properly.
21547c478bd9Sstevel@tonic-gate
21557c478bd9Sstevel@tonic-gateNOTICE: It is possible to relay mail through a system which the anti-relay
21567c478bd9Sstevel@tonic-gaterules do not prevent: the case of a system that does use FEATURE(`nouucp',
21577c478bd9Sstevel@tonic-gate`nospecial') (system A) and relays local messages to a mail hub (e.g., via
21587c478bd9Sstevel@tonic-gateLOCAL_RELAY or LUSER_RELAY) (system B).  If system B doesn't use
21597c478bd9Sstevel@tonic-gateFEATURE(`nouucp') at all, addresses of the form
21607c478bd9Sstevel@tonic-gate<example.net!user@local.host> would be relayed to <user@example.net>.
21617c478bd9Sstevel@tonic-gateSystem A doesn't recognize `!' as an address separator and therefore
21627c478bd9Sstevel@tonic-gateforwards it to the mail hub which in turns relays it because it came from
21637c478bd9Sstevel@tonic-gatea trusted local host.  So if a mailserver allows UUCP (bang-format)
21647c478bd9Sstevel@tonic-gateaddresses, all systems from which it allows relaying should do the same
21657c478bd9Sstevel@tonic-gateor reject those addresses.
21667c478bd9Sstevel@tonic-gate
21677c478bd9Sstevel@tonic-gateAs of 8.9, sendmail will refuse mail if the MAIL FROM: parameter has
21687c478bd9Sstevel@tonic-gatean unresolvable domain (i.e., one that DNS, your local name service,
21697c478bd9Sstevel@tonic-gateor special case rules in ruleset 3 cannot locate).  This also applies
21707c478bd9Sstevel@tonic-gateto addresses that use domain literals, e.g., <user@[1.2.3.4]>, if the
21717c478bd9Sstevel@tonic-gateIP address can't be mapped to a host name.  If you want to continue
21727c478bd9Sstevel@tonic-gateto accept such domains, e.g., because you are inside a firewall that
21737c478bd9Sstevel@tonic-gatehas only a limited view of the Internet host name space (note that you
21747c478bd9Sstevel@tonic-gatewill not be able to return mail to them unless you have some "smart
21757c478bd9Sstevel@tonic-gatehost" forwarder), use
21767c478bd9Sstevel@tonic-gate
21777c478bd9Sstevel@tonic-gate	FEATURE(`accept_unresolvable_domains')
21787c478bd9Sstevel@tonic-gate
21797c478bd9Sstevel@tonic-gateAlternatively, you can allow specific addresses by adding them to
21807c478bd9Sstevel@tonic-gatethe access map, e.g.,
21817c478bd9Sstevel@tonic-gate
21827c478bd9Sstevel@tonic-gate	From:unresolvable.domain	OK
21837c478bd9Sstevel@tonic-gate	From:[1.2.3.4]			OK
21847c478bd9Sstevel@tonic-gate	From:[1.2.4]			OK
21857c478bd9Sstevel@tonic-gate
21867c478bd9Sstevel@tonic-gateNotice: domains which are temporarily unresolvable are (temporarily)
21877c478bd9Sstevel@tonic-gaterejected with a 451 reply code.  If those domains should be accepted
21887c478bd9Sstevel@tonic-gate(which is discouraged) then you can use
21897c478bd9Sstevel@tonic-gate
21907c478bd9Sstevel@tonic-gate	LOCAL_CONFIG
21917c478bd9Sstevel@tonic-gate	C{ResOk}TEMP
21927c478bd9Sstevel@tonic-gate
21937c478bd9Sstevel@tonic-gatesendmail will also refuse mail if the MAIL FROM: parameter is not
21947c478bd9Sstevel@tonic-gatefully qualified (i.e., contains a domain as well as a user).  If you
21957c478bd9Sstevel@tonic-gatewant to continue to accept such senders, use
21967c478bd9Sstevel@tonic-gate
21977c478bd9Sstevel@tonic-gate	FEATURE(`accept_unqualified_senders')
21987c478bd9Sstevel@tonic-gate
21997c478bd9Sstevel@tonic-gateSetting the DaemonPortOptions modifier 'u' overrides the default behavior,
22007c478bd9Sstevel@tonic-gatei.e., unqualified addresses are accepted even without this FEATURE.  If
22017c478bd9Sstevel@tonic-gatethis FEATURE is not used, the DaemonPortOptions modifier 'f' can be used
22027c478bd9Sstevel@tonic-gateto enforce fully qualified domain names.
22037c478bd9Sstevel@tonic-gate
22047c478bd9Sstevel@tonic-gateAn ``access'' database can be created to accept or reject mail from
22057c478bd9Sstevel@tonic-gateselected domains.  For example, you may choose to reject all mail
22067c478bd9Sstevel@tonic-gateoriginating from known spammers.  To enable such a database, use
22077c478bd9Sstevel@tonic-gate
22087c478bd9Sstevel@tonic-gate	FEATURE(`access_db')
22097c478bd9Sstevel@tonic-gate
22107c478bd9Sstevel@tonic-gateNotice: the access database is applied to the envelope addresses
22117c478bd9Sstevel@tonic-gateand the connection information, not to the header.
22127c478bd9Sstevel@tonic-gate
22137c478bd9Sstevel@tonic-gateThe FEATURE macro can accept as second parameter the key file
22147c478bd9Sstevel@tonic-gatedefinition for the database; for example
22157c478bd9Sstevel@tonic-gate
22167c478bd9Sstevel@tonic-gate	FEATURE(`access_db', `hash -T<TMPF> /etc/mail/access_map')
22177c478bd9Sstevel@tonic-gate
22187c478bd9Sstevel@tonic-gateNotice: If a second argument is specified it must contain the option
22197c478bd9Sstevel@tonic-gate`-T<TMPF>' as shown above.  The optional third and fourth parameters
22207c478bd9Sstevel@tonic-gatemay be `skip' or `lookupdotdomain'.  The former enables SKIP as
22217c478bd9Sstevel@tonic-gatevalue part (see below), the latter is another way to enable the
22227c478bd9Sstevel@tonic-gatefeature of the same name (see above).
22237c478bd9Sstevel@tonic-gate
22247c478bd9Sstevel@tonic-gateRemember, since /etc/mail/access is a database, after creating the text
22257c478bd9Sstevel@tonic-gatefile as described below, you must use makemap to create the database
22267c478bd9Sstevel@tonic-gatemap.  For example:
22277c478bd9Sstevel@tonic-gate
22287c478bd9Sstevel@tonic-gate	makemap hash /etc/mail/access < /etc/mail/access
22297c478bd9Sstevel@tonic-gate
22307c478bd9Sstevel@tonic-gateThe table itself uses e-mail addresses, domain names, and network
22317c478bd9Sstevel@tonic-gatenumbers as keys.  Note that IPv6 addresses must be prefaced with "IPv6:".
22327c478bd9Sstevel@tonic-gateFor example,
22337c478bd9Sstevel@tonic-gate
22347c478bd9Sstevel@tonic-gate	From:spammer@aol.com			REJECT
22357c478bd9Sstevel@tonic-gate	From:cyberspammer.com			REJECT
22367c478bd9Sstevel@tonic-gate	Connect:cyberspammer.com		REJECT
22377c478bd9Sstevel@tonic-gate	Connect:TLD				REJECT
22387c478bd9Sstevel@tonic-gate	Connect:192.168.212			REJECT
22397c478bd9Sstevel@tonic-gate	Connect:IPv6:2002:c0a8:02c7		RELAY
22407c478bd9Sstevel@tonic-gate	Connect:IPv6:2002:c0a8:51d2::23f4	REJECT
22417c478bd9Sstevel@tonic-gate
22427c478bd9Sstevel@tonic-gatewould refuse mail from spammer@aol.com, any user from cyberspammer.com
22437c478bd9Sstevel@tonic-gate(or any host within the cyberspammer.com domain), any host in the entire
22447c478bd9Sstevel@tonic-gatetop level domain TLD, 192.168.212.* network, and the IPv6 address
22457c478bd9Sstevel@tonic-gate2002:c0a8:51d2::23f4.  It would allow relay for the IPv6 network
22467c478bd9Sstevel@tonic-gate2002:c0a8:02c7::/48.
22477c478bd9Sstevel@tonic-gate
22487c478bd9Sstevel@tonic-gateEntries in the access map should be tagged according to their type.
22497c478bd9Sstevel@tonic-gateThree tags are available:
22507c478bd9Sstevel@tonic-gate
22517c478bd9Sstevel@tonic-gate	Connect:	connection information (${client_addr}, ${client_name})
22527c478bd9Sstevel@tonic-gate	From:		envelope sender
22537c478bd9Sstevel@tonic-gate	To:		envelope recipient
22547c478bd9Sstevel@tonic-gate
22557c478bd9Sstevel@tonic-gateNotice: untagged entries are deprecated.
22567c478bd9Sstevel@tonic-gate
22577c478bd9Sstevel@tonic-gateIf the required item is looked up in a map, it will be tried first
22587c478bd9Sstevel@tonic-gatewith the corresponding tag in front, then (as fallback to enable
22597c478bd9Sstevel@tonic-gatebackward compatibility) without any tag, unless the specific feature
22607c478bd9Sstevel@tonic-gaterequires a tag.  For example,
22617c478bd9Sstevel@tonic-gate
22627c478bd9Sstevel@tonic-gate	From:spammer@some.dom	REJECT
22637c478bd9Sstevel@tonic-gate	To:friend.domain	RELAY
22647c478bd9Sstevel@tonic-gate	Connect:friend.domain	OK
22657c478bd9Sstevel@tonic-gate	Connect:from.domain	RELAY
22667c478bd9Sstevel@tonic-gate	From:good@another.dom	OK
22677c478bd9Sstevel@tonic-gate	From:another.dom	REJECT
22687c478bd9Sstevel@tonic-gate
22697c478bd9Sstevel@tonic-gateThis would deny mails from spammer@some.dom but you could still
22707c478bd9Sstevel@tonic-gatesend mail to that address even if FEATURE(`blacklist_recipients')
22717c478bd9Sstevel@tonic-gateis enabled.  Your system will allow relaying to friend.domain, but
22727c478bd9Sstevel@tonic-gatenot from it (unless enabled by other means).  Connections from that
22737c478bd9Sstevel@tonic-gatedomain will be allowed even if it ends up in one of the DNS based
22747c478bd9Sstevel@tonic-gaterejection lists.  Relaying is enabled from from.domain but not to
22757c478bd9Sstevel@tonic-gateit (since relaying is based on the connection information for
22767c478bd9Sstevel@tonic-gateoutgoing relaying, the tag Connect: must be used; for incoming
22777c478bd9Sstevel@tonic-gaterelaying, which is based on the recipient address, To: must be
22787c478bd9Sstevel@tonic-gateused).  The last two entries allow mails from good@another.dom but
22797c478bd9Sstevel@tonic-gatereject mail from all other addresses with another.dom as domain
22807c478bd9Sstevel@tonic-gatepart.
22817c478bd9Sstevel@tonic-gate
22827c478bd9Sstevel@tonic-gate
22837c478bd9Sstevel@tonic-gateThe value part of the map can contain:
22847c478bd9Sstevel@tonic-gate
22857c478bd9Sstevel@tonic-gate	OK		Accept mail even if other rules in the running
22867c478bd9Sstevel@tonic-gate			ruleset would reject it, for example, if the domain
22877c478bd9Sstevel@tonic-gate			name is unresolvable.  "Accept" does not mean
22887c478bd9Sstevel@tonic-gate			"relay", but at most acceptance for local
22897c478bd9Sstevel@tonic-gate			recipients.  That is, OK allows less than RELAY.
22907c478bd9Sstevel@tonic-gate	RELAY		Accept mail addressed to the indicated domain or
22917c478bd9Sstevel@tonic-gate			received from the indicated domain for relaying
22927c478bd9Sstevel@tonic-gate			through your SMTP server.  RELAY also serves as
22937c478bd9Sstevel@tonic-gate			an implicit OK for the other checks.
22947c478bd9Sstevel@tonic-gate	REJECT		Reject the sender or recipient with a general
22957c478bd9Sstevel@tonic-gate			purpose message.
22967c478bd9Sstevel@tonic-gate	DISCARD		Discard the message completely using the
22977c478bd9Sstevel@tonic-gate			$#discard mailer.  If it is used in check_compat,
22987c478bd9Sstevel@tonic-gate			it affects only the designated recipient, not
22997c478bd9Sstevel@tonic-gate			the whole message as it does in all other cases.
23007c478bd9Sstevel@tonic-gate			This should only be used if really necessary.
23017c478bd9Sstevel@tonic-gate	SKIP		This can only be used for host/domain names
23027c478bd9Sstevel@tonic-gate			and IP addresses/nets.  It will abort the current
23037c478bd9Sstevel@tonic-gate			search for this entry without accepting or rejecting
23047c478bd9Sstevel@tonic-gate			it but causing the default action.
23057c478bd9Sstevel@tonic-gate	### any text	where ### is an RFC 821 compliant error code and
23067c478bd9Sstevel@tonic-gate			"any text" is a message to return for the command.
23077c478bd9Sstevel@tonic-gate			The string should be quoted to avoid surprises,
23087c478bd9Sstevel@tonic-gate			e.g., sendmail may remove spaces otherwise.
23097c478bd9Sstevel@tonic-gate			This type is deprecated, use one of the two
23107c478bd9Sstevel@tonic-gate			ERROR:  entries below instead.
23117c478bd9Sstevel@tonic-gate	ERROR:### any text
23127c478bd9Sstevel@tonic-gate			as above, but useful to mark error messages as such.
23137c478bd9Sstevel@tonic-gate	ERROR:D.S.N:### any text
23147c478bd9Sstevel@tonic-gate			where D.S.N is an RFC 1893 compliant error code
23157c478bd9Sstevel@tonic-gate			and the rest as above.
23167c478bd9Sstevel@tonic-gate	QUARANTINE:any text
23177c478bd9Sstevel@tonic-gate			Quarantine the message using the given text as the
23187c478bd9Sstevel@tonic-gate			quarantining reason.
23197c478bd9Sstevel@tonic-gate
23207c478bd9Sstevel@tonic-gateFor example:
23217c478bd9Sstevel@tonic-gate
23227c478bd9Sstevel@tonic-gate	From:cyberspammer.com	ERROR:"550 We don't accept mail from spammers"
23237c478bd9Sstevel@tonic-gate	From:okay.cyberspammer.com	OK
23247c478bd9Sstevel@tonic-gate	Connect:sendmail.org		RELAY
23257c478bd9Sstevel@tonic-gate	To:sendmail.org			RELAY
23267c478bd9Sstevel@tonic-gate	Connect:128.32			RELAY
23277c478bd9Sstevel@tonic-gate	Connect:128.32.2		SKIP
23287c478bd9Sstevel@tonic-gate	Connect:IPv6:1:2:3:4:5:6:7	RELAY
23297c478bd9Sstevel@tonic-gate	Connect:suspicious.example.com	QUARANTINE:Mail from suspicious host
23307c478bd9Sstevel@tonic-gate	Connect:[127.0.0.3]		OK
23317c478bd9Sstevel@tonic-gate	Connect:[IPv6:1:2:3:4:5:6:7:8]	OK
23327c478bd9Sstevel@tonic-gate
23337c478bd9Sstevel@tonic-gatewould accept mail from okay.cyberspammer.com, but would reject mail
23347c478bd9Sstevel@tonic-gatefrom all other hosts at cyberspammer.com with the indicated message.
23357c478bd9Sstevel@tonic-gateIt would allow relaying mail from and to any hosts in the sendmail.org
23367c478bd9Sstevel@tonic-gatedomain, and allow relaying from the IPv6 1:2:3:4:5:6:7:* network
23377c478bd9Sstevel@tonic-gateand from the 128.32.*.* network except for the 128.32.2.* network,
23387c478bd9Sstevel@tonic-gatewhich shows how SKIP is useful to exempt subnets/subdomains.  The
23397c478bd9Sstevel@tonic-gatelast two entries are for checks against ${client_name} if the IP
23407c478bd9Sstevel@tonic-gateaddress doesn't resolve to a hostname (or is considered as "may be
23417c478bd9Sstevel@tonic-gateforged").  That is, using square brackets means these are host
23427c478bd9Sstevel@tonic-gatenames, not network numbers.
23437c478bd9Sstevel@tonic-gate
23447c478bd9Sstevel@tonic-gateWarning: if you change the RFC 821 compliant error code from the default
23457c478bd9Sstevel@tonic-gatevalue of 550, then you should probably also change the RFC 1893 compliant
23467c478bd9Sstevel@tonic-gateerror code to match it.  For example, if you use
23477c478bd9Sstevel@tonic-gate
23487c478bd9Sstevel@tonic-gate	To:user@example.com	ERROR:450 mailbox full
23497c478bd9Sstevel@tonic-gate
23507c478bd9Sstevel@tonic-gatethe error returned would be "450 5.0.0 mailbox full" which is wrong.
23517c478bd9Sstevel@tonic-gateUse "ERROR:4.2.2:450 mailbox full" instead.
23527c478bd9Sstevel@tonic-gate
23537c478bd9Sstevel@tonic-gateNote, UUCP users may need to add hostname.UUCP to the access database
23547c478bd9Sstevel@tonic-gateor class {R}.
23557c478bd9Sstevel@tonic-gate
23567c478bd9Sstevel@tonic-gateIf you also use:
23577c478bd9Sstevel@tonic-gate
23587c478bd9Sstevel@tonic-gate	FEATURE(`relay_hosts_only')
23597c478bd9Sstevel@tonic-gate
23607c478bd9Sstevel@tonic-gatethen the above example will allow relaying for sendmail.org, but not
23617c478bd9Sstevel@tonic-gatehosts within the sendmail.org domain.  Note that this will also require
23627c478bd9Sstevel@tonic-gatehosts listed in class {R} to be fully qualified host names.
23637c478bd9Sstevel@tonic-gate
23647c478bd9Sstevel@tonic-gateYou can also use the access database to block sender addresses based on
23657c478bd9Sstevel@tonic-gatethe username portion of the address.  For example:
23667c478bd9Sstevel@tonic-gate
23677c478bd9Sstevel@tonic-gate	From:FREE.STEALTH.MAILER@	ERROR:550 Spam not accepted
23687c478bd9Sstevel@tonic-gate
23697c478bd9Sstevel@tonic-gateNote that you must include the @ after the username to signify that
23707c478bd9Sstevel@tonic-gatethis database entry is for checking only the username portion of the
23717c478bd9Sstevel@tonic-gatesender address.
23727c478bd9Sstevel@tonic-gate
23737c478bd9Sstevel@tonic-gateIf you use:
23747c478bd9Sstevel@tonic-gate
23757c478bd9Sstevel@tonic-gate	FEATURE(`blacklist_recipients')
23767c478bd9Sstevel@tonic-gate
23777c478bd9Sstevel@tonic-gatethen you can add entries to the map for local users, hosts in your
23787c478bd9Sstevel@tonic-gatedomains, or addresses in your domain which should not receive mail:
23797c478bd9Sstevel@tonic-gate
23807c478bd9Sstevel@tonic-gate	To:badlocaluser@	ERROR:550 Mailbox disabled for badlocaluser
23817c478bd9Sstevel@tonic-gate	To:host.my.TLD		ERROR:550 That host does not accept mail
23827c478bd9Sstevel@tonic-gate	To:user@other.my.TLD	ERROR:550 Mailbox disabled for this recipient
23837c478bd9Sstevel@tonic-gate
23847c478bd9Sstevel@tonic-gateThis would prevent a recipient of badlocaluser in any of the local
23857c478bd9Sstevel@tonic-gatedomains (class {w}), any user at host.my.TLD, and the single address
23867c478bd9Sstevel@tonic-gateuser@other.my.TLD from receiving mail.  Please note: a local username
23877c478bd9Sstevel@tonic-gatemust be now tagged with an @ (this is consistent with the check of
23887c478bd9Sstevel@tonic-gatethe sender address, and hence it is possible to distinguish between
23897c478bd9Sstevel@tonic-gatehostnames and usernames).  Enabling this feature will keep you from
23907c478bd9Sstevel@tonic-gatesending mails to all addresses that have an error message or REJECT
23917c478bd9Sstevel@tonic-gateas value part in the access map.  Taking the example from above:
23927c478bd9Sstevel@tonic-gate
23937c478bd9Sstevel@tonic-gate	spammer@aol.com		REJECT
23947c478bd9Sstevel@tonic-gate	cyberspammer.com	REJECT
23957c478bd9Sstevel@tonic-gate
23967c478bd9Sstevel@tonic-gateMail can't be sent to spammer@aol.com or anyone at cyberspammer.com.
23977c478bd9Sstevel@tonic-gateThat's why tagged entries should be used.
23987c478bd9Sstevel@tonic-gate
23997c478bd9Sstevel@tonic-gateThere are several DNS based blacklists, the first of which was
24007c478bd9Sstevel@tonic-gatethe RBL (``Realtime Blackhole List'') run by the MAPS project,
24017c478bd9Sstevel@tonic-gatesee http://mail-abuse.org/.  These are databases of spammers
24027c478bd9Sstevel@tonic-gatemaintained in DNS.  To use such a database, specify
24037c478bd9Sstevel@tonic-gate
24047c478bd9Sstevel@tonic-gate	FEATURE(`dnsbl')
24057c478bd9Sstevel@tonic-gate
24067c478bd9Sstevel@tonic-gateThis will cause sendmail to reject mail from any site in the original
24077c478bd9Sstevel@tonic-gateRealtime Blackhole List database.  This default DNS blacklist,
24087c478bd9Sstevel@tonic-gateblackholes.mail-abuse.org, is a service offered by the Mail Abuse
24097c478bd9Sstevel@tonic-gatePrevention System (MAPS).  As of July 31, 2001, MAPS is a subscription
24107c478bd9Sstevel@tonic-gateservice, so using that network address won't work if you haven't
24117c478bd9Sstevel@tonic-gatesubscribed.  Contact MAPS to subscribe (http://mail-abuse.org/).
24127c478bd9Sstevel@tonic-gate
24137c478bd9Sstevel@tonic-gateYou can specify an alternative RBL server to check by specifying an
24147c478bd9Sstevel@tonic-gateargument to the FEATURE.  The default error message is
24157c478bd9Sstevel@tonic-gate
24167c478bd9Sstevel@tonic-gate	Rejected: IP-ADDRESS listed at SERVER
24177c478bd9Sstevel@tonic-gate
24187c478bd9Sstevel@tonic-gatewhere IP-ADDRESS and SERVER are replaced by the appropriate
24197c478bd9Sstevel@tonic-gateinformation.  A second argument can be used to specify a different
24207c478bd9Sstevel@tonic-gatetext.  By default, temporary lookup failures are ignored and hence
24217c478bd9Sstevel@tonic-gatecause the connection not to be rejected by the DNS based rejection
24227c478bd9Sstevel@tonic-gatelist.  This behavior can be changed by specifying a third argument,
24237c478bd9Sstevel@tonic-gatewhich must be either `t' or a full error message.  For example:
24247c478bd9Sstevel@tonic-gate
24257c478bd9Sstevel@tonic-gate	FEATURE(`dnsbl', `dnsbl.example.com', `',
24267c478bd9Sstevel@tonic-gate	`"451 Temporary lookup failure for " $&{client_addr} " in dnsbl.example.com"')
24277c478bd9Sstevel@tonic-gate
24287c478bd9Sstevel@tonic-gateIf `t' is used, the error message is:
24297c478bd9Sstevel@tonic-gate
24307c478bd9Sstevel@tonic-gate	451 Temporary lookup failure of IP-ADDRESS at SERVER
24317c478bd9Sstevel@tonic-gate
24327c478bd9Sstevel@tonic-gatewhere IP-ADDRESS and SERVER are replaced by the appropriate
24337c478bd9Sstevel@tonic-gateinformation.
24347c478bd9Sstevel@tonic-gate
24357c478bd9Sstevel@tonic-gateThis FEATURE can be included several times to query different
24367c478bd9Sstevel@tonic-gateDNS based rejection lists, e.g., the dial-up user list (see
24377c478bd9Sstevel@tonic-gatehttp://mail-abuse.org/dul/).
24387c478bd9Sstevel@tonic-gate
24397c478bd9Sstevel@tonic-gateNotice: to avoid checking your own local domains against those
24407c478bd9Sstevel@tonic-gateblacklists, use the access_db feature and add:
24417c478bd9Sstevel@tonic-gate
24427c478bd9Sstevel@tonic-gate	Connect:10.1		OK
24437c478bd9Sstevel@tonic-gate	Connect:127.0.0.1	RELAY
24447c478bd9Sstevel@tonic-gate
24457c478bd9Sstevel@tonic-gateto the access map, where 10.1 is your local network.  You may
24467c478bd9Sstevel@tonic-gatewant to use "RELAY" instead of "OK" to allow also relaying
24477c478bd9Sstevel@tonic-gateinstead of just disabling the DNS lookups in the blacklists.
24487c478bd9Sstevel@tonic-gate
24497c478bd9Sstevel@tonic-gate
24507c478bd9Sstevel@tonic-gateThe features described above make use of the check_relay, check_mail,
24517c478bd9Sstevel@tonic-gateand check_rcpt rulesets.  Note that check_relay checks the SMTP
24527c478bd9Sstevel@tonic-gateclient hostname and IP address when the connection is made to your
24537c478bd9Sstevel@tonic-gateserver.  It does not check if a mail message is being relayed to
24547c478bd9Sstevel@tonic-gateanother server.  That check is done in check_rcpt.  If you wish to
24557c478bd9Sstevel@tonic-gateinclude your own checks, you can put your checks in the rulesets
24567c478bd9Sstevel@tonic-gateLocal_check_relay, Local_check_mail, and Local_check_rcpt.  For
24577c478bd9Sstevel@tonic-gateexample if you wanted to block senders with all numeric usernames
24587c478bd9Sstevel@tonic-gate(i.e. 2312343@bigisp.com), you would use Local_check_mail and the
24597c478bd9Sstevel@tonic-gateregex map:
24607c478bd9Sstevel@tonic-gate
24617c478bd9Sstevel@tonic-gate	LOCAL_CONFIG
24627c478bd9Sstevel@tonic-gate	Kallnumbers regex -a@MATCH ^[0-9]+$
24637c478bd9Sstevel@tonic-gate
24647c478bd9Sstevel@tonic-gate	LOCAL_RULESETS
24657c478bd9Sstevel@tonic-gate	SLocal_check_mail
24667c478bd9Sstevel@tonic-gate	# check address against various regex checks
24677c478bd9Sstevel@tonic-gate	R$*				$: $>Parse0 $>3 $1
24687c478bd9Sstevel@tonic-gate	R$+ < @ bigisp.com. > $*	$: $(allnumbers $1 $)
24697c478bd9Sstevel@tonic-gate	R@MATCH				$#error $: 553 Header Error
24707c478bd9Sstevel@tonic-gate
24717c478bd9Sstevel@tonic-gateThese rules are called with the original arguments of the corresponding
24727c478bd9Sstevel@tonic-gatecheck_* ruleset.  If the local ruleset returns $#OK, no further checking
24737c478bd9Sstevel@tonic-gateis done by the features described above and the mail is accepted.  If
24747c478bd9Sstevel@tonic-gatethe local ruleset resolves to a mailer (such as $#error or $#discard),
24757c478bd9Sstevel@tonic-gatethe appropriate action is taken.  Other results starting with $# are
24767c478bd9Sstevel@tonic-gateinterpreted by sendmail and may lead to unspecified behavior.  Note: do
24777c478bd9Sstevel@tonic-gateNOT create a mailer with the name OK.  Return values that do not start
24787c478bd9Sstevel@tonic-gatewith $# are ignored, i.e., normal processing continues.
24797c478bd9Sstevel@tonic-gate
24807c478bd9Sstevel@tonic-gateDelay all checks
24817c478bd9Sstevel@tonic-gate----------------
24827c478bd9Sstevel@tonic-gate
24837c478bd9Sstevel@tonic-gateBy using FEATURE(`delay_checks') the rulesets check_mail and check_relay
24847c478bd9Sstevel@tonic-gatewill not be called when a client connects or issues a MAIL command,
24857c478bd9Sstevel@tonic-gaterespectively.  Instead, those rulesets will be called by the check_rcpt
24867c478bd9Sstevel@tonic-gateruleset; they will be skipped if a sender has been authenticated using
24877c478bd9Sstevel@tonic-gatea "trusted" mechanism, i.e., one that is defined via TRUST_AUTH_MECH().
24887c478bd9Sstevel@tonic-gateIf check_mail returns an error then the RCPT TO command will be rejected
24897c478bd9Sstevel@tonic-gatewith that error.  If it returns some other result starting with $# then
24907c478bd9Sstevel@tonic-gatecheck_relay will be skipped.  If the sender address (or a part of it) is
24917c478bd9Sstevel@tonic-gatelisted in the access map and it has a RHS of OK or RELAY, then check_relay
24927c478bd9Sstevel@tonic-gatewill be skipped.  This has an interesting side effect: if your domain is
24937c478bd9Sstevel@tonic-gatemy.domain and you have
24947c478bd9Sstevel@tonic-gate
24957c478bd9Sstevel@tonic-gate	my.domain	RELAY
24967c478bd9Sstevel@tonic-gate
24977c478bd9Sstevel@tonic-gatein the access map, then any e-mail with a sender address of
24987c478bd9Sstevel@tonic-gate<user@my.domain> will not be rejected by check_relay even though
24997c478bd9Sstevel@tonic-gateit would match the hostname or IP address.  This allows spammers
25007c478bd9Sstevel@tonic-gateto get around DNS based blacklist by faking the sender address.  To
25017c478bd9Sstevel@tonic-gateavoid this problem you have to use tagged entries:
25027c478bd9Sstevel@tonic-gate
25037c478bd9Sstevel@tonic-gate	To:my.domain		RELAY
25047c478bd9Sstevel@tonic-gate	Connect:my.domain	RELAY
25057c478bd9Sstevel@tonic-gate
25067c478bd9Sstevel@tonic-gateif you need those entries at all (class {R} may take care of them).
25077c478bd9Sstevel@tonic-gate
25087c478bd9Sstevel@tonic-gateFEATURE(`delay_checks') can take an optional argument:
25097c478bd9Sstevel@tonic-gate
25107c478bd9Sstevel@tonic-gate	FEATURE(`delay_checks', `friend')
25117c478bd9Sstevel@tonic-gate		 enables spamfriend test
25127c478bd9Sstevel@tonic-gate	FEATURE(`delay_checks', `hater')
25137c478bd9Sstevel@tonic-gate		 enables spamhater test
25147c478bd9Sstevel@tonic-gate
25157c478bd9Sstevel@tonic-gateIf such an argument is given, the recipient will be looked up in the
25167c478bd9Sstevel@tonic-gateaccess map (using the tag Spam:).  If the argument is `friend', then
25177c478bd9Sstevel@tonic-gatethe default behavior is to apply the other rulesets and make a SPAM
25187c478bd9Sstevel@tonic-gatefriend the exception.  The rulesets check_mail and check_relay will be
25197c478bd9Sstevel@tonic-gateskipped only if the recipient address is found and has RHS FRIEND.  If
25207c478bd9Sstevel@tonic-gatethe argument is `hater', then the default behavior is to skip the rulesets
25217c478bd9Sstevel@tonic-gatecheck_mail and check_relay and make a SPAM hater the exception.  The
25227c478bd9Sstevel@tonic-gateother two rulesets will be applied only if the recipient address is
25237c478bd9Sstevel@tonic-gatefound and has RHS HATER.
25247c478bd9Sstevel@tonic-gate
25257c478bd9Sstevel@tonic-gateThis allows for simple exceptions from the tests, e.g., by activating
25267c478bd9Sstevel@tonic-gatethe friend option and having
25277c478bd9Sstevel@tonic-gate
25287c478bd9Sstevel@tonic-gate	Spam:abuse@	FRIEND
25297c478bd9Sstevel@tonic-gate
25307c478bd9Sstevel@tonic-gatein the access map, mail to abuse@localdomain will get through (where
25317c478bd9Sstevel@tonic-gate"localdomain" is any domain in class {w}).  It is also possible to
25327c478bd9Sstevel@tonic-gatespecify a full address or an address with +detail:
25337c478bd9Sstevel@tonic-gate
25347c478bd9Sstevel@tonic-gate	Spam:abuse@my.domain	FRIEND
25357c478bd9Sstevel@tonic-gate	Spam:me+abuse@		FRIEND
25367c478bd9Sstevel@tonic-gate	Spam:spam.domain	FRIEND
25377c478bd9Sstevel@tonic-gate
25387c478bd9Sstevel@tonic-gateNote: The required tag has been changed in 8.12 from To: to Spam:.
25397c478bd9Sstevel@tonic-gateThis change is incompatible to previous versions.  However, you can
25407c478bd9Sstevel@tonic-gate(for now) simply add the new entries to the access map, the old
25417c478bd9Sstevel@tonic-gateones will be ignored.  As soon as you removed the old entries from
25427c478bd9Sstevel@tonic-gatethe access map, specify a third parameter (`n') to this feature and
25437c478bd9Sstevel@tonic-gatethe backward compatibility rules will not be in the generated .cf
25447c478bd9Sstevel@tonic-gatefile.
25457c478bd9Sstevel@tonic-gate
25467c478bd9Sstevel@tonic-gateHeader Checks
25477c478bd9Sstevel@tonic-gate-------------
25487c478bd9Sstevel@tonic-gate
25497c478bd9Sstevel@tonic-gateYou can also reject mail on the basis of the contents of headers.
25507c478bd9Sstevel@tonic-gateThis is done by adding a ruleset call to the 'H' header definition command
25517c478bd9Sstevel@tonic-gatein sendmail.cf.  For example, this can be used to check the validity of
25527c478bd9Sstevel@tonic-gatea Message-ID: header:
25537c478bd9Sstevel@tonic-gate
25547c478bd9Sstevel@tonic-gate	LOCAL_CONFIG
25557c478bd9Sstevel@tonic-gate	HMessage-Id: $>CheckMessageId
25567c478bd9Sstevel@tonic-gate
25577c478bd9Sstevel@tonic-gate	LOCAL_RULESETS
25587c478bd9Sstevel@tonic-gate	SCheckMessageId
25597c478bd9Sstevel@tonic-gate	R< $+ @ $+ >		$@ OK
25607c478bd9Sstevel@tonic-gate	R$*			$#error $: 553 Header Error
25617c478bd9Sstevel@tonic-gate
25627c478bd9Sstevel@tonic-gateThe alternative format:
25637c478bd9Sstevel@tonic-gate
25647c478bd9Sstevel@tonic-gate	HSubject: $>+CheckSubject
25657c478bd9Sstevel@tonic-gate
25667c478bd9Sstevel@tonic-gatethat is, $>+ instead of $>, gives the full Subject: header including
25677c478bd9Sstevel@tonic-gatecomments to the ruleset (comments in parentheses () are stripped
25687c478bd9Sstevel@tonic-gateby default).
25697c478bd9Sstevel@tonic-gate
25707c478bd9Sstevel@tonic-gateA default ruleset for headers which don't have a specific ruleset
25717c478bd9Sstevel@tonic-gatedefined for them can be given by:
25727c478bd9Sstevel@tonic-gate
25737c478bd9Sstevel@tonic-gate	H*: $>CheckHdr
25747c478bd9Sstevel@tonic-gate
25757c478bd9Sstevel@tonic-gateNotice:
25767c478bd9Sstevel@tonic-gate1. All rules act on tokens as explained in doc/op/op.{me,ps,txt}.
25777c478bd9Sstevel@tonic-gateThat may cause problems with simple header checks due to the
25787c478bd9Sstevel@tonic-gatetokenization.  It might be simpler to use a regex map and apply it
25797c478bd9Sstevel@tonic-gateto $&{currHeader}.
25807c478bd9Sstevel@tonic-gate2. There are no default rulesets coming with this distribution of
2581*49218d4fSjbecksendmail.  You can write your own or search the WWW for examples.
25827c478bd9Sstevel@tonic-gate3. When using a default ruleset for headers, the name of the header
25837c478bd9Sstevel@tonic-gatecurrently being checked can be found in the $&{hdr_name} macro.
25847c478bd9Sstevel@tonic-gate
25857c478bd9Sstevel@tonic-gateAfter all of the headers are read, the check_eoh ruleset will be called for
25867c478bd9Sstevel@tonic-gateany final header-related checks.  The ruleset is called with the number of
25877c478bd9Sstevel@tonic-gateheaders and the size of all of the headers in bytes separated by $|.  One
25887c478bd9Sstevel@tonic-gateexample usage is to reject messages which do not have a Message-Id:
25897c478bd9Sstevel@tonic-gateheader.  However, the Message-Id: header is *NOT* a required header and is
25907c478bd9Sstevel@tonic-gatenot a guaranteed spam indicator.  This ruleset is an example and should
25917c478bd9Sstevel@tonic-gateprobably not be used in production.
25927c478bd9Sstevel@tonic-gate
25937c478bd9Sstevel@tonic-gate	LOCAL_CONFIG
25947c478bd9Sstevel@tonic-gate	Kstorage macro
25957c478bd9Sstevel@tonic-gate	HMessage-Id: $>CheckMessageId
25967c478bd9Sstevel@tonic-gate
25977c478bd9Sstevel@tonic-gate	LOCAL_RULESETS
25987c478bd9Sstevel@tonic-gate	SCheckMessageId
25997c478bd9Sstevel@tonic-gate	# Record the presence of the header
26007c478bd9Sstevel@tonic-gate	R$*			$: $(storage {MessageIdCheck} $@ OK $) $1
26017c478bd9Sstevel@tonic-gate	R< $+ @ $+ >		$@ OK
26027c478bd9Sstevel@tonic-gate	R$*			$#error $: 553 Header Error
26037c478bd9Sstevel@tonic-gate
26047c478bd9Sstevel@tonic-gate	Scheck_eoh
26057c478bd9Sstevel@tonic-gate	# Check the macro
26067c478bd9Sstevel@tonic-gate	R$*			$: < $&{MessageIdCheck} >
26077c478bd9Sstevel@tonic-gate	# Clear the macro for the next message
26087c478bd9Sstevel@tonic-gate	R$*			$: $(storage {MessageIdCheck} $) $1
26097c478bd9Sstevel@tonic-gate	# Has a Message-Id: header
26107c478bd9Sstevel@tonic-gate	R< $+ >			$@ OK
26117c478bd9Sstevel@tonic-gate	# Allow missing Message-Id: from local mail
26127c478bd9Sstevel@tonic-gate	R$*			$: < $&{client_name} >
26137c478bd9Sstevel@tonic-gate	R< >			$@ OK
26147c478bd9Sstevel@tonic-gate	R< $=w >		$@ OK
26157c478bd9Sstevel@tonic-gate	# Otherwise, reject the mail
26167c478bd9Sstevel@tonic-gate	R$*			$#error $: 553 Header Error
26177c478bd9Sstevel@tonic-gate
26187c478bd9Sstevel@tonic-gate
26197c478bd9Sstevel@tonic-gate+--------------------+
26207c478bd9Sstevel@tonic-gate| CONNECTION CONTROL |
26217c478bd9Sstevel@tonic-gate+--------------------+
26227c478bd9Sstevel@tonic-gate
26237c478bd9Sstevel@tonic-gateThe features ratecontrol and conncontrol allow to establish connection
26247c478bd9Sstevel@tonic-gatelimits per client IP address or net.  These features can limit the
26257c478bd9Sstevel@tonic-gaterate of connections (connections per time unit) or the number of
26267c478bd9Sstevel@tonic-gateincoming SMTP connections, respectively.  If enabled, appropriate
26277c478bd9Sstevel@tonic-gaterulesets are called at the end of check_relay, i.e., after DNS
26287c478bd9Sstevel@tonic-gateblacklists and generic access_db operations.  The features require
26297c478bd9Sstevel@tonic-gateFEATURE(`access_db') to be listed earlier in the mc file.
26307c478bd9Sstevel@tonic-gate
26317c478bd9Sstevel@tonic-gateNote: FEATURE(`delay_checks') delays those connection control checks
26327c478bd9Sstevel@tonic-gateafter a recipient address has been received, hence making these
26337c478bd9Sstevel@tonic-gateconnection control features less useful.  To run the checks as early
26347c478bd9Sstevel@tonic-gateas possible, specify the parameter `nodelay', e.g.,
26357c478bd9Sstevel@tonic-gate
26367c478bd9Sstevel@tonic-gate	FEATURE(`ratecontrol', `nodelay')
26377c478bd9Sstevel@tonic-gate
26387c478bd9Sstevel@tonic-gateIn that case, FEATURE(`delay_checks') has no effect on connection
26397c478bd9Sstevel@tonic-gatecontrol (and it must be specified earlier in the mc file).
26407c478bd9Sstevel@tonic-gate
26417c478bd9Sstevel@tonic-gateAn optional second argument `terminate' specifies whether the
26427c478bd9Sstevel@tonic-gaterulesets should return the error code 421 which will cause
26437c478bd9Sstevel@tonic-gatesendmail to terminate the session with that error if it is
26447c478bd9Sstevel@tonic-gatereturned from check_relay, i.e., not delayed as explained in
26457c478bd9Sstevel@tonic-gatethe previous paragraph.  Example:
26467c478bd9Sstevel@tonic-gate
26477c478bd9Sstevel@tonic-gate	FEATURE(`ratecontrol', `nodelay', `terminate')
26487c478bd9Sstevel@tonic-gate
26497c478bd9Sstevel@tonic-gate
26507c478bd9Sstevel@tonic-gate+----------+
26517c478bd9Sstevel@tonic-gate| STARTTLS |
26527c478bd9Sstevel@tonic-gate+----------+
26537c478bd9Sstevel@tonic-gate
26547c478bd9Sstevel@tonic-gateIn this text, cert will be used as an abbreviation for X.509 certificate,
26557c478bd9Sstevel@tonic-gateDN (CN) is the distinguished (common) name of a cert, and CA is a
26567c478bd9Sstevel@tonic-gatecertification authority, which signs (issues) certs.
26577c478bd9Sstevel@tonic-gate
26587c478bd9Sstevel@tonic-gateFor STARTTLS to be offered by sendmail you need to set at least
26597c478bd9Sstevel@tonic-gatethese variables (the file names and paths are just examples):
26607c478bd9Sstevel@tonic-gate
26617c478bd9Sstevel@tonic-gate	define(`confCACERT_PATH', `/etc/mail/certs/')
26627c478bd9Sstevel@tonic-gate	define(`confCACERT', `/etc/mail/certs/CA.cert.pem')
26637c478bd9Sstevel@tonic-gate	define(`confSERVER_CERT', `/etc/mail/certs/my.cert.pem')
26647c478bd9Sstevel@tonic-gate	define(`confSERVER_KEY', `/etc/mail/certs/my.key.pem')
26657c478bd9Sstevel@tonic-gate
26667c478bd9Sstevel@tonic-gateOn systems which do not have the compile flag HASURANDOM set (see
26677c478bd9Sstevel@tonic-gatesendmail/README) you also must set confRAND_FILE.
26687c478bd9Sstevel@tonic-gate
26697c478bd9Sstevel@tonic-gateSee doc/op/op.{me,ps,txt} for more information about these options,
26707c478bd9Sstevel@tonic-gateespecially the sections ``Certificates for STARTTLS'' and ``PRNG for
26717c478bd9Sstevel@tonic-gateSTARTTLS''.
26727c478bd9Sstevel@tonic-gate
26737c478bd9Sstevel@tonic-gateMacros related to STARTTLS are:
26747c478bd9Sstevel@tonic-gate
26757c478bd9Sstevel@tonic-gate${cert_issuer} holds the DN of the CA (the cert issuer).
26767c478bd9Sstevel@tonic-gate${cert_subject} holds the DN of the cert (called the cert subject).
26777c478bd9Sstevel@tonic-gate${cn_issuer} holds the CN of the CA (the cert issuer).
26787c478bd9Sstevel@tonic-gate${cn_subject} holds the CN of the cert (called the cert subject).
26797c478bd9Sstevel@tonic-gate${tls_version} the TLS/SSL version used for the connection, e.g., TLSv1,
26807c478bd9Sstevel@tonic-gate	TLSv1/SSLv3, SSLv3, SSLv2.
26817c478bd9Sstevel@tonic-gate${cipher} the cipher used for the connection, e.g., EDH-DSS-DES-CBC3-SHA,
26827c478bd9Sstevel@tonic-gate	EDH-RSA-DES-CBC-SHA, DES-CBC-MD5, DES-CBC3-SHA.
26837c478bd9Sstevel@tonic-gate${cipher_bits} the keylength (in bits) of the symmetric encryption algorithm
26847c478bd9Sstevel@tonic-gate	used for the connection.
26857c478bd9Sstevel@tonic-gate${verify} holds the result of the verification of the presented cert.
26867c478bd9Sstevel@tonic-gate	Possible values are:
26877c478bd9Sstevel@tonic-gate	OK	 verification succeeded.
26887c478bd9Sstevel@tonic-gate	NO	 no cert presented.
26897c478bd9Sstevel@tonic-gate	NOT	 no cert requested.
26907c478bd9Sstevel@tonic-gate	FAIL	 cert presented but could not be verified,
26917c478bd9Sstevel@tonic-gate		 e.g., the cert of the signing CA is missing.
26927c478bd9Sstevel@tonic-gate	NONE	 STARTTLS has not been performed.
26937c478bd9Sstevel@tonic-gate	TEMP	 temporary error occurred.
26947c478bd9Sstevel@tonic-gate	PROTOCOL protocol error occurred (SMTP level).
26957c478bd9Sstevel@tonic-gate	SOFTWARE STARTTLS handshake failed.
26967c478bd9Sstevel@tonic-gate${server_name} the name of the server of the current outgoing SMTP
26977c478bd9Sstevel@tonic-gate	connection.
26987c478bd9Sstevel@tonic-gate${server_addr} the address of the server of the current outgoing SMTP
26997c478bd9Sstevel@tonic-gate	connection.
27007c478bd9Sstevel@tonic-gate
27017c478bd9Sstevel@tonic-gateRelaying
27027c478bd9Sstevel@tonic-gate--------
27037c478bd9Sstevel@tonic-gate
27047c478bd9Sstevel@tonic-gateSMTP STARTTLS can allow relaying for remote SMTP clients which have
27057c478bd9Sstevel@tonic-gatesuccessfully authenticated themselves.  If the verification of the cert
27067c478bd9Sstevel@tonic-gatefailed (${verify} != OK), relaying is subject to the usual rules.
27077c478bd9Sstevel@tonic-gateOtherwise the DN of the issuer is looked up in the access map using the
27087c478bd9Sstevel@tonic-gatetag CERTISSUER.  If the resulting value is RELAY, relaying is allowed.
27097c478bd9Sstevel@tonic-gateIf it is SUBJECT, the DN of the cert subject is looked up next in the
27107c478bd9Sstevel@tonic-gateaccess map using the tag CERTSUBJECT.  If the value is RELAY, relaying
27117c478bd9Sstevel@tonic-gateis allowed.
27127c478bd9Sstevel@tonic-gate
27137c478bd9Sstevel@tonic-gateTo make things a bit more flexible (or complicated), the values for
27147c478bd9Sstevel@tonic-gate${cert_issuer} and ${cert_subject} can be optionally modified by regular
27157c478bd9Sstevel@tonic-gateexpressions defined in the m4 variables _CERT_REGEX_ISSUER_ and
27167c478bd9Sstevel@tonic-gate_CERT_REGEX_SUBJECT_, respectively.  To avoid problems with those macros in
27177c478bd9Sstevel@tonic-gaterulesets and map lookups, they are modified as follows: each non-printable
27187c478bd9Sstevel@tonic-gatecharacter and the characters '<', '>', '(', ')', '"', '+', ' ' are replaced
27197c478bd9Sstevel@tonic-gateby their HEX value with a leading '+'.  For example:
27207c478bd9Sstevel@tonic-gate
27217c478bd9Sstevel@tonic-gate/C=US/ST=California/O=endmail.org/OU=private/CN=Darth Mail (Cert)/Email=
27227c478bd9Sstevel@tonic-gatedarth+cert@endmail.org
27237c478bd9Sstevel@tonic-gate
27247c478bd9Sstevel@tonic-gateis encoded as:
27257c478bd9Sstevel@tonic-gate
27267c478bd9Sstevel@tonic-gate/C=US/ST=California/O=endmail.org/OU=private/CN=
27277c478bd9Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org
27287c478bd9Sstevel@tonic-gate
27297c478bd9Sstevel@tonic-gate(line breaks have been inserted for readability).
27307c478bd9Sstevel@tonic-gate
27317c478bd9Sstevel@tonic-gateThe  macros  which are subject to this encoding are ${cert_subject},
27327c478bd9Sstevel@tonic-gate${cert_issuer},  ${cn_subject},  and ${cn_issuer}.
27337c478bd9Sstevel@tonic-gate
27347c478bd9Sstevel@tonic-gateExamples:
27357c478bd9Sstevel@tonic-gate
27367c478bd9Sstevel@tonic-gateTo allow relaying for everyone who can present a cert signed by
27377c478bd9Sstevel@tonic-gate
27387c478bd9Sstevel@tonic-gate/C=US/ST=California/O=endmail.org/OU=private/CN=
27397c478bd9Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org
27407c478bd9Sstevel@tonic-gate
27417c478bd9Sstevel@tonic-gatesimply use:
27427c478bd9Sstevel@tonic-gate
27437c478bd9Sstevel@tonic-gateCertIssuer:/C=US/ST=California/O=endmail.org/OU=private/CN=
27447c478bd9Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org	RELAY
27457c478bd9Sstevel@tonic-gate
27467c478bd9Sstevel@tonic-gateTo allow relaying only for a subset of machines that have a cert signed by
27477c478bd9Sstevel@tonic-gate
27487c478bd9Sstevel@tonic-gate/C=US/ST=California/O=endmail.org/OU=private/CN=
27497c478bd9Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org
27507c478bd9Sstevel@tonic-gate
27517c478bd9Sstevel@tonic-gateuse:
27527c478bd9Sstevel@tonic-gate
27537c478bd9Sstevel@tonic-gateCertIssuer:/C=US/ST=California/O=endmail.org/OU=private/CN=
27547c478bd9Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org	SUBJECT
27557c478bd9Sstevel@tonic-gateCertSubject:/C=US/ST=California/O=endmail.org/OU=private/CN=
27567c478bd9Sstevel@tonic-gateDeathStar/Email=deathstar@endmail.org		RELAY
27577c478bd9Sstevel@tonic-gate
27587c478bd9Sstevel@tonic-gateNotes:
27597c478bd9Sstevel@tonic-gate- line breaks have been inserted after "CN=" for readability,
27607c478bd9Sstevel@tonic-gate  each tagged entry must be one (long) line in the access map.
27617c478bd9Sstevel@tonic-gate- if OpenSSL 0.9.7 or newer is used then the "Email=" part of a DN
27627c478bd9Sstevel@tonic-gate  is replaced by "emailAddress=".
27637c478bd9Sstevel@tonic-gate
27647c478bd9Sstevel@tonic-gateOf course it is also possible to write a simple ruleset that allows
27657c478bd9Sstevel@tonic-gaterelaying for everyone who can present a cert that can be verified, e.g.,
27667c478bd9Sstevel@tonic-gate
27677c478bd9Sstevel@tonic-gateLOCAL_RULESETS
27687c478bd9Sstevel@tonic-gateSLocal_check_rcpt
27697c478bd9Sstevel@tonic-gateR$*	$: $&{verify}
27707c478bd9Sstevel@tonic-gateROK	$# OK
27717c478bd9Sstevel@tonic-gate
27727c478bd9Sstevel@tonic-gateAllowing Connections
27737c478bd9Sstevel@tonic-gate--------------------
27747c478bd9Sstevel@tonic-gate
27757c478bd9Sstevel@tonic-gateThe rulesets tls_server, tls_client, and tls_rcpt are used to decide whether
27767c478bd9Sstevel@tonic-gatean SMTP connection is accepted (or should continue).
27777c478bd9Sstevel@tonic-gate
27787c478bd9Sstevel@tonic-gatetls_server is called when sendmail acts as client after a STARTTLS command
27797c478bd9Sstevel@tonic-gate(should) have been issued.  The parameter is the value of ${verify}.
27807c478bd9Sstevel@tonic-gate
27817c478bd9Sstevel@tonic-gatetls_client is called when sendmail acts as server, after a STARTTLS command
27827c478bd9Sstevel@tonic-gatehas been issued, and from check_mail.  The parameter is the value of
27837c478bd9Sstevel@tonic-gate${verify} and STARTTLS or MAIL, respectively.
27847c478bd9Sstevel@tonic-gate
27857c478bd9Sstevel@tonic-gateBoth rulesets behave the same.  If no access map is in use, the connection
27867c478bd9Sstevel@tonic-gatewill be accepted unless ${verify} is SOFTWARE, in which case the connection
27877c478bd9Sstevel@tonic-gateis always aborted.  For tls_server/tls_client, ${client_name}/${server_name}
27887c478bd9Sstevel@tonic-gateis looked up in the access map using the tag TLS_Srv/TLS_Clt, which is done
27897c478bd9Sstevel@tonic-gatewith the ruleset LookUpDomain.  If no entry is found, ${client_addr}
27907c478bd9Sstevel@tonic-gate(${server_addr}) is looked up in the access map (same tag, ruleset
27917c478bd9Sstevel@tonic-gateLookUpAddr).  If this doesn't result in an entry either, just the tag is
27927c478bd9Sstevel@tonic-gatelooked up in the access map (included the trailing colon).  Notice:
27937c478bd9Sstevel@tonic-gaterequiring that e-mail is sent to a server only encrypted, e.g., via
27947c478bd9Sstevel@tonic-gate
27957c478bd9Sstevel@tonic-gateTLS_Srv:secure.domain	ENCR:112
27967c478bd9Sstevel@tonic-gate
27977c478bd9Sstevel@tonic-gatedoesn't necessarily mean that e-mail sent to that domain is encrypted.
27987c478bd9Sstevel@tonic-gateIf the domain has multiple MX servers, e.g.,
27997c478bd9Sstevel@tonic-gate
28007c478bd9Sstevel@tonic-gatesecure.domain.	IN MX 10	mail.secure.domain.
28017c478bd9Sstevel@tonic-gatesecure.domain.	IN MX 50	mail.other.domain.
28027c478bd9Sstevel@tonic-gate
28037c478bd9Sstevel@tonic-gatethen mail to user@secure.domain may go unencrypted to mail.other.domain.
28047c478bd9Sstevel@tonic-gatetls_rcpt can be used to address this problem.
28057c478bd9Sstevel@tonic-gate
28067c478bd9Sstevel@tonic-gatetls_rcpt is called before a RCPT TO: command is sent.  The parameter is the
28077c478bd9Sstevel@tonic-gatecurrent recipient.  This ruleset is only defined if FEATURE(`access_db')
28087c478bd9Sstevel@tonic-gateis selected.  A recipient address user@domain is looked up in the access
28097c478bd9Sstevel@tonic-gatemap in four formats: TLS_Rcpt:user@domain, TLS_Rcpt:user@, TLS_Rcpt:domain,
28107c478bd9Sstevel@tonic-gateand TLS_Rcpt:; the first match is taken.
28117c478bd9Sstevel@tonic-gate
28127c478bd9Sstevel@tonic-gateThe result of the lookups is then used to call the ruleset TLS_connection,
28137c478bd9Sstevel@tonic-gatewhich checks the requirement specified by the RHS in the access map against
28147c478bd9Sstevel@tonic-gatethe actual parameters of the current TLS connection, esp. ${verify} and
28157c478bd9Sstevel@tonic-gate${cipher_bits}.  Legal RHSs in the access map are:
28167c478bd9Sstevel@tonic-gate
28177c478bd9Sstevel@tonic-gateVERIFY		verification must have succeeded
28187c478bd9Sstevel@tonic-gateVERIFY:bits	verification must have succeeded and ${cipher_bits} must
28197c478bd9Sstevel@tonic-gate		be greater than or equal bits.
28207c478bd9Sstevel@tonic-gateENCR:bits	${cipher_bits} must be greater than or equal bits.
28217c478bd9Sstevel@tonic-gate
28227c478bd9Sstevel@tonic-gateThe RHS can optionally be prefixed by TEMP+ or PERM+ to select a temporary
28237c478bd9Sstevel@tonic-gateor permanent error.  The default is a temporary error code (403 4.7.0)
28247c478bd9Sstevel@tonic-gateunless the macro TLS_PERM_ERR is set during generation of the .cf file.
28257c478bd9Sstevel@tonic-gate
28267c478bd9Sstevel@tonic-gateIf a certain level of encryption is required, then it might also be
28277c478bd9Sstevel@tonic-gatepossible that this level is provided by the security layer from a SASL
28287c478bd9Sstevel@tonic-gatealgorithm, e.g., DIGEST-MD5.
28297c478bd9Sstevel@tonic-gate
28307c478bd9Sstevel@tonic-gateFurthermore, there can be a list of extensions added.  Such a list
28317c478bd9Sstevel@tonic-gatestarts with '+' and the items are separated by '++'.  Allowed
28327c478bd9Sstevel@tonic-gateextensions are:
28337c478bd9Sstevel@tonic-gate
28347c478bd9Sstevel@tonic-gateCN:name		name must match ${cn_subject}
28357c478bd9Sstevel@tonic-gateCN		${server_name} must match ${cn_subject}
28367c478bd9Sstevel@tonic-gateCS:name		name must match ${cert_subject}
28377c478bd9Sstevel@tonic-gateCI:name		name must match ${cert_issuer}
28387c478bd9Sstevel@tonic-gate
28397c478bd9Sstevel@tonic-gateExample: e-mail sent to secure.example.com should only use an encrypted
28407c478bd9Sstevel@tonic-gateconnection.  E-mail received from hosts within the laptop.example.com domain
28417c478bd9Sstevel@tonic-gateshould only be accepted if they have been authenticated.  The host which
28427c478bd9Sstevel@tonic-gatereceives e-mail for darth@endmail.org must present a cert that uses the
28437c478bd9Sstevel@tonic-gateCN smtp.endmail.org.
28447c478bd9Sstevel@tonic-gate
28457c478bd9Sstevel@tonic-gateTLS_Srv:secure.example.com      ENCR:112
28467c478bd9Sstevel@tonic-gateTLS_Clt:laptop.example.com      PERM+VERIFY:112
28477c478bd9Sstevel@tonic-gateTLS_Rcpt:darth@endmail.org	ENCR:112+CN:smtp.endmail.org
28487c478bd9Sstevel@tonic-gate
28497c478bd9Sstevel@tonic-gate
28507c478bd9Sstevel@tonic-gateDisabling STARTTLS And Setting SMTP Server Features
28517c478bd9Sstevel@tonic-gate---------------------------------------------------
28527c478bd9Sstevel@tonic-gate
28537c478bd9Sstevel@tonic-gateBy default STARTTLS is used whenever possible.  However, there are
28547c478bd9Sstevel@tonic-gatesome broken MTAs that don't properly implement STARTTLS.  To be able
28557c478bd9Sstevel@tonic-gateto send to (or receive from) those MTAs, the ruleset try_tls
28567c478bd9Sstevel@tonic-gate(srv_features) can be used that work together with the access map.
28577c478bd9Sstevel@tonic-gateEntries for the access map must be tagged with Try_TLS (Srv_Features)
28587c478bd9Sstevel@tonic-gateand refer to the hostname or IP address of the connecting system.
28597c478bd9Sstevel@tonic-gateA default case can be specified by using just the tag.  For example,
28607c478bd9Sstevel@tonic-gatethe following entries in the access map:
28617c478bd9Sstevel@tonic-gate
28627c478bd9Sstevel@tonic-gate	Try_TLS:broken.server	NO
28637c478bd9Sstevel@tonic-gate	Srv_Features:my.domain	v
28647c478bd9Sstevel@tonic-gate	Srv_Features:		V
28657c478bd9Sstevel@tonic-gate
28667c478bd9Sstevel@tonic-gatewill turn off STARTTLS when sending to broken.server (or any host
28677c478bd9Sstevel@tonic-gatein that domain), and request a client certificate during the TLS
28687c478bd9Sstevel@tonic-gatehandshake only for hosts in my.domain.  The valid entries on the RHS
28697c478bd9Sstevel@tonic-gatefor Srv_Features are listed in the Sendmail Installation and
28707c478bd9Sstevel@tonic-gateOperations Guide.
28717c478bd9Sstevel@tonic-gate
28727c478bd9Sstevel@tonic-gate
28737c478bd9Sstevel@tonic-gateReceived: Header
28747c478bd9Sstevel@tonic-gate----------------
28757c478bd9Sstevel@tonic-gate
28767c478bd9Sstevel@tonic-gateThe Received: header reveals whether STARTTLS has been used.  It contains an
28777c478bd9Sstevel@tonic-gateextra line:
28787c478bd9Sstevel@tonic-gate
28797c478bd9Sstevel@tonic-gate(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})
28807c478bd9Sstevel@tonic-gate
28817c478bd9Sstevel@tonic-gate
28827c478bd9Sstevel@tonic-gate+--------------------------------+
28837c478bd9Sstevel@tonic-gate| ADDING NEW MAILERS OR RULESETS |
28847c478bd9Sstevel@tonic-gate+--------------------------------+
28857c478bd9Sstevel@tonic-gate
28867c478bd9Sstevel@tonic-gateSometimes you may need to add entirely new mailers or rulesets.  They
28877c478bd9Sstevel@tonic-gateshould be introduced with the constructs MAILER_DEFINITIONS and
28887c478bd9Sstevel@tonic-gateLOCAL_RULESETS respectively.  For example:
28897c478bd9Sstevel@tonic-gate
28907c478bd9Sstevel@tonic-gate	MAILER_DEFINITIONS
28917c478bd9Sstevel@tonic-gate	Mmymailer, ...
28927c478bd9Sstevel@tonic-gate	...
28937c478bd9Sstevel@tonic-gate
28947c478bd9Sstevel@tonic-gate	LOCAL_RULESETS
28957c478bd9Sstevel@tonic-gate	Smyruleset
28967c478bd9Sstevel@tonic-gate	...
28977c478bd9Sstevel@tonic-gate
2898*49218d4fSjbeckLocal additions for the rulesets srv_features, try_tls, tls_rcpt,
2899*49218d4fSjbecktls_client, and tls_server can be made using LOCAL_SRV_FEATURES,
2900*49218d4fSjbeckLOCAL_TRY_TLS, LOCAL_TLS_RCPT, LOCAL_TLS_CLIENT, and LOCAL_TLS_SERVER,
2901*49218d4fSjbeckrespectively.  For example, to add a local ruleset that decides
2902*49218d4fSjbeckwhether to try STARTTLS in a sendmail client, use:
2903*49218d4fSjbeck
2904*49218d4fSjbeck	LOCAL_TRY_TLS
2905*49218d4fSjbeck	R...
2906*49218d4fSjbeck
29077c478bd9Sstevel@tonic-gateNote: you don't need to add a name for the ruleset, it is implicitly
29087c478bd9Sstevel@tonic-gatedefined by using the appropriate macro.
29097c478bd9Sstevel@tonic-gate
29107c478bd9Sstevel@tonic-gate
29117c478bd9Sstevel@tonic-gate+-------------------------+
29127c478bd9Sstevel@tonic-gate| ADDING NEW MAIL FILTERS |
29137c478bd9Sstevel@tonic-gate+-------------------------+
29147c478bd9Sstevel@tonic-gate
29157c478bd9Sstevel@tonic-gateSendmail supports mail filters to filter incoming SMTP messages according
29167c478bd9Sstevel@tonic-gateto the "Sendmail Mail Filter API" documentation.  These filters can be
29177c478bd9Sstevel@tonic-gateconfigured in your mc file using the two commands:
29187c478bd9Sstevel@tonic-gate
29197c478bd9Sstevel@tonic-gate	MAIL_FILTER(`name', `equates')
29207c478bd9Sstevel@tonic-gate	INPUT_MAIL_FILTER(`name', `equates')
29217c478bd9Sstevel@tonic-gate
29227c478bd9Sstevel@tonic-gateThe first command, MAIL_FILTER(), simply defines a filter with the given
29237c478bd9Sstevel@tonic-gatename and equates.  For example:
29247c478bd9Sstevel@tonic-gate
29257c478bd9Sstevel@tonic-gate	MAIL_FILTER(`archive', `S=local:/var/run/archivesock, F=R')
29267c478bd9Sstevel@tonic-gate
29277c478bd9Sstevel@tonic-gateThis creates the equivalent sendmail.cf entry:
29287c478bd9Sstevel@tonic-gate
29297c478bd9Sstevel@tonic-gate	Xarchive, S=local:/var/run/archivesock, F=R
29307c478bd9Sstevel@tonic-gate
29317c478bd9Sstevel@tonic-gateThe INPUT_MAIL_FILTER() command performs the same actions as MAIL_FILTER
29327c478bd9Sstevel@tonic-gatebut also populates the m4 variable `confINPUT_MAIL_FILTERS' with the name
29337c478bd9Sstevel@tonic-gateof the filter such that the filter will actually be called by sendmail.
29347c478bd9Sstevel@tonic-gate
29357c478bd9Sstevel@tonic-gateFor example, the two commands:
29367c478bd9Sstevel@tonic-gate
29377c478bd9Sstevel@tonic-gate	INPUT_MAIL_FILTER(`archive', `S=local:/var/run/archivesock, F=R')
29387c478bd9Sstevel@tonic-gate	INPUT_MAIL_FILTER(`spamcheck', `S=inet:2525@localhost, F=T')
29397c478bd9Sstevel@tonic-gate
29407c478bd9Sstevel@tonic-gateare equivalent to the three commands:
29417c478bd9Sstevel@tonic-gate
29427c478bd9Sstevel@tonic-gate	MAIL_FILTER(`archive', `S=local:/var/run/archivesock, F=R')
29437c478bd9Sstevel@tonic-gate	MAIL_FILTER(`spamcheck', `S=inet:2525@localhost, F=T')
29447c478bd9Sstevel@tonic-gate	define(`confINPUT_MAIL_FILTERS', `archive, spamcheck')
29457c478bd9Sstevel@tonic-gate
29467c478bd9Sstevel@tonic-gateIn general, INPUT_MAIL_FILTER() should be used unless you need to define
29477c478bd9Sstevel@tonic-gatemore filters than you want to use for `confINPUT_MAIL_FILTERS'.
29487c478bd9Sstevel@tonic-gate
29497c478bd9Sstevel@tonic-gateNote that setting `confINPUT_MAIL_FILTERS' after any INPUT_MAIL_FILTER()
29507c478bd9Sstevel@tonic-gatecommands will clear the list created by the prior INPUT_MAIL_FILTER()
29517c478bd9Sstevel@tonic-gatecommands.
29527c478bd9Sstevel@tonic-gate
29537c478bd9Sstevel@tonic-gate
29547c478bd9Sstevel@tonic-gate+-------------------------+
29557c478bd9Sstevel@tonic-gate| QUEUE GROUP DEFINITIONS |
29567c478bd9Sstevel@tonic-gate+-------------------------+
29577c478bd9Sstevel@tonic-gate
29587c478bd9Sstevel@tonic-gateIn addition to the queue directory (which is the default queue group
29597c478bd9Sstevel@tonic-gatecalled "mqueue"), sendmail can deal with multiple queue groups, which
29607c478bd9Sstevel@tonic-gateare collections of queue directories with the same behaviour.  Queue
29617c478bd9Sstevel@tonic-gategroups can be defined using the command:
29627c478bd9Sstevel@tonic-gate
29637c478bd9Sstevel@tonic-gate	QUEUE_GROUP(`name', `equates')
29647c478bd9Sstevel@tonic-gate
29657c478bd9Sstevel@tonic-gateFor details about queue groups, please see doc/op/op.{me,ps,txt}.
29667c478bd9Sstevel@tonic-gate
29677c478bd9Sstevel@tonic-gate+-------------------------------+
29687c478bd9Sstevel@tonic-gate| NON-SMTP BASED CONFIGURATIONS |
29697c478bd9Sstevel@tonic-gate+-------------------------------+
29707c478bd9Sstevel@tonic-gate
29717c478bd9Sstevel@tonic-gateThese configuration files are designed primarily for use by
29727c478bd9Sstevel@tonic-gateSMTP-based sites.  They may not be well tuned for UUCP-only or
29737c478bd9Sstevel@tonic-gateUUCP-primarily nodes (the latter is defined as a small local net
29747c478bd9Sstevel@tonic-gateconnected to the rest of the world via UUCP).  However, there is
29757c478bd9Sstevel@tonic-gateone hook to handle some special cases.
29767c478bd9Sstevel@tonic-gate
29777c478bd9Sstevel@tonic-gateYou can define a ``smart host'' that understands a richer address syntax
29787c478bd9Sstevel@tonic-gateusing:
29797c478bd9Sstevel@tonic-gate
29807c478bd9Sstevel@tonic-gate	define(`SMART_HOST', `mailer:hostname')
29817c478bd9Sstevel@tonic-gate
29827c478bd9Sstevel@tonic-gateIn this case, the ``mailer:'' defaults to "relay".  Any messages that
29837c478bd9Sstevel@tonic-gatecan't be handled using the usual UUCP rules are passed to this host.
29847c478bd9Sstevel@tonic-gate
29857c478bd9Sstevel@tonic-gateIf you are on a local SMTP-based net that connects to the outside
29867c478bd9Sstevel@tonic-gateworld via UUCP, you can use LOCAL_NET_CONFIG to add appropriate rules.
29877c478bd9Sstevel@tonic-gateFor example:
29887c478bd9Sstevel@tonic-gate
29897c478bd9Sstevel@tonic-gate	define(`SMART_HOST', `uucp-new:uunet')
29907c478bd9Sstevel@tonic-gate	LOCAL_NET_CONFIG
29917c478bd9Sstevel@tonic-gate	R$* < @ $* .$m. > $*	$#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3
29927c478bd9Sstevel@tonic-gate
29937c478bd9Sstevel@tonic-gateThis will cause all names that end in your domain name ($m) to be sent
29947c478bd9Sstevel@tonic-gatevia SMTP; anything else will be sent via uucp-new (smart UUCP) to uunet.
29957c478bd9Sstevel@tonic-gateIf you have FEATURE(`nocanonify'), you may need to omit the dots after
29967c478bd9Sstevel@tonic-gatethe $m.  If you are running a local DNS inside your domain which is
29977c478bd9Sstevel@tonic-gatenot otherwise connected to the outside world, you probably want to
29987c478bd9Sstevel@tonic-gateuse:
29997c478bd9Sstevel@tonic-gate
30007c478bd9Sstevel@tonic-gate	define(`SMART_HOST', `smtp:fire.wall.com')
30017c478bd9Sstevel@tonic-gate	LOCAL_NET_CONFIG
30027c478bd9Sstevel@tonic-gate	R$* < @ $* . > $*	$#smtp $@ $2. $: $1 < @ $2. > $3
30037c478bd9Sstevel@tonic-gate
30047c478bd9Sstevel@tonic-gateThat is, send directly only to things you found in your DNS lookup;
30057c478bd9Sstevel@tonic-gateanything else goes through SMART_HOST.
30067c478bd9Sstevel@tonic-gate
30077c478bd9Sstevel@tonic-gateYou may need to turn off the anti-spam rules in order to accept
30087c478bd9Sstevel@tonic-gateUUCP mail with FEATURE(`promiscuous_relay') and
30097c478bd9Sstevel@tonic-gateFEATURE(`accept_unresolvable_domains').
30107c478bd9Sstevel@tonic-gate
30117c478bd9Sstevel@tonic-gate
30127c478bd9Sstevel@tonic-gate+-----------+
30137c478bd9Sstevel@tonic-gate| WHO AM I? |
30147c478bd9Sstevel@tonic-gate+-----------+
30157c478bd9Sstevel@tonic-gate
30167c478bd9Sstevel@tonic-gateNormally, the $j macro is automatically defined to be your fully
30177c478bd9Sstevel@tonic-gatequalified domain name (FQDN).  Sendmail does this by getting your
30187c478bd9Sstevel@tonic-gatehost name using gethostname and then calling gethostbyname on the
30197c478bd9Sstevel@tonic-gateresult.  For example, in some environments gethostname returns
30207c478bd9Sstevel@tonic-gateonly the root of the host name (such as "foo"); gethostbyname is
30217c478bd9Sstevel@tonic-gatesupposed to return the FQDN ("foo.bar.com").  In some (fairly rare)
30227c478bd9Sstevel@tonic-gatecases, gethostbyname may fail to return the FQDN.  In this case
30237c478bd9Sstevel@tonic-gateyou MUST define confDOMAIN_NAME to be your fully qualified domain
30247c478bd9Sstevel@tonic-gatename.  This is usually done using:
30257c478bd9Sstevel@tonic-gate
30267c478bd9Sstevel@tonic-gate	Dmbar.com
30277c478bd9Sstevel@tonic-gate	define(`confDOMAIN_NAME', `$w.$m')dnl
30287c478bd9Sstevel@tonic-gate
30297c478bd9Sstevel@tonic-gate
30307c478bd9Sstevel@tonic-gate+-----------------------------------+
30317c478bd9Sstevel@tonic-gate| ACCEPTING MAIL FOR MULTIPLE NAMES |
30327c478bd9Sstevel@tonic-gate+-----------------------------------+
30337c478bd9Sstevel@tonic-gate
30347c478bd9Sstevel@tonic-gateIf your host is known by several different names, you need to augment
30357c478bd9Sstevel@tonic-gateclass {w}.  This is a list of names by which your host is known, and
30367c478bd9Sstevel@tonic-gateanything sent to an address using a host name in this list will be
30377c478bd9Sstevel@tonic-gatetreated as local mail.  You can do this in two ways:  either create the
30387c478bd9Sstevel@tonic-gatefile /etc/mail/local-host-names containing a list of your aliases (one per
30397c478bd9Sstevel@tonic-gateline), and use ``FEATURE(`use_cw_file')'' in the .mc file, or add
30407c478bd9Sstevel@tonic-gate``LOCAL_DOMAIN(`alias.host.name')''.  Be sure you use the fully-qualified
30417c478bd9Sstevel@tonic-gatename of the host, rather than a short name.
30427c478bd9Sstevel@tonic-gate
30437c478bd9Sstevel@tonic-gateIf you want to have different address in different domains, take
30447c478bd9Sstevel@tonic-gatea look at the virtusertable feature, which is also explained at
30457c478bd9Sstevel@tonic-gatehttp://www.sendmail.org/virtual-hosting.html
30467c478bd9Sstevel@tonic-gate
30477c478bd9Sstevel@tonic-gate
30487c478bd9Sstevel@tonic-gate+--------------------+
30497c478bd9Sstevel@tonic-gate| USING MAILERTABLES |
30507c478bd9Sstevel@tonic-gate+--------------------+
30517c478bd9Sstevel@tonic-gate
30527c478bd9Sstevel@tonic-gateTo use FEATURE(`mailertable'), you will have to create an external
30537c478bd9Sstevel@tonic-gatedatabase containing the routing information for various domains.
30547c478bd9Sstevel@tonic-gateFor example, a mailertable file in text format might be:
30557c478bd9Sstevel@tonic-gate
30567c478bd9Sstevel@tonic-gate	.my.domain		xnet:%1.my.domain
30577c478bd9Sstevel@tonic-gate	uuhost1.my.domain	uucp-new:uuhost1
30587c478bd9Sstevel@tonic-gate	.bitnet			smtp:relay.bit.net
30597c478bd9Sstevel@tonic-gate
30607c478bd9Sstevel@tonic-gateThis should normally be stored in /etc/mail/mailertable.  The actual
30617c478bd9Sstevel@tonic-gatedatabase version of the mailertable is built using:
30627c478bd9Sstevel@tonic-gate
30637c478bd9Sstevel@tonic-gate	makemap hash /etc/mail/mailertable < /etc/mail/mailertable
30647c478bd9Sstevel@tonic-gate
30657c478bd9Sstevel@tonic-gateThe semantics are simple.  Any LHS entry that does not begin with
30667c478bd9Sstevel@tonic-gatea dot matches the full host name indicated.  LHS entries beginning
30677c478bd9Sstevel@tonic-gatewith a dot match anything ending with that domain name (including
30687c478bd9Sstevel@tonic-gatethe leading dot) -- that is, they can be thought of as having a
30697c478bd9Sstevel@tonic-gateleading ".+" regular expression pattern for a non-empty sequence of
30707c478bd9Sstevel@tonic-gatecharacters.  Matching is done in order of most-to-least qualified
30717c478bd9Sstevel@tonic-gate-- for example, even though ".my.domain" is listed first in the
30727c478bd9Sstevel@tonic-gateabove example, an entry of "uuhost1.my.domain" will match the second
30737c478bd9Sstevel@tonic-gateentry since it is more explicit.  Note: e-mail to "user@my.domain"
30747c478bd9Sstevel@tonic-gatedoes not match any entry in the above table.  You need to have
30757c478bd9Sstevel@tonic-gatesomething like:
30767c478bd9Sstevel@tonic-gate
30777c478bd9Sstevel@tonic-gate	my.domain		esmtp:host.my.domain
30787c478bd9Sstevel@tonic-gate
30797c478bd9Sstevel@tonic-gateThe RHS should always be a "mailer:host" pair.  The mailer is the
30807c478bd9Sstevel@tonic-gateconfiguration name of a mailer (that is, an M line in the
30817c478bd9Sstevel@tonic-gatesendmail.cf file).  The "host" will be the hostname passed to
30827c478bd9Sstevel@tonic-gatethat mailer.  In domain-based matches (that is, those with leading
30837c478bd9Sstevel@tonic-gatedots) the "%1" may be used to interpolate the wildcarded part of
30847c478bd9Sstevel@tonic-gatethe host name.  For example, the first line above sends everything
30857c478bd9Sstevel@tonic-gateaddressed to "anything.my.domain" to that same host name, but using
30867c478bd9Sstevel@tonic-gatethe (presumably experimental) xnet mailer.
30877c478bd9Sstevel@tonic-gate
30887c478bd9Sstevel@tonic-gateIn some cases you may want to temporarily turn off MX records,
30897c478bd9Sstevel@tonic-gateparticularly on gateways.  For example, you may want to MX
30907c478bd9Sstevel@tonic-gateeverything in a domain to one machine that then forwards it
30917c478bd9Sstevel@tonic-gatedirectly.  To do this, you might use the DNS configuration:
30927c478bd9Sstevel@tonic-gate
30937c478bd9Sstevel@tonic-gate	*.domain.	IN	MX	0	relay.machine
30947c478bd9Sstevel@tonic-gate
30957c478bd9Sstevel@tonic-gateand on relay.machine use the mailertable:
30967c478bd9Sstevel@tonic-gate
30977c478bd9Sstevel@tonic-gate	.domain		smtp:[gateway.domain]
30987c478bd9Sstevel@tonic-gate
30997c478bd9Sstevel@tonic-gateThe [square brackets] turn off MX records for this host only.
31007c478bd9Sstevel@tonic-gateIf you didn't do this, the mailertable would use the MX record
31017c478bd9Sstevel@tonic-gateagain, which would give you an MX loop.  Note that the use of
31027c478bd9Sstevel@tonic-gatewildcard MX records is almost always a bad idea.  Please avoid
31037c478bd9Sstevel@tonic-gateusing them if possible.
31047c478bd9Sstevel@tonic-gate
31057c478bd9Sstevel@tonic-gate
31067c478bd9Sstevel@tonic-gate+--------------------------------+
31077c478bd9Sstevel@tonic-gate| USING USERDB TO MAP FULL NAMES |
31087c478bd9Sstevel@tonic-gate+--------------------------------+
31097c478bd9Sstevel@tonic-gate
31107c478bd9Sstevel@tonic-gateThe user database was not originally intended for mapping full names
31117c478bd9Sstevel@tonic-gateto login names (e.g., Eric.Allman => eric), but some people are using
31127c478bd9Sstevel@tonic-gateit that way.  (it is recommended that you set up aliases for this
31137c478bd9Sstevel@tonic-gatepurpose instead -- since you can specify multiple alias files, this
31147c478bd9Sstevel@tonic-gateis fairly easy.)  The intent was to locate the default maildrop at
31157c478bd9Sstevel@tonic-gatea site, but allow you to override this by sending to a specific host.
31167c478bd9Sstevel@tonic-gate
31177c478bd9Sstevel@tonic-gateIf you decide to set up the user database in this fashion, it is
31187c478bd9Sstevel@tonic-gateimperative that you not use FEATURE(`stickyhost') -- otherwise,
31197c478bd9Sstevel@tonic-gatee-mail sent to Full.Name@local.host.name will be rejected.
31207c478bd9Sstevel@tonic-gate
31217c478bd9Sstevel@tonic-gateTo build the internal form of the user database, use:
31227c478bd9Sstevel@tonic-gate
31237c478bd9Sstevel@tonic-gate	makemap btree /etc/mail/userdb < /etc/mail/userdb.txt
31247c478bd9Sstevel@tonic-gate
31257c478bd9Sstevel@tonic-gateAs a general rule, it is an extremely bad idea to using full names
31267c478bd9Sstevel@tonic-gateas e-mail addresses, since they are not in any sense unique.  For
31277c478bd9Sstevel@tonic-gateexample, the UNIX software-development community has at least two
31287c478bd9Sstevel@tonic-gatewell-known Peter Deutsches, and at one time Bell Labs had two
31297c478bd9Sstevel@tonic-gateStephen R. Bournes with offices along the same hallway.  Which one
31307c478bd9Sstevel@tonic-gatewill be forced to suffer the indignity of being Stephen_R_Bourne_2?
31317c478bd9Sstevel@tonic-gateThe less famous of the two, or the one that was hired later?
31327c478bd9Sstevel@tonic-gate
31337c478bd9Sstevel@tonic-gateFinger should handle full names (and be fuzzy).  Mail should use
31347c478bd9Sstevel@tonic-gatehandles, and not be fuzzy.
31357c478bd9Sstevel@tonic-gate
31367c478bd9Sstevel@tonic-gate
31377c478bd9Sstevel@tonic-gate+--------------------------------+
31387c478bd9Sstevel@tonic-gate| MISCELLANEOUS SPECIAL FEATURES |
31397c478bd9Sstevel@tonic-gate+--------------------------------+
31407c478bd9Sstevel@tonic-gate
31417c478bd9Sstevel@tonic-gatePlussed users
31427c478bd9Sstevel@tonic-gate	Sometimes it is convenient to merge configuration on a
31437c478bd9Sstevel@tonic-gate	centralized mail machine, for example, to forward all
31447c478bd9Sstevel@tonic-gate	root mail to a mail server.  In this case it might be
31457c478bd9Sstevel@tonic-gate	useful to be able to treat the root addresses as a class
31467c478bd9Sstevel@tonic-gate	of addresses with subtle differences.  You can do this
31477c478bd9Sstevel@tonic-gate	using plussed users.  For example, a client might include
31487c478bd9Sstevel@tonic-gate	the alias:
31497c478bd9Sstevel@tonic-gate
31507c478bd9Sstevel@tonic-gate		root:  root+client1@server
31517c478bd9Sstevel@tonic-gate
31527c478bd9Sstevel@tonic-gate	On the server, this will match an alias for "root+client1".
31537c478bd9Sstevel@tonic-gate	If that is not found, the alias "root+*" will be tried,
31547c478bd9Sstevel@tonic-gate	then "root".
31557c478bd9Sstevel@tonic-gate
31567c478bd9Sstevel@tonic-gate
31577c478bd9Sstevel@tonic-gate+----------------+
31587c478bd9Sstevel@tonic-gate| SECURITY NOTES |
31597c478bd9Sstevel@tonic-gate+----------------+
31607c478bd9Sstevel@tonic-gate
31617c478bd9Sstevel@tonic-gateA lot of sendmail security comes down to you.  Sendmail 8 is much
31627c478bd9Sstevel@tonic-gatemore careful about checking for security problems than previous
31637c478bd9Sstevel@tonic-gateversions, but there are some things that you still need to watch
31647c478bd9Sstevel@tonic-gatefor.  In particular:
31657c478bd9Sstevel@tonic-gate
31667c478bd9Sstevel@tonic-gate* Make sure the aliases file is not writable except by trusted
31677c478bd9Sstevel@tonic-gate  system personnel.  This includes both the text and database
31687c478bd9Sstevel@tonic-gate  version.
31697c478bd9Sstevel@tonic-gate
31707c478bd9Sstevel@tonic-gate* Make sure that other files that sendmail reads, such as the
31717c478bd9Sstevel@tonic-gate  mailertable, are only writable by trusted system personnel.
31727c478bd9Sstevel@tonic-gate
31737c478bd9Sstevel@tonic-gate* The queue directory should not be world writable PARTICULARLY
31747c478bd9Sstevel@tonic-gate  if your system allows "file giveaways" (that is, if a non-root
31757c478bd9Sstevel@tonic-gate  user can chown any file they own to any other user).
31767c478bd9Sstevel@tonic-gate
31777c478bd9Sstevel@tonic-gate* If your system allows file giveaways, DO NOT create a publically
31787c478bd9Sstevel@tonic-gate  writable directory for forward files.  This will allow anyone
31797c478bd9Sstevel@tonic-gate  to steal anyone else's e-mail.  Instead, create a script that
31807c478bd9Sstevel@tonic-gate  copies the .forward file from users' home directories once a
31817c478bd9Sstevel@tonic-gate  night (if you want the non-NFS-mounted forward directory).
31827c478bd9Sstevel@tonic-gate
31837c478bd9Sstevel@tonic-gate* If your system allows file giveaways, you'll find that
31847c478bd9Sstevel@tonic-gate  sendmail is much less trusting of :include: files -- in
31857c478bd9Sstevel@tonic-gate  particular, you'll have to have /SENDMAIL/ANY/SHELL/ in
31867c478bd9Sstevel@tonic-gate  /etc/shells before they will be trusted (that is, before
31877c478bd9Sstevel@tonic-gate  files and programs listed in them will be honored).
31887c478bd9Sstevel@tonic-gate
31897c478bd9Sstevel@tonic-gateIn general, file giveaways are a mistake -- if you can turn them
31907c478bd9Sstevel@tonic-gateoff, do so.
31917c478bd9Sstevel@tonic-gate
31927c478bd9Sstevel@tonic-gate
31937c478bd9Sstevel@tonic-gate+--------------------------------+
31947c478bd9Sstevel@tonic-gate| TWEAKING CONFIGURATION OPTIONS |
31957c478bd9Sstevel@tonic-gate+--------------------------------+
31967c478bd9Sstevel@tonic-gate
31977c478bd9Sstevel@tonic-gateThere are a large number of configuration options that don't normally
31987c478bd9Sstevel@tonic-gateneed to be changed.  However, if you feel you need to tweak them,
31997c478bd9Sstevel@tonic-gateyou can define the following M4 variables. Note that some of these
32007c478bd9Sstevel@tonic-gatevariables require formats that are defined in RFC 2821 or RFC 2822.
32017c478bd9Sstevel@tonic-gateBefore changing them you need to make sure you do not violate those
32027c478bd9Sstevel@tonic-gate(and other relevant) RFCs.
32037c478bd9Sstevel@tonic-gate
32047c478bd9Sstevel@tonic-gateThis list is shown in four columns:  the name you define, the default
32057c478bd9Sstevel@tonic-gatevalue for that definition, the option or macro that is affected
32067c478bd9Sstevel@tonic-gate(either Ox for an option or Dx for a macro), and a brief description.
32077c478bd9Sstevel@tonic-gate
32087c478bd9Sstevel@tonic-gateSome options are likely to be deprecated in future versions -- that is,
32097c478bd9Sstevel@tonic-gatethe option is only included to provide back-compatibility.  These are
32107c478bd9Sstevel@tonic-gatemarked with "*".
32117c478bd9Sstevel@tonic-gate
32127c478bd9Sstevel@tonic-gateRemember that these options are M4 variables, and hence may need to
32137c478bd9Sstevel@tonic-gatebe quoted.  In particular, arguments with commas will usually have to
32147c478bd9Sstevel@tonic-gatebe ``double quoted, like this phrase'' to avoid having the comma
32157c478bd9Sstevel@tonic-gateconfuse things.  This is common for alias file definitions and for
32167c478bd9Sstevel@tonic-gatethe read timeout.
32177c478bd9Sstevel@tonic-gate
32187c478bd9Sstevel@tonic-gateM4 Variable Name	Configuration	[Default] & Description
32197c478bd9Sstevel@tonic-gate================	=============	=======================
32207c478bd9Sstevel@tonic-gateconfMAILER_NAME		$n macro	[MAILER-DAEMON] The sender name used
32217c478bd9Sstevel@tonic-gate					for internally generated outgoing
32227c478bd9Sstevel@tonic-gate					messages.
32237c478bd9Sstevel@tonic-gateconfDOMAIN_NAME		$j macro	If defined, sets $j.  This should
32247c478bd9Sstevel@tonic-gate					only be done if your system cannot
32257c478bd9Sstevel@tonic-gate					determine your local domain name,
32267c478bd9Sstevel@tonic-gate					and then it should be set to
32277c478bd9Sstevel@tonic-gate					$w.Foo.COM, where Foo.COM is your
32287c478bd9Sstevel@tonic-gate					domain name.
32297c478bd9Sstevel@tonic-gateconfCF_VERSION		$Z macro	If defined, this is appended to the
32307c478bd9Sstevel@tonic-gate					configuration version name.
32317c478bd9Sstevel@tonic-gateconfLDAP_CLUSTER	${sendmailMTACluster} macro
32327c478bd9Sstevel@tonic-gate					If defined, this is the LDAP
32337c478bd9Sstevel@tonic-gate					cluster to use for LDAP searches
32347c478bd9Sstevel@tonic-gate					as described above in ``USING LDAP
32357c478bd9Sstevel@tonic-gate					FOR ALIASES, MAPS, AND CLASSES''.
32367c478bd9Sstevel@tonic-gateconfFROM_HEADER		From:		[$?x$x <$g>$|$g$.] The format of an
32377c478bd9Sstevel@tonic-gate					internally generated From: address.
32387c478bd9Sstevel@tonic-gateconfRECEIVED_HEADER	Received:
32397c478bd9Sstevel@tonic-gate		[$?sfrom $s $.$?_($?s$|from $.$_)
32407c478bd9Sstevel@tonic-gate			$.$?{auth_type}(authenticated)
32417c478bd9Sstevel@tonic-gate			$.by $j ($v/$Z)$?r with $r$. id $i$?u
32427c478bd9Sstevel@tonic-gate			for $u; $|;
32437c478bd9Sstevel@tonic-gate			$.$b]
32447c478bd9Sstevel@tonic-gate					The format of the Received: header
32457c478bd9Sstevel@tonic-gate					in messages passed through this host.
32467c478bd9Sstevel@tonic-gate					It is unwise to try to change this.
32477c478bd9Sstevel@tonic-gateconfMESSAGEID_HEADER	Message-Id:	[<$t.$i@$j>] The format of an
32487c478bd9Sstevel@tonic-gate					internally generated Message-Id:
32497c478bd9Sstevel@tonic-gate					header.
32507c478bd9Sstevel@tonic-gateconfCW_FILE		Fw class	[/etc/mail/local-host-names] Name
32517c478bd9Sstevel@tonic-gate					of file used to get the local
32527c478bd9Sstevel@tonic-gate					additions to class {w} (local host
32537c478bd9Sstevel@tonic-gate					names).
32547c478bd9Sstevel@tonic-gateconfCT_FILE		Ft class	[/etc/mail/trusted-users] Name of
32557c478bd9Sstevel@tonic-gate					file used to get the local additions
32567c478bd9Sstevel@tonic-gate					to class {t} (trusted users).
32577c478bd9Sstevel@tonic-gateconfCR_FILE		FR class	[/etc/mail/relay-domains] Name of
32587c478bd9Sstevel@tonic-gate					file used to get the local additions
32597c478bd9Sstevel@tonic-gate					to class {R} (hosts allowed to relay).
32607c478bd9Sstevel@tonic-gateconfTRUSTED_USERS	Ct class	[no default] Names of users to add to
32617c478bd9Sstevel@tonic-gate					the list of trusted users.  This list
32627c478bd9Sstevel@tonic-gate					always includes root, uucp, and daemon.
32637c478bd9Sstevel@tonic-gate					See also FEATURE(`use_ct_file').
32647c478bd9Sstevel@tonic-gateconfTRUSTED_USER	TrustedUser	[no default] Trusted user for file
32657c478bd9Sstevel@tonic-gate					ownership and starting the daemon.
32667c478bd9Sstevel@tonic-gate					Not to be confused with
32677c478bd9Sstevel@tonic-gate					confTRUSTED_USERS (see above).
32687c478bd9Sstevel@tonic-gateconfSMTP_MAILER		-		[esmtp] The mailer name used when
32697c478bd9Sstevel@tonic-gate					SMTP connectivity is required.
32707c478bd9Sstevel@tonic-gate					One of "smtp", "smtp8",
32717c478bd9Sstevel@tonic-gate					"esmtp", or "dsmtp".
32727c478bd9Sstevel@tonic-gateconfUUCP_MAILER		-		[uucp-old] The mailer to be used by
32737c478bd9Sstevel@tonic-gate					default for bang-format recipient
32747c478bd9Sstevel@tonic-gate					addresses.  See also discussion of
32757c478bd9Sstevel@tonic-gate					class {U}, class {Y}, and class {Z}
32767c478bd9Sstevel@tonic-gate					in the MAILER(`uucp') section.
32777c478bd9Sstevel@tonic-gateconfLOCAL_MAILER	-		[local] The mailer name used when
32787c478bd9Sstevel@tonic-gate					local connectivity is required.
32797c478bd9Sstevel@tonic-gate					Almost always "local".
32807c478bd9Sstevel@tonic-gateconfRELAY_MAILER	-		[relay] The default mailer name used
32817c478bd9Sstevel@tonic-gate					for relaying any mail (e.g., to a
32827c478bd9Sstevel@tonic-gate					BITNET_RELAY, a SMART_HOST, or
32837c478bd9Sstevel@tonic-gate					whatever).  This can reasonably be
32847c478bd9Sstevel@tonic-gate					"uucp-new" if you are on a
32857c478bd9Sstevel@tonic-gate					UUCP-connected site.
32867c478bd9Sstevel@tonic-gateconfSEVEN_BIT_INPUT	SevenBitInput	[False] Force input to seven bits?
32877c478bd9Sstevel@tonic-gateconfEIGHT_BIT_HANDLING	EightBitMode	[pass8] 8-bit data handling
32887c478bd9Sstevel@tonic-gateconfALIAS_WAIT		AliasWait	[10m] Time to wait for alias file
32897c478bd9Sstevel@tonic-gate					rebuild until you get bored and
32907c478bd9Sstevel@tonic-gate					decide that the apparently pending
32917c478bd9Sstevel@tonic-gate					rebuild failed.
32927c478bd9Sstevel@tonic-gateconfMIN_FREE_BLOCKS	MinFreeBlocks	[100] Minimum number of free blocks on
32937c478bd9Sstevel@tonic-gate					queue filesystem to accept SMTP mail.
32947c478bd9Sstevel@tonic-gate					(Prior to 8.7 this was minfree/maxsize,
32957c478bd9Sstevel@tonic-gate					where minfree was the number of free
32967c478bd9Sstevel@tonic-gate					blocks and maxsize was the maximum
32977c478bd9Sstevel@tonic-gate					message size.  Use confMAX_MESSAGE_SIZE
32987c478bd9Sstevel@tonic-gate					for the second value now.)
32997c478bd9Sstevel@tonic-gateconfMAX_MESSAGE_SIZE	MaxMessageSize	[infinite] The maximum size of messages
33007c478bd9Sstevel@tonic-gate					that will be accepted (in bytes).
33017c478bd9Sstevel@tonic-gateconfBLANK_SUB		BlankSub	[.] Blank (space) substitution
33027c478bd9Sstevel@tonic-gate					character.
33037c478bd9Sstevel@tonic-gateconfCON_EXPENSIVE	HoldExpensive	[False] Avoid connecting immediately
33047c478bd9Sstevel@tonic-gate					to mailers marked expensive.
33057c478bd9Sstevel@tonic-gateconfCHECKPOINT_INTERVAL	CheckpointInterval
33067c478bd9Sstevel@tonic-gate					[10] Checkpoint queue files every N
33077c478bd9Sstevel@tonic-gate					recipients.
33087c478bd9Sstevel@tonic-gateconfDELIVERY_MODE	DeliveryMode	[background] Default delivery mode.
33097c478bd9Sstevel@tonic-gateconfERROR_MODE		ErrorMode	[print] Error message mode.
33107c478bd9Sstevel@tonic-gateconfERROR_MESSAGE	ErrorHeader	[undefined] Error message header/file.
33117c478bd9Sstevel@tonic-gateconfSAVE_FROM_LINES	SaveFromLine	Save extra leading From_ lines.
33127c478bd9Sstevel@tonic-gateconfTEMP_FILE_MODE	TempFileMode	[0600] Temporary file mode.
33137c478bd9Sstevel@tonic-gateconfMATCH_GECOS		MatchGECOS	[False] Match GECOS field.
33147c478bd9Sstevel@tonic-gateconfMAX_HOP		MaxHopCount	[25] Maximum hop count.
33157c478bd9Sstevel@tonic-gateconfIGNORE_DOTS*	IgnoreDots	[False; always False in -bs or -bd
33167c478bd9Sstevel@tonic-gate					mode] Ignore dot as terminator for
33177c478bd9Sstevel@tonic-gate					incoming messages?
33187c478bd9Sstevel@tonic-gateconfBIND_OPTS		ResolverOptions	[undefined] Default options for DNS
33197c478bd9Sstevel@tonic-gate					resolver.
33207c478bd9Sstevel@tonic-gateconfMIME_FORMAT_ERRORS*	SendMimeErrors	[True] Send error messages as MIME-
33217c478bd9Sstevel@tonic-gate					encapsulated messages per RFC 1344.
33227c478bd9Sstevel@tonic-gateconfFORWARD_PATH	ForwardPath	[$z/.forward.$w:$z/.forward]
33237c478bd9Sstevel@tonic-gate					The colon-separated list of places to
33247c478bd9Sstevel@tonic-gate					search for .forward files.  N.B.: see
33257c478bd9Sstevel@tonic-gate					the Security Notes section.
33267c478bd9Sstevel@tonic-gateconfMCI_CACHE_SIZE	ConnectionCacheSize
33277c478bd9Sstevel@tonic-gate					[2] Size of open connection cache.
33287c478bd9Sstevel@tonic-gateconfMCI_CACHE_TIMEOUT	ConnectionCacheTimeout
33297c478bd9Sstevel@tonic-gate					[5m] Open connection cache timeout.
33307c478bd9Sstevel@tonic-gateconfHOST_STATUS_DIRECTORY HostStatusDirectory
33317c478bd9Sstevel@tonic-gate					[undefined] If set, host status is kept
33327c478bd9Sstevel@tonic-gate					on disk between sendmail runs in the
33337c478bd9Sstevel@tonic-gate					named directory tree.  This need not be
33347c478bd9Sstevel@tonic-gate					a full pathname, in which case it is
33357c478bd9Sstevel@tonic-gate					interpreted relative to the queue
33367c478bd9Sstevel@tonic-gate					directory.
33377c478bd9Sstevel@tonic-gateconfSINGLE_THREAD_DELIVERY  SingleThreadDelivery
33387c478bd9Sstevel@tonic-gate					[False] If this option and the
33397c478bd9Sstevel@tonic-gate					HostStatusDirectory option are both
33407c478bd9Sstevel@tonic-gate					set, single thread deliveries to other
33417c478bd9Sstevel@tonic-gate					hosts.  That is, don't allow any two
33427c478bd9Sstevel@tonic-gate					sendmails on this host to connect
33437c478bd9Sstevel@tonic-gate					simultaneously to any other single
33447c478bd9Sstevel@tonic-gate					host.  This can slow down delivery in
33457c478bd9Sstevel@tonic-gate					some cases, in particular since a
33467c478bd9Sstevel@tonic-gate					cached but otherwise idle connection
33477c478bd9Sstevel@tonic-gate					to a host will prevent other sendmails
33487c478bd9Sstevel@tonic-gate					from connecting to the other host.
33497c478bd9Sstevel@tonic-gateconfUSE_ERRORS_TO*	UseErrorsTo	[False] Use the Errors-To: header to
33507c478bd9Sstevel@tonic-gate					deliver error messages.  This should
33517c478bd9Sstevel@tonic-gate					not be necessary because of general
33527c478bd9Sstevel@tonic-gate					acceptance of the envelope/header
33537c478bd9Sstevel@tonic-gate					distinction.
33547c478bd9Sstevel@tonic-gateconfLOG_LEVEL		LogLevel	[9] Log level.
33557c478bd9Sstevel@tonic-gateconfME_TOO		MeToo		[True] Include sender in group
33567c478bd9Sstevel@tonic-gate					expansions.  This option is
33577c478bd9Sstevel@tonic-gate					deprecated and will be removed from
33587c478bd9Sstevel@tonic-gate					a future version.
33597c478bd9Sstevel@tonic-gateconfCHECK_ALIASES	CheckAliases	[False] Check RHS of aliases when
33607c478bd9Sstevel@tonic-gate					running newaliases.  Since this does
33617c478bd9Sstevel@tonic-gate					DNS lookups on every address, it can
33627c478bd9Sstevel@tonic-gate					slow down the alias rebuild process
33637c478bd9Sstevel@tonic-gate					considerably on large alias files.
33647c478bd9Sstevel@tonic-gateconfOLD_STYLE_HEADERS*	OldStyleHeaders	[True] Assume that headers without
33657c478bd9Sstevel@tonic-gate					special chars are old style.
33667c478bd9Sstevel@tonic-gateconfPRIVACY_FLAGS	PrivacyOptions	[authwarnings] Privacy flags.
33677c478bd9Sstevel@tonic-gateconfCOPY_ERRORS_TO	PostmasterCopy	[undefined] Address for additional
33687c478bd9Sstevel@tonic-gate					copies of all error messages.
33697c478bd9Sstevel@tonic-gateconfQUEUE_FACTOR	QueueFactor	[600000] Slope of queue-only function.
33707c478bd9Sstevel@tonic-gateconfQUEUE_FILE_MODE	QueueFileMode	[undefined] Default permissions for
33717c478bd9Sstevel@tonic-gate					queue files (octal).  If not set,
33727c478bd9Sstevel@tonic-gate					sendmail uses 0600 unless its real
33737c478bd9Sstevel@tonic-gate					and effective uid are different in
33747c478bd9Sstevel@tonic-gate					which case it uses 0644.
33757c478bd9Sstevel@tonic-gateconfDONT_PRUNE_ROUTES	DontPruneRoutes	[False] Don't prune down route-addr
33767c478bd9Sstevel@tonic-gate					syntax addresses to the minimum
33777c478bd9Sstevel@tonic-gate					possible.
33787c478bd9Sstevel@tonic-gateconfSAFE_QUEUE*		SuperSafe	[True] Commit all messages to disk
33797c478bd9Sstevel@tonic-gate					before forking.
33807c478bd9Sstevel@tonic-gateconfTO_INITIAL		Timeout.initial	[5m] The timeout waiting for a response
33817c478bd9Sstevel@tonic-gate					on the initial connect.
33827c478bd9Sstevel@tonic-gateconfTO_CONNECT		Timeout.connect	[0] The timeout waiting for an initial
33837c478bd9Sstevel@tonic-gate					connect() to complete.  This can only
33847c478bd9Sstevel@tonic-gate					shorten connection timeouts; the kernel
33857c478bd9Sstevel@tonic-gate					silently enforces an absolute maximum
33867c478bd9Sstevel@tonic-gate					(which varies depending on the system).
33877c478bd9Sstevel@tonic-gateconfTO_ICONNECT		Timeout.iconnect
33887c478bd9Sstevel@tonic-gate					[undefined] Like Timeout.connect, but
33897c478bd9Sstevel@tonic-gate					applies only to the very first attempt
33907c478bd9Sstevel@tonic-gate					to connect to a host in a message.
33917c478bd9Sstevel@tonic-gate					This allows a single very fast pass
33927c478bd9Sstevel@tonic-gate					followed by more careful delivery
33937c478bd9Sstevel@tonic-gate					attempts in the future.
33947c478bd9Sstevel@tonic-gateconfTO_ACONNECT		Timeout.aconnect
33957c478bd9Sstevel@tonic-gate					[0] The overall timeout waiting for
33967c478bd9Sstevel@tonic-gate					all connection for a single delivery
33977c478bd9Sstevel@tonic-gate					attempt to succeed.  If 0, no overall
33987c478bd9Sstevel@tonic-gate					limit is applied.
33997c478bd9Sstevel@tonic-gateconfTO_HELO		Timeout.helo	[5m] The timeout waiting for a response
34007c478bd9Sstevel@tonic-gate					to a HELO or EHLO command.
34017c478bd9Sstevel@tonic-gateconfTO_MAIL		Timeout.mail	[10m] The timeout waiting for a
34027c478bd9Sstevel@tonic-gate					response to the MAIL command.
34037c478bd9Sstevel@tonic-gateconfTO_RCPT		Timeout.rcpt	[1h] The timeout waiting for a response
34047c478bd9Sstevel@tonic-gate					to the RCPT command.
34057c478bd9Sstevel@tonic-gateconfTO_DATAINIT		Timeout.datainit
34067c478bd9Sstevel@tonic-gate					[5m] The timeout waiting for a 354
34077c478bd9Sstevel@tonic-gate					response from the DATA command.
34087c478bd9Sstevel@tonic-gateconfTO_DATABLOCK	Timeout.datablock
34097c478bd9Sstevel@tonic-gate					[1h] The timeout waiting for a block
34107c478bd9Sstevel@tonic-gate					during DATA phase.
34117c478bd9Sstevel@tonic-gateconfTO_DATAFINAL	Timeout.datafinal
34127c478bd9Sstevel@tonic-gate					[1h] The timeout waiting for a response
34137c478bd9Sstevel@tonic-gate					to the final "." that terminates a
34147c478bd9Sstevel@tonic-gate					message.
34157c478bd9Sstevel@tonic-gateconfTO_RSET		Timeout.rset	[5m] The timeout waiting for a response
34167c478bd9Sstevel@tonic-gate					to the RSET command.
34177c478bd9Sstevel@tonic-gateconfTO_QUIT		Timeout.quit	[2m] The timeout waiting for a response
34187c478bd9Sstevel@tonic-gate					to the QUIT command.
34197c478bd9Sstevel@tonic-gateconfTO_MISC		Timeout.misc	[2m] The timeout waiting for a response
34207c478bd9Sstevel@tonic-gate					to other SMTP commands.
34217c478bd9Sstevel@tonic-gateconfTO_COMMAND		Timeout.command	[1h] In server SMTP, the timeout
34227c478bd9Sstevel@tonic-gate					waiting	for a command to be issued.
34237c478bd9Sstevel@tonic-gateconfTO_IDENT		Timeout.ident	[5s] The timeout waiting for a
34247c478bd9Sstevel@tonic-gate					response to an IDENT query.
34257c478bd9Sstevel@tonic-gateconfTO_FILEOPEN		Timeout.fileopen
34267c478bd9Sstevel@tonic-gate					[60s] The timeout waiting for a file
34277c478bd9Sstevel@tonic-gate					(e.g., :include: file) to be opened.
34287c478bd9Sstevel@tonic-gateconfTO_LHLO		Timeout.lhlo	[2m] The timeout waiting for a response
34297c478bd9Sstevel@tonic-gate					to an LMTP LHLO command.
34307c478bd9Sstevel@tonic-gateconfTO_STARTTLS		Timeout.starttls
34317c478bd9Sstevel@tonic-gate					[1h] The timeout waiting for a
34327c478bd9Sstevel@tonic-gate					response to an SMTP STARTTLS command.
34337c478bd9Sstevel@tonic-gateconfTO_CONTROL		Timeout.control
34347c478bd9Sstevel@tonic-gate					[2m] The timeout for a complete
34357c478bd9Sstevel@tonic-gate					control socket transaction to complete.
34367c478bd9Sstevel@tonic-gateconfTO_QUEUERETURN	Timeout.queuereturn
34377c478bd9Sstevel@tonic-gate					[5d] The timeout before a message is
34387c478bd9Sstevel@tonic-gate					returned as undeliverable.
34397c478bd9Sstevel@tonic-gateconfTO_QUEUERETURN_NORMAL
34407c478bd9Sstevel@tonic-gate			Timeout.queuereturn.normal
34417c478bd9Sstevel@tonic-gate					[undefined] As above, for normal
34427c478bd9Sstevel@tonic-gate					priority messages.
34437c478bd9Sstevel@tonic-gateconfTO_QUEUERETURN_URGENT
34447c478bd9Sstevel@tonic-gate			Timeout.queuereturn.urgent
34457c478bd9Sstevel@tonic-gate					[undefined] As above, for urgent
34467c478bd9Sstevel@tonic-gate					priority messages.
34477c478bd9Sstevel@tonic-gateconfTO_QUEUERETURN_NONURGENT
34487c478bd9Sstevel@tonic-gate			Timeout.queuereturn.non-urgent
34497c478bd9Sstevel@tonic-gate					[undefined] As above, for non-urgent
34507c478bd9Sstevel@tonic-gate					(low) priority messages.
34517c478bd9Sstevel@tonic-gateconfTO_QUEUERETURN_DSN
34527c478bd9Sstevel@tonic-gate			Timeout.queuereturn.dsn
34537c478bd9Sstevel@tonic-gate					[undefined] As above, for delivery
34547c478bd9Sstevel@tonic-gate					status notification messages.
34557c478bd9Sstevel@tonic-gateconfTO_QUEUEWARN	Timeout.queuewarn
34567c478bd9Sstevel@tonic-gate					[4h] The timeout before a warning
34577c478bd9Sstevel@tonic-gate					message is sent to the sender telling
34587c478bd9Sstevel@tonic-gate					them that the message has been
34597c478bd9Sstevel@tonic-gate					deferred.
34607c478bd9Sstevel@tonic-gateconfTO_QUEUEWARN_NORMAL	Timeout.queuewarn.normal
34617c478bd9Sstevel@tonic-gate					[undefined] As above, for normal
34627c478bd9Sstevel@tonic-gate					priority messages.
34637c478bd9Sstevel@tonic-gateconfTO_QUEUEWARN_URGENT	Timeout.queuewarn.urgent
34647c478bd9Sstevel@tonic-gate					[undefined] As above, for urgent
34657c478bd9Sstevel@tonic-gate					priority messages.
34667c478bd9Sstevel@tonic-gateconfTO_QUEUEWARN_NONURGENT
34677c478bd9Sstevel@tonic-gate			Timeout.queuewarn.non-urgent
34687c478bd9Sstevel@tonic-gate					[undefined] As above, for non-urgent
34697c478bd9Sstevel@tonic-gate					(low) priority messages.
34707c478bd9Sstevel@tonic-gateconfTO_QUEUEWARN_DSN
34717c478bd9Sstevel@tonic-gate			Timeout.queuewarn.dsn
34727c478bd9Sstevel@tonic-gate					[undefined] As above, for delivery
34737c478bd9Sstevel@tonic-gate					status notification messages.
34747c478bd9Sstevel@tonic-gateconfTO_HOSTSTATUS	Timeout.hoststatus
34757c478bd9Sstevel@tonic-gate					[30m] How long information about host
34767c478bd9Sstevel@tonic-gate					statuses will be maintained before it
34777c478bd9Sstevel@tonic-gate					is considered stale and the host should
34787c478bd9Sstevel@tonic-gate					be retried.  This applies both within
34797c478bd9Sstevel@tonic-gate					a single queue run and to persistent
34807c478bd9Sstevel@tonic-gate					information (see below).
34817c478bd9Sstevel@tonic-gateconfTO_RESOLVER_RETRANS	Timeout.resolver.retrans
34827c478bd9Sstevel@tonic-gate					[varies] Sets the resolver's
34837c478bd9Sstevel@tonic-gate					retransmission time interval (in
34847c478bd9Sstevel@tonic-gate					seconds).  Sets both
34857c478bd9Sstevel@tonic-gate					Timeout.resolver.retrans.first and
34867c478bd9Sstevel@tonic-gate					Timeout.resolver.retrans.normal.
34877c478bd9Sstevel@tonic-gateconfTO_RESOLVER_RETRANS_FIRST  Timeout.resolver.retrans.first
34887c478bd9Sstevel@tonic-gate					[varies] Sets the resolver's
34897c478bd9Sstevel@tonic-gate					retransmission time interval (in
34907c478bd9Sstevel@tonic-gate					seconds) for the first attempt to
34917c478bd9Sstevel@tonic-gate					deliver a message.
34927c478bd9Sstevel@tonic-gateconfTO_RESOLVER_RETRANS_NORMAL  Timeout.resolver.retrans.normal
34937c478bd9Sstevel@tonic-gate					[varies] Sets the resolver's
34947c478bd9Sstevel@tonic-gate					retransmission time interval (in
34957c478bd9Sstevel@tonic-gate					seconds) for all resolver lookups
34967c478bd9Sstevel@tonic-gate					except the first delivery attempt.
34977c478bd9Sstevel@tonic-gateconfTO_RESOLVER_RETRY	Timeout.resolver.retry
34987c478bd9Sstevel@tonic-gate					[varies] Sets the number of times
34997c478bd9Sstevel@tonic-gate					to retransmit a resolver query.
35007c478bd9Sstevel@tonic-gate					Sets both
35017c478bd9Sstevel@tonic-gate					Timeout.resolver.retry.first and
35027c478bd9Sstevel@tonic-gate					Timeout.resolver.retry.normal.
35037c478bd9Sstevel@tonic-gateconfTO_RESOLVER_RETRY_FIRST  Timeout.resolver.retry.first
35047c478bd9Sstevel@tonic-gate					[varies] Sets the number of times
35057c478bd9Sstevel@tonic-gate					to retransmit a resolver query for
35067c478bd9Sstevel@tonic-gate					the first attempt to deliver a
35077c478bd9Sstevel@tonic-gate					message.
35087c478bd9Sstevel@tonic-gateconfTO_RESOLVER_RETRY_NORMAL  Timeout.resolver.retry.normal
35097c478bd9Sstevel@tonic-gate					[varies] Sets the number of times
35107c478bd9Sstevel@tonic-gate					to retransmit a resolver query for
35117c478bd9Sstevel@tonic-gate					all resolver lookups except the
35127c478bd9Sstevel@tonic-gate					first delivery attempt.
35137c478bd9Sstevel@tonic-gateconfTIME_ZONE		TimeZoneSpec	[USE_SYSTEM] Time zone info -- can be
35147c478bd9Sstevel@tonic-gate					USE_SYSTEM to use the system's idea,
35157c478bd9Sstevel@tonic-gate					USE_TZ to use the user's TZ envariable,
35167c478bd9Sstevel@tonic-gate					or something else to force that value.
35177c478bd9Sstevel@tonic-gateconfDEF_USER_ID		DefaultUser	[1:1] Default user id.
35187c478bd9Sstevel@tonic-gateconfUSERDB_SPEC		UserDatabaseSpec
35197c478bd9Sstevel@tonic-gate					[undefined] User database
35207c478bd9Sstevel@tonic-gate					specification.
35217c478bd9Sstevel@tonic-gateconfFALLBACK_MX		FallbackMXhost	[undefined] Fallback MX host.
35227c478bd9Sstevel@tonic-gateconfFALLBACK_SMARTHOST	FallbackSmartHost
35237c478bd9Sstevel@tonic-gate					[undefined] Fallback smart host.
35247c478bd9Sstevel@tonic-gateconfTRY_NULL_MX_LIST	TryNullMXList	[False] If this host is the best MX
35257c478bd9Sstevel@tonic-gate					for a host and other arrangements
35267c478bd9Sstevel@tonic-gate					haven't been made, try connecting
35277c478bd9Sstevel@tonic-gate					to the host directly; normally this
35287c478bd9Sstevel@tonic-gate					would be a config error.
35297c478bd9Sstevel@tonic-gateconfQUEUE_LA		QueueLA		[varies] Load average at which
35307c478bd9Sstevel@tonic-gate					queue-only function kicks in.
35317c478bd9Sstevel@tonic-gate					Default values is (8 * numproc)
35327c478bd9Sstevel@tonic-gate					where numproc is the number of
35337c478bd9Sstevel@tonic-gate					processors online (if that can be
35347c478bd9Sstevel@tonic-gate					determined).
35357c478bd9Sstevel@tonic-gateconfREFUSE_LA		RefuseLA	[varies] Load average at which
35367c478bd9Sstevel@tonic-gate					incoming SMTP connections are
35377c478bd9Sstevel@tonic-gate					refused.  Default values is (12 *
35387c478bd9Sstevel@tonic-gate					numproc) where numproc is the
35397c478bd9Sstevel@tonic-gate					number of processors online (if
35407c478bd9Sstevel@tonic-gate					that can be determined).
35417c478bd9Sstevel@tonic-gateconfREJECT_LOG_INTERVAL	RejectLogInterval	[3h] Log interval when
35427c478bd9Sstevel@tonic-gate					refusing connections for this long.
35437c478bd9Sstevel@tonic-gateconfDELAY_LA		DelayLA		[0] Load average at which sendmail
35447c478bd9Sstevel@tonic-gate					will sleep for one second on most
35457c478bd9Sstevel@tonic-gate					SMTP commands and before accepting
35467c478bd9Sstevel@tonic-gate					connections.  0 means no limit.
35477c478bd9Sstevel@tonic-gateconfMAX_ALIAS_RECURSION	MaxAliasRecursion
35487c478bd9Sstevel@tonic-gate					[10] Maximum depth of alias recursion.
35497c478bd9Sstevel@tonic-gateconfMAX_DAEMON_CHILDREN	MaxDaemonChildren
35507c478bd9Sstevel@tonic-gate					[undefined] The maximum number of
35517c478bd9Sstevel@tonic-gate					children the daemon will permit.  After
35527c478bd9Sstevel@tonic-gate					this number, connections will be
35537c478bd9Sstevel@tonic-gate					rejected.  If not set or <= 0, there is
35547c478bd9Sstevel@tonic-gate					no limit.
35557c478bd9Sstevel@tonic-gateconfMAX_HEADERS_LENGTH	MaxHeadersLength
35567c478bd9Sstevel@tonic-gate					[32768] Maximum length of the sum
35577c478bd9Sstevel@tonic-gate					of all headers.
35587c478bd9Sstevel@tonic-gateconfMAX_MIME_HEADER_LENGTH  MaxMimeHeaderLength
35597c478bd9Sstevel@tonic-gate					[undefined] Maximum length of
35607c478bd9Sstevel@tonic-gate					certain MIME header field values.
35617c478bd9Sstevel@tonic-gateconfCONNECTION_RATE_THROTTLE ConnectionRateThrottle
35627c478bd9Sstevel@tonic-gate					[undefined] The maximum number of
35637c478bd9Sstevel@tonic-gate					connections permitted per second per
35647c478bd9Sstevel@tonic-gate					daemon.  After this many connections
35657c478bd9Sstevel@tonic-gate					are accepted, further connections
35667c478bd9Sstevel@tonic-gate					will be delayed.  If not set or <= 0,
35677c478bd9Sstevel@tonic-gate					there is no limit.
35687c478bd9Sstevel@tonic-gateconfCONNECTION_RATE_WINDOW_SIZE ConnectionRateWindowSize
35697c478bd9Sstevel@tonic-gate					[60s] Define the length of the
35707c478bd9Sstevel@tonic-gate					interval for which the number of
35717c478bd9Sstevel@tonic-gate					incoming connections is maintained.
35727c478bd9Sstevel@tonic-gateconfWORK_RECIPIENT_FACTOR
35737c478bd9Sstevel@tonic-gate			RecipientFactor	[30000] Cost of each recipient.
35747c478bd9Sstevel@tonic-gateconfSEPARATE_PROC	ForkEachJob	[False] Run all deliveries in a
35757c478bd9Sstevel@tonic-gate					separate process.
35767c478bd9Sstevel@tonic-gateconfWORK_CLASS_FACTOR	ClassFactor	[1800] Priority multiplier for class.
35777c478bd9Sstevel@tonic-gateconfWORK_TIME_FACTOR	RetryFactor	[90000] Cost of each delivery attempt.
35787c478bd9Sstevel@tonic-gateconfQUEUE_SORT_ORDER	QueueSortOrder	[Priority] Queue sort algorithm:
35797c478bd9Sstevel@tonic-gate					Priority, Host, Filename, Random,
35807c478bd9Sstevel@tonic-gate					Modification, or Time.
35817c478bd9Sstevel@tonic-gateconfMIN_QUEUE_AGE	MinQueueAge	[0] The minimum amount of time a job
35827c478bd9Sstevel@tonic-gate					must sit in the queue between queue
35837c478bd9Sstevel@tonic-gate					runs.  This allows you to set the
35847c478bd9Sstevel@tonic-gate					queue run interval low for better
35857c478bd9Sstevel@tonic-gate					responsiveness without trying all
35867c478bd9Sstevel@tonic-gate					jobs in each run.
35877c478bd9Sstevel@tonic-gateconfDEF_CHAR_SET	DefaultCharSet	[unknown-8bit] When converting
35887c478bd9Sstevel@tonic-gate					unlabeled 8 bit input to MIME, the
35897c478bd9Sstevel@tonic-gate					character set to use by default.
35907c478bd9Sstevel@tonic-gateconfSERVICE_SWITCH_FILE	ServiceSwitchFile
35917c478bd9Sstevel@tonic-gate					[/etc/mail/service.switch] The file
35927c478bd9Sstevel@tonic-gate					to use for the service switch on
35937c478bd9Sstevel@tonic-gate					systems that do not have a
35947c478bd9Sstevel@tonic-gate					system-defined switch.
35957c478bd9Sstevel@tonic-gateconfHOSTS_FILE		HostsFile	[/etc/hosts] The file to use when doing
35967c478bd9Sstevel@tonic-gate					"file" type access of hosts names.
35977c478bd9Sstevel@tonic-gateconfDIAL_DELAY		DialDelay	[0s] If a connection fails, wait this
35987c478bd9Sstevel@tonic-gate					long and try again.  Zero means "don't
35997c478bd9Sstevel@tonic-gate					retry".  This is to allow "dial on
36007c478bd9Sstevel@tonic-gate					demand" connections to have enough time
36017c478bd9Sstevel@tonic-gate					to complete a connection.
36027c478bd9Sstevel@tonic-gateconfNO_RCPT_ACTION	NoRecipientAction
36037c478bd9Sstevel@tonic-gate					[none] What to do if there are no legal
36047c478bd9Sstevel@tonic-gate					recipient fields (To:, Cc: or Bcc:)
36057c478bd9Sstevel@tonic-gate					in the message.  Legal values can
36067c478bd9Sstevel@tonic-gate					be "none" to just leave the
36077c478bd9Sstevel@tonic-gate					nonconforming message as is, "add-to"
36087c478bd9Sstevel@tonic-gate					to add a To: header with all the
36097c478bd9Sstevel@tonic-gate					known recipients (which may expose
36107c478bd9Sstevel@tonic-gate					blind recipients), "add-apparently-to"
36117c478bd9Sstevel@tonic-gate					to do the same but use Apparently-To:
36127c478bd9Sstevel@tonic-gate					instead of To: (strongly discouraged
36137c478bd9Sstevel@tonic-gate					in accordance with IETF standards),
36147c478bd9Sstevel@tonic-gate					"add-bcc" to add an empty Bcc:
36157c478bd9Sstevel@tonic-gate					header, or "add-to-undisclosed" to
36167c478bd9Sstevel@tonic-gate					add the header
36177c478bd9Sstevel@tonic-gate					``To: undisclosed-recipients:;''.
36187c478bd9Sstevel@tonic-gateconfSAFE_FILE_ENV	SafeFileEnvironment
36197c478bd9Sstevel@tonic-gate					[undefined] If set, sendmail will do a
36207c478bd9Sstevel@tonic-gate					chroot() into this directory before
36217c478bd9Sstevel@tonic-gate					writing files.
36227c478bd9Sstevel@tonic-gateconfCOLON_OK_IN_ADDR	ColonOkInAddr	[True unless Configuration Level > 6]
36237c478bd9Sstevel@tonic-gate					If set, colons are treated as a regular
36247c478bd9Sstevel@tonic-gate					character in addresses.  If not set,
36257c478bd9Sstevel@tonic-gate					they are treated as the introducer to
36267c478bd9Sstevel@tonic-gate					the RFC 822 "group" syntax.  Colons are
36277c478bd9Sstevel@tonic-gate					handled properly in route-addrs.  This
36287c478bd9Sstevel@tonic-gate					option defaults on for V5 and lower
36297c478bd9Sstevel@tonic-gate					configuration files.
36307c478bd9Sstevel@tonic-gateconfMAX_QUEUE_RUN_SIZE	MaxQueueRunSize	[0] If set, limit the maximum size of
36317c478bd9Sstevel@tonic-gate					any given queue run to this number of
36327c478bd9Sstevel@tonic-gate					entries.  Essentially, this will stop
36337c478bd9Sstevel@tonic-gate					reading each queue directory after this
36347c478bd9Sstevel@tonic-gate					number of entries are reached; it does
36357c478bd9Sstevel@tonic-gate					_not_ pick the highest priority jobs,
36367c478bd9Sstevel@tonic-gate					so this should be as large as your
36377c478bd9Sstevel@tonic-gate					system can tolerate.  If not set, there
36387c478bd9Sstevel@tonic-gate					is no limit.
36397c478bd9Sstevel@tonic-gateconfMAX_QUEUE_CHILDREN	MaxQueueChildren
36407c478bd9Sstevel@tonic-gate					[undefined] Limits the maximum number
36417c478bd9Sstevel@tonic-gate					of concurrent queue runners active.
36427c478bd9Sstevel@tonic-gate					This is to keep system resources used
36437c478bd9Sstevel@tonic-gate					within a reasonable limit.  Relates to
36447c478bd9Sstevel@tonic-gate					Queue Groups and ForkEachJob.
36457c478bd9Sstevel@tonic-gateconfMAX_RUNNERS_PER_QUEUE	MaxRunnersPerQueue
36467c478bd9Sstevel@tonic-gate					[1] Only active when MaxQueueChildren
36477c478bd9Sstevel@tonic-gate					defined.  Controls the maximum number
36487c478bd9Sstevel@tonic-gate					of queue runners (aka queue children)
36497c478bd9Sstevel@tonic-gate					active at the same time in a work
36507c478bd9Sstevel@tonic-gate					group.  See also MaxQueueChildren.
36517c478bd9Sstevel@tonic-gateconfDONT_EXPAND_CNAMES	DontExpandCnames
36527c478bd9Sstevel@tonic-gate					[False] If set, $[ ... $] lookups that
36537c478bd9Sstevel@tonic-gate					do DNS based lookups do not expand
36547c478bd9Sstevel@tonic-gate					CNAME records.  This currently violates
36557c478bd9Sstevel@tonic-gate					the published standards, but the IETF
36567c478bd9Sstevel@tonic-gate					seems to be moving toward legalizing
36577c478bd9Sstevel@tonic-gate					this.  For example, if "FTP.Foo.ORG"
36587c478bd9Sstevel@tonic-gate					is a CNAME for "Cruft.Foo.ORG", then
36597c478bd9Sstevel@tonic-gate					with this option set a lookup of
36607c478bd9Sstevel@tonic-gate					"FTP" will return "FTP.Foo.ORG"; if
36617c478bd9Sstevel@tonic-gate					clear it returns "Cruft.FOO.ORG".  N.B.
36627c478bd9Sstevel@tonic-gate					you may not see any effect until your
36637c478bd9Sstevel@tonic-gate					downstream neighbors stop doing CNAME
36647c478bd9Sstevel@tonic-gate					lookups as well.
36657c478bd9Sstevel@tonic-gateconfFROM_LINE		UnixFromLine	[From $g $d] The From_ line used
36667c478bd9Sstevel@tonic-gate					when sending to files or programs.
36677c478bd9Sstevel@tonic-gateconfSINGLE_LINE_FROM_HEADER  SingleLineFromHeader
36687c478bd9Sstevel@tonic-gate					[False] From: lines that have
36697c478bd9Sstevel@tonic-gate					embedded newlines are unwrapped
36707c478bd9Sstevel@tonic-gate					onto one line.
36717c478bd9Sstevel@tonic-gateconfALLOW_BOGUS_HELO	AllowBogusHELO	[False] Allow HELO SMTP command that
36727c478bd9Sstevel@tonic-gate					does not include a host name.
36737c478bd9Sstevel@tonic-gateconfMUST_QUOTE_CHARS	MustQuoteChars	[.'] Characters to be quoted in a full
36747c478bd9Sstevel@tonic-gate					name phrase (@,;:\()[] are automatic).
36757c478bd9Sstevel@tonic-gateconfOPERATORS		OperatorChars	[.:%@!^/[]+] Address operator
36767c478bd9Sstevel@tonic-gate					characters.
36777c478bd9Sstevel@tonic-gateconfSMTP_LOGIN_MSG	SmtpGreetingMessage
36787c478bd9Sstevel@tonic-gate					[$j Sendmail $v/$Z; $b]
36797c478bd9Sstevel@tonic-gate					The initial (spontaneous) SMTP
36807c478bd9Sstevel@tonic-gate					greeting message.  The word "ESMTP"
36817c478bd9Sstevel@tonic-gate					will be inserted between the first and
36827c478bd9Sstevel@tonic-gate					second words to convince other
36837c478bd9Sstevel@tonic-gate					sendmails to try to speak ESMTP.
36847c478bd9Sstevel@tonic-gateconfDONT_INIT_GROUPS	DontInitGroups	[False] If set, the initgroups(3)
36857c478bd9Sstevel@tonic-gate					routine will never be invoked.  You
36867c478bd9Sstevel@tonic-gate					might want to do this if you are
36877c478bd9Sstevel@tonic-gate					running NIS and you have a large group
36887c478bd9Sstevel@tonic-gate					map, since this call does a sequential
36897c478bd9Sstevel@tonic-gate					scan of the map; in a large site this
36907c478bd9Sstevel@tonic-gate					can cause your ypserv to run
36917c478bd9Sstevel@tonic-gate					essentially full time.  If you set
36927c478bd9Sstevel@tonic-gate					this, agents run on behalf of users
36937c478bd9Sstevel@tonic-gate					will only have their primary
36947c478bd9Sstevel@tonic-gate					(/etc/passwd) group permissions.
36957c478bd9Sstevel@tonic-gateconfUNSAFE_GROUP_WRITES	UnsafeGroupWrites
3696*49218d4fSjbeck					[True] If set, group-writable
36977c478bd9Sstevel@tonic-gate					:include: and .forward files are
36987c478bd9Sstevel@tonic-gate					considered "unsafe", that is, programs
36997c478bd9Sstevel@tonic-gate					and files cannot be directly referenced
37007c478bd9Sstevel@tonic-gate					from such files.  World-writable files
37017c478bd9Sstevel@tonic-gate					are always considered unsafe.
3702*49218d4fSjbeck					Notice: this option is deprecated and
3703*49218d4fSjbeck					will be removed in future versions;
3704*49218d4fSjbeck					Set GroupWritableForwardFileSafe
3705*49218d4fSjbeck					and GroupWritableIncludeFileSafe in
3706*49218d4fSjbeck					DontBlameSendmail if required.
37077c478bd9Sstevel@tonic-gateconfCONNECT_ONLY_TO	ConnectOnlyTo	[undefined] override connection
37087c478bd9Sstevel@tonic-gate					address (for testing).
37097c478bd9Sstevel@tonic-gateconfCONTROL_SOCKET_NAME	ControlSocketName
37107c478bd9Sstevel@tonic-gate					[undefined] Control socket for daemon
37117c478bd9Sstevel@tonic-gate					management.
37127c478bd9Sstevel@tonic-gateconfDOUBLE_BOUNCE_ADDRESS  DoubleBounceAddress
37137c478bd9Sstevel@tonic-gate					[postmaster] If an error occurs when
37147c478bd9Sstevel@tonic-gate					sending an error message, send that
37157c478bd9Sstevel@tonic-gate					"double bounce" error message to this
37167c478bd9Sstevel@tonic-gate					address.  If it expands to an empty
37177c478bd9Sstevel@tonic-gate					string, double bounces are dropped.
37187c478bd9Sstevel@tonic-gateconfDEAD_LETTER_DROP	DeadLetterDrop	[undefined] Filename to save bounce
37197c478bd9Sstevel@tonic-gate					messages which could not be returned
37207c478bd9Sstevel@tonic-gate					to the user or sent to postmaster.
37217c478bd9Sstevel@tonic-gate					If not set, the queue file will
37227c478bd9Sstevel@tonic-gate					be renamed.
37237c478bd9Sstevel@tonic-gateconfRRT_IMPLIES_DSN	RrtImpliesDsn	[False] Return-Receipt-To: header
37247c478bd9Sstevel@tonic-gate					implies DSN request.
37257c478bd9Sstevel@tonic-gateconfRUN_AS_USER		RunAsUser	[undefined] If set, become this user
37267c478bd9Sstevel@tonic-gate					when reading and delivering mail.
37277c478bd9Sstevel@tonic-gate					Causes all file reads (e.g., .forward
37287c478bd9Sstevel@tonic-gate					and :include: files) to be done as
37297c478bd9Sstevel@tonic-gate					this user.  Also, all programs will
37307c478bd9Sstevel@tonic-gate					be run as this user, and all output
37317c478bd9Sstevel@tonic-gate					files will be written as this user.
37327c478bd9Sstevel@tonic-gateconfMAX_RCPTS_PER_MESSAGE  MaxRecipientsPerMessage
37337c478bd9Sstevel@tonic-gate					[infinite] If set, allow no more than
37347c478bd9Sstevel@tonic-gate					the specified number of recipients in
37357c478bd9Sstevel@tonic-gate					an SMTP envelope.  Further recipients
37367c478bd9Sstevel@tonic-gate					receive a 452 error code (i.e., they
37377c478bd9Sstevel@tonic-gate					are deferred for the next delivery
37387c478bd9Sstevel@tonic-gate					attempt).
37397c478bd9Sstevel@tonic-gateconfBAD_RCPT_THROTTLE	BadRcptThrottle	[infinite] If set and the specified
37407c478bd9Sstevel@tonic-gate					number of recipients in a single SMTP
37417c478bd9Sstevel@tonic-gate					transaction have been rejected, sleep
37427c478bd9Sstevel@tonic-gate					for one second after each subsequent
37437c478bd9Sstevel@tonic-gate					RCPT command in that transaction.
37447c478bd9Sstevel@tonic-gateconfDONT_PROBE_INTERFACES  DontProbeInterfaces
37457c478bd9Sstevel@tonic-gate					[False] If set, sendmail will _not_
37467c478bd9Sstevel@tonic-gate					insert the names and addresses of any
37477c478bd9Sstevel@tonic-gate					local interfaces into class {w}
37487c478bd9Sstevel@tonic-gate					(list of known "equivalent" addresses).
37497c478bd9Sstevel@tonic-gate					If you set this, you must also include
37507c478bd9Sstevel@tonic-gate					some support for these addresses (e.g.,
37517c478bd9Sstevel@tonic-gate					in a mailertable entry) -- otherwise,
37527c478bd9Sstevel@tonic-gate					mail to addresses in this list will
37537c478bd9Sstevel@tonic-gate					bounce with a configuration error.
37547c478bd9Sstevel@tonic-gate					If set to "loopback" (without
37557c478bd9Sstevel@tonic-gate					quotes), sendmail will skip
37567c478bd9Sstevel@tonic-gate					loopback interfaces (e.g., "lo0").
37577c478bd9Sstevel@tonic-gateconfPID_FILE		PidFile		[system dependent] Location of pid
37587c478bd9Sstevel@tonic-gate					file.
37597c478bd9Sstevel@tonic-gateconfPROCESS_TITLE_PREFIX  ProcessTitlePrefix
37607c478bd9Sstevel@tonic-gate					[undefined] Prefix string for the
37617c478bd9Sstevel@tonic-gate					process title shown on 'ps' listings.
37627c478bd9Sstevel@tonic-gateconfDONT_BLAME_SENDMAIL	DontBlameSendmail
37637c478bd9Sstevel@tonic-gate					[safe] Override sendmail's file
37647c478bd9Sstevel@tonic-gate					safety checks.  This will definitely
37657c478bd9Sstevel@tonic-gate					compromise system security and should
37667c478bd9Sstevel@tonic-gate					not be used unless absolutely
37677c478bd9Sstevel@tonic-gate					necessary.
37687c478bd9Sstevel@tonic-gateconfREJECT_MSG		-		[550 Access denied] The message
37697c478bd9Sstevel@tonic-gate					given if the access database contains
37707c478bd9Sstevel@tonic-gate					REJECT in the value portion.
37717c478bd9Sstevel@tonic-gateconfRELAY_MSG		-		[550 Relaying denied] The message
37727c478bd9Sstevel@tonic-gate					given if an unauthorized relaying
37737c478bd9Sstevel@tonic-gate					attempt is rejected.
37747c478bd9Sstevel@tonic-gateconfDF_BUFFER_SIZE	DataFileBufferSize
37757c478bd9Sstevel@tonic-gate					[4096] The maximum size of a
37767c478bd9Sstevel@tonic-gate					memory-buffered data (df) file
37777c478bd9Sstevel@tonic-gate					before a disk-based file is used.
37787c478bd9Sstevel@tonic-gateconfXF_BUFFER_SIZE	XScriptFileBufferSize
37797c478bd9Sstevel@tonic-gate					[4096] The maximum size of a
37807c478bd9Sstevel@tonic-gate					memory-buffered transcript (xf)
37817c478bd9Sstevel@tonic-gate					file before a disk-based file is
37827c478bd9Sstevel@tonic-gate					used.
37837c478bd9Sstevel@tonic-gateconfTLS_SRV_OPTIONS	TLSSrvOptions	If this option is 'V' no client
37847c478bd9Sstevel@tonic-gate					verification is performed, i.e.,
37857c478bd9Sstevel@tonic-gate					the server doesn't ask for a
37867c478bd9Sstevel@tonic-gate					certificate.
37877c478bd9Sstevel@tonic-gateconfLDAP_DEFAULT_SPEC	LDAPDefaultSpec	[undefined] Default map
37887c478bd9Sstevel@tonic-gate					specification for LDAP maps.  The
37897c478bd9Sstevel@tonic-gate					value should only contain LDAP
37907c478bd9Sstevel@tonic-gate					specific settings such as "-h host
37917c478bd9Sstevel@tonic-gate					-p port -d bindDN", etc.  The
37927c478bd9Sstevel@tonic-gate					settings will be used for all LDAP
37937c478bd9Sstevel@tonic-gate					maps unless they are specified in
37947c478bd9Sstevel@tonic-gate					the individual map specification
37957c478bd9Sstevel@tonic-gate					('K' command).
37967c478bd9Sstevel@tonic-gateconfCACERT_PATH		CACertPath	[undefined] Path to directory
37977c478bd9Sstevel@tonic-gate					with certs of CAs.
37987c478bd9Sstevel@tonic-gateconfCACERT		CACertFile	[undefined] File containing one CA
37997c478bd9Sstevel@tonic-gate					cert.
38007c478bd9Sstevel@tonic-gateconfSERVER_CERT		ServerCertFile	[undefined] File containing the
38017c478bd9Sstevel@tonic-gate					cert of the server, i.e., this cert
38027c478bd9Sstevel@tonic-gate					is used when sendmail acts as
38037c478bd9Sstevel@tonic-gate					server.
38047c478bd9Sstevel@tonic-gateconfSERVER_KEY		ServerKeyFile	[undefined] File containing the
38057c478bd9Sstevel@tonic-gate					private key belonging to the server
38067c478bd9Sstevel@tonic-gate					cert.
38077c478bd9Sstevel@tonic-gateconfCLIENT_CERT		ClientCertFile	[undefined] File containing the
38087c478bd9Sstevel@tonic-gate					cert of the client, i.e., this cert
38097c478bd9Sstevel@tonic-gate					is used when sendmail acts as
38107c478bd9Sstevel@tonic-gate					client.
38117c478bd9Sstevel@tonic-gateconfCLIENT_KEY		ClientKeyFile	[undefined] File containing the
38127c478bd9Sstevel@tonic-gate					private key belonging to the client
38137c478bd9Sstevel@tonic-gate					cert.
38147c478bd9Sstevel@tonic-gateconfCRL			CRLFile		[undefined] File containing certificate
38157c478bd9Sstevel@tonic-gate					revocation status, useful for X.509v3
38167c478bd9Sstevel@tonic-gate					authentication. Note that CRL requires
38177c478bd9Sstevel@tonic-gate					at least OpenSSL version 0.9.7.
38187c478bd9Sstevel@tonic-gateconfDH_PARAMETERS	DHParameters	[undefined] File containing the
38197c478bd9Sstevel@tonic-gate					DH parameters.
38207c478bd9Sstevel@tonic-gateconfRAND_FILE		RandFile	[undefined] File containing random
38217c478bd9Sstevel@tonic-gate					data (use prefix file:) or the
38227c478bd9Sstevel@tonic-gate					name of the UNIX socket if EGD is
38237c478bd9Sstevel@tonic-gate					used (use prefix egd:).  STARTTLS
38247c478bd9Sstevel@tonic-gate					requires this option if the compile
38257c478bd9Sstevel@tonic-gate					flag HASURANDOM is not set (see
38267c478bd9Sstevel@tonic-gate					sendmail/README).
38277c478bd9Sstevel@tonic-gateconfNICE_QUEUE_RUN	NiceQueueRun	[undefined]  If set, the priority of
38287c478bd9Sstevel@tonic-gate					queue runners is set the given value
38297c478bd9Sstevel@tonic-gate					(nice(3)).
38307c478bd9Sstevel@tonic-gateconfDIRECT_SUBMISSION_MODIFIERS	DirectSubmissionModifiers
38317c478bd9Sstevel@tonic-gate					[undefined] Defines {daemon_flags}
38327c478bd9Sstevel@tonic-gate					for direct submissions.
3833*49218d4fSjbeckconfUSE_MSP		UseMSP		[undefined] Use as mail submission
38347c478bd9Sstevel@tonic-gate					program.
38357c478bd9Sstevel@tonic-gateconfDELIVER_BY_MIN	DeliverByMin	[0] Minimum time for Deliver By
38367c478bd9Sstevel@tonic-gate					SMTP Service Extension (RFC 2852).
38377c478bd9Sstevel@tonic-gateconfREQUIRES_DIR_FSYNC	RequiresDirfsync	[true] RequiresDirfsync can
38387c478bd9Sstevel@tonic-gate					be used to turn off the compile time
38397c478bd9Sstevel@tonic-gate					flag REQUIRES_DIR_FSYNC at runtime.
38407c478bd9Sstevel@tonic-gate					See sendmail/README for details.
38417c478bd9Sstevel@tonic-gateconfSHARED_MEMORY_KEY	SharedMemoryKey [0] Key for shared memory.
38427c478bd9Sstevel@tonic-gateconfFAST_SPLIT		FastSplit	[1] If set to a value greater than
38437c478bd9Sstevel@tonic-gate					zero, the initial MX lookups on
38447c478bd9Sstevel@tonic-gate					addresses is suppressed when they
38457c478bd9Sstevel@tonic-gate					are sorted which may result in
38467c478bd9Sstevel@tonic-gate					faster envelope splitting.  If the
38477c478bd9Sstevel@tonic-gate					mail is submitted directly from the
38487c478bd9Sstevel@tonic-gate					command line, then the value also
38497c478bd9Sstevel@tonic-gate					limits the number of processes to
38507c478bd9Sstevel@tonic-gate					deliver the envelopes.
38517c478bd9Sstevel@tonic-gateconfMAILBOX_DATABASE	MailboxDatabase	[pw] Type of lookup to find
38527c478bd9Sstevel@tonic-gate					information about local mailboxes.
38537c478bd9Sstevel@tonic-gateconfDEQUOTE_OPTS	-		[empty] Additional options for the
38547c478bd9Sstevel@tonic-gate					dequote map.
38557c478bd9Sstevel@tonic-gateconfINPUT_MAIL_FILTERS	InputMailFilters
38567c478bd9Sstevel@tonic-gate					A comma separated list of filters
38577c478bd9Sstevel@tonic-gate					which determines which filters and
38587c478bd9Sstevel@tonic-gate					the invocation sequence are
38597c478bd9Sstevel@tonic-gate					contacted for incoming SMTP
38607c478bd9Sstevel@tonic-gate					messages.  If none are set, no
38617c478bd9Sstevel@tonic-gate					filters will be contacted.
38627c478bd9Sstevel@tonic-gateconfMILTER_LOG_LEVEL	Milter.LogLevel	[9] Log level for input mail filter
38637c478bd9Sstevel@tonic-gate					actions, defaults to LogLevel.
38647c478bd9Sstevel@tonic-gateconfMILTER_MACROS_CONNECT	Milter.macros.connect
38657c478bd9Sstevel@tonic-gate					[j, _, {daemon_name}, {if_name},
38667c478bd9Sstevel@tonic-gate					{if_addr}] Macros to transmit to
38677c478bd9Sstevel@tonic-gate					milters when a session connection
38687c478bd9Sstevel@tonic-gate					starts.
38697c478bd9Sstevel@tonic-gateconfMILTER_MACROS_HELO	Milter.macros.helo
38707c478bd9Sstevel@tonic-gate					[{tls_version}, {cipher},
38717c478bd9Sstevel@tonic-gate					{cipher_bits}, {cert_subject},
38727c478bd9Sstevel@tonic-gate					{cert_issuer}] Macros to transmit to
38737c478bd9Sstevel@tonic-gate					milters after HELO/EHLO command.
38747c478bd9Sstevel@tonic-gateconfMILTER_MACROS_ENVFROM	Milter.macros.envfrom
38757c478bd9Sstevel@tonic-gate					[i, {auth_type}, {auth_authen},
38767c478bd9Sstevel@tonic-gate					{auth_ssf}, {auth_author},
38777c478bd9Sstevel@tonic-gate					{mail_mailer}, {mail_host},
38787c478bd9Sstevel@tonic-gate					{mail_addr}] Macros to transmit to
38797c478bd9Sstevel@tonic-gate					milters after MAIL FROM command.
38807c478bd9Sstevel@tonic-gateconfMILTER_MACROS_ENVRCPT	Milter.macros.envrcpt
38817c478bd9Sstevel@tonic-gate					[{rcpt_mailer}, {rcpt_host},
38827c478bd9Sstevel@tonic-gate					{rcpt_addr}] Macros to transmit to
38837c478bd9Sstevel@tonic-gate					milters after RCPT TO command.
38847c478bd9Sstevel@tonic-gateconfMILTER_MACROS_EOM		Milter.macros.eom
38857c478bd9Sstevel@tonic-gate					[{msg_id}] Macros to transmit to
38867c478bd9Sstevel@tonic-gate					milters after DATA command.
38877c478bd9Sstevel@tonic-gate
38887c478bd9Sstevel@tonic-gate
38897c478bd9Sstevel@tonic-gateSee also the description of OSTYPE for some parameters that can be
38907c478bd9Sstevel@tonic-gatetweaked (generally pathnames to mailers).
38917c478bd9Sstevel@tonic-gate
38927c478bd9Sstevel@tonic-gateClientPortOptions and DaemonPortOptions are special cases since multiple
38937c478bd9Sstevel@tonic-gateclients/daemons can be defined.  This can be done via
38947c478bd9Sstevel@tonic-gate
38957c478bd9Sstevel@tonic-gate	CLIENT_OPTIONS(`field1=value1,field2=value2,...')
38967c478bd9Sstevel@tonic-gate	DAEMON_OPTIONS(`field1=value1,field2=value2,...')
38977c478bd9Sstevel@tonic-gate
38987c478bd9Sstevel@tonic-gateNote that multiple CLIENT_OPTIONS() commands (and therefore multiple
38997c478bd9Sstevel@tonic-gateClientPortOptions settings) are allowed in order to give settings for each
39007c478bd9Sstevel@tonic-gateprotocol family (e.g., one for Family=inet and one for Family=inet6).  A
39017c478bd9Sstevel@tonic-gaterestriction placed on one family only affects outgoing connections on that
39027c478bd9Sstevel@tonic-gateparticular family.
39037c478bd9Sstevel@tonic-gate
39047c478bd9Sstevel@tonic-gateIf DAEMON_OPTIONS is not used, then the default is
39057c478bd9Sstevel@tonic-gate
39067c478bd9Sstevel@tonic-gate	DAEMON_OPTIONS(`Port=smtp, Name=MTA')
39077c478bd9Sstevel@tonic-gate	DAEMON_OPTIONS(`Port=587, Name=MSA, M=E')
39087c478bd9Sstevel@tonic-gate
39097c478bd9Sstevel@tonic-gateIf you use one DAEMON_OPTIONS macro, it will alter the parameters
39107c478bd9Sstevel@tonic-gateof the first of these.  The second will still be defaulted; it
39117c478bd9Sstevel@tonic-gaterepresents a "Message Submission Agent" (MSA) as defined by RFC
39127c478bd9Sstevel@tonic-gate2476 (see below).  To turn off the default definition for the MSA,
39137c478bd9Sstevel@tonic-gateuse FEATURE(`no_default_msa') (see also FEATURES).  If you use
39147c478bd9Sstevel@tonic-gateadditional DAEMON_OPTIONS macros, they will add additional daemons.
39157c478bd9Sstevel@tonic-gate
39167c478bd9Sstevel@tonic-gateExample 1:  To change the port for the SMTP listener, while
39177c478bd9Sstevel@tonic-gatestill using the MSA default, use
39187c478bd9Sstevel@tonic-gate	DAEMON_OPTIONS(`Port=925, Name=MTA')
39197c478bd9Sstevel@tonic-gate
39207c478bd9Sstevel@tonic-gateExample 2:  To change the port for the MSA daemon, while still
39217c478bd9Sstevel@tonic-gateusing the default SMTP port, use
39227c478bd9Sstevel@tonic-gate	FEATURE(`no_default_msa')
39237c478bd9Sstevel@tonic-gate	DAEMON_OPTIONS(`Name=MTA')
39247c478bd9Sstevel@tonic-gate	DAEMON_OPTIONS(`Port=987, Name=MSA, M=E')
39257c478bd9Sstevel@tonic-gate
39267c478bd9Sstevel@tonic-gateNote that if the first of those DAEMON_OPTIONS lines were omitted, then
39277c478bd9Sstevel@tonic-gatethere would be no listener on the standard SMTP port.
39287c478bd9Sstevel@tonic-gate
39297c478bd9Sstevel@tonic-gateExample 3: To listen on both IPv4 and IPv6 interfaces, use
39307c478bd9Sstevel@tonic-gate
39317c478bd9Sstevel@tonic-gate	DAEMON_OPTIONS(`Name=MTA-v4, Family=inet')
39327c478bd9Sstevel@tonic-gate	DAEMON_OPTIONS(`Name=MTA-v6, Family=inet6')
39337c478bd9Sstevel@tonic-gate
39347c478bd9Sstevel@tonic-gateA "Message Submission Agent" still uses all of the same rulesets for
39357c478bd9Sstevel@tonic-gateprocessing the message (and therefore still allows message rejection via
39367c478bd9Sstevel@tonic-gatethe check_* rulesets).  In accordance with the RFC, the MSA will ensure
39377c478bd9Sstevel@tonic-gatethat all domains in envelope addresses are fully qualified if the message
39387c478bd9Sstevel@tonic-gateis relayed to another MTA.  It will also enforce the normal address syntax
39397c478bd9Sstevel@tonic-gaterules and log error messages.  Additionally, by using the M=a modifier you
39407c478bd9Sstevel@tonic-gatecan require authentication before messages are accepted by the MSA.
39417c478bd9Sstevel@tonic-gateNotice: Do NOT use the 'a' modifier on a public accessible MTA!  Finally,
39427c478bd9Sstevel@tonic-gatethe M=E modifier shown above disables ETRN as required by RFC 2476.
39437c478bd9Sstevel@tonic-gate
39447c478bd9Sstevel@tonic-gateMail filters can be defined using the INPUT_MAIL_FILTER() and MAIL_FILTER()
39457c478bd9Sstevel@tonic-gatecommands:
39467c478bd9Sstevel@tonic-gate
39477c478bd9Sstevel@tonic-gate	INPUT_MAIL_FILTER(`sample', `S=local:/var/run/f1.sock')
39487c478bd9Sstevel@tonic-gate	MAIL_FILTER(`myfilter', `S=inet:3333@localhost')
39497c478bd9Sstevel@tonic-gate
39507c478bd9Sstevel@tonic-gateThe INPUT_MAIL_FILTER() command causes the filter(s) to be called in the
39517c478bd9Sstevel@tonic-gatesame order they were specified by also setting confINPUT_MAIL_FILTERS.  A
39527c478bd9Sstevel@tonic-gatefilter can be defined without adding it to the input filter list by using
39537c478bd9Sstevel@tonic-gateMAIL_FILTER() instead of INPUT_MAIL_FILTER() in your .mc file.
39547c478bd9Sstevel@tonic-gateAlternatively, you can reset the list of filters and their order by setting
39557c478bd9Sstevel@tonic-gateconfINPUT_MAIL_FILTERS option after all INPUT_MAIL_FILTER() commands in
39567c478bd9Sstevel@tonic-gateyour .mc file.
39577c478bd9Sstevel@tonic-gate
39587c478bd9Sstevel@tonic-gate
39597c478bd9Sstevel@tonic-gate+----------------------------+
39607c478bd9Sstevel@tonic-gate| MESSAGE SUBMISSION PROGRAM |
39617c478bd9Sstevel@tonic-gate+----------------------------+
39627c478bd9Sstevel@tonic-gate
39637c478bd9Sstevel@tonic-gateThis section contains a list of caveats and
39647c478bd9Sstevel@tonic-gatea few hints how for those who want to tweak the default configuration
39657c478bd9Sstevel@tonic-gatefor it (which is installed as submit.cf).
39667c478bd9Sstevel@tonic-gate
39677c478bd9Sstevel@tonic-gateNotice: do not add options/features to submit.mc unless you are
39687c478bd9Sstevel@tonic-gateabsolutely sure you need them.  Options you may want to change
39697c478bd9Sstevel@tonic-gateinclude:
39707c478bd9Sstevel@tonic-gate
39717c478bd9Sstevel@tonic-gate- confTRUSTED_USERS, FEATURE(`use_ct_file'), and confCT_FILE for
39727c478bd9Sstevel@tonic-gate  avoiding X-Authentication warnings.
39737c478bd9Sstevel@tonic-gate- confTIME_ZONE to change it from the default `USE_TZ'.
39747c478bd9Sstevel@tonic-gate- confDELIVERY_MODE is set to interactive in msp.m4 instead
39757c478bd9Sstevel@tonic-gate  of the default background mode.
39767c478bd9Sstevel@tonic-gate- FEATURE(stickyhost) and LOCAL_RELAY to send unqualified addresses
39777c478bd9Sstevel@tonic-gate  to the LOCAL_RELAY instead of the default relay.
39787c478bd9Sstevel@tonic-gate
39797c478bd9Sstevel@tonic-gateThe MSP performs hostname canonicalization by default.  Mail may end
39807c478bd9Sstevel@tonic-gateup for various DNS related reasons in the MSP queue.  This problem
39817c478bd9Sstevel@tonic-gatecan be minimized by using
39827c478bd9Sstevel@tonic-gate
39837c478bd9Sstevel@tonic-gate	FEATURE(`nocanonify', `canonify_hosts')
39847c478bd9Sstevel@tonic-gate	define(`confDIRECT_SUBMISSION_MODIFIERS', `C')
39857c478bd9Sstevel@tonic-gate
39867c478bd9Sstevel@tonic-gateSee the discussion about nocanonify for possible side effects.
39877c478bd9Sstevel@tonic-gate
39887c478bd9Sstevel@tonic-gateSome things are not intended to work with the MSP.  These include
39897c478bd9Sstevel@tonic-gatefeatures that influence the delivery process (e.g., mailertable,
39907c478bd9Sstevel@tonic-gatealiases), or those that are only important for a SMTP server (e.g.,
39917c478bd9Sstevel@tonic-gatevirtusertable, DaemonPortOptions, multiple queues).  Moreover,
39927c478bd9Sstevel@tonic-gaterelaxing certain restrictions (RestrictQueueRun, permissions on
39937c478bd9Sstevel@tonic-gatequeue directory) or adding features (e.g., enabling prog/file mailer)
39947c478bd9Sstevel@tonic-gatecan cause security problems.
39957c478bd9Sstevel@tonic-gate
39967c478bd9Sstevel@tonic-gateOther things don't work well with the MSP and require tweaking or
39977c478bd9Sstevel@tonic-gateworkarounds.
39987c478bd9Sstevel@tonic-gate
39997c478bd9Sstevel@tonic-gateThe file and the map created by makemap should be owned by smmsp,
40007c478bd9Sstevel@tonic-gateits group should be smmsp, and it should have mode 640.
40017c478bd9Sstevel@tonic-gate
40027c478bd9Sstevel@tonic-gatefeature/msp.m4 defines almost all settings for the MSP.  Most of
40037c478bd9Sstevel@tonic-gatethose should not be changed at all.  Some of the features and options
40047c478bd9Sstevel@tonic-gatecan be overridden if really necessary.  It is a bit tricky to do
40057c478bd9Sstevel@tonic-gatethis, because it depends on the actual way the option is defined
40067c478bd9Sstevel@tonic-gatein feature/msp.m4.  If it is directly defined (i.e., define()) then
40077c478bd9Sstevel@tonic-gatethe modified value must be defined after
40087c478bd9Sstevel@tonic-gate
40097c478bd9Sstevel@tonic-gate	FEATURE(`msp')
40107c478bd9Sstevel@tonic-gate
40117c478bd9Sstevel@tonic-gateIf it is conditionally defined (i.e., ifdef()) then the desired
40127c478bd9Sstevel@tonic-gatevalue must be defined before the FEATURE line in the .mc file.
40137c478bd9Sstevel@tonic-gateTo see how the options are defined read feature/msp.m4.
40147c478bd9Sstevel@tonic-gate
40157c478bd9Sstevel@tonic-gate
40167c478bd9Sstevel@tonic-gate+--------------------------+
40177c478bd9Sstevel@tonic-gate| FORMAT OF FILES AND MAPS |
40187c478bd9Sstevel@tonic-gate+--------------------------+
40197c478bd9Sstevel@tonic-gate
40207c478bd9Sstevel@tonic-gateFiles that define classes, i.e., F{classname}, consist of lines
40217c478bd9Sstevel@tonic-gateeach of which contains a single element of the class.  For example,
40227c478bd9Sstevel@tonic-gate/etc/mail/local-host-names may have the following content:
40237c478bd9Sstevel@tonic-gate
40247c478bd9Sstevel@tonic-gatemy.domain
40257c478bd9Sstevel@tonic-gateanother.domain
40267c478bd9Sstevel@tonic-gate
40277c478bd9Sstevel@tonic-gateMaps must be created using makemap(8) , e.g.,
40287c478bd9Sstevel@tonic-gate
40297c478bd9Sstevel@tonic-gate	makemap hash MAP < MAP
40307c478bd9Sstevel@tonic-gate
40317c478bd9Sstevel@tonic-gateIn general, a text file from which a map is created contains lines
40327c478bd9Sstevel@tonic-gateof the form
40337c478bd9Sstevel@tonic-gate
40347c478bd9Sstevel@tonic-gatekey	value
40357c478bd9Sstevel@tonic-gate
40367c478bd9Sstevel@tonic-gatewhere 'key' and 'value' are also called LHS and RHS, respectively.
40377c478bd9Sstevel@tonic-gateBy default, the delimiter between LHS and RHS is a non-empty sequence
40387c478bd9Sstevel@tonic-gateof white space characters.
40397c478bd9Sstevel@tonic-gate
40407c478bd9Sstevel@tonic-gate
40417c478bd9Sstevel@tonic-gate+------------------+
40427c478bd9Sstevel@tonic-gate| DIRECTORY LAYOUT |
40437c478bd9Sstevel@tonic-gate+------------------+
40447c478bd9Sstevel@tonic-gate
40457c478bd9Sstevel@tonic-gateWithin this directory are several subdirectories, to wit:
40467c478bd9Sstevel@tonic-gate
40477c478bd9Sstevel@tonic-gatem4		General support routines.  These are typically
40487c478bd9Sstevel@tonic-gate		very important and should not be changed without
40497c478bd9Sstevel@tonic-gate		very careful consideration.
40507c478bd9Sstevel@tonic-gate
40517c478bd9Sstevel@tonic-gatecf		The configuration files themselves.  They have
40527c478bd9Sstevel@tonic-gate		".mc" suffixes, and must be run through m4 to
40537c478bd9Sstevel@tonic-gate		become complete.  The resulting output should
40547c478bd9Sstevel@tonic-gate		have a ".cf" suffix.
40557c478bd9Sstevel@tonic-gate
40567c478bd9Sstevel@tonic-gateostype		Definitions describing a particular operating
40577c478bd9Sstevel@tonic-gate		system type.  These should always be referenced
40587c478bd9Sstevel@tonic-gate		using the OSTYPE macro in the .mc file.  Examples
40597c478bd9Sstevel@tonic-gate		include "bsd4.3", "bsd4.4", "sunos3.5", and
40607c478bd9Sstevel@tonic-gate		"sunos4.1".
40617c478bd9Sstevel@tonic-gate
40627c478bd9Sstevel@tonic-gatedomain		Definitions describing a particular domain, referenced
40637c478bd9Sstevel@tonic-gate		using the DOMAIN macro in the .mc file.  These are
40647c478bd9Sstevel@tonic-gate		site dependent; for example, "CS.Berkeley.EDU.m4"
40657c478bd9Sstevel@tonic-gate		describes hosts in the CS.Berkeley.EDU subdomain.
40667c478bd9Sstevel@tonic-gate
40677c478bd9Sstevel@tonic-gatemailer		Descriptions of mailers.  These are referenced using
40687c478bd9Sstevel@tonic-gate		the MAILER macro in the .mc file.
40697c478bd9Sstevel@tonic-gate
40707c478bd9Sstevel@tonic-gatesh		Shell files used when building the .cf file from the
40717c478bd9Sstevel@tonic-gate		.mc file in the cf subdirectory.
40727c478bd9Sstevel@tonic-gate
40737c478bd9Sstevel@tonic-gatefeature		These hold special orthogonal features that you might
40747c478bd9Sstevel@tonic-gate		want to include.  They should be referenced using
40757c478bd9Sstevel@tonic-gate		the FEATURE macro.
40767c478bd9Sstevel@tonic-gate
40777c478bd9Sstevel@tonic-gatehack		Local hacks.  These can be referenced using the HACK
40787c478bd9Sstevel@tonic-gate		macro.  They shouldn't be of more than voyeuristic
40797c478bd9Sstevel@tonic-gate		interest outside the .Berkeley.EDU domain, but who knows?
40807c478bd9Sstevel@tonic-gate
40817c478bd9Sstevel@tonic-gatesiteconfig	Site configuration -- e.g., tables of locally connected
40827c478bd9Sstevel@tonic-gate		UUCP sites.
40837c478bd9Sstevel@tonic-gate
40847c478bd9Sstevel@tonic-gate
40857c478bd9Sstevel@tonic-gate+------------------------+
40867c478bd9Sstevel@tonic-gate| ADMINISTRATIVE DETAILS |
40877c478bd9Sstevel@tonic-gate+------------------------+
40887c478bd9Sstevel@tonic-gate
40897c478bd9Sstevel@tonic-gateThe following sections detail usage of certain internal parts of the
40907c478bd9Sstevel@tonic-gatesendmail.cf file.  Read them carefully if you are trying to modify
40917c478bd9Sstevel@tonic-gatethe current model.  If you find the above descriptions adequate, these
40927c478bd9Sstevel@tonic-gateshould be {boring, confusing, tedious, ridiculous} (pick one or more).
40937c478bd9Sstevel@tonic-gate
40947c478bd9Sstevel@tonic-gateRULESETS (* means built in to sendmail)
40957c478bd9Sstevel@tonic-gate
40967c478bd9Sstevel@tonic-gate   0 *	Parsing
40977c478bd9Sstevel@tonic-gate   1 *	Sender rewriting
40987c478bd9Sstevel@tonic-gate   2 *	Recipient rewriting
40997c478bd9Sstevel@tonic-gate   3 *	Canonicalization
41007c478bd9Sstevel@tonic-gate   4 *	Post cleanup
41017c478bd9Sstevel@tonic-gate   5 *	Local address rewrite (after aliasing)
41027c478bd9Sstevel@tonic-gate  1x	mailer rules (sender qualification)
41037c478bd9Sstevel@tonic-gate  2x	mailer rules (recipient qualification)
41047c478bd9Sstevel@tonic-gate  3x	mailer rules (sender header qualification)
41057c478bd9Sstevel@tonic-gate  4x	mailer rules (recipient header qualification)
41067c478bd9Sstevel@tonic-gate  5x	mailer subroutines (general)
41077c478bd9Sstevel@tonic-gate  6x	mailer subroutines (general)
41087c478bd9Sstevel@tonic-gate  7x	mailer subroutines (general)
41097c478bd9Sstevel@tonic-gate  8x	reserved
41107c478bd9Sstevel@tonic-gate  90	Mailertable host stripping
41117c478bd9Sstevel@tonic-gate  96	Bottom half of Ruleset 3 (ruleset 6 in old sendmail)
41127c478bd9Sstevel@tonic-gate  97	Hook for recursive ruleset 0 call (ruleset 7 in old sendmail)
41137c478bd9Sstevel@tonic-gate  98	Local part of ruleset 0 (ruleset 8 in old sendmail)
41147c478bd9Sstevel@tonic-gate
41157c478bd9Sstevel@tonic-gate
41167c478bd9Sstevel@tonic-gateMAILERS
41177c478bd9Sstevel@tonic-gate
41187c478bd9Sstevel@tonic-gate   0	local, prog	local and program mailers
41197c478bd9Sstevel@tonic-gate   1	[e]smtp, relay	SMTP channel
41207c478bd9Sstevel@tonic-gate   2	uucp-*		UNIX-to-UNIX Copy Program
41217c478bd9Sstevel@tonic-gate   3	netnews		Network News delivery
41227c478bd9Sstevel@tonic-gate   4	fax		Sam Leffler's HylaFAX software
41237c478bd9Sstevel@tonic-gate   5	mail11		DECnet mailer
41247c478bd9Sstevel@tonic-gate
41257c478bd9Sstevel@tonic-gate
41267c478bd9Sstevel@tonic-gateMACROS
41277c478bd9Sstevel@tonic-gate
41287c478bd9Sstevel@tonic-gate   A
41297c478bd9Sstevel@tonic-gate   B	Bitnet Relay
41307c478bd9Sstevel@tonic-gate   C	DECnet Relay
41317c478bd9Sstevel@tonic-gate   D	The local domain -- usually not needed
41327c478bd9Sstevel@tonic-gate   E	reserved for X.400 Relay
41337c478bd9Sstevel@tonic-gate   F	FAX Relay
41347c478bd9Sstevel@tonic-gate   G
41357c478bd9Sstevel@tonic-gate   H	mail Hub (for mail clusters)
41367c478bd9Sstevel@tonic-gate   I
41377c478bd9Sstevel@tonic-gate   J
41387c478bd9Sstevel@tonic-gate   K
41397c478bd9Sstevel@tonic-gate   L	Luser Relay
41407c478bd9Sstevel@tonic-gate   M	Masquerade (who you claim to be)
41417c478bd9Sstevel@tonic-gate   N
41427c478bd9Sstevel@tonic-gate   O
41437c478bd9Sstevel@tonic-gate   P
41447c478bd9Sstevel@tonic-gate   Q
41457c478bd9Sstevel@tonic-gate   R	Relay (for unqualified names)
41467c478bd9Sstevel@tonic-gate   S	Smart Host
41477c478bd9Sstevel@tonic-gate   T
41487c478bd9Sstevel@tonic-gate   U	my UUCP name (if you have a UUCP connection)
41497c478bd9Sstevel@tonic-gate   V	UUCP Relay (class {V} hosts)
41507c478bd9Sstevel@tonic-gate   W	UUCP Relay (class {W} hosts)
41517c478bd9Sstevel@tonic-gate   X	UUCP Relay (class {X} hosts)
41527c478bd9Sstevel@tonic-gate   Y	UUCP Relay (all other hosts)
41537c478bd9Sstevel@tonic-gate   Z	Version number
41547c478bd9Sstevel@tonic-gate
41557c478bd9Sstevel@tonic-gate
41567c478bd9Sstevel@tonic-gateCLASSES
41577c478bd9Sstevel@tonic-gate
41587c478bd9Sstevel@tonic-gate   A
41597c478bd9Sstevel@tonic-gate   B	domains that are candidates for bestmx lookup
41607c478bd9Sstevel@tonic-gate   C
41617c478bd9Sstevel@tonic-gate   D
41627c478bd9Sstevel@tonic-gate   E	addresses that should not seem to come from $M
41637c478bd9Sstevel@tonic-gate   F	hosts this system forward for
41647c478bd9Sstevel@tonic-gate   G	domains that should be looked up in genericstable
41657c478bd9Sstevel@tonic-gate   H
41667c478bd9Sstevel@tonic-gate   I
41677c478bd9Sstevel@tonic-gate   J
41687c478bd9Sstevel@tonic-gate   K
41697c478bd9Sstevel@tonic-gate   L	addresses that should not be forwarded to $R
41707c478bd9Sstevel@tonic-gate   M	domains that should be mapped to $M
41717c478bd9Sstevel@tonic-gate   N	host/domains that should not be mapped to $M
41727c478bd9Sstevel@tonic-gate   O	operators that indicate network operations (cannot be in local names)
41737c478bd9Sstevel@tonic-gate   P	top level pseudo-domains: BITNET, DECNET, FAX, UUCP, etc.
41747c478bd9Sstevel@tonic-gate   Q
41757c478bd9Sstevel@tonic-gate   R	domains this system is willing to relay (pass anti-spam filters)
41767c478bd9Sstevel@tonic-gate   S
41777c478bd9Sstevel@tonic-gate   T
41787c478bd9Sstevel@tonic-gate   U	locally connected UUCP hosts
41797c478bd9Sstevel@tonic-gate   V	UUCP hosts connected to relay $V
41807c478bd9Sstevel@tonic-gate   W	UUCP hosts connected to relay $W
41817c478bd9Sstevel@tonic-gate   X	UUCP hosts connected to relay $X
41827c478bd9Sstevel@tonic-gate   Y	locally connected smart UUCP hosts
41837c478bd9Sstevel@tonic-gate   Z	locally connected domain-ized UUCP hosts
41847c478bd9Sstevel@tonic-gate   .	the class containing only a dot
41857c478bd9Sstevel@tonic-gate   [	the class containing only a left bracket
41867c478bd9Sstevel@tonic-gate
41877c478bd9Sstevel@tonic-gate
41887c478bd9Sstevel@tonic-gateM4 DIVERSIONS
41897c478bd9Sstevel@tonic-gate
41907c478bd9Sstevel@tonic-gate   1	Local host detection and resolution
41917c478bd9Sstevel@tonic-gate   2	Local Ruleset 3 additions
41927c478bd9Sstevel@tonic-gate   3	Local Ruleset 0 additions
41937c478bd9Sstevel@tonic-gate   4	UUCP Ruleset 0 additions
41947c478bd9Sstevel@tonic-gate   5	locally interpreted names (overrides $R)
41957c478bd9Sstevel@tonic-gate   6	local configuration (at top of file)
41967c478bd9Sstevel@tonic-gate   7	mailer definitions
41977c478bd9Sstevel@tonic-gate   8	DNS based blacklists
41987c478bd9Sstevel@tonic-gate   9	special local rulesets (1 and 2)
41997c478bd9Sstevel@tonic-gate
4200*49218d4fSjbeck$Revision: 8.701 $, Last updated $Date: 2005/09/16 20:18:14 $
42017c478bd9Sstevel@tonic-gateident	"%Z%%M%	%I%	%E% SMI"
4202