Annotation of 43BSDReno/share/doc/smm/07.sendmailop/op.me, revision 1.1.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.