diff options
author | peter <peter@FreeBSD.org> | 1998-08-04 16:35:57 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1998-08-04 16:35:57 +0000 |
commit | 9f74da92d2d9619b4a0543b7c6c819cb4eb4959e (patch) | |
tree | 97e0c5ab8cb2ff07b5c3ab6c04738a62c19fbe5c /usr.sbin/sendmail/cf/README | |
parent | d0cf6313bab68523e1ff8a7cf65c7f6c26c8dad0 (diff) | |
download | FreeBSD-src-9f74da92d2d9619b4a0543b7c6c819cb4eb4959e.zip FreeBSD-src-9f74da92d2d9619b4a0543b7c6c819cb4eb4959e.tar.gz |
Remove old sendmail (to the Attic)
Diffstat (limited to 'usr.sbin/sendmail/cf/README')
-rw-r--r-- | usr.sbin/sendmail/cf/README | 1857 |
1 files changed, 0 insertions, 1857 deletions
diff --git a/usr.sbin/sendmail/cf/README b/usr.sbin/sendmail/cf/README deleted file mode 100644 index 184a353..0000000 --- a/usr.sbin/sendmail/cf/README +++ /dev/null @@ -1,1857 +0,0 @@ - - - NEW SENDMAIL CONFIGURATION FILES - - Eric Allman <eric@CS.Berkeley.EDU> - - @(#)README 8.124 (Berkeley) 9/23/97 - - -This document describes the sendmail configuration files being used -at Berkeley. These use features in the new (R8) sendmail; they will -not work on other versions. - -These configuration files are probably not as general as previous -versions, and don't handle as many of the weird cases automagically. -I was able to simplify them for two reasons. First, the network -has become more consistent -- for example, at this point, everyone -on the internet is supposed to be running a name server, so hacks to -handle NIC-registered hosts can go away. Second, I assumed that a -subdomain would be running SMTP internally -- UUCP is presumed to be -a long-haul protocol. I realize that this is not universal, but it -does describe the vast majority of sites with which I am familiar, -including those outside the US. - -Of course, the downside of this is that if you do live in a weird -world, things are going to get weirder for you. I'm sorry about that, -but at the time we at Berkeley had a problem, and it seemed like the -right thing to do. - -This package requires a post-V7 version of m4; if you are running the -4.2bsd, SysV.2, or 7th Edition version, I suggest finding a friend with -a newer version. You can m4-expand on their system, then run locally. -SunOS's /usr/5bin/m4 or BSD-Net/2's m4 both work. GNU m4 version 1.1 -or later also works. Unfortunately, I'm told that the M4 on BSDI 1.0 -doesn't work -- you'll have to use a Net/2 or GNU version. GNU m4 is -available from ftp://prep.ai.mit.edu/pub/gnu/m4-1.4.tar.gz (check for -the latest version). EXCEPTIONS: DEC's m4 on Digital UNIX 4.x is broken -(3.x is fine). Use GNU m4 on this platform. - -IF YOU DON'T HAVE A BERKELEY MAKE, don't despair! Just run -"m4 ../m4/cf.m4 foo.mc > foo.cf" -- that should be all you need. -There is also a fairly crude (but functional) Makefile.dist that works -on the old version of make. - -To get started, you may want to look at tcpproto.mc (for TCP-only -sites), uucpproto.mc (for UUCP-only sites), and clientproto.mc (for -clusters of clients using a single mail host). Others are versions -that we use at Berkeley, although not all are in current use. For -example, ucbarpa has gone away, but I've left ucbarpa.mc in because -it demonstrates some interesting techniques. - -I'm not pretending that this README describes everything that these -configuration files can do; clever people can probably tweak them -to great effect. But it should get you started. - -******************************************************************* -*** BE SURE YOU CUSTOMIZE THESE FILES! They have some *** -*** Berkeley-specific assumptions built in, such as the name *** -*** of our UUCP-relay. You'll want to create your own domain *** -*** description, and use that in place of domain/Berkeley.m4. *** -******************************************************************* - - -+--------------------------+ -| INTRODUCTION AND EXAMPLE | -+--------------------------+ - -Configuration files are contained in the subdirectory "cf", with a -suffix ".mc". They must be run through "m4" to produce a ".cf" file. -You must pre-load "cf.m4": - - m4 ${CFDIR}/m4/cf.m4 config.mc > config.cf - -where ${CFDIR} is the root of the cf directory and config.mc is the -name of your configuration file. If you are running a version of M4 -that understands the __file__ builtin (versions of GNU m4 >= 0.75 do -this, but the versions distributed with 4.4BSD and derivatives do not) -or the -I flag (ditto), then ${CFDIR} can be in an arbitrary directory. -For "traditional" versions, ${CFDIR} ***MUST*** be "..", or you MUST -use -D_CF_DIR_=/path/to/cf/dir/ -- note the trailing slash! For example: - - m4 -D_CF_DIR_=${CFDIR}/ ${CFDIR}/m4/cf.m4 config.mc > config.cf - -Let's examine a typical .mc file: - - divert(-1) - # - # Copyright (c) 1983 Eric P. Allman - # Copyright (c) 1988, 1993 - # The Regents of the University of California. All rights reserved. - # - # Redistribution and use in source and binary forms, with or without - # modification, are permitted provided that the following conditions - # are met: - # 1. Redistributions of source code must retain the above copyright - # notice, this list of conditions and the following disclaimer. - # 2. Redistributions in binary form must reproduce the above copyright - # notice, this list of conditions and the following disclaimer in - # the documentation and/or other materials provided with the - # distribution. - # 3. All advertising materials mentioning features or use of this - # software # must display the following acknowledgement: - # This product includes software developed by the University of - # California, Berkeley and its contributors. - # 4. Neither the name of the University nor the names of its - # contributors may be used to endorse or promote products derived - # from this software without specific prior written permission. - # - # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' - # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS - # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - # - - # - # This is a Berkeley-specific configuration file for HP-UX 9.x. - # It applies only to the Computer Science Division at Berkeley, - # and should not be used elsewhere. It is provided on the sendmail - # distribution as a sample only. To create your own configuration - # file, create an appropriate domain file in ../domain, change the - # `DOMAIN' macro below to reference that file, and copy the result - # to a name of your own choosing. - # - divert(0) - -The divert(-1) will delete the crud in the resulting output file. -The copyright notice can be replaced by whatever your lawyers require; -our lawyers require the one that I've included in my files. A copyleft -is a copyright by another name. The divert(0) restores regular output. - - VERSIONID(`<SCCS or RCS version id>') - -VERSIONID is a macro that stuffs the version information into the -resulting file. We use SCCS; you could use RCS, something else, or -omit it completely. This is not the same as the version id included -in SMTP greeting messages -- this is defined in m4/version.m4. - - OSTYPE(hpux9)dnl - -You must specify an OSTYPE to properly configure things such as the -pathname of the help and status files, the flags needed for the local -mailer, and other important things. If you omit it, you will get an -error when you try to build the configuration. Look at the ostype -directory for the list of known operating system types. - - DOMAIN(CS.Berkeley.EDU)dnl - -This example is specific to the Computer Science Division at Berkeley. -You can use "DOMAIN(generic)" to get a sufficiently bland definition -that may well work for you, or you can create a customized domain -definition appropriate for your environment. - - MAILER(local) - MAILER(smtp) - -These describe the mailers used at the default CS site site. The -local mailer is always included automatically. Beware: MAILER -declarations should always be at the end of the configuration file, -and MAILER(smtp) should always precede MAILER(uucp). The general -rules are that the order should be: - - VERSIONID - OSTYPE - DOMAIN - FEATURE - local macro definitions - MAILER - LOCAL_RULESET_* - - -+----------------------------+ -| A BRIEF INTRODUCTION TO M4 | -+----------------------------+ - -Sendmail uses the M4 macro processor to ``compile'' the configuration -files. The most important thing to know is that M4 is stream-based, -that is, it doesn't understand about lines. For this reason, in some -places you may see the word ``dnl'', which standards for ``delete -through newline''; essentially, it deletes all characters starting -at the ``dnl'' up to and including the next newline character. In -most cases sendmail uses this only to avoid lots of unnecessary -blank lines in the output. - -Other important directives are define(A, B) which defines the macro -``A'' to have value ``B''. Macros are expanded as they are read, so -one normally quotes both values to prevent expansion. For example, - - define(`SMART_HOST', `smart.foo.com') - -One word of warning: M4 macros are expanded even in lines that appear -to be comments. For example, if you have - - # See FEATURE(foo) above - -it will not do what you expect, because the FEATURE(foo) will be -expanded. This also applies to - - # And then define the $X macro to be the return address - -because ``define'' is an M4 keyword. If you want to use them, surround -them with directed quotes, `like this'. - - -+--------+ -| OSTYPE | -+--------+ - -You MUST define an operating system environment, or the configuration -file build will puke. There are several environments available; look -at the "ostype" directory for the current list. This macro changes -things like the location of the alias file and queue directory. Some -of these files are identical to one another. - -It is IMPERATIVE that the OSTYPE occur before any MAILER definitions. -In general, the OSTYPE macro should go immediately after any version -information, and MAILER definitions should always go last. - -Operating system definitions are usually easy to write. They may define -the following variables (everything defaults, so an ostype file may be -empty). Unfortunately, the list of configuration-supported systems is -not as broad as the list of source-supported systems, since many of -the source contributors do not include corresponding ostype files. - -ALIAS_FILE [/etc/aliases] The location of the text version - of the alias file(s). It can be a comma-separated - list of names (but be sure you quote values with - commas in them -- for example, use - define(`ALIAS_FILE', `a,b') - to get "a" and "b" both listed as alias files; - otherwise the define() primitive only sees "a"). -HELP_FILE [/usr/lib/sendmail.hf] The name of the file - containing information printed in response to - the SMTP HELP command. -QUEUE_DIR [/var/spool/mqueue] The directory containing - queue files. -STATUS_FILE [/etc/sendmail.st] The file containing status - information. -LOCAL_MAILER_PATH [/bin/mail] The program used to deliver local mail. -LOCAL_MAILER_FLAGS [rmn] The flags used by the local mailer. The - flags lsDFM are always included. -LOCAL_MAILER_ARGS [mail -d $u] The arguments passed to deliver local - mail. -LOCAL_MAILER_MAX [undefined] If defined, the maximum size of local - mail that you are willing to accept. -LOCAL_MAILER_CHARSET [undefined] If defined, messages containing 8-bit data - that ARRIVE from an address that resolves to the - local mailer and which are converted to MIME will be - labelled with this character set. -LOCAL_SHELL_PATH [/bin/sh] The shell used to deliver piped email. -LOCAL_SHELL_FLAGS [eu] The flags used by the shell mailer. The - flags lsDFM are always included. -LOCAL_SHELL_ARGS [sh -c $u] The arguments passed to deliver "prog" - mail. -LOCAL_SHELL_DIR [$z:/] The directory search path in which the - shell should run. -USENET_MAILER_PATH [/usr/lib/news/inews] The name of the program - used to submit news. -USENET_MAILER_FLAGS [rlsDFMmn] The mailer flags for the usenet mailer. -USENET_MAILER_ARGS [-m -h -n] The command line arguments for the - usenet mailer. -USENET_MAILER_MAX [100000] The maximum size of messages that will - be accepted by the usenet mailer. -SMTP_MAILER_FLAGS [undefined] Flags added to SMTP mailer. Default - flags are `mDFMUX' for all SMTP-based mailers; the - "esmtp" mailer adds `a' and "smtp8" adds `8'. -SMTP_MAILER_MAX [undefined] The maximum size of messages that will - be transported using the smtp, smtp8, or esmtp - mailers. -SMTP_MAILER_ARGS [IPC $h] The arguments passed to the smtp mailer. - About the only reason you would want to change this - would be to change the default port. -ESMTP_MAILER_ARGS [IPC $h] The arguments passed to the esmtp mailer. -SMTP8_MAILER_ARGS [IPC $h] The arguments passed to the smtp8 mailer. -RELAY_MAILER_ARGS [IPC $h] The arguments passed to the relay mailer. -SMTP_MAILER_CHARSET [undefined] If defined, messages containing 8-bit data - that ARRIVE from an address that resolves to one of - the SMTP mailers and which are converted to MIME will - be labelled with this character set. -UUCP_MAILER_PATH [/usr/bin/uux] The program used to send UUCP mail. -UUCP_MAILER_FLAGS [undefined] Flags added to UUCP mailer. Default - flags are `DFMhuU' (and `m' for uucp-new mailer, - minus `U' for uucp-dom mailer). -UUCP_MAILER_ARGS [uux - -r -z -a$g -gC $h!rmail ($u)] The arguments - passed to the UUCP mailer. -UUCP_MAILER_MAX [100000] The maximum size message accepted for - transmission by the UUCP mailers. -UUCP_MAILER_CHARSET [undefined] If defined, messages containing 8-bit data - that ARRIVE from an address that resolves to one of - the UUCP mailers and which are converted to MIME will - be labelled with this character set. -FAX_MAILER_PATH [/usr/local/lib/fax/mailfax] The program used to - submit FAX messages. -FAX_MAILER_ARGS [mailfax $u $h $f] The arguments passed to the FAX - mailer. -FAX_MAILER_MAX [100000] The maximum size message accepted for - transmission by FAX. -POP_MAILER_PATH [/usr/lib/mh/spop] The pathname of the POP mailer. -POP_MAILER_FLAGS [Penu] Flags added to POP mailer. Flags "lsDFM" - are always added. -POP_MAILER_ARGS [pop $u] The arguments passed to the POP mailer. -PROCMAIL_MAILER_PATH [/usr/local/bin/procmail] The path to the procmail - program. This is also used by FEATURE(local_procmail). -PROCMAIL_MAILER_FLAGS [SPhnu9] Flags added to Procmail mailer. Flags - ``DFM'' are always set. This is NOT used by - FEATURE(local_procmail); tweak LOCAL_MAILER_FLAGS - instead. -PROCMAIL_MAILER_ARGS [procmail -Y -m $h $f $u] The arguments passed to - the Procmail mailer. This is NOT used by - FEATURE(local_procmail); tweak LOCAL_MAILER_ARGS - instead. -PROCMAIL_MAILER_MAX [undefined] If set, the maximum size message that - will be accepted by the procmail mailer. -MAIL11_MAILER_PATH [/usr/etc/mail11] The path to the mail11 mailer. -MAIL11_MAILER_FLAGS [nsFx] Flags for the mail11 mailer. -MAIL11_MAILER_ARGS [mail11 $g $x $h $u] Arguments passed to the mail11 - mailer. -PH_MAILER_PATH [/usr/local/etc/phquery] The path to the phquery - program. -PH_MAILER_FLAGS [ehmu] Flags for the phquery mailer. -PH_MAILER_ARGS [phquery -- $u] -- arguments to the phquery mailer. -CYRUS_MAILER_FLAGS [A5@] The flags used by the cyrus mailer. The - flags lsDFMnP are always included. -CYRUS_MAILER_PATH [/usr/cyrus/bin/deliver] The progam used to deliver - cyrus mail. -CYRUS_MAILER_ARGS [deliver -e -m $h -- $u] The arguments passed - to deliver cyrus mail. -CYRUS_MAILER_MAX [undefined] If set, the maximum size message that - will be accepted by the cyrus mailer. -CYRUS_MAILER_USER [cyrus:mail] The user and group to become when - running the cyrus mailer. -CYRUS_BB_MAILER_FLAGS [undefined] The flags used by the cyrusbb - mailer. The flags lsDFMnP are always included. -CYRUS_BB_MAILER_ARGS [deliver -e -m $u] The arguments passed - to deliver cyrusbb mail. - - - -+---------+ -| DOMAINS | -+---------+ - -You will probably want to collect domain-dependent defines into one -file, referenced by the DOMAIN macro. For example, our Berkeley -domain file includes definitions for several internal distinguished -hosts: - -UUCP_RELAY The host that will accept UUCP-addressed email. - If not defined, all UUCP sites must be directly - connected. -BITNET_RELAY The host that will accept BITNET-addressed email. - If not defined, the .BITNET pseudo-domain won't work. -DECNET_RELAY The host that will accept DECNET-addressed email. - If not defined, the .DECNET pseudo-domain and addresses - of the form node::user will not work. -FAX_RELAY The host that will accept mail to the .FAX pseudo-domain. - The "fax" mailer overrides this value. -LOCAL_RELAY DEPRECATED. The site that will handle unqualified - names -- that is, names with out an @domain extension. - If not set, they are assumed to belong on this machine. - This allows you to have a central site to store a - company- or department-wide alias database. This - only works at small sites, and only with some user - agents. -LUSER_RELAY The site that will handle lusers -- that is, apparently - local names that aren't local accounts or aliases. - -Any of these can be either ``mailer:hostname'' (in which case the -mailer is the internal mailer name, such as ``uucp-new'' and the hostname -is the name of the host as appropriate for that mailer) or just a -``hostname'', in which case a default mailer type (usually ``relay'', -a variant on SMTP) is used. WARNING: if you have a wildcard MX -record matching your domain, you probably want to define these to -have a trailing dot so that you won't get the mail diverted back -to yourself. - -The domain file can also be used to define a domain name, if needed -(using "DD<domain>") and set certain site-wide features. If all hosts -at your site masquerade behind one email name, you could also use -MASQUERADE_AS here. - -You do not have to define a domain -- in particular, if you are a -single machine sitting off somewhere, it is probably more work than -it's worth. This is just a mechanism for combining "domain dependent -knowledge" into one place. - -+---------+ -| MAILERS | -+---------+ - -There are fewer mailers supported in this version than the previous -version, owing mostly to a simpler world. As a general rule, put the -MAILER definitions last in your .mc file, and always put MAILER(smtp) -before MAILER(uucp) -- several features and definitions will modify -the definition of mailers, and the smtp mailer modifies the UUCP -mailer. - -local The local and prog mailers. You will almost always - need these; the only exception is if you relay ALL - your mail to another site. This mailer is included - automatically. - -smtp The Simple Mail Transport Protocol mailer. This does - not hide hosts behind a gateway or another other - such hack; it assumes a world where everyone is - running the name server. This file actually defines - four mailers: "smtp" for regular (old-style) SMTP to - other servers, "esmtp" for extended SMTP to other - servers, "smtp8" to do SMTP to other servers without - converting 8-bit data to MIME (essentially, this is - your statement that you know the other end is 8-bit - clean even if it doesn't say so), and "relay" for - transmission to our RELAY_HOST, LUSER_RELAY, or - MAILER_HUB. - -uucp The Unix-to-Unix Copy Program mailer. Actually, this - defines two mailers, "uucp-old" (a.k.a. "uucp") and - "uucp-new" (a.k.a. "suucp"). The latter is for when you - know that the UUCP mailer at the other end can handle - multiple recipients in one transfer. If the smtp mailer - is also included in your configuration, two other mailers - ("uucp-dom" and "uucp-uudom") are also defined [warning: - you MUST specify MAILER(smtp) before MAILER(uucp)]. When you - include the uucp mailer, sendmail looks for all names in - the $=U class and sends them to the uucp-old mailer; all - names in the $=Y class are sent to uucp-new; and all - names in the $=Z class are sent to uucp-uudom. Note that - this is a function of what version of rmail runs on - the receiving end, and hence may be out of your control. - See the section below describing UUCP mailers in more - detail. - -usenet Usenet (network news) delivery. If this is specified, - an extra rule is added to ruleset 0 that forwards all - local email for users named ``group.usenet'' to the - ``inews'' program. Note that this works for all groups, - and may be considered a security problem. - -fax Facsimile transmission. This is experimental and based - on Sam Leffler's HylaFAX software. For more information, - see http://www.vix.com/hylafax/. - -pop Post Office Protocol. - -procmail An interface to procmail (does not come with sendmail). - This is designed to be used in mailertables. For example, - a common question is "how do I forward all mail for a given - domain to a single person?". If you have this mailer - defined, you could set up a mailertable reading: - - host.com procmail:/etc/procmailrcs/host.com - - with the file /etc/procmailrcs/host.com reading: - - :0 # forward mail for host.com - ! -oi -f $1 person@other.host - - This would arrange for (anything)@host.com to be sent - to person@other.host. Within the procmail script, $1 is - the name of the sender and $2 is the name of the recipient. - If you use this with FEATURE(local_procmail), the FEATURE - should be listed first. - -mail11 The DECnet mail11 mailer, useful only if you have the mail11 - program from gatekeeper.dec.com:/pub/DEC/gwtools (and - DECnet, of course). This is for Phase IV DECnet support; - if you have Phase V at your site you may have additional - problems. - -phquery The phquery program. This is somewhat counterintuitively - referenced as the "ph" mailer internally. It can be used - to do CCSO name server lookups. The phquery program, which - this mailer uses, is distributed with the ph client. - -cyrus The cyrus and cyrusbb mailers. The cyrus mailer delivers to - a local cyrus user. this mailer can make use of the - "user+detail@local.host" syntax; it will deliver the mail to - the user's "detail" mailbox if the mailbox's ACL permits. - The cyrusbb mailer delivers to a system-wide cyrus mailbox - if the mailbox's ACL permits. - - -The local mailer accepts addresses of the form "user+detail", where -the "+detail" is not used for mailbox matching but is available -to certain local mail programs (in particular, see FEATURE(local_procmail)). -For example, "eric", "eric+sendmail", and "eric+sww" all indicate -the same user, but additional arguments <null>, "sendmail", and "sww" -may be provided for use in sorting mail. - - -+----------+ -| FEATURES | -+----------+ - -Special features can be requested using the "FEATURE" macro. For -example, the .mc line: - - FEATURE(use_cw_file) - -tells sendmail that you want to have it read an /etc/sendmail.cw -file to get values for class $=w. The FEATURE may contain a single -optional parameter -- for example: - - FEATURE(mailertable, dbm /usr/lib/mailertable) - -Available features are: - -use_cw_file Read the file /etc/sendmail.cw file to get alternate - names for this host. This might be used if you were - on a host that MXed for a dynamic set of other - hosts. If the set is static, just including the line - "Cw<name1> <name2> ..." is probably superior. - The actual filename can be overridden by redefining - confCW_FILE. - -use_ct_file Read the file /etc/sendmail.ct file to get the names - of users that will be ``trusted'', that is, able to - set their envelope from address using -f without - generating a warning message. - The actual filename can be overridden by redefining - confCT_FILE. - -redirect Reject all mail addressed to "address.REDIRECT" with - a ``551 User not local; please try <address>'' message. - If this is set, you can alias people who have left - to their new address with ".REDIRECT" appended. - -nouucp Don't do anything special with UUCP addresses at all. - -nocanonify Don't pass addresses to $[ ... $] for canonification. - This would generally only be used by sites that only - act as mail gateways or which have user agents that do - full canonification themselves. You may also want to - use "define(`confBIND_OPTS',`-DNSRCH -DEFNAMES')" to - turn off the usual resolver options that do a similar - thing. - -stickyhost If set, email sent to "user@local.host" are marked - as "sticky" -- that is, the local addresses aren't - matched against UDB and don't go through ruleset 5. - This is used if you want a set up where "user" is - not necessarily the same as "user@local.host", e.g., - to make a distinct domain-wide namespace. Prior to - 8.7 this was the default, and notsticky was used to - turn this off. - -mailertable Include a "mailer table" which can be used to override - routing for particular domains. The argument of the - FEATURE may be the key definition. If none is specified, - the definition used is: - hash -o /etc/mailertable - Keys in this database are fully qualified domain names - or partial domains preceded by a dot -- for example, - "vangogh.CS.Berkeley.EDU" or ".CS.Berkeley.EDU". - Values must be of the form: - mailer:domain - where "mailer" is the internal mailer name, and "domain" - is where to send the message. These maps are not - reflected into the message header. - -domaintable Include a "domain table" which can be used to provide - domain name mapping. Use of this should really be - limited to your own domains. It may be useful if you - change names (e.g., your company changes names from - oldname.com to newname.com). The argument of the - FEATURE may be the key definition. If none is specified, - the definition used is: - hash -o /etc/domaintable - The key in this table is the domain name; the value is - the new (fully qualified) domain. Anything in the - domaintable is reflected into headers; that is, this - is done in ruleset 3. - -bitdomain Look up bitnet hosts in a table to try to turn them into - internet addresses. The table can be built using the - bitdomain program contributed by John Gardiner Myers. - The argument of the FEATURE may be the key definition; if - none is specified, the definition used is: - hash -o /etc/bitdomain.db - Keys are the bitnet hostname; values are the corresponding - internet hostname. - -uucpdomain Similar feature for UUCP hosts. The default map definition - is: - hash -o /etc/uudomain.db - At the moment there is no automagic tool to build this - database. - -always_add_domain - Include the local host domain even on locally delivered - mail. Normally it is not added on unqualified names. - However, if you use a shared message store but do not use - the same user name space everywhere, you may need the host - name on local names. - -allmasquerade If masquerading is enabled (using MASQUERADE_AS), this - feature will cause recipient addresses to also masquerade - as being from the masquerade host. Normally they get - the local hostname. Although this may be right for - ordinary users, it can break local aliases. For example, - if you send to "localalias", the originating sendmail will - find that alias and send to all members, but send the - message with "To: localalias@masqueradehost". Since that - alias likely does not exist, replies will fail. Use this - feature ONLY if you can guarantee that the ENTIRE - namespace on your masquerade host supersets all the - local entries. - -limited_masquerade - Normally, any hosts listed in $=w are masqueraded. If this - feature is given, only the hosts listed in $=M are masqueraded. - This is useful if you have several domains with disjoint - namespaces hosted on the same machine. - -masquerade_entire_domain - If masquerading is enabled (using MASQUERADE_AS) and - MASQUERADE_DOMAIN (see below) is set, this feature will - cause addresses to be rewritten such that the masquerading - domains are actually entire domains to be hidden. All - hosts within the masquerading domains will be rewritten - to the masquerade name (used in MASQUERADE_AS). For example, - if you have: - - MASQUERADE_AS(masq.com) - MASQUERADE_DOMAIN(foo.org) - MASQUERADE_DOMAIN(bar.com) - - then *foo.org and *bar.com are converted to masq.com. Without - this feature, only foo.org and bar.com are masqueraded. - - NOTE: only domains within your jurisdiction and - current hierarchy should be masqueraded using this. - -genericstable This feature will cause certain addresses originating in the - local domain or a domain listed in $=G to be looked up in a - map and turned into another ("generic") form, which can change - both the domain name and the user name. This is similar to - the userdb functionality. The same types of addresses as for - masquerading are looked up, i.e. only header sender addresses - unless the allmasquerade and/or masquerade_envelope features - are given. The addresses must be in the list of names given - by the macros GENERICS_DOMAIN or GENERICS_DOMAIN_FILE - (analogously to MASQUERADE_DOMAIN and MASQUERADE_DOMAIN_FILE, - see below). - - The argument of FEATURE(genericstable) may be the map - defintion; the default map definition is: - - hash -o /etc/genericstable - - The key for this table is either the full address or the - unqualified username (the former is tried first); the - value is the new user address. If the new user address does - not include a domain, $j is used. Note that the address - being looked up must be fully qualified. For local mail, it - is necessary to use FEATURE(always_add_domain) for the - addresses to be qualified. - -virtusertable A domain-specific form of aliasing, allowing multiple - virtual domains to be hosted on one machine. For example, - if the virtuser table contained: - - info@foo.com foo-info - info@bar.com bar-info - @baz.org jane@elsewhere.net - - then mail addressed to info@foo.com will be sent to the - address foo-info, mail addressed to info@bar.com will be - delivered to bar-info, and mail addressed to anyone at - baz.org will be sent to jane@elsewhere.net. The username - from the original address is passed as %1 allowing: - - @foo.org %1@elsewhere.com - - meaning someone@foo.org will be sent to someone@elsewhere.com. - - All the host names on the left hand side (foo.com, bar.com, - and baz.org) must be in $=w. The default map definition is: - - hash -o /etc/virtusertable - - A new definition can be specified as the second argument of - the FEATURE macro, such as - - FEATURE(virtusertable, dbm -o /etc/mail/virtusers) - -nodns We aren't running DNS at our site (for example, - we are UUCP-only connected). It's hard to consider - this a "feature", but hey, it had to go somewhere. - Actually, as of 8.7 this is a no-op -- remove "dns" from - the hosts service switch entry instead. - -nullclient This is a special case -- it creates a stripped down - configuration file containing nothing but support for - forwarding all mail to a central hub via a local - SMTP-based network. The argument is the name of that - hub. - - The only other feature that should be used in conjunction - with this one is "nocanonify" (this causes addresses to - be sent unqualified via the SMTP connection; normally - they are qualifed with the masquerade name, which - defaults to the name of the hub machine). No mailers - should be defined. No aliasing or forwarding is done. - -local_procmail Use procmail as the local mailer. This mailer can - make use of the "user+indicator@local.host" syntax; - normally the +indicator is just tossed, but by default - it is passed as the -a argument to procmail. The - argument to this feature is the pathname of procmail, - which defaults to PROCMAIL_MAILER_PATH. Note that this - does NOT use PROCMAIL_MAILER_FLAGS or PROCMAIL_MAILER_ARGS - for the local mailer; tweak LOCAL_MAILER_FLAGS and - LOCAL_MAILER_ARGS instead. - -bestmx_is_local Accept mail as though locally addressed for any host that - lists us as the best possible MX record. This generates - additional DNS traffic, but should be OK for low to - medium traffic hosts. THIS FEATURE IS FUNDAMENTALLY - INCOMPATIBLE WITH WILDCARD MX RECORDS!!! If you have - a wildcard MX record that matches your domain, you - cannot use this feature. - -smrsh Use the SendMail Restricted SHell (smrsh) provided - with the distribution instead of /bin/sh for mailing - to programs. This improves the ability of the local - system administrator to control what gets run via - e-mail. If an argument is provided it is used as the - pathname to smrsh; otherwise, /usr/local/etc/smrsh is - assumed. - - -+-------+ -| HACKS | -+-------+ - -Some things just can't be called features. To make this clear, -they go in the hack subdirectory and are referenced using the HACK -macro. These will tend to be site-dependent. The release -includes the Berkeley-dependent "cssubdomain" hack (that makes -sendmail accept local names in either Berkeley.EDU or CS.Berkeley.EDU; -this is intended as a short-term aid while we move hosts into -subdomains. - - -+--------------------+ -| SITE CONFIGURATION | -+--------------------+ - - ***************************************************** - * This section is really obsolete, and is preserved * - * only for back compatibility. You should plan on * - * using mailertables for new installations. In * - * particular, it doesn't work for the newer forms * - * of UUCP mailers, such as uucp-uudom. * - ***************************************************** - -Complex sites will need more local configuration information, such as -lists of UUCP hosts they speak with directly. This can get a bit more -tricky. For an example of a "complex" site, see cf/ucbvax.mc. - -If your host is known by several different names, you need to augment -the $=w class. This is a list of names by which you are known, and -anything sent to an address using a host name in this list will be -treated as local mail. You can do this in two ways: either create -the file /etc/sendmail.cw containing a list of your aliases (one per -line), and use ``FEATURE(use_cw_file)'' in the .mc file, or add the -line: - - Cw alias.host.name - -at the end of that file. See the ``vangogh.mc'' file for an example. -Be sure you use the fully-qualified name of the host, rather than a -short name. - -The SITECONFIG macro allows you to indirectly reference site-dependent -configuration information stored in the siteconfig subdirectory. For -example, the line - - SITECONFIG(uucp.ucbvax, ucbvax, U) - -reads the file uucp.ucbvax for local connection information. The -second parameter is the local name (in this case just "ucbvax" since -it is locally connected, and hence a UUCP hostname). The third -parameter is the name of both a macro to store the local name (in -this case, $U) and the name of the class (e.g., $=U) in which to store -the host information read from the file. Another SITECONFIG line reads - - SITECONFIG(uucp.ucbarpa, ucbarpa.Berkeley.EDU, W) - -This says that the file uucp.ucbarpa contains the list of UUCP sites -connected to ucbarpa.Berkeley.EDU. The $=W class will be used to -store this list, and $W is defined to be ucbarpa.Berkeley.EDU, that -is, the name of the relay to which the hosts listed in uucp.ucbarpa -are connected. [The machine ucbarpa is gone now, but I've left -this out-of-date configuration file around to demonstrate how you -might do this.] - -Note that the case of SITECONFIG with a third parameter of ``U'' is -special; the second parameter is assumed to be the UUCP name of the -local site, rather than the name of a remote site, and the UUCP name -is entered into $=w (the list of local hostnames) as $U.UUCP. - -The siteconfig file (e.g., siteconfig/uucp.ucbvax.m4) contains nothing -more than a sequence of SITE macros describing connectivity. For -example: - - SITE(cnmat) - SITE(sgi olympus) - -The second example demonstrates that you can use two names on the -same line; these are usually aliases for the same host (or are at -least in the same company). - - -+--------------------+ -| USING UUCP MAILERS | -+--------------------+ - -It's hard to get UUCP mailers right because of the extremely ad hoc -nature of UUCP addressing. These config files are really designed -for domain-based addressing, even for UUCP sites. - -There are four UUCP mailers available. The choice of which one to -use is partly a matter of local preferences and what is running at -the other end of your UUCP connection. Unlike good protocols that -define what will go over the wire, UUCP uses the policy that you -should do what is right for the other end; if they change, you have -to change. This makes it hard to do the right thing, and discourages -people from updating their software. In general, if you can avoid -UUCP, please do. - -The major choice is whether to go for a domainized scheme or a -non-domainized scheme. This depends entirely on what the other -end will recognize. If at all possible, you should encourage the -other end to go to a domain-based system -- non-domainized addresses -don't work entirely properly. - -The four mailers are: - - uucp-old (obsolete name: "uucp") - This is the oldest, the worst (but the closest to UUCP) way of - sending messages accros UUCP connections. It does bangify - everything and prepends $U (your UUCP name) to the sender's - address (which can already be a bang path itself). It can - only send to one address at a time, so it spends a lot of - time copying duplicates of messages. Avoid this if at all - possible. - - uucp-new (obsolete name: "suucp") - The same as above, except that it assumes that in one rmail - command you can specify several recipients. It still has a - lot of other problems. - - uucp-dom - This UUCP mailer keeps everything as domain addresses. - Basically, it uses the SMTP mailer rewriting rules. This mailer - is only included if MAILER(smtp) is also specified. - - Unfortunately, a lot of UUCP mailer transport agents require - bangified addresses in the envelope, although you can use - domain-based addresses in the message header. (The envelope - shows up as the From_ line on UNIX mail.) So.... - - uucp-uudom - This is a cross between uucp-new (for the envelope addresses) - and uucp-dom (for the header addresses). It bangifies the - envelope sender (From_ line in messages) without adding the - local hostname, unless there is no host name on the address - at all (e.g., "wolf") or the host component is a UUCP host name - instead of a domain name ("somehost!wolf" instead of - "some.dom.ain!wolf"). This is also included only if MAILER(smtp) - is also specified. - -Examples: - -We are on host grasp.insa-lyon.fr (UUCP host name "grasp"). The -following summarizes the sender rewriting for various mailers. - -Mailer sender rewriting in the envelope ------- ------ ------------------------- -uucp-{old,new} wolf grasp!wolf -uucp-dom wolf wolf@grasp.insa-lyon.fr -uucp-uudom wolf grasp.insa-lyon.fr!wolf - -uucp-{old,new} wolf@fr.net grasp!fr.net!wolf -uucp-dom wolf@fr.net wolf@fr.net -uucp-uudom wolf@fr.net fr.net!wolf - -uucp-{old,new} somehost!wolf grasp!somehost!wolf -uucp-dom somehost!wolf somehost!wolf@grasp.insa-lyon.fr -uucp-uudom somehost!wolf grasp.insa-lyon.fr!somehost!wolf - -If you are using one of the domainized UUCP mailers, you really want -to convert all UUCP addresses to domain format -- otherwise, it will -do it for you (and probably not the way you expected). For example, -if you have the address foo!bar!baz (and you are not sending to foo), -the heuristics will add the @uucp.relay.name or @local.host.name to -this address. However, if you map foo to foo.host.name first, it -will not add the local hostname. You can do this using the uucpdomain -feature. - - -+-------------------+ -| TWEAKING RULESETS | -+-------------------+ - -For more complex configurations, you can define special rules. -The macro LOCAL_RULE_3 introduces rules that are used in canonicalizing -the names. Any modifications made here are reflected in the header. - -A common use is to convert old UUCP addreses to SMTP addresses using -the UUCPSMTP macro. For example: - - LOCAL_RULE_3 - UUCPSMTP(decvax, decvax.dec.com) - UUCPSMTP(research, research.att.com) - -will cause addresses of the form "decvax!user" and "research!user" -to be converted to "user@decvax.dec.com" and "user@research.att.com" -respectively. - -This could also be used to look up hosts in a database map: - - LOCAL_RULE_3 - R$* < @ $+ > $* $: $1 < @ $(hostmap $2 $) > $3 - -This map would be defined in the LOCAL_CONFIG portion, as shown below. - -Similarly, LOCAL_RULE_0 can be used to introduce new parsing rules. -For example, new rules are needed to parse hostnames that you accept -via MX records. For example, you might have: - - LOCAL_RULE_0 - R$+ <@ host.dom.ain.> $#uucp $@ cnmat $: $1 < @ host.dom.ain.> - -You would use this if you had installed an MX record for cnmat.Berkeley.EDU -pointing at this host; this rule catches the message and forwards it on -using UUCP. - -You can also tweak rulesets 1 and 2 using LOCAL_RULE_1 and LOCAL_RULE_2. -These rulesets are normally empty. - -A similar macro is LOCAL_CONFIG. This introduces lines added after the -boilerplate option setting but before rulesets, and can be used to -declare local database maps or whatever. For example: - - LOCAL_CONFIG - Khostmap hash /etc/hostmap.db - Kyplocal nis -m hosts.byname - - -+---------------------------+ -| MASQUERADING AND RELAYING | -+---------------------------+ - -You can have your host masquerade as another using - - MASQUERADE_AS(host.domain) - -This causes mail being sent to be labeled as coming from the -indicated host.domain, rather than $j. One normally masquerades as -one of one's own subdomains (for example, it's unlikely that I would -choose to masquerade as an MIT site). This behaviour is modified by -a plethora of FEATUREs; in particular, see masquerade_envelope, -allmasquerade, limited_masquerade, and masquerade_entire_domain. - -The masquerade name is not normally canonified, so it is important -that it be your One True Name, that is, fully qualified and not a -CNAME. However, if you use a CNAME, the receiving side may canonify -it for you, so don't think you can cheat CNAME mapping this way. - -Normally the only addresses that are masqueraded are those that come -from this host (that is, are either unqualified or in $=w, the list -of local domain names). You can augment this list using - - MASQUERADE_DOMAIN(otherhost.domain) - -The effect of this is that although mail to user@otherhost.domain -will not be delivered locally, any mail including any user@otherhost.domain -will, when relayed, be rewritten to have the MASQUERADE_AS address. -This can be a space-separated list of names. - -If these names are in a file, you can use - - MASQUERADE_DOMAIN_FILE(filename) - -to read the list of names from the indicated file. - -Normally only header addresses are masqueraded. If you want to -masquerade the envelope as well, use - - FEATURE(masquerade_envelope) - -There are always users that need to be "exposed" -- that is, their -internal site name should be displayed instead of the masquerade name. -Root is an example. You can add users to this list using - - EXPOSED_USER(usernames) - -This adds users to class E; you could also use something like - - FE/etc/sendmail.cE - -You can also arrange to relay all unqualified names (that is, names -without @host) to a relay host. For example, if you have a central -email server, you might relay to that host so that users don't have -to have .forward files or aliases. You can do this using - - define(`LOCAL_RELAY', mailer:hostname) - -The ``mailer:'' can be omitted, in which case the mailer defaults to -"relay". There are some user names that you don't want relayed, perhaps -because of local aliases. A common example is root, which may be -locally aliased. You can add entries to this list using - - LOCAL_USER(usernames) - -This adds users to class L; you could also use something like - - FL/etc/sendmail.cL - -If you want all incoming mail sent to a centralized hub, as for a -shared /var/spool/mail scheme, use - - define(`MAIL_HUB', mailer:hostname) - -Again, ``mailer:'' defaults to "relay". If you define both LOCAL_RELAY -and MAIL_HUB _AND_ you have FEATURE(stickyhost), unqualified names will -be sent to the LOCAL_RELAY and other local names will be sent to MAIL_HUB. -Names in $=L will be delivered locally, so you MUST have aliases or -.forward files for them. - -For example, if you are on machine mastodon.CS.Berkeley.EDU and you have -FEATURE(stickyhost), the following combinations of settings will have the -indicated effects: - -email sent to.... eric eric@mastodon.CS.Berkeley.EDU - -LOCAL_RELAY set to mail.CS.Berkeley.EDU (delivered locally) -mail.CS.Berkeley.EDU (no local aliasing) (aliasing done) - -MAIL_HUB set to mammoth.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU -mammoth.CS.Berkeley.EDU (aliasing done) (aliasing done) - -Both LOCAL_RELAY and mail.CS.Berkeley.EDU mammoth.CS.Berkeley.EDU -MAIL_HUB set as above (no local aliasing) (aliasing done) - -If you do not have FEATURE(stickyhost) set, then LOCAL_RELAY and -MAIL_HUB act identically, with MAIL_HUB taking precedence. - -If you want all outgoing mail to go to a central relay site, define -SMART_HOST as well. Briefly: - - LOCAL_RELAY applies to unqualifed names (e.g., "eric"). - MAIL_HUB applies to names qualified with the name of the - local host (e.g., "eric@mastodon.CS.Berkeley.EDU"). - SMART_HOST applies to names qualified with other hosts. - -However, beware that other relays (e.g., UUCP_RELAY, BITNET_RELAY, -DECNET_RELAY, and FAX_RELAY) take precedence over SMART_HOST, so if you -really want absolutely everything to go to a single central site you will -need to unset all the other relays -- or better yet, find or build a -minimal config file that does this. - -For duplicate suppression to work properly, the host name is best -specified with a terminal dot: - - define(`MAIL_HUB', `host.domain.') - note the trailing dot ---^ - - -+--------------------------------+ -| ADDING NEW MAILERS OR RULESETS | -+--------------------------------+ - -Sometimes you may need to add entirely new mailers or rulesets. They -should be introduced with the constructs MAILER_DEFINITIONS and -LOCAL_RULESETS respectively. For example: - - MAILER_DEFINITIONS - Mmymailer, ... - ... - - LOCAL_RULESETS - Scheck_relay - ... - - -+-------------------------------+ -| NON-SMTP BASED CONFIGURATIONS | -+-------------------------------+ - -These configuration files are designed primarily for use by SMTP-based -sites. I don't pretend that they are well tuned for UUCP-only or -UUCP-primarily nodes (the latter is defined as a small local net -connected to the rest of the world via UUCP). However, there is one -hook to handle some special cases. - -You can define a ``smart host'' that understands a richer address syntax -using: - - define(`SMART_HOST', mailer:hostname) - -In this case, the ``mailer:'' defaults to "relay". Any messages that -can't be handled using the usual UUCP rules are passed to this host. - -If you are on a local SMTP-based net that connects to the outside -world via UUCP, you can use LOCAL_NET_CONFIG to add appropriate rules. -For example: - - define(`SMART_HOST', suucp:uunet) - LOCAL_NET_CONFIG - R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 - -This will cause all names that end in your domain name ($m) via -SMTP; anything else will be sent via suucp (smart UUCP) to uunet. -If you have FEATURE(nocanonify), you may need to omit the dots after -the $m. If you are running a local DNS inside your domain which is -not otherwise connected to the outside world, you probably want to -use: - - define(`SMART_HOST', smtp:fire.wall.com) - LOCAL_NET_CONFIG - R$* < @ $* . > $* $#smtp $@ $2. $: $1 < @ $2. > $3 - -That is, send directly only to things you found in your DNS lookup; -anything else goes through SMART_HOST. - - -+-----------+ -| WHO AM I? | -+-----------+ - -Normally, the $j macro is automatically defined to be your fully -qualified domain name (FQDN). Sendmail does this by getting your -host name using gethostname and then calling gethostbyname on the -result. For example, in some environments gethostname returns -only the root of the host name (such as "foo"); gethostbyname is -supposed to return the FQDN ("foo.bar.com"). In some (fairly rare) -cases, gethostbyname may fail to return the FQDN. In this case -you MUST define confDOMAIN_NAME to be your fully qualified domain -name. This is usually done using: - - Dmbar.com - define(`confDOMAIN_NAME', `$w.$m')dnl - - -+--------------------+ -| USING MAILERTABLES | -+--------------------+ - -To use FEATURE(mailertable), you will have to create an external -database containing the routing information for various domains. -For example, a mailertable file in text format might be: - - .my.domain xnet:%1.my.domain - uuhost1.my.domain suucp:uuhost1 - .bitnet smtp:relay.bit.net - -This should normally be stored in /etc/mailertable. The actual -database version of the mailertable is built using: - - makemap hash /etc/mailertable.db < /etc/mailertable - -The semantics are simple. Any LHS entry that does not begin with -a dot matches the full host name indicated. LHS entries beginning -with a dot match anything ending with that domain name -- that is, -they can be thought of as having a leading "*" wildcard. Matching -is done in order of most-to-least qualified -- for example, even -though ".my.domain" is listed first in the above example, an entry -of "uuhost1.my.domain" will match the second entry since it is -more explicit. - -The RHS should always be a "mailer:host" pair. The mailer is the -configuration name of a mailer (that is, an `M' line in the -sendmail.cf file). The "host" will be the hostname passed to -that mailer. In domain-based matches (that is, those with leading -dots) the "%1" may be used to interpolate the wildcarded part of -the host name. For example, the first line above sends everything -addressed to "anything.my.domain" to that same host name, but using -the (presumably experimental) xnet mailer. - -In some cases you may want to temporarily turn off MX records, -particularly on gateways. For example, you may want to MX -everything in a domain to one machine that then forwards it -directly. To do this, you might use the DNS configuration: - - *.domain. IN MX 0 relay.machine - -and on relay.machine use the mailertable: - - .domain smtp:[gateway.domain] - -The [square brackets] turn off MX records for this host only. -If you didn't do this, the mailertable would use the MX record -again, which would give you an MX loop. - - -+--------------------------------+ -| USING USERDB TO MAP FULL NAMES | -+--------------------------------+ - -The user database was not originally intended for mapping full names -to login names (e.g., Eric.Allman => eric), but some people are using -it that way. (I would recommend that you set up aliases for this -purpose instead -- since you can specify multiple alias files, this -is fairly easy.) The intent was to locate the default maildrop at -a site, but allow you to override this by sending to a specific host. - -If you decide to set up the user database in this fashion, it is -imperative that you not use FEATURE(stickyhost) -- otherwise, -e-mail sent to Full.Name@local.host.name will be rejected. - -To build the internal form of the user database, use: - - makemap btree /usr/data/base.db < /usr/data/base.txt - -As a general rule, I am adamantly opposed to using full names as -e-mail addresses, since they are not in any sense unique. For example, -the Unix software-development community has two Andy Tannenbaums, -at least two well-known Peter Deutsches, and at one time Bell Labs -had two Stephen R. Bournes with offices along the same hallway. -Which one will be forced to suffer the indignity of being -Stephen_R_Bourne_2? The less famous of the two, or the one that -was hired later? - -Finger should handle full names (and be fuzzy). Mail should use -handles, and not be fuzzy. [Not that I expect anyone to pay any -attention to my opinions.] - - -+--------------------------------+ -| MISCELLANEOUS SPECIAL FEATURES | -+--------------------------------+ - -Plussed users - Sometimes it is convenient to merge configuration on a - centralized mail machine, for example, to forward all - root mail to a mail server. In this case it might be - useful to be able to treat the root addresses as a class - of addresses with subtle differences. You can do this - using plussed users. For example, a client might include - the alias: - - root: root+client1@server - - On the server, this will match an alias for "root+client1". - If that is not found, the alias "root+*" will be tried, - then "root". - -LDAP - For notes on use LDAP in sendmail, see - http://www-leland.stanford.edu/~bbense/Inst.html - - - -+----------------+ -| SECURITY NOTES | -+----------------+ - -A lot of sendmail security comes down to you. Sendmail 8 is much -more careful about checking for security problems than previous -versions, but there are some things that you still need to watch -for. In particular: - -* Make sure the aliases file isn't writable except by trusted - system personnel. This includes both the text and database - version. - -* Make sure that other files that sendmail reads, such as the - mailertable, are only writable by trusted system personnel. - -* The queue directory should not be world writable PARTICULARLY - if your system allows "file giveaways" (that is, if a non-root - user can chown any file they own to any other user). - -* If your system allows file giveaways, DO NOT create a publically - writable directory for forward files. This will allow anyone - to steal anyone else's e-mail. Instead, create a script that - copies the .forward file from users' home directories once a - night (if you want the non-NFS-mounted forward directory). - -* If your system allows file giveaways, you'll find that - sendmail is much less trusting of :include: files -- in - particular, you'll have to have /SENDMAIL/ANY/SHELL/ in - /etc/shells before they will be trusted (that is, before - files and programs listed in them will be honored). - -In general, file giveaways are a mistake -- if you can turn them -off I recommend you do so. - - -+--------------------------------+ -| TWEAKING CONFIGURATION OPTIONS | -+--------------------------------+ - -There are a large number of configuration options that don't normally -need to be changed. However, if you feel you need to tweak them, you -can define the following M4 variables. This list is shown in four -columns: the name you define, the default value for that definition, -the option or macro that is affected (either Ox for an option or Dx -for a macro), and a brief description. Greater detail of the semantics -can be found in the Installation and Operations Guide. - -Some options are likely to be deprecated in future versions -- that is, -the option is only included to provide back-compatibility. These are -marked with "*". - -Remember that these options are M4 variables, and hence may need to -be quoted. In particular, arguments with commas will usually have to -be ``double quoted, like this phrase'' to avoid having the comma -confuse things. This is common for alias file definitions and for -the read timeout. - -M4 Variable Name Configuration Description & [Default] -================ ============= ======================= -confMAILER_NAME $n macro [MAILER-DAEMON] The sender name used - for internally generated outgoing - messages. -confDOMAIN_NAME $j macro If defined, sets $j. This should - only be done if your system cannot - determine your local domain name, - and then it should be set to - $w.Foo.COM, where Foo.COM is your - domain name. -confCF_VERSION $Z macro If defined, this is appended to the - configuration version name. -confFROM_HEADER From: [$?x$x <$g>$|$g$.] The format of an - internally generated From: address. -confRECEIVED_HEADER Received: - [$?sfrom $s $.$?_($?s$|from $.$_) - $.by $j ($v/$Z)$?r with $r$. id $i$?u - for $u; $|; - $.$b] - The format of the Received: header - in messages passed through this host. - It is unwise to try to change this. -confCW_FILE Fw class [/etc/sendmail.cw] Name of file used - to get the local additions to the $=w - (local host names) class. -confCT_FILE Ft class [/etc/sendmail.ct] Name of file used - to get the local additions to the $=t - (trusted users) class. -confTRUSTED_USERS Ct class [no default] Names of users to add to - the list of trusted users. This list - always includes root, uucp, and daemon. - See also FEATURE(use_ct_file). -confSMTP_MAILER - [esmtp] The mailer name used when - SMTP connectivity is required. - One of "smtp", "smtp8", or "esmtp". -confUUCP_MAILER - [uucp-old] The mailer to be used by - default for bang-format recipient - addresses. See also discussion of - $=U, $=Y, and $=Z in the MAILER(uucp) - section. -confLOCAL_MAILER - [local] The mailer name used when - local connectivity is required. - Almost always "local". -confRELAY_MAILER - [relay] The default mailer name used - for relaying any mail (e.g., to a - BITNET_RELAY, a SMART_HOST, or - whatever). This can reasonably be - "uucp-new" if you are on a - UUCP-connected site. -confSEVEN_BIT_INPUT SevenBitInput [False] Force input to seven bits? -confEIGHT_BIT_HANDLING EightBitMode [pass8] 8-bit data handling -confALIAS_WAIT AliasWait [10m] Time to wait for alias file - rebuild until you get bored and - decide that the apparently pending - rebuild failed. -confMIN_FREE_BLOCKS MinFreeBlocks [100] Minimum number of free blocks on - queue filesystem to accept SMTP mail. - (Prior to 8.7 this was minfree/maxsize, - where minfree was the number of free - blocks and maxsize was the maximum - message size. Use confMAX_MESSAGE_SIZE - for the second value now.) -confMAX_MESSAGE_SIZE MaxMessageSize [infinite] The maximum size of messages - that will be accepted (in bytes). -confBLANK_SUB BlankSub [.] Blank (space) substitution - character. -confCON_EXPENSIVE HoldExpensive [False] Avoid connecting immediately - to mailers marked expensive? -confCHECKPOINT_INTERVAL CheckpointInterval - [10] Checkpoint queue files every N - recipients. -confDELIVERY_MODE DeliveryMode [background] Default delivery mode. -confAUTO_REBUILD AutoRebuildAliases - [False] Automatically rebuild alias - file if needed. -confERROR_MODE ErrorMode [print] Error message mode. -confERROR_MESSAGE ErrorHeader [undefined] Error message header/file. -confSAVE_FROM_LINES SafeFromLine Save extra leading From_ lines. -confTEMP_FILE_MODE TempFileMode [0600] Temporary file mode. -confMATCH_GECOS MatchGECOS [True] Match GECOS field. -confMAX_HOP MaxHopCount [25] Maximum hop count. -confIGNORE_DOTS* IgnoreDots [False; always False in -bs or -bd mode] - Ignore dot as terminator for incoming - messages? -confBIND_OPTS ResolverOptions [undefined] Default options for DNS - resolver. -confMIME_FORMAT_ERRORS* SendMimeErrors [True] Send error messages as MIME- - encapsulated messages per RFC 1344. -confFORWARD_PATH ForwardPath [$z/.forward.$w:$z/.forward] - The colon-separated list of places to - search for .forward files. N.B.: see - the Security Notes section. -confMCI_CACHE_SIZE ConnectionCacheSize - [2] Size of open connection cache. -confMCI_CACHE_TIMEOUT ConnectionCacheTimeout - [5m] Open connection cache timeout. -confHOST_STATUS_DIRECTORY HostStatusDirectory - [undefined] If set, host status is kept - on disk between sendmail runs in the - named directory tree. This need not be - a full pathname, in which case it is - interpreted relative to the queue - directory. -confSINGLE_THREAD_DELIVERY SingleThreadDelivery - [False] If this option and the - HostStatusDirectory option are both - set, single thread deliveries to other - hosts. That is, don't allow any two - sendmails on this host to connect - simultaneously to any other single - host. This can slow down delivery in - some cases, in particular since a - cached but otherwise idle connection - to a host will prevent other sendmails - from connecting to the other host. -confUSE_ERRORS_TO* UserErrorsTo [False] Use the Errors-To: header to - deliver error messages. This should - not be necessary because of general - acceptance of the envelope/header - distinction. -confLOG_LEVEL LogLevel [9] Log level. -confME_TOO MeToo [False] Include sender in group - expansions. -confCHECK_ALIASES CheckAliases [False] Check RHS of aliases when - running newaliases. Since this does - DNS lookups on every address, it can - slow down the alias rebuild process - considerably on large alias files. -confOLD_STYLE_HEADERS* OldStyleHeaders [True] Assume that headers without - special chars are old style. -confDAEMON_OPTIONS DaemonPortOptions - [none] SMTP daemon options. -confPRIVACY_FLAGS PrivacyOptions [authwarnings] Privacy flags. -confCOPY_ERRORS_TO PostmasterCopy [undefined] Address for additional - copies of all error messages. -confQUEUE_FACTOR QueueFactor [600000] Slope of queue-only function. -confDONT_PRUNE_ROUTES DontPruneRoutes [False] Don't prune down route-addr - syntax addresses to the minimum - possible. -confSAFE_QUEUE* SuperSafe [True] Commit all messages to disk - before forking. -confTO_INITIAL Timeout.initial [5m] The timeout waiting for a response - on the initial connect. -confTO_CONNECT Timeout.connect [0] The timeout waiting for an initial - connect() to complete. This can only - shorten connection timeouts; the kernel - silently enforces an absolute maximum - (which varies depending on the system). -confTO_ICONNECT Timeout.iconnect - [undefined] Like Timeout.connect, but - applies only to the very first attempt - to connect to a host in a message. - This allows a single very fast pass - followed by more careful delivery - attempts in the future. -confTO_HELO Timeout.helo [5m] The timeout waiting for a response - to a HELO or EHLO command. -confTO_MAIL Timeout.mail [10m] The timeout waiting for a - response to the MAIL command. -confTO_RCPT Timeout.rcpt [1h] The timeout waiting for a response - to the RCPT command. -confTO_DATAINIT Timeout.datainit - [5m] The timeout waiting for a 354 - response from the DATA command. -confTO_DATABLOCK Timeout.datablock - [1h] The timeout waiting for a block - during DATA phase. -confTO_DATAFINAL Timeout.datafinal - [1h] The timeout waiting for a response - to the final "." that terminates a - message. -confTO_RSET Timeout.rset [5m] The timeout waiting for a response - to the RSET command. -confTO_QUIT Timeout.quit [2m] The timeout waiting for a response - to the QUIT command. -confTO_MISC Timeout.misc [2m] The timeout waiting for a response - to other SMTP commands. -confTO_COMMAND Timeout.command [1h] In server SMTP, the timeout waiting - for a command to be issued. -confTO_IDENT Timeout.ident [30s] The timeout waiting for a response - to an IDENT query. -confTO_FILEOPEN Timeout.fileopen - [60s] The timeout waiting for a file - (e.g., :include: file) to be opened. -confTO_QUEUERETURN Timeout.queuereturn - [5d] The timeout before a message is - returned as undeliverable. -confTO_QUEUERETURN_NORMAL - Timeout.queuereturn.normal - [undefined] As above, for normal - priority messages. -confTO_QUEUERETURN_URGENT - Timeout.queuereturn.urgent - [undefined] As above, for urgent - priority messages. -confTO_QUEUERETURN_NONURGENT - Timeout.queuereturn.non-urgent - [undefined] As above, for non-urgent - (low) priority messages. -confTO_QUEUEWARN Timeout.queuewarn - [4h] The timeout before a warning - message is sent to the sender telling - them that the message has been deferred. -confTO_QUEUEWARN_NORMAL Timeout.queuewarn.normal - [undefined] As above, for normal - priority messages. -confTO_QUEUEWARN_URGENT Timeout.queuewarn.urgent - [undefined] As above, for urgent - priority messages. -confTO_QUEUEWARN_NONURGENT - Timeout.queuewarn.non-urgent - [undefined] As above, for non-urgent - (low) priority messages. -confTO_HOSTSTATUS Timeout.hoststatus - [30m] How long information about host - statuses will be maintained before it - is considered stale and the host should - be retried. This applies both within - a single queue run and to persistent - information (see below). -confTIME_ZONE TimeZoneSpec [USE_SYSTEM] Time zone info -- can be - USE_SYSTEM to use the system's idea, - USE_TZ to use the user's TZ envariable, - or something else to force that value. -confDEF_USER_ID DefaultUser [1:1] Default user id. -confUSERDB_SPEC UserDatabaseSpec - [undefined] User database specification. -confFALLBACK_MX FallbackMXhost [undefined] Fallback MX host. -confTRY_NULL_MX_LIST TryNullMXList [False] If we are the best MX for a - host and haven't made other - arrangements, try connecting to the - host directly; normally this would be - a config error. -confQUEUE_LA QueueLA [8] Load average at which queue-only - function kicks in. -confREFUSE_LA RefuseLA [12] Load average at which incoming - SMTP connections are refused. -confMAX_DAEMON_CHILDREN MaxDaemonChildren - [undefined] The maximum number of - children the daemon will permit. After - this number, connections will be - rejected. If not set or <= 0, there is - no limit. -confCONNECTION_RATE_THROTTLE ConnectionRateThrottle - [undefined] The maximum number of - connections permitted per second. - After this many connections are - accepted, further connections will be - delayed. If not set or <= 0, there is - no limit. -confWORK_RECIPIENT_FACTOR - RecipientFactor [30000] Cost of each recipient. -confSEPARATE_PROC ForkEachJob [False] Run all deliveries in a separate - process. -confWORK_CLASS_FACTOR ClassFactor [1800] Priority multiplier for class. -confWORK_TIME_FACTOR RetryFactor [90000] Cost of each delivery attempt. -confQUEUE_SORT_ORDER QueueSortOrder [Priority] Queue sort algorithm: - Priority, Host, or Time. -confMIN_QUEUE_AGE MinQueueAge [0] The minimum amount of time a job - must sit in the queue between queue - runs. This allows you to set the - queue run interval low for better - resposiveness without trying all - jobs in each run. -confDEF_CHAR_SET DefaultCharSet [unknown-8bit] When converting - unlabelled 8 bit input to MIME, the - character set to use by default. -confSERVICE_SWITCH_FILE ServiceSwitchFile - [/etc/service.switch] The file to use - for the service switch on systems that - do not have a system-defined switch. -confHOSTS_FILE HostsFile [/etc/hosts] The file to use when doing - "file" type access of hosts names. -confDIAL_DELAY DialDelay [0s] If a connection fails, wait this - long and try again. Zero means "don't - retry". This is to allow "dial on - demand" connections to have enough time - to complete a connection. -confNO_RCPT_ACTION NoRecipientAction - [none] What to do if there are no legal - recipient fields (To:, Cc: or Bcc:) - in the message. Legal values can - be "none" to just leave the - nonconforming message as is, "add-to" - to add a To: header with all the - known recipients (which may expose - blind recipients), "add-apparently-to" - to do the same but use Apparently-To: - instead of To:, "add-bcc" to add an - empty Bcc: header, or - "add-to-undisclosed" to add the header - ``To: undisclosed-recipients:;''. -confSAFE_FILE_ENV SafeFileEnvironment - [undefined] If set, sendmail will do a - chroot() into this directory before - writing files. -confCOLON_OK_IN_ADDR ColonOkInAddr [True unless Configuration Level > 6] - If set, colons are treated as a regular - character in addresses. If not set, - they are treated as the introducer to - the RFC 822 "group" syntax. Colons are - handled properly in route-addrs. This - option defaults on for V5 and lower - configuration files. -confMAX_QUEUE_RUN_SIZE MaxQueueRunSize [0] If set, limit the maximum size of - any given queue run to this number of - entries. Essentially, this will stop - reading the queue directory after this - number of entries are reached; it does - _not_ pick the highest priority jobs, - so this should be as large as your - system can tolerate. If not set, there - is no limit. -confDONT_EXPAND_CNAMES DontExpandCnames - [False] If set, $[ ... $] lookups that - do DNS based lookups do not expand - CNAME records. This currently violates - the published standards, but the IETF - seems to be moving toward legalizing - this. For example, if "FTP.Foo.ORG" - is a CNAME for "Cruft.Foo.ORG", then - with this option set a lookup of - "FTP" will return "FTP.Foo.ORG"; if - clear it returns "Cruft.FOO.ORG". N.B. - you may not see any effect until your - downstream neighbors stop doing CNAME - lookups as well. -confFROM_LINE UnixFromLine [From $g $d] The From_ line used - when sending to files or programs. -confOPERATORS OperatorChars [.:%@!^/[]+] Address operator - characters. -confSMTP_LOGIN_MSG SmtpGreetingMessage - [$j Sendmail $v/$Z; $b] - The initial (spontaneous) SMTP - greeting message. The word "ESMTP" - will be inserted between the first and - second words to convince other - sendmails to try to speak ESMTP. -confDONT_INIT_GROUPS DontInitGroups [False] If set, the initgroups(3) - routine will never be invoked. You - might want to do this if you are - running NIS and you have a large group - map, since this call does a sequential - scan of the map; in a large site this - can cause your ypserv to run - essentially full time. If you set - this, agents run on behalf of users - will only have their primary - (/etc/passwd) group permissions. -confUNSAFE_GROUP_WRITES UnsafeGroupWrites - [False] If set, group-writable - :include: and .forward files are - considered "unsafe", that is, programs - and files cannot be directly referenced - from such files. World-writable files - are always considered unsafe. -confDOUBLE_BOUNCE_ADDRESS DoubleBounceAddress - [postmaster] If an error occurs when - sending an error message, send that - "double bounce" error message to this - address. -confRUN_AS_USER RunAsUser [undefined] If set, become this user - when reading and delivering mail. - Causes all file reads (e.g., .forward - and :include: files) to be done as - this user. Also, all programs will - be run as this user, and all output - files will be written as this user. - Intended for use only on firewalls - where users do not have accounts. - -See also the description of OSTYPE for some parameters that can be -tweaked (generally pathnames to mailers). - - -+-----------+ -| HIERARCHY | -+-----------+ - -Within this directory are several subdirectories, to wit: - -m4 General support routines. These are typically - very important and should not be changed without - very careful consideration. - -cf The configuration files themselves. They have - ".mc" suffixes, and must be run through m4 to - become complete. The resulting output should - have a ".cf" suffix. - -ostype Definitions describing a particular operating - system type. These should always be referenced - using the OSTYPE macro in the .mc file. Examples - include "bsd4.3", "bsd4.4", "sunos3.5", and - "sunos4.1". - -domain Definitions describing a particular domain, referenced - using the DOMAIN macro in the .mc file. These are - site dependent; for example, "CS.Berkeley.EDU.m4" - describes hosts in the CS.Berkeley.EDU subdomain. - -mailer Descriptions of mailers. These are referenced using - the MAILER macro in the .mc file. - -sh Shell files used when building the .cf file from the - .mc file in the cf subdirectory. - -feature These hold special orthogonal features that you might - want to include. They should be referenced using - the FEATURE macro. - -hack Local hacks. These can be referenced using the HACK - macro. They shouldn't be of more than voyeuristic - interest outside the .Berkeley.EDU domain, but who knows? - We've all got our own peccadillos. - -siteconfig Site configuration -- e.g., tables of locally connected - UUCP sites. - - -+------------------------+ -| ADMINISTRATIVE DETAILS | -+------------------------+ - -The following sections detail usage of certain internal parts of the -sendmail.cf file. Read them carefully if you are trying to modify -the current model. If you find the above descriptions adequate, these -should be {boring, confusing, tedious, ridiculous} (pick one or more). - -RULESETS (* means built in to sendmail) - - 0 * Parsing - 1 * Sender rewriting - 2 * Recipient rewriting - 3 * Canonicalization - 4 * Post cleanup - 5 * Local address rewrite (after aliasing) - 1x mailer rules (sender qualification) - 2x mailer rules (recipient qualification) - 3x mailer rules (sender header qualification) - 4x mailer rules (recipient header qualification) - 5x mailer subroutines (general) - 6x mailer subroutines (general) - 7x mailer subroutines (general) - 8x reserved - 90 Mailertable host stripping - 96 Bottom half of Ruleset 3 (ruleset 6 in old sendmail) - 97 Hook for recursive ruleset 0 call (ruleset 7 in old sendmail) - 98 Local part of ruleset 0 (ruleset 8 in old sendmail) - 99 Guaranteed null (for debugging) - - -MAILERS - - 0 local, prog local and program mailers - 1 [e]smtp, relay SMTP channel - 2 uucp-* UNIX-to-UNIX Copy Program - 3 netnews Network News delivery - 4 fax Sam Leffler's HylaFAX software - 5 mail11 DECnet mailer - - -MACROS - - A - B Bitnet Relay - C DECnet Relay - D The local domain -- usually not needed - E reserved for X.400 Relay - F FAX Relay - G - H mail Hub (for mail clusters) - I - J - K - L Luser Relay - M Masquerade (who I claim to be) - N - O - P - Q - R Relay (for unqualified names) - S Smart Host - T - U my UUCP name (if I have a UUCP connection) - V UUCP Relay (class V hosts) - W UUCP Relay (class W hosts) - X UUCP Relay (class X hosts) - Y UUCP Relay (all other hosts) - Z Version number - - -CLASSES - - A - B domains that are candidates for bestmx lookup - C - D - E addresses that should not seem to come from $M - F hosts we forward for - G domains that should be looked up in genericstable - H - I - J - K - L addresses that should not be forwarded to $R - M domains that should be mapped to $M - N - O operators that indicate network operations (cannot be in local names) - P top level pseudo-domains: BITNET, DECNET, FAX, UUCP, etc. - Q - R domains we are willing to relay (pass anti-spam filters) - S - T - U locally connected UUCP hosts - V UUCP hosts connected to relay $V - W UUCP hosts connected to relay $W - X UUCP hosts connected to relay $X - Y locally connected smart UUCP hosts - Z locally connected domain-ized UUCP hosts - . the class containing only a dot - [ the class containing only a left bracket - - -M4 DIVERSIONS - - 1 Local host detection and resolution - 2 Local Ruleset 3 additions - 3 Local Ruleset 0 additions - 4 UUCP Ruleset 0 additions - 5 locally interpreted names (overrides $R) - 6 local configuration (at top of file) - 7 mailer definitions - 8 - 9 special local rulesets (1 and 2) |