Annotation of 43BSDReno/share/doc/smm/07.sendmailop/op.me, revision 1.1

1.1     ! root        1: .\"
        !             2: .\" Copyright (c) 1983 Eric P. Allman
        !             3: .\" Copyright (c) 1988 The Regents of the University of California.
        !             4: .\" All rights reserved.
        !             5: .\"
        !             6: .\" Redistribution and use in source and binary forms are permitted
        !             7: .\" provided that the above copyright notice and this paragraph are
        !             8: .\" duplicated in all such forms and that any documentation,
        !             9: .\" advertising materials, and other materials related to such
        !            10: .\" distribution and use acknowledge that the software was developed
        !            11: .\" by the University of California, Berkeley.  The name of the
        !            12: .\" University may not be used to endorse or promote products derived
        !            13: .\" from this software without specific prior written permission.
        !            14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
        !            15: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
        !            16: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            17: .\"
        !            18: .\"    @(#)op.me       5.12 (Berkeley) 4/23/90
        !            19: .\"
        !            20: .\" eqn % | troff -me
        !            21: .\"if n .ls 2
        !            22: .\".he 'Sendmail Installation and Operation Guide''%'
        !            23: .\".fo 'Version 5.12''Last Mod 4/23/90'
        !            24: .eh 'SMM:07-%''Sendmail Installation and Operation Guide'
        !            25: .oh 'Sendmail Installation and Operation Guide''SMM:07-%'
        !            26: .nr si 3n
        !            27: .de $0
        !            28: .(x
        !            29: .in \\$3u*3n
        !            30: .ti -3n
        !            31: \\$2.  \\$1
        !            32: .)x
        !            33: ..
        !            34: .de $C
        !            35: .(x
        !            36: .in 0
        !            37: \\$1 \\$2.  \\$3
        !            38: .)x
        !            39: ..
        !            40: .+c
        !            41: .(l C
        !            42: .sz 16
        !            43: .b SENDMAIL
        !            44: .sz 12
        !            45: .sp
        !            46: .b "INSTALLATION AND OPERATION GUIDE"
        !            47: .sz 10
        !            48: .sp
        !            49: .r
        !            50: Eric Allman
        !            51: University of California, Berkeley
        !            52: Mammoth Project
        !            53: .sp
        !            54: Version 5.12
        !            55: .sp
        !            56: For Sendmail Version 5.61
        !            57: .)l
        !            58: .sp 2
        !            59: .pp
        !            60: .i Sendmail
        !            61: implements a general purpose internetwork mail routing facility
        !            62: under the UNIX*
        !            63: .(f
        !            64: *UNIX is a trademark of Bell Laboratories.
        !            65: .)f
        !            66: operating system.
        !            67: It is not tied to any one transport protocol \*-
        !            68: its function may be likened to a crossbar switch,
        !            69: relaying messages from one domain into another.
        !            70: In the process,
        !            71: it can do a limited amount of message header editing
        !            72: to put the message into a format that is appropriate
        !            73: for the receiving domain.
        !            74: All of this is done under the control of a configuration file.
        !            75: .pp
        !            76: Due to the requirements of flexibility
        !            77: for
        !            78: .i sendmail ,
        !            79: the configuration file can seem somewhat unapproachable.
        !            80: However, there are only a few basic configurations
        !            81: for most sites,
        !            82: for which standard configuration files have been supplied.
        !            83: Most other configurations
        !            84: can be built by adjusting an existing configuration files
        !            85: incrementally.
        !            86: .pp
        !            87: Although
        !            88: .i sendmail
        !            89: is intended to run
        !            90: without the need for monitoring,
        !            91: it has a number of features
        !            92: that may be used to monitor or adjust the operation
        !            93: under unusual circumstances.
        !            94: These features are described.
        !            95: .pp
        !            96: Section one describes how to do a basic
        !            97: .i sendmail
        !            98: installation.
        !            99: Section two
        !           100: explains the day-to-day information you should know
        !           101: to maintain your mail system.
        !           102: If you have a relatively normal site,
        !           103: these two sections should contain sufficient information
        !           104: for you to install
        !           105: .i sendmail
        !           106: and keep it happy.
        !           107: Section three
        !           108: describes some parameters that may be safely tweaked.
        !           109: Section four
        !           110: has information regarding the command line arguments.
        !           111: Section five
        !           112: contains the nitty-gritty information about the configuration
        !           113: file.
        !           114: This section is for masochists
        !           115: and people who must write their own configuration file.
        !           116: The appendixes give a brief
        !           117: but detailed explanation of a number of features
        !           118: not described in the rest of the paper.
        !           119: .pp
        !           120: The references in this paper are actually found
        !           121: in the companion paper
        !           122: .ul
        !           123: Sendmail \- An Internetwork Mail Router.
        !           124: This other paper should be read before this manual
        !           125: to gain a basic understanding
        !           126: of how the pieces fit together.
        !           127: .pn 4
        !           128: .bp
        !           129: .sh 1 "BASIC INSTALLATION"
        !           130: .pp
        !           131: There are two basic steps to installing sendmail.
        !           132: The hard part is to build the configuration table.
        !           133: This is a file that sendmail reads when it starts up
        !           134: that describes the mailers it knows about,
        !           135: how to parse addresses,
        !           136: how to rewrite the message header,
        !           137: and the settings of various options.
        !           138: Although the configuration table is quite complex,
        !           139: a configuration can usually be built
        !           140: by adjusting an existing off-the-shelf configuration.
        !           141: The second part is actually doing the installation,
        !           142: i.e., creating the necessary files, etc.
        !           143: .pp
        !           144: The remainder of this section will describe the installation of sendmail
        !           145: assuming you can use one of the existing configurations
        !           146: and that the standard installation parameters are acceptable.
        !           147: All pathnames and examples
        !           148: are given from the root of the
        !           149: .i sendmail
        !           150: subtree,
        !           151: normally
        !           152: .i /usr/src/usr.lib/sendmail
        !           153: on 4.3BSD.
        !           154: .sh 2 "Off-The-Shelf Configurations"
        !           155: .pp
        !           156: Configuration files currently in use at Berkeley are in
        !           157: the directory
        !           158: .i cf
        !           159: of the sendmail directory.
        !           160: This directory contains three subdirectories:
        !           161: .i cf ,
        !           162: .i m4 ,
        !           163: and
        !           164: .i sitedep .
        !           165: The directory
        !           166: .i cf/m4
        !           167: contains site-independent
        !           168: .i m4 (1)
        !           169: include files that have information common to all configuration files,
        !           170: while
        !           171: .i cf/sitedep
        !           172: contains
        !           173: .i m4 (1)
        !           174: include files that have site-specific information in them.
        !           175: These files are used by the master configuration (``.mc'')
        !           176: in
        !           177: .i cf/cf
        !           178: and produce standard configuration files (with
        !           179: .q .cf
        !           180: suffix) when run through
        !           181: .i m4 (1).
        !           182: .pp
        !           183: Three off the shelf configurations are supplied
        !           184: to handle the basic cases:
        !           185: .np
        !           186: Internet sites running the nameserver
        !           187: (or using host tables wherein the fully-qualfied domain
        !           188: name of each host is listed first)
        !           189: can use
        !           190: .i cf/tcpproto.cf .
        !           191: For simple sites,
        !           192: you should be able to use this file without modification.
        !           193: This file is not in
        !           194: .i m4
        !           195: format.
        !           196: .np
        !           197: UUCP only sites can use
        !           198: .i cf/uucpproto.cf .
        !           199: This file is not in
        !           200: .i m4
        !           201: format.
        !           202: .np
        !           203: A group of machines at a single site
        !           204: connected by an ethernet (or other networking
        !           205: that supports TCP/IP)
        !           206: with (only) one host connected to the outside world
        !           207: via UUCP
        !           208: is represented by two configuration files:
        !           209: .i cf/tcpuucpproto.cf
        !           210: should be installed on the host with outside connections
        !           211: and
        !           212: .i cf/tcpproto.cf
        !           213: should be installed on all other hosts.
        !           214: .pp
        !           215: Some configuration will be needed in each of the
        !           216: above cases.
        !           217: Just be sure to correctly fill in the 
        !           218: .q blanks
        !           219: as shown in the instructions in the configuration file.
        !           220: Then install the file as
        !           221: .i /usr/lib/sendmail.cf .
        !           222: .pp
        !           223: If you are running a larger or more complex site, it
        !           224: is to your advantage to read the
        !           225: .q README
        !           226: file in the
        !           227: .i cf
        !           228: subdirectory.
        !           229: This file explains how to use
        !           230: .i m4 (1)
        !           231: to automatically create configuration files for
        !           232: non-standard situations.
        !           233: .sh 2 "Installation Using the Makefile"
        !           234: .pp
        !           235: A makefile exists in the root of the
        !           236: .i sendmail
        !           237: directory that will do all of these steps
        !           238: for a 4.3BSD system.
        !           239: It may have to be slightly tailored
        !           240: for use on other systems.
        !           241: .pp
        !           242: Before using this makefile, you should create a symbolic link from
        !           243: .i cf
        !           244: to the directory containing your configuration files.
        !           245: You should also have created your configuration file
        !           246: and left it in the file
        !           247: .q cf/\fIsystem\fP.cf
        !           248: where
        !           249: .i system
        !           250: is the name of your system
        !           251: (i.e., what is returned by
        !           252: .i hostname \|(1)).
        !           253: If you do not have
        !           254: .i hostname
        !           255: you can use the declaration
        !           256: .q HOST=\fIsystem\fP
        !           257: on the
        !           258: .i make \|(1)
        !           259: command line.
        !           260: You should also examine the file
        !           261: .i md/config.m4
        !           262: and change the
        !           263: .i m4
        !           264: macros there to reflect any libraries and compilation flags
        !           265: you may need.
        !           266: .pp
        !           267: The basic installation procedure is to type:
        !           268: .(b
        !           269: make
        !           270: make install
        !           271: make installcf
        !           272: .)b
        !           273: in the root directory of the
        !           274: .i sendmail
        !           275: distribution.
        !           276: This will make all binaries
        !           277: and install them in the standard places.
        !           278: The second and third
        !           279: .i make
        !           280: commands must be executed as the superuser (root).
        !           281: .sh 2 "Installation by Hand"
        !           282: .pp
        !           283: Along with building a configuration file,
        !           284: you will have to install the
        !           285: .i sendmail
        !           286: startup into your UNIX system.
        !           287: If you are doing this installation
        !           288: in conjunction with a regular Berkeley UNIX install,
        !           289: these steps will already be complete.
        !           290: Many of these steps will have to be executed as the superuser (root).
        !           291: .sh 3 "/usr/lib/sendmail"
        !           292: .pp
        !           293: The binary for sendmail is located in /usr/lib.
        !           294: If it becomes necessary to recompile and reinstall the
        !           295: entire system, the following sequence will do it:
        !           296: .(b
        !           297: cd src
        !           298: make clean
        !           299: make install
        !           300: .)b
        !           301: .sh 3 "/usr/lib/sendmail.cf"
        !           302: .pp
        !           303: The configuration file
        !           304: that you created earlier
        !           305: should be installed in /usr/lib/sendmail.cf:
        !           306: .(b
        !           307: cp cf/\fIsystem\fP.cf /usr/lib/sendmail.cf
        !           308: .)b
        !           309: .sh 3 "/usr/ucb/newaliases"
        !           310: .pp
        !           311: If you are running delivermail,
        !           312: it is critical that the
        !           313: .i newaliases
        !           314: command be replaced.
        !           315: This can just be a link to
        !           316: .i sendmail :
        !           317: .(b
        !           318: rm \-f /usr/ucb/newaliases
        !           319: ln /usr/lib/sendmail /usr/ucb/newaliases
        !           320: .)b
        !           321: .sh 3 "/usr/spool/mqueue"
        !           322: .pp
        !           323: The directory
        !           324: .i /usr/spool/mqueue
        !           325: should be created to hold the mail queue.
        !           326: This directory should be mode 755
        !           327: and owned by root.
        !           328: .sh 3 "/usr/lib/aliases*"
        !           329: .pp
        !           330: The system aliases are held in three files.
        !           331: The file
        !           332: .q /usr/lib/aliases
        !           333: is the master copy.
        !           334: A sample is given in
        !           335: .q lib/aliases
        !           336: which includes some aliases which
        !           337: .i must
        !           338: be defined:
        !           339: .(b
        !           340: cp lib/aliases /usr/lib/aliases
        !           341: .)b
        !           342: You should extend this file with any aliases that are apropos to your system.
        !           343: .pp
        !           344: Normally
        !           345: .i sendmail
        !           346: looks at a version of these files maintained by the
        !           347: .i dbm \|(3)
        !           348: routines.
        !           349: These are stored in
        !           350: .q /usr/lib/aliases.dir
        !           351: and
        !           352: .q /usr/lib/aliases.pag.
        !           353: These can initially be created as empty files,
        !           354: but they will have to be initialized promptly.
        !           355: These should be mode 644:
        !           356: .(b
        !           357: cp /dev/null /usr/lib/aliases.dir
        !           358: cp /dev/null /usr/lib/aliases.pag
        !           359: chmod 644 /usr/lib/aliases.*
        !           360: newaliases
        !           361: .)b
        !           362: .sh 3 "/usr/lib/sendmail.fc"
        !           363: .pp
        !           364: If you intend to install the frozen version of the configuration file
        !           365: (for quick startup)
        !           366: you should create the file /usr/lib/sendmail.fc
        !           367: and initialize it.
        !           368: This step may be safely skipped.
        !           369: .(b
        !           370: cp /dev/null /usr/lib/sendmail.fc
        !           371: /usr/lib/sendmail \-bz
        !           372: .)b
        !           373: .sh 3 "/etc/rc"
        !           374: .pp
        !           375: It will be necessary to start up the sendmail daemon when your system reboots.
        !           376: This daemon performs two functions:
        !           377: it listens on the SMTP socket for connections
        !           378: (to receive mail from a remote system)
        !           379: and it processes the queue periodically
        !           380: to insure that mail gets delivered when hosts come up.
        !           381: .pp
        !           382: Add the following lines to
        !           383: .q /etc/rc
        !           384: (or
        !           385: .q /etc/rc.local
        !           386: as appropriate)
        !           387: in the area where it is starting up the daemons:
        !           388: .(b
        !           389: if [ \-f /usr/lib/sendmail ]; then
        !           390:        (cd /usr/spool/mqueue; rm \-f [lnx]f*)
        !           391:        /usr/lib/sendmail \-bd \-q30m &
        !           392:        echo \-n ' sendmail' >/dev/console
        !           393: fi
        !           394: .)b
        !           395: The
        !           396: .q cd
        !           397: and
        !           398: .q rm
        !           399: commands insure that all lock files have been removed;
        !           400: extraneous lock files may be left around
        !           401: if the system goes down in the middle of processing a message.
        !           402: The line that actually invokes
        !           403: .i sendmail
        !           404: has two flags:
        !           405: .q \-bd
        !           406: causes it to listen on the SMTP port,
        !           407: and
        !           408: .q \-q30m
        !           409: causes it to run the queue every half hour.
        !           410: .pp
        !           411: If you are not running a version of UNIX
        !           412: that supports Berkeley TCP/IP,
        !           413: do not include the
        !           414: .b \-bd
        !           415: flag.
        !           416: .sh 3 "/usr/lib/sendmail.hf"
        !           417: .pp
        !           418: This is the help file used by the SMTP
        !           419: .b HELP
        !           420: command.
        !           421: It should be copied from
        !           422: .q lib/sendmail.hf :
        !           423: .(b
        !           424: cp lib/sendmail.hf /usr/lib
        !           425: .)b
        !           426: .sh 3 "/usr/lib/sendmail.st"
        !           427: .pp
        !           428: If you wish to collect statistics
        !           429: about your mail traffic,
        !           430: you should create the file
        !           431: .q /usr/lib/sendmail.st :
        !           432: .(b
        !           433: cp /dev/null /usr/lib/sendmail.st
        !           434: chmod 666 /usr/lib/sendmail.st
        !           435: .)b
        !           436: This file does not grow.
        !           437: It is printed with the program
        !           438: .q aux/mailstats.
        !           439: .sh 3 "/usr/ucb/newaliases"
        !           440: .pp
        !           441: If
        !           442: .i sendmail
        !           443: is invoked as
        !           444: .q newaliases,
        !           445: it will simulate the
        !           446: .b \-bi
        !           447: flag
        !           448: (i.e., will rebuild the alias database;
        !           449: see below).
        !           450: This should be a link to /usr/lib/sendmail.
        !           451: .sh 3 "/usr/ucb/mailq"
        !           452: .pp
        !           453: If
        !           454: .i sendmail
        !           455: is invoked as
        !           456: .q mailq,
        !           457: it will simulate the
        !           458: .b \-bp
        !           459: flag
        !           460: (i.e.,
        !           461: .i sendmail
        !           462: will print the contents of the mail queue;
        !           463: see below).
        !           464: This should be a link to /usr/lib/sendmail.
        !           465: .sh 1 "NORMAL OPERATIONS"
        !           466: .sh 2 "Quick Configuration Startup"
        !           467: .pp
        !           468: A fast version of the configuration file
        !           469: may be set up by using the
        !           470: .b \-bz
        !           471: flag:
        !           472: .(b
        !           473: /usr/lib/sendmail \-bz
        !           474: .)b
        !           475: This creates the file
        !           476: .i /usr/lib/sendmail.fc
        !           477: (\c
        !           478: .q "frozen configuration" ).
        !           479: This file is an image of
        !           480: .i sendmail 's
        !           481: data space after reading in the configuration file.
        !           482: If this file exists,
        !           483: it is used instead of
        !           484: .i /usr/lib/sendmail.cf
        !           485: .i sendmail.fc
        !           486: must be rebuilt manually every time
        !           487: .i sendmail.cf
        !           488: is changed.
        !           489: .pp
        !           490: The frozen configuration file will be ignored
        !           491: if a
        !           492: .b \-C
        !           493: flag is specified
        !           494: or if sendmail detects that it is out of date.
        !           495: However, the heuristics are not strong
        !           496: so this should not be trusted.
        !           497: .sh 2 "The System Log"
        !           498: .pp
        !           499: The system log is supported by the
        !           500: .i syslogd \|(8)
        !           501: program.
        !           502: .sh 3 "Format"
        !           503: .pp
        !           504: Each line in the system log
        !           505: consists of a timestamp,
        !           506: the name of the machine that generated it
        !           507: (for logging from several machines
        !           508: over the local area network),
        !           509: the word
        !           510: .q sendmail: ,
        !           511: and a message.
        !           512: .sh 3 "Levels"
        !           513: .pp
        !           514: If you have
        !           515: .i syslogd \|(8)
        !           516: or an equivalent installed,
        !           517: you will be able to do logging.
        !           518: There is a large amount of information that can be logged.
        !           519: The log is arranged as a succession of levels.
        !           520: At the lowest level
        !           521: only extremely strange situations are logged.
        !           522: At the highest level,
        !           523: even the most mundane and uninteresting events
        !           524: are recorded for posterity.
        !           525: As a convention,
        !           526: log levels under ten
        !           527: are considered
        !           528: .q useful;
        !           529: log levels above ten
        !           530: are usually for debugging purposes.
        !           531: .pp
        !           532: A complete description of the log levels
        !           533: is given in section 4.6.
        !           534: .sh 2 "The Mail Queue"
        !           535: .pp
        !           536: The mail queue should be processed transparently.
        !           537: However, you may find that manual intervention is sometimes necessary.
        !           538: For example,
        !           539: if a major host is down for a period of time
        !           540: the queue may become clogged.
        !           541: Although sendmail ought to recover gracefully when the host comes up,
        !           542: you may find performance unacceptably bad in the meantime.
        !           543: .sh 3 "Printing the queue"
        !           544: .pp
        !           545: The contents of the queue can be printed
        !           546: using the
        !           547: .i mailq
        !           548: command
        !           549: (or by specifying the
        !           550: .b \-bp
        !           551: flag to sendmail):
        !           552: .(b
        !           553: mailq
        !           554: .)b
        !           555: This will produce a listing of the queue id's,
        !           556: the size of the message,
        !           557: the date the message entered the queue,
        !           558: and the sender and recipients.
        !           559: .sh 3 "Format of queue files"
        !           560: .pp
        !           561: All queue files have the form
        !           562: \fIx\fP\|\fBf\fP\fIAA99999\fP
        !           563: where
        !           564: .i AA99999
        !           565: is the
        !           566: .i id
        !           567: for this file
        !           568: and the
        !           569: .i x
        !           570: is a type.
        !           571: The types are:
        !           572: .ip d
        !           573: The data file.
        !           574: The message body (excluding the header) is kept in this file.
        !           575: .ip l
        !           576: The lock file.
        !           577: If this file exists,
        !           578: the job is currently being processed,
        !           579: and a queue run will not process the file.
        !           580: For that reason,
        !           581: an extraneous
        !           582: .b lf
        !           583: file can cause a job to apparently disappear
        !           584: (it will not even time out!).
        !           585: .ip n
        !           586: This file is created when an id is being created.
        !           587: It is a separate file to insure that no mail can ever be destroyed
        !           588: due to a race condition.
        !           589: It should exist for no more than a few milliseconds
        !           590: at any given time.
        !           591: .ip q
        !           592: The queue control file.
        !           593: This file contains the information necessary to process the job.
        !           594: .ip t
        !           595: A temporary file.
        !           596: These are an image of the
        !           597: .b qf
        !           598: file when it is being rebuilt.
        !           599: It should be renamed to a
        !           600: .b qf
        !           601: file very quickly.
        !           602: .ip x
        !           603: A transcript file,
        !           604: existing during the life of a session
        !           605: showing everything that happens
        !           606: during that session.
        !           607: .pp
        !           608: The
        !           609: .b qf
        !           610: file is structured as a series of lines
        !           611: each beginning with a code letter.
        !           612: The lines are as follows:
        !           613: .ip D
        !           614: The name of the data file.
        !           615: There may only be one of these lines.
        !           616: .ip H
        !           617: A header definition.
        !           618: There may be any number of these lines.
        !           619: The order is important:
        !           620: they represent the order in the final message.
        !           621: These use the same syntax
        !           622: as header definitions in the configuration file.
        !           623: .ip R
        !           624: A recipient address.
        !           625: This will normally be completely aliased,
        !           626: but is actually realiased when the job is processed.
        !           627: There will be one line
        !           628: for each recipient.
        !           629: .ip S
        !           630: The sender address.
        !           631: There may only be one of these lines.
        !           632: .ip E
        !           633: An error address.
        !           634: If any such lines exist,
        !           635: they represent the addresses that should receive error messages.
        !           636: .ip T
        !           637: The job creation time.
        !           638: This is used to compute when to time out the job.
        !           639: .ip P
        !           640: The current message priority.
        !           641: This is used to order the queue.
        !           642: Higher numbers mean lower priorities.
        !           643: The priority changes
        !           644: as the message sits in the queue.
        !           645: The initial priority depends on the message class
        !           646: and the size of the message.
        !           647: .ip M
        !           648: A message.
        !           649: This line is printed by the
        !           650: .i mailq
        !           651: command,
        !           652: and is generally used to store status information.
        !           653: It can contain any text.
        !           654: .pp
        !           655: As an example,
        !           656: the following is a queue file sent to
        !           657: .q mckusick@calder
        !           658: and
        !           659: .q wnj :
        !           660: .(b
        !           661: DdfA13557
        !           662: Seric
        !           663: T404261372
        !           664: P132
        !           665: Rmckusick@calder
        !           666: Rwnj
        !           667: H?D?date: 23-Oct-82 15:49:32-PDT (Sat)
        !           668: H?F?from: eric (Eric Allman)
        !           669: H?x?full-name: Eric Allman
        !           670: Hsubject: this is an example message
        !           671: Hmessage-id: <[email protected]>
        !           672: Hreceived: by UCBARPA.BERKELEY.EDU (3.227 [10/22/82])
        !           673:        id A13557; 23-Oct-82 15:49:32-PDT (Sat)
        !           674: HTo: mckusick@calder, wnj
        !           675: .)b
        !           676: This shows the name of the data file,
        !           677: the person who sent the message,
        !           678: the submission time
        !           679: (in seconds since January 1, 1970),
        !           680: the message priority,
        !           681: the message class,
        !           682: the recipients,
        !           683: and the headers for the message.
        !           684: .sh 3 "Forcing the queue"
        !           685: .pp
        !           686: .i Sendmail
        !           687: should run the queue automatically
        !           688: at intervals.
        !           689: The algorithm is to read and sort the queue,
        !           690: and then to attempt to process all jobs in order.
        !           691: When it attempts to run the job,
        !           692: .i sendmail
        !           693: first checks to see if the job is locked.
        !           694: If so, it ignores the job.
        !           695: .pp
        !           696: There is no attempt to insure that only one queue processor
        !           697: exists at any time,
        !           698: since there is no guarantee that a job cannot take forever
        !           699: to process.
        !           700: Due to the locking algorithm,
        !           701: it is impossible for one job to freeze the queue.
        !           702: However,
        !           703: an uncooperative recipient host
        !           704: or a program recipient
        !           705: that never returns
        !           706: can accumulate many processes in your system.
        !           707: Unfortunately,
        !           708: there is no way to resolve this
        !           709: without violating the protocol.
        !           710: .pp
        !           711: In some cases,
        !           712: you may find that a major host going down
        !           713: for a couple of days
        !           714: may create a prohibitively large queue.
        !           715: This will result in
        !           716: .i sendmail
        !           717: spending an inordinate amount of time
        !           718: sorting the queue.
        !           719: This situation can be fixed by moving the queue to a temporary place
        !           720: and creating a new queue.
        !           721: The old queue can be run later when the offending host returns to service.
        !           722: .pp
        !           723: To do this,
        !           724: it is acceptable to move the entire queue directory:
        !           725: .(b
        !           726: cd /usr/spool
        !           727: mv mqueue omqueue; mkdir mqueue; chmod 755 mqueue
        !           728: .)b
        !           729: You should then kill the existing daemon
        !           730: (since it will still be processing in the old queue directory)
        !           731: and create a new daemon.
        !           732: .pp
        !           733: To run the old mail queue,
        !           734: run the following command:
        !           735: .(b
        !           736: /usr/lib/sendmail \-oQ/usr/spool/omqueue \-q
        !           737: .)b
        !           738: The
        !           739: .b \-oQ
        !           740: flag specifies an alternate queue directory
        !           741: and the
        !           742: .b \-q
        !           743: flag says to just run every job in the queue.
        !           744: If you have a tendency toward voyeurism,
        !           745: you can use the
        !           746: .b \-v
        !           747: flag to watch what is going on.
        !           748: .pp
        !           749: When the queue is finally emptied,
        !           750: you can remove the directory:
        !           751: .(b
        !           752: rmdir /usr/spool/omqueue
        !           753: .)b
        !           754: .sh 2 "The Alias Database"
        !           755: .pp
        !           756: The alias database exists in two forms.
        !           757: One is a text form,
        !           758: maintained in the file
        !           759: .i /usr/lib/aliases.
        !           760: The aliases are of the form
        !           761: .(b
        !           762: name: name1, name2, ...
        !           763: .)b
        !           764: Only local names may be aliased;
        !           765: e.g.,
        !           766: .(b
        !           767: eric@mit-xx: [email protected]
        !           768: .)b
        !           769: will not have the desired effect.
        !           770: Aliases may be continued by starting any continuation lines
        !           771: with a space or a tab.
        !           772: Blank lines and lines beginning with a sharp sign
        !           773: (\c
        !           774: .q # )
        !           775: are comments.
        !           776: .pp
        !           777: The second form is processed by the
        !           778: .i dbm \|(3)
        !           779: library.
        !           780: This form is in the files
        !           781: .i /usr/lib/aliases.dir
        !           782: and
        !           783: .i /usr/lib/aliases.pag.
        !           784: This is the form that
        !           785: .i sendmail
        !           786: actually uses to resolve aliases.
        !           787: This technique is used to improve performance.
        !           788: .sh 3 "Rebuilding the alias database"
        !           789: .pp
        !           790: The DBM version of the database
        !           791: may be rebuilt explicitly by executing the command
        !           792: .(b
        !           793: newaliases
        !           794: .)b
        !           795: This is equivalent to giving
        !           796: .i sendmail
        !           797: the
        !           798: .b \-bi
        !           799: flag:
        !           800: .(b
        !           801: /usr/lib/sendmail \-bi
        !           802: .)b
        !           803: .pp
        !           804: If the
        !           805: .q D
        !           806: option is specified in the configuration,
        !           807: .i sendmail
        !           808: will rebuild the alias database automatically
        !           809: if possible
        !           810: when it is out of date.
        !           811: The conditions under which it will do this are:
        !           812: .np
        !           813: The DBM version of the database is mode 666.   -or-
        !           814: .np
        !           815: .i Sendmail
        !           816: is running setuid to root.
        !           817: .lp
        !           818: Auto-rebuild can be dangerous
        !           819: on heavily loaded machines
        !           820: with large alias files;
        !           821: if it might take more than five minutes
        !           822: to rebuild the database,
        !           823: there is a chance that several processes will start the rebuild process
        !           824: simultaneously.
        !           825: .sh 3 "Potential problems"
        !           826: .pp
        !           827: There are a number of problems that can occur
        !           828: with the alias database.
        !           829: They all result from a
        !           830: .i sendmail
        !           831: process accessing the DBM version
        !           832: while it is only partially built.
        !           833: This can happen under two circumstances:
        !           834: One process accesses the database
        !           835: while another process is rebuilding it,
        !           836: or the process rebuilding the database dies
        !           837: (due to being killed or a system crash)
        !           838: before completing the rebuild.
        !           839: .pp
        !           840: Sendmail has two techniques to try to relieve these problems.
        !           841: First, it ignores interrupts while rebuilding the database;
        !           842: this avoids the problem of someone aborting the process
        !           843: leaving a partially rebuilt database.
        !           844: Second,
        !           845: at the end of the rebuild
        !           846: it adds an alias of the form
        !           847: .(b
        !           848: @: @
        !           849: .)b
        !           850: (which is not normally legal).
        !           851: Before sendmail will access the database,
        !           852: it checks to insure that this entry exists\**.
        !           853: .(f
        !           854: \**The
        !           855: .q a
        !           856: option is required in the configuration
        !           857: for this action to occur.
        !           858: This should normally be specified
        !           859: unless you are running
        !           860: .i delivermail
        !           861: in parallel with
        !           862: .i sendmail.
        !           863: .)f
        !           864: .i Sendmail
        !           865: will wait for this entry to appear,
        !           866: at which point it will force a rebuild itself\**.
        !           867: .(f
        !           868: \**Note:
        !           869: the
        !           870: .q D
        !           871: option must be specified in the configuration file
        !           872: for this operation to occur.
        !           873: If the
        !           874: .q D
        !           875: option is not specified,
        !           876: a warning message is generated and
        !           877: .i sendmail
        !           878: continues.
        !           879: .)f
        !           880: .sh 3 "List owners"
        !           881: .pp
        !           882: If an error occurs on sending to a certain address,
        !           883: say
        !           884: .q \fIx\fP ,
        !           885: .i sendmail
        !           886: will look for an alias
        !           887: of the form
        !           888: .q owner-\fIx\fP
        !           889: to receive the errors.
        !           890: This is typically useful
        !           891: for a mailing list
        !           892: where the submitter of the list
        !           893: has no control over the maintenance of the list itself;
        !           894: in this case the list maintainer would be the owner of the list.
        !           895: For example:
        !           896: .(b
        !           897: unix-wizards: eric@ucbarpa, wnj@monet, nosuchuser,
        !           898:        sam@matisse
        !           899: owner-unix-wizards: eric@ucbarpa
        !           900: .)b
        !           901: would cause
        !           902: .q eric@ucbarpa
        !           903: to get the error that will occur
        !           904: when someone sends to
        !           905: unix-wizards
        !           906: due to the inclusion of
        !           907: .q nosuchuser
        !           908: on the list.
        !           909: .sh 2 "Per-User Forwarding (.forward Files)"
        !           910: .pp
        !           911: As an alternative to the alias database,
        !           912: any user may put a file with the name
        !           913: .q .forward
        !           914: in his or her home directory.
        !           915: If this file exists,
        !           916: .i sendmail
        !           917: redirects mail for that user
        !           918: to the list of addresses listed in the .forward file.
        !           919: For example, if the home directory for user
        !           920: .q mckusick
        !           921: has a .forward file with contents:
        !           922: .(b
        !           923: mckusick@ernie
        !           924: kirk@calder
        !           925: .)b
        !           926: then any mail arriving for
        !           927: .q mckusick
        !           928: will be redirected to the specified accounts.
        !           929: .sh 2 "Special Header Lines"
        !           930: .pp
        !           931: Several header lines have special interpretations
        !           932: defined by the configuration file.
        !           933: Others have interpretations built into
        !           934: .i sendmail
        !           935: that cannot be changed without changing the code.
        !           936: These builtins are described here.
        !           937: .sh 3 "Return-Receipt-To:"
        !           938: .pp
        !           939: If this header is sent,
        !           940: a message will be sent to any specified addresses
        !           941: when the final delivery is complete,
        !           942: that is,
        !           943: when successfully delivered to a mailer with the
        !           944: .b l
        !           945: flag (local delivery) set in the mailer descriptor.
        !           946: .sh 3 "Errors-To:"
        !           947: .pp
        !           948: If errors occur anywhere during processing,
        !           949: this header will cause error messages to go to
        !           950: the listed addresses
        !           951: rather than to the sender.
        !           952: This is intended for mailing lists.
        !           953: .sh 3 "Apparently-To:"
        !           954: .pp
        !           955: If a message comes in with no recipients listed in the message
        !           956: (in a To:, Cc:, or Bcc: line)
        !           957: then
        !           958: .i sendmail
        !           959: will add an
        !           960: .q "Apparently-To:"
        !           961: header line for any recipients it is aware of.
        !           962: This is not put in as a standard recipient line
        !           963: to warn any recipients that the list is not complete.
        !           964: .pp
        !           965: At least one recipient line is required under RFC 822.
        !           966: .sh 1 "ARGUMENTS"
        !           967: .pp
        !           968: The complete list of arguments to
        !           969: .i sendmail
        !           970: is described in detail in Appendix A.
        !           971: Some important arguments are described here.
        !           972: .sh 2 "Queue Interval"
        !           973: .pp
        !           974: The amount of time between forking a process
        !           975: to run through the queue
        !           976: is defined by the
        !           977: .b \-q
        !           978: flag.
        !           979: If you run in mode
        !           980: .b f
        !           981: or
        !           982: .b a
        !           983: this can be relatively large,
        !           984: since it will only be relevant
        !           985: when a host that was down comes back up.
        !           986: If you run in
        !           987: .b q
        !           988: mode
        !           989: it should be relatively short,
        !           990: since it defines the maximum amount of time that a message
        !           991: may sit in the queue.
        !           992: .sh 2 "Daemon Mode"
        !           993: .pp
        !           994: If you allow incoming mail over an IPC connection,
        !           995: you should have a daemon running.
        !           996: This should be set by your
        !           997: .i /etc/rc
        !           998: file using the
        !           999: .b \-bd
        !          1000: flag.
        !          1001: The
        !          1002: .b \-bd
        !          1003: flag and the
        !          1004: .b \-q
        !          1005: flag may be combined in one call:
        !          1006: .(b
        !          1007: /usr/lib/sendmail \-bd \-q30m
        !          1008: .)b
        !          1009: .sh 2 "Forcing the Queue"
        !          1010: .pp
        !          1011: In some cases you may find that the queue has gotten clogged for some reason.
        !          1012: You can force a queue run
        !          1013: using the
        !          1014: .b \-q
        !          1015: flag (with no value).
        !          1016: It is entertaining to use the
        !          1017: .b \-v
        !          1018: flag (verbose)
        !          1019: when this is done to watch what happens:
        !          1020: .(b
        !          1021: /usr/lib/sendmail \-q \-v
        !          1022: .)b
        !          1023: .sh 2 "Debugging"
        !          1024: .pp
        !          1025: There are a fairly large number of debug flags
        !          1026: built into
        !          1027: .i sendmail .
        !          1028: Each debug flag has a number and a level,
        !          1029: where higher levels means to print out more information.
        !          1030: The convention is that levels greater than nine are
        !          1031: .q absurd,
        !          1032: i.e.,
        !          1033: they print out so much information that you wouldn't normally
        !          1034: want to see them except for debugging that particular piece of code.
        !          1035: Debug flags are set using the
        !          1036: .b \-d
        !          1037: option;
        !          1038: the syntax is:
        !          1039: .(b
        !          1040: .ta \w'debug-option  'u
        !          1041: debug-flag:    \fB\-d\fP debug-list
        !          1042: debug-list:    debug-option [ , debug-option ]
        !          1043: debug-option:  debug-range [ . debug-level ]
        !          1044: debug-range:   integer | integer \- integer
        !          1045: debug-level:   integer
        !          1046: .)b
        !          1047: where spaces are for reading ease only.
        !          1048: For example,
        !          1049: .(b
        !          1050: \-d12  Set flag 12 to level 1
        !          1051: \-d12.3        Set flag 12 to level 3
        !          1052: \-d3-17        Set flags 3 through 17 to level 1
        !          1053: \-d3-17.4      Set flags 3 through 17 to level 4
        !          1054: .)b
        !          1055: For a complete list of the available debug flags
        !          1056: you will have to look at the code
        !          1057: (they are too dynamic to keep this documentation up to date).
        !          1058: .sh 2 "Trying a Different Configuration File"
        !          1059: .pp
        !          1060: An alternative configuration file
        !          1061: can be specified using the
        !          1062: .b \-C
        !          1063: flag; for example,
        !          1064: .(b
        !          1065: /usr/lib/sendmail \-Ctest.cf
        !          1066: .)b
        !          1067: uses the configuration file
        !          1068: .i test.cf
        !          1069: instead of the default
        !          1070: .i /usr/lib/sendmail.cf.
        !          1071: If the
        !          1072: .b \-C
        !          1073: flag has no value
        !          1074: it defaults to
        !          1075: .i sendmail.cf
        !          1076: in the current directory.
        !          1077: .sh 2 "Changing the Values of Options"
        !          1078: .pp
        !          1079: Options can be overridden using the
        !          1080: .b \-o
        !          1081: flag.
        !          1082: For example,
        !          1083: .(b
        !          1084: /usr/lib/sendmail \-oT2m
        !          1085: .)b
        !          1086: sets the
        !          1087: .b T
        !          1088: (timeout) option to two minutes
        !          1089: for this run only.
        !          1090: .sh 1 "TUNING"
        !          1091: .pp
        !          1092: There are a number of configuration parameters
        !          1093: you may want to change,
        !          1094: depending on the requirements of your site.
        !          1095: Most of these are set
        !          1096: using an option in the configuration file.
        !          1097: For example,
        !          1098: the line
        !          1099: .q OT3d
        !          1100: sets option
        !          1101: .q T
        !          1102: to the value
        !          1103: .q 3d
        !          1104: (three days).
        !          1105: .pp
        !          1106: Most of these options default appropriately for most sites.
        !          1107: However,
        !          1108: sites having very high mail loads may find they need to tune them
        !          1109: as appropriate for their mail load.
        !          1110: In particular,
        !          1111: sites experiencing a large number of small messages,
        !          1112: many of which are delivered to many recipients,
        !          1113: may find that they need to adjust the parameters
        !          1114: dealing with queue priorities.
        !          1115: .sh 2 "Timeouts"
        !          1116: .pp
        !          1117: All time intervals are set
        !          1118: using a scaled syntax.
        !          1119: For example,
        !          1120: .q 10m
        !          1121: represents ten minutes, whereas
        !          1122: .q 2h30m
        !          1123: represents two and a half hours.
        !          1124: The full set of scales is:
        !          1125: .(b
        !          1126: .ta 4n
        !          1127: s      seconds
        !          1128: m      minutes
        !          1129: h      hours
        !          1130: d      days
        !          1131: w      weeks
        !          1132: .)b
        !          1133: .sh 3 "Queue interval"
        !          1134: .pp
        !          1135: The argument to the
        !          1136: .b \-q
        !          1137: flag
        !          1138: specifies how often a subdaemon will run the queue.
        !          1139: This is typically set to between fifteen minutes
        !          1140: and one hour.
        !          1141: .sh 3 "Read timeouts"
        !          1142: .pp
        !          1143: It is possible to time out when reading the standard input
        !          1144: or when reading from a remote SMTP server.
        !          1145: Technically,
        !          1146: this is not acceptable within the published protocols.
        !          1147: However,
        !          1148: it might be appropriate to set it to something large
        !          1149: in certain environments
        !          1150: (such as an hour).
        !          1151: This will reduce the chance of large numbers of idle daemons
        !          1152: piling up on your system.
        !          1153: This timeout is set using the
        !          1154: .b r
        !          1155: option in the configuration file.
        !          1156: .sh 3 "Message timeouts"
        !          1157: .pp
        !          1158: After sitting in the queue for a few days,
        !          1159: a message will time out.
        !          1160: This is to insure that at least the sender is aware
        !          1161: of the inability to send a message.
        !          1162: The timeout is typically set to three days.
        !          1163: This timeout is set using the
        !          1164: .b T
        !          1165: option in the configuration file.
        !          1166: .pp
        !          1167: The time of submission is set in the queue,
        !          1168: rather than the amount of time left until timeout.
        !          1169: As a result, you can flush messages that have been hanging
        !          1170: for a short period
        !          1171: by running the queue
        !          1172: with a short message timeout.
        !          1173: For example,
        !          1174: .(b
        !          1175: /usr/lib/sendmail \-oT1d \-q
        !          1176: .)b
        !          1177: will run the queue
        !          1178: and flush anything that is one day old.
        !          1179: .sh 2 "Forking During Queue Runs"
        !          1180: .pp
        !          1181: By setting the
        !          1182: .b Y
        !          1183: option,
        !          1184: .i sendmail
        !          1185: will fork before each individual message
        !          1186: while running the queue.
        !          1187: This will prevent
        !          1188: .i sendmail
        !          1189: from consuming large amounts of memory,
        !          1190: so it may be useful in memory-poor environments.
        !          1191: However, if the
        !          1192: .b Y
        !          1193: option is not set,
        !          1194: .i sendmail
        !          1195: will keep track of hosts that are down during a queue run,
        !          1196: which can improve performance dramatically.
        !          1197: .sh 2 "Queue Priorities"
        !          1198: .pp
        !          1199: Every message is assigned a priority when it is first instantiated,
        !          1200: consisting of the message size (in bytes)
        !          1201: offset by the message class times the
        !          1202: .q "work class factor"
        !          1203: and the number of recipients times the
        !          1204: .q "work recipient factor."
        !          1205: The priority plus the creation time of the message
        !          1206: (in seconds since January 1, 1970)
        !          1207: are used to order the queue.
        !          1208: Higher numbers for the priority mean that the message will be processed later
        !          1209: when running the queue.
        !          1210: .pp
        !          1211: The message size is included so that large messages are penalized
        !          1212: relative to small messages.
        !          1213: The message class allows users to send
        !          1214: .q "high priority"
        !          1215: messages by including a
        !          1216: .q Precedence:
        !          1217: field in their message;
        !          1218: the value of this field is looked up in the
        !          1219: .b P
        !          1220: lines of the configuration file.
        !          1221: Since the number of recipients affects the amount of load a message presents
        !          1222: to the system,
        !          1223: this is also included into the priority.
        !          1224: .pp
        !          1225: The recipient and class factors
        !          1226: can be set in the configuration file using the
        !          1227: .b y
        !          1228: and
        !          1229: .b z
        !          1230: options respectively.
        !          1231: They default to 1000 (for the recipient factor)
        !          1232: and 1800
        !          1233: (for the class factor).
        !          1234: The initial priority is:
        !          1235: .(b
        !          1236: pri = size \- (class * z) + (nrcpt * y)
        !          1237: .)b
        !          1238: (Remember, higher values for this parameter actually mean
        !          1239: that the job will be treated with lower priority.)
        !          1240: .pp
        !          1241: The priority of a job can also be adjusted each time it is processed
        !          1242: (that is, each time an attempt is made to deliver it)
        !          1243: using the
        !          1244: .q "work time factor,"
        !          1245: set by the
        !          1246: .b Z
        !          1247: option.
        !          1248: This is added to the priority,
        !          1249: so it normally decreases the precedence of the job,
        !          1250: on the grounds that jobs that have failed many times
        !          1251: will tend to fail again in the future.
        !          1252: .sh 2 "Load Limiting"
        !          1253: .pp
        !          1254: .i Sendmail
        !          1255: can be asked to queue (but not deliver)
        !          1256: mail if the system load average gets too high
        !          1257: using the
        !          1258: .b x
        !          1259: option.
        !          1260: When the load average exceeds the value of the
        !          1261: .b x
        !          1262: option,
        !          1263: the delivery mode is set to
        !          1264: .b q
        !          1265: (queue only)
        !          1266: if the
        !          1267: .i "Queue Factor"
        !          1268: (\c
        !          1269: .b q
        !          1270: option)
        !          1271: divided by the difference in the current load average and the
        !          1272: .b x
        !          1273: option
        !          1274: plus one
        !          1275: exceeds the priority of the message \(em
        !          1276: that is, the message is queued iff:
        !          1277: .EQ
        !          1278: pri > QF over { LA - x + 1 }
        !          1279: .EN
        !          1280: The
        !          1281: .b q
        !          1282: option defaults to 10000,
        !          1283: so each point of load average is worth 10000
        !          1284: priority points
        !          1285: (as described above, that is, bytes + seconds + offsets).
        !          1286: .pp
        !          1287: For drastic cases,
        !          1288: the
        !          1289: .b X
        !          1290: option defines a load average at which sendmail will refuse
        !          1291: to accept network connections.
        !          1292: Locally generated mail
        !          1293: (including incoming UUCP mail)
        !          1294: is still accepted.
        !          1295: .sh 2 "Delivery Mode"
        !          1296: .pp
        !          1297: There are a number of delivery modes that
        !          1298: .i sendmail
        !          1299: can operate in,
        !          1300: set by the
        !          1301: .q d
        !          1302: configuration option.
        !          1303: These modes
        !          1304: specify how quickly mail will be delivered.
        !          1305: Legal modes are:
        !          1306: .(b
        !          1307: .ta 4n
        !          1308: i      deliver interactively (synchronously)
        !          1309: b      deliver in background (asynchronously)
        !          1310: q      queue only (don't deliver)
        !          1311: .)b
        !          1312: There are tradeoffs.
        !          1313: Mode
        !          1314: .q i
        !          1315: passes the maximum amount of information to the sender,
        !          1316: but is hardly ever necessary.
        !          1317: Mode
        !          1318: .q q
        !          1319: puts the minimum load on your machine,
        !          1320: but means that delivery may be delayed for up to the queue interval.
        !          1321: Mode
        !          1322: .q b
        !          1323: is probably a good compromise.
        !          1324: However, this mode can cause large numbers of processes
        !          1325: if you have a mailer that takes a long time to deliver a message.
        !          1326: .sh 2 "Log Level"
        !          1327: .pp
        !          1328: The level of logging can be set for sendmail.
        !          1329: The default using a standard configuration table is level 9.
        !          1330: The levels are as follows:
        !          1331: .ip 0
        !          1332: No logging.
        !          1333: .ip 1
        !          1334: Major problems only.
        !          1335: .ip 2
        !          1336: Message collections and failed deliveries.
        !          1337: .ip 3
        !          1338: Successful deliveries.
        !          1339: .ip 4
        !          1340: Messages being deferred
        !          1341: (due to a host being down, etc.).
        !          1342: .ip 5
        !          1343: Normal message queueups.
        !          1344: .ip 6
        !          1345: Unusual but benign incidents,
        !          1346: e.g.,
        !          1347: trying to process a locked queue file.
        !          1348: .ip 9
        !          1349: Log internal queue id to external message id mappings.
        !          1350: This can be useful for tracing a message
        !          1351: as it travels between several hosts.
        !          1352: .ip 12
        !          1353: Several messages that are basically only of interest
        !          1354: when debugging.
        !          1355: .ip 16
        !          1356: Verbose information regarding the queue.
        !          1357: .sh 2 "File Modes"
        !          1358: .pp
        !          1359: There are a number of files
        !          1360: that may have a number of modes.
        !          1361: The modes depend on what functionality you want
        !          1362: and the level of security you require.
        !          1363: .sh 3 "To suid or not to suid?"
        !          1364: .pp
        !          1365: .i Sendmail
        !          1366: can safely be made
        !          1367: setuid to root.
        !          1368: At the point where it is about to
        !          1369: .i exec \|(2)
        !          1370: a mailer,
        !          1371: it checks to see if the userid is zero;
        !          1372: if so,
        !          1373: it resets the userid and groupid to a default
        !          1374: (set by the
        !          1375: .b u
        !          1376: and
        !          1377: .b g
        !          1378: options).
        !          1379: (This can be overridden
        !          1380: by setting the
        !          1381: .b S
        !          1382: flag to the mailer
        !          1383: for mailers that are trusted
        !          1384: and must be called as root.)
        !          1385: However,
        !          1386: this will cause mail processing
        !          1387: to be accounted
        !          1388: (using
        !          1389: .i sa \|(8))
        !          1390: to root
        !          1391: rather than to the user sending the mail.
        !          1392: .sh 3 "Should my alias database be writable?"
        !          1393: .pp
        !          1394: At Berkeley
        !          1395: we have the alias database
        !          1396: (/usr/lib/aliases*)
        !          1397: mode 644.
        !          1398: While this is not as flexible as if the database
        !          1399: were more 666, it avoids potential security problems
        !          1400: with a globally writable database.
        !          1401: .pp
        !          1402: The database that
        !          1403: .i sendmail
        !          1404: actually used
        !          1405: is represented by the two files
        !          1406: .i aliases.dir
        !          1407: and
        !          1408: .i aliases.pag
        !          1409: (both in /usr/lib).
        !          1410: The mode on these files should match the mode
        !          1411: on /usr/lib/aliases.
        !          1412: If
        !          1413: .i aliases
        !          1414: is writable
        !          1415: and the
        !          1416: DBM
        !          1417: files
        !          1418: (\c
        !          1419: .i aliases.dir
        !          1420: and
        !          1421: .i aliases.pag )
        !          1422: are not,
        !          1423: users will be unable to reflect their desired changes
        !          1424: through to the actual database.
        !          1425: However,
        !          1426: if
        !          1427: .i aliases
        !          1428: is read-only
        !          1429: and the DBM files are writable,
        !          1430: a slightly sophisticated user
        !          1431: can arrange to steal mail anyway.
        !          1432: .pp
        !          1433: If your DBM files are not writable by the world
        !          1434: or you do not have auto-rebuild enabled
        !          1435: (with the
        !          1436: .q D
        !          1437: option),
        !          1438: then you must be careful to reconstruct the alias database
        !          1439: each time you change the text version:
        !          1440: .(b
        !          1441: newaliases
        !          1442: .)b
        !          1443: If this step is ignored or forgotten
        !          1444: any intended changes will also be ignored or forgotten.
        !          1445: .sh 1 "THE WHOLE SCOOP ON THE CONFIGURATION FILE"
        !          1446: .pp
        !          1447: This section describes the configuration file
        !          1448: in detail,
        !          1449: including hints on how to write one of your own
        !          1450: if you have to.
        !          1451: .pp
        !          1452: There is one point that should be made clear immediately:
        !          1453: the syntax of the configuration file
        !          1454: is designed to be reasonably easy to parse,
        !          1455: since this is done every time
        !          1456: .i sendmail
        !          1457: starts up,
        !          1458: rather than easy for a human to read or write.
        !          1459: On the
        !          1460: .q "future project"
        !          1461: list is a
        !          1462: configuration-file compiler.
        !          1463: .pp
        !          1464: An overview of the configuration file
        !          1465: is given first,
        !          1466: followed by details of the semantics.
        !          1467: .sh 2 "The Syntax"
        !          1468: .pp
        !          1469: The configuration file is organized as a series of lines,
        !          1470: each of which begins with a single character
        !          1471: defining the semantics for the rest of the line.
        !          1472: Lines beginning with a space or a tab
        !          1473: are continuation lines
        !          1474: (although the semantics are not well defined in many places).
        !          1475: Blank lines and lines beginning with a sharp symbol
        !          1476: (`#')
        !          1477: are comments.
        !          1478: .sh 3 "R and S \*- rewriting rules"
        !          1479: .pp
        !          1480: The core of address parsing
        !          1481: are the rewriting rules.
        !          1482: These are an ordered production system.
        !          1483: .i Sendmail
        !          1484: scans through the set of rewriting rules
        !          1485: looking for a match on the left hand side
        !          1486: (LHS)
        !          1487: of the rule.
        !          1488: When a rule matches,
        !          1489: the address is replaced by the right hand side
        !          1490: (RHS)
        !          1491: of the rule.
        !          1492: .pp
        !          1493: There are several sets of rewriting rules.
        !          1494: Some of the rewriting sets are used internally
        !          1495: and must have specific semantics.
        !          1496: Other rewriting sets
        !          1497: do not have specifically assigned semantics,
        !          1498: and may be referenced by the mailer definitions
        !          1499: or by other rewriting sets.
        !          1500: .pp
        !          1501: The syntax of these two commands are:
        !          1502: .(b F
        !          1503: .b S \c
        !          1504: .i n
        !          1505: .)b
        !          1506: Sets the current ruleset being collected to
        !          1507: .i n .
        !          1508: If you begin a ruleset more than once
        !          1509: it deletes the old definition.
        !          1510: .(b F
        !          1511: .b R \c
        !          1512: .i lhs
        !          1513: .i rhs
        !          1514: .i comments
        !          1515: .)b
        !          1516: The
        !          1517: fields must be separated
        !          1518: by at least one tab character;
        !          1519: there may be embedded spaces
        !          1520: in the fields.
        !          1521: The
        !          1522: .i lhs
        !          1523: is a pattern that is applied to the input.
        !          1524: If it matches,
        !          1525: the input is rewritten to the
        !          1526: .i rhs .
        !          1527: The
        !          1528: .i comments
        !          1529: are ignored.
        !          1530: .sh 3 "D \*- define macro"
        !          1531: .pp
        !          1532: Macros are named with a single character.
        !          1533: These may be selected from the entire ASCII set,
        !          1534: but user-defined macros
        !          1535: should be selected from the set of upper case letters only.
        !          1536: Lower case letters
        !          1537: and special symbols
        !          1538: are used internally.
        !          1539: .pp
        !          1540: The syntax for macro definitions is:
        !          1541: .(b F
        !          1542: .b D \c
        !          1543: .i x\|val
        !          1544: .)b
        !          1545: where
        !          1546: .i x
        !          1547: is the name of the macro
        !          1548: and
        !          1549: .i val
        !          1550: is the value it should have.
        !          1551: Macros can be interpolated in most places using the escape sequence
        !          1552: .b $ \c
        !          1553: .i x .
        !          1554: .sh 3 "C and F \*- define classes"
        !          1555: .pp
        !          1556: Classes of words may be defined
        !          1557: to match on the left hand side of rewriting rules,
        !          1558: where a
        !          1559: .q word
        !          1560: is a sequence of characters that do not contain characters
        !          1561: in the $o macro.
        !          1562: For example
        !          1563: a class of all local names for this site
        !          1564: might be created
        !          1565: so that attempts to send to oneself
        !          1566: can be eliminated.
        !          1567: These can either be defined directly in the configuration file
        !          1568: or read in from another file.
        !          1569: Classes may be given names
        !          1570: from the set of upper case letters.
        !          1571: Lower case letters and special characters
        !          1572: are reserved for system use.
        !          1573: .pp
        !          1574: The syntax is:
        !          1575: .(b F
        !          1576: .b C \c
        !          1577: .i c\|word1
        !          1578: .i word2...
        !          1579: .br
        !          1580: .b F \c
        !          1581: .i c\|file
        !          1582: .)b
        !          1583: The first form defines the class
        !          1584: .i c
        !          1585: to match any of the named words.
        !          1586: It is permissible to split them among multiple lines;
        !          1587: for example, the two forms:
        !          1588: .(b
        !          1589: CHmonet ucbmonet
        !          1590: .)b
        !          1591: and
        !          1592: .(b
        !          1593: CHmonet
        !          1594: CHucbmonet
        !          1595: .)b
        !          1596: are equivalent.
        !          1597: The second form
        !          1598: reads the elements of the class
        !          1599: .i c
        !          1600: from the named
        !          1601: .i file .
        !          1602: .sh 3 "M \*- define mailer"
        !          1603: .pp
        !          1604: Programs and interfaces to mailers
        !          1605: are defined in this line.
        !          1606: The format is:
        !          1607: .(b F
        !          1608: .b M \c
        !          1609: .i name ,
        !          1610: {\c
        !          1611: .i field =\c
        !          1612: .i value \|}*
        !          1613: .)b
        !          1614: where
        !          1615: .i name
        !          1616: is the name of the mailer
        !          1617: (used internally only)
        !          1618: and the
        !          1619: .q field=name
        !          1620: pairs define attributes of the mailer.
        !          1621: Fields are:
        !          1622: .(b
        !          1623: .ta 1i
        !          1624: Path   The pathname of the mailer
        !          1625: Flags  Special flags for this mailer
        !          1626: Sender A rewriting set for sender addresses
        !          1627: Recipient      A rewriting set for recipient addresses
        !          1628: Argv   An argument vector to pass to this mailer
        !          1629: Eol    The end-of-line string for this mailer
        !          1630: Maxsize        The maximum message length to this mailer
        !          1631: .)b
        !          1632: Only the first character of the field name is checked.
        !          1633: .sh 3 "H \*- define header"
        !          1634: .pp
        !          1635: The format of the header lines that sendmail inserts into the message
        !          1636: are defined by the
        !          1637: .b H
        !          1638: line.
        !          1639: The syntax of this line is:
        !          1640: .(b F
        !          1641: .b H [\c
        !          1642: .b ? \c
        !          1643: .i mflags \c
        !          1644: .b ? ]\c
        !          1645: .i hname \c
        !          1646: .b :
        !          1647: .i htemplate
        !          1648: .)b
        !          1649: Continuation lines in this spec
        !          1650: are reflected directly into the outgoing message.
        !          1651: The
        !          1652: .i htemplate
        !          1653: is macro expanded before insertion into the message.
        !          1654: If the
        !          1655: .i mflags
        !          1656: (surrounded by question marks)
        !          1657: are specified,
        !          1658: at least one of the specified flags
        !          1659: must be stated in the mailer definition
        !          1660: for this header to be automatically output.
        !          1661: If one of these headers is in the input
        !          1662: it is reflected to the output
        !          1663: regardless of these flags.
        !          1664: .pp
        !          1665: Some headers have special semantics
        !          1666: that will be described below.
        !          1667: .sh 3 "O \*- set option"
        !          1668: .pp
        !          1669: There are a number of
        !          1670: .q random
        !          1671: options that
        !          1672: can be set from a configuration file.
        !          1673: Options are represented by single characters.
        !          1674: The syntax of this line is:
        !          1675: .(b F
        !          1676: .b O \c
        !          1677: .i o\|value
        !          1678: .)b
        !          1679: This sets option
        !          1680: .i o
        !          1681: to be
        !          1682: .i value .
        !          1683: Depending on the option,
        !          1684: .i value
        !          1685: may be a string, an integer,
        !          1686: a boolean
        !          1687: (with legal values
        !          1688: .q t ,
        !          1689: .q T ,
        !          1690: .q f ,
        !          1691: or
        !          1692: .q F ;
        !          1693: the default is TRUE),
        !          1694: or
        !          1695: a time interval.
        !          1696: .sh 3 "T \*- define trusted users"
        !          1697: .pp
        !          1698: Trusted users
        !          1699: are those users who are permitted
        !          1700: to override the sender address
        !          1701: using the
        !          1702: .b \-f
        !          1703: flag.
        !          1704: These typically are
        !          1705: .q root,
        !          1706: .q uucp,
        !          1707: and
        !          1708: .q network,
        !          1709: but on some users it may be convenient
        !          1710: to extend this list to include other users,
        !          1711: perhaps to support
        !          1712: a separate
        !          1713: UUCP
        !          1714: login for each host.
        !          1715: The syntax of this line is:
        !          1716: .(b F
        !          1717: .b T \c
        !          1718: .i user1
        !          1719: .i user2 ...
        !          1720: .)b
        !          1721: There may be more than one of these lines.
        !          1722: .sh 3 "P \*- precedence definitions"
        !          1723: .pp
        !          1724: Values for the
        !          1725: .q "Precedence:"
        !          1726: field may be defined using the
        !          1727: .b P
        !          1728: control line.
        !          1729: The syntax of this field is:
        !          1730: .(b
        !          1731: \fBP\fP\fIname\fP\fB=\fP\fInum\fP
        !          1732: .)b
        !          1733: When the
        !          1734: .i name
        !          1735: is found in a
        !          1736: .q Precedence:
        !          1737: field,
        !          1738: the message class is set to
        !          1739: .i num .
        !          1740: Higher numbers mean higher precedence.
        !          1741: Numbers less than zero
        !          1742: have the special property
        !          1743: that error messages will not be returned.
        !          1744: The default precedence is zero.
        !          1745: For example,
        !          1746: our list of precedences is:
        !          1747: .(b
        !          1748: Pfirst-class=0
        !          1749: Pspecial-delivery=100
        !          1750: Pjunk=\-100
        !          1751: .)b
        !          1752: .sh 2 "The Semantics"
        !          1753: .pp
        !          1754: This section describes the semantics of the configuration file.
        !          1755: .sh 3 "Special macros, conditionals"
        !          1756: .pp
        !          1757: Macros are interpolated
        !          1758: using the construct
        !          1759: .b $ \c
        !          1760: .i x ,
        !          1761: where
        !          1762: .i x
        !          1763: is the name of the macro to be interpolated.
        !          1764: In particular,
        !          1765: lower case letters are reserved to have
        !          1766: special semantics,
        !          1767: used to pass information in or out of sendmail,
        !          1768: and some special characters are reserved to
        !          1769: provide conditionals, etc.
        !          1770: .pp
        !          1771: Conditionals can be specified using the syntax:
        !          1772: .(b
        !          1773: $?x text1 $| text2 $.
        !          1774: .)b
        !          1775: This interpolates
        !          1776: .i text1
        !          1777: if the macro
        !          1778: .b $x
        !          1779: is set,
        !          1780: and
        !          1781: .i text2
        !          1782: otherwise.
        !          1783: The
        !          1784: .q else
        !          1785: (\c
        !          1786: .b $| )
        !          1787: clause may be omitted.
        !          1788: .pp
        !          1789: The following macros
        !          1790: .i must
        !          1791: be defined to transmit information into
        !          1792: .i sendmail:
        !          1793: .(b
        !          1794: .ta 4n
        !          1795: e      The SMTP entry message
        !          1796: j      The \*(lqofficial\*(rq domain name for this site
        !          1797: l      The format of the UNIX from line
        !          1798: n      The name of the daemon (for error messages)
        !          1799: o      The set of "operators" in addresses
        !          1800: q      default format of sender address
        !          1801: .)b
        !          1802: The
        !          1803: .b $e
        !          1804: macro is printed out when SMTP starts up.
        !          1805: The first word must be the
        !          1806: .b $j
        !          1807: macro.
        !          1808: The
        !          1809: .b $j
        !          1810: macro
        !          1811: should be in RFC821 format.
        !          1812: The
        !          1813: .b $l
        !          1814: and
        !          1815: .b $n
        !          1816: macros can be considered constants
        !          1817: except under terribly unusual circumstances.
        !          1818: The
        !          1819: .b $o
        !          1820: macro consists of a list of characters
        !          1821: which will be considered tokens
        !          1822: and which will separate tokens
        !          1823: when doing parsing.
        !          1824: For example, if
        !          1825: .q @
        !          1826: were in the
        !          1827: .b $o
        !          1828: macro, then the input
        !          1829: .q a@b
        !          1830: would be scanned as three tokens:
        !          1831: .q a,
        !          1832: .q @,
        !          1833: and
        !          1834: .q b.
        !          1835: Finally, the
        !          1836: .b $q
        !          1837: macro specifies how an address should appear in a message
        !          1838: when it is defaulted.
        !          1839: For example, on our system these definitions are:
        !          1840: .(b
        !          1841: De$j Sendmail $v ready at $b
        !          1842: DnMAILER-DAEMON
        !          1843: DlFrom $g  $d
        !          1844: Do.:%@!^=/
        !          1845: Dq$g$?x ($x)$.
        !          1846: Dj$H.$D
        !          1847: .)b
        !          1848: An acceptable alternative for the
        !          1849: .b $q
        !          1850: macro is
        !          1851: .q "$?x$x $.<$g>" .
        !          1852: These correspond to the following two formats:
        !          1853: .(b
        !          1854: eric@Berkeley (Eric Allman)
        !          1855: Eric Allman <eric@Berkeley>
        !          1856: .)b
        !          1857: .pp
        !          1858: Some macros are defined by
        !          1859: .i sendmail
        !          1860: for interpolation into argv's for mailers
        !          1861: or for other contexts.
        !          1862: These macros are:
        !          1863: .(b
        !          1864: a      The origination date in RFC 822 format
        !          1865: b      The current date in RFC 822 format
        !          1866: c      The hop count
        !          1867: d      The date in UNIX (ctime) format
        !          1868: f      The sender (from) address
        !          1869: g      The sender address relative to the recipient
        !          1870: h      The recipient host
        !          1871: i      The queue id
        !          1872: p      Sendmail's pid
        !          1873: r      Protocol used
        !          1874: s      Sender's host name
        !          1875: t      A numeric representation of the current time
        !          1876: u      The recipient user
        !          1877: v      The version number of sendmail
        !          1878: w      The hostname of this site
        !          1879: x      The full name of the sender
        !          1880: z      The home directory of the recipient
        !          1881: .)b
        !          1882: .pp
        !          1883: There are three types of dates that can be used.
        !          1884: The
        !          1885: .b $a
        !          1886: and
        !          1887: .b $b
        !          1888: macros are in RFC 822 format;
        !          1889: .b $a
        !          1890: is the time as extracted from the
        !          1891: .q Date:
        !          1892: line of the message
        !          1893: (if there was one),
        !          1894: and
        !          1895: .b $b
        !          1896: is the current date and time
        !          1897: (used for postmarks).
        !          1898: If no
        !          1899: .q Date:
        !          1900: line is found in the incoming message,
        !          1901: .b $a
        !          1902: is set to the current time also.
        !          1903: The
        !          1904: .b $d
        !          1905: macro is equivalent to the
        !          1906: .b $a
        !          1907: macro in UNIX
        !          1908: (ctime)
        !          1909: format.
        !          1910: .pp
        !          1911: The
        !          1912: .b $f
        !          1913: macro is the id of the sender
        !          1914: as originally determined;
        !          1915: when mailing to a specific host
        !          1916: the
        !          1917: .b $g
        !          1918: macro is set to the address of the sender
        !          1919: .ul
        !          1920: relative to the recipient.
        !          1921: For example,
        !          1922: if I send to
        !          1923: .q bollard@matisse
        !          1924: from the machine
        !          1925: .q ucbarpa
        !          1926: the
        !          1927: .b $f
        !          1928: macro will be
        !          1929: .q eric
        !          1930: and the
        !          1931: .b $g
        !          1932: macro will be
        !          1933: .q eric@ucbarpa.
        !          1934: .pp
        !          1935: The
        !          1936: .b $x
        !          1937: macro is set to the full name of the sender.
        !          1938: This can be determined in several ways.
        !          1939: It can be passed as flag to
        !          1940: .i sendmail.
        !          1941: The second choice is the value of the
        !          1942: .q Full-name:
        !          1943: line in the header if it exists,
        !          1944: and the third choice is the comment field
        !          1945: of a
        !          1946: .q From:
        !          1947: line.
        !          1948: If all of these fail,
        !          1949: and if the message is being originated locally,
        !          1950: the full name is looked up in the
        !          1951: .i /etc/passwd
        !          1952: file.
        !          1953: .pp
        !          1954: When sending,
        !          1955: the
        !          1956: .b $h ,
        !          1957: .b $u ,
        !          1958: and
        !          1959: .b $z
        !          1960: macros get set to the host, user, and home directory
        !          1961: (if local)
        !          1962: of the recipient.
        !          1963: The first two are set from the
        !          1964: .b $@
        !          1965: and
        !          1966: .b $:
        !          1967: part of the rewriting rules, respectively.
        !          1968: .pp
        !          1969: The
        !          1970: .b $p
        !          1971: and
        !          1972: .b $t
        !          1973: macros are used to create unique strings
        !          1974: (e.g., for the
        !          1975: .q Message-Id:
        !          1976: field).
        !          1977: The
        !          1978: .b $i
        !          1979: macro is set to the queue id on this host;
        !          1980: if put into the timestamp line
        !          1981: it can be extremely useful for tracking messages.
        !          1982: The
        !          1983: .b $v
        !          1984: macro is set to be the version number of
        !          1985: .i sendmail ;
        !          1986: this is normally put in timestamps
        !          1987: and has been proven extremely useful for debugging.
        !          1988: The
        !          1989: .b $w
        !          1990: macro is set to the name of this host
        !          1991: if it can be determined.
        !          1992: The
        !          1993: .b $c
        !          1994: field is set to the
        !          1995: .q "hop count,"
        !          1996: i.e., the number of times this message has been processed.
        !          1997: This can be determined
        !          1998: by the
        !          1999: .b \-h
        !          2000: flag on the command line
        !          2001: or by counting the timestamps in the message.
        !          2002: .pp
        !          2003: The
        !          2004: .b $r
        !          2005: and
        !          2006: .b $s
        !          2007: fields are set to the protocol used to communicate with sendmail
        !          2008: and the sending hostname;
        !          2009: these are not supported in the current version.
        !          2010: .sh 3 "Special classes"
        !          2011: .pp
        !          2012: The class
        !          2013: .b $=w
        !          2014: is set to be the set of all names
        !          2015: this host is known by.
        !          2016: This can be used to match local hostnames.
        !          2017: .sh 3 "The left hand side"
        !          2018: .pp
        !          2019: The left hand side of rewriting rules contains a pattern.
        !          2020: Normal words are simply matched directly.
        !          2021: Metasyntax is introduced using a dollar sign.
        !          2022: The metasymbols are:
        !          2023: .(b
        !          2024: .ta \w'\fB$=\fP\fIx\fP  'u
        !          2025: \fB$*\fP       Match zero or more tokens
        !          2026: \fB$+\fP       Match one or more tokens
        !          2027: \fB$\-\fP      Match exactly one token
        !          2028: \fB$=\fP\fIx\fP        Match any token in class \fIx\fP
        !          2029: \fB$~\fP\fIx\fP        Match any token not in class \fIx\fP
        !          2030: .)b
        !          2031: If any of these match,
        !          2032: they are assigned to the symbol
        !          2033: .b $ \c
        !          2034: .i n
        !          2035: for replacement on the right hand side,
        !          2036: where
        !          2037: .i n
        !          2038: is the index in the LHS.
        !          2039: For example,
        !          2040: if the LHS:
        !          2041: .(b
        !          2042: $\-:$+
        !          2043: .)b
        !          2044: is applied to the input:
        !          2045: .(b
        !          2046: UCBARPA:eric
        !          2047: .)b
        !          2048: the rule will match, and the values passed to the RHS will be:
        !          2049: .(b
        !          2050: .ta 4n
        !          2051: $1     UCBARPA
        !          2052: $2     eric
        !          2053: .)b
        !          2054: .sh 3 "The right hand side"
        !          2055: .pp
        !          2056: When the left hand side of a rewriting rule matches,
        !          2057: the input is deleted and replaced by the right hand side.
        !          2058: Tokens are copied directly from the RHS
        !          2059: unless they begin with a dollar sign.
        !          2060: Metasymbols are:
        !          2061: .(b
        !          2062: .ta \w'$#mailer  'u
        !          2063: \fB$\fP\fIn\fP Substitute indefinite token \fIn\fP from LHS
        !          2064: \fB$[\fP\fIname\fP\fB$]\fP     Canonicalize \fIname\fP
        !          2065: \fB$>\fP\fIn\fP        \*(lqCall\*(rq ruleset \fIn\fP
        !          2066: \fB$#\fP\fImailer\fP   Resolve to \fImailer\fP
        !          2067: \fB$@\fP\fIhost\fP     Specify \fIhost\fP
        !          2068: \fB$:\fP\fIuser\fP     Specify \fIuser\fP
        !          2069: .)b
        !          2070: .pp
        !          2071: The
        !          2072: .b $ \c
        !          2073: .i n
        !          2074: syntax substitutes the corresponding value from a
        !          2075: .b $+ ,
        !          2076: .b $\- ,
        !          2077: .b $* ,
        !          2078: .b $= ,
        !          2079: or
        !          2080: .b $~
        !          2081: match on the LHS.
        !          2082: It may be used anywhere.
        !          2083: .pp
        !          2084: A host name enclosed between
        !          2085: .b $[
        !          2086: and
        !          2087: .b $]
        !          2088: is looked up using the
        !          2089: .i gethostent \|(3)
        !          2090: routines and replaced by the canonical name.
        !          2091: For example,
        !          2092: .q $[csam$]
        !          2093: might become
        !          2094: .q lbl-csam.arpa
        !          2095: and
        !          2096: .q $[[128.32.130.2]$]
        !          2097: would become
        !          2098: .q vangogh.berkeley.edu.
        !          2099: .pp
        !          2100: The
        !          2101: .b $> \c
        !          2102: .i n
        !          2103: syntax
        !          2104: causes the remainder of the line to be substituted as usual
        !          2105: and then passed as the argument to ruleset
        !          2106: .i n .
        !          2107: The final value of ruleset
        !          2108: .i n
        !          2109: then becomes
        !          2110: the substitution for this rule.
        !          2111: .pp
        !          2112: The
        !          2113: .b $#
        !          2114: syntax should
        !          2115: .i only
        !          2116: be used in ruleset zero.
        !          2117: It causes evaluation of the ruleset to terminate immediately,
        !          2118: and signals to sendmail that the address has completely resolved.
        !          2119: The complete syntax is:
        !          2120: .(b
        !          2121: \fB$#\fP\fImailer\fP\fB$@\fP\fIhost\fP\fB$:\fP\fIuser\fP
        !          2122: .)b
        !          2123: This specifies the
        !          2124: {mailer, host, user}
        !          2125: 3-tuple necessary to direct the mailer.
        !          2126: If the mailer is local
        !          2127: the host part may be omitted.
        !          2128: The
        !          2129: .i mailer
        !          2130: and
        !          2131: .i host
        !          2132: must be a single word,
        !          2133: but the
        !          2134: .i user
        !          2135: may be multi-part.
        !          2136: .pp
        !          2137: A RHS may also be preceded by a
        !          2138: .b $@
        !          2139: or a
        !          2140: .b $:
        !          2141: to control evaluation.
        !          2142: A
        !          2143: .b $@
        !          2144: prefix causes the ruleset to return with the remainder of the RHS
        !          2145: as the value.
        !          2146: A
        !          2147: .b $:
        !          2148: prefix causes the rule to terminate immediately,
        !          2149: but the ruleset to continue;
        !          2150: this can be used to avoid continued application of a rule.
        !          2151: The prefix is stripped before continuing.
        !          2152: .pp
        !          2153: The
        !          2154: .b $@
        !          2155: and
        !          2156: .b $:
        !          2157: prefixes may precede a
        !          2158: .b $>
        !          2159: spec;
        !          2160: for example:
        !          2161: .(b
        !          2162: .ta 8n
        !          2163: R$+    $:$>7$1
        !          2164: .)b
        !          2165: matches anything,
        !          2166: passes that to ruleset seven,
        !          2167: and continues;
        !          2168: the
        !          2169: .b $:
        !          2170: is necessary to avoid an infinite loop.
        !          2171: .pp
        !          2172: Substitution occurs in the order described,
        !          2173: that is,
        !          2174: parameters from the LHS are substituted,
        !          2175: hostnames are canonicalized,
        !          2176: .q subroutines
        !          2177: are called,
        !          2178: and finally
        !          2179: .b $# ,
        !          2180: .b $@ ,
        !          2181: and
        !          2182: .b $:
        !          2183: are processed.
        !          2184: .sh 3 "Semantics of rewriting rule sets"
        !          2185: .pp
        !          2186: There are five rewriting sets
        !          2187: that have specific semantics.
        !          2188: These are related as depicted by figure 2.
        !          2189: .(z
        !          2190: .hl
        !          2191: .ie n \{\
        !          2192: .(c
        !          2193:                     +---+
        !          2194:                  -->| 0 |-->resolved address
        !          2195:                 /   +---+
        !          2196:                /            +---+   +---+
        !          2197:               /        ---->| 1 |-->| S |--
        !          2198:        +---+ / +---+  /     +---+   +---+  \e    +---+
        !          2199: addr-->| 3 |-->| D |--                      --->| 4 |-->msg
        !          2200:        +---+   +---+  \e     +---+   +---+  /    +---+
        !          2201:                         --->| 2 |-->| R |--
        !          2202:                             +---+   +---+
        !          2203: .)c
        !          2204: 
        !          2205: .\}
        !          2206: .el .ie !"\*(.T"" \
        !          2207: \{\
        !          2208: .PS
        !          2209: boxwid = 0.3i
        !          2210: boxht = 0.3i
        !          2211: movewid = 0.3i
        !          2212: moveht = 0.3i
        !          2213: linewid = 0.3i
        !          2214: lineht = 0.3i
        !          2215: 
        !          2216:        box invis "addr"; arrow
        !          2217: Box3:  box "3"
        !          2218: A1:    arrow
        !          2219: BoxD:  box "D"; line; L1: Here
        !          2220: C:     [
        !          2221:        C1:     arrow; box "1"; arrow; box "S"; line; E1: Here
        !          2222:                move to C1 down 0.5; right
        !          2223:        C2:     arrow; box "2"; arrow; box "R"; line; E2: Here
        !          2224:        ] with .w at L1 + (0.5, 0)
        !          2225:        move to C.e right 0.5
        !          2226: L4:    arrow; box "4"; arrow; box invis "msg"
        !          2227:        line from L1 to C.C1
        !          2228:        line from L1 to C.C2
        !          2229:        line from C.E1 to L4
        !          2230:        line from C.E2 to L4
        !          2231:        move to BoxD.n up 0.6; right
        !          2232: Box0:  arrow; box "0"
        !          2233:        arrow; box invis "resolved address" width 1.3
        !          2234:        line from 1/3 of the way between A1 and BoxD.w to Box0
        !          2235: .PE
        !          2236: .\}
        !          2237: .el .sp 2i
        !          2238: .ce
        !          2239: Figure 2 \*- Rewriting set semantics
        !          2240: .(c
        !          2241: D \*- sender domain addition
        !          2242: S \*- mailer-specific sender rewriting
        !          2243: R \*- mailer-specific recipient rewriting
        !          2244: .)c
        !          2245: .hl
        !          2246: .)z
        !          2247: .pp
        !          2248: Ruleset three
        !          2249: should turn the address into
        !          2250: .q "canonical form."
        !          2251: This form should have the basic syntax:
        !          2252: .(b
        !          2253: local-part@host-domain-spec
        !          2254: .)b
        !          2255: If no
        !          2256: .q @
        !          2257: sign is specified,
        !          2258: then the
        !          2259: host-domain-spec
        !          2260: .i may
        !          2261: be appended from the
        !          2262: sender address
        !          2263: (if the
        !          2264: .b C
        !          2265: flag is set in the mailer definition
        !          2266: corresponding to the
        !          2267: .i sending
        !          2268: mailer).
        !          2269: Ruleset three
        !          2270: is applied by sendmail
        !          2271: before doing anything with any address.
        !          2272: .pp
        !          2273: Ruleset zero
        !          2274: is applied after ruleset three
        !          2275: to addresses that are going to actually specify recipients.
        !          2276: It must resolve to a
        !          2277: .i "{mailer, host, user}"
        !          2278: triple.
        !          2279: The
        !          2280: .i mailer
        !          2281: must be defined in the mailer definitions
        !          2282: from the configuration file.
        !          2283: The
        !          2284: .i host
        !          2285: is defined into the
        !          2286: .b $h
        !          2287: macro
        !          2288: for use in the argv expansion of the specified mailer.
        !          2289: .pp
        !          2290: Rulesets one and two
        !          2291: are applied to all sender and recipient addresses respectively.
        !          2292: They are applied before any specification
        !          2293: in the mailer definition.
        !          2294: They must never resolve.
        !          2295: .pp
        !          2296: Ruleset four is applied to all addresses
        !          2297: in the message.
        !          2298: It is typically used
        !          2299: to translate internal to external form.
        !          2300: .sh 3 "Mailer flags etc."
        !          2301: .pp
        !          2302: There are a number of flags that may be associated with each mailer,
        !          2303: each identified by a letter of the alphabet.
        !          2304: Many of them are assigned semantics internally.
        !          2305: These are detailed in Appendix C.
        !          2306: Any other flags may be used freely
        !          2307: to conditionally assign headers to messages
        !          2308: destined for particular mailers.
        !          2309: .sh 3 "The \*(lqerror\*(rq mailer"
        !          2310: .pp
        !          2311: The mailer with the special name
        !          2312: .q error
        !          2313: can be used to generate a user error.
        !          2314: The (optional) host field is a numeric exit status to be returned,
        !          2315: and the user field is a message to be printed.
        !          2316: For example, the entry:
        !          2317: .(b
        !          2318: $#error$:Host unknown in this domain
        !          2319: .)b
        !          2320: on the RHS of a rule
        !          2321: will cause the specified error to be generated
        !          2322: if the LHS matches.
        !          2323: This mailer is only functional in ruleset zero.
        !          2324: .sh 2 "Building a Configuration File From Scratch"
        !          2325: .pp
        !          2326: Building a configuration table from scratch is an extremely difficult job.
        !          2327: Fortunately,
        !          2328: it is almost never necessary to do so;
        !          2329: nearly every situation that may come up
        !          2330: may be resolved by changing an existing table.
        !          2331: In any case,
        !          2332: it is critical that you understand what it is that you are trying to do
        !          2333: and come up with a philosophy for the configuration table.
        !          2334: This section is intended to explain what the real purpose
        !          2335: of a configuration table is
        !          2336: and to give you some ideas
        !          2337: for what your philosophy might be.
        !          2338: .sh 3 "What you are trying to do"
        !          2339: .pp
        !          2340: The configuration table has three major purposes.
        !          2341: The first and simplest
        !          2342: is to set up the environment for
        !          2343: .i sendmail .
        !          2344: This involves setting the options,
        !          2345: defining a few critical macros,
        !          2346: etc.
        !          2347: Since these are described in other places,
        !          2348: we will not go into more detail here.
        !          2349: .pp
        !          2350: The second purpose is to rewrite addresses in the message.
        !          2351: This should typically be done in two phases.
        !          2352: The first phase maps addresses in any format
        !          2353: into a canonical form.
        !          2354: This should be done in ruleset three.
        !          2355: The second phase maps this canonical form
        !          2356: into the syntax appropriate for the receiving mailer.
        !          2357: .i Sendmail
        !          2358: does this in three subphases.
        !          2359: Rulesets one and two
        !          2360: are applied to all sender and recipient addresses respectively.
        !          2361: After this,
        !          2362: you may specify per-mailer rulesets
        !          2363: for both sender and recipient addresses;
        !          2364: this allows mailer-specific customization.
        !          2365: Finally,
        !          2366: ruleset four is applied to do any default conversion
        !          2367: to external form.
        !          2368: .pp
        !          2369: The third purpose
        !          2370: is to map addresses into the actual set of instructions
        !          2371: necessary to get the message delivered.
        !          2372: Ruleset zero must resolve to the internal form,
        !          2373: which is in turn used as a pointer to a mailer descriptor.
        !          2374: The mailer descriptor describes the interface requirements
        !          2375: of the mailer.
        !          2376: .sh 3 "Philosophy"
        !          2377: .pp
        !          2378: The particular philosophy you choose will depend heavily
        !          2379: on the size and structure of your organization.
        !          2380: I will present a few possible philosophies here.
        !          2381: .pp
        !          2382: One general point applies to all of these philosophies:
        !          2383: it is almost always a mistake
        !          2384: to try to do full name resolution.
        !          2385: For example,
        !          2386: if you are trying to get names of the form
        !          2387: .q user@host
        !          2388: to the Arpanet,
        !          2389: it does not pay to route them to
        !          2390: .q xyzvax!decvax!ucbvax!c70:user@host
        !          2391: since you then depend on several links not under your control.
        !          2392: The best approach to this problem
        !          2393: is to simply forward to
        !          2394: .q xyzvax!user@host
        !          2395: and let xyzvax
        !          2396: worry about it from there.
        !          2397: In summary,
        !          2398: just get the message closer to the destination,
        !          2399: rather than determining the full path.
        !          2400: .sh 4 "Large site, many hosts \*- minimum information"
        !          2401: .pp
        !          2402: Berkeley is an example of a large site,
        !          2403: i.e., more than two or three hosts
        !          2404: and multiple mail connections.
        !          2405: We have decided that the only reasonable philosophy
        !          2406: in our environment
        !          2407: is to designate one host as the guru for our site.
        !          2408: It must be able to resolve any piece of mail it receives.
        !          2409: The other sites should have the minimum amount of information
        !          2410: they can get away with.
        !          2411: In addition,
        !          2412: any information they do have
        !          2413: should be hints rather than solid information.
        !          2414: .pp
        !          2415: For example,
        !          2416: a typical site on our local ether network is
        !          2417: .q monet.
        !          2418: When monet receives mail for delivery,
        !          2419: it checks whether it knows
        !          2420: that the destination host is directly reachable;
        !          2421: if so, mail is sent to that host.
        !          2422: If it receives mail for any unknown host,
        !          2423: it just passes it directly to
        !          2424: .q ucbvax,
        !          2425: our master host.
        !          2426: Ucbvax may determine that the host name is illegal
        !          2427: and reject the message,
        !          2428: or may be able to do delivery.
        !          2429: However, it is important to note that when a new mail connection is added,
        !          2430: the only host that
        !          2431: .i must
        !          2432: have its tables updated
        !          2433: is ucbvax;
        !          2434: the others
        !          2435: .i may
        !          2436: be updated if convenient,
        !          2437: but this is not critical.
        !          2438: .pp
        !          2439: This picture is slightly muddied
        !          2440: due to network connections that are not actually located
        !          2441: on ucbvax.
        !          2442: For example,
        !          2443: some UUCP connections are currently on
        !          2444: .q ucbarpa.
        !          2445: However,
        !          2446: monet
        !          2447: .i "does not"
        !          2448: know about this;
        !          2449: the information is hidden totally between ucbvax and ucbarpa.
        !          2450: Mail going from monet to a UUCP host
        !          2451: is transferred via the ethernet
        !          2452: from monet to ucbvax,
        !          2453: then via the ethernet from ucbvax to ucbarpa,
        !          2454: and then is submitted to UUCP.
        !          2455: Although this involves some extra hops,
        !          2456: we feel this is an acceptable tradeoff.
        !          2457: .pp
        !          2458: An interesting point is that it would be possible
        !          2459: to update monet
        !          2460: to send appropriate UUCP mail directly to ucbarpa
        !          2461: if the load got too high;
        !          2462: if monet failed to note a host as connected to ucbarpa
        !          2463: it would go via ucbvax as before,
        !          2464: and if monet incorrectly sent a message to ucbarpa
        !          2465: it would still be sent by ucbarpa
        !          2466: to ucbvax as before.
        !          2467: The only problem that can occur is loops,
        !          2468: for example,
        !          2469: if ucbarpa thought that ucbvax had the UUCP connection
        !          2470: and vice versa.
        !          2471: For this reason,
        !          2472: updates should
        !          2473: .i always
        !          2474: happen to the master host first.
        !          2475: .pp
        !          2476: This philosophy results as much from the need
        !          2477: to have a single source for the configuration files
        !          2478: (typically built using
        !          2479: .i m4 \|(1)
        !          2480: or some similar tool)
        !          2481: as any logical need.
        !          2482: Maintaining more than three separate tables by hand
        !          2483: is essentially an impossible job.
        !          2484: .sh 4 "Small site \*- complete information"
        !          2485: .pp
        !          2486: A small site
        !          2487: (two or three hosts and few external connections)
        !          2488: may find it more reasonable to have complete information
        !          2489: at each host.
        !          2490: This would require that each host
        !          2491: know exactly where each network connection is,
        !          2492: possibly including the names of each host on that network.
        !          2493: As long as the site remains small
        !          2494: and the the configuration remains relatively static,
        !          2495: the update problem will probably not be too great.
        !          2496: .sh 4 "Single host"
        !          2497: .pp
        !          2498: This is in some sense the trivial case.
        !          2499: The only major issue is trying to insure that you don't
        !          2500: have to know too much about your environment.
        !          2501: For example,
        !          2502: if you have a UUCP connection
        !          2503: you might find it useful to know about the names of hosts
        !          2504: connected directly to you,
        !          2505: but this is really not necessary
        !          2506: since this may be determined from the syntax.
        !          2507: .sh 3 "Relevant issues"
        !          2508: .pp
        !          2509: The canonical form you use
        !          2510: should almost certainly be as specified in
        !          2511: the Arpanet protocols
        !          2512: RFC819 and RFC822.
        !          2513: Copies of these RFC's are included on the
        !          2514: .i sendmail
        !          2515: tape
        !          2516: as
        !          2517: .i doc/rfc819.lpr
        !          2518: and
        !          2519: .i doc/rfc822.lpr .
        !          2520: .pp
        !          2521: RFC822
        !          2522: describes the format of the mail message itself.
        !          2523: .i Sendmail
        !          2524: follows this RFC closely,
        !          2525: to the extent that many of the standards described in this document
        !          2526: can not be changed without changing the code.
        !          2527: In particular,
        !          2528: the following characters have special interpretations:
        !          2529: .(b
        !          2530: < > ( ) " \e
        !          2531: .)b
        !          2532: Any attempt to use these characters for other than their RFC822
        !          2533: purpose in addresses is probably doomed to disaster.
        !          2534: .pp
        !          2535: RFC819
        !          2536: describes the specifics of the domain-based addressing.
        !          2537: This is touched on in RFC822 as well.
        !          2538: Essentially each host is given a name
        !          2539: which is a right-to-left dot qualified pseudo-path
        !          2540: from a distinguished root.
        !          2541: The elements of the path need not be physical hosts;
        !          2542: the domain is logical rather than physical.
        !          2543: For example,
        !          2544: at Berkeley
        !          2545: one legal host might be
        !          2546: .q a.CC.Berkeley.EDU ;
        !          2547: reading from right to left,
        !          2548: .q EDU
        !          2549: is a top level domain
        !          2550: comprising educational institutions,
        !          2551: .q Berkeley
        !          2552: is a logical domain name,
        !          2553: .q CC
        !          2554: represents the Computer Center,
        !          2555: (in this case a strictly logical entity),
        !          2556: and
        !          2557: .q a
        !          2558: is a host in the Computer Center.
        !          2559: .pp
        !          2560: Beware when reading RFC819
        !          2561: that there are a number of errors in it.
        !          2562: .sh 3 "How to proceed"
        !          2563: .pp
        !          2564: Once you have decided on a philosophy,
        !          2565: it is worth examining the available configuration tables
        !          2566: to decide if any of them are close enough
        !          2567: to steal major parts of.
        !          2568: Even under the worst of conditions,
        !          2569: there is a fair amount of boiler plate that can be collected safely.
        !          2570: .pp
        !          2571: The next step is to build ruleset three.
        !          2572: This will be the hardest part of the job.
        !          2573: Beware of doing too much to the address in this ruleset,
        !          2574: since anything you do will reflect through
        !          2575: to the message.
        !          2576: In particular,
        !          2577: stripping of local domains is best deferred,
        !          2578: since this can leave you with addresses with no domain spec at all.
        !          2579: Since
        !          2580: .i sendmail
        !          2581: likes to append the sending domain to addresses with no domain,
        !          2582: this can change the semantics of addresses.
        !          2583: Also try to avoid
        !          2584: fully qualifying domains in this ruleset.
        !          2585: Although technically legal,
        !          2586: this can lead to unpleasantly and unnecessarily long addresses
        !          2587: reflected into messages.
        !          2588: The Berkeley configuration files
        !          2589: define ruleset nine
        !          2590: to qualify domain names and strip local domains.
        !          2591: This is called from ruleset zero
        !          2592: to get all addresses into a cleaner form.
        !          2593: .pp
        !          2594: Once you have ruleset three finished,
        !          2595: the other rulesets should be relatively trivial.
        !          2596: If you need hints,
        !          2597: examine the supplied configuration tables.
        !          2598: .sh 3 "Testing the rewriting rules \*- the \-bt flag"
        !          2599: .pp
        !          2600: When you build a configuration table,
        !          2601: you can do a certain amount of testing
        !          2602: using the
        !          2603: .q "test mode"
        !          2604: of
        !          2605: .i sendmail .
        !          2606: For example,
        !          2607: you could invoke
        !          2608: .i sendmail
        !          2609: as:
        !          2610: .(b
        !          2611: sendmail \-bt \-Ctest.cf
        !          2612: .)b
        !          2613: which would read the configuration file
        !          2614: .q test.cf
        !          2615: and enter test mode.
        !          2616: In this mode,
        !          2617: you enter lines of the form:
        !          2618: .(b
        !          2619: rwset address
        !          2620: .)b
        !          2621: where
        !          2622: .i rwset
        !          2623: is the rewriting set you want to use
        !          2624: and
        !          2625: .i address
        !          2626: is an address to apply the set to.
        !          2627: Test mode shows you the steps it takes
        !          2628: as it proceeds,
        !          2629: finally showing you the address it ends up with.
        !          2630: You may use a comma separated list of rwsets
        !          2631: for sequential application of rules to an input;
        !          2632: ruleset three is always applied first.
        !          2633: For example:
        !          2634: .(b
        !          2635: 1,21,4 monet:bollard
        !          2636: .)b
        !          2637: first applies ruleset three to the input
        !          2638: .q monet:bollard.
        !          2639: Ruleset one is then applied to the output of ruleset three,
        !          2640: followed similarly by rulesets twenty-one and four.
        !          2641: .pp
        !          2642: If you need more detail,
        !          2643: you can also use the
        !          2644: .q \-d21
        !          2645: flag to turn on more debugging.
        !          2646: For example,
        !          2647: .(b
        !          2648: sendmail \-bt \-d21.99
        !          2649: .)b
        !          2650: turns on an incredible amount of information;
        !          2651: a single word address
        !          2652: is probably going to print out several pages worth of information.
        !          2653: .sh 3 "Building mailer descriptions"
        !          2654: .pp
        !          2655: To add an outgoing mailer to your mail system,
        !          2656: you will have to define the characteristics of the mailer.
        !          2657: .pp
        !          2658: Each mailer must have an internal name.
        !          2659: This can be arbitrary,
        !          2660: except that the names
        !          2661: .q local
        !          2662: and
        !          2663: .q prog
        !          2664: must be defined.
        !          2665: .pp
        !          2666: The pathname of the mailer must be given in the P field.
        !          2667: If this mailer should be accessed via an IPC connection,
        !          2668: use the string
        !          2669: .q [IPC]
        !          2670: instead.
        !          2671: .pp
        !          2672: The F field defines the mailer flags.
        !          2673: You should specify an
        !          2674: .q f
        !          2675: or
        !          2676: .q r
        !          2677: flag to pass the name of the sender as a
        !          2678: .b \-f
        !          2679: or
        !          2680: .b \-r
        !          2681: flag respectively.
        !          2682: These flags are only passed if they were passed to
        !          2683: .i sendmail,
        !          2684: so that mailers that give errors under some circumstances
        !          2685: can be placated.
        !          2686: If the mailer is not picky
        !          2687: you can just specify
        !          2688: .q "\-f $g"
        !          2689: in the argv template.
        !          2690: If the mailer must be called as
        !          2691: .b root
        !          2692: the
        !          2693: .q S
        !          2694: flag should be given;
        !          2695: this will not reset the userid
        !          2696: before calling the mailer\**.
        !          2697: .(f
        !          2698: \**\c
        !          2699: .i Sendmail
        !          2700: must be running setuid to root
        !          2701: for this to work.
        !          2702: .)f
        !          2703: If this mailer is local
        !          2704: (i.e., will perform final delivery
        !          2705: rather than another network hop)
        !          2706: the
        !          2707: .q l
        !          2708: flag should be given.
        !          2709: Quote characters
        !          2710: (backslashes and " marks)
        !          2711: can be stripped from addresses if the
        !          2712: .q s
        !          2713: flag is specified;
        !          2714: if this is not given
        !          2715: they are passed through.
        !          2716: If the mailer is capable of sending to more than one user
        !          2717: on the same host
        !          2718: in a single transaction
        !          2719: the
        !          2720: .q m
        !          2721: flag should be stated.
        !          2722: If this flag is on,
        !          2723: then the argv template containing
        !          2724: .b $u
        !          2725: will be repeated for each unique user
        !          2726: on a given host.
        !          2727: The
        !          2728: .q e
        !          2729: flag will mark the mailer as being
        !          2730: .q expensive,
        !          2731: which will cause
        !          2732: .i sendmail
        !          2733: to defer connection
        !          2734: until a queue run\**.
        !          2735: .(f
        !          2736: \**The
        !          2737: .q c
        !          2738: configuration option must be given
        !          2739: for this to be effective.
        !          2740: .)f
        !          2741: .pp
        !          2742: An unusual case is the
        !          2743: .q C
        !          2744: flag.
        !          2745: This flag applies to the mailer that the message is received from,
        !          2746: rather than the mailer being sent to;
        !          2747: if set,
        !          2748: the domain spec of the sender
        !          2749: (i.e., the
        !          2750: .q @host.domain
        !          2751: part)
        !          2752: is saved
        !          2753: and is appended to any addresses in the message
        !          2754: that do not already contain a domain spec.
        !          2755: For example,
        !          2756: a message of the form:
        !          2757: .(b
        !          2758: From: eric@ucbarpa
        !          2759: To: wnj@monet, mckusick
        !          2760: .)b
        !          2761: will be modified to:
        !          2762: .(b
        !          2763: From: eric@ucbarpa
        !          2764: To: wnj@monet, mckusick@ucbarpa
        !          2765: .)b
        !          2766: .i "if and only if"
        !          2767: the
        !          2768: .q C
        !          2769: flag is defined in the mailer corresponding to
        !          2770: .q eric@ucbarpa.
        !          2771: .pp
        !          2772: Other flags are described
        !          2773: in Appendix C.
        !          2774: .pp
        !          2775: The S and R fields in the mailer description
        !          2776: are per-mailer rewriting sets
        !          2777: to be applied to sender and recipient addresses
        !          2778: respectively.
        !          2779: These are applied after the sending domain is appended
        !          2780: and the general rewriting sets
        !          2781: (numbers one and two)
        !          2782: are applied,
        !          2783: but before the output rewrite
        !          2784: (ruleset four)
        !          2785: is applied.
        !          2786: A typical use is to append the current domain
        !          2787: to addresses that do not already have a domain.
        !          2788: For example,
        !          2789: a header of the form:
        !          2790: .(b
        !          2791: From: eric
        !          2792: .)b
        !          2793: might be changed to be:
        !          2794: .(b
        !          2795: From: eric@ucbarpa
        !          2796: .)b
        !          2797: or
        !          2798: .(b
        !          2799: From: ucbvax!eric
        !          2800: .)b
        !          2801: depending on the domain it is being shipped into.
        !          2802: These sets can also be used
        !          2803: to do special purpose output rewriting
        !          2804: in cooperation with ruleset four.
        !          2805: .pp
        !          2806: The E field defines the string to use
        !          2807: as an end-of-line indication.
        !          2808: A string containing only newline is the default.
        !          2809: The usual backslash escapes
        !          2810: (\er, \en, \ef, \eb)
        !          2811: may be used.
        !          2812: .pp
        !          2813: Finally,
        !          2814: an argv template is given as the E field.
        !          2815: It may have embedded spaces.
        !          2816: If there is no argv with a
        !          2817: .b $u
        !          2818: macro in it,
        !          2819: .i sendmail
        !          2820: will speak SMTP
        !          2821: to the mailer.
        !          2822: If the pathname for this mailer is
        !          2823: .q [IPC],
        !          2824: the argv should be
        !          2825: .(b
        !          2826: IPC $h [ \fIport\fP ]
        !          2827: .)b
        !          2828: where
        !          2829: .i port
        !          2830: is the optional port number
        !          2831: to connect to.
        !          2832: .pp
        !          2833: For example,
        !          2834: the specifications:
        !          2835: .(b
        !          2836: .ta \w'Mlocal, 'u +\w'P=/bin/mail, 'u +\w'F=rlsm, 'u +\w'S=10, 'u +\w'R=20, 'u
        !          2837: Mlocal,        P=/bin/mail,    F=rlsm  S=10,   R=20,   A=mail \-d $u
        !          2838: Mether,        P=[IPC],        F=meC,  S=11,   R=21,   A=IPC $h, M=100000
        !          2839: .)b
        !          2840: specifies a mailer to do local delivery
        !          2841: and a mailer for ethernet delivery.
        !          2842: The first is called
        !          2843: .q local,
        !          2844: is located in the file
        !          2845: .q /bin/mail,
        !          2846: takes a picky
        !          2847: .b \-r
        !          2848: flag,
        !          2849: does local delivery,
        !          2850: quotes should be stripped from addresses,
        !          2851: and multiple users can be delivered at once;
        !          2852: ruleset ten
        !          2853: should be applied to sender addresses in the message
        !          2854: and ruleset twenty
        !          2855: should be applied to recipient addresses;
        !          2856: the argv to send to a message will be the word
        !          2857: .q mail,
        !          2858: the word
        !          2859: .q \-d,
        !          2860: and words containing the name of the receiving user.
        !          2861: If a
        !          2862: .b \-r
        !          2863: flag is inserted
        !          2864: it will be between the words
        !          2865: .q mail
        !          2866: and
        !          2867: .q \-d.
        !          2868: The second mailer is called
        !          2869: .q ether,
        !          2870: it should be connected to via an IPC connection,
        !          2871: it can handle multiple users at once,
        !          2872: connections should be deferred,
        !          2873: and any domain from the sender address
        !          2874: should be appended to any receiver name
        !          2875: without a domain;
        !          2876: sender addresses should be processed by ruleset eleven
        !          2877: and recipient addresses by ruleset twenty-one.
        !          2878: There is a 100,000 byte limit on messages passed through this mailer.
        !          2879: .++ A
        !          2880: .+c "COMMAND LINE FLAGS"
        !          2881: .ba 0
        !          2882: .nr ii 1i
        !          2883: .pp
        !          2884: Arguments must be presented with flags before addresses.
        !          2885: The flags are:
        !          2886: .ip "\-f\ \fIaddr\fP"
        !          2887: The sender's machine address is
        !          2888: .i addr .
        !          2889: This flag is ignored unless the real user
        !          2890: is listed as a
        !          2891: .q "trusted user"
        !          2892: or if
        !          2893: .i addr
        !          2894: contains an exclamation point
        !          2895: (because of certain restrictions in UUCP).
        !          2896: .ip "\-r\ \fIaddr\fP"
        !          2897: An obsolete form of
        !          2898: .b \-f .
        !          2899: .ip "\-h\ \fIcnt\fP"
        !          2900: Sets the
        !          2901: .q "hop count"
        !          2902: to
        !          2903: .i cnt .
        !          2904: This represents the number of times this message has been processed
        !          2905: by
        !          2906: .i sendmail
        !          2907: (to the extent that it is supported by the underlying networks).
        !          2908: .i Cnt
        !          2909: is incremented during processing,
        !          2910: and if it reaches
        !          2911: MAXHOP
        !          2912: (currently 30)
        !          2913: .i sendmail
        !          2914: throws away the message with an error.
        !          2915: .ip \-F\fIname\fP
        !          2916: Sets the full name of this user to
        !          2917: .i name .
        !          2918: .ip \-n
        !          2919: Don't do aliasing or forwarding.
        !          2920: .ip \-t
        !          2921: Read the header for
        !          2922: .q To: ,
        !          2923: .q Cc: ,
        !          2924: and
        !          2925: .q Bcc:
        !          2926: lines, and send to everyone listed in those lists.
        !          2927: The
        !          2928: .q Bcc:
        !          2929: line will be deleted before sending.
        !          2930: Any addresses in the argument vector will be deleted
        !          2931: from the send list.
        !          2932: .ip \-b\fIx\fP
        !          2933: Set operation mode to
        !          2934: .i x .
        !          2935: Operation modes are:
        !          2936: .(b
        !          2937: .ta 4n
        !          2938: m      Deliver mail (default)
        !          2939: a      Run in arpanet mode (see below)
        !          2940: s      Speak SMTP on input side
        !          2941: d      Run as a daemon
        !          2942: t      Run in test mode
        !          2943: v      Just verify addresses, don't collect or deliver
        !          2944: i      Initialize the alias database
        !          2945: p      Print the mail queue
        !          2946: z      Freeze the configuration file
        !          2947: .)b
        !          2948: The special processing for the
        !          2949: ARPANET
        !          2950: includes reading the
        !          2951: .q "From:"
        !          2952: line from the header to find the sender,
        !          2953: printing
        !          2954: ARPANET
        !          2955: style messages
        !          2956: (preceded by three digit reply codes for compatibility with
        !          2957: the FTP protocol
        !          2958: [Neigus73, Postel74, Postel77]),
        !          2959: and ending lines of error messages with <CRLF>.
        !          2960: .ip \-q\fItime\fP
        !          2961: Try to process the queued up mail.
        !          2962: If the time is given,
        !          2963: a sendmail will run through the queue at the specified interval
        !          2964: to deliver queued mail;
        !          2965: otherwise, it only runs once.
        !          2966: .ip \-C\fIfile\fP
        !          2967: Use a different configuration file.
        !          2968: .i Sendmail
        !          2969: runs as the invoking user (rather than root)
        !          2970: when this flag is specified.
        !          2971: .ip \-d\fIlevel\fP
        !          2972: Set debugging level.
        !          2973: .ip \-o\fIx\|value\fP
        !          2974: Set option
        !          2975: .i x
        !          2976: to the specified
        !          2977: .i value .
        !          2978: These options are described in Appendix B.
        !          2979: .pp
        !          2980: There are a number of options that may be specified as
        !          2981: primitive flags
        !          2982: (provided for compatibility with
        !          2983: .i delivermail ).
        !          2984: These are the e, i, m, and v options.
        !          2985: Also,
        !          2986: the f option
        !          2987: may be specified as the
        !          2988: .b \-s
        !          2989: flag.
        !          2990: .+c "CONFIGURATION OPTIONS"
        !          2991: .pp
        !          2992: The following options may be set using the
        !          2993: .b \-o
        !          2994: flag on the command line
        !          2995: or the
        !          2996: .b O
        !          2997: line in the configuration file.
        !          2998: Many of them cannot be specified unless the invoking user is trusted.
        !          2999: .nr ii 1i
        !          3000: .ip A\fIfile\fP
        !          3001: Use the named
        !          3002: .i file
        !          3003: as the alias file.
        !          3004: If no file is specified,
        !          3005: use
        !          3006: .i aliases
        !          3007: in the current directory.
        !          3008: .ip a\fIN\fP
        !          3009: If set,
        !          3010: wait up to
        !          3011: .i N
        !          3012: minutes for an
        !          3013: .q @:@
        !          3014: entry to exist in the alias database
        !          3015: before starting up.
        !          3016: If it does not appear in
        !          3017: .i N
        !          3018: minutes,
        !          3019: rebuild the database
        !          3020: (if the
        !          3021: .b D
        !          3022: option is also set)
        !          3023: or issue a warning.
        !          3024: .ip B\fIc\fP
        !          3025: Set the blank substitution character to
        !          3026: .i c .
        !          3027: Unquoted spaces in addresses are replaced by this character.
        !          3028: .ip c
        !          3029: If an outgoing mailer is marked as being expensive,
        !          3030: don't connect immediately.
        !          3031: This requires that queueing be compiled in,
        !          3032: since it will depend on a queue run process to
        !          3033: actually send the mail.
        !          3034: .ip d\fIx\fP
        !          3035: Deliver in mode
        !          3036: .i x .
        !          3037: Legal modes are:
        !          3038: .(b
        !          3039: .ta 4n
        !          3040: i      Deliver interactively (synchronously)
        !          3041: b      Deliver in background (asynchronously)
        !          3042: q      Just queue the message (deliver during queue run)
        !          3043: .)b
        !          3044: .ip D
        !          3045: If set,
        !          3046: rebuild the alias database if necessary and possible.
        !          3047: If this option is not set,
        !          3048: .i sendmail
        !          3049: will never rebuild the alias database
        !          3050: unless explicitly requested
        !          3051: using
        !          3052: .b \-bi .
        !          3053: .ip e\fIx\fP
        !          3054: Dispose of errors using mode
        !          3055: .i x .
        !          3056: The values for
        !          3057: .i x
        !          3058: are:
        !          3059: .(b
        !          3060: p      Print error messages (default)
        !          3061: q      No messages, just give exit status
        !          3062: m      Mail back errors
        !          3063: w      Write back errors (mail if user not logged in)
        !          3064: e      Mail back errors and give zero exit stat always
        !          3065: .)b
        !          3066: .ip f
        !          3067: Save
        !          3068: Unix-style
        !          3069: .q From
        !          3070: lines at the front of headers.
        !          3071: Normally they are assumed redundant
        !          3072: and discarded.
        !          3073: .ip g\fIn\fP
        !          3074: Set the default group id
        !          3075: for mailers to run in
        !          3076: to
        !          3077: .i n .
        !          3078: .ip H\fIfile\fP
        !          3079: Specify the help file
        !          3080: for SMTP.
        !          3081: .ip I
        !          3082: Insist that the BIND name server be running
        !          3083: to resolve host names.
        !          3084: If this is not set and the name server is not running,
        !          3085: the
        !          3086: .i /etc/hosts
        !          3087: file will be considered complete.
        !          3088: In general, you do want to set this option
        !          3089: if your
        !          3090: .i /etc/hosts
        !          3091: file does not include all hosts known to you
        !          3092: or if you are using the MX (mail forwarding) feature of the BIND name server.
        !          3093: The name server will still be consulted
        !          3094: even if this option is not set, but
        !          3095: .i sendmail
        !          3096: will feel free to resort to reading
        !          3097: .i /etc/hosts
        !          3098: if the name server is not available.
        !          3099: Thus, you should
        !          3100: .i never
        !          3101: set this option if you do not run the name server.
        !          3102: .ip i
        !          3103: Ignore dots in incoming messages.
        !          3104: .ip L\fIn\fP
        !          3105: Set the default log level to
        !          3106: .i n .
        !          3107: .ip M\fIx\|value\fP
        !          3108: Set the macro
        !          3109: .i x
        !          3110: to
        !          3111: .i value .
        !          3112: This is intended only for use from the command line.
        !          3113: .ip m
        !          3114: Send to me too,
        !          3115: even if I am in an alias expansion.
        !          3116: .ip N\fInetname\fP
        !          3117: The name of the home network;
        !          3118: .q ARPA
        !          3119: by default.
        !          3120: The the argument of an SMTP
        !          3121: .q HELO
        !          3122: command is checked against
        !          3123: .q hostname.netname
        !          3124: where
        !          3125: .i hostname
        !          3126: is requested from the kernel for the current connection.
        !          3127: If they do not match,
        !          3128: .q Received:
        !          3129: lines are augmented by the name that is determined in this manner
        !          3130: so that messages can be traced accurately.
        !          3131: .ip o
        !          3132: Assume that the headers may be in old format,
        !          3133: i.e.,
        !          3134: spaces delimit names.
        !          3135: This actually turns on
        !          3136: an adaptive algorithm:
        !          3137: if any recipient address contains a comma, parenthesis,
        !          3138: or angle bracket,
        !          3139: it will be assumed that commas already exist.
        !          3140: If this flag is not on,
        !          3141: only commas delimit names.
        !          3142: Headers are always output with commas between the names.
        !          3143: .ip Q\fIdir\fP
        !          3144: Use the named
        !          3145: .i dir
        !          3146: as the queue directory.
        !          3147: .ip q\fIfactor\fP
        !          3148: Use
        !          3149: .i factor
        !          3150: as the multiplier in the map function
        !          3151: to decide when to just queue up jobs rather than run them.
        !          3152: This value is divided by the difference between the current load average
        !          3153: and the load average limit
        !          3154: (\c
        !          3155: .b x
        !          3156: flag)
        !          3157: to determine the maximum message priority
        !          3158: that will be sent.
        !          3159: Defaults to 10000.
        !          3160: .ip r\fItime\fP
        !          3161: Timeout reads after
        !          3162: .i time
        !          3163: interval.
        !          3164: .ip S\fIfile\fP
        !          3165: Log statistics in the named
        !          3166: .i file .
        !          3167: .ip s
        !          3168: Be super-safe when running things,
        !          3169: i.e.,
        !          3170: always instantiate the queue file,
        !          3171: even if you are going to attempt immediate delivery.
        !          3172: .i Sendmail
        !          3173: always instantiates the queue file
        !          3174: before returning control the the client
        !          3175: under any circumstances.
        !          3176: .ip T\fItime\fP
        !          3177: Set the queue timeout to
        !          3178: .i time .
        !          3179: After this interval,
        !          3180: messages that have not been successfully sent
        !          3181: will be returned to the sender.
        !          3182: .ip t\fIS,D\fP
        !          3183: Set the local time zone name to
        !          3184: .i S
        !          3185: for standard time and
        !          3186: .i D
        !          3187: for daylight time;
        !          3188: this is only used under version six.
        !          3189: .ip u\fIn\fP
        !          3190: Set the default userid for mailers to
        !          3191: .i n .
        !          3192: Mailers without the
        !          3193: .i S
        !          3194: flag in the mailer definition
        !          3195: will run as this user.
        !          3196: .ip v
        !          3197: Run in verbose mode.
        !          3198: .ip x\fILA\fP
        !          3199: When the system load average exceeds
        !          3200: .i LA ,
        !          3201: just queue messages
        !          3202: (i.e., don't try to send them).
        !          3203: .ip X\fILA\fP
        !          3204: When the system load average exceeds
        !          3205: .i LA ,
        !          3206: refuse incoming SMTP connections.
        !          3207: .ip y\fIfact\fP
        !          3208: The indicated
        !          3209: .i fact or
        !          3210: is added to the priority (thus
        !          3211: .i lowering
        !          3212: the priority of the job)
        !          3213: for each recipient,
        !          3214: i.e., this value penalizes jobs with large numbers of recipients.
        !          3215: .ip Y
        !          3216: If set,
        !          3217: deliver each job that is run from the queue in a separate process.
        !          3218: Use this option if you are short of memory,
        !          3219: since the default tends to consume considerable amounts of memory
        !          3220: while the queue is being processed.
        !          3221: .ip z\fIfact\fP
        !          3222: The indicated
        !          3223: .i fact or
        !          3224: is multiplied by the message class
        !          3225: (determined by the Precedence: field in the user header
        !          3226: and the
        !          3227: .b P
        !          3228: lines in the configuration file)
        !          3229: and subtracted from the priority.
        !          3230: Thus, messages with a higher Priority: will be favored.
        !          3231: .ip Z\fIfact\fP
        !          3232: The
        !          3233: .i fact or
        !          3234: is added to the priority
        !          3235: every time a job is processed.
        !          3236: Thus,
        !          3237: each time a job is processed,
        !          3238: its priority will be decreased by the indicated value.
        !          3239: In most environments this should be positive,
        !          3240: since hosts that are down are all too often down for a long time.
        !          3241: .+c "MAILER FLAGS"
        !          3242: The following flags may be set in the mailer description.
        !          3243: .nr ii 4n
        !          3244: .ip f
        !          3245: The mailer wants a
        !          3246: .b \-f
        !          3247: .i from
        !          3248: flag,
        !          3249: but only if this is a network forward operation
        !          3250: (i.e.,
        !          3251: the mailer will give an error
        !          3252: if the executing user
        !          3253: does not have special permissions).
        !          3254: .ip r
        !          3255: Same as
        !          3256: .b f ,
        !          3257: but sends a
        !          3258: .b \-r
        !          3259: flag.
        !          3260: .ip S
        !          3261: Don't reset the userid
        !          3262: before calling the mailer.
        !          3263: This would be used in a secure environment
        !          3264: where
        !          3265: .i sendmail
        !          3266: ran as root.
        !          3267: This could be used to avoid forged addresses.
        !          3268: This flag is suppressed if given from an
        !          3269: .q unsafe
        !          3270: environment
        !          3271: (e.g, a user's mail.cf file).
        !          3272: .ip n
        !          3273: Do not insert a UNIX-style
        !          3274: .q From
        !          3275: line on the front of the message.
        !          3276: .ip l
        !          3277: This mailer is local
        !          3278: (i.e.,
        !          3279: final delivery will be performed).
        !          3280: .ip s
        !          3281: Strip quote characters off of the address
        !          3282: before calling the mailer.
        !          3283: .ip m
        !          3284: This mailer can send to multiple users
        !          3285: on the same host
        !          3286: in one transaction.
        !          3287: When a
        !          3288: .b $u
        !          3289: macro occurs in the
        !          3290: .i argv
        !          3291: part of the mailer definition,
        !          3292: that field will be repeated as necessary
        !          3293: for all qualifying users.
        !          3294: .ip F
        !          3295: This mailer wants a
        !          3296: .q From:
        !          3297: header line.
        !          3298: .ip D
        !          3299: This mailer wants a
        !          3300: .q Date:
        !          3301: header line.
        !          3302: .ip M
        !          3303: This mailer wants a
        !          3304: .q Message-Id:
        !          3305: header line.
        !          3306: .ip x
        !          3307: This mailer wants a
        !          3308: .q Full-Name:
        !          3309: header line.
        !          3310: .ip P
        !          3311: This mailer wants a
        !          3312: .q Return-Path:
        !          3313: line.
        !          3314: .ip u
        !          3315: Upper case should be preserved in user names
        !          3316: for this mailer.
        !          3317: .ip h
        !          3318: Upper case should be preserved in host names
        !          3319: for this mailer.
        !          3320: .ip A
        !          3321: This is an Arpanet-compatible mailer,
        !          3322: and all appropriate modes should be set.
        !          3323: .ip U
        !          3324: This mailer wants Unix-style
        !          3325: .q From
        !          3326: lines with the ugly UUCP-style
        !          3327: .q "remote from <host>"
        !          3328: on the end.
        !          3329: .ip e
        !          3330: This mailer is expensive to connect to,
        !          3331: so try to avoid connecting normally;
        !          3332: any necessary connection will occur during a queue run.
        !          3333: .ip X
        !          3334: This mailer want to use the hidden dot algorithm
        !          3335: as specified in RFC821;
        !          3336: basically,
        !          3337: any line beginning with a dot
        !          3338: will have an extra dot prepended
        !          3339: (to be stripped at the other end).
        !          3340: This insures that lines in the message containing a dot
        !          3341: will not terminate the message prematurely.
        !          3342: .ip L
        !          3343: Limit the line lengths as specified in RFC821.
        !          3344: .ip P
        !          3345: Use the return-path in the SMTP
        !          3346: .q "MAIL FROM:"
        !          3347: command
        !          3348: rather than just the return address;
        !          3349: although this is required in RFC821,
        !          3350: many hosts do not process return paths properly.
        !          3351: .ip I
        !          3352: This mailer will be speaking SMTP
        !          3353: to another
        !          3354: .i sendmail
        !          3355: \*-
        !          3356: as such it can use special protocol features.
        !          3357: This option is not required
        !          3358: (i.e.,
        !          3359: if this option is omitted the transmission will still operate successfully,
        !          3360: although perhaps not as efficiently as possible).
        !          3361: .ip C
        !          3362: If mail is
        !          3363: .i received
        !          3364: from a mailer with this flag set,
        !          3365: any addresses in the header that do not have an at sign
        !          3366: (\c
        !          3367: .q @ )
        !          3368: after being rewritten by ruleset three
        !          3369: will have the
        !          3370: .q @domain
        !          3371: clause from the sender
        !          3372: tacked on.
        !          3373: This allows mail with headers of the form:
        !          3374: .(b
        !          3375: From: usera@hosta
        !          3376: To: userb@hostb, userc
        !          3377: .)b
        !          3378: to be rewritten as:
        !          3379: .(b
        !          3380: From: usera@hosta
        !          3381: To: userb@hostb, userc@hosta
        !          3382: .)b
        !          3383: automatically.
        !          3384: .ip E
        !          3385: Escape lines beginning with
        !          3386: .q From
        !          3387: in the message with a `>' sign.
        !          3388: .+c "OTHER CONFIGURATION"
        !          3389: .rm $0
        !          3390: .nr ii 1i
        !          3391: .pp
        !          3392: There are some configuration changes that can be made by
        !          3393: recompiling
        !          3394: .i sendmail .
        !          3395: These are located in two places:
        !          3396: .ip src/conf.h
        !          3397: Configuration parameters that may be tweaked by the installer
        !          3398: are included in conf.h.
        !          3399: .ip src/conf.c
        !          3400: Some special routines and a few variables
        !          3401: may be defined in conf.c.
        !          3402: For the most part these are selected from the settings
        !          3403: in conf.h.
        !          3404: .uh "Parameters in src/conf.h"
        !          3405: .pp
        !          3406: Parameters and compilation options
        !          3407: are defined in conf.h.
        !          3408: Most of these need not normally be tweaked;
        !          3409: common parameters are all in sendmail.cf.
        !          3410: However, the sizes of certain primitive vectors, etc.,
        !          3411: are included in this file.
        !          3412: The numbers following the parameters
        !          3413: are their default value.
        !          3414: .nr ii 1.2i
        !          3415: .ip "MAXLINE [1024]"
        !          3416: The maximum line length of any input line.
        !          3417: If message lines exceed this length
        !          3418: they will still be processed correctly;
        !          3419: however, header lines,
        !          3420: configuration file lines,
        !          3421: alias lines,
        !          3422: etc.,
        !          3423: must fit within this limit.
        !          3424: .ip "MAXNAME [256]"
        !          3425: The maximum length of any name,
        !          3426: such as a host or a user name.
        !          3427: .ip "MAXFIELD [2500]"
        !          3428: The maximum total length of any header field,
        !          3429: including continuation lines.
        !          3430: .ip "MAXPV [40]"
        !          3431: The maximum number of parameters to any mailer.
        !          3432: This limits the number of recipients that may be passed in one transaction.
        !          3433: .ip "MAXHOP [17]"
        !          3434: When a message has been processed more than this number of times,
        !          3435: sendmail rejects the message
        !          3436: on the assumption that there has been an aliasing loop.
        !          3437: This can be determined from the
        !          3438: .b \-h
        !          3439: flag
        !          3440: or by counting the number of trace fields
        !          3441: (i.e,
        !          3442: .q Received:
        !          3443: lines)
        !          3444: in the message header.
        !          3445: .ip "MAXATOM [100]"
        !          3446: The maximum number of atoms
        !          3447: (tokens)
        !          3448: in a single address.
        !          3449: For example,
        !          3450: the address
        !          3451: .q "eric@Berkeley"
        !          3452: is three atoms.
        !          3453: .ip "MAXMAILERS [25]"
        !          3454: The maximum number of mailers that may be defined
        !          3455: in the configuration file.
        !          3456: .ip "MAXRWSETS [30]"
        !          3457: The maximum number of rewriting sets
        !          3458: that may be defined.
        !          3459: .ip "MAXPRIORITIES [25]"
        !          3460: The maximum number of values for the
        !          3461: .q Precedence:
        !          3462: field that may be defined
        !          3463: (using the
        !          3464: .b P
        !          3465: line in sendmail.cf).
        !          3466: .ip "MAXTRUST [30]"
        !          3467: The maximum number of trusted users that may be defined
        !          3468: (using the
        !          3469: .b T
        !          3470: line in sendmail.cf).
        !          3471: .ip "MAXUSERENVIRON [40]"
        !          3472: The maximum number of items in the user environment
        !          3473: that will be passed to subordinate mailers.
        !          3474: .ip "QUEUESIZE [600]"
        !          3475: The maximum number of entries that will be processed
        !          3476: in a single queue run.
        !          3477: .lp
        !          3478: A number of other compilation options exist.
        !          3479: These specify whether or not specific code should be compiled in.
        !          3480: .nr ii 1i
        !          3481: .ip DBM
        !          3482: If set,
        !          3483: the
        !          3484: .q DBM
        !          3485: package in UNIX is used
        !          3486: (see
        !          3487: .i dbm(3X)
        !          3488: in [UNIX80]).
        !          3489: If not set,
        !          3490: a much less efficient algorithm for processing aliases is used.
        !          3491: .ip NDBM
        !          3492: If set,
        !          3493: the new version of the DBM library
        !          3494: that allows multiple databases will be used.
        !          3495: .q DBM
        !          3496: must also be set.
        !          3497: .ip DEBUG
        !          3498: If set, debugging information is compiled in.
        !          3499: To actually get the debugging output,
        !          3500: the
        !          3501: .b \-d
        !          3502: flag must be used.
        !          3503: .ip LOG
        !          3504: If set,
        !          3505: the
        !          3506: .i syslog
        !          3507: routine in use at some sites is used.
        !          3508: This makes an informational log record
        !          3509: for each message processed,
        !          3510: and makes a higher priority log record
        !          3511: for internal system errors.
        !          3512: .ip QUEUE
        !          3513: This flag should be set to compile in the queueing code.
        !          3514: If this is not set,
        !          3515: mailers must accept the mail immediately
        !          3516: or it will be returned to the sender.
        !          3517: .ip SMTP
        !          3518: If set,
        !          3519: the code to handle user and server SMTP will be compiled in.
        !          3520: This is only necessary if your machine has some mailer
        !          3521: that speaks SMTP.
        !          3522: .ip DAEMON
        !          3523: If set,
        !          3524: code to run a daemon is compiled in.
        !          3525: This code is for 4.2 or 4.3BSD.
        !          3526: .ip UGLYUUCP
        !          3527: If you have a UUCP host adjacent to you which is not running
        !          3528: a reasonable version of
        !          3529: .i rmail ,
        !          3530: you will have to set this flag to include the
        !          3531: .q "remote from sysname"
        !          3532: info on the from line.
        !          3533: Otherwise, UUCP gets confused about where the mail came from.
        !          3534: .ip NOTUNIX
        !          3535: If you are using a non-UNIX mail format,
        !          3536: you can set this flag to turn off special processing
        !          3537: of UNIX-style
        !          3538: .q "From "
        !          3539: lines.
        !          3540: .ip NAMED_BIND
        !          3541: Compile in code to use the Berkeley Internet Name Domain (BIND) server
        !          3542: to resolve TCP/IP host names.
        !          3543: .ip SETPROCTITLE
        !          3544: If defined,
        !          3545: .i sendmail
        !          3546: will change its
        !          3547: .i argv
        !          3548: array to indicate its current status.
        !          3549: This can be used in conjunction with the
        !          3550: .i ps
        !          3551: command to find out just what it's up to.
        !          3552: .ip NO_WILDCARD_MX
        !          3553: Should be set if there are no wildcard MX nameserver records
        !          3554: in the local domain.
        !          3555: If set, this will enable the use of ANY query types, resulting
        !          3556: in better performance.
        !          3557: Unfortunately, wildcard MX records in the local domain will mess
        !          3558: this up, hence the need for this compilation option.
        !          3559: .uh "Configuration in src/conf.c"
        !          3560: .pp
        !          3561: Not all header semantics are defined in the configuration file.
        !          3562: Header lines that should only be included by certain mailers
        !          3563: (as well as other more obscure semantics)
        !          3564: must be specified in the
        !          3565: .i HdrInfo
        !          3566: table in
        !          3567: .i conf.c .
        !          3568: This table contains the header name
        !          3569: (which should be in all lower case)
        !          3570: and a set of header control flags (described below),
        !          3571: The flags are:
        !          3572: .ip H_ACHECK
        !          3573: Normally when the check is made to see if a header line is compatible
        !          3574: with a mailer,
        !          3575: .i sendmail
        !          3576: will not delete an existing line.
        !          3577: If this flag is set,
        !          3578: .i sendmail
        !          3579: will delete
        !          3580: even existing header lines.
        !          3581: That is,
        !          3582: if this bit is set and the mailer does not have flag bits set
        !          3583: that intersect with the required mailer flags
        !          3584: in the header definition in
        !          3585: sendmail.cf,
        !          3586: the header line is
        !          3587: .i always
        !          3588: deleted.
        !          3589: .ip H_EOH
        !          3590: If this header field is set,
        !          3591: treat it like a blank line,
        !          3592: i.e.,
        !          3593: it will signal the end of the header
        !          3594: and the beginning of the message text.
        !          3595: .ip H_FORCE
        !          3596: Add this header entry
        !          3597: even if one existed in the message before.
        !          3598: If a header entry does not have this bit set,
        !          3599: .i sendmail
        !          3600: will not add another header line if a header line
        !          3601: of this name already existed.
        !          3602: This would normally be used to stamp the message
        !          3603: by everyone who handled it.
        !          3604: .ip H_TRACE
        !          3605: If set,
        !          3606: this is a timestamp
        !          3607: (trace)
        !          3608: field.
        !          3609: If the number of trace fields in a message
        !          3610: exceeds a preset amount
        !          3611: the message is returned
        !          3612: on the assumption that it has an aliasing loop.
        !          3613: .ip H_RCPT
        !          3614: If set,
        !          3615: this field contains recipient addresses.
        !          3616: This is used by the
        !          3617: .b \-t
        !          3618: flag to determine who to send to
        !          3619: when it is collecting recipients from the message.
        !          3620: .ip H_FROM
        !          3621: This flag indicates that this field
        !          3622: specifies a sender.
        !          3623: The order of these fields in the
        !          3624: .i HdrInfo
        !          3625: table specifies
        !          3626: .i sendmail's
        !          3627: preference
        !          3628: for which field to return error messages to.
        !          3629: .nr ii 5n
        !          3630: .lp
        !          3631: Let's look at a sample
        !          3632: .i HdrInfo
        !          3633: specification:
        !          3634: .(b
        !          3635: .ta 4n +\w'"return-receipt-to",  'u
        !          3636: struct hdrinfo HdrInfo[] =
        !          3637: \&{
        !          3638:             /* originator fields, most to least significant  */
        !          3639:        "resent-sender",        H_FROM,
        !          3640:        "resent-from",  H_FROM,
        !          3641:        "sender",       H_FROM,
        !          3642:        "from", H_FROM,
        !          3643:        "full-name",    H_ACHECK,
        !          3644:             /* destination fields */
        !          3645:        "to",   H_RCPT,
        !          3646:        "resent-to",    H_RCPT,
        !          3647:        "cc",   H_RCPT,
        !          3648:             /* message identification and control */
        !          3649:        "message",      H_EOH,
        !          3650:        "text", H_EOH,
        !          3651:             /* trace fields */
        !          3652:        "received",     H_TRACE|H_FORCE,
        !          3653: 
        !          3654:        NULL,   0,
        !          3655: };
        !          3656: .)b
        !          3657: This structure indicates that the
        !          3658: .q To: ,
        !          3659: .q Resent-To: ,
        !          3660: and
        !          3661: .q Cc:
        !          3662: fields
        !          3663: all specify recipient addresses.
        !          3664: Any
        !          3665: .q Full-Name:
        !          3666: field will be deleted unless the required mailer flag
        !          3667: (indicated in the configuration file)
        !          3668: is specified.
        !          3669: The
        !          3670: .q Message:
        !          3671: and
        !          3672: .q Text:
        !          3673: fields will terminate the header;
        !          3674: these are specified in new protocols
        !          3675: [NBS80]
        !          3676: or used by random dissenters around the network world.
        !          3677: The
        !          3678: .q Received:
        !          3679: field will always be added,
        !          3680: and can be used to trace messages.
        !          3681: .pp
        !          3682: There are a number of important points here.
        !          3683: First,
        !          3684: header fields are not added automatically just because they are in the
        !          3685: .i HdrInfo
        !          3686: structure;
        !          3687: they must be specified in the configuration file
        !          3688: in order to be added to the message.
        !          3689: Any header fields mentioned in the configuration file but not
        !          3690: mentioned in the
        !          3691: .i HdrInfo
        !          3692: structure have default processing performed;
        !          3693: that is,
        !          3694: they are added unless they were in the message already.
        !          3695: Second,
        !          3696: the
        !          3697: .i HdrInfo
        !          3698: structure only specifies cliched processing;
        !          3699: certain headers are processed specially by ad hoc code
        !          3700: regardless of the status specified in
        !          3701: .i HdrInfo .
        !          3702: For example,
        !          3703: the
        !          3704: .q Sender:
        !          3705: and
        !          3706: .q From:
        !          3707: fields are always scanned on ARPANET mail
        !          3708: to determine the sender;
        !          3709: this is used to perform the
        !          3710: .q "return to sender"
        !          3711: function.
        !          3712: The
        !          3713: .q "From:"
        !          3714: and
        !          3715: .q "Full-Name:"
        !          3716: fields are used to determine the full name of the sender
        !          3717: if possible;
        !          3718: this is stored in the macro
        !          3719: .b $x
        !          3720: and used in a number of ways.
        !          3721: .pp
        !          3722: The file
        !          3723: .i conf.c
        !          3724: also contains the specification of ARPANET reply codes.
        !          3725: There are four classifications these fall into:
        !          3726: .(b
        !          3727: .sz -1
        !          3728: .ta \w'char  'u +\w'Arpa_TUsrerr[] =  'u +\w'"888";  'u
        !          3729: char   Arpa_Info[] =   "050";  /* arbitrary info */
        !          3730: char   Arpa_TSyserr[] =        "455";  /* some (transient) system error */
        !          3731: char   Arpa_PSyserr[] =        "554";  /* some (permanent) system error */
        !          3732: char   Arpa_Usrerr[] = "554";  /* some (fatal) user error */
        !          3733: .sz
        !          3734: .)b
        !          3735: The class
        !          3736: .i Arpa_Info
        !          3737: is for any information that is not required by the protocol,
        !          3738: such as forwarding information.
        !          3739: .i Arpa_TSyserr
        !          3740: and
        !          3741: .i Arpa_PSyserr
        !          3742: is printed by the
        !          3743: .i syserr
        !          3744: routine.
        !          3745: TSyserr
        !          3746: is printed out for transient errors,
        !          3747: that is,
        !          3748: errors that are likely to go away without explicit action
        !          3749: on the part of a systems administrator.
        !          3750: PSyserr
        !          3751: is printed for permanent errors.
        !          3752: The distinction is made based on the value of
        !          3753: .i errno .
        !          3754: Finally,
        !          3755: .i Arpa_Usrerr
        !          3756: is the result of a user error
        !          3757: and is generated by the
        !          3758: .i usrerr
        !          3759: routine;
        !          3760: these are generated when the user has specified something wrong,
        !          3761: and hence the error is permanent,
        !          3762: i.e.,
        !          3763: it will not work simply by resubmitting the request.
        !          3764: .pp
        !          3765: If it is necessary to restrict mail through a relay,
        !          3766: the
        !          3767: .i checkcompat
        !          3768: routine can be modified.
        !          3769: This routine is called for every recipient address.
        !          3770: It can return
        !          3771: .b TRUE
        !          3772: to indicate that the address is acceptable
        !          3773: and mail processing will continue,
        !          3774: or it can return
        !          3775: .b FALSE
        !          3776: to reject the recipient.
        !          3777: If it returns false,
        !          3778: it is up to
        !          3779: .i checkcompat
        !          3780: to print an error message
        !          3781: (using
        !          3782: .i usrerr )
        !          3783: saying why the message is rejected.
        !          3784: For example,
        !          3785: .i checkcompat
        !          3786: could read:
        !          3787: .(b
        !          3788: .re
        !          3789: .sz -1
        !          3790: .ta 4n +4n +4n +4n +4n +4n +4n
        !          3791: bool
        !          3792: checkcompat(to)
        !          3793:        register ADDRESS *to;
        !          3794: \&{
        !          3795:        if (MsgSize > 50000 && to->q_mailer != LocalMailer)
        !          3796:        {
        !          3797:                usrerr("Message too large for non-local delivery");
        !          3798:                NoReturn = TRUE;
        !          3799:                return (FALSE);
        !          3800:        }
        !          3801:        return (TRUE);
        !          3802: }
        !          3803: .sz
        !          3804: .)b
        !          3805: This would reject messages greater than 50000 bytes
        !          3806: unless they were local.
        !          3807: The
        !          3808: .i NoReturn
        !          3809: flag can be sent to suppress the return of the actual body
        !          3810: of the message in the error return.
        !          3811: The actual use of this routine is highly dependent on the
        !          3812: implementation,
        !          3813: and use should be limited.
        !          3814: .uh "Configuration in src/daemon.c"
        !          3815: .pp
        !          3816: The file
        !          3817: .i src/daemon.c
        !          3818: contains a number of routines that are dependent
        !          3819: on the local networking environment.
        !          3820: The version supplied is specific to 4.3 BSD.
        !          3821: .pp
        !          3822: The routine
        !          3823: .i maphostname
        !          3824: is called to convert strings within
        !          3825: .b $[
        !          3826: \&...\&
        !          3827: .b $]
        !          3828: symbols.
        !          3829: It can be modified if you wish to provide a more sophisticated service,
        !          3830: e.g.,
        !          3831: mapping UUCP host names to full paths.
        !          3832: .+c "SUMMARY OF SUPPORT FILES"
        !          3833: .pp
        !          3834: This is a summary of the support files
        !          3835: that
        !          3836: .i sendmail
        !          3837: creates or generates.
        !          3838: .nr ii 1i
        !          3839: .ip "/usr/lib/sendmail"
        !          3840: The binary of
        !          3841: .i sendmail .
        !          3842: .ip /usr/bin/newaliases
        !          3843: A link to /usr/lib/sendmail;
        !          3844: causes the alias database to be rebuilt.
        !          3845: Running this program is completely equivalent to giving
        !          3846: .i sendmail
        !          3847: the
        !          3848: .b \-bi
        !          3849: flag.
        !          3850: .ip /usr/bin/mailq
        !          3851: Prints a listing of the mail queue.
        !          3852: This program is equivalent to using the
        !          3853: .b \-bp
        !          3854: flag to
        !          3855: .i sendmail .
        !          3856: .ip /usr/lib/sendmail.cf
        !          3857: The configuration file,
        !          3858: in textual form.
        !          3859: .ip /usr/lib/sendmail.fc
        !          3860: The configuration file
        !          3861: represented as a memory image.
        !          3862: .ip /usr/lib/sendmail.hf
        !          3863: The SMTP help file.
        !          3864: .ip /usr/lib/sendmail.st
        !          3865: A statistics file; need not be present.
        !          3866: .ip /usr/lib/aliases
        !          3867: The textual version of the alias file.
        !          3868: .ip /usr/lib/aliases.{pag,dir}
        !          3869: The alias file in
        !          3870: .i dbm \|(3)
        !          3871: format.
        !          3872: .ip /usr/spool/mqueue
        !          3873: The directory in which the mail queue
        !          3874: and temporary files reside.
        !          3875: .ip /usr/spool/mqueue/qf*
        !          3876: Control (queue) files for messages.
        !          3877: .ip /usr/spool/mqueue/df*
        !          3878: Data files.
        !          3879: .ip /usr/spool/mqueue/lf*
        !          3880: Lock files
        !          3881: .ip /usr/spool/mqueue/tf*
        !          3882: Temporary versions of the qf files,
        !          3883: used during queue file rebuild.
        !          3884: .ip /usr/spool/mqueue/nf*
        !          3885: A file used when creating a unique id.
        !          3886: .ip /usr/spool/mqueue/xf*
        !          3887: A transcript of the current session.
        !          3888: .\".ro
        !          3889: .\".ls 1
        !          3890: .\".tp
        !          3891: .\".sp 2i
        !          3892: .\".in 0
        !          3893: .\".ce 100
        !          3894: .\".sz 24
        !          3895: .\".b SENDMAIL
        !          3896: .\".sz 14
        !          3897: .\".sp
        !          3898: .\"INSTALLATION AND OPERATION GUIDE
        !          3899: .\".sp
        !          3900: .\".sz 10
        !          3901: .\"Eric Allman
        !          3902: .\"Britton-Lee, Inc.
        !          3903: .\".sp
        !          3904: .\"Version 5.12
        !          3905: .\".ce 0
        !          3906: .pn 2
        !          3907: .bp
        !          3908: .ce
        !          3909: .sz 12
        !          3910: TABLE OF CONTENTS
        !          3911: .sz 10
        !          3912: .sp
        !          3913: .\" remove some things to avoid "out of temp file space" problem
        !          3914: .rm sh
        !          3915: .rm (x
        !          3916: .rm )x
        !          3917: .rm ip
        !          3918: .rm pp
        !          3919: .rm lp
        !          3920: .rm he
        !          3921: .rm fo
        !          3922: .rm eh
        !          3923: .rm oh
        !          3924: .rm ef
        !          3925: .rm of
        !          3926: .xp

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.