10Sstevel@tonic-gate 20Sstevel@tonic-gate SENDMAIL CONFIGURATION FILES 30Sstevel@tonic-gate 40Sstevel@tonic-gateThis document describes the sendmail configuration files. It 50Sstevel@tonic-gateexplains how to create a sendmail.cf file for use with sendmail. 60Sstevel@tonic-gateIt also describes how to set options for sendmail which are explained 70Sstevel@tonic-gatein the Sendmail Installation and Operation guide, which can be found 80Sstevel@tonic-gateon-line at http://www.sendmail.org/%7Eca/email/doc8.12/op.html . 90Sstevel@tonic-gateRecall this URL throughout this document when references to 100Sstevel@tonic-gatedoc/op/op.* are made. 110Sstevel@tonic-gate 120Sstevel@tonic-gateTable of Content: 130Sstevel@tonic-gate 140Sstevel@tonic-gateINTRODUCTION AND EXAMPLE 150Sstevel@tonic-gateA BRIEF INTRODUCTION TO M4 160Sstevel@tonic-gateFILE LOCATIONS 170Sstevel@tonic-gateOSTYPE 180Sstevel@tonic-gateDOMAINS 190Sstevel@tonic-gateMAILERS 200Sstevel@tonic-gateFEATURES 210Sstevel@tonic-gateHACKS 220Sstevel@tonic-gateSITE CONFIGURATION 230Sstevel@tonic-gateUSING UUCP MAILERS 240Sstevel@tonic-gateTWEAKING RULESETS 250Sstevel@tonic-gateMASQUERADING AND RELAYING 260Sstevel@tonic-gateUSING LDAP FOR ALIASES, MAPS, AND CLASSES 270Sstevel@tonic-gateLDAP ROUTING 280Sstevel@tonic-gateANTI-SPAM CONFIGURATION CONTROL 290Sstevel@tonic-gateCONNECTION CONTROL 300Sstevel@tonic-gateSTARTTLS 310Sstevel@tonic-gateADDING NEW MAILERS OR RULESETS 320Sstevel@tonic-gateADDING NEW MAIL FILTERS 330Sstevel@tonic-gateQUEUE GROUP DEFINITIONS 340Sstevel@tonic-gateNON-SMTP BASED CONFIGURATIONS 350Sstevel@tonic-gateWHO AM I? 360Sstevel@tonic-gateACCEPTING MAIL FOR MULTIPLE NAMES 370Sstevel@tonic-gateUSING MAILERTABLES 380Sstevel@tonic-gateUSING USERDB TO MAP FULL NAMES 390Sstevel@tonic-gateMISCELLANEOUS SPECIAL FEATURES 400Sstevel@tonic-gateSECURITY NOTES 410Sstevel@tonic-gateTWEAKING CONFIGURATION OPTIONS 420Sstevel@tonic-gateMESSAGE SUBMISSION PROGRAM 430Sstevel@tonic-gateFORMAT OF FILES AND MAPS 440Sstevel@tonic-gateDIRECTORY LAYOUT 450Sstevel@tonic-gateADMINISTRATIVE DETAILS 460Sstevel@tonic-gate 470Sstevel@tonic-gate 480Sstevel@tonic-gate+--------------------------+ 490Sstevel@tonic-gate| INTRODUCTION AND EXAMPLE | 500Sstevel@tonic-gate+--------------------------+ 510Sstevel@tonic-gate 520Sstevel@tonic-gateConfiguration files are contained in the subdirectory "cf", with a 530Sstevel@tonic-gatesuffix ".mc". They must be run through "m4" to produce a ".cf" file. 540Sstevel@tonic-gateYou must pre-load "cf.m4": 550Sstevel@tonic-gate 560Sstevel@tonic-gate m4 ${CFDIR}/m4/cf.m4 config.mc > config.cf 570Sstevel@tonic-gate 580Sstevel@tonic-gateAlternatively, you can simply: 590Sstevel@tonic-gate 600Sstevel@tonic-gate cd ${CFDIR}/cf 610Sstevel@tonic-gate /usr/ccs/bin/make config.cf 620Sstevel@tonic-gate 630Sstevel@tonic-gatewhere ${CFDIR} is the root of the cf directory and config.mc is the 640Sstevel@tonic-gatename of your configuration file. If you are running a version of M4 650Sstevel@tonic-gatethat understands the __file__ builtin (versions of GNU m4 >= 0.75 do 660Sstevel@tonic-gatethis, but the versions distributed with 4.4BSD and derivatives do not) 670Sstevel@tonic-gateor the -I flag (ditto), then ${CFDIR} can be in an arbitrary directory. 680Sstevel@tonic-gateFor "traditional" versions, ${CFDIR} ***MUST*** be "..", or you MUST 690Sstevel@tonic-gateuse -D_CF_DIR_=/path/to/cf/dir/ -- note the trailing slash! For example: 700Sstevel@tonic-gate 710Sstevel@tonic-gate m4 -D_CF_DIR_=${CFDIR}/ ${CFDIR}/m4/cf.m4 config.mc > config.cf 720Sstevel@tonic-gate 730Sstevel@tonic-gateLet's examine a typical .mc file: 740Sstevel@tonic-gate 750Sstevel@tonic-gate divert(-1) 760Sstevel@tonic-gate # 77616Sjbeck # Copyright (c) 1998-2005 Sendmail, Inc. and its suppliers. 780Sstevel@tonic-gate # All rights reserved. 790Sstevel@tonic-gate # Copyright (c) 1983 Eric P. Allman. All rights reserved. 800Sstevel@tonic-gate # Copyright (c) 1988, 1993 810Sstevel@tonic-gate # The Regents of the University of California. All rights reserved. 820Sstevel@tonic-gate # 830Sstevel@tonic-gate # By using this file, you agree to the terms and conditions set 840Sstevel@tonic-gate # forth in the LICENSE file which can be found at the top level of 850Sstevel@tonic-gate # the sendmail distribution. 860Sstevel@tonic-gate # 870Sstevel@tonic-gate 880Sstevel@tonic-gate # 890Sstevel@tonic-gate # This is a Berkeley-specific configuration file for HP-UX 9.x. 900Sstevel@tonic-gate # It applies only to the Computer Science Division at Berkeley, 910Sstevel@tonic-gate # and should not be used elsewhere. It is provided on the sendmail 920Sstevel@tonic-gate # distribution as a sample only. To create your own configuration 930Sstevel@tonic-gate # file, create an appropriate domain file in ../domain, change the 940Sstevel@tonic-gate # `DOMAIN' macro below to reference that file, and copy the result 950Sstevel@tonic-gate # to a name of your own choosing. 960Sstevel@tonic-gate # 970Sstevel@tonic-gate divert(0) 980Sstevel@tonic-gate 990Sstevel@tonic-gateThe divert(-1) will delete the crud in the resulting output file. 1000Sstevel@tonic-gateThe copyright notice can be replaced by whatever your lawyers require; 1010Sstevel@tonic-gateour lawyers require the one that is included in these files. A copyleft 1020Sstevel@tonic-gateis a copyright by another name. The divert(0) restores regular output. 1030Sstevel@tonic-gate 1040Sstevel@tonic-gate VERSIONID(`<SCCS or RCS version id>') 1050Sstevel@tonic-gate 1060Sstevel@tonic-gateVERSIONID is a macro that stuffs the version information into the 1070Sstevel@tonic-gateresulting file. You could use SCCS, RCS, CVS, something else, or 1080Sstevel@tonic-gateomit it completely. This is not the same as the version id included 1090Sstevel@tonic-gatein SMTP greeting messages -- this is defined in m4/version.m4. 1100Sstevel@tonic-gate 1110Sstevel@tonic-gate OSTYPE(`hpux9')dnl 1120Sstevel@tonic-gate 1130Sstevel@tonic-gateYou must specify an OSTYPE to properly configure things such as the 1140Sstevel@tonic-gatepathname of the help and status files, the flags needed for the local 1150Sstevel@tonic-gatemailer, and other important things. If you omit it, you will get an 1160Sstevel@tonic-gateerror when you try to build the configuration. Look at the ostype 1170Sstevel@tonic-gatedirectory for the list of known operating system types. 1180Sstevel@tonic-gate 1190Sstevel@tonic-gate DOMAIN(`CS.Berkeley.EDU')dnl 1200Sstevel@tonic-gate 1210Sstevel@tonic-gateThis example is specific to the Computer Science Division at Berkeley. 1220Sstevel@tonic-gateYou can use "DOMAIN(`generic')" to get a sufficiently bland definition 1230Sstevel@tonic-gatethat may well work for you, or you can create a customized domain 1240Sstevel@tonic-gatedefinition appropriate for your environment. 1250Sstevel@tonic-gate 1260Sstevel@tonic-gate MAILER(`local') 1270Sstevel@tonic-gate MAILER(`smtp') 1280Sstevel@tonic-gate 1290Sstevel@tonic-gateThese describe the mailers used at the default CS site. The local 1300Sstevel@tonic-gatemailer is always included automatically. Beware: MAILER declarations 1310Sstevel@tonic-gateshould only be followed by LOCAL_* sections. The general rules are 1320Sstevel@tonic-gatethat the order should be: 1330Sstevel@tonic-gate 1340Sstevel@tonic-gate VERSIONID 1350Sstevel@tonic-gate OSTYPE 1360Sstevel@tonic-gate DOMAIN 1370Sstevel@tonic-gate FEATURE 1380Sstevel@tonic-gate local macro definitions 1390Sstevel@tonic-gate MAILER 1400Sstevel@tonic-gate LOCAL_CONFIG 1410Sstevel@tonic-gate LOCAL_RULE_* 1420Sstevel@tonic-gate LOCAL_RULESETS 1430Sstevel@tonic-gate 1440Sstevel@tonic-gateThere are a few exceptions to this rule. Local macro definitions which 1450Sstevel@tonic-gateinfluence a FEATURE() should be done before that feature. For example, 1460Sstevel@tonic-gatea define(`PROCMAIL_MAILER_PATH', ...) should be done before 1470Sstevel@tonic-gateFEATURE(`local_procmail'). 1480Sstevel@tonic-gate 1490Sstevel@tonic-gate 1500Sstevel@tonic-gate+----------------------------+ 1510Sstevel@tonic-gate| A BRIEF INTRODUCTION TO M4 | 1520Sstevel@tonic-gate+----------------------------+ 1530Sstevel@tonic-gate 1540Sstevel@tonic-gateSendmail uses the M4 macro processor to ``compile'' the configuration 1550Sstevel@tonic-gatefiles. The most important thing to know is that M4 is stream-based, 1560Sstevel@tonic-gatethat is, it doesn't understand about lines. For this reason, in some 1570Sstevel@tonic-gateplaces you may see the word ``dnl'', which stands for ``delete 1580Sstevel@tonic-gatethrough newline''; essentially, it deletes all characters starting 1590Sstevel@tonic-gateat the ``dnl'' up to and including the next newline character. In 1600Sstevel@tonic-gatemost cases sendmail uses this only to avoid lots of unnecessary 1610Sstevel@tonic-gateblank lines in the output. 1620Sstevel@tonic-gate 1630Sstevel@tonic-gateOther important directives are define(A, B) which defines the macro 1640Sstevel@tonic-gate``A'' to have value ``B''. Macros are expanded as they are read, so 1650Sstevel@tonic-gateone normally quotes both values to prevent expansion. For example, 1660Sstevel@tonic-gate 1670Sstevel@tonic-gate define(`SMART_HOST', `smart.foo.com') 1680Sstevel@tonic-gate 1690Sstevel@tonic-gateOne word of warning: M4 macros are expanded even in lines that appear 1700Sstevel@tonic-gateto be comments. For example, if you have 1710Sstevel@tonic-gate 1720Sstevel@tonic-gate # See FEATURE(`foo') above 1730Sstevel@tonic-gate 1740Sstevel@tonic-gateit will not do what you expect, because the FEATURE(`foo') will be 1750Sstevel@tonic-gateexpanded. This also applies to 1760Sstevel@tonic-gate 1770Sstevel@tonic-gate # And then define the $X macro to be the return address 1780Sstevel@tonic-gate 1790Sstevel@tonic-gatebecause ``define'' is an M4 keyword. If you want to use them, surround 1800Sstevel@tonic-gatethem with directed quotes, `like this'. 1810Sstevel@tonic-gate 1820Sstevel@tonic-gateSince m4 uses single quotes (opening "`" and closing "'") to quote 1830Sstevel@tonic-gatearguments, those quotes can't be used in arguments. For example, 1840Sstevel@tonic-gateit is not possible to define a rejection message containing a single 1850Sstevel@tonic-gatequote. Usually there are simple workarounds by changing those 1860Sstevel@tonic-gatemessages; in the worst case it might be ok to change the value 1870Sstevel@tonic-gatedirectly in the generated .cf file, which however is not advised. 1880Sstevel@tonic-gate 1890Sstevel@tonic-gate+----------------+ 1900Sstevel@tonic-gate| FILE LOCATIONS | 1910Sstevel@tonic-gate+----------------+ 1920Sstevel@tonic-gate 1930Sstevel@tonic-gatesendmail 8.9 has introduced a new configuration directory for sendmail 1940Sstevel@tonic-gaterelated files, /etc/mail. The new files available for sendmail 8.9 -- 1950Sstevel@tonic-gatethe class {R} /etc/mail/relay-domains and the access database 1960Sstevel@tonic-gate/etc/mail/access -- take advantage of this new directory. Beginning with 1970Sstevel@tonic-gate8.10, all files will use this directory by default (some options may be 1980Sstevel@tonic-gateset by OSTYPE() files). This new directory should help to restore 1990Sstevel@tonic-gateuniformity to sendmail's file locations. 2000Sstevel@tonic-gate 2010Sstevel@tonic-gateBelow is a table of some of the common changes: 2020Sstevel@tonic-gate 2030Sstevel@tonic-gateOld filename New filename 2040Sstevel@tonic-gate------------ ------------ 2050Sstevel@tonic-gate/etc/bitdomain /etc/mail/bitdomain 2060Sstevel@tonic-gate/etc/domaintable /etc/mail/domaintable 2070Sstevel@tonic-gate/etc/genericstable /etc/mail/genericstable 2080Sstevel@tonic-gate/etc/uudomain /etc/mail/uudomain 2090Sstevel@tonic-gate/etc/virtusertable /etc/mail/virtusertable 2100Sstevel@tonic-gate/etc/userdb /etc/mail/userdb 2110Sstevel@tonic-gate 2120Sstevel@tonic-gate/etc/aliases /etc/mail/aliases 2130Sstevel@tonic-gate/etc/sendmail/aliases /etc/mail/aliases 2140Sstevel@tonic-gate/etc/ucbmail/aliases /etc/mail/aliases 2150Sstevel@tonic-gate/usr/adm/sendmail/aliases /etc/mail/aliases 2160Sstevel@tonic-gate/usr/lib/aliases /etc/mail/aliases 2170Sstevel@tonic-gate/usr/lib/mail/aliases /etc/mail/aliases 2180Sstevel@tonic-gate/usr/ucblib/aliases /etc/mail/aliases 2190Sstevel@tonic-gate 2200Sstevel@tonic-gate/etc/sendmail.cw /etc/mail/local-host-names 2210Sstevel@tonic-gate/etc/mail/sendmail.cw /etc/mail/local-host-names 2220Sstevel@tonic-gate/etc/sendmail/sendmail.cw /etc/mail/local-host-names 2230Sstevel@tonic-gate 2240Sstevel@tonic-gate/etc/sendmail.ct /etc/mail/trusted-users 2250Sstevel@tonic-gate 2260Sstevel@tonic-gate/etc/sendmail.oE /etc/mail/error-header 2270Sstevel@tonic-gate 2280Sstevel@tonic-gate/etc/sendmail.hf /etc/mail/helpfile 2290Sstevel@tonic-gate/etc/mail/sendmail.hf /etc/mail/helpfile 2300Sstevel@tonic-gate/usr/ucblib/sendmail.hf /etc/mail/helpfile 2310Sstevel@tonic-gate/etc/ucbmail/sendmail.hf /etc/mail/helpfile 2320Sstevel@tonic-gate/usr/lib/sendmail.hf /etc/mail/helpfile 2330Sstevel@tonic-gate/usr/share/lib/sendmail.hf /etc/mail/helpfile 2340Sstevel@tonic-gate/usr/share/misc/sendmail.hf /etc/mail/helpfile 2350Sstevel@tonic-gate/share/misc/sendmail.hf /etc/mail/helpfile 2360Sstevel@tonic-gate 2370Sstevel@tonic-gate/etc/service.switch /etc/mail/service.switch 2380Sstevel@tonic-gate 2390Sstevel@tonic-gate/etc/sendmail.st /etc/mail/statistics 2400Sstevel@tonic-gate/etc/mail/sendmail.st /etc/mail/statistics 2410Sstevel@tonic-gate/etc/mailer/sendmail.st /etc/mail/statistics 2420Sstevel@tonic-gate/etc/sendmail/sendmail.st /etc/mail/statistics 2430Sstevel@tonic-gate/usr/lib/sendmail.st /etc/mail/statistics 2440Sstevel@tonic-gate/usr/ucblib/sendmail.st /etc/mail/statistics 2450Sstevel@tonic-gate 2460Sstevel@tonic-gateNote that all of these paths actually use a new m4 macro MAIL_SETTINGS_DIR 2470Sstevel@tonic-gateto create the pathnames. The default value of this variable is 2480Sstevel@tonic-gate`/etc/mail/'. If you set this macro to a different value, you MUST include 2490Sstevel@tonic-gatea trailing slash. 2500Sstevel@tonic-gate 2510Sstevel@tonic-gateNotice: all filenames used in a .mc (or .cf) file should be absolute 2520Sstevel@tonic-gate(starting at the root, i.e., with '/'). Relative filenames most 2530Sstevel@tonic-gatelikely cause surprises during operations (unless otherwise noted). 2540Sstevel@tonic-gate 2550Sstevel@tonic-gate 2560Sstevel@tonic-gate+--------+ 2570Sstevel@tonic-gate| OSTYPE | 2580Sstevel@tonic-gate+--------+ 2590Sstevel@tonic-gate 2600Sstevel@tonic-gateYou MUST define an operating system environment, or the configuration 2610Sstevel@tonic-gatefile build will puke. There are several environments available; look 2620Sstevel@tonic-gateat the "ostype" directory for the current list. This macro changes 2630Sstevel@tonic-gatethings like the location of the alias file and queue directory. Some 2640Sstevel@tonic-gateof these files are identical to one another. 2650Sstevel@tonic-gate 2660Sstevel@tonic-gateIt is IMPERATIVE that the OSTYPE occur before any MAILER definitions. 2670Sstevel@tonic-gateIn general, the OSTYPE macro should go immediately after any version 2680Sstevel@tonic-gateinformation, and MAILER definitions should always go last. 2690Sstevel@tonic-gate 2700Sstevel@tonic-gateOperating system definitions are usually easy to write. They may define 2710Sstevel@tonic-gatethe following variables (everything defaults, so an ostype file may be 2720Sstevel@tonic-gateempty). Unfortunately, the list of configuration-supported systems is 2730Sstevel@tonic-gatenot as broad as the list of source-supported systems, since many of 2740Sstevel@tonic-gatethe source contributors do not include corresponding ostype files. 2750Sstevel@tonic-gate 2760Sstevel@tonic-gateALIAS_FILE [/etc/mail/aliases] The location of the text version 2770Sstevel@tonic-gate of the alias file(s). It can be a comma-separated 2780Sstevel@tonic-gate list of names (but be sure you quote values with 2790Sstevel@tonic-gate commas in them -- for example, use 2800Sstevel@tonic-gate define(`ALIAS_FILE', `a,b') 2810Sstevel@tonic-gate to get "a" and "b" both listed as alias files; 2820Sstevel@tonic-gate otherwise the define() primitive only sees "a"). 2830Sstevel@tonic-gateHELP_FILE [/etc/mail/helpfile] The name of the file 2840Sstevel@tonic-gate containing information printed in response to 2850Sstevel@tonic-gate the SMTP HELP command. 2860Sstevel@tonic-gateQUEUE_DIR [/var/spool/mqueue] The directory containing 2870Sstevel@tonic-gate queue files. To use multiple queues, supply 2880Sstevel@tonic-gate a value ending with an asterisk. For 2890Sstevel@tonic-gate example, /var/spool/mqueue/qd* will use all of the 2900Sstevel@tonic-gate directories or symbolic links to directories 2910Sstevel@tonic-gate beginning with 'qd' in /var/spool/mqueue as queue 2920Sstevel@tonic-gate directories. The names 'qf', 'df', and 'xf' are 2930Sstevel@tonic-gate reserved as specific subdirectories for the 2940Sstevel@tonic-gate corresponding queue file types as explained in 2950Sstevel@tonic-gate doc/op/op.me. See also QUEUE GROUP DEFINITIONS. 2960Sstevel@tonic-gateMSP_QUEUE_DIR [/var/spool/clientmqueue] The directory containing 2970Sstevel@tonic-gate queue files for the MSP (Mail Submission Program). 2980Sstevel@tonic-gateSTATUS_FILE [/etc/mail/statistics] The file containing status 2990Sstevel@tonic-gate information. 3000Sstevel@tonic-gateLOCAL_MAILER_PATH [/bin/mail] The program used to deliver local mail. 3010Sstevel@tonic-gateLOCAL_MAILER_FLAGS [Prmn9] The flags used by the local mailer. The 3020Sstevel@tonic-gate flags lsDFMAw5:/|@q are always included. 3030Sstevel@tonic-gateLOCAL_MAILER_ARGS [mail -d $u] The arguments passed to deliver local 3040Sstevel@tonic-gate mail. 3050Sstevel@tonic-gateLOCAL_MAILER_MAX [undefined] If defined, the maximum size of local 3060Sstevel@tonic-gate mail that you are willing to accept. 3070Sstevel@tonic-gateLOCAL_MAILER_MAXMSGS [undefined] If defined, the maximum number of 3080Sstevel@tonic-gate messages to deliver in a single connection. Only 3090Sstevel@tonic-gate useful for LMTP local mailers. 3100Sstevel@tonic-gateLOCAL_MAILER_CHARSET [undefined] If defined, messages containing 8-bit data 3110Sstevel@tonic-gate that ARRIVE from an address that resolves to the 3120Sstevel@tonic-gate local mailer and which are converted to MIME will be 3130Sstevel@tonic-gate labeled with this character set. 3140Sstevel@tonic-gateLOCAL_MAILER_EOL [undefined] If defined, the string to use as the 3150Sstevel@tonic-gate end of line for the local mailer. 3160Sstevel@tonic-gateLOCAL_MAILER_DSN_DIAGNOSTIC_CODE 3170Sstevel@tonic-gate [X-Unix] The DSN Diagnostic-Code value for the 3180Sstevel@tonic-gate local mailer. This should be changed with care. 3190Sstevel@tonic-gateLOCAL_SHELL_PATH [/bin/sh] The shell used to deliver piped email. 3200Sstevel@tonic-gateLOCAL_SHELL_FLAGS [eu9] The flags used by the shell mailer. The 3210Sstevel@tonic-gate flags lsDFM are always included. 3220Sstevel@tonic-gateLOCAL_SHELL_ARGS [sh -c $u] The arguments passed to deliver "prog" 3230Sstevel@tonic-gate mail. 3240Sstevel@tonic-gateLOCAL_SHELL_DIR [$z:/] The directory search path in which the 3250Sstevel@tonic-gate shell should run. 3260Sstevel@tonic-gateLOCAL_MAILER_QGRP [undefined] The queue group for the local mailer. 3270Sstevel@tonic-gateSMTP_MAILER_FLAGS [undefined] Flags added to SMTP mailer. Default 3280Sstevel@tonic-gate flags are `mDFMuX' for all SMTP-based mailers; the 3290Sstevel@tonic-gate "esmtp" mailer adds `a'; "smtp8" adds `8'; and 3300Sstevel@tonic-gate "dsmtp" adds `%'. 3310Sstevel@tonic-gateRELAY_MAILER_FLAGS [undefined] Flags added to the relay mailer. Default 3320Sstevel@tonic-gate flags are `mDFMuX' for all SMTP-based mailers; the 3330Sstevel@tonic-gate relay mailer adds `a8'. If this is not defined, 3340Sstevel@tonic-gate then SMTP_MAILER_FLAGS is used. 3350Sstevel@tonic-gateSMTP_MAILER_MAX [undefined] The maximum size of messages that will 3360Sstevel@tonic-gate be transported using the smtp, smtp8, esmtp, or dsmtp 3370Sstevel@tonic-gate mailers. 3380Sstevel@tonic-gateSMTP_MAILER_MAXMSGS [undefined] If defined, the maximum number of 3390Sstevel@tonic-gate messages to deliver in a single connection for the 3400Sstevel@tonic-gate smtp, smtp8, esmtp, or dsmtp mailers. 3410Sstevel@tonic-gateSMTP_MAILER_MAXRCPTS [undefined] If defined, the maximum number of 3420Sstevel@tonic-gate recipients to deliver in a single connection for the 3430Sstevel@tonic-gate smtp, smtp8, esmtp, or dsmtp mailers. 3440Sstevel@tonic-gateSMTP_MAILER_ARGS [TCP $h] The arguments passed to the smtp mailer. 3450Sstevel@tonic-gate About the only reason you would want to change this 3460Sstevel@tonic-gate would be to change the default port. 3470Sstevel@tonic-gateESMTP_MAILER_ARGS [TCP $h] The arguments passed to the esmtp mailer. 3480Sstevel@tonic-gateSMTP8_MAILER_ARGS [TCP $h] The arguments passed to the smtp8 mailer. 3490Sstevel@tonic-gateDSMTP_MAILER_ARGS [TCP $h] The arguments passed to the dsmtp mailer. 3500Sstevel@tonic-gateRELAY_MAILER_ARGS [TCP $h] The arguments passed to the relay mailer. 3510Sstevel@tonic-gateSMTP_MAILER_QGRP [undefined] The queue group for the smtp mailer. 3520Sstevel@tonic-gateESMTP_MAILER_QGRP [undefined] The queue group for the esmtp mailer. 3530Sstevel@tonic-gateSMTP8_MAILER_QGRP [undefined] The queue group for the smtp8 mailer. 3540Sstevel@tonic-gateDSMTP_MAILER_QGRP [undefined] The queue group for the dsmtp mailer. 3550Sstevel@tonic-gateRELAY_MAILER_QGRP [undefined] The queue group for the relay mailer. 3560Sstevel@tonic-gateRELAY_MAILER_MAXMSGS [undefined] If defined, the maximum number of 3570Sstevel@tonic-gate messages to deliver in a single connection for the 3580Sstevel@tonic-gate relay mailer. 3590Sstevel@tonic-gateSMTP_MAILER_CHARSET [undefined] If defined, messages containing 8-bit data 3600Sstevel@tonic-gate that ARRIVE from an address that resolves to one of 3610Sstevel@tonic-gate the SMTP mailers and which are converted to MIME will 3620Sstevel@tonic-gate be labeled with this character set. 363*3544SjbeckSMTP_MAILER_LL [990] The maximum line length for SMTP mailers 364*3544Sjbeck (except the relay mailer). 365*3544SjbeckRELAY_MAILER_LL [2040] The maximum line length for the relay mailer. 3660Sstevel@tonic-gateUUCP_MAILER_PATH [/usr/bin/uux] The program used to send UUCP mail. 3670Sstevel@tonic-gateUUCP_MAILER_FLAGS [undefined] Flags added to UUCP mailer. Default 3680Sstevel@tonic-gate flags are `DFMhuU' (and `m' for uucp-new mailer, 3690Sstevel@tonic-gate minus `U' for uucp-dom mailer). 3700Sstevel@tonic-gateUUCP_MAILER_ARGS [uux - -r -z -a$g -gC $h!rmail ($u)] The arguments 3710Sstevel@tonic-gate passed to the UUCP mailer. 3720Sstevel@tonic-gateUUCP_MAILER_MAX [100000] The maximum size message accepted for 3730Sstevel@tonic-gate transmission by the UUCP mailers. 3740Sstevel@tonic-gateUUCP_MAILER_CHARSET [undefined] If defined, messages containing 8-bit data 3750Sstevel@tonic-gate that ARRIVE from an address that resolves to one of 3760Sstevel@tonic-gate the UUCP mailers and which are converted to MIME will 3770Sstevel@tonic-gate be labeled with this character set. 3780Sstevel@tonic-gateUUCP_MAILER_QGRP [undefined] The queue group for the UUCP mailers. 3790Sstevel@tonic-gatePROCMAIL_MAILER_PATH [/usr/local/bin/procmail] The path to the procmail 3800Sstevel@tonic-gate program. This is also used by 3810Sstevel@tonic-gate FEATURE(`local_procmail'). 3820Sstevel@tonic-gatePROCMAIL_MAILER_FLAGS [SPhnu9] Flags added to Procmail mailer. Flags 3830Sstevel@tonic-gate DFM are always set. This is NOT used by 3840Sstevel@tonic-gate FEATURE(`local_procmail'); tweak LOCAL_MAILER_FLAGS 3850Sstevel@tonic-gate instead. 3860Sstevel@tonic-gatePROCMAIL_MAILER_ARGS [procmail -Y -m $h $f $u] The arguments passed to 3870Sstevel@tonic-gate the Procmail mailer. This is NOT used by 3880Sstevel@tonic-gate FEATURE(`local_procmail'); tweak LOCAL_MAILER_ARGS 3890Sstevel@tonic-gate instead. 3900Sstevel@tonic-gatePROCMAIL_MAILER_MAX [undefined] If set, the maximum size message that 3910Sstevel@tonic-gate will be accepted by the procmail mailer. 3920Sstevel@tonic-gatePROCMAIL_MAILER_QGRP [undefined] The queue group for the procmail mailer. 3930Sstevel@tonic-gateconfEBINDIR [/usr/libexec] The directory for executables. 3940Sstevel@tonic-gate Currently used for FEATURE(`local_lmtp') and 3950Sstevel@tonic-gate FEATURE(`smrsh'). 3960Sstevel@tonic-gateLOCAL_PROG_QGRP [undefined] The queue group for the prog mailer. 3970Sstevel@tonic-gate 3980Sstevel@tonic-gateNote: to tweak Name_MAILER_FLAGS use the macro MODIFY_MAILER_FLAGS: 399616SjbeckMODIFY_MAILER_FLAGS(`Name', `change') where Name is the first part 400616Sjbeckof the macro Name_MAILER_FLAGS (note: that means Name is entirely in 401616Sjbeckupper case) and change can be: flags that should be used directly 402616Sjbeck(thus overriding the default value), or if it starts with `+' (`-') 403616Sjbeckthen those flags are added to (removed from) the default value. 404616SjbeckExample: 4050Sstevel@tonic-gate 4060Sstevel@tonic-gate MODIFY_MAILER_FLAGS(`LOCAL', `+e') 4070Sstevel@tonic-gate 4080Sstevel@tonic-gatewill add the flag `e' to LOCAL_MAILER_FLAGS. Notice: there are 4090Sstevel@tonic-gateseveral smtp mailers all of which are manipulated individually. 4100Sstevel@tonic-gateSee the section MAILERS for the available mailer names. 4110Sstevel@tonic-gateWARNING: The FEATUREs local_lmtp and local_procmail set LOCAL_MAILER_FLAGS 4120Sstevel@tonic-gateunconditionally, i.e., without respecting any definitions in an 4130Sstevel@tonic-gateOSTYPE setting. 4140Sstevel@tonic-gate 4150Sstevel@tonic-gate 4160Sstevel@tonic-gate+---------+ 4170Sstevel@tonic-gate| DOMAINS | 4180Sstevel@tonic-gate+---------+ 4190Sstevel@tonic-gate 4200Sstevel@tonic-gateYou will probably want to collect domain-dependent defines into one 4210Sstevel@tonic-gatefile, referenced by the DOMAIN macro. For example, the Berkeley 4220Sstevel@tonic-gatedomain file includes definitions for several internal distinguished 4230Sstevel@tonic-gatehosts: 4240Sstevel@tonic-gate 4250Sstevel@tonic-gateUUCP_RELAY The host that will accept UUCP-addressed email. 4260Sstevel@tonic-gate If not defined, all UUCP sites must be directly 4270Sstevel@tonic-gate connected. 4280Sstevel@tonic-gateBITNET_RELAY The host that will accept BITNET-addressed email. 4290Sstevel@tonic-gate If not defined, the .BITNET pseudo-domain won't work. 4300Sstevel@tonic-gateDECNET_RELAY The host that will accept DECNET-addressed email. 4310Sstevel@tonic-gate If not defined, the .DECNET pseudo-domain and addresses 4320Sstevel@tonic-gate of the form node::user will not work. 4330Sstevel@tonic-gateFAX_RELAY The host that will accept mail to the .FAX pseudo-domain. 4340Sstevel@tonic-gate The "fax" mailer overrides this value. 4350Sstevel@tonic-gateLOCAL_RELAY The site that will handle unqualified names -- that 4360Sstevel@tonic-gate is, names without an @domain extension. 4370Sstevel@tonic-gate Normally MAIL_HUB is preferred for this function. 4380Sstevel@tonic-gate LOCAL_RELAY is mostly useful in conjunction with 4390Sstevel@tonic-gate FEATURE(`stickyhost') -- see the discussion of 4400Sstevel@tonic-gate stickyhost below. If not set, they are assumed to 4410Sstevel@tonic-gate belong on this machine. This allows you to have a 4420Sstevel@tonic-gate central site to store a company- or department-wide 4430Sstevel@tonic-gate alias database. This only works at small sites, 4440Sstevel@tonic-gate and only with some user agents. 4450Sstevel@tonic-gateLUSER_RELAY The site that will handle lusers -- that is, apparently 4460Sstevel@tonic-gate local names that aren't local accounts or aliases. To 4470Sstevel@tonic-gate specify a local user instead of a site, set this to 4480Sstevel@tonic-gate ``local:username''. 4490Sstevel@tonic-gate 4500Sstevel@tonic-gateAny of these can be either ``mailer:hostname'' (in which case the 4510Sstevel@tonic-gatemailer is the internal mailer name, such as ``uucp-new'' and the hostname 4520Sstevel@tonic-gateis the name of the host as appropriate for that mailer) or just a 4530Sstevel@tonic-gate``hostname'', in which case a default mailer type (usually ``relay'', 4540Sstevel@tonic-gatea variant on SMTP) is used. WARNING: if you have a wildcard MX 4550Sstevel@tonic-gaterecord matching your domain, you probably want to define these to 4560Sstevel@tonic-gatehave a trailing dot so that you won't get the mail diverted back 4570Sstevel@tonic-gateto yourself. 4580Sstevel@tonic-gate 4590Sstevel@tonic-gateThe domain file can also be used to define a domain name, if needed 4600Sstevel@tonic-gate(using "DD<domain>") and set certain site-wide features. If all hosts 4610Sstevel@tonic-gateat your site masquerade behind one email name, you could also use 4620Sstevel@tonic-gateMASQUERADE_AS here. 4630Sstevel@tonic-gate 4640Sstevel@tonic-gateYou do not have to define a domain -- in particular, if you are a 4650Sstevel@tonic-gatesingle machine sitting off somewhere, it is probably more work than 4660Sstevel@tonic-gateit's worth. This is just a mechanism for combining "domain dependent 4670Sstevel@tonic-gateknowledge" into one place. 4680Sstevel@tonic-gate 4690Sstevel@tonic-gate 4700Sstevel@tonic-gate+---------+ 4710Sstevel@tonic-gate| MAILERS | 4720Sstevel@tonic-gate+---------+ 4730Sstevel@tonic-gate 4740Sstevel@tonic-gateThere are fewer mailers supported in this version than the previous 4750Sstevel@tonic-gateversion, owing mostly to a simpler world. As a general rule, put the 4760Sstevel@tonic-gateMAILER definitions last in your .mc file. 4770Sstevel@tonic-gate 4780Sstevel@tonic-gatelocal The local and prog mailers. You will almost always 4790Sstevel@tonic-gate need these; the only exception is if you relay ALL 4800Sstevel@tonic-gate your mail to another site. This mailer is included 4810Sstevel@tonic-gate automatically. 4820Sstevel@tonic-gate 4830Sstevel@tonic-gatesmtp The Simple Mail Transport Protocol mailer. This does 4840Sstevel@tonic-gate not hide hosts behind a gateway or another other 4850Sstevel@tonic-gate such hack; it assumes a world where everyone is 4860Sstevel@tonic-gate running the name server. This file actually defines 4870Sstevel@tonic-gate five mailers: "smtp" for regular (old-style) SMTP to 4880Sstevel@tonic-gate other servers, "esmtp" for extended SMTP to other 4890Sstevel@tonic-gate servers, "smtp8" to do SMTP to other servers without 4900Sstevel@tonic-gate converting 8-bit data to MIME (essentially, this is 4910Sstevel@tonic-gate your statement that you know the other end is 8-bit 4920Sstevel@tonic-gate clean even if it doesn't say so), "dsmtp" to do on 4930Sstevel@tonic-gate demand delivery, and "relay" for transmission to the 4940Sstevel@tonic-gate RELAY_HOST, LUSER_RELAY, or MAIL_HUB. 4950Sstevel@tonic-gate 4960Sstevel@tonic-gateuucp The UNIX-to-UNIX Copy Program mailer. Actually, this 4970Sstevel@tonic-gate defines two mailers, "uucp-old" (a.k.a. "uucp") and 4980Sstevel@tonic-gate "uucp-new" (a.k.a. "suucp"). The latter is for when you 4990Sstevel@tonic-gate know that the UUCP mailer at the other end can handle 5000Sstevel@tonic-gate multiple recipients in one transfer. If the smtp mailer 5010Sstevel@tonic-gate is included in your configuration, two other mailers 5020Sstevel@tonic-gate ("uucp-dom" and "uucp-uudom") are also defined [warning: you 5030Sstevel@tonic-gate MUST specify MAILER(`smtp') before MAILER(`uucp')]. When you 5040Sstevel@tonic-gate include the uucp mailer, sendmail looks for all names in 5050Sstevel@tonic-gate class {U} and sends them to the uucp-old mailer; all 5060Sstevel@tonic-gate names in class {Y} are sent to uucp-new; and all 5070Sstevel@tonic-gate names in class {Z} are sent to uucp-uudom. Note that 5080Sstevel@tonic-gate this is a function of what version of rmail runs on 5090Sstevel@tonic-gate the receiving end, and hence may be out of your control. 5100Sstevel@tonic-gate See the section below describing UUCP mailers in more 5110Sstevel@tonic-gate detail. 5120Sstevel@tonic-gate 5130Sstevel@tonic-gateprocmail An interface to procmail (does not come with sendmail). 5140Sstevel@tonic-gate This is designed to be used in mailertables. For example, 5150Sstevel@tonic-gate a common question is "how do I forward all mail for a given 5160Sstevel@tonic-gate domain to a single person?". If you have this mailer 5170Sstevel@tonic-gate defined, you could set up a mailertable reading: 5180Sstevel@tonic-gate 5190Sstevel@tonic-gate host.com procmail:/etc/procmailrcs/host.com 5200Sstevel@tonic-gate 5210Sstevel@tonic-gate with the file /etc/procmailrcs/host.com reading: 5220Sstevel@tonic-gate 5230Sstevel@tonic-gate :0 # forward mail for host.com 5240Sstevel@tonic-gate ! -oi -f $1 person@other.host 5250Sstevel@tonic-gate 5260Sstevel@tonic-gate This would arrange for (anything)@host.com to be sent 5270Sstevel@tonic-gate to person@other.host. In a procmail script, $1 is the 5280Sstevel@tonic-gate name of the sender and $2 is the name of the recipient. 5290Sstevel@tonic-gate If you use this with FEATURE(`local_procmail'), the FEATURE 5300Sstevel@tonic-gate should be listed first. 5310Sstevel@tonic-gate 5320Sstevel@tonic-gate Of course there are other ways to solve this particular 5330Sstevel@tonic-gate problem, e.g., a catch-all entry in a virtusertable. 5340Sstevel@tonic-gate 5350Sstevel@tonic-gateThe local mailer accepts addresses of the form "user+detail", where 5360Sstevel@tonic-gatethe "+detail" is not used for mailbox matching but is available 5370Sstevel@tonic-gateto certain local mail programs (in particular, see 5380Sstevel@tonic-gateFEATURE(`local_procmail')). For example, "eric", "eric+sendmail", and 5390Sstevel@tonic-gate"eric+sww" all indicate the same user, but additional arguments <null>, 5400Sstevel@tonic-gate"sendmail", and "sww" may be provided for use in sorting mail. 5410Sstevel@tonic-gate 5420Sstevel@tonic-gate 5430Sstevel@tonic-gate+----------+ 5440Sstevel@tonic-gate| FEATURES | 5450Sstevel@tonic-gate+----------+ 5460Sstevel@tonic-gate 5470Sstevel@tonic-gateSpecial features can be requested using the "FEATURE" macro. For 5480Sstevel@tonic-gateexample, the .mc line: 5490Sstevel@tonic-gate 5500Sstevel@tonic-gate FEATURE(`use_cw_file') 5510Sstevel@tonic-gate 5520Sstevel@tonic-gatetells sendmail that you want to have it read an /etc/mail/local-host-names 5530Sstevel@tonic-gatefile to get values for class {w}. A FEATURE may contain up to 9 5540Sstevel@tonic-gateoptional parameters -- for example: 5550Sstevel@tonic-gate 5560Sstevel@tonic-gate FEATURE(`mailertable', `dbm /usr/lib/mailertable') 5570Sstevel@tonic-gate 5580Sstevel@tonic-gateThe default database map type for the table features can be set with 5590Sstevel@tonic-gate 5600Sstevel@tonic-gate define(`DATABASE_MAP_TYPE', `dbm') 5610Sstevel@tonic-gate 5620Sstevel@tonic-gatewhich would set it to use ndbm databases. The default is the Berkeley DB 5630Sstevel@tonic-gatehash database format. Note that you must still declare a database map type 5640Sstevel@tonic-gateif you specify an argument to a FEATURE. DATABASE_MAP_TYPE is only used 5650Sstevel@tonic-gateif no argument is given for the FEATURE. It must be specified before any 5660Sstevel@tonic-gatefeature that uses a map. 5670Sstevel@tonic-gate 5680Sstevel@tonic-gateAlso, features which can take a map definition as an argument can also take 5690Sstevel@tonic-gatethe special keyword `LDAP'. If that keyword is used, the map will use the 5700Sstevel@tonic-gateLDAP definition described in the ``USING LDAP FOR ALIASES, MAPS, AND 5710Sstevel@tonic-gateCLASSES'' section below. 5720Sstevel@tonic-gate 5730Sstevel@tonic-gateAvailable features are: 5740Sstevel@tonic-gate 5750Sstevel@tonic-gateuse_cw_file Read the file /etc/mail/local-host-names file to get 5760Sstevel@tonic-gate alternate names for this host. This might be used if you 5770Sstevel@tonic-gate were on a host that MXed for a dynamic set of other hosts. 5780Sstevel@tonic-gate If the set is static, just including the line "Cw<name1> 5790Sstevel@tonic-gate <name2> ..." (where the names are fully qualified domain 5800Sstevel@tonic-gate names) is probably superior. The actual filename can be 5810Sstevel@tonic-gate overridden by redefining confCW_FILE. 5820Sstevel@tonic-gate 5830Sstevel@tonic-gateuse_ct_file Read the file /etc/mail/trusted-users file to get the 5840Sstevel@tonic-gate names of users that will be ``trusted'', that is, able to 5850Sstevel@tonic-gate set their envelope from address using -f without generating 5860Sstevel@tonic-gate a warning message. The actual filename can be overridden 5870Sstevel@tonic-gate by redefining confCT_FILE. 5880Sstevel@tonic-gate 5890Sstevel@tonic-gateredirect Reject all mail addressed to "address.REDIRECT" with 5900Sstevel@tonic-gate a ``551 User has moved; please try <address>'' message. 5910Sstevel@tonic-gate If this is set, you can alias people who have left 5920Sstevel@tonic-gate to their new address with ".REDIRECT" appended. 5930Sstevel@tonic-gate 5940Sstevel@tonic-gatenouucp Don't route UUCP addresses. This feature takes one 5950Sstevel@tonic-gate parameter: 5960Sstevel@tonic-gate `reject': reject addresses which have "!" in the local 5970Sstevel@tonic-gate part unless it originates from a system 5980Sstevel@tonic-gate that is allowed to relay. 5990Sstevel@tonic-gate `nospecial': don't do anything special with "!". 6000Sstevel@tonic-gate Warnings: 1. See the notice in the anti-spam section. 6010Sstevel@tonic-gate 2. don't remove "!" from OperatorChars if `reject' is 6020Sstevel@tonic-gate given as parameter. 6030Sstevel@tonic-gate 6040Sstevel@tonic-gatenocanonify Don't pass addresses to $[ ... $] for canonification 6050Sstevel@tonic-gate by default, i.e., host/domain names are considered canonical, 6060Sstevel@tonic-gate except for unqualified names, which must not be used in this 6070Sstevel@tonic-gate mode (violation of the standard). It can be changed by 6080Sstevel@tonic-gate setting the DaemonPortOptions modifiers (M=). That is, 6090Sstevel@tonic-gate FEATURE(`nocanonify') will be overridden by setting the 6100Sstevel@tonic-gate 'c' flag. Conversely, if FEATURE(`nocanonify') is not used, 6110Sstevel@tonic-gate it can be emulated by setting the 'C' flag 6120Sstevel@tonic-gate (DaemonPortOptions=Modifiers=C). This would generally only 6130Sstevel@tonic-gate be used by sites that only act as mail gateways or which have 6140Sstevel@tonic-gate user agents that do full canonification themselves. You may 6150Sstevel@tonic-gate also want to use 6160Sstevel@tonic-gate "define(`confBIND_OPTS', `-DNSRCH -DEFNAMES')" to turn off 6170Sstevel@tonic-gate the usual resolver options that do a similar thing. 6180Sstevel@tonic-gate 6190Sstevel@tonic-gate An exception list for FEATURE(`nocanonify') can be 6200Sstevel@tonic-gate specified with CANONIFY_DOMAIN or CANONIFY_DOMAIN_FILE, 6210Sstevel@tonic-gate i.e., a list of domains which are nevertheless passed to 6220Sstevel@tonic-gate $[ ... $] for canonification. This is useful to turn on 6230Sstevel@tonic-gate canonification for local domains, e.g., use 6240Sstevel@tonic-gate CANONIFY_DOMAIN(`my.domain my') to canonify addresses 6250Sstevel@tonic-gate which end in "my.domain" or "my". 6260Sstevel@tonic-gate Another way to require canonification in the local 6270Sstevel@tonic-gate domain is CANONIFY_DOMAIN(`$=m'). 6280Sstevel@tonic-gate 6290Sstevel@tonic-gate A trailing dot is added to addresses with more than 6300Sstevel@tonic-gate one component in it such that other features which 6310Sstevel@tonic-gate expect a trailing dot (e.g., virtusertable) will 6320Sstevel@tonic-gate still work. 6330Sstevel@tonic-gate 6340Sstevel@tonic-gate If `canonify_hosts' is specified as parameter, i.e., 6350Sstevel@tonic-gate FEATURE(`nocanonify', `canonify_hosts'), then 6360Sstevel@tonic-gate addresses which have only a hostname, e.g., 6370Sstevel@tonic-gate <user@host>, will be canonified (and hopefully fully 6380Sstevel@tonic-gate qualified), too. 6390Sstevel@tonic-gate 6400Sstevel@tonic-gatestickyhost This feature is sometimes used with LOCAL_RELAY, 6410Sstevel@tonic-gate although it can be used for a different effect with 6420Sstevel@tonic-gate MAIL_HUB. 6430Sstevel@tonic-gate 6440Sstevel@tonic-gate When used without MAIL_HUB, email sent to 6450Sstevel@tonic-gate "user@local.host" are marked as "sticky" -- that 6460Sstevel@tonic-gate is, the local addresses aren't matched against UDB, 6470Sstevel@tonic-gate don't go through ruleset 5, and are not forwarded to 6480Sstevel@tonic-gate the LOCAL_RELAY (if defined). 6490Sstevel@tonic-gate 6500Sstevel@tonic-gate With MAIL_HUB, mail addressed to "user@local.host" 6510Sstevel@tonic-gate is forwarded to the mail hub, with the envelope 6520Sstevel@tonic-gate address still remaining "user@local.host". 6530Sstevel@tonic-gate Without stickyhost, the envelope would be changed 6540Sstevel@tonic-gate to "user@mail_hub", in order to protect against 6550Sstevel@tonic-gate mailing loops. 6560Sstevel@tonic-gate 6570Sstevel@tonic-gatemailertable Include a "mailer table" which can be used to override 6580Sstevel@tonic-gate routing for particular domains (which are not in class {w}, 6590Sstevel@tonic-gate i.e. local host names). The argument of the FEATURE may be 6600Sstevel@tonic-gate the key definition. If none is specified, the definition 6610Sstevel@tonic-gate used is: 6620Sstevel@tonic-gate 6630Sstevel@tonic-gate hash /etc/mail/mailertable 6640Sstevel@tonic-gate 6650Sstevel@tonic-gate Keys in this database are fully qualified domain names 6660Sstevel@tonic-gate or partial domains preceded by a dot -- for example, 6670Sstevel@tonic-gate "vangogh.CS.Berkeley.EDU" or ".CS.Berkeley.EDU". As a 6680Sstevel@tonic-gate special case of the latter, "." matches any domain not 6690Sstevel@tonic-gate covered by other keys. Values must be of the form: 6700Sstevel@tonic-gate mailer:domain 6710Sstevel@tonic-gate where "mailer" is the internal mailer name, and "domain" 6720Sstevel@tonic-gate is where to send the message. These maps are not 6730Sstevel@tonic-gate reflected into the message header. As a special case, 6740Sstevel@tonic-gate the forms: 6750Sstevel@tonic-gate local:user 6760Sstevel@tonic-gate will forward to the indicated user using the local mailer, 6770Sstevel@tonic-gate local: 6780Sstevel@tonic-gate will forward to the original user in the e-mail address 6790Sstevel@tonic-gate using the local mailer, and 6800Sstevel@tonic-gate error:code message 6810Sstevel@tonic-gate error:D.S.N:code message 6820Sstevel@tonic-gate will give an error message with the indicated SMTP reply 6830Sstevel@tonic-gate code and message, where D.S.N is an RFC 1893 compliant 6840Sstevel@tonic-gate error code. 6850Sstevel@tonic-gate 6860Sstevel@tonic-gatedomaintable Include a "domain table" which can be used to provide 6870Sstevel@tonic-gate domain name mapping. Use of this should really be 6880Sstevel@tonic-gate limited to your own domains. It may be useful if you 6890Sstevel@tonic-gate change names (e.g., your company changes names from 6900Sstevel@tonic-gate oldname.com to newname.com). The argument of the 6910Sstevel@tonic-gate FEATURE may be the key definition. If none is specified, 6920Sstevel@tonic-gate the definition used is: 6930Sstevel@tonic-gate 6940Sstevel@tonic-gate hash /etc/mail/domaintable 6950Sstevel@tonic-gate 6960Sstevel@tonic-gate The key in this table is the domain name; the value is 6970Sstevel@tonic-gate the new (fully qualified) domain. Anything in the 6980Sstevel@tonic-gate domaintable is reflected into headers; that is, this 6990Sstevel@tonic-gate is done in ruleset 3. 7000Sstevel@tonic-gate 7010Sstevel@tonic-gatebitdomain Look up bitnet hosts in a table to try to turn them into 7020Sstevel@tonic-gate internet addresses. The table can be built using the 7030Sstevel@tonic-gate bitdomain program contributed by John Gardiner Myers. 7040Sstevel@tonic-gate The argument of the FEATURE may be the key definition; if 7050Sstevel@tonic-gate none is specified, the definition used is: 7060Sstevel@tonic-gate 7070Sstevel@tonic-gate hash /etc/mail/bitdomain 7080Sstevel@tonic-gate 7090Sstevel@tonic-gate Keys are the bitnet hostname; values are the corresponding 7100Sstevel@tonic-gate internet hostname. 7110Sstevel@tonic-gate 7120Sstevel@tonic-gateuucpdomain Similar feature for UUCP hosts. The default map definition 7130Sstevel@tonic-gate is: 7140Sstevel@tonic-gate 7150Sstevel@tonic-gate hash /etc/mail/uudomain 7160Sstevel@tonic-gate 7170Sstevel@tonic-gate At the moment there is no automagic tool to build this 7180Sstevel@tonic-gate database. 7190Sstevel@tonic-gate 7200Sstevel@tonic-gatealways_add_domain 7210Sstevel@tonic-gate Include the local host domain even on locally delivered 7220Sstevel@tonic-gate mail. Normally it is not added on unqualified names. 7230Sstevel@tonic-gate However, if you use a shared message store but do not use 7240Sstevel@tonic-gate the same user name space everywhere, you may need the host 7250Sstevel@tonic-gate name on local names. An optional argument specifies 7260Sstevel@tonic-gate another domain to be added than the local. 7270Sstevel@tonic-gate 7280Sstevel@tonic-gateallmasquerade If masquerading is enabled (using MASQUERADE_AS), this 7290Sstevel@tonic-gate feature will cause recipient addresses to also masquerade 7300Sstevel@tonic-gate as being from the masquerade host. Normally they get 7310Sstevel@tonic-gate the local hostname. Although this may be right for 7320Sstevel@tonic-gate ordinary users, it can break local aliases. For example, 7330Sstevel@tonic-gate if you send to "localalias", the originating sendmail will 7340Sstevel@tonic-gate find that alias and send to all members, but send the 7350Sstevel@tonic-gate message with "To: localalias@masqueradehost". Since that 7360Sstevel@tonic-gate alias likely does not exist, replies will fail. Use this 7370Sstevel@tonic-gate feature ONLY if you can guarantee that the ENTIRE 7380Sstevel@tonic-gate namespace on your masquerade host supersets all the 7390Sstevel@tonic-gate local entries. 7400Sstevel@tonic-gate 7410Sstevel@tonic-gatelimited_masquerade 7420Sstevel@tonic-gate Normally, any hosts listed in class {w} are masqueraded. If 7430Sstevel@tonic-gate this feature is given, only the hosts listed in class {M} (see 7440Sstevel@tonic-gate below: MASQUERADE_DOMAIN) are masqueraded. This is useful 7450Sstevel@tonic-gate if you have several domains with disjoint namespaces hosted 7460Sstevel@tonic-gate on the same machine. 7470Sstevel@tonic-gate 7480Sstevel@tonic-gatemasquerade_entire_domain 7490Sstevel@tonic-gate If masquerading is enabled (using MASQUERADE_AS) and 7500Sstevel@tonic-gate MASQUERADE_DOMAIN (see below) is set, this feature will 7510Sstevel@tonic-gate cause addresses to be rewritten such that the masquerading 7520Sstevel@tonic-gate domains are actually entire domains to be hidden. All 7530Sstevel@tonic-gate hosts within the masquerading domains will be rewritten 7540Sstevel@tonic-gate to the masquerade name (used in MASQUERADE_AS). For example, 7550Sstevel@tonic-gate if you have: 7560Sstevel@tonic-gate 7570Sstevel@tonic-gate MASQUERADE_AS(`masq.com') 7580Sstevel@tonic-gate MASQUERADE_DOMAIN(`foo.org') 7590Sstevel@tonic-gate MASQUERADE_DOMAIN(`bar.com') 7600Sstevel@tonic-gate 7610Sstevel@tonic-gate then *foo.org and *bar.com are converted to masq.com. Without 7620Sstevel@tonic-gate this feature, only foo.org and bar.com are masqueraded. 7630Sstevel@tonic-gate 7640Sstevel@tonic-gate NOTE: only domains within your jurisdiction and 7650Sstevel@tonic-gate current hierarchy should be masqueraded using this. 7660Sstevel@tonic-gate 7670Sstevel@tonic-gatelocal_no_masquerade 7680Sstevel@tonic-gate This feature prevents the local mailer from masquerading even 7690Sstevel@tonic-gate if MASQUERADE_AS is used. MASQUERADE_AS will only have effect 7700Sstevel@tonic-gate on addresses of mail going outside the local domain. 7710Sstevel@tonic-gate 7720Sstevel@tonic-gatemasquerade_envelope 7730Sstevel@tonic-gate If masquerading is enabled (using MASQUERADE_AS) or the 7740Sstevel@tonic-gate genericstable is in use, this feature will cause envelope 7750Sstevel@tonic-gate addresses to also masquerade as being from the masquerade 7760Sstevel@tonic-gate host. Normally only the header addresses are masqueraded. 7770Sstevel@tonic-gate 7780Sstevel@tonic-gategenericstable This feature will cause unqualified addresses (i.e., without 7790Sstevel@tonic-gate a domain) and addresses with a domain listed in class {G} 7800Sstevel@tonic-gate to be looked up in a map and turned into another ("generic") 7810Sstevel@tonic-gate form, which can change both the domain name and the user name. 7820Sstevel@tonic-gate Notice: if you use an MSP (as it is default starting with 7830Sstevel@tonic-gate 8.12), the MTA will only receive qualified addresses from the 7840Sstevel@tonic-gate MSP (as required by the RFCs). Hence you need to add your 7850Sstevel@tonic-gate domain to class {G}. This feature is similar to the userdb 7860Sstevel@tonic-gate functionality. The same types of addresses as for 7870Sstevel@tonic-gate masquerading are looked up, i.e., only header sender 7880Sstevel@tonic-gate addresses unless the allmasquerade and/or masquerade_envelope 7890Sstevel@tonic-gate features are given. Qualified addresses must have the domain 7900Sstevel@tonic-gate part in class {G}; entries can be added to this class by the 7910Sstevel@tonic-gate macros GENERICS_DOMAIN or GENERICS_DOMAIN_FILE (analogously 7920Sstevel@tonic-gate to MASQUERADE_DOMAIN and MASQUERADE_DOMAIN_FILE, see below). 7930Sstevel@tonic-gate 7940Sstevel@tonic-gate The argument of FEATURE(`genericstable') may be the map 7950Sstevel@tonic-gate definition; the default map definition is: 7960Sstevel@tonic-gate 7970Sstevel@tonic-gate hash /etc/mail/genericstable 7980Sstevel@tonic-gate 7990Sstevel@tonic-gate The key for this table is either the full address, the domain 8000Sstevel@tonic-gate (with a leading @; the localpart is passed as first argument) 8010Sstevel@tonic-gate or the unqualified username (tried in the order mentioned); 8020Sstevel@tonic-gate the value is the new user address. If the new user address 8030Sstevel@tonic-gate does not include a domain, it will be qualified in the standard 8040Sstevel@tonic-gate manner, i.e., using $j or the masquerade name. Note that the 8050Sstevel@tonic-gate address being looked up must be fully qualified. For local 8060Sstevel@tonic-gate mail, it is necessary to use FEATURE(`always_add_domain') 8070Sstevel@tonic-gate for the addresses to be qualified. 8080Sstevel@tonic-gate The "+detail" of an address is passed as %1, so entries like 8090Sstevel@tonic-gate 8100Sstevel@tonic-gate old+*@foo.org new+%1@example.com 8110Sstevel@tonic-gate gen+*@foo.org %1@example.com 8120Sstevel@tonic-gate 8130Sstevel@tonic-gate and other forms are possible. 8140Sstevel@tonic-gate 8150Sstevel@tonic-gategenerics_entire_domain 8160Sstevel@tonic-gate If the genericstable is enabled and GENERICS_DOMAIN or 8170Sstevel@tonic-gate GENERICS_DOMAIN_FILE is used, this feature will cause 8180Sstevel@tonic-gate addresses to be searched in the map if their domain 8190Sstevel@tonic-gate parts are subdomains of elements in class {G}. 8200Sstevel@tonic-gate 8210Sstevel@tonic-gatevirtusertable A domain-specific form of aliasing, allowing multiple 8220Sstevel@tonic-gate virtual domains to be hosted on one machine. For example, 823616Sjbeck if the virtuser table contains: 8240Sstevel@tonic-gate 8250Sstevel@tonic-gate info@foo.com foo-info 8260Sstevel@tonic-gate info@bar.com bar-info 8270Sstevel@tonic-gate joe@bar.com error:nouser 550 No such user here 8280Sstevel@tonic-gate jax@bar.com error:5.7.0:550 Address invalid 8290Sstevel@tonic-gate @baz.org jane@example.net 8300Sstevel@tonic-gate 8310Sstevel@tonic-gate then mail addressed to info@foo.com will be sent to the 8320Sstevel@tonic-gate address foo-info, mail addressed to info@bar.com will be 8330Sstevel@tonic-gate delivered to bar-info, and mail addressed to anyone at baz.org 8340Sstevel@tonic-gate will be sent to jane@example.net, mail to joe@bar.com will 8350Sstevel@tonic-gate be rejected with the specified error message, and mail to 8360Sstevel@tonic-gate jax@bar.com will also have a RFC 1893 compliant error code 8370Sstevel@tonic-gate 5.7.0. 8380Sstevel@tonic-gate 8390Sstevel@tonic-gate The username from the original address is passed 8400Sstevel@tonic-gate as %1 allowing: 8410Sstevel@tonic-gate 8420Sstevel@tonic-gate @foo.org %1@example.com 8430Sstevel@tonic-gate 8440Sstevel@tonic-gate meaning someone@foo.org will be sent to someone@example.com. 8450Sstevel@tonic-gate Additionally, if the local part consists of "user+detail" 8460Sstevel@tonic-gate then "detail" is passed as %2 and "+detail" is passed as %3 8470Sstevel@tonic-gate when a match against user+* is attempted, so entries like 8480Sstevel@tonic-gate 8490Sstevel@tonic-gate old+*@foo.org new+%2@example.com 8500Sstevel@tonic-gate gen+*@foo.org %2@example.com 8510Sstevel@tonic-gate +*@foo.org %1%3@example.com 8520Sstevel@tonic-gate X++@foo.org Z%3@example.com 8530Sstevel@tonic-gate @bar.org %1%3 8540Sstevel@tonic-gate 8550Sstevel@tonic-gate and other forms are possible. Note: to preserve "+detail" 8560Sstevel@tonic-gate for a default case (@domain) %1%3 must be used as RHS. 8570Sstevel@tonic-gate There are two wildcards after "+": "+" matches only a non-empty 8580Sstevel@tonic-gate detail, "*" matches also empty details, e.g., user+@foo.org 8590Sstevel@tonic-gate matches +*@foo.org but not ++@foo.org. This can be used 8600Sstevel@tonic-gate to ensure that the parameters %2 and %3 are not empty. 8610Sstevel@tonic-gate 8620Sstevel@tonic-gate All the host names on the left hand side (foo.com, bar.com, 8630Sstevel@tonic-gate and baz.org) must be in class {w} or class {VirtHost}. The 8640Sstevel@tonic-gate latter can be defined by the macros VIRTUSER_DOMAIN or 8650Sstevel@tonic-gate VIRTUSER_DOMAIN_FILE (analogously to MASQUERADE_DOMAIN and 8660Sstevel@tonic-gate MASQUERADE_DOMAIN_FILE, see below). If VIRTUSER_DOMAIN or 8670Sstevel@tonic-gate VIRTUSER_DOMAIN_FILE is used, then the entries of class 8680Sstevel@tonic-gate {VirtHost} are added to class {R}, i.e., relaying is allowed 8690Sstevel@tonic-gate to (and from) those domains. The default map definition is: 8700Sstevel@tonic-gate 8710Sstevel@tonic-gate hash /etc/mail/virtusertable 8720Sstevel@tonic-gate 8730Sstevel@tonic-gate A new definition can be specified as the second argument of 8740Sstevel@tonic-gate the FEATURE macro, such as 8750Sstevel@tonic-gate 8760Sstevel@tonic-gate FEATURE(`virtusertable', `dbm /etc/mail/virtusers') 8770Sstevel@tonic-gate 8780Sstevel@tonic-gatevirtuser_entire_domain 8790Sstevel@tonic-gate If the virtusertable is enabled and VIRTUSER_DOMAIN or 8800Sstevel@tonic-gate VIRTUSER_DOMAIN_FILE is used, this feature will cause 8810Sstevel@tonic-gate addresses to be searched in the map if their domain 8820Sstevel@tonic-gate parts are subdomains of elements in class {VirtHost}. 8830Sstevel@tonic-gate 8840Sstevel@tonic-gateldap_routing Implement LDAP-based e-mail recipient routing according to 8850Sstevel@tonic-gate the Internet Draft draft-lachman-laser-ldap-mail-routing-01. 8860Sstevel@tonic-gate This provides a method to re-route addresses with a 8870Sstevel@tonic-gate domain portion in class {LDAPRoute} to either a 8880Sstevel@tonic-gate different mail host or a different address. Hosts can 8890Sstevel@tonic-gate be added to this class using LDAPROUTE_DOMAIN and 8900Sstevel@tonic-gate LDAPROUTE_DOMAIN_FILE (analogously to MASQUERADE_DOMAIN and 8910Sstevel@tonic-gate MASQUERADE_DOMAIN_FILE, see below). 8920Sstevel@tonic-gate 8930Sstevel@tonic-gate See the LDAP ROUTING section below for more information. 8940Sstevel@tonic-gate 8950Sstevel@tonic-gatenullclient This is a special case -- it creates a configuration file 8960Sstevel@tonic-gate containing nothing but support for forwarding all mail to a 8970Sstevel@tonic-gate central hub via a local SMTP-based network. The argument 8980Sstevel@tonic-gate is the name of that hub. 8990Sstevel@tonic-gate 9000Sstevel@tonic-gate The only other feature that should be used in conjunction 9010Sstevel@tonic-gate with this one is FEATURE(`nocanonify'). No mailers 9020Sstevel@tonic-gate should be defined. No aliasing or forwarding is done. 9030Sstevel@tonic-gate 9040Sstevel@tonic-gatelocal_lmtp Use an LMTP capable local mailer. The argument to this 9050Sstevel@tonic-gate feature is the pathname of an LMTP capable mailer. By 9060Sstevel@tonic-gate default, mail.local is used. This is expected to be the 9070Sstevel@tonic-gate mail.local which came with the 8.9 distribution which is 9080Sstevel@tonic-gate LMTP capable. The path to mail.local is set by the 9090Sstevel@tonic-gate confEBINDIR m4 variable -- making the default 9100Sstevel@tonic-gate LOCAL_MAILER_PATH /usr/libexec/mail.local. 9110Sstevel@tonic-gate If a different LMTP capable mailer is used, its pathname 9120Sstevel@tonic-gate can be specified as second parameter and the arguments 9130Sstevel@tonic-gate passed to it (A=) as third parameter, e.g., 9140Sstevel@tonic-gate 9150Sstevel@tonic-gate FEATURE(`local_lmtp', `/usr/local/bin/lmtp', `lmtp') 9160Sstevel@tonic-gate 9170Sstevel@tonic-gate WARNING: This feature sets LOCAL_MAILER_FLAGS unconditionally, 9180Sstevel@tonic-gate i.e., without respecting any definitions in an OSTYPE setting. 9190Sstevel@tonic-gate 9200Sstevel@tonic-gatelocal_procmail Use procmail or another delivery agent as the local mailer. 9210Sstevel@tonic-gate The argument to this feature is the pathname of the 9220Sstevel@tonic-gate delivery agent, which defaults to PROCMAIL_MAILER_PATH. 9230Sstevel@tonic-gate Note that this does NOT use PROCMAIL_MAILER_FLAGS or 9240Sstevel@tonic-gate PROCMAIL_MAILER_ARGS for the local mailer; tweak 9250Sstevel@tonic-gate LOCAL_MAILER_FLAGS and LOCAL_MAILER_ARGS instead, or 9260Sstevel@tonic-gate specify the appropriate parameters. When procmail is used, 9270Sstevel@tonic-gate the local mailer can make use of the 9280Sstevel@tonic-gate "user+indicator@local.host" syntax; normally the +indicator 9290Sstevel@tonic-gate is just tossed, but by default it is passed as the -a 9300Sstevel@tonic-gate argument to procmail. 9310Sstevel@tonic-gate 9320Sstevel@tonic-gate This feature can take up to three arguments: 9330Sstevel@tonic-gate 9340Sstevel@tonic-gate 1. Path to the mailer program 9350Sstevel@tonic-gate [default: /usr/local/bin/procmail] 9360Sstevel@tonic-gate 2. Argument vector including name of the program 9370Sstevel@tonic-gate [default: procmail -Y -a $h -d $u] 9380Sstevel@tonic-gate 3. Flags for the mailer [default: SPfhn9] 9390Sstevel@tonic-gate 9400Sstevel@tonic-gate Empty arguments cause the defaults to be taken. 9410Sstevel@tonic-gate Note that if you are on a system with a broken 9420Sstevel@tonic-gate setreuid() call, you may need to add -f $f to the procmail 9430Sstevel@tonic-gate argument vector to pass the proper sender to procmail. 9440Sstevel@tonic-gate 9450Sstevel@tonic-gate For example, this allows it to use the maildrop 9460Sstevel@tonic-gate (http://www.flounder.net/~mrsam/maildrop/) mailer instead 9470Sstevel@tonic-gate by specifying: 9480Sstevel@tonic-gate 9490Sstevel@tonic-gate FEATURE(`local_procmail', `/usr/local/bin/maildrop', 9500Sstevel@tonic-gate `maildrop -d $u') 9510Sstevel@tonic-gate 9520Sstevel@tonic-gate or scanmails using: 9530Sstevel@tonic-gate 9540Sstevel@tonic-gate FEATURE(`local_procmail', `/usr/local/bin/scanmails') 9550Sstevel@tonic-gate 9560Sstevel@tonic-gate WARNING: This feature sets LOCAL_MAILER_FLAGS unconditionally, 9570Sstevel@tonic-gate i.e., without respecting any definitions in an OSTYPE setting. 9580Sstevel@tonic-gate 9590Sstevel@tonic-gatebestmx_is_local Accept mail as though locally addressed for any host that 9600Sstevel@tonic-gate lists us as the best possible MX record. This generates 9610Sstevel@tonic-gate additional DNS traffic, but should be OK for low to 9620Sstevel@tonic-gate medium traffic hosts. The argument may be a set of 9630Sstevel@tonic-gate domains, which will limit the feature to only apply to 9640Sstevel@tonic-gate these domains -- this will reduce unnecessary DNS 9650Sstevel@tonic-gate traffic. THIS FEATURE IS FUNDAMENTALLY INCOMPATIBLE WITH 9660Sstevel@tonic-gate WILDCARD MX RECORDS!!! If you have a wildcard MX record 9670Sstevel@tonic-gate that matches your domain, you cannot use this feature. 9680Sstevel@tonic-gate 9690Sstevel@tonic-gatesmrsh Use the SendMail Restricted SHell (smrsh) provided 9700Sstevel@tonic-gate with the distribution instead of /bin/sh for mailing 9710Sstevel@tonic-gate to programs. This improves the ability of the local 9720Sstevel@tonic-gate system administrator to control what gets run via 9730Sstevel@tonic-gate e-mail. If an argument is provided it is used as the 9740Sstevel@tonic-gate pathname to smrsh; otherwise, the path defined by 9750Sstevel@tonic-gate confEBINDIR is used for the smrsh binary -- by default, 9760Sstevel@tonic-gate /usr/libexec/smrsh is assumed. 9770Sstevel@tonic-gate 9780Sstevel@tonic-gatepromiscuous_relay 9790Sstevel@tonic-gate By default, the sendmail configuration files do not permit 9800Sstevel@tonic-gate mail relaying (that is, accepting mail from outside your 9810Sstevel@tonic-gate local host (class {w}) and sending it to another host than 9820Sstevel@tonic-gate your local host). This option sets your site to allow 9830Sstevel@tonic-gate mail relaying from any site to any site. In almost all 9840Sstevel@tonic-gate cases, it is better to control relaying more carefully 9850Sstevel@tonic-gate with the access map, class {R}, or authentication. Domains 9860Sstevel@tonic-gate can be added to class {R} by the macros RELAY_DOMAIN or 9870Sstevel@tonic-gate RELAY_DOMAIN_FILE (analogously to MASQUERADE_DOMAIN and 9880Sstevel@tonic-gate MASQUERADE_DOMAIN_FILE, see below). 9890Sstevel@tonic-gate 9900Sstevel@tonic-gaterelay_entire_domain 9910Sstevel@tonic-gate This option allows any host in your domain as defined by 9920Sstevel@tonic-gate class {m} to use your server for relaying. Notice: make 9930Sstevel@tonic-gate sure that your domain is not just a top level domain, 9940Sstevel@tonic-gate e.g., com. This can happen if you give your host a name 9950Sstevel@tonic-gate like example.com instead of host.example.com. 9960Sstevel@tonic-gate 9970Sstevel@tonic-gaterelay_hosts_only 9980Sstevel@tonic-gate By default, names that are listed as RELAY in the access 9990Sstevel@tonic-gate db and class {R} are treated as domain names, not host names. 10000Sstevel@tonic-gate For example, if you specify ``foo.com'', then mail to or 10010Sstevel@tonic-gate from foo.com, abc.foo.com, or a.very.deep.domain.foo.com 10020Sstevel@tonic-gate will all be accepted for relaying. This feature changes 10030Sstevel@tonic-gate the behaviour to lookup individual host names only. 10040Sstevel@tonic-gate 10050Sstevel@tonic-gaterelay_based_on_MX 10060Sstevel@tonic-gate Turns on the ability to allow relaying based on the MX 10070Sstevel@tonic-gate records of the host portion of an incoming recipient; that 10080Sstevel@tonic-gate is, if an MX record for host foo.com points to your site, 10090Sstevel@tonic-gate you will accept and relay mail addressed to foo.com. See 10100Sstevel@tonic-gate description below for more information before using this 10110Sstevel@tonic-gate feature. Also, see the KNOWNBUGS entry regarding bestmx 10120Sstevel@tonic-gate map lookups. 10130Sstevel@tonic-gate 10140Sstevel@tonic-gate FEATURE(`relay_based_on_MX') does not necessarily allow 10150Sstevel@tonic-gate routing of these messages which you expect to be allowed, 10160Sstevel@tonic-gate if route address syntax (or %-hack syntax) is used. If 10170Sstevel@tonic-gate this is a problem, add entries to the access-table or use 10180Sstevel@tonic-gate FEATURE(`loose_relay_check'). 10190Sstevel@tonic-gate 10200Sstevel@tonic-gaterelay_mail_from 10210Sstevel@tonic-gate Allows relaying if the mail sender is listed as RELAY in 10220Sstevel@tonic-gate the access map. If an optional argument `domain' (this 10230Sstevel@tonic-gate is the literal word `domain', not a placeholder) is given, 10240Sstevel@tonic-gate relaying can be allowed just based on the domain portion 10250Sstevel@tonic-gate of the sender address. This feature should only be used if 10260Sstevel@tonic-gate absolutely necessary as the sender address can be easily 10270Sstevel@tonic-gate forged. Use of this feature requires the "From:" tag to 10280Sstevel@tonic-gate be used for the key in the access map; see the discussion 10290Sstevel@tonic-gate of tags and FEATURE(`relay_mail_from') in the section on 10300Sstevel@tonic-gate anti-spam configuration control. 10310Sstevel@tonic-gate 10320Sstevel@tonic-gaterelay_local_from 10330Sstevel@tonic-gate Allows relaying if the domain portion of the mail sender 10340Sstevel@tonic-gate is a local host. This should only be used if absolutely 10350Sstevel@tonic-gate necessary as it opens a window for spammers. Specifically, 10360Sstevel@tonic-gate they can send mail to your mail server that claims to be 10370Sstevel@tonic-gate from your domain (either directly or via a routed address), 10380Sstevel@tonic-gate and you will go ahead and relay it out to arbitrary hosts 10390Sstevel@tonic-gate on the Internet. 10400Sstevel@tonic-gate 10410Sstevel@tonic-gateaccept_unqualified_senders 10420Sstevel@tonic-gate Normally, MAIL FROM: commands in the SMTP session will be 10430Sstevel@tonic-gate refused if the connection is a network connection and the 10440Sstevel@tonic-gate sender address does not include a domain name. If your 1045616Sjbeck setup sends local mail unqualified (i.e., MAIL FROM:<joe>), 10460Sstevel@tonic-gate you will need to use this feature to accept unqualified 10470Sstevel@tonic-gate sender addresses. Setting the DaemonPortOptions modifier 10480Sstevel@tonic-gate 'u' overrides the default behavior, i.e., unqualified 10490Sstevel@tonic-gate addresses are accepted even without this FEATURE. 10500Sstevel@tonic-gate If this FEATURE is not used, the DaemonPortOptions modifier 10510Sstevel@tonic-gate 'f' can be used to enforce fully qualified addresses. 10520Sstevel@tonic-gate 10530Sstevel@tonic-gateaccept_unresolvable_domains 10540Sstevel@tonic-gate Normally, MAIL FROM: commands in the SMTP session will be 10550Sstevel@tonic-gate refused if the host part of the argument to MAIL FROM: 10560Sstevel@tonic-gate cannot be located in the host name service (e.g., an A or 10570Sstevel@tonic-gate MX record in DNS). If you are inside a firewall that has 10580Sstevel@tonic-gate only a limited view of the Internet host name space, this 10590Sstevel@tonic-gate could cause problems. In this case you probably want to 10600Sstevel@tonic-gate use this feature to accept all domains on input, even if 10610Sstevel@tonic-gate they are unresolvable. 10620Sstevel@tonic-gate 10630Sstevel@tonic-gateaccess_db Turns on the access database feature. The access db gives 10640Sstevel@tonic-gate you the ability to allow or refuse to accept mail from 10650Sstevel@tonic-gate specified domains for administrative reasons. Moreover, 10660Sstevel@tonic-gate it can control the behavior of sendmail in various situations. 10670Sstevel@tonic-gate By default, the access database specification is: 10680Sstevel@tonic-gate 10690Sstevel@tonic-gate hash -T<TMPF> /etc/mail/access 10700Sstevel@tonic-gate 10710Sstevel@tonic-gate See the anti-spam configuration control section for further 10720Sstevel@tonic-gate important information about this feature. Notice: 10730Sstevel@tonic-gate "-T<TMPF>" is meant literal, do not replace it by anything. 10740Sstevel@tonic-gate 10750Sstevel@tonic-gateblacklist_recipients 10760Sstevel@tonic-gate Turns on the ability to block incoming mail for certain 10770Sstevel@tonic-gate recipient usernames, hostnames, or addresses. For 10780Sstevel@tonic-gate example, you can block incoming mail to user nobody, 10790Sstevel@tonic-gate host foo.mydomain.com, or guest@bar.mydomain.com. 10800Sstevel@tonic-gate These specifications are put in the access db as 10810Sstevel@tonic-gate described in the anti-spam configuration control section 10820Sstevel@tonic-gate later in this document. 10830Sstevel@tonic-gate 10840Sstevel@tonic-gatedelay_checks The rulesets check_mail and check_relay will not be called 10850Sstevel@tonic-gate when a client connects or issues a MAIL command, respectively. 10860Sstevel@tonic-gate Instead, those rulesets will be called by the check_rcpt 10870Sstevel@tonic-gate ruleset; they will be skipped under certain circumstances. 10880Sstevel@tonic-gate See "Delay all checks" in the anti-spam configuration control 10890Sstevel@tonic-gate section. Note: this feature is incompatible to the versions 10900Sstevel@tonic-gate in 8.10 and 8.11. 10910Sstevel@tonic-gate 10920Sstevel@tonic-gateuse_client_ptr If this feature is enabled then check_relay will override 10930Sstevel@tonic-gate its first argument with $&{client_ptr}. This is useful for 10940Sstevel@tonic-gate rejections based on the unverified hostname of client, 10950Sstevel@tonic-gate which turns on the same behavior as in earlier sendmail 10960Sstevel@tonic-gate versions when delay_checks was not in use. See doc/op/op.* 10970Sstevel@tonic-gate about check_relay, {client_name}, and {client_ptr}. 10980Sstevel@tonic-gate 1099*3544Sjbeckdnsbl Turns on rejection, discarding, or quarantining of hosts 1100*3544Sjbeck found in a DNS based list. The first argument is used as 1101*3544Sjbeck the domain in which blocked hosts are listed. A second 1102*3544Sjbeck argument can be used to change the default error message, 1103*3544Sjbeck or select one of the operations `discard' and 'quarantine'. 1104*3544Sjbeck Without that second argument, the error message will be 1105*3544Sjbeck 11060Sstevel@tonic-gate Rejected: IP-ADDRESS listed at SERVER 1107*3544Sjbeck 11080Sstevel@tonic-gate where IP-ADDRESS and SERVER are replaced by the appropriate 11090Sstevel@tonic-gate information. By default, temporary lookup failures are 11100Sstevel@tonic-gate ignored. This behavior can be changed by specifying a 11110Sstevel@tonic-gate third argument, which must be either `t' or a full error 11120Sstevel@tonic-gate message. See the anti-spam configuration control section for 11130Sstevel@tonic-gate an example. The dnsbl feature can be included several times 11140Sstevel@tonic-gate to query different DNS based rejection lists. See also 11150Sstevel@tonic-gate enhdnsbl for an enhanced version. 11160Sstevel@tonic-gate 11170Sstevel@tonic-gate Set the DNSBL_MAP mc option to change the default map 11180Sstevel@tonic-gate definition from `host'. Set the DNSBL_MAP_OPT mc option 11190Sstevel@tonic-gate to add additional options to the map specification used. 11200Sstevel@tonic-gate 11210Sstevel@tonic-gate Some DNS based rejection lists cause failures if asked 11220Sstevel@tonic-gate for AAAA records. If your sendmail version is compiled 11230Sstevel@tonic-gate with IPv6 support (NETINET6) and you experience this 11240Sstevel@tonic-gate problem, add 11250Sstevel@tonic-gate 11260Sstevel@tonic-gate define(`DNSBL_MAP', `dns -R A') 11270Sstevel@tonic-gate 11280Sstevel@tonic-gate before the first use of this feature. Alternatively you 11290Sstevel@tonic-gate can use enhdnsbl instead (see below). Moreover, this 11300Sstevel@tonic-gate statement can be used to reduce the number of DNS retries, 11310Sstevel@tonic-gate e.g., 11320Sstevel@tonic-gate 11330Sstevel@tonic-gate define(`DNSBL_MAP', `dns -R A -r2') 11340Sstevel@tonic-gate 11350Sstevel@tonic-gate See below (EDNSBL_TO) for an explanation. 11360Sstevel@tonic-gate 11370Sstevel@tonic-gateenhdnsbl Enhanced version of dnsbl (see above). Further arguments 11380Sstevel@tonic-gate (up to 5) can be used to specify specific return values 11390Sstevel@tonic-gate from lookups. Temporary lookup failures are ignored unless 11400Sstevel@tonic-gate a third argument is given, which must be either `t' or a full 11410Sstevel@tonic-gate error message. By default, any successful lookup will 11420Sstevel@tonic-gate generate an error. Otherwise the result of the lookup is 11430Sstevel@tonic-gate compared with the supplied argument(s), and only if a match 11440Sstevel@tonic-gate occurs an error is generated. For example, 11450Sstevel@tonic-gate 11460Sstevel@tonic-gate FEATURE(`enhdnsbl', `dnsbl.example.com', `', `t', `127.0.0.2.') 11470Sstevel@tonic-gate 11480Sstevel@tonic-gate will reject the e-mail if the lookup returns the value 11490Sstevel@tonic-gate ``127.0.0.2.'', or generate a 451 response if the lookup 11500Sstevel@tonic-gate temporarily failed. The arguments can contain metasymbols 11510Sstevel@tonic-gate as they are allowed in the LHS of rules. As the example 11520Sstevel@tonic-gate shows, the default values are also used if an empty argument, 11530Sstevel@tonic-gate i.e., `', is specified. This feature requires that sendmail 11540Sstevel@tonic-gate has been compiled with the flag DNSMAP (see sendmail/README). 11550Sstevel@tonic-gate 11560Sstevel@tonic-gate Set the EDNSBL_TO mc option to change the DNS retry count 11570Sstevel@tonic-gate from the default value of 5, this can be very useful when 11580Sstevel@tonic-gate a DNS server is not responding, which in turn may cause 11590Sstevel@tonic-gate clients to time out (an entry stating 11600Sstevel@tonic-gate 11610Sstevel@tonic-gate did not issue MAIL/EXPN/VRFY/ETRN 11620Sstevel@tonic-gate 11630Sstevel@tonic-gate will be logged). 11640Sstevel@tonic-gate 11650Sstevel@tonic-gateratecontrol Enable simple ruleset to do connection rate control 11660Sstevel@tonic-gate checking. This requires entries in access_db of the form 11670Sstevel@tonic-gate 11680Sstevel@tonic-gate ClientRate:IP.ADD.RE.SS LIMIT 11690Sstevel@tonic-gate 11700Sstevel@tonic-gate The RHS specifies the maximum number of connections 11710Sstevel@tonic-gate (an integer number) over the time interval defined 11720Sstevel@tonic-gate by ConnectionRateWindowSize, where 0 means unlimited. 11730Sstevel@tonic-gate 11740Sstevel@tonic-gate Take the following example: 11750Sstevel@tonic-gate 11760Sstevel@tonic-gate ClientRate:10.1.2.3 4 11770Sstevel@tonic-gate ClientRate:127.0.0.1 0 11780Sstevel@tonic-gate ClientRate: 10 11790Sstevel@tonic-gate 11800Sstevel@tonic-gate 10.1.2.3 can only make up to 4 connections, the 11810Sstevel@tonic-gate general limit it 10, and 127.0.0.1 can make an unlimited 11820Sstevel@tonic-gate number of connections per ConnectionRateWindowSize. 11830Sstevel@tonic-gate 11840Sstevel@tonic-gate See also CONNECTION CONTROL. 11850Sstevel@tonic-gate 11860Sstevel@tonic-gateconncontrol Enable a simple check of the number of incoming SMTP 11870Sstevel@tonic-gate connections. This requires entries in access_db of the 11880Sstevel@tonic-gate form 11890Sstevel@tonic-gate 11900Sstevel@tonic-gate ClientConn:IP.ADD.RE.SS LIMIT 11910Sstevel@tonic-gate 11920Sstevel@tonic-gate The RHS specifies the maximum number of open connections 11930Sstevel@tonic-gate (an integer number). 11940Sstevel@tonic-gate 11950Sstevel@tonic-gate Take the following example: 11960Sstevel@tonic-gate 11970Sstevel@tonic-gate ClientConn:10.1.2.3 4 11980Sstevel@tonic-gate ClientConn:127.0.0.1 0 11990Sstevel@tonic-gate ClientConn: 10 12000Sstevel@tonic-gate 12010Sstevel@tonic-gate 10.1.2.3 can only have up to 4 open connections, the 12020Sstevel@tonic-gate general limit it 10, and 127.0.0.1 does not have any 12030Sstevel@tonic-gate explicit limit. 12040Sstevel@tonic-gate 12050Sstevel@tonic-gate See also CONNECTION CONTROL. 12060Sstevel@tonic-gate 12070Sstevel@tonic-gatemtamark Experimental support for "Marking Mail Transfer Agents in 12080Sstevel@tonic-gate Reverse DNS with TXT RRs" (MTAMark), see 12090Sstevel@tonic-gate draft-stumpf-dns-mtamark-01. Optional arguments are: 12100Sstevel@tonic-gate 12110Sstevel@tonic-gate 1. Error message, default: 12120Sstevel@tonic-gate 12130Sstevel@tonic-gate 550 Rejected: $&{client_addr} not listed as MTA 12140Sstevel@tonic-gate 12150Sstevel@tonic-gate 2. Temporary lookup failures are ignored unless a second 12160Sstevel@tonic-gate argument is given, which must be either `t' or a full 12170Sstevel@tonic-gate error message. 12180Sstevel@tonic-gate 12190Sstevel@tonic-gate 3. Lookup prefix, default: _perm._smtp._srv. This should 12200Sstevel@tonic-gate not be changed unless the draft changes it. 12210Sstevel@tonic-gate 12220Sstevel@tonic-gate Example: 12230Sstevel@tonic-gate 12240Sstevel@tonic-gate FEATURE(`mtamark', `', `t') 12250Sstevel@tonic-gate 12260Sstevel@tonic-gatelookupdotdomain Look up also .domain in the access map. This allows to 12270Sstevel@tonic-gate match only subdomains. It does not work well with 12280Sstevel@tonic-gate FEATURE(`relay_hosts_only'), because most lookups for 12290Sstevel@tonic-gate subdomains are suppressed by the latter feature. 12300Sstevel@tonic-gate 12310Sstevel@tonic-gateloose_relay_check 12320Sstevel@tonic-gate Normally, if % addressing is used for a recipient, e.g. 12330Sstevel@tonic-gate user%site@othersite, and othersite is in class {R}, the 12340Sstevel@tonic-gate check_rcpt ruleset will strip @othersite and recheck 12350Sstevel@tonic-gate user@site for relaying. This feature changes that 12360Sstevel@tonic-gate behavior. It should not be needed for most installations. 12370Sstevel@tonic-gate 12380Sstevel@tonic-gatepreserve_luser_host 12390Sstevel@tonic-gate Preserve the name of the recipient host if LUSER_RELAY is 12400Sstevel@tonic-gate used. Without this option, the domain part of the 12410Sstevel@tonic-gate recipient address will be replaced by the host specified as 12420Sstevel@tonic-gate LUSER_RELAY. This feature only works if the hostname is 12430Sstevel@tonic-gate passed to the mailer (see mailer triple in op.me). Note 12440Sstevel@tonic-gate that in the default configuration the local mailer does not 12450Sstevel@tonic-gate receive the hostname, i.e., the mailer triple has an empty 12460Sstevel@tonic-gate hostname. 12470Sstevel@tonic-gate 12480Sstevel@tonic-gatepreserve_local_plus_detail 12490Sstevel@tonic-gate Preserve the +detail portion of the address when passing 12500Sstevel@tonic-gate address to local delivery agent. Disables alias and 12510Sstevel@tonic-gate .forward +detail stripping (e.g., given user+detail, only 12520Sstevel@tonic-gate that address will be looked up in the alias file; user+* and 12530Sstevel@tonic-gate user will not be looked up). Only use if the local 12540Sstevel@tonic-gate delivery agent in use supports +detail addressing. 12550Sstevel@tonic-gate 12560Sstevel@tonic-gatecompat_check Enable ruleset check_compat to look up pairs of addresses 12570Sstevel@tonic-gate with the Compat: tag -- Compat:sender<@>recipient -- in the 12580Sstevel@tonic-gate access map. Valid values for the RHS include 12590Sstevel@tonic-gate DISCARD silently discard recipient 12600Sstevel@tonic-gate TEMP: return a temporary error 12610Sstevel@tonic-gate ERROR: return a permanent error 12620Sstevel@tonic-gate In the last two cases, a 4xy/5xy SMTP reply code should 12630Sstevel@tonic-gate follow the colon. 12640Sstevel@tonic-gate 12650Sstevel@tonic-gateno_default_msa Don't generate the default MSA daemon, i.e., 12660Sstevel@tonic-gate DAEMON_OPTIONS(`Port=587,Name=MSA,M=E') 12670Sstevel@tonic-gate To define a MSA daemon with other parameters, use this 12680Sstevel@tonic-gate FEATURE and introduce new settings via DAEMON_OPTIONS(). 12690Sstevel@tonic-gate 12700Sstevel@tonic-gatemsp Defines config file for Message Submission Program. 12710Sstevel@tonic-gate See cf/submit.mc for how 12720Sstevel@tonic-gate to use it. An optional argument can be used to override 12730Sstevel@tonic-gate the default of `[localhost]' to use as host to send all 12740Sstevel@tonic-gate e-mails to. Note that MX records will be used if the 12750Sstevel@tonic-gate specified hostname is not in square brackets (e.g., 12760Sstevel@tonic-gate [hostname]). If `MSA' is specified as second argument then 12770Sstevel@tonic-gate port 587 is used to contact the server. Example: 12780Sstevel@tonic-gate 12790Sstevel@tonic-gate FEATURE(`msp', `', `MSA') 12800Sstevel@tonic-gate 12810Sstevel@tonic-gate Some more hints about possible changes can be found below 12820Sstevel@tonic-gate in the section MESSAGE SUBMISSION PROGRAM. 12830Sstevel@tonic-gate 12840Sstevel@tonic-gate Note: Due to many problems, submit.mc uses 12850Sstevel@tonic-gate 12860Sstevel@tonic-gate FEATURE(`msp', `[127.0.0.1]') 12870Sstevel@tonic-gate 12880Sstevel@tonic-gate by default. If you have a machine with IPv6 only, 12890Sstevel@tonic-gate change it to 12900Sstevel@tonic-gate 12910Sstevel@tonic-gate FEATURE(`msp', `[IPv6:::1]') 12920Sstevel@tonic-gate 12930Sstevel@tonic-gate If you want to continue using '[localhost]', (the behavior 12940Sstevel@tonic-gate up to 8.12.6), use 12950Sstevel@tonic-gate 12960Sstevel@tonic-gate FEATURE(`msp') 12970Sstevel@tonic-gate 12980Sstevel@tonic-gatequeuegroup A simple example how to select a queue group based 12990Sstevel@tonic-gate on the full e-mail address or the domain of the 13000Sstevel@tonic-gate recipient. Selection is done via entries in the 13010Sstevel@tonic-gate access map using the tag QGRP:, for example: 13020Sstevel@tonic-gate 13030Sstevel@tonic-gate QGRP:example.com main 13040Sstevel@tonic-gate QGRP:friend@some.org others 13050Sstevel@tonic-gate QGRP:my.domain local 13060Sstevel@tonic-gate 13070Sstevel@tonic-gate where "main", "others", and "local" are names of 13080Sstevel@tonic-gate queue groups. If an argument is specified, it is used 13090Sstevel@tonic-gate as default queue group. 13100Sstevel@tonic-gate 13110Sstevel@tonic-gate Note: please read the warning in doc/op/op.me about 13120Sstevel@tonic-gate queue groups and possible queue manipulations. 13130Sstevel@tonic-gate 13140Sstevel@tonic-gategreet_pause Adds the greet_pause ruleset which enables open proxy 13150Sstevel@tonic-gate and SMTP slamming protection. The feature can take an 13160Sstevel@tonic-gate argument specifying the milliseconds to wait: 13170Sstevel@tonic-gate 13180Sstevel@tonic-gate FEATURE(`greet_pause', `5000') dnl 5 seconds 13190Sstevel@tonic-gate 13200Sstevel@tonic-gate If FEATURE(`access_db') is enabled, an access database 13210Sstevel@tonic-gate lookup with the GreetPause tag is done using client 13220Sstevel@tonic-gate hostname, domain, IP address, or subnet to determine the 13230Sstevel@tonic-gate pause time: 13240Sstevel@tonic-gate 13250Sstevel@tonic-gate GreetPause:my.domain 0 13260Sstevel@tonic-gate GreetPause:example.com 5000 13270Sstevel@tonic-gate GreetPause:10.1.2 2000 13280Sstevel@tonic-gate GreetPause:127.0.0.1 0 13290Sstevel@tonic-gate 13300Sstevel@tonic-gate When using FEATURE(`access_db'), the optional 13310Sstevel@tonic-gate FEATURE(`greet_pause') argument becomes the default if 13320Sstevel@tonic-gate nothing is found in the access database. A ruleset called 13330Sstevel@tonic-gate Local_greet_pause can be used for local modifications, e.g., 13340Sstevel@tonic-gate 13350Sstevel@tonic-gate LOCAL_RULESETS 13360Sstevel@tonic-gate SLocal_greet_pause 13370Sstevel@tonic-gate R$* $: $&{daemon_flags} 13380Sstevel@tonic-gate R$* a $* $# 0 13390Sstevel@tonic-gate 1340*3544Sjbeckblock_bad_helo Reject messages from SMTP clients which provide a HELO/EHLO 1341*3544Sjbeck argument which is either unqualified, or is one of our own 1342*3544Sjbeck names (i.e., the server name instead of the client name). 1343*3544Sjbeck 1344*3544Sjbeckrequire_rdns Reject mail from connecting SMTP clients without proper 1345*3544Sjbeck rDNS (reverse DNS), functional gethostbyaddr() resolution. 1346*3544Sjbeck 1347*3544Sjbeck The basic policy is to reject message with a 5xx error if 1348*3544Sjbeck the IP address fails to resolve. However, if this is a 1349*3544Sjbeck temporary failure, a 4xx temporary failure is returned. 1350*3544Sjbeck If the look-up succeeds, but returns an apparently forged 1351*3544Sjbeck value, this is treated as a temporary failure with a 4xx 1352*3544Sjbeck error code. 1353*3544Sjbeck 1354*3544Sjbeck EXCEPTIONS: 1355*3544Sjbeck 1356*3544Sjbeck Exceptions based on access entries are discussed below. 1357*3544Sjbeck Any IP address matched using $=R (the "relay-domains" file) 1358*3544Sjbeck is excepted from the rules. Since we have explicitly 1359*3544Sjbeck allowed relaying for this host, based on IP address, we 1360*3544Sjbeck ignore the rDNS failure. 1361*3544Sjbeck 1362*3544Sjbeck The philosophical assumption here is that most users do 1363*3544Sjbeck not control their rDNS. They should be able to send mail 1364*3544Sjbeck through their ISP, whether or not they have valid rDNS. 1365*3544Sjbeck The class $=R, roughly speaking, contains those IP addresses 1366*3544Sjbeck and address ranges for which we are the ISP, or are acting 1367*3544Sjbeck as if the ISP. 1368*3544Sjbeck 1369*3544Sjbeck If `delay_checks' is in effect (recommended), then any 1370*3544Sjbeck sender who has authenticated is also excepted from the 1371*3544Sjbeck restrictions. This happens because the rules produced by 1372*3544Sjbeck this FEATURE() will not be applied to authenticated senders 1373*3544Sjbeck (assuming `delay_checks'). 1374*3544Sjbeck 1375*3544Sjbeck ACCESS MAP ENTRIES: 1376*3544Sjbeck 1377*3544Sjbeck Entries such as 1378*3544Sjbeck Connect:1.2.3.4 OK 1379*3544Sjbeck Connect:1.2 RELAY 1380*3544Sjbeck will whitelist IP address 1.2.3.4, so that the rDNS 1381*3544Sjbeck blocking does apply to that IP address 1382*3544Sjbeck 1383*3544Sjbeck Entries such as 1384*3544Sjbeck Connect:1.2.3.4 REJECT 1385*3544Sjbeck will have the effect of forcing a temporary failure for 1386*3544Sjbeck that address to be treated as a permanent failure. 1387*3544Sjbeck 1388*3544Sjbeckbadmx Reject envelope sender addresses (MAIL) whose domain part 1389*3544Sjbeck resolves to a "bad" MX record. By default these are 1390*3544Sjbeck MX records which resolve to A records that match the 1391*3544Sjbeck regular expression: 1392*3544Sjbeck 1393*3544Sjbeck ^(127\.|10\.|0\.0\.0\.0) 1394*3544Sjbeck 1395*3544Sjbeck This default regular expression can be overridden by 1396*3544Sjbeck specifying an argument, e.g., 1397*3544Sjbeck 1398*3544Sjbeck FEATURE(`badmx', `^127\.0\.0\.1') 1399*3544Sjbeck 1400*3544Sjbeck Note: this feature requires that the sendmail binary 1401*3544Sjbeck has been compiled with the options MAP_REGEX and 1402*3544Sjbeck DNSMAP. 1403*3544Sjbeck 14040Sstevel@tonic-gate+--------------------+ 14050Sstevel@tonic-gate| USING UUCP MAILERS | 14060Sstevel@tonic-gate+--------------------+ 14070Sstevel@tonic-gate 14080Sstevel@tonic-gateIt's hard to get UUCP mailers right because of the extremely ad hoc 14090Sstevel@tonic-gatenature of UUCP addressing. These config files are really designed 14100Sstevel@tonic-gatefor domain-based addressing, even for UUCP sites. 14110Sstevel@tonic-gate 14120Sstevel@tonic-gateThere are four UUCP mailers available. The choice of which one to 14130Sstevel@tonic-gateuse is partly a matter of local preferences and what is running at 14140Sstevel@tonic-gatethe other end of your UUCP connection. Unlike good protocols that 14150Sstevel@tonic-gatedefine what will go over the wire, UUCP uses the policy that you 14160Sstevel@tonic-gateshould do what is right for the other end; if they change, you have 14170Sstevel@tonic-gateto change. This makes it hard to do the right thing, and discourages 14180Sstevel@tonic-gatepeople from updating their software. In general, if you can avoid 14190Sstevel@tonic-gateUUCP, please do. 14200Sstevel@tonic-gate 14210Sstevel@tonic-gateThe major choice is whether to go for a domainized scheme or a 14220Sstevel@tonic-gatenon-domainized scheme. This depends entirely on what the other 14230Sstevel@tonic-gateend will recognize. If at all possible, you should encourage the 14240Sstevel@tonic-gateother end to go to a domain-based system -- non-domainized addresses 14250Sstevel@tonic-gatedon't work entirely properly. 14260Sstevel@tonic-gate 14270Sstevel@tonic-gateThe four mailers are: 14280Sstevel@tonic-gate 14290Sstevel@tonic-gate uucp-old (obsolete name: "uucp") 14300Sstevel@tonic-gate This is the oldest, the worst (but the closest to UUCP) way of 14310Sstevel@tonic-gate sending messages across UUCP connections. It does bangify 14320Sstevel@tonic-gate everything and prepends $U (your UUCP name) to the sender's 14330Sstevel@tonic-gate address (which can already be a bang path itself). It can 14340Sstevel@tonic-gate only send to one address at a time, so it spends a lot of 14350Sstevel@tonic-gate time copying duplicates of messages. Avoid this if at all 14360Sstevel@tonic-gate possible. 14370Sstevel@tonic-gate 14380Sstevel@tonic-gate uucp-new (obsolete name: "suucp") 14390Sstevel@tonic-gate The same as above, except that it assumes that in one rmail 14400Sstevel@tonic-gate command you can specify several recipients. It still has a 14410Sstevel@tonic-gate lot of other problems. 14420Sstevel@tonic-gate 14430Sstevel@tonic-gate uucp-dom 14440Sstevel@tonic-gate This UUCP mailer keeps everything as domain addresses. 14450Sstevel@tonic-gate Basically, it uses the SMTP mailer rewriting rules. This mailer 14460Sstevel@tonic-gate is only included if MAILER(`smtp') is specified before 14470Sstevel@tonic-gate MAILER(`uucp'). 14480Sstevel@tonic-gate 14490Sstevel@tonic-gate Unfortunately, a lot of UUCP mailer transport agents require 14500Sstevel@tonic-gate bangified addresses in the envelope, although you can use 14510Sstevel@tonic-gate domain-based addresses in the message header. (The envelope 14520Sstevel@tonic-gate shows up as the From_ line on UNIX mail.) So.... 14530Sstevel@tonic-gate 14540Sstevel@tonic-gate uucp-uudom 14550Sstevel@tonic-gate This is a cross between uucp-new (for the envelope addresses) 14560Sstevel@tonic-gate and uucp-dom (for the header addresses). It bangifies the 14570Sstevel@tonic-gate envelope sender (From_ line in messages) without adding the 14580Sstevel@tonic-gate local hostname, unless there is no host name on the address 14590Sstevel@tonic-gate at all (e.g., "wolf") or the host component is a UUCP host name 14600Sstevel@tonic-gate instead of a domain name ("somehost!wolf" instead of 14610Sstevel@tonic-gate "some.dom.ain!wolf"). This is also included only if MAILER(`smtp') 14620Sstevel@tonic-gate is also specified earlier. 14630Sstevel@tonic-gate 14640Sstevel@tonic-gateExamples: 14650Sstevel@tonic-gate 14660Sstevel@tonic-gateOn host grasp.insa-lyon.fr (UUCP host name "grasp"), the following 14670Sstevel@tonic-gatesummarizes the sender rewriting for various mailers. 14680Sstevel@tonic-gate 14690Sstevel@tonic-gateMailer sender rewriting in the envelope 14700Sstevel@tonic-gate------ ------ ------------------------- 14710Sstevel@tonic-gateuucp-{old,new} wolf grasp!wolf 14720Sstevel@tonic-gateuucp-dom wolf wolf@grasp.insa-lyon.fr 14730Sstevel@tonic-gateuucp-uudom wolf grasp.insa-lyon.fr!wolf 14740Sstevel@tonic-gate 14750Sstevel@tonic-gateuucp-{old,new} wolf@fr.net grasp!fr.net!wolf 14760Sstevel@tonic-gateuucp-dom wolf@fr.net wolf@fr.net 14770Sstevel@tonic-gateuucp-uudom wolf@fr.net fr.net!wolf 14780Sstevel@tonic-gate 14790Sstevel@tonic-gateuucp-{old,new} somehost!wolf grasp!somehost!wolf 14800Sstevel@tonic-gateuucp-dom somehost!wolf somehost!wolf@grasp.insa-lyon.fr 14810Sstevel@tonic-gateuucp-uudom somehost!wolf grasp.insa-lyon.fr!somehost!wolf 14820Sstevel@tonic-gate 14830Sstevel@tonic-gateIf you are using one of the domainized UUCP mailers, you really want 14840Sstevel@tonic-gateto convert all UUCP addresses to domain format -- otherwise, it will 14850Sstevel@tonic-gatedo it for you (and probably not the way you expected). For example, 14860Sstevel@tonic-gateif you have the address foo!bar!baz (and you are not sending to foo), 14870Sstevel@tonic-gatethe heuristics will add the @uucp.relay.name or @local.host.name to 14880Sstevel@tonic-gatethis address. However, if you map foo to foo.host.name first, it 14890Sstevel@tonic-gatewill not add the local hostname. You can do this using the uucpdomain 14900Sstevel@tonic-gatefeature. 14910Sstevel@tonic-gate 14920Sstevel@tonic-gate 14930Sstevel@tonic-gate+-------------------+ 14940Sstevel@tonic-gate| TWEAKING RULESETS | 14950Sstevel@tonic-gate+-------------------+ 14960Sstevel@tonic-gate 14970Sstevel@tonic-gateFor more complex configurations, you can define special rules. 14980Sstevel@tonic-gateThe macro LOCAL_RULE_3 introduces rules that are used in canonicalizing 14990Sstevel@tonic-gatethe names. Any modifications made here are reflected in the header. 15000Sstevel@tonic-gate 15010Sstevel@tonic-gateA common use is to convert old UUCP addresses to SMTP addresses using 15020Sstevel@tonic-gatethe UUCPSMTP macro. For example: 15030Sstevel@tonic-gate 15040Sstevel@tonic-gate LOCAL_RULE_3 15050Sstevel@tonic-gate UUCPSMTP(`decvax', `decvax.dec.com') 15060Sstevel@tonic-gate UUCPSMTP(`research', `research.att.com') 15070Sstevel@tonic-gate 15080Sstevel@tonic-gatewill cause addresses of the form "decvax!user" and "research!user" 15090Sstevel@tonic-gateto be converted to "user@decvax.dec.com" and "user@research.att.com" 15100Sstevel@tonic-gaterespectively. 15110Sstevel@tonic-gate 15120Sstevel@tonic-gateThis could also be used to look up hosts in a database map: 15130Sstevel@tonic-gate 15140Sstevel@tonic-gate LOCAL_RULE_3 15150Sstevel@tonic-gate R$* < @ $+ > $* $: $1 < @ $(hostmap $2 $) > $3 15160Sstevel@tonic-gate 15170Sstevel@tonic-gateThis map would be defined in the LOCAL_CONFIG portion, as shown below. 15180Sstevel@tonic-gate 15190Sstevel@tonic-gateSimilarly, LOCAL_RULE_0 can be used to introduce new parsing rules. 15200Sstevel@tonic-gateFor example, new rules are needed to parse hostnames that you accept 15210Sstevel@tonic-gatevia MX records. For example, you might have: 15220Sstevel@tonic-gate 15230Sstevel@tonic-gate LOCAL_RULE_0 15240Sstevel@tonic-gate R$+ <@ host.dom.ain.> $#uucp $@ cnmat $: $1 < @ host.dom.ain.> 15250Sstevel@tonic-gate 15260Sstevel@tonic-gateYou would use this if you had installed an MX record for cnmat.Berkeley.EDU 15270Sstevel@tonic-gatepointing at this host; this rule catches the message and forwards it on 15280Sstevel@tonic-gateusing UUCP. 15290Sstevel@tonic-gate 15300Sstevel@tonic-gateYou can also tweak rulesets 1 and 2 using LOCAL_RULE_1 and LOCAL_RULE_2. 15310Sstevel@tonic-gateThese rulesets are normally empty. 15320Sstevel@tonic-gate 15330Sstevel@tonic-gateA similar macro is LOCAL_CONFIG. This introduces lines added after the 15340Sstevel@tonic-gateboilerplate option setting but before rulesets. Do not declare rulesets in 15350Sstevel@tonic-gatethe LOCAL_CONFIG section. It can be used to declare local database maps or 15360Sstevel@tonic-gatewhatever. For example: 15370Sstevel@tonic-gate 15380Sstevel@tonic-gate LOCAL_CONFIG 15390Sstevel@tonic-gate Khostmap hash /etc/mail/hostmap 15400Sstevel@tonic-gate Kyplocal nis -m hosts.byname 15410Sstevel@tonic-gate 15420Sstevel@tonic-gate 15430Sstevel@tonic-gate+---------------------------+ 15440Sstevel@tonic-gate| MASQUERADING AND RELAYING | 15450Sstevel@tonic-gate+---------------------------+ 15460Sstevel@tonic-gate 15470Sstevel@tonic-gateYou can have your host masquerade as another using 15480Sstevel@tonic-gate 15490Sstevel@tonic-gate MASQUERADE_AS(`host.domain') 15500Sstevel@tonic-gate 15510Sstevel@tonic-gateThis causes mail being sent to be labeled as coming from the 15520Sstevel@tonic-gateindicated host.domain, rather than $j. One normally masquerades as 15530Sstevel@tonic-gateone of one's own subdomains (for example, it's unlikely that 15540Sstevel@tonic-gateBerkeley would choose to masquerade as an MIT site). This 15550Sstevel@tonic-gatebehaviour is modified by a plethora of FEATUREs; in particular, see 15560Sstevel@tonic-gatemasquerade_envelope, allmasquerade, limited_masquerade, and 15570Sstevel@tonic-gatemasquerade_entire_domain. 15580Sstevel@tonic-gate 15590Sstevel@tonic-gateThe masquerade name is not normally canonified, so it is important 15600Sstevel@tonic-gatethat it be your One True Name, that is, fully qualified and not a 15610Sstevel@tonic-gateCNAME. However, if you use a CNAME, the receiving side may canonify 15620Sstevel@tonic-gateit for you, so don't think you can cheat CNAME mapping this way. 15630Sstevel@tonic-gate 15640Sstevel@tonic-gateNormally the only addresses that are masqueraded are those that come 15650Sstevel@tonic-gatefrom this host (that is, are either unqualified or in class {w}, the list 15660Sstevel@tonic-gateof local domain names). You can augment this list, which is realized 15670Sstevel@tonic-gateby class {M} using 15680Sstevel@tonic-gate 15690Sstevel@tonic-gate MASQUERADE_DOMAIN(`otherhost.domain') 15700Sstevel@tonic-gate 15710Sstevel@tonic-gateThe effect of this is that although mail to user@otherhost.domain 15720Sstevel@tonic-gatewill not be delivered locally, any mail including any user@otherhost.domain 15730Sstevel@tonic-gatewill, when relayed, be rewritten to have the MASQUERADE_AS address. 15740Sstevel@tonic-gateThis can be a space-separated list of names. 15750Sstevel@tonic-gate 15760Sstevel@tonic-gateIf these names are in a file, you can use 15770Sstevel@tonic-gate 15780Sstevel@tonic-gate MASQUERADE_DOMAIN_FILE(`filename') 15790Sstevel@tonic-gate 15800Sstevel@tonic-gateto read the list of names from the indicated file (i.e., to add 15810Sstevel@tonic-gateelements to class {M}). 15820Sstevel@tonic-gate 15830Sstevel@tonic-gateTo exempt hosts or subdomains from being masqueraded, you can use 15840Sstevel@tonic-gate 15850Sstevel@tonic-gate MASQUERADE_EXCEPTION(`host.domain') 15860Sstevel@tonic-gate 15870Sstevel@tonic-gateThis can come handy if you want to masquerade a whole domain 15880Sstevel@tonic-gateexcept for one (or a few) host(s). If these names are in a file, 15890Sstevel@tonic-gateyou can use 15900Sstevel@tonic-gate 15910Sstevel@tonic-gate MASQUERADE_EXCEPTION_FILE(`filename') 15920Sstevel@tonic-gate 15930Sstevel@tonic-gateNormally only header addresses are masqueraded. If you want to 15940Sstevel@tonic-gatemasquerade the envelope as well, use 15950Sstevel@tonic-gate 15960Sstevel@tonic-gate FEATURE(`masquerade_envelope') 15970Sstevel@tonic-gate 15980Sstevel@tonic-gateThere are always users that need to be "exposed" -- that is, their 15990Sstevel@tonic-gateinternal site name should be displayed instead of the masquerade name. 16000Sstevel@tonic-gateRoot is an example (which has been "exposed" by default prior to 8.10). 16010Sstevel@tonic-gateYou can add users to this list using 16020Sstevel@tonic-gate 16030Sstevel@tonic-gate EXPOSED_USER(`usernames') 16040Sstevel@tonic-gate 16050Sstevel@tonic-gateThis adds users to class {E}; you could also use 16060Sstevel@tonic-gate 16070Sstevel@tonic-gate EXPOSED_USER_FILE(`filename') 16080Sstevel@tonic-gate 16090Sstevel@tonic-gateYou can also arrange to relay all unqualified names (that is, names 16100Sstevel@tonic-gatewithout @host) to a relay host. For example, if you have a central 16110Sstevel@tonic-gateemail server, you might relay to that host so that users don't have 16120Sstevel@tonic-gateto have .forward files or aliases. You can do this using 16130Sstevel@tonic-gate 16140Sstevel@tonic-gate define(`LOCAL_RELAY', `mailer:hostname') 16150Sstevel@tonic-gate 16160Sstevel@tonic-gateThe ``mailer:'' can be omitted, in which case the mailer defaults to 16170Sstevel@tonic-gate"relay". There are some user names that you don't want relayed, perhaps 16180Sstevel@tonic-gatebecause of local aliases. A common example is root, which may be 16190Sstevel@tonic-gatelocally aliased. You can add entries to this list using 16200Sstevel@tonic-gate 16210Sstevel@tonic-gate LOCAL_USER(`usernames') 16220Sstevel@tonic-gate 16230Sstevel@tonic-gateThis adds users to class {L}; you could also use 16240Sstevel@tonic-gate 16250Sstevel@tonic-gate LOCAL_USER_FILE(`filename') 16260Sstevel@tonic-gate 16270Sstevel@tonic-gateIf you want all incoming mail sent to a centralized hub, as for a 16280Sstevel@tonic-gateshared /var/spool/mail scheme, use 16290Sstevel@tonic-gate 16300Sstevel@tonic-gate define(`MAIL_HUB', `mailer:hostname') 16310Sstevel@tonic-gate 16320Sstevel@tonic-gateAgain, ``mailer:'' defaults to "relay". If you define both LOCAL_RELAY 16330Sstevel@tonic-gateand MAIL_HUB _AND_ you have FEATURE(`stickyhost'), unqualified names will 16340Sstevel@tonic-gatebe sent to the LOCAL_RELAY and other local names will be sent to MAIL_HUB. 16350Sstevel@tonic-gateNote: there is a (long standing) bug which keeps this combination from 16360Sstevel@tonic-gateworking for addresses of the form user+detail. 16370Sstevel@tonic-gateNames in class {L} will be delivered locally, so you MUST have aliases or 16380Sstevel@tonic-gate.forward files for them. 16390Sstevel@tonic-gate 16400Sstevel@tonic-gateFor example, if you are on machine mastodon.CS.Berkeley.EDU and you have 16410Sstevel@tonic-gateFEATURE(`stickyhost'), the following combinations of settings will have the 16420Sstevel@tonic-gateindicated effects: 16430Sstevel@tonic-gate 16440Sstevel@tonic-gateemail sent to.... eric eric@mastodon.CS.Berkeley.EDU 16450Sstevel@tonic-gate 16460Sstevel@tonic-gateLOCAL_RELAY set to mail.CS.Berkeley.EDU (delivered locally) 16470Sstevel@tonic-gatemail.CS.Berkeley.EDU (no local aliasing) (aliasing done) 16480Sstevel@tonic-gate 16490Sstevel@tonic-gateMAIL_HUB set to mammoth.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU 16500Sstevel@tonic-gatemammoth.CS.Berkeley.EDU (aliasing done) (aliasing done) 16510Sstevel@tonic-gate 16520Sstevel@tonic-gateBoth LOCAL_RELAY and mail.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU 16530Sstevel@tonic-gateMAIL_HUB set as above (no local aliasing) (aliasing done) 16540Sstevel@tonic-gate 16550Sstevel@tonic-gateIf you do not have FEATURE(`stickyhost') set, then LOCAL_RELAY and 16560Sstevel@tonic-gateMAIL_HUB act identically, with MAIL_HUB taking precedence. 16570Sstevel@tonic-gate 16580Sstevel@tonic-gateIf you want all outgoing mail to go to a central relay site, define 16590Sstevel@tonic-gateSMART_HOST as well. Briefly: 16600Sstevel@tonic-gate 16610Sstevel@tonic-gate LOCAL_RELAY applies to unqualified names (e.g., "eric"). 16620Sstevel@tonic-gate MAIL_HUB applies to names qualified with the name of the 16630Sstevel@tonic-gate local host (e.g., "eric@mastodon.CS.Berkeley.EDU"). 16640Sstevel@tonic-gate SMART_HOST applies to names qualified with other hosts or 16650Sstevel@tonic-gate bracketed addresses (e.g., "eric@mastodon.CS.Berkeley.EDU" 16660Sstevel@tonic-gate or "eric@[127.0.0.1]"). 16670Sstevel@tonic-gate 16680Sstevel@tonic-gateHowever, beware that other relays (e.g., UUCP_RELAY, BITNET_RELAY, 16690Sstevel@tonic-gateDECNET_RELAY, and FAX_RELAY) take precedence over SMART_HOST, so if you 16700Sstevel@tonic-gatereally want absolutely everything to go to a single central site you will 16710Sstevel@tonic-gateneed to unset all the other relays -- or better yet, find or build a 16720Sstevel@tonic-gateminimal config file that does this. 16730Sstevel@tonic-gate 16740Sstevel@tonic-gateFor duplicate suppression to work properly, the host name is best 16750Sstevel@tonic-gatespecified with a terminal dot: 16760Sstevel@tonic-gate 16770Sstevel@tonic-gate define(`MAIL_HUB', `host.domain.') 16780Sstevel@tonic-gate note the trailing dot ---^ 16790Sstevel@tonic-gate 16800Sstevel@tonic-gate 16810Sstevel@tonic-gate+-------------------------------------------+ 16820Sstevel@tonic-gate| USING LDAP FOR ALIASES, MAPS, AND CLASSES | 16830Sstevel@tonic-gate+-------------------------------------------+ 16840Sstevel@tonic-gate 16850Sstevel@tonic-gateLDAP can be used for aliases, maps, and classes by either specifying your 16860Sstevel@tonic-gateown LDAP map specification or using the built-in default LDAP map 16870Sstevel@tonic-gatespecification. The built-in default specifications all provide lookups 16880Sstevel@tonic-gatewhich match against either the machine's fully qualified hostname (${j}) or 16890Sstevel@tonic-gatea "cluster". The cluster allows you to share LDAP entries among a large 16900Sstevel@tonic-gatenumber of machines without having to enter each of the machine names into 16910Sstevel@tonic-gateeach LDAP entry. To set the LDAP cluster name to use for a particular 16920Sstevel@tonic-gatemachine or set of machines, set the confLDAP_CLUSTER m4 variable to a 16930Sstevel@tonic-gateunique name. For example: 16940Sstevel@tonic-gate 16950Sstevel@tonic-gate define(`confLDAP_CLUSTER', `Servers') 16960Sstevel@tonic-gate 16970Sstevel@tonic-gateHere, the word `Servers' will be the cluster name. As an example, assume 16980Sstevel@tonic-gatethat smtp.sendmail.org, etrn.sendmail.org, and mx.sendmail.org all belong 16990Sstevel@tonic-gateto the Servers cluster. 17000Sstevel@tonic-gate 17010Sstevel@tonic-gateSome of the LDAP LDIF examples below show use of the Servers cluster. 17020Sstevel@tonic-gateEvery entry must have either a sendmailMTAHost or sendmailMTACluster 17030Sstevel@tonic-gateattribute or it will be ignored. Be careful as mixing clusters and 17040Sstevel@tonic-gateindividual host records can have surprising results (see the CAUTION 17050Sstevel@tonic-gatesections below). 17060Sstevel@tonic-gate 17070Sstevel@tonic-gateSee the file cf/sendmail.schema for the actual LDAP schemas. Note that 17080Sstevel@tonic-gatethis schema (and therefore the lookups and examples below) is experimental 17090Sstevel@tonic-gateat this point as it has had little public review. Therefore, it may change 1710616Sjbeckin future versions. Feedback via sendmail-YYYY@support.sendmail.org is 1711616Sjbeckencouraged (replace YYYY with the current year, e.g., 2005). 17120Sstevel@tonic-gate 17130Sstevel@tonic-gate------- 17140Sstevel@tonic-gateAliases 17150Sstevel@tonic-gate------- 17160Sstevel@tonic-gate 17170Sstevel@tonic-gateThe ALIAS_FILE (O AliasFile) option can be set to use LDAP for alias 17180Sstevel@tonic-gatelookups. To use the default schema, simply use: 17190Sstevel@tonic-gate 17200Sstevel@tonic-gate define(`ALIAS_FILE', `ldap:') 17210Sstevel@tonic-gate 17220Sstevel@tonic-gateBy doing so, you will use the default schema which expands to a map 17230Sstevel@tonic-gatedeclared as follows: 17240Sstevel@tonic-gate 17250Sstevel@tonic-gate ldap -k (&(objectClass=sendmailMTAAliasObject) 17260Sstevel@tonic-gate (sendmailMTAAliasGrouping=aliases) 17270Sstevel@tonic-gate (|(sendmailMTACluster=${sendmailMTACluster}) 17280Sstevel@tonic-gate (sendmailMTAHost=$j)) 17290Sstevel@tonic-gate (sendmailMTAKey=%0)) 17300Sstevel@tonic-gate -v sendmailMTAAliasValue,sendmailMTAAliasSearch:FILTER:sendmailMTAAliasObject,sendmailMTAAliasURL:URL:sendmailMTAAliasObject 17310Sstevel@tonic-gate 17320Sstevel@tonic-gate 17330Sstevel@tonic-gateNOTE: The macros shown above ${sendmailMTACluster} and $j are not actually 17340Sstevel@tonic-gateused when the binary expands the `ldap:' token as the AliasFile option is 17350Sstevel@tonic-gatenot actually macro-expanded when read from the sendmail.cf file. 17360Sstevel@tonic-gate 17370Sstevel@tonic-gateExample LDAP LDIF entries might be: 17380Sstevel@tonic-gate 17390Sstevel@tonic-gate dn: sendmailMTAKey=sendmail-list, dc=sendmail, dc=org 17400Sstevel@tonic-gate objectClass: sendmailMTA 17410Sstevel@tonic-gate objectClass: sendmailMTAAlias 17420Sstevel@tonic-gate objectClass: sendmailMTAAliasObject 17430Sstevel@tonic-gate sendmailMTAAliasGrouping: aliases 17440Sstevel@tonic-gate sendmailMTAHost: etrn.sendmail.org 17450Sstevel@tonic-gate sendmailMTAKey: sendmail-list 17460Sstevel@tonic-gate sendmailMTAAliasValue: ca@example.org 17470Sstevel@tonic-gate sendmailMTAAliasValue: eric 17480Sstevel@tonic-gate sendmailMTAAliasValue: gshapiro@example.com 17490Sstevel@tonic-gate 17500Sstevel@tonic-gate dn: sendmailMTAKey=owner-sendmail-list, dc=sendmail, dc=org 17510Sstevel@tonic-gate objectClass: sendmailMTA 17520Sstevel@tonic-gate objectClass: sendmailMTAAlias 17530Sstevel@tonic-gate objectClass: sendmailMTAAliasObject 17540Sstevel@tonic-gate sendmailMTAAliasGrouping: aliases 17550Sstevel@tonic-gate sendmailMTAHost: etrn.sendmail.org 17560Sstevel@tonic-gate sendmailMTAKey: owner-sendmail-list 17570Sstevel@tonic-gate sendmailMTAAliasValue: eric 17580Sstevel@tonic-gate 17590Sstevel@tonic-gate dn: sendmailMTAKey=postmaster, dc=sendmail, dc=org 17600Sstevel@tonic-gate objectClass: sendmailMTA 17610Sstevel@tonic-gate objectClass: sendmailMTAAlias 17620Sstevel@tonic-gate objectClass: sendmailMTAAliasObject 17630Sstevel@tonic-gate sendmailMTAAliasGrouping: aliases 17640Sstevel@tonic-gate sendmailMTACluster: Servers 17650Sstevel@tonic-gate sendmailMTAKey: postmaster 17660Sstevel@tonic-gate sendmailMTAAliasValue: eric 17670Sstevel@tonic-gate 17680Sstevel@tonic-gateHere, the aliases sendmail-list and owner-sendmail-list will be available 17690Sstevel@tonic-gateonly on etrn.sendmail.org but the postmaster alias will be available on 17700Sstevel@tonic-gateevery machine in the Servers cluster (including etrn.sendmail.org). 17710Sstevel@tonic-gate 17720Sstevel@tonic-gateCAUTION: aliases are additive so that entries like these: 17730Sstevel@tonic-gate 17740Sstevel@tonic-gate dn: sendmailMTAKey=bob, dc=sendmail, dc=org 17750Sstevel@tonic-gate objectClass: sendmailMTA 17760Sstevel@tonic-gate objectClass: sendmailMTAAlias 17770Sstevel@tonic-gate objectClass: sendmailMTAAliasObject 17780Sstevel@tonic-gate sendmailMTAAliasGrouping: aliases 17790Sstevel@tonic-gate sendmailMTACluster: Servers 17800Sstevel@tonic-gate sendmailMTAKey: bob 17810Sstevel@tonic-gate sendmailMTAAliasValue: eric 17820Sstevel@tonic-gate 17830Sstevel@tonic-gate dn: sendmailMTAKey=bobetrn, dc=sendmail, dc=org 17840Sstevel@tonic-gate objectClass: sendmailMTA 17850Sstevel@tonic-gate objectClass: sendmailMTAAlias 17860Sstevel@tonic-gate objectClass: sendmailMTAAliasObject 17870Sstevel@tonic-gate sendmailMTAAliasGrouping: aliases 17880Sstevel@tonic-gate sendmailMTAHost: etrn.sendmail.org 17890Sstevel@tonic-gate sendmailMTAKey: bob 17900Sstevel@tonic-gate sendmailMTAAliasValue: gshapiro 17910Sstevel@tonic-gate 17920Sstevel@tonic-gatewould mean that on all of the hosts in the cluster, mail to bob would go to 17930Sstevel@tonic-gateeric EXCEPT on etrn.sendmail.org in which case it would go to BOTH eric and 17940Sstevel@tonic-gategshapiro. 17950Sstevel@tonic-gate 17960Sstevel@tonic-gateIf you prefer not to use the default LDAP schema for your aliases, you can 17970Sstevel@tonic-gatespecify the map parameters when setting ALIAS_FILE. For example: 17980Sstevel@tonic-gate 17990Sstevel@tonic-gate define(`ALIAS_FILE', `ldap:-k (&(objectClass=mailGroup)(mail=%0)) -v mgrpRFC822MailMember') 18000Sstevel@tonic-gate 18010Sstevel@tonic-gate---- 18020Sstevel@tonic-gateMaps 18030Sstevel@tonic-gate---- 18040Sstevel@tonic-gate 18050Sstevel@tonic-gateFEATURE()'s which take an optional map definition argument (e.g., access, 18060Sstevel@tonic-gatemailertable, virtusertable, etc.) can instead take the special keyword 18070Sstevel@tonic-gate`LDAP', e.g.: 18080Sstevel@tonic-gate 18090Sstevel@tonic-gate FEATURE(`access_db', `LDAP') 18100Sstevel@tonic-gate FEATURE(`virtusertable', `LDAP') 18110Sstevel@tonic-gate 18120Sstevel@tonic-gateWhen this keyword is given, that map will use LDAP lookups consisting of 18130Sstevel@tonic-gatethe objectClass sendmailMTAClassObject, the attribute sendmailMTAMapName 18140Sstevel@tonic-gatewith the map name, a search attribute of sendmailMTAKey, and the value 18150Sstevel@tonic-gateattribute sendmailMTAMapValue. 18160Sstevel@tonic-gate 18170Sstevel@tonic-gateThe values for sendmailMTAMapName are: 18180Sstevel@tonic-gate 18190Sstevel@tonic-gate FEATURE() sendmailMTAMapName 18200Sstevel@tonic-gate --------- ------------------ 18210Sstevel@tonic-gate access_db access 18220Sstevel@tonic-gate authinfo authinfo 18230Sstevel@tonic-gate bitdomain bitdomain 18240Sstevel@tonic-gate domaintable domain 18250Sstevel@tonic-gate genericstable generics 18260Sstevel@tonic-gate mailertable mailer 18270Sstevel@tonic-gate uucpdomain uucpdomain 18280Sstevel@tonic-gate virtusertable virtuser 18290Sstevel@tonic-gate 18300Sstevel@tonic-gateFor example, FEATURE(`mailertable', `LDAP') would use the map definition: 18310Sstevel@tonic-gate 18320Sstevel@tonic-gate Kmailertable ldap -k (&(objectClass=sendmailMTAMapObject) 18330Sstevel@tonic-gate (sendmailMTAMapName=mailer) 18340Sstevel@tonic-gate (|(sendmailMTACluster=${sendmailMTACluster}) 18350Sstevel@tonic-gate (sendmailMTAHost=$j)) 18360Sstevel@tonic-gate (sendmailMTAKey=%0)) 18370Sstevel@tonic-gate -1 -v sendmailMTAMapValue,sendmailMTAMapSearch:FILTER:sendmailMTAMapObject,sendmailMTAMapURL:URL:sendmailMTAMapObject 18380Sstevel@tonic-gate 18390Sstevel@tonic-gateAn example LDAP LDIF entry using this map might be: 18400Sstevel@tonic-gate 18410Sstevel@tonic-gate dn: sendmailMTAMapName=mailer, dc=sendmail, dc=org 18420Sstevel@tonic-gate objectClass: sendmailMTA 18430Sstevel@tonic-gate objectClass: sendmailMTAMap 18440Sstevel@tonic-gate sendmailMTACluster: Servers 18450Sstevel@tonic-gate sendmailMTAMapName: mailer 18460Sstevel@tonic-gate 18470Sstevel@tonic-gate dn: sendmailMTAKey=example.com, sendmailMTAMapName=mailer, dc=sendmail, dc=org 18480Sstevel@tonic-gate objectClass: sendmailMTA 18490Sstevel@tonic-gate objectClass: sendmailMTAMap 18500Sstevel@tonic-gate objectClass: sendmailMTAMapObject 18510Sstevel@tonic-gate sendmailMTAMapName: mailer 18520Sstevel@tonic-gate sendmailMTACluster: Servers 18530Sstevel@tonic-gate sendmailMTAKey: example.com 18540Sstevel@tonic-gate sendmailMTAMapValue: relay:[smtp.example.com] 18550Sstevel@tonic-gate 18560Sstevel@tonic-gateCAUTION: If your LDAP database contains the record above and *ALSO* a host 18570Sstevel@tonic-gatespecific record such as: 18580Sstevel@tonic-gate 18590Sstevel@tonic-gate dn: sendmailMTAKey=example.com@etrn, sendmailMTAMapName=mailer, dc=sendmail, dc=org 18600Sstevel@tonic-gate objectClass: sendmailMTA 18610Sstevel@tonic-gate objectClass: sendmailMTAMap 18620Sstevel@tonic-gate objectClass: sendmailMTAMapObject 18630Sstevel@tonic-gate sendmailMTAMapName: mailer 18640Sstevel@tonic-gate sendmailMTAHost: etrn.sendmail.org 18650Sstevel@tonic-gate sendmailMTAKey: example.com 18660Sstevel@tonic-gate sendmailMTAMapValue: relay:[mx.example.com] 18670Sstevel@tonic-gate 18680Sstevel@tonic-gatethen these entries will give unexpected results. When the lookup is done 18690Sstevel@tonic-gateon etrn.sendmail.org, the effect is that there is *NO* match at all as maps 18700Sstevel@tonic-gaterequire a single match. Since the host etrn.sendmail.org is also in the 18710Sstevel@tonic-gateServers cluster, LDAP would return two answers for the example.com map key 18720Sstevel@tonic-gatein which case sendmail would treat this as no match at all. 18730Sstevel@tonic-gate 18740Sstevel@tonic-gateIf you prefer not to use the default LDAP schema for your maps, you can 18750Sstevel@tonic-gatespecify the map parameters when using the FEATURE(). For example: 18760Sstevel@tonic-gate 18770Sstevel@tonic-gate FEATURE(`access_db', `ldap:-1 -k (&(objectClass=mapDatabase)(key=%0)) -v value') 18780Sstevel@tonic-gate 18790Sstevel@tonic-gate------- 18800Sstevel@tonic-gateClasses 18810Sstevel@tonic-gate------- 18820Sstevel@tonic-gate 18830Sstevel@tonic-gateNormally, classes can be filled via files or programs. As of 8.12, they 18840Sstevel@tonic-gatecan also be filled via map lookups using a new syntax: 18850Sstevel@tonic-gate 18860Sstevel@tonic-gate F{ClassName}mapkey@mapclass:mapspec 18870Sstevel@tonic-gate 18880Sstevel@tonic-gatemapkey is optional and if not provided the map key will be empty. This can 18890Sstevel@tonic-gatebe used with LDAP to read classes from LDAP. Note that the lookup is only 18900Sstevel@tonic-gatedone when sendmail is initially started. Use the special value `@LDAP' to 18910Sstevel@tonic-gateuse the default LDAP schema. For example: 18920Sstevel@tonic-gate 18930Sstevel@tonic-gate RELAY_DOMAIN_FILE(`@LDAP') 18940Sstevel@tonic-gate 18950Sstevel@tonic-gatewould put all of the attribute sendmailMTAClassValue values of LDAP records 18960Sstevel@tonic-gatewith objectClass sendmailMTAClass and an attribute sendmailMTAClassName of 18970Sstevel@tonic-gate'R' into class $={R}. In other words, it is equivalent to the LDAP map 18980Sstevel@tonic-gatespecification: 18990Sstevel@tonic-gate 19000Sstevel@tonic-gate F{R}@ldap:-k (&(objectClass=sendmailMTAClass) 19010Sstevel@tonic-gate (sendmailMTAClassName=R) 19020Sstevel@tonic-gate (|(sendmailMTACluster=${sendmailMTACluster}) 19030Sstevel@tonic-gate (sendmailMTAHost=$j))) 19040Sstevel@tonic-gate -v sendmailMTAClassValue,sendmailMTAClassSearch:FILTER:sendmailMTAClass,sendmailMTAClassURL:URL:sendmailMTAClass 19050Sstevel@tonic-gate 19060Sstevel@tonic-gateNOTE: The macros shown above ${sendmailMTACluster} and $j are not actually 19070Sstevel@tonic-gateused when the binary expands the `@LDAP' token as class declarations are 19080Sstevel@tonic-gatenot actually macro-expanded when read from the sendmail.cf file. 19090Sstevel@tonic-gate 19100Sstevel@tonic-gateThis can be used with class related commands such as RELAY_DOMAIN_FILE(), 19110Sstevel@tonic-gateMASQUERADE_DOMAIN_FILE(), etc: 19120Sstevel@tonic-gate 19130Sstevel@tonic-gate Command sendmailMTAClassName 19140Sstevel@tonic-gate ------- -------------------- 19150Sstevel@tonic-gate CANONIFY_DOMAIN_FILE() Canonify 19160Sstevel@tonic-gate EXPOSED_USER_FILE() E 19170Sstevel@tonic-gate GENERICS_DOMAIN_FILE() G 19180Sstevel@tonic-gate LDAPROUTE_DOMAIN_FILE() LDAPRoute 19190Sstevel@tonic-gate LDAPROUTE_EQUIVALENT_FILE() LDAPRouteEquiv 19200Sstevel@tonic-gate LOCAL_USER_FILE() L 19210Sstevel@tonic-gate MASQUERADE_DOMAIN_FILE() M 19220Sstevel@tonic-gate MASQUERADE_EXCEPTION_FILE() N 19230Sstevel@tonic-gate RELAY_DOMAIN_FILE() R 19240Sstevel@tonic-gate VIRTUSER_DOMAIN_FILE() VirtHost 19250Sstevel@tonic-gate 19260Sstevel@tonic-gateYou can also add your own as any 'F'ile class of the form: 19270Sstevel@tonic-gate 19280Sstevel@tonic-gate F{ClassName}@LDAP 19290Sstevel@tonic-gate ^^^^^^^^^ 19300Sstevel@tonic-gatewill use "ClassName" for the sendmailMTAClassName. 19310Sstevel@tonic-gate 19320Sstevel@tonic-gateAn example LDAP LDIF entry would look like: 19330Sstevel@tonic-gate 19340Sstevel@tonic-gate dn: sendmailMTAClassName=R, dc=sendmail, dc=org 19350Sstevel@tonic-gate objectClass: sendmailMTA 19360Sstevel@tonic-gate objectClass: sendmailMTAClass 19370Sstevel@tonic-gate sendmailMTACluster: Servers 19380Sstevel@tonic-gate sendmailMTAClassName: R 19390Sstevel@tonic-gate sendmailMTAClassValue: sendmail.org 19400Sstevel@tonic-gate sendmailMTAClassValue: example.com 19410Sstevel@tonic-gate sendmailMTAClassValue: 10.56.23 19420Sstevel@tonic-gate 19430Sstevel@tonic-gateCAUTION: If your LDAP database contains the record above and *ALSO* a host 19440Sstevel@tonic-gatespecific record such as: 19450Sstevel@tonic-gate 19460Sstevel@tonic-gate dn: sendmailMTAClassName=R@etrn.sendmail.org, dc=sendmail, dc=org 19470Sstevel@tonic-gate objectClass: sendmailMTA 19480Sstevel@tonic-gate objectClass: sendmailMTAClass 19490Sstevel@tonic-gate sendmailMTAHost: etrn.sendmail.org 19500Sstevel@tonic-gate sendmailMTAClassName: R 19510Sstevel@tonic-gate sendmailMTAClassValue: example.com 19520Sstevel@tonic-gate 19530Sstevel@tonic-gatethe result will be similar to the aliases caution above. When the lookup 19540Sstevel@tonic-gateis done on etrn.sendmail.org, $={R} would contain all of the entries (from 19550Sstevel@tonic-gateboth the cluster match and the host match). In other words, the effective 19560Sstevel@tonic-gateis additive. 19570Sstevel@tonic-gate 19580Sstevel@tonic-gateIf you prefer not to use the default LDAP schema for your classes, you can 19590Sstevel@tonic-gatespecify the map parameters when using the class command. For example: 19600Sstevel@tonic-gate 19610Sstevel@tonic-gate VIRTUSER_DOMAIN_FILE(`@ldap:-k (&(objectClass=virtHosts)(host=*)) -v host') 19620Sstevel@tonic-gate 19630Sstevel@tonic-gateRemember, macros can not be used in a class declaration as the binary does 19640Sstevel@tonic-gatenot expand them. 19650Sstevel@tonic-gate 19660Sstevel@tonic-gate 19670Sstevel@tonic-gate+--------------+ 19680Sstevel@tonic-gate| LDAP ROUTING | 19690Sstevel@tonic-gate+--------------+ 19700Sstevel@tonic-gate 19710Sstevel@tonic-gateFEATURE(`ldap_routing') can be used to implement the IETF Internet Draft 19720Sstevel@tonic-gateLDAP Schema for Intranet Mail Routing 19730Sstevel@tonic-gate(draft-lachman-laser-ldap-mail-routing-01). This feature enables 19740Sstevel@tonic-gateLDAP-based rerouting of a particular address to either a different host 19750Sstevel@tonic-gateor a different address. The LDAP lookup is first attempted on the full 19760Sstevel@tonic-gateaddress (e.g., user@example.com) and then on the domain portion 19770Sstevel@tonic-gate(e.g., @example.com). Be sure to setup your domain for LDAP routing using 19780Sstevel@tonic-gateLDAPROUTE_DOMAIN(), e.g.: 19790Sstevel@tonic-gate 19800Sstevel@tonic-gate LDAPROUTE_DOMAIN(`example.com') 19810Sstevel@tonic-gate 19820Sstevel@tonic-gateAdditionally, you can specify equivalent domains for LDAP routing using 19830Sstevel@tonic-gateLDAPROUTE_EQUIVALENT() and LDAPROUTE_EQUIVALENT_FILE(). 'Equivalent' 19840Sstevel@tonic-gatehostnames are mapped to $M (the masqueraded hostname for the server) before 19850Sstevel@tonic-gatethe LDAP query. For example, if the mail is addressed to 19860Sstevel@tonic-gateuser@host1.example.com, normally the LDAP lookup would only be done for 19870Sstevel@tonic-gate'user@host1.example.com' and '@host1.example.com'. However, if 19880Sstevel@tonic-gateLDAPROUTE_EQUIVALENT(`host1.example.com') is used, the lookups would also be 19890Sstevel@tonic-gatedone on 'user@example.com' and '@example.com' after attempting the 19900Sstevel@tonic-gatehost1.example.com lookups. 19910Sstevel@tonic-gate 19920Sstevel@tonic-gateBy default, the feature will use the schemas as specified in the draft 19930Sstevel@tonic-gateand will not reject addresses not found by the LDAP lookup. However, 19940Sstevel@tonic-gatethis behavior can be changed by giving additional arguments to the FEATURE() 19950Sstevel@tonic-gatecommand: 19960Sstevel@tonic-gate 19970Sstevel@tonic-gate FEATURE(`ldap_routing', <mailHost>, <mailRoutingAddress>, <bounce>, 19980Sstevel@tonic-gate <detail>, <nodomain>, <tempfail>) 19990Sstevel@tonic-gate 20000Sstevel@tonic-gatewhere <mailHost> is a map definition describing how to lookup an alternative 20010Sstevel@tonic-gatemail host for a particular address; <mailRoutingAddress> is a map definition 20020Sstevel@tonic-gatedescribing how to lookup an alternative address for a particular address; 20030Sstevel@tonic-gatethe <bounce> argument, if present and not the word "passthru", dictates 20040Sstevel@tonic-gatethat mail should be bounced if neither a mailHost nor mailRoutingAddress 20050Sstevel@tonic-gateis found, if set to "sendertoo", the sender will be rejected if not 20060Sstevel@tonic-gatefound in LDAP; and <detail> indicates what actions to take if the address 20070Sstevel@tonic-gatecontains +detail information -- `strip' tries the lookup with the +detail 20080Sstevel@tonic-gateand if no matches are found, strips the +detail and tries the lookup again; 20090Sstevel@tonic-gate`preserve', does the same as `strip' but if a mailRoutingAddress match is 20100Sstevel@tonic-gatefound, the +detail information is copied to the new address; the <nodomain> 20110Sstevel@tonic-gateargument, if present, will prevent the @domain lookup if the full 20120Sstevel@tonic-gateaddress is not found in LDAP; the <tempfail> argument, if set to 20130Sstevel@tonic-gate"tempfail", instructs the rules to give an SMTP 4XX temporary 20140Sstevel@tonic-gateerror if the LDAP server gives the MTA a temporary failure, or if set to 20150Sstevel@tonic-gate"queue" (the default), the MTA will locally queue the mail. 20160Sstevel@tonic-gate 20170Sstevel@tonic-gateThe default <mailHost> map definition is: 20180Sstevel@tonic-gate 20190Sstevel@tonic-gate ldap -1 -T<TMPF> -v mailHost -k (&(objectClass=inetLocalMailRecipient) 20200Sstevel@tonic-gate (mailLocalAddress=%0)) 20210Sstevel@tonic-gate 20220Sstevel@tonic-gateThe default <mailRoutingAddress> map definition is: 20230Sstevel@tonic-gate 20240Sstevel@tonic-gate ldap -1 -T<TMPF> -v mailRoutingAddress 20250Sstevel@tonic-gate -k (&(objectClass=inetLocalMailRecipient) 20260Sstevel@tonic-gate (mailLocalAddress=%0)) 20270Sstevel@tonic-gate 20280Sstevel@tonic-gateNote that neither includes the LDAP server hostname (-h server) or base DN 20290Sstevel@tonic-gate(-b o=org,c=COUNTRY), both necessary for LDAP queries. It is presumed that 20300Sstevel@tonic-gateyour .mc file contains a setting for the confLDAP_DEFAULT_SPEC option with 20310Sstevel@tonic-gatethese settings. If this is not the case, the map definitions should be 20320Sstevel@tonic-gatechanged as described above. The "-T<TMPF>" is required in any user 20330Sstevel@tonic-gatespecified map definition to catch temporary errors. 20340Sstevel@tonic-gate 20350Sstevel@tonic-gateThe following possibilities exist as a result of an LDAP lookup on an 20360Sstevel@tonic-gateaddress: 20370Sstevel@tonic-gate 20380Sstevel@tonic-gate mailHost is mailRoutingAddress is Results in 20390Sstevel@tonic-gate ----------- --------------------- ---------- 20400Sstevel@tonic-gate set to a set mail delivered to 20410Sstevel@tonic-gate "local" host mailRoutingAddress 20420Sstevel@tonic-gate 20430Sstevel@tonic-gate set to a not set delivered to 20440Sstevel@tonic-gate "local" host original address 20450Sstevel@tonic-gate 20460Sstevel@tonic-gate set to a set mailRoutingAddress 20470Sstevel@tonic-gate remote host relayed to mailHost 20480Sstevel@tonic-gate 20490Sstevel@tonic-gate set to a not set original address 20500Sstevel@tonic-gate remote host relayed to mailHost 20510Sstevel@tonic-gate 20520Sstevel@tonic-gate not set set mail delivered to 20530Sstevel@tonic-gate mailRoutingAddress 20540Sstevel@tonic-gate 20550Sstevel@tonic-gate not set not set delivered to 20560Sstevel@tonic-gate original address *OR* 20570Sstevel@tonic-gate bounced as unknown user 20580Sstevel@tonic-gate 20590Sstevel@tonic-gateThe term "local" host above means the host specified is in class {w}. If 20600Sstevel@tonic-gatethe result would mean sending the mail to a different host, that host is 20610Sstevel@tonic-gatelooked up in the mailertable before delivery. 20620Sstevel@tonic-gate 20630Sstevel@tonic-gateNote that the last case depends on whether the third argument is given 20640Sstevel@tonic-gateto the FEATURE() command. The default is to deliver the message to the 20650Sstevel@tonic-gateoriginal address. 20660Sstevel@tonic-gate 20670Sstevel@tonic-gateThe LDAP entries should be set up with an objectClass of 20680Sstevel@tonic-gateinetLocalMailRecipient and the address be listed in a mailLocalAddress 20690Sstevel@tonic-gateattribute. If present, there must be only one mailHost attribute and it 20700Sstevel@tonic-gatemust contain a fully qualified host name as its value. Similarly, if 20710Sstevel@tonic-gatepresent, there must be only one mailRoutingAddress attribute and it must 20720Sstevel@tonic-gatecontain an RFC 822 compliant address. Some example LDAP records (in LDIF 20730Sstevel@tonic-gateformat): 20740Sstevel@tonic-gate 20750Sstevel@tonic-gate dn: uid=tom, o=example.com, c=US 20760Sstevel@tonic-gate objectClass: inetLocalMailRecipient 20770Sstevel@tonic-gate mailLocalAddress: tom@example.com 20780Sstevel@tonic-gate mailRoutingAddress: thomas@mailhost.example.com 20790Sstevel@tonic-gate 20800Sstevel@tonic-gateThis would deliver mail for tom@example.com to thomas@mailhost.example.com. 20810Sstevel@tonic-gate 20820Sstevel@tonic-gate dn: uid=dick, o=example.com, c=US 20830Sstevel@tonic-gate objectClass: inetLocalMailRecipient 20840Sstevel@tonic-gate mailLocalAddress: dick@example.com 20850Sstevel@tonic-gate mailHost: eng.example.com 20860Sstevel@tonic-gate 20870Sstevel@tonic-gateThis would relay mail for dick@example.com to the same address but redirect 20880Sstevel@tonic-gatethe mail to MX records listed for the host eng.example.com (unless the 20890Sstevel@tonic-gatemailertable overrides). 20900Sstevel@tonic-gate 20910Sstevel@tonic-gate dn: uid=harry, o=example.com, c=US 20920Sstevel@tonic-gate objectClass: inetLocalMailRecipient 20930Sstevel@tonic-gate mailLocalAddress: harry@example.com 20940Sstevel@tonic-gate mailHost: mktmail.example.com 20950Sstevel@tonic-gate mailRoutingAddress: harry@mkt.example.com 20960Sstevel@tonic-gate 20970Sstevel@tonic-gateThis would relay mail for harry@example.com to the MX records listed for 20980Sstevel@tonic-gatethe host mktmail.example.com using the new address harry@mkt.example.com 20990Sstevel@tonic-gatewhen talking to that host. 21000Sstevel@tonic-gate 21010Sstevel@tonic-gate dn: uid=virtual.example.com, o=example.com, c=US 21020Sstevel@tonic-gate objectClass: inetLocalMailRecipient 21030Sstevel@tonic-gate mailLocalAddress: @virtual.example.com 21040Sstevel@tonic-gate mailHost: server.example.com 21050Sstevel@tonic-gate mailRoutingAddress: virtual@example.com 21060Sstevel@tonic-gate 21070Sstevel@tonic-gateThis would send all mail destined for any username @virtual.example.com to 21080Sstevel@tonic-gatethe machine server.example.com's MX servers and deliver to the address 21090Sstevel@tonic-gatevirtual@example.com on that relay machine. 21100Sstevel@tonic-gate 21110Sstevel@tonic-gate 21120Sstevel@tonic-gate+---------------------------------+ 21130Sstevel@tonic-gate| ANTI-SPAM CONFIGURATION CONTROL | 21140Sstevel@tonic-gate+---------------------------------+ 21150Sstevel@tonic-gate 21160Sstevel@tonic-gateThe primary anti-spam features available in sendmail are: 21170Sstevel@tonic-gate 21180Sstevel@tonic-gate* Relaying is denied by default. 21190Sstevel@tonic-gate* Better checking on sender information. 21200Sstevel@tonic-gate* Access database. 21210Sstevel@tonic-gate* Header checks. 21220Sstevel@tonic-gate 21230Sstevel@tonic-gateRelaying (transmission of messages from a site outside your host (class 21240Sstevel@tonic-gate{w}) to another site except yours) is denied by default. Note that this 21250Sstevel@tonic-gatechanged in sendmail 8.9; previous versions allowed relaying by default. 21260Sstevel@tonic-gateIf you really want to revert to the old behaviour, you will need to use 21270Sstevel@tonic-gateFEATURE(`promiscuous_relay'). You can allow certain domains to relay 21280Sstevel@tonic-gatethrough your server by adding their domain name or IP address to class 21290Sstevel@tonic-gate{R} using RELAY_DOMAIN() and RELAY_DOMAIN_FILE() or via the access database 21300Sstevel@tonic-gate(described below). Note that IPv6 addresses must be prefaced with "IPv6:". 21310Sstevel@tonic-gateThe file consists (like any other file based class) of entries listed on 21320Sstevel@tonic-gateseparate lines, e.g., 21330Sstevel@tonic-gate 21340Sstevel@tonic-gate sendmail.org 21350Sstevel@tonic-gate 128.32 21360Sstevel@tonic-gate IPv6:2002:c0a8:02c7 21370Sstevel@tonic-gate IPv6:2002:c0a8:51d2::23f4 21380Sstevel@tonic-gate host.mydomain.com 21390Sstevel@tonic-gate [UNIX:localhost] 21400Sstevel@tonic-gate 21410Sstevel@tonic-gateNotice: the last entry allows relaying for connections via a UNIX 21420Sstevel@tonic-gatesocket to the MTA/MSP. This might be necessary if your configuration 21430Sstevel@tonic-gatedoesn't allow relaying by other means in that case, e.g., by having 21440Sstevel@tonic-gatelocalhost.$m in class {R} (make sure $m is not just a top level 21450Sstevel@tonic-gatedomain). 21460Sstevel@tonic-gate 21470Sstevel@tonic-gateIf you use 21480Sstevel@tonic-gate 21490Sstevel@tonic-gate FEATURE(`relay_entire_domain') 21500Sstevel@tonic-gate 21510Sstevel@tonic-gatethen any host in any of your local domains (that is, class {m}) 21520Sstevel@tonic-gatewill be relayed (that is, you will accept mail either to or from any 21530Sstevel@tonic-gatehost in your domain). 21540Sstevel@tonic-gate 21550Sstevel@tonic-gateYou can also allow relaying based on the MX records of the host 21560Sstevel@tonic-gateportion of an incoming recipient address by using 21570Sstevel@tonic-gate 21580Sstevel@tonic-gate FEATURE(`relay_based_on_MX') 21590Sstevel@tonic-gate 21600Sstevel@tonic-gateFor example, if your server receives a recipient of user@domain.com 21610Sstevel@tonic-gateand domain.com lists your server in its MX records, the mail will be 21620Sstevel@tonic-gateaccepted for relay to domain.com. This feature may cause problems 21630Sstevel@tonic-gateif MX lookups for the recipient domain are slow or time out. In that 21640Sstevel@tonic-gatecase, mail will be temporarily rejected. It is usually better to 21650Sstevel@tonic-gatemaintain a list of hosts/domains for which the server acts as relay. 21660Sstevel@tonic-gateNote also that this feature will stop spammers from using your host 21670Sstevel@tonic-gateto relay spam but it will not stop outsiders from using your server 21680Sstevel@tonic-gateas a relay for their site (that is, they set up an MX record pointing 21690Sstevel@tonic-gateto your mail server, and you will relay mail addressed to them 21700Sstevel@tonic-gatewithout any prior arrangement). Along the same lines, 21710Sstevel@tonic-gate 21720Sstevel@tonic-gate FEATURE(`relay_local_from') 21730Sstevel@tonic-gate 21740Sstevel@tonic-gatewill allow relaying if the sender specifies a return path (i.e. 2175616SjbeckMAIL FROM:<user@domain>) domain which is a local domain. This is a 21760Sstevel@tonic-gatedangerous feature as it will allow spammers to spam using your mail 21770Sstevel@tonic-gateserver by simply specifying a return address of user@your.domain.com. 21780Sstevel@tonic-gateIt should not be used unless absolutely necessary. 21790Sstevel@tonic-gateA slightly better solution is 21800Sstevel@tonic-gate 21810Sstevel@tonic-gate FEATURE(`relay_mail_from') 21820Sstevel@tonic-gate 21830Sstevel@tonic-gatewhich allows relaying if the mail sender is listed as RELAY in the 21840Sstevel@tonic-gateaccess map. If an optional argument `domain' (this is the literal 21850Sstevel@tonic-gateword `domain', not a placeholder) is given, the domain portion of 21860Sstevel@tonic-gatethe mail sender is also checked to allowing relaying. This option 21870Sstevel@tonic-gateonly works together with the tag From: for the LHS of the access 21880Sstevel@tonic-gatemap entries. This feature allows spammers to abuse your mail server 21890Sstevel@tonic-gateby specifying a return address that you enabled in your access file. 21900Sstevel@tonic-gateThis may be harder to figure out for spammers, but it should not 21910Sstevel@tonic-gatebe used unless necessary. Instead use STARTTLS to 21920Sstevel@tonic-gateallow relaying for roaming users. 21930Sstevel@tonic-gate 21940Sstevel@tonic-gate 21950Sstevel@tonic-gateIf source routing is used in the recipient address (e.g., 2196616SjbeckRCPT TO:<user%site.com@othersite.com>), sendmail will check 21970Sstevel@tonic-gateuser@site.com for relaying if othersite.com is an allowed relay host 21980Sstevel@tonic-gatein either class {R}, class {m} if FEATURE(`relay_entire_domain') is used, 21990Sstevel@tonic-gateor the access database if FEATURE(`access_db') is used. To prevent 22000Sstevel@tonic-gatethe address from being stripped down, use: 22010Sstevel@tonic-gate 22020Sstevel@tonic-gate FEATURE(`loose_relay_check') 22030Sstevel@tonic-gate 22040Sstevel@tonic-gateIf you think you need to use this feature, you probably do not. This 22050Sstevel@tonic-gateshould only be used for sites which have no control over the addresses 22060Sstevel@tonic-gatethat they provide a gateway for. Use this FEATURE with caution as it 22070Sstevel@tonic-gatecan allow spammers to relay through your server if not setup properly. 22080Sstevel@tonic-gate 22090Sstevel@tonic-gateNOTICE: It is possible to relay mail through a system which the anti-relay 22100Sstevel@tonic-gaterules do not prevent: the case of a system that does use FEATURE(`nouucp', 22110Sstevel@tonic-gate`nospecial') (system A) and relays local messages to a mail hub (e.g., via 22120Sstevel@tonic-gateLOCAL_RELAY or LUSER_RELAY) (system B). If system B doesn't use 22130Sstevel@tonic-gateFEATURE(`nouucp') at all, addresses of the form 22140Sstevel@tonic-gate<example.net!user@local.host> would be relayed to <user@example.net>. 22150Sstevel@tonic-gateSystem A doesn't recognize `!' as an address separator and therefore 22160Sstevel@tonic-gateforwards it to the mail hub which in turns relays it because it came from 22170Sstevel@tonic-gatea trusted local host. So if a mailserver allows UUCP (bang-format) 22180Sstevel@tonic-gateaddresses, all systems from which it allows relaying should do the same 22190Sstevel@tonic-gateor reject those addresses. 22200Sstevel@tonic-gate 22210Sstevel@tonic-gateAs of 8.9, sendmail will refuse mail if the MAIL FROM: parameter has 22220Sstevel@tonic-gatean unresolvable domain (i.e., one that DNS, your local name service, 22230Sstevel@tonic-gateor special case rules in ruleset 3 cannot locate). This also applies 22240Sstevel@tonic-gateto addresses that use domain literals, e.g., <user@[1.2.3.4]>, if the 22250Sstevel@tonic-gateIP address can't be mapped to a host name. If you want to continue 22260Sstevel@tonic-gateto accept such domains, e.g., because you are inside a firewall that 22270Sstevel@tonic-gatehas only a limited view of the Internet host name space (note that you 22280Sstevel@tonic-gatewill not be able to return mail to them unless you have some "smart 22290Sstevel@tonic-gatehost" forwarder), use 22300Sstevel@tonic-gate 22310Sstevel@tonic-gate FEATURE(`accept_unresolvable_domains') 22320Sstevel@tonic-gate 22330Sstevel@tonic-gateAlternatively, you can allow specific addresses by adding them to 22340Sstevel@tonic-gatethe access map, e.g., 22350Sstevel@tonic-gate 22360Sstevel@tonic-gate From:unresolvable.domain OK 22370Sstevel@tonic-gate From:[1.2.3.4] OK 22380Sstevel@tonic-gate From:[1.2.4] OK 22390Sstevel@tonic-gate 22400Sstevel@tonic-gateNotice: domains which are temporarily unresolvable are (temporarily) 22410Sstevel@tonic-gaterejected with a 451 reply code. If those domains should be accepted 22420Sstevel@tonic-gate(which is discouraged) then you can use 22430Sstevel@tonic-gate 22440Sstevel@tonic-gate LOCAL_CONFIG 22450Sstevel@tonic-gate C{ResOk}TEMP 22460Sstevel@tonic-gate 22470Sstevel@tonic-gatesendmail will also refuse mail if the MAIL FROM: parameter is not 22480Sstevel@tonic-gatefully qualified (i.e., contains a domain as well as a user). If you 22490Sstevel@tonic-gatewant to continue to accept such senders, use 22500Sstevel@tonic-gate 22510Sstevel@tonic-gate FEATURE(`accept_unqualified_senders') 22520Sstevel@tonic-gate 22530Sstevel@tonic-gateSetting the DaemonPortOptions modifier 'u' overrides the default behavior, 22540Sstevel@tonic-gatei.e., unqualified addresses are accepted even without this FEATURE. If 22550Sstevel@tonic-gatethis FEATURE is not used, the DaemonPortOptions modifier 'f' can be used 22560Sstevel@tonic-gateto enforce fully qualified domain names. 22570Sstevel@tonic-gate 22580Sstevel@tonic-gateAn ``access'' database can be created to accept or reject mail from 22590Sstevel@tonic-gateselected domains. For example, you may choose to reject all mail 22600Sstevel@tonic-gateoriginating from known spammers. To enable such a database, use 22610Sstevel@tonic-gate 22620Sstevel@tonic-gate FEATURE(`access_db') 22630Sstevel@tonic-gate 22640Sstevel@tonic-gateNotice: the access database is applied to the envelope addresses 22650Sstevel@tonic-gateand the connection information, not to the header. 22660Sstevel@tonic-gate 22670Sstevel@tonic-gateThe FEATURE macro can accept as second parameter the key file 22680Sstevel@tonic-gatedefinition for the database; for example 22690Sstevel@tonic-gate 22700Sstevel@tonic-gate FEATURE(`access_db', `hash -T<TMPF> /etc/mail/access_map') 22710Sstevel@tonic-gate 22720Sstevel@tonic-gateNotice: If a second argument is specified it must contain the option 2273*3544Sjbeck`-T<TMPF>' as shown above. The optional parameters may be 2274*3544Sjbeck 2275*3544Sjbeck `skip' enables SKIP as value part (see below). 2276*3544Sjbeck `lookupdotdomain' another way to enable the feature of the 2277*3544Sjbeck same name (see above). 2278*3544Sjbeck `relaytofulladdress' enable entries of the form 2279*3544Sjbeck To:user@example.com RELAY 2280*3544Sjbeck to allow relaying to just a specific 2281*3544Sjbeck e-mail address instead of an entire domain. 22820Sstevel@tonic-gate 22830Sstevel@tonic-gateRemember, since /etc/mail/access is a database, after creating the text 22840Sstevel@tonic-gatefile as described below, you must use makemap to create the database 22850Sstevel@tonic-gatemap. For example: 22860Sstevel@tonic-gate 22870Sstevel@tonic-gate makemap hash /etc/mail/access < /etc/mail/access 22880Sstevel@tonic-gate 22890Sstevel@tonic-gateThe table itself uses e-mail addresses, domain names, and network 22900Sstevel@tonic-gatenumbers as keys. Note that IPv6 addresses must be prefaced with "IPv6:". 22910Sstevel@tonic-gateFor example, 22920Sstevel@tonic-gate 22930Sstevel@tonic-gate From:spammer@aol.com REJECT 22940Sstevel@tonic-gate From:cyberspammer.com REJECT 22950Sstevel@tonic-gate Connect:cyberspammer.com REJECT 22960Sstevel@tonic-gate Connect:TLD REJECT 22970Sstevel@tonic-gate Connect:192.168.212 REJECT 22980Sstevel@tonic-gate Connect:IPv6:2002:c0a8:02c7 RELAY 22990Sstevel@tonic-gate Connect:IPv6:2002:c0a8:51d2::23f4 REJECT 23000Sstevel@tonic-gate 23010Sstevel@tonic-gatewould refuse mail from spammer@aol.com, any user from cyberspammer.com 23020Sstevel@tonic-gate(or any host within the cyberspammer.com domain), any host in the entire 23030Sstevel@tonic-gatetop level domain TLD, 192.168.212.* network, and the IPv6 address 23040Sstevel@tonic-gate2002:c0a8:51d2::23f4. It would allow relay for the IPv6 network 23050Sstevel@tonic-gate2002:c0a8:02c7::/48. 23060Sstevel@tonic-gate 23070Sstevel@tonic-gateEntries in the access map should be tagged according to their type. 23080Sstevel@tonic-gateThree tags are available: 23090Sstevel@tonic-gate 23100Sstevel@tonic-gate Connect: connection information (${client_addr}, ${client_name}) 23110Sstevel@tonic-gate From: envelope sender 23120Sstevel@tonic-gate To: envelope recipient 23130Sstevel@tonic-gate 23140Sstevel@tonic-gateNotice: untagged entries are deprecated. 23150Sstevel@tonic-gate 23160Sstevel@tonic-gateIf the required item is looked up in a map, it will be tried first 23170Sstevel@tonic-gatewith the corresponding tag in front, then (as fallback to enable 23180Sstevel@tonic-gatebackward compatibility) without any tag, unless the specific feature 23190Sstevel@tonic-gaterequires a tag. For example, 23200Sstevel@tonic-gate 23210Sstevel@tonic-gate From:spammer@some.dom REJECT 23220Sstevel@tonic-gate To:friend.domain RELAY 23230Sstevel@tonic-gate Connect:friend.domain OK 23240Sstevel@tonic-gate Connect:from.domain RELAY 23250Sstevel@tonic-gate From:good@another.dom OK 23260Sstevel@tonic-gate From:another.dom REJECT 23270Sstevel@tonic-gate 23280Sstevel@tonic-gateThis would deny mails from spammer@some.dom but you could still 23290Sstevel@tonic-gatesend mail to that address even if FEATURE(`blacklist_recipients') 23300Sstevel@tonic-gateis enabled. Your system will allow relaying to friend.domain, but 23310Sstevel@tonic-gatenot from it (unless enabled by other means). Connections from that 23320Sstevel@tonic-gatedomain will be allowed even if it ends up in one of the DNS based 23330Sstevel@tonic-gaterejection lists. Relaying is enabled from from.domain but not to 23340Sstevel@tonic-gateit (since relaying is based on the connection information for 23350Sstevel@tonic-gateoutgoing relaying, the tag Connect: must be used; for incoming 23360Sstevel@tonic-gaterelaying, which is based on the recipient address, To: must be 23370Sstevel@tonic-gateused). The last two entries allow mails from good@another.dom but 23380Sstevel@tonic-gatereject mail from all other addresses with another.dom as domain 23390Sstevel@tonic-gatepart. 23400Sstevel@tonic-gate 23410Sstevel@tonic-gate 23420Sstevel@tonic-gateThe value part of the map can contain: 23430Sstevel@tonic-gate 23440Sstevel@tonic-gate OK Accept mail even if other rules in the running 23450Sstevel@tonic-gate ruleset would reject it, for example, if the domain 23460Sstevel@tonic-gate name is unresolvable. "Accept" does not mean 23470Sstevel@tonic-gate "relay", but at most acceptance for local 23480Sstevel@tonic-gate recipients. That is, OK allows less than RELAY. 2349*3544Sjbeck RELAY Accept mail addressed to the indicated domain 2350*3544Sjbeck (or address if `relaytofulladdress' is set) or 23510Sstevel@tonic-gate received from the indicated domain for relaying 23520Sstevel@tonic-gate through your SMTP server. RELAY also serves as 23530Sstevel@tonic-gate an implicit OK for the other checks. 23540Sstevel@tonic-gate REJECT Reject the sender or recipient with a general 23550Sstevel@tonic-gate purpose message. 23560Sstevel@tonic-gate DISCARD Discard the message completely using the 23570Sstevel@tonic-gate $#discard mailer. If it is used in check_compat, 23580Sstevel@tonic-gate it affects only the designated recipient, not 23590Sstevel@tonic-gate the whole message as it does in all other cases. 23600Sstevel@tonic-gate This should only be used if really necessary. 23610Sstevel@tonic-gate SKIP This can only be used for host/domain names 23620Sstevel@tonic-gate and IP addresses/nets. It will abort the current 23630Sstevel@tonic-gate search for this entry without accepting or rejecting 23640Sstevel@tonic-gate it but causing the default action. 23650Sstevel@tonic-gate ### any text where ### is an RFC 821 compliant error code and 23660Sstevel@tonic-gate "any text" is a message to return for the command. 23671658Sjbeck The entire string should be quoted to avoid 23681658Sjbeck surprises: 23691658Sjbeck 23701658Sjbeck "### any text" 23711658Sjbeck 23721658Sjbeck Otherwise sendmail formats the text as email 23731658Sjbeck addresses, e.g., it may remove spaces. 23740Sstevel@tonic-gate This type is deprecated, use one of the two 23750Sstevel@tonic-gate ERROR: entries below instead. 23760Sstevel@tonic-gate ERROR:### any text 23770Sstevel@tonic-gate as above, but useful to mark error messages as such. 23781658Sjbeck If quotes need to be used to avoid modifications 23791658Sjbeck (see above), they should be placed like this: 23801658Sjbeck 23811658Sjbeck ERROR:"### any text" 23821658Sjbeck 23830Sstevel@tonic-gate ERROR:D.S.N:### any text 23840Sstevel@tonic-gate where D.S.N is an RFC 1893 compliant error code 23851658Sjbeck and the rest as above. If quotes need to be used 23861658Sjbeck to avoid modifications, they should be placed 23871658Sjbeck like this: 23881658Sjbeck 23891658Sjbeck ERROR:D.S.N:"### any text" 23901658Sjbeck 23910Sstevel@tonic-gate QUARANTINE:any text 23920Sstevel@tonic-gate Quarantine the message using the given text as the 23930Sstevel@tonic-gate quarantining reason. 23940Sstevel@tonic-gate 23950Sstevel@tonic-gateFor example: 23960Sstevel@tonic-gate 23970Sstevel@tonic-gate From:cyberspammer.com ERROR:"550 We don't accept mail from spammers" 23980Sstevel@tonic-gate From:okay.cyberspammer.com OK 23990Sstevel@tonic-gate Connect:sendmail.org RELAY 24000Sstevel@tonic-gate To:sendmail.org RELAY 24010Sstevel@tonic-gate Connect:128.32 RELAY 24020Sstevel@tonic-gate Connect:128.32.2 SKIP 24030Sstevel@tonic-gate Connect:IPv6:1:2:3:4:5:6:7 RELAY 24040Sstevel@tonic-gate Connect:suspicious.example.com QUARANTINE:Mail from suspicious host 24050Sstevel@tonic-gate Connect:[127.0.0.3] OK 24060Sstevel@tonic-gate Connect:[IPv6:1:2:3:4:5:6:7:8] OK 24070Sstevel@tonic-gate 24080Sstevel@tonic-gatewould accept mail from okay.cyberspammer.com, but would reject mail 24090Sstevel@tonic-gatefrom all other hosts at cyberspammer.com with the indicated message. 24100Sstevel@tonic-gateIt would allow relaying mail from and to any hosts in the sendmail.org 24110Sstevel@tonic-gatedomain, and allow relaying from the IPv6 1:2:3:4:5:6:7:* network 24120Sstevel@tonic-gateand from the 128.32.*.* network except for the 128.32.2.* network, 24130Sstevel@tonic-gatewhich shows how SKIP is useful to exempt subnets/subdomains. The 24140Sstevel@tonic-gatelast two entries are for checks against ${client_name} if the IP 24150Sstevel@tonic-gateaddress doesn't resolve to a hostname (or is considered as "may be 24160Sstevel@tonic-gateforged"). That is, using square brackets means these are host 24170Sstevel@tonic-gatenames, not network numbers. 24180Sstevel@tonic-gate 24190Sstevel@tonic-gateWarning: if you change the RFC 821 compliant error code from the default 24200Sstevel@tonic-gatevalue of 550, then you should probably also change the RFC 1893 compliant 24210Sstevel@tonic-gateerror code to match it. For example, if you use 24220Sstevel@tonic-gate 24230Sstevel@tonic-gate To:user@example.com ERROR:450 mailbox full 24240Sstevel@tonic-gate 24250Sstevel@tonic-gatethe error returned would be "450 5.0.0 mailbox full" which is wrong. 24260Sstevel@tonic-gateUse "ERROR:4.2.2:450 mailbox full" instead. 24270Sstevel@tonic-gate 24280Sstevel@tonic-gateNote, UUCP users may need to add hostname.UUCP to the access database 24290Sstevel@tonic-gateor class {R}. 24300Sstevel@tonic-gate 24310Sstevel@tonic-gateIf you also use: 24320Sstevel@tonic-gate 24330Sstevel@tonic-gate FEATURE(`relay_hosts_only') 24340Sstevel@tonic-gate 24350Sstevel@tonic-gatethen the above example will allow relaying for sendmail.org, but not 24360Sstevel@tonic-gatehosts within the sendmail.org domain. Note that this will also require 24370Sstevel@tonic-gatehosts listed in class {R} to be fully qualified host names. 24380Sstevel@tonic-gate 24390Sstevel@tonic-gateYou can also use the access database to block sender addresses based on 24400Sstevel@tonic-gatethe username portion of the address. For example: 24410Sstevel@tonic-gate 24420Sstevel@tonic-gate From:FREE.STEALTH.MAILER@ ERROR:550 Spam not accepted 24430Sstevel@tonic-gate 24440Sstevel@tonic-gateNote that you must include the @ after the username to signify that 24450Sstevel@tonic-gatethis database entry is for checking only the username portion of the 24460Sstevel@tonic-gatesender address. 24470Sstevel@tonic-gate 24480Sstevel@tonic-gateIf you use: 24490Sstevel@tonic-gate 24500Sstevel@tonic-gate FEATURE(`blacklist_recipients') 24510Sstevel@tonic-gate 24520Sstevel@tonic-gatethen you can add entries to the map for local users, hosts in your 24530Sstevel@tonic-gatedomains, or addresses in your domain which should not receive mail: 24540Sstevel@tonic-gate 24550Sstevel@tonic-gate To:badlocaluser@ ERROR:550 Mailbox disabled for badlocaluser 24560Sstevel@tonic-gate To:host.my.TLD ERROR:550 That host does not accept mail 24570Sstevel@tonic-gate To:user@other.my.TLD ERROR:550 Mailbox disabled for this recipient 24580Sstevel@tonic-gate 24590Sstevel@tonic-gateThis would prevent a recipient of badlocaluser in any of the local 24600Sstevel@tonic-gatedomains (class {w}), any user at host.my.TLD, and the single address 24610Sstevel@tonic-gateuser@other.my.TLD from receiving mail. Please note: a local username 24620Sstevel@tonic-gatemust be now tagged with an @ (this is consistent with the check of 24630Sstevel@tonic-gatethe sender address, and hence it is possible to distinguish between 24640Sstevel@tonic-gatehostnames and usernames). Enabling this feature will keep you from 24650Sstevel@tonic-gatesending mails to all addresses that have an error message or REJECT 24660Sstevel@tonic-gateas value part in the access map. Taking the example from above: 24670Sstevel@tonic-gate 24680Sstevel@tonic-gate spammer@aol.com REJECT 24690Sstevel@tonic-gate cyberspammer.com REJECT 24700Sstevel@tonic-gate 24710Sstevel@tonic-gateMail can't be sent to spammer@aol.com or anyone at cyberspammer.com. 24720Sstevel@tonic-gateThat's why tagged entries should be used. 24730Sstevel@tonic-gate 24742197SjbeckThere are several DNS based blacklists which can be found by 24752197Sjbeckquerying a search engine. These are databases of spammers 24760Sstevel@tonic-gatemaintained in DNS. To use such a database, specify 24770Sstevel@tonic-gate 24782197Sjbeck FEATURE(`dnsbl', `dnsbl.example.com') 24792197Sjbeck 24802197SjbeckThis will cause sendmail to reject mail from any site listed in the 2481*3544SjbeckDNS based blacklist. You must select a DNS based blacklist domain 24822197Sjbeckto check by specifying an argument to the FEATURE. The default 24832197Sjbeckerror message is 24840Sstevel@tonic-gate 24850Sstevel@tonic-gate Rejected: IP-ADDRESS listed at SERVER 24860Sstevel@tonic-gate 24870Sstevel@tonic-gatewhere IP-ADDRESS and SERVER are replaced by the appropriate 24880Sstevel@tonic-gateinformation. A second argument can be used to specify a different 2489*3544Sjbecktext or action. For example, 2490*3544Sjbeck 2491*3544Sjbeck FEATURE(`dnsbl', `dnsbl.example.com', `quarantine') 2492*3544Sjbeck 2493*3544Sjbeckwould quarantine the message if the client IP address is listed 2494*3544Sjbeckat `dnsbl.example.com'. 2495*3544Sjbeck 2496*3544SjbeckBy default, temporary lookup failures are ignored 2497*3544Sjbeckand hence cause the connection not to be rejected by the DNS based 2498*3544Sjbeckrejection list. This behavior can be changed by specifying a third 2499*3544Sjbeckargument, which must be either `t' or a full error message. For 2500*3544Sjbeckexample: 25010Sstevel@tonic-gate 25020Sstevel@tonic-gate FEATURE(`dnsbl', `dnsbl.example.com', `', 25030Sstevel@tonic-gate `"451 Temporary lookup failure for " $&{client_addr} " in dnsbl.example.com"') 25040Sstevel@tonic-gate 25050Sstevel@tonic-gateIf `t' is used, the error message is: 25060Sstevel@tonic-gate 25070Sstevel@tonic-gate 451 Temporary lookup failure of IP-ADDRESS at SERVER 25080Sstevel@tonic-gate 25090Sstevel@tonic-gatewhere IP-ADDRESS and SERVER are replaced by the appropriate 25100Sstevel@tonic-gateinformation. 25110Sstevel@tonic-gate 25120Sstevel@tonic-gateThis FEATURE can be included several times to query different 25132197SjbeckDNS based rejection lists. 25140Sstevel@tonic-gate 25150Sstevel@tonic-gateNotice: to avoid checking your own local domains against those 25160Sstevel@tonic-gateblacklists, use the access_db feature and add: 25170Sstevel@tonic-gate 25180Sstevel@tonic-gate Connect:10.1 OK 25190Sstevel@tonic-gate Connect:127.0.0.1 RELAY 25200Sstevel@tonic-gate 25210Sstevel@tonic-gateto the access map, where 10.1 is your local network. You may 25220Sstevel@tonic-gatewant to use "RELAY" instead of "OK" to allow also relaying 25230Sstevel@tonic-gateinstead of just disabling the DNS lookups in the blacklists. 25240Sstevel@tonic-gate 25250Sstevel@tonic-gate 25260Sstevel@tonic-gateThe features described above make use of the check_relay, check_mail, 25270Sstevel@tonic-gateand check_rcpt rulesets. Note that check_relay checks the SMTP 25280Sstevel@tonic-gateclient hostname and IP address when the connection is made to your 25290Sstevel@tonic-gateserver. It does not check if a mail message is being relayed to 25300Sstevel@tonic-gateanother server. That check is done in check_rcpt. If you wish to 25310Sstevel@tonic-gateinclude your own checks, you can put your checks in the rulesets 25320Sstevel@tonic-gateLocal_check_relay, Local_check_mail, and Local_check_rcpt. For 25330Sstevel@tonic-gateexample if you wanted to block senders with all numeric usernames 25340Sstevel@tonic-gate(i.e. 2312343@bigisp.com), you would use Local_check_mail and the 25350Sstevel@tonic-gateregex map: 25360Sstevel@tonic-gate 25370Sstevel@tonic-gate LOCAL_CONFIG 25380Sstevel@tonic-gate Kallnumbers regex -a@MATCH ^[0-9]+$ 25390Sstevel@tonic-gate 25400Sstevel@tonic-gate LOCAL_RULESETS 25410Sstevel@tonic-gate SLocal_check_mail 25420Sstevel@tonic-gate # check address against various regex checks 25430Sstevel@tonic-gate R$* $: $>Parse0 $>3 $1 25440Sstevel@tonic-gate R$+ < @ bigisp.com. > $* $: $(allnumbers $1 $) 25450Sstevel@tonic-gate R@MATCH $#error $: 553 Header Error 25460Sstevel@tonic-gate 25470Sstevel@tonic-gateThese rules are called with the original arguments of the corresponding 25480Sstevel@tonic-gatecheck_* ruleset. If the local ruleset returns $#OK, no further checking 25490Sstevel@tonic-gateis done by the features described above and the mail is accepted. If 25500Sstevel@tonic-gatethe local ruleset resolves to a mailer (such as $#error or $#discard), 25510Sstevel@tonic-gatethe appropriate action is taken. Other results starting with $# are 25520Sstevel@tonic-gateinterpreted by sendmail and may lead to unspecified behavior. Note: do 25530Sstevel@tonic-gateNOT create a mailer with the name OK. Return values that do not start 25540Sstevel@tonic-gatewith $# are ignored, i.e., normal processing continues. 25550Sstevel@tonic-gate 25560Sstevel@tonic-gateDelay all checks 25570Sstevel@tonic-gate---------------- 25580Sstevel@tonic-gate 25590Sstevel@tonic-gateBy using FEATURE(`delay_checks') the rulesets check_mail and check_relay 25600Sstevel@tonic-gatewill not be called when a client connects or issues a MAIL command, 25610Sstevel@tonic-gaterespectively. Instead, those rulesets will be called by the check_rcpt 25620Sstevel@tonic-gateruleset; they will be skipped if a sender has been authenticated using 25630Sstevel@tonic-gatea "trusted" mechanism, i.e., one that is defined via TRUST_AUTH_MECH(). 25640Sstevel@tonic-gateIf check_mail returns an error then the RCPT TO command will be rejected 25650Sstevel@tonic-gatewith that error. If it returns some other result starting with $# then 25660Sstevel@tonic-gatecheck_relay will be skipped. If the sender address (or a part of it) is 25670Sstevel@tonic-gatelisted in the access map and it has a RHS of OK or RELAY, then check_relay 25680Sstevel@tonic-gatewill be skipped. This has an interesting side effect: if your domain is 25690Sstevel@tonic-gatemy.domain and you have 25700Sstevel@tonic-gate 25710Sstevel@tonic-gate my.domain RELAY 25720Sstevel@tonic-gate 25730Sstevel@tonic-gatein the access map, then any e-mail with a sender address of 25740Sstevel@tonic-gate<user@my.domain> will not be rejected by check_relay even though 25750Sstevel@tonic-gateit would match the hostname or IP address. This allows spammers 25760Sstevel@tonic-gateto get around DNS based blacklist by faking the sender address. To 25770Sstevel@tonic-gateavoid this problem you have to use tagged entries: 25780Sstevel@tonic-gate 25790Sstevel@tonic-gate To:my.domain RELAY 25800Sstevel@tonic-gate Connect:my.domain RELAY 25810Sstevel@tonic-gate 25820Sstevel@tonic-gateif you need those entries at all (class {R} may take care of them). 25830Sstevel@tonic-gate 25840Sstevel@tonic-gateFEATURE(`delay_checks') can take an optional argument: 25850Sstevel@tonic-gate 25860Sstevel@tonic-gate FEATURE(`delay_checks', `friend') 25870Sstevel@tonic-gate enables spamfriend test 25880Sstevel@tonic-gate FEATURE(`delay_checks', `hater') 25890Sstevel@tonic-gate enables spamhater test 25900Sstevel@tonic-gate 25910Sstevel@tonic-gateIf such an argument is given, the recipient will be looked up in the 25920Sstevel@tonic-gateaccess map (using the tag Spam:). If the argument is `friend', then 25930Sstevel@tonic-gatethe default behavior is to apply the other rulesets and make a SPAM 25940Sstevel@tonic-gatefriend the exception. The rulesets check_mail and check_relay will be 25950Sstevel@tonic-gateskipped only if the recipient address is found and has RHS FRIEND. If 25960Sstevel@tonic-gatethe argument is `hater', then the default behavior is to skip the rulesets 25970Sstevel@tonic-gatecheck_mail and check_relay and make a SPAM hater the exception. The 25980Sstevel@tonic-gateother two rulesets will be applied only if the recipient address is 25990Sstevel@tonic-gatefound and has RHS HATER. 26000Sstevel@tonic-gate 26010Sstevel@tonic-gateThis allows for simple exceptions from the tests, e.g., by activating 26020Sstevel@tonic-gatethe friend option and having 26030Sstevel@tonic-gate 26040Sstevel@tonic-gate Spam:abuse@ FRIEND 26050Sstevel@tonic-gate 26060Sstevel@tonic-gatein the access map, mail to abuse@localdomain will get through (where 26070Sstevel@tonic-gate"localdomain" is any domain in class {w}). It is also possible to 26080Sstevel@tonic-gatespecify a full address or an address with +detail: 26090Sstevel@tonic-gate 26100Sstevel@tonic-gate Spam:abuse@my.domain FRIEND 26110Sstevel@tonic-gate Spam:me+abuse@ FRIEND 26120Sstevel@tonic-gate Spam:spam.domain FRIEND 26130Sstevel@tonic-gate 26140Sstevel@tonic-gateNote: The required tag has been changed in 8.12 from To: to Spam:. 26150Sstevel@tonic-gateThis change is incompatible to previous versions. However, you can 26160Sstevel@tonic-gate(for now) simply add the new entries to the access map, the old 26170Sstevel@tonic-gateones will be ignored. As soon as you removed the old entries from 26180Sstevel@tonic-gatethe access map, specify a third parameter (`n') to this feature and 26190Sstevel@tonic-gatethe backward compatibility rules will not be in the generated .cf 26200Sstevel@tonic-gatefile. 26210Sstevel@tonic-gate 26220Sstevel@tonic-gateHeader Checks 26230Sstevel@tonic-gate------------- 26240Sstevel@tonic-gate 26250Sstevel@tonic-gateYou can also reject mail on the basis of the contents of headers. 26260Sstevel@tonic-gateThis is done by adding a ruleset call to the 'H' header definition command 26270Sstevel@tonic-gatein sendmail.cf. For example, this can be used to check the validity of 26280Sstevel@tonic-gatea Message-ID: header: 26290Sstevel@tonic-gate 26300Sstevel@tonic-gate LOCAL_CONFIG 26310Sstevel@tonic-gate HMessage-Id: $>CheckMessageId 26320Sstevel@tonic-gate 26330Sstevel@tonic-gate LOCAL_RULESETS 26340Sstevel@tonic-gate SCheckMessageId 26350Sstevel@tonic-gate R< $+ @ $+ > $@ OK 26360Sstevel@tonic-gate R$* $#error $: 553 Header Error 26370Sstevel@tonic-gate 26380Sstevel@tonic-gateThe alternative format: 26390Sstevel@tonic-gate 26400Sstevel@tonic-gate HSubject: $>+CheckSubject 26410Sstevel@tonic-gate 26420Sstevel@tonic-gatethat is, $>+ instead of $>, gives the full Subject: header including 26430Sstevel@tonic-gatecomments to the ruleset (comments in parentheses () are stripped 26440Sstevel@tonic-gateby default). 26450Sstevel@tonic-gate 26460Sstevel@tonic-gateA default ruleset for headers which don't have a specific ruleset 26470Sstevel@tonic-gatedefined for them can be given by: 26480Sstevel@tonic-gate 26490Sstevel@tonic-gate H*: $>CheckHdr 26500Sstevel@tonic-gate 26510Sstevel@tonic-gateNotice: 26520Sstevel@tonic-gate1. All rules act on tokens as explained in doc/op/op.{me,ps,txt}. 26530Sstevel@tonic-gateThat may cause problems with simple header checks due to the 26540Sstevel@tonic-gatetokenization. It might be simpler to use a regex map and apply it 26550Sstevel@tonic-gateto $&{currHeader}. 26560Sstevel@tonic-gate2. There are no default rulesets coming with this distribution of 2657616Sjbecksendmail. You can write your own or search the WWW for examples. 26581658Sjbeck3. When using a default ruleset for headers, the name of the header 26590Sstevel@tonic-gatecurrently being checked can be found in the $&{hdr_name} macro. 26600Sstevel@tonic-gate 26610Sstevel@tonic-gateAfter all of the headers are read, the check_eoh ruleset will be called for 26620Sstevel@tonic-gateany final header-related checks. The ruleset is called with the number of 26630Sstevel@tonic-gateheaders and the size of all of the headers in bytes separated by $|. One 26640Sstevel@tonic-gateexample usage is to reject messages which do not have a Message-Id: 26650Sstevel@tonic-gateheader. However, the Message-Id: header is *NOT* a required header and is 26660Sstevel@tonic-gatenot a guaranteed spam indicator. This ruleset is an example and should 26670Sstevel@tonic-gateprobably not be used in production. 26680Sstevel@tonic-gate 26690Sstevel@tonic-gate LOCAL_CONFIG 26700Sstevel@tonic-gate Kstorage macro 26710Sstevel@tonic-gate HMessage-Id: $>CheckMessageId 26720Sstevel@tonic-gate 26730Sstevel@tonic-gate LOCAL_RULESETS 26740Sstevel@tonic-gate SCheckMessageId 26750Sstevel@tonic-gate # Record the presence of the header 26760Sstevel@tonic-gate R$* $: $(storage {MessageIdCheck} $@ OK $) $1 26770Sstevel@tonic-gate R< $+ @ $+ > $@ OK 26780Sstevel@tonic-gate R$* $#error $: 553 Header Error 26790Sstevel@tonic-gate 26800Sstevel@tonic-gate Scheck_eoh 26810Sstevel@tonic-gate # Check the macro 26820Sstevel@tonic-gate R$* $: < $&{MessageIdCheck} > 26830Sstevel@tonic-gate # Clear the macro for the next message 26840Sstevel@tonic-gate R$* $: $(storage {MessageIdCheck} $) $1 26850Sstevel@tonic-gate # Has a Message-Id: header 26860Sstevel@tonic-gate R< $+ > $@ OK 26870Sstevel@tonic-gate # Allow missing Message-Id: from local mail 26880Sstevel@tonic-gate R$* $: < $&{client_name} > 26890Sstevel@tonic-gate R< > $@ OK 26900Sstevel@tonic-gate R< $=w > $@ OK 26910Sstevel@tonic-gate # Otherwise, reject the mail 26920Sstevel@tonic-gate R$* $#error $: 553 Header Error 26930Sstevel@tonic-gate 26940Sstevel@tonic-gate 26950Sstevel@tonic-gate+--------------------+ 26960Sstevel@tonic-gate| CONNECTION CONTROL | 26970Sstevel@tonic-gate+--------------------+ 26980Sstevel@tonic-gate 26990Sstevel@tonic-gateThe features ratecontrol and conncontrol allow to establish connection 27000Sstevel@tonic-gatelimits per client IP address or net. These features can limit the 27010Sstevel@tonic-gaterate of connections (connections per time unit) or the number of 27020Sstevel@tonic-gateincoming SMTP connections, respectively. If enabled, appropriate 27030Sstevel@tonic-gaterulesets are called at the end of check_relay, i.e., after DNS 27040Sstevel@tonic-gateblacklists and generic access_db operations. The features require 27050Sstevel@tonic-gateFEATURE(`access_db') to be listed earlier in the mc file. 27060Sstevel@tonic-gate 27070Sstevel@tonic-gateNote: FEATURE(`delay_checks') delays those connection control checks 27080Sstevel@tonic-gateafter a recipient address has been received, hence making these 27090Sstevel@tonic-gateconnection control features less useful. To run the checks as early 27100Sstevel@tonic-gateas possible, specify the parameter `nodelay', e.g., 27110Sstevel@tonic-gate 27120Sstevel@tonic-gate FEATURE(`ratecontrol', `nodelay') 27130Sstevel@tonic-gate 27140Sstevel@tonic-gateIn that case, FEATURE(`delay_checks') has no effect on connection 27150Sstevel@tonic-gatecontrol (and it must be specified earlier in the mc file). 27160Sstevel@tonic-gate 27170Sstevel@tonic-gateAn optional second argument `terminate' specifies whether the 27180Sstevel@tonic-gaterulesets should return the error code 421 which will cause 27190Sstevel@tonic-gatesendmail to terminate the session with that error if it is 27200Sstevel@tonic-gatereturned from check_relay, i.e., not delayed as explained in 27210Sstevel@tonic-gatethe previous paragraph. Example: 27220Sstevel@tonic-gate 27230Sstevel@tonic-gate FEATURE(`ratecontrol', `nodelay', `terminate') 27240Sstevel@tonic-gate 27250Sstevel@tonic-gate 27260Sstevel@tonic-gate+----------+ 27270Sstevel@tonic-gate| STARTTLS | 27280Sstevel@tonic-gate+----------+ 27290Sstevel@tonic-gate 27300Sstevel@tonic-gateIn this text, cert will be used as an abbreviation for X.509 certificate, 27310Sstevel@tonic-gateDN (CN) is the distinguished (common) name of a cert, and CA is a 27320Sstevel@tonic-gatecertification authority, which signs (issues) certs. 27330Sstevel@tonic-gate 27340Sstevel@tonic-gateFor STARTTLS to be offered by sendmail you need to set at least 27350Sstevel@tonic-gatethese variables (the file names and paths are just examples): 27360Sstevel@tonic-gate 27370Sstevel@tonic-gate define(`confCACERT_PATH', `/etc/mail/certs/') 27380Sstevel@tonic-gate define(`confCACERT', `/etc/mail/certs/CA.cert.pem') 27390Sstevel@tonic-gate define(`confSERVER_CERT', `/etc/mail/certs/my.cert.pem') 27400Sstevel@tonic-gate define(`confSERVER_KEY', `/etc/mail/certs/my.key.pem') 27410Sstevel@tonic-gate 27420Sstevel@tonic-gateOn systems which do not have the compile flag HASURANDOM set (see 27430Sstevel@tonic-gatesendmail/README) you also must set confRAND_FILE. 27440Sstevel@tonic-gate 27450Sstevel@tonic-gateSee doc/op/op.{me,ps,txt} for more information about these options, 27460Sstevel@tonic-gateespecially the sections ``Certificates for STARTTLS'' and ``PRNG for 27470Sstevel@tonic-gateSTARTTLS''. 27480Sstevel@tonic-gate 27490Sstevel@tonic-gateMacros related to STARTTLS are: 27500Sstevel@tonic-gate 27510Sstevel@tonic-gate${cert_issuer} holds the DN of the CA (the cert issuer). 27520Sstevel@tonic-gate${cert_subject} holds the DN of the cert (called the cert subject). 27530Sstevel@tonic-gate${cn_issuer} holds the CN of the CA (the cert issuer). 27540Sstevel@tonic-gate${cn_subject} holds the CN of the cert (called the cert subject). 27550Sstevel@tonic-gate${tls_version} the TLS/SSL version used for the connection, e.g., TLSv1, 27560Sstevel@tonic-gate TLSv1/SSLv3, SSLv3, SSLv2. 27570Sstevel@tonic-gate${cipher} the cipher used for the connection, e.g., EDH-DSS-DES-CBC3-SHA, 27580Sstevel@tonic-gate EDH-RSA-DES-CBC-SHA, DES-CBC-MD5, DES-CBC3-SHA. 27590Sstevel@tonic-gate${cipher_bits} the keylength (in bits) of the symmetric encryption algorithm 27600Sstevel@tonic-gate used for the connection. 27610Sstevel@tonic-gate${verify} holds the result of the verification of the presented cert. 27620Sstevel@tonic-gate Possible values are: 27630Sstevel@tonic-gate OK verification succeeded. 27640Sstevel@tonic-gate NO no cert presented. 27650Sstevel@tonic-gate NOT no cert requested. 27660Sstevel@tonic-gate FAIL cert presented but could not be verified, 27670Sstevel@tonic-gate e.g., the cert of the signing CA is missing. 27680Sstevel@tonic-gate NONE STARTTLS has not been performed. 27690Sstevel@tonic-gate TEMP temporary error occurred. 27700Sstevel@tonic-gate PROTOCOL protocol error occurred (SMTP level). 27710Sstevel@tonic-gate SOFTWARE STARTTLS handshake failed. 27720Sstevel@tonic-gate${server_name} the name of the server of the current outgoing SMTP 27730Sstevel@tonic-gate connection. 27740Sstevel@tonic-gate${server_addr} the address of the server of the current outgoing SMTP 27750Sstevel@tonic-gate connection. 27760Sstevel@tonic-gate 27770Sstevel@tonic-gateRelaying 27780Sstevel@tonic-gate-------- 27790Sstevel@tonic-gate 27800Sstevel@tonic-gateSMTP STARTTLS can allow relaying for remote SMTP clients which have 27810Sstevel@tonic-gatesuccessfully authenticated themselves. If the verification of the cert 27820Sstevel@tonic-gatefailed (${verify} != OK), relaying is subject to the usual rules. 27830Sstevel@tonic-gateOtherwise the DN of the issuer is looked up in the access map using the 27840Sstevel@tonic-gatetag CERTISSUER. If the resulting value is RELAY, relaying is allowed. 27850Sstevel@tonic-gateIf it is SUBJECT, the DN of the cert subject is looked up next in the 27860Sstevel@tonic-gateaccess map using the tag CERTSUBJECT. If the value is RELAY, relaying 27870Sstevel@tonic-gateis allowed. 27880Sstevel@tonic-gate 27890Sstevel@tonic-gateTo make things a bit more flexible (or complicated), the values for 27900Sstevel@tonic-gate${cert_issuer} and ${cert_subject} can be optionally modified by regular 27910Sstevel@tonic-gateexpressions defined in the m4 variables _CERT_REGEX_ISSUER_ and 27920Sstevel@tonic-gate_CERT_REGEX_SUBJECT_, respectively. To avoid problems with those macros in 27930Sstevel@tonic-gaterulesets and map lookups, they are modified as follows: each non-printable 27940Sstevel@tonic-gatecharacter and the characters '<', '>', '(', ')', '"', '+', ' ' are replaced 27950Sstevel@tonic-gateby their HEX value with a leading '+'. For example: 27960Sstevel@tonic-gate 27970Sstevel@tonic-gate/C=US/ST=California/O=endmail.org/OU=private/CN=Darth Mail (Cert)/Email= 27980Sstevel@tonic-gatedarth+cert@endmail.org 27990Sstevel@tonic-gate 28000Sstevel@tonic-gateis encoded as: 28010Sstevel@tonic-gate 28020Sstevel@tonic-gate/C=US/ST=California/O=endmail.org/OU=private/CN= 28030Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org 28040Sstevel@tonic-gate 28050Sstevel@tonic-gate(line breaks have been inserted for readability). 28060Sstevel@tonic-gate 28070Sstevel@tonic-gateThe macros which are subject to this encoding are ${cert_subject}, 28080Sstevel@tonic-gate${cert_issuer}, ${cn_subject}, and ${cn_issuer}. 28090Sstevel@tonic-gate 28100Sstevel@tonic-gateExamples: 28110Sstevel@tonic-gate 28120Sstevel@tonic-gateTo allow relaying for everyone who can present a cert signed by 28130Sstevel@tonic-gate 28140Sstevel@tonic-gate/C=US/ST=California/O=endmail.org/OU=private/CN= 28150Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org 28160Sstevel@tonic-gate 28170Sstevel@tonic-gatesimply use: 28180Sstevel@tonic-gate 28190Sstevel@tonic-gateCertIssuer:/C=US/ST=California/O=endmail.org/OU=private/CN= 28200Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org RELAY 28210Sstevel@tonic-gate 28220Sstevel@tonic-gateTo allow relaying only for a subset of machines that have a cert signed by 28230Sstevel@tonic-gate 28240Sstevel@tonic-gate/C=US/ST=California/O=endmail.org/OU=private/CN= 28250Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org 28260Sstevel@tonic-gate 28270Sstevel@tonic-gateuse: 28280Sstevel@tonic-gate 28290Sstevel@tonic-gateCertIssuer:/C=US/ST=California/O=endmail.org/OU=private/CN= 28300Sstevel@tonic-gateDarth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.org SUBJECT 28310Sstevel@tonic-gateCertSubject:/C=US/ST=California/O=endmail.org/OU=private/CN= 28320Sstevel@tonic-gateDeathStar/Email=deathstar@endmail.org RELAY 28330Sstevel@tonic-gate 28340Sstevel@tonic-gateNotes: 28350Sstevel@tonic-gate- line breaks have been inserted after "CN=" for readability, 28360Sstevel@tonic-gate each tagged entry must be one (long) line in the access map. 28370Sstevel@tonic-gate- if OpenSSL 0.9.7 or newer is used then the "Email=" part of a DN 28380Sstevel@tonic-gate is replaced by "emailAddress=". 28390Sstevel@tonic-gate 28400Sstevel@tonic-gateOf course it is also possible to write a simple ruleset that allows 28410Sstevel@tonic-gaterelaying for everyone who can present a cert that can be verified, e.g., 28420Sstevel@tonic-gate 28430Sstevel@tonic-gateLOCAL_RULESETS 28440Sstevel@tonic-gateSLocal_check_rcpt 28450Sstevel@tonic-gateR$* $: $&{verify} 28460Sstevel@tonic-gateROK $# OK 28470Sstevel@tonic-gate 28480Sstevel@tonic-gateAllowing Connections 28490Sstevel@tonic-gate-------------------- 28500Sstevel@tonic-gate 28510Sstevel@tonic-gateThe rulesets tls_server, tls_client, and tls_rcpt are used to decide whether 28520Sstevel@tonic-gatean SMTP connection is accepted (or should continue). 28530Sstevel@tonic-gate 28540Sstevel@tonic-gatetls_server is called when sendmail acts as client after a STARTTLS command 28550Sstevel@tonic-gate(should) have been issued. The parameter is the value of ${verify}. 28560Sstevel@tonic-gate 28570Sstevel@tonic-gatetls_client is called when sendmail acts as server, after a STARTTLS command 28580Sstevel@tonic-gatehas been issued, and from check_mail. The parameter is the value of 28590Sstevel@tonic-gate${verify} and STARTTLS or MAIL, respectively. 28600Sstevel@tonic-gate 28610Sstevel@tonic-gateBoth rulesets behave the same. If no access map is in use, the connection 28620Sstevel@tonic-gatewill be accepted unless ${verify} is SOFTWARE, in which case the connection 28630Sstevel@tonic-gateis always aborted. For tls_server/tls_client, ${client_name}/${server_name} 28640Sstevel@tonic-gateis looked up in the access map using the tag TLS_Srv/TLS_Clt, which is done 28650Sstevel@tonic-gatewith the ruleset LookUpDomain. If no entry is found, ${client_addr} 28660Sstevel@tonic-gate(${server_addr}) is looked up in the access map (same tag, ruleset 28670Sstevel@tonic-gateLookUpAddr). If this doesn't result in an entry either, just the tag is 28680Sstevel@tonic-gatelooked up in the access map (included the trailing colon). Notice: 28690Sstevel@tonic-gaterequiring that e-mail is sent to a server only encrypted, e.g., via 28700Sstevel@tonic-gate 28710Sstevel@tonic-gateTLS_Srv:secure.domain ENCR:112 28720Sstevel@tonic-gate 28730Sstevel@tonic-gatedoesn't necessarily mean that e-mail sent to that domain is encrypted. 28740Sstevel@tonic-gateIf the domain has multiple MX servers, e.g., 28750Sstevel@tonic-gate 28760Sstevel@tonic-gatesecure.domain. IN MX 10 mail.secure.domain. 28770Sstevel@tonic-gatesecure.domain. IN MX 50 mail.other.domain. 28780Sstevel@tonic-gate 28790Sstevel@tonic-gatethen mail to user@secure.domain may go unencrypted to mail.other.domain. 28800Sstevel@tonic-gatetls_rcpt can be used to address this problem. 28810Sstevel@tonic-gate 28820Sstevel@tonic-gatetls_rcpt is called before a RCPT TO: command is sent. The parameter is the 28830Sstevel@tonic-gatecurrent recipient. This ruleset is only defined if FEATURE(`access_db') 28840Sstevel@tonic-gateis selected. A recipient address user@domain is looked up in the access 28850Sstevel@tonic-gatemap in four formats: TLS_Rcpt:user@domain, TLS_Rcpt:user@, TLS_Rcpt:domain, 28860Sstevel@tonic-gateand TLS_Rcpt:; the first match is taken. 28870Sstevel@tonic-gate 28880Sstevel@tonic-gateThe result of the lookups is then used to call the ruleset TLS_connection, 28890Sstevel@tonic-gatewhich checks the requirement specified by the RHS in the access map against 28900Sstevel@tonic-gatethe actual parameters of the current TLS connection, esp. ${verify} and 28910Sstevel@tonic-gate${cipher_bits}. Legal RHSs in the access map are: 28920Sstevel@tonic-gate 28930Sstevel@tonic-gateVERIFY verification must have succeeded 28940Sstevel@tonic-gateVERIFY:bits verification must have succeeded and ${cipher_bits} must 28950Sstevel@tonic-gate be greater than or equal bits. 28960Sstevel@tonic-gateENCR:bits ${cipher_bits} must be greater than or equal bits. 28970Sstevel@tonic-gate 28980Sstevel@tonic-gateThe RHS can optionally be prefixed by TEMP+ or PERM+ to select a temporary 28990Sstevel@tonic-gateor permanent error. The default is a temporary error code (403 4.7.0) 29000Sstevel@tonic-gateunless the macro TLS_PERM_ERR is set during generation of the .cf file. 29010Sstevel@tonic-gate 29020Sstevel@tonic-gateIf a certain level of encryption is required, then it might also be 29030Sstevel@tonic-gatepossible that this level is provided by the security layer from a SASL 29040Sstevel@tonic-gatealgorithm, e.g., DIGEST-MD5. 29050Sstevel@tonic-gate 29060Sstevel@tonic-gateFurthermore, there can be a list of extensions added. Such a list 29070Sstevel@tonic-gatestarts with '+' and the items are separated by '++'. Allowed 29080Sstevel@tonic-gateextensions are: 29090Sstevel@tonic-gate 29100Sstevel@tonic-gateCN:name name must match ${cn_subject} 29110Sstevel@tonic-gateCN ${server_name} must match ${cn_subject} 29120Sstevel@tonic-gateCS:name name must match ${cert_subject} 29130Sstevel@tonic-gateCI:name name must match ${cert_issuer} 29140Sstevel@tonic-gate 29150Sstevel@tonic-gateExample: e-mail sent to secure.example.com should only use an encrypted 29160Sstevel@tonic-gateconnection. E-mail received from hosts within the laptop.example.com domain 29170Sstevel@tonic-gateshould only be accepted if they have been authenticated. The host which 29180Sstevel@tonic-gatereceives e-mail for darth@endmail.org must present a cert that uses the 29190Sstevel@tonic-gateCN smtp.endmail.org. 29200Sstevel@tonic-gate 29210Sstevel@tonic-gateTLS_Srv:secure.example.com ENCR:112 29220Sstevel@tonic-gateTLS_Clt:laptop.example.com PERM+VERIFY:112 29230Sstevel@tonic-gateTLS_Rcpt:darth@endmail.org ENCR:112+CN:smtp.endmail.org 29240Sstevel@tonic-gate 29250Sstevel@tonic-gate 29260Sstevel@tonic-gateDisabling STARTTLS And Setting SMTP Server Features 29270Sstevel@tonic-gate--------------------------------------------------- 29280Sstevel@tonic-gate 29290Sstevel@tonic-gateBy default STARTTLS is used whenever possible. However, there are 29300Sstevel@tonic-gatesome broken MTAs that don't properly implement STARTTLS. To be able 29310Sstevel@tonic-gateto send to (or receive from) those MTAs, the ruleset try_tls 29320Sstevel@tonic-gate(srv_features) can be used that work together with the access map. 29330Sstevel@tonic-gateEntries for the access map must be tagged with Try_TLS (Srv_Features) 29340Sstevel@tonic-gateand refer to the hostname or IP address of the connecting system. 29350Sstevel@tonic-gateA default case can be specified by using just the tag. For example, 29360Sstevel@tonic-gatethe following entries in the access map: 29370Sstevel@tonic-gate 29380Sstevel@tonic-gate Try_TLS:broken.server NO 29390Sstevel@tonic-gate Srv_Features:my.domain v 29400Sstevel@tonic-gate Srv_Features: V 29410Sstevel@tonic-gate 29420Sstevel@tonic-gatewill turn off STARTTLS when sending to broken.server (or any host 29430Sstevel@tonic-gatein that domain), and request a client certificate during the TLS 29440Sstevel@tonic-gatehandshake only for hosts in my.domain. The valid entries on the RHS 29450Sstevel@tonic-gatefor Srv_Features are listed in the Sendmail Installation and 29460Sstevel@tonic-gateOperations Guide. 29470Sstevel@tonic-gate 29480Sstevel@tonic-gate 29490Sstevel@tonic-gateReceived: Header 29500Sstevel@tonic-gate---------------- 29510Sstevel@tonic-gate 29520Sstevel@tonic-gateThe Received: header reveals whether STARTTLS has been used. It contains an 29530Sstevel@tonic-gateextra line: 29540Sstevel@tonic-gate 29550Sstevel@tonic-gate(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify}) 29560Sstevel@tonic-gate 29570Sstevel@tonic-gate 29580Sstevel@tonic-gate+--------------------------------+ 29590Sstevel@tonic-gate| ADDING NEW MAILERS OR RULESETS | 29600Sstevel@tonic-gate+--------------------------------+ 29610Sstevel@tonic-gate 29620Sstevel@tonic-gateSometimes you may need to add entirely new mailers or rulesets. They 29630Sstevel@tonic-gateshould be introduced with the constructs MAILER_DEFINITIONS and 29640Sstevel@tonic-gateLOCAL_RULESETS respectively. For example: 29650Sstevel@tonic-gate 29660Sstevel@tonic-gate MAILER_DEFINITIONS 29670Sstevel@tonic-gate Mmymailer, ... 29680Sstevel@tonic-gate ... 29690Sstevel@tonic-gate 29700Sstevel@tonic-gate LOCAL_RULESETS 29710Sstevel@tonic-gate Smyruleset 29720Sstevel@tonic-gate ... 29730Sstevel@tonic-gate 2974616SjbeckLocal additions for the rulesets srv_features, try_tls, tls_rcpt, 2975616Sjbecktls_client, and tls_server can be made using LOCAL_SRV_FEATURES, 2976616SjbeckLOCAL_TRY_TLS, LOCAL_TLS_RCPT, LOCAL_TLS_CLIENT, and LOCAL_TLS_SERVER, 2977616Sjbeckrespectively. For example, to add a local ruleset that decides 2978616Sjbeckwhether to try STARTTLS in a sendmail client, use: 2979616Sjbeck 2980616Sjbeck LOCAL_TRY_TLS 2981616Sjbeck R... 2982616Sjbeck 29830Sstevel@tonic-gateNote: you don't need to add a name for the ruleset, it is implicitly 29840Sstevel@tonic-gatedefined by using the appropriate macro. 29850Sstevel@tonic-gate 29860Sstevel@tonic-gate 29870Sstevel@tonic-gate+-------------------------+ 29880Sstevel@tonic-gate| ADDING NEW MAIL FILTERS | 29890Sstevel@tonic-gate+-------------------------+ 29900Sstevel@tonic-gate 29910Sstevel@tonic-gateSendmail supports mail filters to filter incoming SMTP messages according 29920Sstevel@tonic-gateto the "Sendmail Mail Filter API" documentation. These filters can be 29930Sstevel@tonic-gateconfigured in your mc file using the two commands: 29940Sstevel@tonic-gate 29950Sstevel@tonic-gate MAIL_FILTER(`name', `equates') 29960Sstevel@tonic-gate INPUT_MAIL_FILTER(`name', `equates') 29970Sstevel@tonic-gate 29980Sstevel@tonic-gateThe first command, MAIL_FILTER(), simply defines a filter with the given 29990Sstevel@tonic-gatename and equates. For example: 30000Sstevel@tonic-gate 30010Sstevel@tonic-gate MAIL_FILTER(`archive', `S=local:/var/run/archivesock, F=R') 30020Sstevel@tonic-gate 30030Sstevel@tonic-gateThis creates the equivalent sendmail.cf entry: 30040Sstevel@tonic-gate 30050Sstevel@tonic-gate Xarchive, S=local:/var/run/archivesock, F=R 30060Sstevel@tonic-gate 30070Sstevel@tonic-gateThe INPUT_MAIL_FILTER() command performs the same actions as MAIL_FILTER 30080Sstevel@tonic-gatebut also populates the m4 variable `confINPUT_MAIL_FILTERS' with the name 30090Sstevel@tonic-gateof the filter such that the filter will actually be called by sendmail. 30100Sstevel@tonic-gate 30110Sstevel@tonic-gateFor example, the two commands: 30120Sstevel@tonic-gate 30130Sstevel@tonic-gate INPUT_MAIL_FILTER(`archive', `S=local:/var/run/archivesock, F=R') 30140Sstevel@tonic-gate INPUT_MAIL_FILTER(`spamcheck', `S=inet:2525@localhost, F=T') 30150Sstevel@tonic-gate 30160Sstevel@tonic-gateare equivalent to the three commands: 30170Sstevel@tonic-gate 30180Sstevel@tonic-gate MAIL_FILTER(`archive', `S=local:/var/run/archivesock, F=R') 30190Sstevel@tonic-gate MAIL_FILTER(`spamcheck', `S=inet:2525@localhost, F=T') 30200Sstevel@tonic-gate define(`confINPUT_MAIL_FILTERS', `archive, spamcheck') 30210Sstevel@tonic-gate 30220Sstevel@tonic-gateIn general, INPUT_MAIL_FILTER() should be used unless you need to define 30230Sstevel@tonic-gatemore filters than you want to use for `confINPUT_MAIL_FILTERS'. 30240Sstevel@tonic-gate 30250Sstevel@tonic-gateNote that setting `confINPUT_MAIL_FILTERS' after any INPUT_MAIL_FILTER() 30260Sstevel@tonic-gatecommands will clear the list created by the prior INPUT_MAIL_FILTER() 30270Sstevel@tonic-gatecommands. 30280Sstevel@tonic-gate 30290Sstevel@tonic-gate 30300Sstevel@tonic-gate+-------------------------+ 30310Sstevel@tonic-gate| QUEUE GROUP DEFINITIONS | 30320Sstevel@tonic-gate+-------------------------+ 30330Sstevel@tonic-gate 30340Sstevel@tonic-gateIn addition to the queue directory (which is the default queue group 30350Sstevel@tonic-gatecalled "mqueue"), sendmail can deal with multiple queue groups, which 30360Sstevel@tonic-gateare collections of queue directories with the same behaviour. Queue 30370Sstevel@tonic-gategroups can be defined using the command: 30380Sstevel@tonic-gate 30390Sstevel@tonic-gate QUEUE_GROUP(`name', `equates') 30400Sstevel@tonic-gate 30410Sstevel@tonic-gateFor details about queue groups, please see doc/op/op.{me,ps,txt}. 30420Sstevel@tonic-gate 30430Sstevel@tonic-gate+-------------------------------+ 30440Sstevel@tonic-gate| NON-SMTP BASED CONFIGURATIONS | 30450Sstevel@tonic-gate+-------------------------------+ 30460Sstevel@tonic-gate 30470Sstevel@tonic-gateThese configuration files are designed primarily for use by 30480Sstevel@tonic-gateSMTP-based sites. They may not be well tuned for UUCP-only or 30490Sstevel@tonic-gateUUCP-primarily nodes (the latter is defined as a small local net 30500Sstevel@tonic-gateconnected to the rest of the world via UUCP). However, there is 30510Sstevel@tonic-gateone hook to handle some special cases. 30520Sstevel@tonic-gate 30530Sstevel@tonic-gateYou can define a ``smart host'' that understands a richer address syntax 30540Sstevel@tonic-gateusing: 30550Sstevel@tonic-gate 30560Sstevel@tonic-gate define(`SMART_HOST', `mailer:hostname') 30570Sstevel@tonic-gate 30580Sstevel@tonic-gateIn this case, the ``mailer:'' defaults to "relay". Any messages that 30590Sstevel@tonic-gatecan't be handled using the usual UUCP rules are passed to this host. 30600Sstevel@tonic-gate 30610Sstevel@tonic-gateIf you are on a local SMTP-based net that connects to the outside 30620Sstevel@tonic-gateworld via UUCP, you can use LOCAL_NET_CONFIG to add appropriate rules. 30630Sstevel@tonic-gateFor example: 30640Sstevel@tonic-gate 30650Sstevel@tonic-gate define(`SMART_HOST', `uucp-new:uunet') 30660Sstevel@tonic-gate LOCAL_NET_CONFIG 30670Sstevel@tonic-gate R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 30680Sstevel@tonic-gate 30690Sstevel@tonic-gateThis will cause all names that end in your domain name ($m) to be sent 30700Sstevel@tonic-gatevia SMTP; anything else will be sent via uucp-new (smart UUCP) to uunet. 30710Sstevel@tonic-gateIf you have FEATURE(`nocanonify'), you may need to omit the dots after 30720Sstevel@tonic-gatethe $m. If you are running a local DNS inside your domain which is 30730Sstevel@tonic-gatenot otherwise connected to the outside world, you probably want to 30740Sstevel@tonic-gateuse: 30750Sstevel@tonic-gate 30760Sstevel@tonic-gate define(`SMART_HOST', `smtp:fire.wall.com') 30770Sstevel@tonic-gate LOCAL_NET_CONFIG 30780Sstevel@tonic-gate R$* < @ $* . > $* $#smtp $@ $2. $: $1 < @ $2. > $3 30790Sstevel@tonic-gate 30800Sstevel@tonic-gateThat is, send directly only to things you found in your DNS lookup; 30810Sstevel@tonic-gateanything else goes through SMART_HOST. 30820Sstevel@tonic-gate 30830Sstevel@tonic-gateYou may need to turn off the anti-spam rules in order to accept 30840Sstevel@tonic-gateUUCP mail with FEATURE(`promiscuous_relay') and 30850Sstevel@tonic-gateFEATURE(`accept_unresolvable_domains'). 30860Sstevel@tonic-gate 30870Sstevel@tonic-gate 30880Sstevel@tonic-gate+-----------+ 30890Sstevel@tonic-gate| WHO AM I? | 30900Sstevel@tonic-gate+-----------+ 30910Sstevel@tonic-gate 30920Sstevel@tonic-gateNormally, the $j macro is automatically defined to be your fully 30930Sstevel@tonic-gatequalified domain name (FQDN). Sendmail does this by getting your 30940Sstevel@tonic-gatehost name using gethostname and then calling gethostbyname on the 30950Sstevel@tonic-gateresult. For example, in some environments gethostname returns 30960Sstevel@tonic-gateonly the root of the host name (such as "foo"); gethostbyname is 30970Sstevel@tonic-gatesupposed to return the FQDN ("foo.bar.com"). In some (fairly rare) 30980Sstevel@tonic-gatecases, gethostbyname may fail to return the FQDN. In this case 30990Sstevel@tonic-gateyou MUST define confDOMAIN_NAME to be your fully qualified domain 31000Sstevel@tonic-gatename. This is usually done using: 31010Sstevel@tonic-gate 31020Sstevel@tonic-gate Dmbar.com 31030Sstevel@tonic-gate define(`confDOMAIN_NAME', `$w.$m')dnl 31040Sstevel@tonic-gate 31050Sstevel@tonic-gate 31060Sstevel@tonic-gate+-----------------------------------+ 31070Sstevel@tonic-gate| ACCEPTING MAIL FOR MULTIPLE NAMES | 31080Sstevel@tonic-gate+-----------------------------------+ 31090Sstevel@tonic-gate 31100Sstevel@tonic-gateIf your host is known by several different names, you need to augment 31110Sstevel@tonic-gateclass {w}. This is a list of names by which your host is known, and 31120Sstevel@tonic-gateanything sent to an address using a host name in this list will be 31130Sstevel@tonic-gatetreated as local mail. You can do this in two ways: either create the 31140Sstevel@tonic-gatefile /etc/mail/local-host-names containing a list of your aliases (one per 31150Sstevel@tonic-gateline), and use ``FEATURE(`use_cw_file')'' in the .mc file, or add 31160Sstevel@tonic-gate``LOCAL_DOMAIN(`alias.host.name')''. Be sure you use the fully-qualified 31170Sstevel@tonic-gatename of the host, rather than a short name. 31180Sstevel@tonic-gate 31190Sstevel@tonic-gateIf you want to have different address in different domains, take 31200Sstevel@tonic-gatea look at the virtusertable feature, which is also explained at 31210Sstevel@tonic-gatehttp://www.sendmail.org/virtual-hosting.html 31220Sstevel@tonic-gate 31230Sstevel@tonic-gate 31240Sstevel@tonic-gate+--------------------+ 31250Sstevel@tonic-gate| USING MAILERTABLES | 31260Sstevel@tonic-gate+--------------------+ 31270Sstevel@tonic-gate 31280Sstevel@tonic-gateTo use FEATURE(`mailertable'), you will have to create an external 31290Sstevel@tonic-gatedatabase containing the routing information for various domains. 31300Sstevel@tonic-gateFor example, a mailertable file in text format might be: 31310Sstevel@tonic-gate 31320Sstevel@tonic-gate .my.domain xnet:%1.my.domain 31330Sstevel@tonic-gate uuhost1.my.domain uucp-new:uuhost1 31340Sstevel@tonic-gate .bitnet smtp:relay.bit.net 31350Sstevel@tonic-gate 31360Sstevel@tonic-gateThis should normally be stored in /etc/mail/mailertable. The actual 31370Sstevel@tonic-gatedatabase version of the mailertable is built using: 31380Sstevel@tonic-gate 31390Sstevel@tonic-gate makemap hash /etc/mail/mailertable < /etc/mail/mailertable 31400Sstevel@tonic-gate 31410Sstevel@tonic-gateThe semantics are simple. Any LHS entry that does not begin with 31420Sstevel@tonic-gatea dot matches the full host name indicated. LHS entries beginning 31430Sstevel@tonic-gatewith a dot match anything ending with that domain name (including 31440Sstevel@tonic-gatethe leading dot) -- that is, they can be thought of as having a 31450Sstevel@tonic-gateleading ".+" regular expression pattern for a non-empty sequence of 31460Sstevel@tonic-gatecharacters. Matching is done in order of most-to-least qualified 31470Sstevel@tonic-gate-- for example, even though ".my.domain" is listed first in the 31480Sstevel@tonic-gateabove example, an entry of "uuhost1.my.domain" will match the second 31490Sstevel@tonic-gateentry since it is more explicit. Note: e-mail to "user@my.domain" 31500Sstevel@tonic-gatedoes not match any entry in the above table. You need to have 31510Sstevel@tonic-gatesomething like: 31520Sstevel@tonic-gate 31530Sstevel@tonic-gate my.domain esmtp:host.my.domain 31540Sstevel@tonic-gate 31550Sstevel@tonic-gateThe RHS should always be a "mailer:host" pair. The mailer is the 31560Sstevel@tonic-gateconfiguration name of a mailer (that is, an M line in the 31570Sstevel@tonic-gatesendmail.cf file). The "host" will be the hostname passed to 31580Sstevel@tonic-gatethat mailer. In domain-based matches (that is, those with leading 31590Sstevel@tonic-gatedots) the "%1" may be used to interpolate the wildcarded part of 31600Sstevel@tonic-gatethe host name. For example, the first line above sends everything 31610Sstevel@tonic-gateaddressed to "anything.my.domain" to that same host name, but using 31620Sstevel@tonic-gatethe (presumably experimental) xnet mailer. 31630Sstevel@tonic-gate 31640Sstevel@tonic-gateIn some cases you may want to temporarily turn off MX records, 31650Sstevel@tonic-gateparticularly on gateways. For example, you may want to MX 31660Sstevel@tonic-gateeverything in a domain to one machine that then forwards it 31670Sstevel@tonic-gatedirectly. To do this, you might use the DNS configuration: 31680Sstevel@tonic-gate 31690Sstevel@tonic-gate *.domain. IN MX 0 relay.machine 31700Sstevel@tonic-gate 31710Sstevel@tonic-gateand on relay.machine use the mailertable: 31720Sstevel@tonic-gate 31730Sstevel@tonic-gate .domain smtp:[gateway.domain] 31740Sstevel@tonic-gate 31750Sstevel@tonic-gateThe [square brackets] turn off MX records for this host only. 31760Sstevel@tonic-gateIf you didn't do this, the mailertable would use the MX record 31770Sstevel@tonic-gateagain, which would give you an MX loop. Note that the use of 31780Sstevel@tonic-gatewildcard MX records is almost always a bad idea. Please avoid 31790Sstevel@tonic-gateusing them if possible. 31800Sstevel@tonic-gate 31810Sstevel@tonic-gate 31820Sstevel@tonic-gate+--------------------------------+ 31830Sstevel@tonic-gate| USING USERDB TO MAP FULL NAMES | 31840Sstevel@tonic-gate+--------------------------------+ 31850Sstevel@tonic-gate 31860Sstevel@tonic-gateThe user database was not originally intended for mapping full names 31870Sstevel@tonic-gateto login names (e.g., Eric.Allman => eric), but some people are using 31880Sstevel@tonic-gateit that way. (it is recommended that you set up aliases for this 31890Sstevel@tonic-gatepurpose instead -- since you can specify multiple alias files, this 31900Sstevel@tonic-gateis fairly easy.) The intent was to locate the default maildrop at 31910Sstevel@tonic-gatea site, but allow you to override this by sending to a specific host. 31920Sstevel@tonic-gate 31930Sstevel@tonic-gateIf you decide to set up the user database in this fashion, it is 31940Sstevel@tonic-gateimperative that you not use FEATURE(`stickyhost') -- otherwise, 31950Sstevel@tonic-gatee-mail sent to Full.Name@local.host.name will be rejected. 31960Sstevel@tonic-gate 31970Sstevel@tonic-gateTo build the internal form of the user database, use: 31980Sstevel@tonic-gate 31990Sstevel@tonic-gate makemap btree /etc/mail/userdb < /etc/mail/userdb.txt 32000Sstevel@tonic-gate 32010Sstevel@tonic-gateAs a general rule, it is an extremely bad idea to using full names 32020Sstevel@tonic-gateas e-mail addresses, since they are not in any sense unique. For 32030Sstevel@tonic-gateexample, the UNIX software-development community has at least two 32040Sstevel@tonic-gatewell-known Peter Deutsches, and at one time Bell Labs had two 32050Sstevel@tonic-gateStephen R. Bournes with offices along the same hallway. Which one 32060Sstevel@tonic-gatewill be forced to suffer the indignity of being Stephen_R_Bourne_2? 32070Sstevel@tonic-gateThe less famous of the two, or the one that was hired later? 32080Sstevel@tonic-gate 32090Sstevel@tonic-gateFinger should handle full names (and be fuzzy). Mail should use 32100Sstevel@tonic-gatehandles, and not be fuzzy. 32110Sstevel@tonic-gate 32120Sstevel@tonic-gate 32130Sstevel@tonic-gate+--------------------------------+ 32140Sstevel@tonic-gate| MISCELLANEOUS SPECIAL FEATURES | 32150Sstevel@tonic-gate+--------------------------------+ 32160Sstevel@tonic-gate 32170Sstevel@tonic-gatePlussed users 32180Sstevel@tonic-gate Sometimes it is convenient to merge configuration on a 32190Sstevel@tonic-gate centralized mail machine, for example, to forward all 32200Sstevel@tonic-gate root mail to a mail server. In this case it might be 32210Sstevel@tonic-gate useful to be able to treat the root addresses as a class 32220Sstevel@tonic-gate of addresses with subtle differences. You can do this 32230Sstevel@tonic-gate using plussed users. For example, a client might include 32240Sstevel@tonic-gate the alias: 32250Sstevel@tonic-gate 32260Sstevel@tonic-gate root: root+client1@server 32270Sstevel@tonic-gate 32280Sstevel@tonic-gate On the server, this will match an alias for "root+client1". 32290Sstevel@tonic-gate If that is not found, the alias "root+*" will be tried, 32300Sstevel@tonic-gate then "root". 32310Sstevel@tonic-gate 32320Sstevel@tonic-gate 32330Sstevel@tonic-gate+----------------+ 32340Sstevel@tonic-gate| SECURITY NOTES | 32350Sstevel@tonic-gate+----------------+ 32360Sstevel@tonic-gate 32370Sstevel@tonic-gateA lot of sendmail security comes down to you. Sendmail 8 is much 32380Sstevel@tonic-gatemore careful about checking for security problems than previous 32390Sstevel@tonic-gateversions, but there are some things that you still need to watch 32400Sstevel@tonic-gatefor. In particular: 32410Sstevel@tonic-gate 32420Sstevel@tonic-gate* Make sure the aliases file is not writable except by trusted 32430Sstevel@tonic-gate system personnel. This includes both the text and database 32440Sstevel@tonic-gate version. 32450Sstevel@tonic-gate 32460Sstevel@tonic-gate* Make sure that other files that sendmail reads, such as the 32470Sstevel@tonic-gate mailertable, are only writable by trusted system personnel. 32480Sstevel@tonic-gate 32490Sstevel@tonic-gate* The queue directory should not be world writable PARTICULARLY 32500Sstevel@tonic-gate if your system allows "file giveaways" (that is, if a non-root 32510Sstevel@tonic-gate user can chown any file they own to any other user). 32520Sstevel@tonic-gate 32530Sstevel@tonic-gate* If your system allows file giveaways, DO NOT create a publically 32540Sstevel@tonic-gate writable directory for forward files. This will allow anyone 32550Sstevel@tonic-gate to steal anyone else's e-mail. Instead, create a script that 32560Sstevel@tonic-gate copies the .forward file from users' home directories once a 32570Sstevel@tonic-gate night (if you want the non-NFS-mounted forward directory). 32580Sstevel@tonic-gate 32590Sstevel@tonic-gate* If your system allows file giveaways, you'll find that 32600Sstevel@tonic-gate sendmail is much less trusting of :include: files -- in 32610Sstevel@tonic-gate particular, you'll have to have /SENDMAIL/ANY/SHELL/ in 32620Sstevel@tonic-gate /etc/shells before they will be trusted (that is, before 32630Sstevel@tonic-gate files and programs listed in them will be honored). 32640Sstevel@tonic-gate 32650Sstevel@tonic-gateIn general, file giveaways are a mistake -- if you can turn them 32660Sstevel@tonic-gateoff, do so. 32670Sstevel@tonic-gate 32680Sstevel@tonic-gate 32690Sstevel@tonic-gate+--------------------------------+ 32700Sstevel@tonic-gate| TWEAKING CONFIGURATION OPTIONS | 32710Sstevel@tonic-gate+--------------------------------+ 32720Sstevel@tonic-gate 32730Sstevel@tonic-gateThere are a large number of configuration options that don't normally 32740Sstevel@tonic-gateneed to be changed. However, if you feel you need to tweak them, 32750Sstevel@tonic-gateyou can define the following M4 variables. Note that some of these 32760Sstevel@tonic-gatevariables require formats that are defined in RFC 2821 or RFC 2822. 32770Sstevel@tonic-gateBefore changing them you need to make sure you do not violate those 32780Sstevel@tonic-gate(and other relevant) RFCs. 32790Sstevel@tonic-gate 32800Sstevel@tonic-gateThis list is shown in four columns: the name you define, the default 32810Sstevel@tonic-gatevalue for that definition, the option or macro that is affected 32820Sstevel@tonic-gate(either Ox for an option or Dx for a macro), and a brief description. 32830Sstevel@tonic-gate 32840Sstevel@tonic-gateSome options are likely to be deprecated in future versions -- that is, 32850Sstevel@tonic-gatethe option is only included to provide back-compatibility. These are 32860Sstevel@tonic-gatemarked with "*". 32870Sstevel@tonic-gate 32880Sstevel@tonic-gateRemember that these options are M4 variables, and hence may need to 32890Sstevel@tonic-gatebe quoted. In particular, arguments with commas will usually have to 32900Sstevel@tonic-gatebe ``double quoted, like this phrase'' to avoid having the comma 32910Sstevel@tonic-gateconfuse things. This is common for alias file definitions and for 32920Sstevel@tonic-gatethe read timeout. 32930Sstevel@tonic-gate 32940Sstevel@tonic-gateM4 Variable Name Configuration [Default] & Description 32950Sstevel@tonic-gate================ ============= ======================= 32960Sstevel@tonic-gateconfMAILER_NAME $n macro [MAILER-DAEMON] The sender name used 32970Sstevel@tonic-gate for internally generated outgoing 32980Sstevel@tonic-gate messages. 32990Sstevel@tonic-gateconfDOMAIN_NAME $j macro If defined, sets $j. This should 33000Sstevel@tonic-gate only be done if your system cannot 33010Sstevel@tonic-gate determine your local domain name, 33020Sstevel@tonic-gate and then it should be set to 33030Sstevel@tonic-gate $w.Foo.COM, where Foo.COM is your 33040Sstevel@tonic-gate domain name. 33050Sstevel@tonic-gateconfCF_VERSION $Z macro If defined, this is appended to the 33060Sstevel@tonic-gate configuration version name. 33070Sstevel@tonic-gateconfLDAP_CLUSTER ${sendmailMTACluster} macro 33080Sstevel@tonic-gate If defined, this is the LDAP 33090Sstevel@tonic-gate cluster to use for LDAP searches 33100Sstevel@tonic-gate as described above in ``USING LDAP 33110Sstevel@tonic-gate FOR ALIASES, MAPS, AND CLASSES''. 33120Sstevel@tonic-gateconfFROM_HEADER From: [$?x$x <$g>$|$g$.] The format of an 33130Sstevel@tonic-gate internally generated From: address. 33140Sstevel@tonic-gateconfRECEIVED_HEADER Received: 33150Sstevel@tonic-gate [$?sfrom $s $.$?_($?s$|from $.$_) 33160Sstevel@tonic-gate $.$?{auth_type}(authenticated) 33170Sstevel@tonic-gate $.by $j ($v/$Z)$?r with $r$. id $i$?u 33180Sstevel@tonic-gate for $u; $|; 33190Sstevel@tonic-gate $.$b] 33200Sstevel@tonic-gate The format of the Received: header 33210Sstevel@tonic-gate in messages passed through this host. 33220Sstevel@tonic-gate It is unwise to try to change this. 33230Sstevel@tonic-gateconfMESSAGEID_HEADER Message-Id: [<$t.$i@$j>] The format of an 33240Sstevel@tonic-gate internally generated Message-Id: 33250Sstevel@tonic-gate header. 33260Sstevel@tonic-gateconfCW_FILE Fw class [/etc/mail/local-host-names] Name 33270Sstevel@tonic-gate of file used to get the local 33280Sstevel@tonic-gate additions to class {w} (local host 33290Sstevel@tonic-gate names). 33300Sstevel@tonic-gateconfCT_FILE Ft class [/etc/mail/trusted-users] Name of 33310Sstevel@tonic-gate file used to get the local additions 33320Sstevel@tonic-gate to class {t} (trusted users). 33330Sstevel@tonic-gateconfCR_FILE FR class [/etc/mail/relay-domains] Name of 33340Sstevel@tonic-gate file used to get the local additions 33350Sstevel@tonic-gate to class {R} (hosts allowed to relay). 33360Sstevel@tonic-gateconfTRUSTED_USERS Ct class [no default] Names of users to add to 33370Sstevel@tonic-gate the list of trusted users. This list 33380Sstevel@tonic-gate always includes root, uucp, and daemon. 33390Sstevel@tonic-gate See also FEATURE(`use_ct_file'). 33400Sstevel@tonic-gateconfTRUSTED_USER TrustedUser [no default] Trusted user for file 33410Sstevel@tonic-gate ownership and starting the daemon. 33420Sstevel@tonic-gate Not to be confused with 33430Sstevel@tonic-gate confTRUSTED_USERS (see above). 33440Sstevel@tonic-gateconfSMTP_MAILER - [esmtp] The mailer name used when 33450Sstevel@tonic-gate SMTP connectivity is required. 33460Sstevel@tonic-gate One of "smtp", "smtp8", 33470Sstevel@tonic-gate "esmtp", or "dsmtp". 33480Sstevel@tonic-gateconfUUCP_MAILER - [uucp-old] The mailer to be used by 33490Sstevel@tonic-gate default for bang-format recipient 33500Sstevel@tonic-gate addresses. See also discussion of 33510Sstevel@tonic-gate class {U}, class {Y}, and class {Z} 33520Sstevel@tonic-gate in the MAILER(`uucp') section. 33530Sstevel@tonic-gateconfLOCAL_MAILER - [local] The mailer name used when 33540Sstevel@tonic-gate local connectivity is required. 33550Sstevel@tonic-gate Almost always "local". 33560Sstevel@tonic-gateconfRELAY_MAILER - [relay] The default mailer name used 33570Sstevel@tonic-gate for relaying any mail (e.g., to a 33580Sstevel@tonic-gate BITNET_RELAY, a SMART_HOST, or 33590Sstevel@tonic-gate whatever). This can reasonably be 33600Sstevel@tonic-gate "uucp-new" if you are on a 33610Sstevel@tonic-gate UUCP-connected site. 33620Sstevel@tonic-gateconfSEVEN_BIT_INPUT SevenBitInput [False] Force input to seven bits? 33630Sstevel@tonic-gateconfEIGHT_BIT_HANDLING EightBitMode [pass8] 8-bit data handling 33640Sstevel@tonic-gateconfALIAS_WAIT AliasWait [10m] Time to wait for alias file 33650Sstevel@tonic-gate rebuild until you get bored and 33660Sstevel@tonic-gate decide that the apparently pending 33670Sstevel@tonic-gate rebuild failed. 33680Sstevel@tonic-gateconfMIN_FREE_BLOCKS MinFreeBlocks [100] Minimum number of free blocks on 33690Sstevel@tonic-gate queue filesystem to accept SMTP mail. 33700Sstevel@tonic-gate (Prior to 8.7 this was minfree/maxsize, 33710Sstevel@tonic-gate where minfree was the number of free 33720Sstevel@tonic-gate blocks and maxsize was the maximum 33730Sstevel@tonic-gate message size. Use confMAX_MESSAGE_SIZE 33740Sstevel@tonic-gate for the second value now.) 33750Sstevel@tonic-gateconfMAX_MESSAGE_SIZE MaxMessageSize [infinite] The maximum size of messages 33760Sstevel@tonic-gate that will be accepted (in bytes). 33770Sstevel@tonic-gateconfBLANK_SUB BlankSub [.] Blank (space) substitution 33780Sstevel@tonic-gate character. 33790Sstevel@tonic-gateconfCON_EXPENSIVE HoldExpensive [False] Avoid connecting immediately 33800Sstevel@tonic-gate to mailers marked expensive. 33810Sstevel@tonic-gateconfCHECKPOINT_INTERVAL CheckpointInterval 33820Sstevel@tonic-gate [10] Checkpoint queue files every N 33830Sstevel@tonic-gate recipients. 33840Sstevel@tonic-gateconfDELIVERY_MODE DeliveryMode [background] Default delivery mode. 33850Sstevel@tonic-gateconfERROR_MODE ErrorMode [print] Error message mode. 33860Sstevel@tonic-gateconfERROR_MESSAGE ErrorHeader [undefined] Error message header/file. 33870Sstevel@tonic-gateconfSAVE_FROM_LINES SaveFromLine Save extra leading From_ lines. 33880Sstevel@tonic-gateconfTEMP_FILE_MODE TempFileMode [0600] Temporary file mode. 33890Sstevel@tonic-gateconfMATCH_GECOS MatchGECOS [False] Match GECOS field. 33900Sstevel@tonic-gateconfMAX_HOP MaxHopCount [25] Maximum hop count. 33910Sstevel@tonic-gateconfIGNORE_DOTS* IgnoreDots [False; always False in -bs or -bd 33920Sstevel@tonic-gate mode] Ignore dot as terminator for 33930Sstevel@tonic-gate incoming messages? 33940Sstevel@tonic-gateconfBIND_OPTS ResolverOptions [undefined] Default options for DNS 33950Sstevel@tonic-gate resolver. 33960Sstevel@tonic-gateconfMIME_FORMAT_ERRORS* SendMimeErrors [True] Send error messages as MIME- 33970Sstevel@tonic-gate encapsulated messages per RFC 1344. 33980Sstevel@tonic-gateconfFORWARD_PATH ForwardPath [$z/.forward.$w:$z/.forward] 33990Sstevel@tonic-gate The colon-separated list of places to 34000Sstevel@tonic-gate search for .forward files. N.B.: see 34010Sstevel@tonic-gate the Security Notes section. 34020Sstevel@tonic-gateconfMCI_CACHE_SIZE ConnectionCacheSize 34030Sstevel@tonic-gate [2] Size of open connection cache. 34040Sstevel@tonic-gateconfMCI_CACHE_TIMEOUT ConnectionCacheTimeout 34050Sstevel@tonic-gate [5m] Open connection cache timeout. 34060Sstevel@tonic-gateconfHOST_STATUS_DIRECTORY HostStatusDirectory 34070Sstevel@tonic-gate [undefined] If set, host status is kept 34080Sstevel@tonic-gate on disk between sendmail runs in the 34090Sstevel@tonic-gate named directory tree. This need not be 34100Sstevel@tonic-gate a full pathname, in which case it is 34110Sstevel@tonic-gate interpreted relative to the queue 34120Sstevel@tonic-gate directory. 34130Sstevel@tonic-gateconfSINGLE_THREAD_DELIVERY SingleThreadDelivery 34140Sstevel@tonic-gate [False] If this option and the 34150Sstevel@tonic-gate HostStatusDirectory option are both 34160Sstevel@tonic-gate set, single thread deliveries to other 34170Sstevel@tonic-gate hosts. That is, don't allow any two 34180Sstevel@tonic-gate sendmails on this host to connect 34190Sstevel@tonic-gate simultaneously to any other single 34200Sstevel@tonic-gate host. This can slow down delivery in 34210Sstevel@tonic-gate some cases, in particular since a 34220Sstevel@tonic-gate cached but otherwise idle connection 34230Sstevel@tonic-gate to a host will prevent other sendmails 34240Sstevel@tonic-gate from connecting to the other host. 34250Sstevel@tonic-gateconfUSE_ERRORS_TO* UseErrorsTo [False] Use the Errors-To: header to 34260Sstevel@tonic-gate deliver error messages. This should 34270Sstevel@tonic-gate not be necessary because of general 34280Sstevel@tonic-gate acceptance of the envelope/header 34290Sstevel@tonic-gate distinction. 34300Sstevel@tonic-gateconfLOG_LEVEL LogLevel [9] Log level. 34310Sstevel@tonic-gateconfME_TOO MeToo [True] Include sender in group 34320Sstevel@tonic-gate expansions. This option is 34330Sstevel@tonic-gate deprecated and will be removed from 34340Sstevel@tonic-gate a future version. 34350Sstevel@tonic-gateconfCHECK_ALIASES CheckAliases [False] Check RHS of aliases when 34360Sstevel@tonic-gate running newaliases. Since this does 34370Sstevel@tonic-gate DNS lookups on every address, it can 34380Sstevel@tonic-gate slow down the alias rebuild process 34390Sstevel@tonic-gate considerably on large alias files. 34400Sstevel@tonic-gateconfOLD_STYLE_HEADERS* OldStyleHeaders [True] Assume that headers without 34410Sstevel@tonic-gate special chars are old style. 34420Sstevel@tonic-gateconfPRIVACY_FLAGS PrivacyOptions [authwarnings] Privacy flags. 34430Sstevel@tonic-gateconfCOPY_ERRORS_TO PostmasterCopy [undefined] Address for additional 34440Sstevel@tonic-gate copies of all error messages. 34450Sstevel@tonic-gateconfQUEUE_FACTOR QueueFactor [600000] Slope of queue-only function. 34460Sstevel@tonic-gateconfQUEUE_FILE_MODE QueueFileMode [undefined] Default permissions for 34470Sstevel@tonic-gate queue files (octal). If not set, 34480Sstevel@tonic-gate sendmail uses 0600 unless its real 34490Sstevel@tonic-gate and effective uid are different in 34500Sstevel@tonic-gate which case it uses 0644. 34510Sstevel@tonic-gateconfDONT_PRUNE_ROUTES DontPruneRoutes [False] Don't prune down route-addr 34520Sstevel@tonic-gate syntax addresses to the minimum 34530Sstevel@tonic-gate possible. 34540Sstevel@tonic-gateconfSAFE_QUEUE* SuperSafe [True] Commit all messages to disk 34550Sstevel@tonic-gate before forking. 34560Sstevel@tonic-gateconfTO_INITIAL Timeout.initial [5m] The timeout waiting for a response 34570Sstevel@tonic-gate on the initial connect. 34580Sstevel@tonic-gateconfTO_CONNECT Timeout.connect [0] The timeout waiting for an initial 34590Sstevel@tonic-gate connect() to complete. This can only 34600Sstevel@tonic-gate shorten connection timeouts; the kernel 34610Sstevel@tonic-gate silently enforces an absolute maximum 34620Sstevel@tonic-gate (which varies depending on the system). 34630Sstevel@tonic-gateconfTO_ICONNECT Timeout.iconnect 34640Sstevel@tonic-gate [undefined] Like Timeout.connect, but 34650Sstevel@tonic-gate applies only to the very first attempt 34660Sstevel@tonic-gate to connect to a host in a message. 34670Sstevel@tonic-gate This allows a single very fast pass 34680Sstevel@tonic-gate followed by more careful delivery 34690Sstevel@tonic-gate attempts in the future. 34700Sstevel@tonic-gateconfTO_ACONNECT Timeout.aconnect 34710Sstevel@tonic-gate [0] The overall timeout waiting for 34720Sstevel@tonic-gate all connection for a single delivery 34730Sstevel@tonic-gate attempt to succeed. If 0, no overall 34740Sstevel@tonic-gate limit is applied. 34750Sstevel@tonic-gateconfTO_HELO Timeout.helo [5m] The timeout waiting for a response 34760Sstevel@tonic-gate to a HELO or EHLO command. 34770Sstevel@tonic-gateconfTO_MAIL Timeout.mail [10m] The timeout waiting for a 34780Sstevel@tonic-gate response to the MAIL command. 34790Sstevel@tonic-gateconfTO_RCPT Timeout.rcpt [1h] The timeout waiting for a response 34800Sstevel@tonic-gate to the RCPT command. 34810Sstevel@tonic-gateconfTO_DATAINIT Timeout.datainit 34820Sstevel@tonic-gate [5m] The timeout waiting for a 354 34830Sstevel@tonic-gate response from the DATA command. 34840Sstevel@tonic-gateconfTO_DATABLOCK Timeout.datablock 34850Sstevel@tonic-gate [1h] The timeout waiting for a block 34860Sstevel@tonic-gate during DATA phase. 34870Sstevel@tonic-gateconfTO_DATAFINAL Timeout.datafinal 34880Sstevel@tonic-gate [1h] The timeout waiting for a response 34890Sstevel@tonic-gate to the final "." that terminates a 34900Sstevel@tonic-gate message. 34910Sstevel@tonic-gateconfTO_RSET Timeout.rset [5m] The timeout waiting for a response 34920Sstevel@tonic-gate to the RSET command. 34930Sstevel@tonic-gateconfTO_QUIT Timeout.quit [2m] The timeout waiting for a response 34940Sstevel@tonic-gate to the QUIT command. 34950Sstevel@tonic-gateconfTO_MISC Timeout.misc [2m] The timeout waiting for a response 34960Sstevel@tonic-gate to other SMTP commands. 34970Sstevel@tonic-gateconfTO_COMMAND Timeout.command [1h] In server SMTP, the timeout 34980Sstevel@tonic-gate waiting for a command to be issued. 34990Sstevel@tonic-gateconfTO_IDENT Timeout.ident [5s] The timeout waiting for a 35000Sstevel@tonic-gate response to an IDENT query. 35010Sstevel@tonic-gateconfTO_FILEOPEN Timeout.fileopen 35020Sstevel@tonic-gate [60s] The timeout waiting for a file 35030Sstevel@tonic-gate (e.g., :include: file) to be opened. 35040Sstevel@tonic-gateconfTO_LHLO Timeout.lhlo [2m] The timeout waiting for a response 35050Sstevel@tonic-gate to an LMTP LHLO command. 35060Sstevel@tonic-gateconfTO_STARTTLS Timeout.starttls 35070Sstevel@tonic-gate [1h] The timeout waiting for a 35080Sstevel@tonic-gate response to an SMTP STARTTLS command. 35090Sstevel@tonic-gateconfTO_CONTROL Timeout.control 35100Sstevel@tonic-gate [2m] The timeout for a complete 35110Sstevel@tonic-gate control socket transaction to complete. 35120Sstevel@tonic-gateconfTO_QUEUERETURN Timeout.queuereturn 35130Sstevel@tonic-gate [5d] The timeout before a message is 35140Sstevel@tonic-gate returned as undeliverable. 35150Sstevel@tonic-gateconfTO_QUEUERETURN_NORMAL 35160Sstevel@tonic-gate Timeout.queuereturn.normal 35170Sstevel@tonic-gate [undefined] As above, for normal 35180Sstevel@tonic-gate priority messages. 35190Sstevel@tonic-gateconfTO_QUEUERETURN_URGENT 35200Sstevel@tonic-gate Timeout.queuereturn.urgent 35210Sstevel@tonic-gate [undefined] As above, for urgent 35220Sstevel@tonic-gate priority messages. 35230Sstevel@tonic-gateconfTO_QUEUERETURN_NONURGENT 35240Sstevel@tonic-gate Timeout.queuereturn.non-urgent 35250Sstevel@tonic-gate [undefined] As above, for non-urgent 35260Sstevel@tonic-gate (low) priority messages. 35270Sstevel@tonic-gateconfTO_QUEUERETURN_DSN 35280Sstevel@tonic-gate Timeout.queuereturn.dsn 35290Sstevel@tonic-gate [undefined] As above, for delivery 35300Sstevel@tonic-gate status notification messages. 35310Sstevel@tonic-gateconfTO_QUEUEWARN Timeout.queuewarn 35320Sstevel@tonic-gate [4h] The timeout before a warning 35330Sstevel@tonic-gate message is sent to the sender telling 35340Sstevel@tonic-gate them that the message has been 35350Sstevel@tonic-gate deferred. 35360Sstevel@tonic-gateconfTO_QUEUEWARN_NORMAL Timeout.queuewarn.normal 35370Sstevel@tonic-gate [undefined] As above, for normal 35380Sstevel@tonic-gate priority messages. 35390Sstevel@tonic-gateconfTO_QUEUEWARN_URGENT Timeout.queuewarn.urgent 35400Sstevel@tonic-gate [undefined] As above, for urgent 35410Sstevel@tonic-gate priority messages. 35420Sstevel@tonic-gateconfTO_QUEUEWARN_NONURGENT 35430Sstevel@tonic-gate Timeout.queuewarn.non-urgent 35440Sstevel@tonic-gate [undefined] As above, for non-urgent 35450Sstevel@tonic-gate (low) priority messages. 35460Sstevel@tonic-gateconfTO_QUEUEWARN_DSN 35470Sstevel@tonic-gate Timeout.queuewarn.dsn 35480Sstevel@tonic-gate [undefined] As above, for delivery 35490Sstevel@tonic-gate status notification messages. 35500Sstevel@tonic-gateconfTO_HOSTSTATUS Timeout.hoststatus 35510Sstevel@tonic-gate [30m] How long information about host 35520Sstevel@tonic-gate statuses will be maintained before it 35530Sstevel@tonic-gate is considered stale and the host should 35540Sstevel@tonic-gate be retried. This applies both within 35550Sstevel@tonic-gate a single queue run and to persistent 35560Sstevel@tonic-gate information (see below). 35570Sstevel@tonic-gateconfTO_RESOLVER_RETRANS Timeout.resolver.retrans 35580Sstevel@tonic-gate [varies] Sets the resolver's 35590Sstevel@tonic-gate retransmission time interval (in 35600Sstevel@tonic-gate seconds). Sets both 35610Sstevel@tonic-gate Timeout.resolver.retrans.first and 35620Sstevel@tonic-gate Timeout.resolver.retrans.normal. 35630Sstevel@tonic-gateconfTO_RESOLVER_RETRANS_FIRST Timeout.resolver.retrans.first 35640Sstevel@tonic-gate [varies] Sets the resolver's 35650Sstevel@tonic-gate retransmission time interval (in 35660Sstevel@tonic-gate seconds) for the first attempt to 35670Sstevel@tonic-gate deliver a message. 35680Sstevel@tonic-gateconfTO_RESOLVER_RETRANS_NORMAL Timeout.resolver.retrans.normal 35690Sstevel@tonic-gate [varies] Sets the resolver's 35700Sstevel@tonic-gate retransmission time interval (in 35710Sstevel@tonic-gate seconds) for all resolver lookups 35720Sstevel@tonic-gate except the first delivery attempt. 35730Sstevel@tonic-gateconfTO_RESOLVER_RETRY Timeout.resolver.retry 35740Sstevel@tonic-gate [varies] Sets the number of times 35750Sstevel@tonic-gate to retransmit a resolver query. 35760Sstevel@tonic-gate Sets both 35770Sstevel@tonic-gate Timeout.resolver.retry.first and 35780Sstevel@tonic-gate Timeout.resolver.retry.normal. 35790Sstevel@tonic-gateconfTO_RESOLVER_RETRY_FIRST Timeout.resolver.retry.first 35800Sstevel@tonic-gate [varies] Sets the number of times 35810Sstevel@tonic-gate to retransmit a resolver query for 35820Sstevel@tonic-gate the first attempt to deliver a 35830Sstevel@tonic-gate message. 35840Sstevel@tonic-gateconfTO_RESOLVER_RETRY_NORMAL Timeout.resolver.retry.normal 35850Sstevel@tonic-gate [varies] Sets the number of times 35860Sstevel@tonic-gate to retransmit a resolver query for 35870Sstevel@tonic-gate all resolver lookups except the 35880Sstevel@tonic-gate first delivery attempt. 35890Sstevel@tonic-gateconfTIME_ZONE TimeZoneSpec [USE_SYSTEM] Time zone info -- can be 35900Sstevel@tonic-gate USE_SYSTEM to use the system's idea, 35910Sstevel@tonic-gate USE_TZ to use the user's TZ envariable, 35920Sstevel@tonic-gate or something else to force that value. 35930Sstevel@tonic-gateconfDEF_USER_ID DefaultUser [1:1] Default user id. 35940Sstevel@tonic-gateconfUSERDB_SPEC UserDatabaseSpec 35950Sstevel@tonic-gate [undefined] User database 35960Sstevel@tonic-gate specification. 35970Sstevel@tonic-gateconfFALLBACK_MX FallbackMXhost [undefined] Fallback MX host. 35980Sstevel@tonic-gateconfFALLBACK_SMARTHOST FallbackSmartHost 35990Sstevel@tonic-gate [undefined] Fallback smart host. 36000Sstevel@tonic-gateconfTRY_NULL_MX_LIST TryNullMXList [False] If this host is the best MX 36010Sstevel@tonic-gate for a host and other arrangements 36020Sstevel@tonic-gate haven't been made, try connecting 36030Sstevel@tonic-gate to the host directly; normally this 36040Sstevel@tonic-gate would be a config error. 36050Sstevel@tonic-gateconfQUEUE_LA QueueLA [varies] Load average at which 36060Sstevel@tonic-gate queue-only function kicks in. 36070Sstevel@tonic-gate Default values is (8 * numproc) 36080Sstevel@tonic-gate where numproc is the number of 36090Sstevel@tonic-gate processors online (if that can be 36100Sstevel@tonic-gate determined). 36110Sstevel@tonic-gateconfREFUSE_LA RefuseLA [varies] Load average at which 36120Sstevel@tonic-gate incoming SMTP connections are 36130Sstevel@tonic-gate refused. Default values is (12 * 36140Sstevel@tonic-gate numproc) where numproc is the 36150Sstevel@tonic-gate number of processors online (if 36160Sstevel@tonic-gate that can be determined). 36170Sstevel@tonic-gateconfREJECT_LOG_INTERVAL RejectLogInterval [3h] Log interval when 36180Sstevel@tonic-gate refusing connections for this long. 36190Sstevel@tonic-gateconfDELAY_LA DelayLA [0] Load average at which sendmail 36200Sstevel@tonic-gate will sleep for one second on most 36210Sstevel@tonic-gate SMTP commands and before accepting 36220Sstevel@tonic-gate connections. 0 means no limit. 36230Sstevel@tonic-gateconfMAX_ALIAS_RECURSION MaxAliasRecursion 36240Sstevel@tonic-gate [10] Maximum depth of alias recursion. 36250Sstevel@tonic-gateconfMAX_DAEMON_CHILDREN MaxDaemonChildren 36260Sstevel@tonic-gate [undefined] The maximum number of 36270Sstevel@tonic-gate children the daemon will permit. After 36280Sstevel@tonic-gate this number, connections will be 36290Sstevel@tonic-gate rejected. If not set or <= 0, there is 36300Sstevel@tonic-gate no limit. 36310Sstevel@tonic-gateconfMAX_HEADERS_LENGTH MaxHeadersLength 36320Sstevel@tonic-gate [32768] Maximum length of the sum 36330Sstevel@tonic-gate of all headers. 36340Sstevel@tonic-gateconfMAX_MIME_HEADER_LENGTH MaxMimeHeaderLength 36350Sstevel@tonic-gate [undefined] Maximum length of 36360Sstevel@tonic-gate certain MIME header field values. 36370Sstevel@tonic-gateconfCONNECTION_RATE_THROTTLE ConnectionRateThrottle 36380Sstevel@tonic-gate [undefined] The maximum number of 36390Sstevel@tonic-gate connections permitted per second per 36400Sstevel@tonic-gate daemon. After this many connections 36410Sstevel@tonic-gate are accepted, further connections 36420Sstevel@tonic-gate will be delayed. If not set or <= 0, 36430Sstevel@tonic-gate there is no limit. 36440Sstevel@tonic-gateconfCONNECTION_RATE_WINDOW_SIZE ConnectionRateWindowSize 36450Sstevel@tonic-gate [60s] Define the length of the 36460Sstevel@tonic-gate interval for which the number of 36470Sstevel@tonic-gate incoming connections is maintained. 36480Sstevel@tonic-gateconfWORK_RECIPIENT_FACTOR 36490Sstevel@tonic-gate RecipientFactor [30000] Cost of each recipient. 36500Sstevel@tonic-gateconfSEPARATE_PROC ForkEachJob [False] Run all deliveries in a 36510Sstevel@tonic-gate separate process. 36520Sstevel@tonic-gateconfWORK_CLASS_FACTOR ClassFactor [1800] Priority multiplier for class. 36530Sstevel@tonic-gateconfWORK_TIME_FACTOR RetryFactor [90000] Cost of each delivery attempt. 36540Sstevel@tonic-gateconfQUEUE_SORT_ORDER QueueSortOrder [Priority] Queue sort algorithm: 36550Sstevel@tonic-gate Priority, Host, Filename, Random, 36560Sstevel@tonic-gate Modification, or Time. 36570Sstevel@tonic-gateconfMIN_QUEUE_AGE MinQueueAge [0] The minimum amount of time a job 36580Sstevel@tonic-gate must sit in the queue between queue 36590Sstevel@tonic-gate runs. This allows you to set the 36600Sstevel@tonic-gate queue run interval low for better 36610Sstevel@tonic-gate responsiveness without trying all 36620Sstevel@tonic-gate jobs in each run. 36630Sstevel@tonic-gateconfDEF_CHAR_SET DefaultCharSet [unknown-8bit] When converting 36640Sstevel@tonic-gate unlabeled 8 bit input to MIME, the 36650Sstevel@tonic-gate character set to use by default. 36660Sstevel@tonic-gateconfSERVICE_SWITCH_FILE ServiceSwitchFile 36670Sstevel@tonic-gate [/etc/mail/service.switch] The file 36680Sstevel@tonic-gate to use for the service switch on 36690Sstevel@tonic-gate systems that do not have a 36700Sstevel@tonic-gate system-defined switch. 36710Sstevel@tonic-gateconfHOSTS_FILE HostsFile [/etc/hosts] The file to use when doing 36720Sstevel@tonic-gate "file" type access of hosts names. 36730Sstevel@tonic-gateconfDIAL_DELAY DialDelay [0s] If a connection fails, wait this 36740Sstevel@tonic-gate long and try again. Zero means "don't 36750Sstevel@tonic-gate retry". This is to allow "dial on 36760Sstevel@tonic-gate demand" connections to have enough time 36770Sstevel@tonic-gate to complete a connection. 36780Sstevel@tonic-gateconfNO_RCPT_ACTION NoRecipientAction 36790Sstevel@tonic-gate [none] What to do if there are no legal 36800Sstevel@tonic-gate recipient fields (To:, Cc: or Bcc:) 36810Sstevel@tonic-gate in the message. Legal values can 36820Sstevel@tonic-gate be "none" to just leave the 36830Sstevel@tonic-gate nonconforming message as is, "add-to" 36840Sstevel@tonic-gate to add a To: header with all the 36850Sstevel@tonic-gate known recipients (which may expose 36860Sstevel@tonic-gate blind recipients), "add-apparently-to" 36870Sstevel@tonic-gate to do the same but use Apparently-To: 36880Sstevel@tonic-gate instead of To: (strongly discouraged 36890Sstevel@tonic-gate in accordance with IETF standards), 36900Sstevel@tonic-gate "add-bcc" to add an empty Bcc: 36910Sstevel@tonic-gate header, or "add-to-undisclosed" to 36920Sstevel@tonic-gate add the header 36930Sstevel@tonic-gate ``To: undisclosed-recipients:;''. 36940Sstevel@tonic-gateconfSAFE_FILE_ENV SafeFileEnvironment 36950Sstevel@tonic-gate [undefined] If set, sendmail will do a 36960Sstevel@tonic-gate chroot() into this directory before 36970Sstevel@tonic-gate writing files. 36980Sstevel@tonic-gateconfCOLON_OK_IN_ADDR ColonOkInAddr [True unless Configuration Level > 6] 36990Sstevel@tonic-gate If set, colons are treated as a regular 37000Sstevel@tonic-gate character in addresses. If not set, 37010Sstevel@tonic-gate they are treated as the introducer to 37020Sstevel@tonic-gate the RFC 822 "group" syntax. Colons are 37030Sstevel@tonic-gate handled properly in route-addrs. This 37040Sstevel@tonic-gate option defaults on for V5 and lower 37050Sstevel@tonic-gate configuration files. 37060Sstevel@tonic-gateconfMAX_QUEUE_RUN_SIZE MaxQueueRunSize [0] If set, limit the maximum size of 37070Sstevel@tonic-gate any given queue run to this number of 37080Sstevel@tonic-gate entries. Essentially, this will stop 37090Sstevel@tonic-gate reading each queue directory after this 37100Sstevel@tonic-gate number of entries are reached; it does 37110Sstevel@tonic-gate _not_ pick the highest priority jobs, 37120Sstevel@tonic-gate so this should be as large as your 37130Sstevel@tonic-gate system can tolerate. If not set, there 37140Sstevel@tonic-gate is no limit. 37150Sstevel@tonic-gateconfMAX_QUEUE_CHILDREN MaxQueueChildren 37160Sstevel@tonic-gate [undefined] Limits the maximum number 37170Sstevel@tonic-gate of concurrent queue runners active. 37180Sstevel@tonic-gate This is to keep system resources used 37190Sstevel@tonic-gate within a reasonable limit. Relates to 37200Sstevel@tonic-gate Queue Groups and ForkEachJob. 37210Sstevel@tonic-gateconfMAX_RUNNERS_PER_QUEUE MaxRunnersPerQueue 37220Sstevel@tonic-gate [1] Only active when MaxQueueChildren 37230Sstevel@tonic-gate defined. Controls the maximum number 37240Sstevel@tonic-gate of queue runners (aka queue children) 37250Sstevel@tonic-gate active at the same time in a work 37260Sstevel@tonic-gate group. See also MaxQueueChildren. 37270Sstevel@tonic-gateconfDONT_EXPAND_CNAMES DontExpandCnames 37280Sstevel@tonic-gate [False] If set, $[ ... $] lookups that 37290Sstevel@tonic-gate do DNS based lookups do not expand 37300Sstevel@tonic-gate CNAME records. This currently violates 37310Sstevel@tonic-gate the published standards, but the IETF 37320Sstevel@tonic-gate seems to be moving toward legalizing 37330Sstevel@tonic-gate this. For example, if "FTP.Foo.ORG" 37340Sstevel@tonic-gate is a CNAME for "Cruft.Foo.ORG", then 37350Sstevel@tonic-gate with this option set a lookup of 37360Sstevel@tonic-gate "FTP" will return "FTP.Foo.ORG"; if 37370Sstevel@tonic-gate clear it returns "Cruft.FOO.ORG". N.B. 37380Sstevel@tonic-gate you may not see any effect until your 37390Sstevel@tonic-gate downstream neighbors stop doing CNAME 37400Sstevel@tonic-gate lookups as well. 37410Sstevel@tonic-gateconfFROM_LINE UnixFromLine [From $g $d] The From_ line used 37420Sstevel@tonic-gate when sending to files or programs. 37430Sstevel@tonic-gateconfSINGLE_LINE_FROM_HEADER SingleLineFromHeader 37440Sstevel@tonic-gate [False] From: lines that have 37450Sstevel@tonic-gate embedded newlines are unwrapped 37460Sstevel@tonic-gate onto one line. 37470Sstevel@tonic-gateconfALLOW_BOGUS_HELO AllowBogusHELO [False] Allow HELO SMTP command that 37480Sstevel@tonic-gate does not include a host name. 37490Sstevel@tonic-gateconfMUST_QUOTE_CHARS MustQuoteChars [.'] Characters to be quoted in a full 37500Sstevel@tonic-gate name phrase (@,;:\()[] are automatic). 37510Sstevel@tonic-gateconfOPERATORS OperatorChars [.:%@!^/[]+] Address operator 37520Sstevel@tonic-gate characters. 37530Sstevel@tonic-gateconfSMTP_LOGIN_MSG SmtpGreetingMessage 37540Sstevel@tonic-gate [$j Sendmail $v/$Z; $b] 37550Sstevel@tonic-gate The initial (spontaneous) SMTP 37560Sstevel@tonic-gate greeting message. The word "ESMTP" 37570Sstevel@tonic-gate will be inserted between the first and 37580Sstevel@tonic-gate second words to convince other 37590Sstevel@tonic-gate sendmails to try to speak ESMTP. 37600Sstevel@tonic-gateconfDONT_INIT_GROUPS DontInitGroups [False] If set, the initgroups(3) 37610Sstevel@tonic-gate routine will never be invoked. You 37620Sstevel@tonic-gate might want to do this if you are 37630Sstevel@tonic-gate running NIS and you have a large group 37640Sstevel@tonic-gate map, since this call does a sequential 37650Sstevel@tonic-gate scan of the map; in a large site this 37660Sstevel@tonic-gate can cause your ypserv to run 37670Sstevel@tonic-gate essentially full time. If you set 37680Sstevel@tonic-gate this, agents run on behalf of users 37690Sstevel@tonic-gate will only have their primary 37700Sstevel@tonic-gate (/etc/passwd) group permissions. 37710Sstevel@tonic-gateconfUNSAFE_GROUP_WRITES UnsafeGroupWrites 3772616Sjbeck [True] If set, group-writable 37730Sstevel@tonic-gate :include: and .forward files are 37740Sstevel@tonic-gate considered "unsafe", that is, programs 37750Sstevel@tonic-gate and files cannot be directly referenced 37760Sstevel@tonic-gate from such files. World-writable files 37770Sstevel@tonic-gate are always considered unsafe. 3778616Sjbeck Notice: this option is deprecated and 3779616Sjbeck will be removed in future versions; 3780616Sjbeck Set GroupWritableForwardFileSafe 3781616Sjbeck and GroupWritableIncludeFileSafe in 3782616Sjbeck DontBlameSendmail if required. 37830Sstevel@tonic-gateconfCONNECT_ONLY_TO ConnectOnlyTo [undefined] override connection 37840Sstevel@tonic-gate address (for testing). 37850Sstevel@tonic-gateconfCONTROL_SOCKET_NAME ControlSocketName 37860Sstevel@tonic-gate [undefined] Control socket for daemon 37870Sstevel@tonic-gate management. 37880Sstevel@tonic-gateconfDOUBLE_BOUNCE_ADDRESS DoubleBounceAddress 37890Sstevel@tonic-gate [postmaster] If an error occurs when 37900Sstevel@tonic-gate sending an error message, send that 37910Sstevel@tonic-gate "double bounce" error message to this 37920Sstevel@tonic-gate address. If it expands to an empty 37930Sstevel@tonic-gate string, double bounces are dropped. 37940Sstevel@tonic-gateconfDEAD_LETTER_DROP DeadLetterDrop [undefined] Filename to save bounce 37950Sstevel@tonic-gate messages which could not be returned 37960Sstevel@tonic-gate to the user or sent to postmaster. 37970Sstevel@tonic-gate If not set, the queue file will 37980Sstevel@tonic-gate be renamed. 37990Sstevel@tonic-gateconfRRT_IMPLIES_DSN RrtImpliesDsn [False] Return-Receipt-To: header 38000Sstevel@tonic-gate implies DSN request. 38010Sstevel@tonic-gateconfRUN_AS_USER RunAsUser [undefined] If set, become this user 38020Sstevel@tonic-gate when reading and delivering mail. 38030Sstevel@tonic-gate Causes all file reads (e.g., .forward 38040Sstevel@tonic-gate and :include: files) to be done as 38050Sstevel@tonic-gate this user. Also, all programs will 38060Sstevel@tonic-gate be run as this user, and all output 38070Sstevel@tonic-gate files will be written as this user. 38080Sstevel@tonic-gateconfMAX_RCPTS_PER_MESSAGE MaxRecipientsPerMessage 38090Sstevel@tonic-gate [infinite] If set, allow no more than 38100Sstevel@tonic-gate the specified number of recipients in 38110Sstevel@tonic-gate an SMTP envelope. Further recipients 38120Sstevel@tonic-gate receive a 452 error code (i.e., they 38130Sstevel@tonic-gate are deferred for the next delivery 38140Sstevel@tonic-gate attempt). 38150Sstevel@tonic-gateconfBAD_RCPT_THROTTLE BadRcptThrottle [infinite] If set and the specified 38160Sstevel@tonic-gate number of recipients in a single SMTP 38170Sstevel@tonic-gate transaction have been rejected, sleep 38180Sstevel@tonic-gate for one second after each subsequent 38190Sstevel@tonic-gate RCPT command in that transaction. 38200Sstevel@tonic-gateconfDONT_PROBE_INTERFACES DontProbeInterfaces 38210Sstevel@tonic-gate [False] If set, sendmail will _not_ 38220Sstevel@tonic-gate insert the names and addresses of any 38230Sstevel@tonic-gate local interfaces into class {w} 38240Sstevel@tonic-gate (list of known "equivalent" addresses). 38250Sstevel@tonic-gate If you set this, you must also include 38260Sstevel@tonic-gate some support for these addresses (e.g., 38270Sstevel@tonic-gate in a mailertable entry) -- otherwise, 38280Sstevel@tonic-gate mail to addresses in this list will 38290Sstevel@tonic-gate bounce with a configuration error. 38300Sstevel@tonic-gate If set to "loopback" (without 38310Sstevel@tonic-gate quotes), sendmail will skip 38320Sstevel@tonic-gate loopback interfaces (e.g., "lo0"). 38330Sstevel@tonic-gateconfPID_FILE PidFile [system dependent] Location of pid 38340Sstevel@tonic-gate file. 38350Sstevel@tonic-gateconfPROCESS_TITLE_PREFIX ProcessTitlePrefix 38360Sstevel@tonic-gate [undefined] Prefix string for the 38370Sstevel@tonic-gate process title shown on 'ps' listings. 38380Sstevel@tonic-gateconfDONT_BLAME_SENDMAIL DontBlameSendmail 38390Sstevel@tonic-gate [safe] Override sendmail's file 38400Sstevel@tonic-gate safety checks. This will definitely 38410Sstevel@tonic-gate compromise system security and should 38420Sstevel@tonic-gate not be used unless absolutely 38430Sstevel@tonic-gate necessary. 38440Sstevel@tonic-gateconfREJECT_MSG - [550 Access denied] The message 38450Sstevel@tonic-gate given if the access database contains 38460Sstevel@tonic-gate REJECT in the value portion. 38470Sstevel@tonic-gateconfRELAY_MSG - [550 Relaying denied] The message 38480Sstevel@tonic-gate given if an unauthorized relaying 38490Sstevel@tonic-gate attempt is rejected. 38500Sstevel@tonic-gateconfDF_BUFFER_SIZE DataFileBufferSize 38510Sstevel@tonic-gate [4096] The maximum size of a 38520Sstevel@tonic-gate memory-buffered data (df) file 38530Sstevel@tonic-gate before a disk-based file is used. 38540Sstevel@tonic-gateconfXF_BUFFER_SIZE XScriptFileBufferSize 38550Sstevel@tonic-gate [4096] The maximum size of a 38560Sstevel@tonic-gate memory-buffered transcript (xf) 38570Sstevel@tonic-gate file before a disk-based file is 38580Sstevel@tonic-gate used. 38590Sstevel@tonic-gateconfTLS_SRV_OPTIONS TLSSrvOptions If this option is 'V' no client 38600Sstevel@tonic-gate verification is performed, i.e., 38610Sstevel@tonic-gate the server doesn't ask for a 38620Sstevel@tonic-gate certificate. 38630Sstevel@tonic-gateconfLDAP_DEFAULT_SPEC LDAPDefaultSpec [undefined] Default map 38640Sstevel@tonic-gate specification for LDAP maps. The 38650Sstevel@tonic-gate value should only contain LDAP 38660Sstevel@tonic-gate specific settings such as "-h host 38670Sstevel@tonic-gate -p port -d bindDN", etc. The 38680Sstevel@tonic-gate settings will be used for all LDAP 38690Sstevel@tonic-gate maps unless they are specified in 38700Sstevel@tonic-gate the individual map specification 38710Sstevel@tonic-gate ('K' command). 38720Sstevel@tonic-gateconfCACERT_PATH CACertPath [undefined] Path to directory 38730Sstevel@tonic-gate with certs of CAs. 38740Sstevel@tonic-gateconfCACERT CACertFile [undefined] File containing one CA 38750Sstevel@tonic-gate cert. 38760Sstevel@tonic-gateconfSERVER_CERT ServerCertFile [undefined] File containing the 38770Sstevel@tonic-gate cert of the server, i.e., this cert 38780Sstevel@tonic-gate is used when sendmail acts as 38790Sstevel@tonic-gate server. 38800Sstevel@tonic-gateconfSERVER_KEY ServerKeyFile [undefined] File containing the 38810Sstevel@tonic-gate private key belonging to the server 38820Sstevel@tonic-gate cert. 38830Sstevel@tonic-gateconfCLIENT_CERT ClientCertFile [undefined] File containing the 38840Sstevel@tonic-gate cert of the client, i.e., this cert 38850Sstevel@tonic-gate is used when sendmail acts as 38860Sstevel@tonic-gate client. 38870Sstevel@tonic-gateconfCLIENT_KEY ClientKeyFile [undefined] File containing the 38880Sstevel@tonic-gate private key belonging to the client 38890Sstevel@tonic-gate cert. 38900Sstevel@tonic-gateconfCRL CRLFile [undefined] File containing certificate 38910Sstevel@tonic-gate revocation status, useful for X.509v3 38920Sstevel@tonic-gate authentication. Note that CRL requires 38930Sstevel@tonic-gate at least OpenSSL version 0.9.7. 38940Sstevel@tonic-gateconfDH_PARAMETERS DHParameters [undefined] File containing the 38950Sstevel@tonic-gate DH parameters. 38960Sstevel@tonic-gateconfRAND_FILE RandFile [undefined] File containing random 38970Sstevel@tonic-gate data (use prefix file:) or the 38980Sstevel@tonic-gate name of the UNIX socket if EGD is 38990Sstevel@tonic-gate used (use prefix egd:). STARTTLS 39000Sstevel@tonic-gate requires this option if the compile 39010Sstevel@tonic-gate flag HASURANDOM is not set (see 39020Sstevel@tonic-gate sendmail/README). 39030Sstevel@tonic-gateconfNICE_QUEUE_RUN NiceQueueRun [undefined] If set, the priority of 39040Sstevel@tonic-gate queue runners is set the given value 39050Sstevel@tonic-gate (nice(3)). 39060Sstevel@tonic-gateconfDIRECT_SUBMISSION_MODIFIERS DirectSubmissionModifiers 39070Sstevel@tonic-gate [undefined] Defines {daemon_flags} 39080Sstevel@tonic-gate for direct submissions. 3909616SjbeckconfUSE_MSP UseMSP [undefined] Use as mail submission 39100Sstevel@tonic-gate program. 39110Sstevel@tonic-gateconfDELIVER_BY_MIN DeliverByMin [0] Minimum time for Deliver By 39120Sstevel@tonic-gate SMTP Service Extension (RFC 2852). 39130Sstevel@tonic-gateconfREQUIRES_DIR_FSYNC RequiresDirfsync [true] RequiresDirfsync can 39140Sstevel@tonic-gate be used to turn off the compile time 39150Sstevel@tonic-gate flag REQUIRES_DIR_FSYNC at runtime. 39160Sstevel@tonic-gate See sendmail/README for details. 39170Sstevel@tonic-gateconfSHARED_MEMORY_KEY SharedMemoryKey [0] Key for shared memory. 3918*3544SjbeckconfSHARED_MEMORY_KEY_FILE 3919*3544Sjbeck SharedMemoryKeyFile 3920*3544Sjbeck [undefined] File where the 3921*3544Sjbeck automatically selected key for 3922*3544Sjbeck shared memory is stored. 39230Sstevel@tonic-gateconfFAST_SPLIT FastSplit [1] If set to a value greater than 39240Sstevel@tonic-gate zero, the initial MX lookups on 39250Sstevel@tonic-gate addresses is suppressed when they 39260Sstevel@tonic-gate are sorted which may result in 39270Sstevel@tonic-gate faster envelope splitting. If the 39280Sstevel@tonic-gate mail is submitted directly from the 39290Sstevel@tonic-gate command line, then the value also 39300Sstevel@tonic-gate limits the number of processes to 39310Sstevel@tonic-gate deliver the envelopes. 39320Sstevel@tonic-gateconfMAILBOX_DATABASE MailboxDatabase [pw] Type of lookup to find 39330Sstevel@tonic-gate information about local mailboxes. 39340Sstevel@tonic-gateconfDEQUOTE_OPTS - [empty] Additional options for the 39350Sstevel@tonic-gate dequote map. 3936*3544SjbeckconfMAX_NOOP_COMMANDS MaxNOOPCommands [20] Maximum number of "useless" 3937*3544Sjbeck commands before the SMTP server 3938*3544Sjbeck will slow down responding. 3939*3544SjbeckconfHELO_NAME HeloName If defined, use as name for EHLO/HELO 3940*3544Sjbeck command (instead of $j). 39410Sstevel@tonic-gateconfINPUT_MAIL_FILTERS InputMailFilters 39420Sstevel@tonic-gate A comma separated list of filters 39430Sstevel@tonic-gate which determines which filters and 39440Sstevel@tonic-gate the invocation sequence are 39450Sstevel@tonic-gate contacted for incoming SMTP 39460Sstevel@tonic-gate messages. If none are set, no 39470Sstevel@tonic-gate filters will be contacted. 39480Sstevel@tonic-gateconfMILTER_LOG_LEVEL Milter.LogLevel [9] Log level for input mail filter 39490Sstevel@tonic-gate actions, defaults to LogLevel. 39500Sstevel@tonic-gateconfMILTER_MACROS_CONNECT Milter.macros.connect 39510Sstevel@tonic-gate [j, _, {daemon_name}, {if_name}, 39520Sstevel@tonic-gate {if_addr}] Macros to transmit to 39530Sstevel@tonic-gate milters when a session connection 39540Sstevel@tonic-gate starts. 39550Sstevel@tonic-gateconfMILTER_MACROS_HELO Milter.macros.helo 39560Sstevel@tonic-gate [{tls_version}, {cipher}, 39570Sstevel@tonic-gate {cipher_bits}, {cert_subject}, 39580Sstevel@tonic-gate {cert_issuer}] Macros to transmit to 39590Sstevel@tonic-gate milters after HELO/EHLO command. 39600Sstevel@tonic-gateconfMILTER_MACROS_ENVFROM Milter.macros.envfrom 39610Sstevel@tonic-gate [i, {auth_type}, {auth_authen}, 39620Sstevel@tonic-gate {auth_ssf}, {auth_author}, 39630Sstevel@tonic-gate {mail_mailer}, {mail_host}, 39640Sstevel@tonic-gate {mail_addr}] Macros to transmit to 39650Sstevel@tonic-gate milters after MAIL FROM command. 39660Sstevel@tonic-gateconfMILTER_MACROS_ENVRCPT Milter.macros.envrcpt 39670Sstevel@tonic-gate [{rcpt_mailer}, {rcpt_host}, 39680Sstevel@tonic-gate {rcpt_addr}] Macros to transmit to 39690Sstevel@tonic-gate milters after RCPT TO command. 39700Sstevel@tonic-gateconfMILTER_MACROS_EOM Milter.macros.eom 39710Sstevel@tonic-gate [{msg_id}] Macros to transmit to 39720Sstevel@tonic-gate milters after DATA command. 39730Sstevel@tonic-gate 39740Sstevel@tonic-gate 39750Sstevel@tonic-gateSee also the description of OSTYPE for some parameters that can be 39760Sstevel@tonic-gatetweaked (generally pathnames to mailers). 39770Sstevel@tonic-gate 39780Sstevel@tonic-gateClientPortOptions and DaemonPortOptions are special cases since multiple 39790Sstevel@tonic-gateclients/daemons can be defined. This can be done via 39800Sstevel@tonic-gate 39810Sstevel@tonic-gate CLIENT_OPTIONS(`field1=value1,field2=value2,...') 39820Sstevel@tonic-gate DAEMON_OPTIONS(`field1=value1,field2=value2,...') 39830Sstevel@tonic-gate 39840Sstevel@tonic-gateNote that multiple CLIENT_OPTIONS() commands (and therefore multiple 39850Sstevel@tonic-gateClientPortOptions settings) are allowed in order to give settings for each 39860Sstevel@tonic-gateprotocol family (e.g., one for Family=inet and one for Family=inet6). A 39870Sstevel@tonic-gaterestriction placed on one family only affects outgoing connections on that 39880Sstevel@tonic-gateparticular family. 39890Sstevel@tonic-gate 39900Sstevel@tonic-gateIf DAEMON_OPTIONS is not used, then the default is 39910Sstevel@tonic-gate 39920Sstevel@tonic-gate DAEMON_OPTIONS(`Port=smtp, Name=MTA') 39930Sstevel@tonic-gate DAEMON_OPTIONS(`Port=587, Name=MSA, M=E') 39940Sstevel@tonic-gate 39950Sstevel@tonic-gateIf you use one DAEMON_OPTIONS macro, it will alter the parameters 39960Sstevel@tonic-gateof the first of these. The second will still be defaulted; it 39970Sstevel@tonic-gaterepresents a "Message Submission Agent" (MSA) as defined by RFC 39980Sstevel@tonic-gate2476 (see below). To turn off the default definition for the MSA, 39990Sstevel@tonic-gateuse FEATURE(`no_default_msa') (see also FEATURES). If you use 40000Sstevel@tonic-gateadditional DAEMON_OPTIONS macros, they will add additional daemons. 40010Sstevel@tonic-gate 40020Sstevel@tonic-gateExample 1: To change the port for the SMTP listener, while 40030Sstevel@tonic-gatestill using the MSA default, use 40040Sstevel@tonic-gate DAEMON_OPTIONS(`Port=925, Name=MTA') 40050Sstevel@tonic-gate 40060Sstevel@tonic-gateExample 2: To change the port for the MSA daemon, while still 40070Sstevel@tonic-gateusing the default SMTP port, use 40080Sstevel@tonic-gate FEATURE(`no_default_msa') 40090Sstevel@tonic-gate DAEMON_OPTIONS(`Name=MTA') 40100Sstevel@tonic-gate DAEMON_OPTIONS(`Port=987, Name=MSA, M=E') 40110Sstevel@tonic-gate 40120Sstevel@tonic-gateNote that if the first of those DAEMON_OPTIONS lines were omitted, then 40130Sstevel@tonic-gatethere would be no listener on the standard SMTP port. 40140Sstevel@tonic-gate 40150Sstevel@tonic-gateExample 3: To listen on both IPv4 and IPv6 interfaces, use 40160Sstevel@tonic-gate 40170Sstevel@tonic-gate DAEMON_OPTIONS(`Name=MTA-v4, Family=inet') 40180Sstevel@tonic-gate DAEMON_OPTIONS(`Name=MTA-v6, Family=inet6') 40190Sstevel@tonic-gate 40200Sstevel@tonic-gateA "Message Submission Agent" still uses all of the same rulesets for 40210Sstevel@tonic-gateprocessing the message (and therefore still allows message rejection via 40220Sstevel@tonic-gatethe check_* rulesets). In accordance with the RFC, the MSA will ensure 40230Sstevel@tonic-gatethat all domains in envelope addresses are fully qualified if the message 40240Sstevel@tonic-gateis relayed to another MTA. It will also enforce the normal address syntax 40250Sstevel@tonic-gaterules and log error messages. Additionally, by using the M=a modifier you 40260Sstevel@tonic-gatecan require authentication before messages are accepted by the MSA. 40270Sstevel@tonic-gateNotice: Do NOT use the 'a' modifier on a public accessible MTA! Finally, 40280Sstevel@tonic-gatethe M=E modifier shown above disables ETRN as required by RFC 2476. 40290Sstevel@tonic-gate 40300Sstevel@tonic-gateMail filters can be defined using the INPUT_MAIL_FILTER() and MAIL_FILTER() 40310Sstevel@tonic-gatecommands: 40320Sstevel@tonic-gate 40330Sstevel@tonic-gate INPUT_MAIL_FILTER(`sample', `S=local:/var/run/f1.sock') 40340Sstevel@tonic-gate MAIL_FILTER(`myfilter', `S=inet:3333@localhost') 40350Sstevel@tonic-gate 40360Sstevel@tonic-gateThe INPUT_MAIL_FILTER() command causes the filter(s) to be called in the 40370Sstevel@tonic-gatesame order they were specified by also setting confINPUT_MAIL_FILTERS. A 40380Sstevel@tonic-gatefilter can be defined without adding it to the input filter list by using 40390Sstevel@tonic-gateMAIL_FILTER() instead of INPUT_MAIL_FILTER() in your .mc file. 40400Sstevel@tonic-gateAlternatively, you can reset the list of filters and their order by setting 40410Sstevel@tonic-gateconfINPUT_MAIL_FILTERS option after all INPUT_MAIL_FILTER() commands in 40420Sstevel@tonic-gateyour .mc file. 40430Sstevel@tonic-gate 40440Sstevel@tonic-gate 40450Sstevel@tonic-gate+----------------------------+ 40460Sstevel@tonic-gate| MESSAGE SUBMISSION PROGRAM | 40470Sstevel@tonic-gate+----------------------------+ 40480Sstevel@tonic-gate 40490Sstevel@tonic-gateThis section contains a list of caveats and 40500Sstevel@tonic-gatea few hints how for those who want to tweak the default configuration 40510Sstevel@tonic-gatefor it (which is installed as submit.cf). 40520Sstevel@tonic-gate 40530Sstevel@tonic-gateNotice: do not add options/features to submit.mc unless you are 40540Sstevel@tonic-gateabsolutely sure you need them. Options you may want to change 40550Sstevel@tonic-gateinclude: 40560Sstevel@tonic-gate 40570Sstevel@tonic-gate- confTRUSTED_USERS, FEATURE(`use_ct_file'), and confCT_FILE for 40580Sstevel@tonic-gate avoiding X-Authentication warnings. 40590Sstevel@tonic-gate- confTIME_ZONE to change it from the default `USE_TZ'. 40600Sstevel@tonic-gate- confDELIVERY_MODE is set to interactive in msp.m4 instead 40610Sstevel@tonic-gate of the default background mode. 40620Sstevel@tonic-gate- FEATURE(stickyhost) and LOCAL_RELAY to send unqualified addresses 40630Sstevel@tonic-gate to the LOCAL_RELAY instead of the default relay. 40640Sstevel@tonic-gate 40650Sstevel@tonic-gateThe MSP performs hostname canonicalization by default. Mail may end 40660Sstevel@tonic-gateup for various DNS related reasons in the MSP queue. This problem 40670Sstevel@tonic-gatecan be minimized by using 40680Sstevel@tonic-gate 40690Sstevel@tonic-gate FEATURE(`nocanonify', `canonify_hosts') 40700Sstevel@tonic-gate define(`confDIRECT_SUBMISSION_MODIFIERS', `C') 40710Sstevel@tonic-gate 40720Sstevel@tonic-gateSee the discussion about nocanonify for possible side effects. 40730Sstevel@tonic-gate 40740Sstevel@tonic-gateSome things are not intended to work with the MSP. These include 40750Sstevel@tonic-gatefeatures that influence the delivery process (e.g., mailertable, 40760Sstevel@tonic-gatealiases), or those that are only important for a SMTP server (e.g., 40770Sstevel@tonic-gatevirtusertable, DaemonPortOptions, multiple queues). Moreover, 40780Sstevel@tonic-gaterelaxing certain restrictions (RestrictQueueRun, permissions on 40790Sstevel@tonic-gatequeue directory) or adding features (e.g., enabling prog/file mailer) 40800Sstevel@tonic-gatecan cause security problems. 40810Sstevel@tonic-gate 40820Sstevel@tonic-gateOther things don't work well with the MSP and require tweaking or 40830Sstevel@tonic-gateworkarounds. 40840Sstevel@tonic-gate 40850Sstevel@tonic-gateThe file and the map created by makemap should be owned by smmsp, 40860Sstevel@tonic-gateits group should be smmsp, and it should have mode 640. 40870Sstevel@tonic-gate 40880Sstevel@tonic-gatefeature/msp.m4 defines almost all settings for the MSP. Most of 40890Sstevel@tonic-gatethose should not be changed at all. Some of the features and options 40900Sstevel@tonic-gatecan be overridden if really necessary. It is a bit tricky to do 40910Sstevel@tonic-gatethis, because it depends on the actual way the option is defined 40920Sstevel@tonic-gatein feature/msp.m4. If it is directly defined (i.e., define()) then 40930Sstevel@tonic-gatethe modified value must be defined after 40940Sstevel@tonic-gate 40950Sstevel@tonic-gate FEATURE(`msp') 40960Sstevel@tonic-gate 40970Sstevel@tonic-gateIf it is conditionally defined (i.e., ifdef()) then the desired 40980Sstevel@tonic-gatevalue must be defined before the FEATURE line in the .mc file. 40990Sstevel@tonic-gateTo see how the options are defined read feature/msp.m4. 41000Sstevel@tonic-gate 41010Sstevel@tonic-gate 41020Sstevel@tonic-gate+--------------------------+ 41030Sstevel@tonic-gate| FORMAT OF FILES AND MAPS | 41040Sstevel@tonic-gate+--------------------------+ 41050Sstevel@tonic-gate 41060Sstevel@tonic-gateFiles that define classes, i.e., F{classname}, consist of lines 41070Sstevel@tonic-gateeach of which contains a single element of the class. For example, 41080Sstevel@tonic-gate/etc/mail/local-host-names may have the following content: 41090Sstevel@tonic-gate 41100Sstevel@tonic-gatemy.domain 41110Sstevel@tonic-gateanother.domain 41120Sstevel@tonic-gate 41130Sstevel@tonic-gateMaps must be created using makemap(8) , e.g., 41140Sstevel@tonic-gate 41150Sstevel@tonic-gate makemap hash MAP < MAP 41160Sstevel@tonic-gate 41170Sstevel@tonic-gateIn general, a text file from which a map is created contains lines 41180Sstevel@tonic-gateof the form 41190Sstevel@tonic-gate 41200Sstevel@tonic-gatekey value 41210Sstevel@tonic-gate 41220Sstevel@tonic-gatewhere 'key' and 'value' are also called LHS and RHS, respectively. 41230Sstevel@tonic-gateBy default, the delimiter between LHS and RHS is a non-empty sequence 41240Sstevel@tonic-gateof white space characters. 41250Sstevel@tonic-gate 41260Sstevel@tonic-gate 41270Sstevel@tonic-gate+------------------+ 41280Sstevel@tonic-gate| DIRECTORY LAYOUT | 41290Sstevel@tonic-gate+------------------+ 41300Sstevel@tonic-gate 41310Sstevel@tonic-gateWithin this directory are several subdirectories, to wit: 41320Sstevel@tonic-gate 41330Sstevel@tonic-gatem4 General support routines. These are typically 41340Sstevel@tonic-gate very important and should not be changed without 41350Sstevel@tonic-gate very careful consideration. 41360Sstevel@tonic-gate 41370Sstevel@tonic-gatecf The configuration files themselves. They have 41380Sstevel@tonic-gate ".mc" suffixes, and must be run through m4 to 41390Sstevel@tonic-gate become complete. The resulting output should 41400Sstevel@tonic-gate have a ".cf" suffix. 41410Sstevel@tonic-gate 41420Sstevel@tonic-gateostype Definitions describing a particular operating 41430Sstevel@tonic-gate system type. These should always be referenced 41440Sstevel@tonic-gate using the OSTYPE macro in the .mc file. Examples 41450Sstevel@tonic-gate include "bsd4.3", "bsd4.4", "sunos3.5", and 41460Sstevel@tonic-gate "sunos4.1". 41470Sstevel@tonic-gate 41480Sstevel@tonic-gatedomain Definitions describing a particular domain, referenced 41490Sstevel@tonic-gate using the DOMAIN macro in the .mc file. These are 41500Sstevel@tonic-gate site dependent; for example, "CS.Berkeley.EDU.m4" 41510Sstevel@tonic-gate describes hosts in the CS.Berkeley.EDU subdomain. 41520Sstevel@tonic-gate 41530Sstevel@tonic-gatemailer Descriptions of mailers. These are referenced using 41540Sstevel@tonic-gate the MAILER macro in the .mc file. 41550Sstevel@tonic-gate 41560Sstevel@tonic-gatesh Shell files used when building the .cf file from the 41570Sstevel@tonic-gate .mc file in the cf subdirectory. 41580Sstevel@tonic-gate 41590Sstevel@tonic-gatefeature These hold special orthogonal features that you might 41600Sstevel@tonic-gate want to include. They should be referenced using 41610Sstevel@tonic-gate the FEATURE macro. 41620Sstevel@tonic-gate 41630Sstevel@tonic-gatehack Local hacks. These can be referenced using the HACK 41640Sstevel@tonic-gate macro. They shouldn't be of more than voyeuristic 41650Sstevel@tonic-gate interest outside the .Berkeley.EDU domain, but who knows? 41660Sstevel@tonic-gate 41670Sstevel@tonic-gatesiteconfig Site configuration -- e.g., tables of locally connected 41680Sstevel@tonic-gate UUCP sites. 41690Sstevel@tonic-gate 41700Sstevel@tonic-gate 41710Sstevel@tonic-gate+------------------------+ 41720Sstevel@tonic-gate| ADMINISTRATIVE DETAILS | 41730Sstevel@tonic-gate+------------------------+ 41740Sstevel@tonic-gate 41750Sstevel@tonic-gateThe following sections detail usage of certain internal parts of the 41760Sstevel@tonic-gatesendmail.cf file. Read them carefully if you are trying to modify 41770Sstevel@tonic-gatethe current model. If you find the above descriptions adequate, these 41780Sstevel@tonic-gateshould be {boring, confusing, tedious, ridiculous} (pick one or more). 41790Sstevel@tonic-gate 41800Sstevel@tonic-gateRULESETS (* means built in to sendmail) 41810Sstevel@tonic-gate 41820Sstevel@tonic-gate 0 * Parsing 41830Sstevel@tonic-gate 1 * Sender rewriting 41840Sstevel@tonic-gate 2 * Recipient rewriting 41850Sstevel@tonic-gate 3 * Canonicalization 41860Sstevel@tonic-gate 4 * Post cleanup 41870Sstevel@tonic-gate 5 * Local address rewrite (after aliasing) 41880Sstevel@tonic-gate 1x mailer rules (sender qualification) 41890Sstevel@tonic-gate 2x mailer rules (recipient qualification) 41900Sstevel@tonic-gate 3x mailer rules (sender header qualification) 41910Sstevel@tonic-gate 4x mailer rules (recipient header qualification) 41920Sstevel@tonic-gate 5x mailer subroutines (general) 41930Sstevel@tonic-gate 6x mailer subroutines (general) 41940Sstevel@tonic-gate 7x mailer subroutines (general) 41950Sstevel@tonic-gate 8x reserved 41960Sstevel@tonic-gate 90 Mailertable host stripping 41970Sstevel@tonic-gate 96 Bottom half of Ruleset 3 (ruleset 6 in old sendmail) 41980Sstevel@tonic-gate 97 Hook for recursive ruleset 0 call (ruleset 7 in old sendmail) 41990Sstevel@tonic-gate 98 Local part of ruleset 0 (ruleset 8 in old sendmail) 42000Sstevel@tonic-gate 42010Sstevel@tonic-gate 42020Sstevel@tonic-gateMAILERS 42030Sstevel@tonic-gate 42040Sstevel@tonic-gate 0 local, prog local and program mailers 42050Sstevel@tonic-gate 1 [e]smtp, relay SMTP channel 42060Sstevel@tonic-gate 2 uucp-* UNIX-to-UNIX Copy Program 42070Sstevel@tonic-gate 3 netnews Network News delivery 42080Sstevel@tonic-gate 4 fax Sam Leffler's HylaFAX software 42090Sstevel@tonic-gate 5 mail11 DECnet mailer 42100Sstevel@tonic-gate 42110Sstevel@tonic-gate 42120Sstevel@tonic-gateMACROS 42130Sstevel@tonic-gate 42140Sstevel@tonic-gate A 42150Sstevel@tonic-gate B Bitnet Relay 42160Sstevel@tonic-gate C DECnet Relay 42170Sstevel@tonic-gate D The local domain -- usually not needed 42180Sstevel@tonic-gate E reserved for X.400 Relay 42190Sstevel@tonic-gate F FAX Relay 42200Sstevel@tonic-gate G 42210Sstevel@tonic-gate H mail Hub (for mail clusters) 42220Sstevel@tonic-gate I 42230Sstevel@tonic-gate J 42240Sstevel@tonic-gate K 42250Sstevel@tonic-gate L Luser Relay 42260Sstevel@tonic-gate M Masquerade (who you claim to be) 42270Sstevel@tonic-gate N 42280Sstevel@tonic-gate O 42290Sstevel@tonic-gate P 42300Sstevel@tonic-gate Q 42310Sstevel@tonic-gate R Relay (for unqualified names) 42320Sstevel@tonic-gate S Smart Host 42330Sstevel@tonic-gate T 42340Sstevel@tonic-gate U my UUCP name (if you have a UUCP connection) 42350Sstevel@tonic-gate V UUCP Relay (class {V} hosts) 42360Sstevel@tonic-gate W UUCP Relay (class {W} hosts) 42370Sstevel@tonic-gate X UUCP Relay (class {X} hosts) 42380Sstevel@tonic-gate Y UUCP Relay (all other hosts) 42390Sstevel@tonic-gate Z Version number 42400Sstevel@tonic-gate 42410Sstevel@tonic-gate 42420Sstevel@tonic-gateCLASSES 42430Sstevel@tonic-gate 42440Sstevel@tonic-gate A 42450Sstevel@tonic-gate B domains that are candidates for bestmx lookup 42460Sstevel@tonic-gate C 42470Sstevel@tonic-gate D 42480Sstevel@tonic-gate E addresses that should not seem to come from $M 42490Sstevel@tonic-gate F hosts this system forward for 42500Sstevel@tonic-gate G domains that should be looked up in genericstable 42510Sstevel@tonic-gate H 42520Sstevel@tonic-gate I 42530Sstevel@tonic-gate J 42540Sstevel@tonic-gate K 42550Sstevel@tonic-gate L addresses that should not be forwarded to $R 42560Sstevel@tonic-gate M domains that should be mapped to $M 42570Sstevel@tonic-gate N host/domains that should not be mapped to $M 42580Sstevel@tonic-gate O operators that indicate network operations (cannot be in local names) 42590Sstevel@tonic-gate P top level pseudo-domains: BITNET, DECNET, FAX, UUCP, etc. 42600Sstevel@tonic-gate Q 42610Sstevel@tonic-gate R domains this system is willing to relay (pass anti-spam filters) 42620Sstevel@tonic-gate S 42630Sstevel@tonic-gate T 42640Sstevel@tonic-gate U locally connected UUCP hosts 42650Sstevel@tonic-gate V UUCP hosts connected to relay $V 42660Sstevel@tonic-gate W UUCP hosts connected to relay $W 42670Sstevel@tonic-gate X UUCP hosts connected to relay $X 42680Sstevel@tonic-gate Y locally connected smart UUCP hosts 42690Sstevel@tonic-gate Z locally connected domain-ized UUCP hosts 42700Sstevel@tonic-gate . the class containing only a dot 42710Sstevel@tonic-gate [ the class containing only a left bracket 42720Sstevel@tonic-gate 42730Sstevel@tonic-gate 42740Sstevel@tonic-gateM4 DIVERSIONS 42750Sstevel@tonic-gate 42760Sstevel@tonic-gate 1 Local host detection and resolution 42770Sstevel@tonic-gate 2 Local Ruleset 3 additions 42780Sstevel@tonic-gate 3 Local Ruleset 0 additions 42790Sstevel@tonic-gate 4 UUCP Ruleset 0 additions 42800Sstevel@tonic-gate 5 locally interpreted names (overrides $R) 42810Sstevel@tonic-gate 6 local configuration (at top of file) 42820Sstevel@tonic-gate 7 mailer definitions 42830Sstevel@tonic-gate 8 DNS based blacklists 42840Sstevel@tonic-gate 9 special local rulesets (1 and 2) 42850Sstevel@tonic-gate 4286*3544Sjbeck$Revision: 8.716 $, Last updated $Date: 2007/01/08 18:32:25 $ 42870Sstevel@tonic-gateident "%Z%%M% %I% %E% SMI" 4288