This is sendmail version 8.6.3.
authorJordan K. Hubbard <jkh@FreeBSD.org>
Mon, 1 Nov 1993 00:16:24 +0000 (00:16 +0000)
committerJordan K. Hubbard <jkh@FreeBSD.org>
Mon, 1 Nov 1993 00:16:24 +0000 (00:16 +0000)
83 files changed:
usr.sbin/sendmail/CHANGES-R5-R8
usr.sbin/sendmail/FAQ [new file with mode: 0644]
usr.sbin/sendmail/KNOWNBUGS [new file with mode: 0644]
usr.sbin/sendmail/Makefile
usr.sbin/sendmail/READ_ME
usr.sbin/sendmail/RELEASE_NOTES
usr.sbin/sendmail/cf/README
usr.sbin/sendmail/cf/cf/Makefile
usr.sbin/sendmail/cf/cf/Makefile.dist [new file with mode: 0644]
usr.sbin/sendmail/cf/cf/clientproto.mc [new file with mode: 0644]
usr.sbin/sendmail/cf/cf/mail.cs.mc
usr.sbin/sendmail/cf/cf/osf1-cs-exposed.mc [new file with mode: 0644]
usr.sbin/sendmail/cf/cf/osf1-cs-hidden.mc [new file with mode: 0644]
usr.sbin/sendmail/cf/cf/tcpproto.mc
usr.sbin/sendmail/cf/cf/uucpproto.mc
usr.sbin/sendmail/cf/cf/whisker.mc [new file with mode: 0644]
usr.sbin/sendmail/cf/domain/Berkeley.m4
usr.sbin/sendmail/cf/feature/bitdomain.m4
usr.sbin/sendmail/cf/feature/domaintable.m4
usr.sbin/sendmail/cf/feature/mailertable.m4
usr.sbin/sendmail/cf/feature/nodns.m4 [new file with mode: 0644]
usr.sbin/sendmail/cf/feature/nullclient.m4 [new file with mode: 0644]
usr.sbin/sendmail/cf/feature/uucpdomain.m4
usr.sbin/sendmail/cf/m4/cf.m4
usr.sbin/sendmail/cf/m4/nullrelay.m4 [new file with mode: 0644]
usr.sbin/sendmail/cf/m4/proto.m4
usr.sbin/sendmail/cf/m4/version.m4
usr.sbin/sendmail/cf/mailer/local.m4
usr.sbin/sendmail/cf/mailer/smtp.m4
usr.sbin/sendmail/cf/mailer/uucp.m4
usr.sbin/sendmail/cf/ostype/aix3.m4
usr.sbin/sendmail/cf/ostype/aux.m4 [new file with mode: 0644]
usr.sbin/sendmail/cf/ostype/hpux.m4
usr.sbin/sendmail/cf/ostype/irix.m4
usr.sbin/sendmail/cf/ostype/linux.m4 [new file with mode: 0644]
usr.sbin/sendmail/cf/ostype/nextstep.m4 [new file with mode: 0644]
usr.sbin/sendmail/cf/ostype/solaris2.m4 [new file with mode: 0644]
usr.sbin/sendmail/cf/ostype/svr4.m4 [new file with mode: 0644]
usr.sbin/sendmail/cf/sh/makeinfo.sh
usr.sbin/sendmail/doc/op/op.me
usr.sbin/sendmail/doc/op/op.ps
usr.sbin/sendmail/mailstats/mailstats.c
usr.sbin/sendmail/makemap/Makefile
usr.sbin/sendmail/makemap/makemap.8
usr.sbin/sendmail/makemap/makemap.c
usr.sbin/sendmail/praliases/Makefile
usr.sbin/sendmail/praliases/praliases.c
usr.sbin/sendmail/src/Makefile
usr.sbin/sendmail/src/Makefile.dist
usr.sbin/sendmail/src/READ_ME
usr.sbin/sendmail/src/TRACEFLAGS
usr.sbin/sendmail/src/alias.c
usr.sbin/sendmail/src/cdefs.h
usr.sbin/sendmail/src/clock.c
usr.sbin/sendmail/src/collect.c
usr.sbin/sendmail/src/conf.c
usr.sbin/sendmail/src/conf.h
usr.sbin/sendmail/src/daemon.c
usr.sbin/sendmail/src/deliver.c
usr.sbin/sendmail/src/domain.c
usr.sbin/sendmail/src/envelope.c
usr.sbin/sendmail/src/err.c
usr.sbin/sendmail/src/headers.c
usr.sbin/sendmail/src/macro.c
usr.sbin/sendmail/src/main.c
usr.sbin/sendmail/src/map.c
usr.sbin/sendmail/src/mci.c
usr.sbin/sendmail/src/parseaddr.c
usr.sbin/sendmail/src/pathnames.h
usr.sbin/sendmail/src/queue.c
usr.sbin/sendmail/src/readcf.c
usr.sbin/sendmail/src/recipient.c
usr.sbin/sendmail/src/savemail.c
usr.sbin/sendmail/src/sendmail.8
usr.sbin/sendmail/src/sendmail.h
usr.sbin/sendmail/src/sendmail.hf
usr.sbin/sendmail/src/srvrsmtp.c
usr.sbin/sendmail/src/stats.c
usr.sbin/sendmail/src/udb.c
usr.sbin/sendmail/src/useful.h
usr.sbin/sendmail/src/usersmtp.c
usr.sbin/sendmail/src/util.c
usr.sbin/sendmail/src/version.c

index c62aba7..d935731 100644 (file)
@@ -2,15 +2,23 @@
 
 The following is a summary of the changes between the last commonly
 available version of sendmail from Berkeley (5.67) and the latest
 
 The following is a summary of the changes between the last commonly
 available version of sendmail from Berkeley (5.67) and the latest
-version (8.1).  I can't guarantee that it is complete.
+version (8.6).  I can't guarantee that it is complete.
+
+Many of these are ideas that had been tried in IDA, albeit many of
+them with a more general syntax.
 
 
 Connection Caching
 
 
 
 Connection Caching
 
-   Instead of closing SMTP connections immediately, those connections
-   are cached for possible future use.  The advent of MX records made
-   this effective for mailing lists; in addition, substantial performance
-   improvements can be expected for queue processing.
+   Instead of closing SMTP connections immediately, open connections are
+   cached for possible future use.  There is a limit to the number of
+   simultaneous open connections and the idle time of any individual
+   connection.
+   
+   This is of best help during queue processing (since there is the
+   potential of many different messages going to one site), although
+   it can also help when processing MX records which aren't handled
+   by MX Piggybacking.
 
 MX Piggybacking
 
 
 MX Piggybacking
 
@@ -18,6 +26,11 @@ MX Piggybacking
    have the same set of MX hosts, they can be sent in the same
    transaction.  Version 8 notices this and tries to batch the messages.
 
    have the same set of MX hosts, they can be sent in the same
    transaction.  Version 8 notices this and tries to batch the messages.
 
+   For example, if two sites ``foo.com'' and ``bar.com'' are both
+   served by UUNET, they will have the same set of MX hosts and will
+   be sent in one transaction.  UUNET will then split the message
+   and send it to the two individual hosts.
+
 RFC 1123 Changes
 
    A number of changes have been made to make sendmail ``conditionally
 RFC 1123 Changes
 
    A number of changes have been made to make sendmail ``conditionally
@@ -26,23 +39,59 @@ RFC 1123 Changes
 
    The major areas of change are (numbers are RFC 1123 section numbers):
 
 
    The major areas of change are (numbers are RFC 1123 section numbers):
 
-   5.2.7       Response to RCPT command is fast.
+   5.2.7       Response to RCPT command is fast.  Previously, sendmail
+               expanded all aliases as far as it could -- this could
+               take a very long time, particularly if there were
+               name server delays.  Version 8 only checks for the
+               existence of an alias and does the expansion later.
    5.2.8       Numeric IP addresses are logged in Received: lines.
    5.2.8       Numeric IP addresses are logged in Received: lines.
-   5.2.17      Self domain literal is properly handled.
-   5.3.2       Better control over individual timeouts.
-   5.3.3       Error messages are sent as From:<>.
-   5.3.3       Error messages are never sent to <>.
-   5.3.3       Route-addrs are pruned.
+               This helps tracing spoofed messages.
+   5.2.17      Self domain literal is properly handled.  Previously,
+               if someone sent to user@[a.b.c.d], where a.b.c.d is
+               your IP address, the mail would probably be rejected.
+               Version 8 special cases these addresses.
+   5.3.2       Better control over individual timeouts.  RFC 821 specified
+               no timeouts.  Older versions of sendmail had a single
+               timeout, typically set to two hours.  Version 8 allows
+               the configuration file to set timeouts for various
+               SMTP commands individually.
+   5.3.3       Error messages are sent as From:<>.  This was urged by
+               RFC 821 and reiterated by RFC 1123, but older versions
+               of sendmail never really did it properly.  Version 8
+               does.  However, some systems cannot handle this
+               perfectly legal address; if necessary, you can create
+               a special mailer that uses the `g' flag to disable this.
+   5.3.3       Error messages are never sent to <>.  Previously,
+               sendmail was happy to send responses-to-responses which
+               sometimes resulted in responses-to-responses-to-responses
+               which resulted in ....  you get the idea.
+   5.3.3       Route-addrs (the ugly ``<@hosta,@hostb:user@hostc>''
+               syntax) are pruned.  RFC 821 urged the use of this
+               bletcherous syntax.  RFC 1123 has seen the light and
+               officially deprecates them, further urging that you
+               eliminate all but ``user@hostc'' should you receive
+               one of these things.  Version 8 is slightly more generous
+               than the standards suggest; instead of stripping off all
+               the route addressees, it only strips hosts off up to
+               the one before the last one known to DNS, thus allowing
+               you to have pseudo-hosts such as foo.BITNET.  The 'R'
+               option will turn this off.
 
    The areas in which sendmail is not ``unconditionally compliant'' are:
 
    5.2.6       Sendmail does do header munging.
    5.2.10      Sendmail doesn't always use the exact SMTP message
 
    The areas in which sendmail is not ``unconditionally compliant'' are:
 
    5.2.6       Sendmail does do header munging.
    5.2.10      Sendmail doesn't always use the exact SMTP message
-               text from RFC 821.
+               text from RFC 821.  This is a rather silly requirement.
    5.3.1.1     Sendmail doesn't guarantee only one connect for each
    5.3.1.1     Sendmail doesn't guarantee only one connect for each
-               host on queue runs.
+               host on queue runs.  Connection caching gives you most
+               of this, but it does not provide a guarantee.
    5.3.1.1     Sendmail doesn't always provide an adequate limit
    5.3.1.1     Sendmail doesn't always provide an adequate limit
-               on concurrency.
+               on concurrency.  That is, there can be several
+               independent sendmails running at once.  My feeling
+               is that doing an absolute limit would be a mistake
+               (it might result in lost mail).  However, if you use
+               the XLA contributed software, most of this will be
+               guaranteed (but I don't guarantee the guarantee).
 
 Extended SMTP Support
 
 
 Extended SMTP Support
 
@@ -65,6 +114,10 @@ User Database
    unified large-site name support.  We are installing it at Berkeley;
    future versions may show significant modifications.
 
    unified large-site name support.  We are installing it at Berkeley;
    future versions may show significant modifications.
 
+   The user database allows you to map both incoming and outgoing
+   addresses, much like IDA.  However, the interface set is still
+   better with IDA.
+
 Improved BIND Support
 
    The BIND support, particularly for MX records, had a number of
 Improved BIND Support
 
    The BIND support, particularly for MX records, had a number of
@@ -73,13 +126,17 @@ Improved BIND Support
    to sendmail, so that the name server resolution rules are incorporated
    directly into sendmail.
 
    to sendmail, so that the name server resolution rules are incorporated
    directly into sendmail.
 
+   The major change has been that the $[ ... $] operator didn't fully
+   qualify names that were in DNS as A or MX records.  Version 8 does
+   this qualification.
+
 Keyed Files
 
    Generalized keyed files is an idea taken directly from IDA sendmail
    (albeit with a completely different implementation).  They can be
    useful on large sites.
 
 Keyed Files
 
    Generalized keyed files is an idea taken directly from IDA sendmail
    (albeit with a completely different implementation).  They can be
    useful on large sites.
 
-   Version 8 also understands YP.
+   Version 8 includes an "NIS" map class to support NIS/YP maps.
 
 Multi-Word Classes
 
 
 Multi-Word Classes
 
@@ -92,7 +149,7 @@ Multi-Word Classes
 
 Deferred Macro Expansion
 
 
 Deferred Macro Expansion
 
-   The $&x construct has been adopted from IDA .
+   The $&x construct has been adopted from IDA.
 
 IDENT Protocol Support
 
 
 IDENT Protocol Support
 
@@ -161,21 +218,28 @@ New Options
 
    b   Insist on a minimum number of disk blocks.
 
 
    b   Insist on a minimum number of disk blocks.
 
-   C   Delivery checkpoint interval.
+   C   Delivery checkpoint interval.  Checkpoint the queue (to avoid
+       duplicate deliveries) every C addresses.
 
 
-   E   Default error message.
+   E   Default error message.  This message (or the contents of the
+       indicated file) are prepended to error messages.
 
 
-   G   Enable GECOS matching.
+   G   Enable GECOS matching.  If you can't find a local user name
+       and this option is enabled, do a sequential scan of the passwd
+       file to match against full names.  Previously a compile option.
 
 
-   h   Maximum hop count.
+   h   Maximum hop count.  Previously this was compiled in.
 
    j   Send errors in MIME-encapsulated format.
 
 
    j   Send errors in MIME-encapsulated format.
 
-   J   Forward file path.
+   J   Forward file path.  Where to search for .forward files -- defaults
+       to $HOME/.forward.
 
 
-   k   Connection cache size
+   k   Connection cache size.  The total number of connections that will
+       be kept open at any time.
 
 
-   K   Connection cache lifetime.
+   K   Connection cache lifetime.  The amount of time any connection
+       will be permitted to sit idle.
 
    l   Enable Errors-To: header.  These headers violate RFC 1123;
        this option is included to provide back compatibility with
 
    l   Enable Errors-To: header.  These headers violate RFC 1123;
        this option is included to provide back compatibility with
@@ -183,15 +247,27 @@ New Options
 
    O   Incoming daemon options (e.g., use alternate SMTP port).
 
 
    O   Incoming daemon options (e.g., use alternate SMTP port).
 
-   p   Privacy options.
+   p   Privacy options.  These can be used to make your SMTP server
+       less friendly.
+
+   R   Don't prune route-addrs.  Normally, if version 8 sees an address
+       like "<@hostA,@hostB:user@hostC>, sendmail will try to strip off
+       as much as it can (up to user@hostC) as suggested by RFC 1123.
+       This option disables that behaviour.
 
 
-   R   Don't prune route-addrs.
+   U   User database spec.  This is still experimental.
 
 
-   U   User database spec.
+   V   Fallback ``MX'' host.  This can be thought of as an MX host
+       that applies to all addresses that has a very high preference
+       value (that is, use it only if everything else fails).
 
 
-   V   Fallback ``MX'' host.
+   w   If set, assume that if you are the best MX host for a host,
+       you should send directly to that host.  This is intended
+       for compatibility with UIUC sendmail, and may have some
+       use on firewalls.
 
 
-   7   Do not run eight bit clean.
+   7   Do not run eight bit clean.  Technically, you have to assert
+       this option to be RFC 821 compatible.
 
 Extended Options
 
 
 Extended Options
 
@@ -206,7 +282,8 @@ New Mailer Flags
    a   Try to use ESMTP.  It will fall back to SMTP if the initial
        EHLO packet is rejected.
 
    a   Try to use ESMTP.  It will fall back to SMTP if the initial
        EHLO packet is rejected.
 
-   b   Ensure a blank line at the end of messages.
+   b   Ensure a blank line at the end of messages.  Useful on the
+       *file* mailer.
 
    c   Strip all comments from addresses; this should only be used as
        a last resort when dealing with cranky mailers.
 
    c   Strip all comments from addresses; this should only be used as
        a last resort when dealing with cranky mailers.
@@ -257,7 +334,15 @@ Auto-Quoting in Addresses
 Symbolic Names On Error Mailer
 
    Several names have been built in to the $@ portion of the $#error
 Symbolic Names On Error Mailer
 
    Several names have been built in to the $@ portion of the $#error
-   mailer.
+   mailer.  For example:
+
+       $#error $@NOHOST $: Host unknown
+
+New Built-In Mailers
+
+   Two new mailers, *file* and *include*, are included to define options
+   when mailing to a file or a :include: file respectively.  Previously
+   these were overloaded on the local mailer.
 
 SMTP VRFY Doesn't Expand
 
 
 SMTP VRFY Doesn't Expand
 
@@ -267,6 +352,7 @@ SMTP VRFY Doesn't Expand
    As an optimization, if you run with your default delivery mode
    being queue-only, the RCPT command will also not chase aliases and
    .forward files.  It will chase them when it processes the queue.
    As an optimization, if you run with your default delivery mode
    being queue-only, the RCPT command will also not chase aliases and
    .forward files.  It will chase them when it processes the queue.
+   This speeds up RCPT processing.
 
 [IPC] Mailers Allow Multiple Hosts
 
 
 [IPC] Mailers Allow Multiple Hosts
 
@@ -281,7 +367,10 @@ SMTP VRFY Doesn't Expand
 Aliases Extended
 
    The implementation has been merged with maps.  Among other things,
 Aliases Extended
 
    The implementation has been merged with maps.  Among other things,
-   this supports NIS-based aliases.
+   this supports multiple alias files and NIS-based aliases.  For
+   example:
+
+       OA/etc/aliases,nis:mail.aliases
 
 Portability and Security Enhancements
 
 
 Portability and Security Enhancements
 
@@ -291,11 +380,13 @@ Portability and Security Enhancements
 
 Miscellaneous Enhancements
 
 
 Miscellaneous Enhancements
 
-   Sendmail writes a /etc/sendmail.pid file with the current process id.
+   Sendmail writes a /etc/sendmail.pid file with the current process id
+   and the current invocation flags.
 
    Two people using the same program (e.g., submit) are considered
    "different" so that duplicate elimination doesn't delete one of
 
    Two people using the same program (e.g., submit) are considered
    "different" so that duplicate elimination doesn't delete one of
-   them.
+   them.  For example, two people forwarding their email to
+   |submit will be treated as two recipients.
 
    The mailstats program prints mailer names and gets the location of
    the sendmail.st file from /etc/sendmail.cf.
 
    The mailstats program prints mailer names and gets the location of
    the sendmail.st file from /etc/sendmail.cf.
diff --git a/usr.sbin/sendmail/FAQ b/usr.sbin/sendmail/FAQ
new file mode 100644 (file)
index 0000000..8419a30
--- /dev/null
@@ -0,0 +1,213 @@
+                           Sendmail Version 8
+                       Frequently Asked Questions
+                            VERY EARLY DRAFT
+                      Last Update: October 18, 1993
+
+
+This FAQ is specific to Version 8 of sendmail.
+
+----------------------------------------------------------------------
+  * What are the differences between Version 8 and other versions?
+
+       See CHANGES-R5-R8 in the anonymous FTP directory.
+----------------------------------------------------------------------
+  * What happened to sendmail 6.x and 7.x?
+
+       When I released a new version of sendmail, I changed it to
+       Release 6.  Development continued in that tree until 4.4BSD
+       was released, when everything on the 4.4 tape was set to be
+       version 8.1.  Version 7.x never existed.
+----------------------------------------------------------------------
+  * Where can I get Version 8?
+
+       Via anonymous FTP from FTP.CS.Berkeley.EDU in /ucb/sendmail.
+----------------------------------------------------------------------
+  * Version 8 requires a new version of "make".  Where can I get this?
+
+       Actually, Version 8 does not require a new version of "make".
+       It includes a collection of Makefiles for different architectures,
+       only one or two of which require the new "make".  If you are
+       porting to a new architecture, start with Makefile.dist.
+
+       If you really do want the new make, it is available on any of
+       the BSD Net2 distribution sites.  These include:
+
+               ftp.uu.net              /systems/unix/bsd-sources
+               gatekeeper.dec.com      /.0/BSD/net2
+               ucquais.cba.uc.edu      /pub/net2
+               ftp.luth.se             /pub/unix/4.3bsd/net2
+----------------------------------------------------------------------
+  * What macro package do I use to format the V8 man pages?
+
+       The BSD group switched over the the ``mandoc'' macros for
+       the 4.4 release.  These include more hooks designed for
+       hypertext handling.  However, new man pages won't format
+       under the old man macros.  Fortunately, old man pages will
+       format under the new mandoc macros.
+
+       Get the new macros with the BSD Net2 release.
+----------------------------------------------------------------------
+  * What books are available describing sendmail?
+
+       There are currently no books available devoted to sendmail.
+       However, there are several books that have sendmail chapters.
+
+       Nemeth, Snyder, and Seebass, _Unix System Administration
+               Handbook_.  Prentice-Hall.
+       Carl-Mitchell and Quarterman, _Practical Internetworking with
+               TCP/IP and UNIX_.  Addison-Wesley.
+       Hunt, _TCP/IP Network Administration_.  O'Reilly & Associates.
+
+|      At least two books are due out "soon":
+
+       Costales, Allman, and Rickert, _Sendmail_.  O'Reilly &
+|              Associates (to appear 11/93).
+       Avolio & Vixie, _Sendmail Theory and Practice_.  Digital
+|              Press (release date unknown).
+----------------------------------------------------------------------
+  * How do I make all my addresses appear to be from a single host?
+
+       Using the V8 configuration macros, use:
+
+               MASQUERADE_AS(my.dom.ain)
+
+       This will cause all addresses to be sent out as being from
+       the indicated domain.
+----------------------------------------------------------------------
+  * How do I rewrite my From: lines to read ``First_Last@My.Domain''?
+
+       There are a couple of ways of doing this.  This describes using
+       the "user database" code.  This is still experimental, and was
+       intended for a different purpose -- however, it does work
+       with a bit of care.  It does require that you have the Berkeley
+       "db" package installed (it won't work with DBM).
+
+       First, create your input file.  This should have lines like:
+
+               loginname:mailname      First_Last
+               First_Last:maildrop     loginname
+
+       Install it in (say) /etc/userdb.  Create the database:
+
+               makemap btree /etc/userdb.db < /etc/userdb
+
+       You can then create a config file that uses this.  You will
+       have to include the following in your .mc file:
+
+               define(confUSERDB_SPEC, /etc/userdb.db)
+               FEATURE(notsticky)
+----------------------------------------------------------------------
+  * So what was the user database feature intended for?
+
+       The intent was to have all information for a given user (where
+       the user is the unique login name, not an inherently non-unique
+       full name) in one place.  This would include phone numbers,
+       addresses, and so forth.  The "maildrop" feature is because
+       Berkeley does not use a centralized mail server (there are a
+       number of reasons for this that are mostly historic), and so
+       we need to know where each user gets his or her mail delivered --
+       i.e., the mail drop.
+
+       We are in the process of setting up our environment so that
+       mail sent to an unqualified "name" goes to that person's
+       preferred maildrop; mail sent to "name@host" goes to that
+       host.  The purpose of "FEATURE(notsticky)" is to cause
+       "name@host" to be looked up in the user database for delivery
+       to the maildrop.
+----------------------------------------------------------------------
+  * Why are you so hostile to using full names for e-mail addresses?
+
+       Because full names are not unique.  For example, the computer
+       community has two Andy Tannenbaums and two Peter Deutsches.
+       At one time, Bell Labs had two Stephen R. Bournes with offices
+       a few doors apart.  You can create alternative addresses
+       (e.g., Stephen_R_Bourne_2), but that's even worse -- which
+       one of them has to have their name desecrated in this way?
+       And you can bet that they will get most of the other person's
+       email.
+
+       So called "full names" are just longer versions of unique
+       names.  Rather that lulling people into a sense of security,
+       I'd rather that it be clear that these handles are arbitrary.
+       People should use good user agents that have alias mappings
+       so that they can attach arbitrary names for their personal
+       use to those with whom they correspond.
+
+       Even worse is fuzzy matching in e-mail -- this can make good
+       addresses turn bad.  For example, I'm currently (to the best
+       of my knowledge) the only ``Allman'' at Berkeley, so mail
+       sent to "Allman@Berkeley.EDU" should get to me.  But if
+       another Allman ever appears, this address could suddenly
+       become ambiguous.  I've been the only Allman at Berkeley for
+       over fifteen years -- to suddenly have this "good address"
+       bounce mail because it is ambiguous would be a heinous wrong.
+
+       Finger services should be as fuzzy as possible.  Mail services
+       should be unique.
+----------------------------------------------------------------------
+  * When I use sendmail V8 with a Sun config file I get lines like:
+
+       /etc/sendmail.cf: line 273: replacement $3 out of bounds
+
+    the line in question reads:
+
+       R$*<@$%y>$*             $1<@$2.LOCAL>$3                 user@ether
+
+    what does this mean?  How do I fix it?
+
+       V8 doesn't recognize the Sun "$%y" syntax, so as far as it
+       is concerned, there is only a $1 and a $2 (but no $3) in this
+       line.  Read Rick McCarty's paper on "Converting Standard Sun
+       Config Files to Sendmail Version 8", in the contrib directory
+       (file "converting.sun.configs") on the sendmail distribution
+       for a full discussion of how to do this.
+----------------------------------------------------------------------
+  * Should I use a wildcard MX for my domain?
+
+       If at all possible, no.
+
+       Wildcard MX records have lots of semantic "gotcha"s.  For
+       example, they will match a host "unknown.your.domain" -- if
+       you don't explicitly test for unknown hosts in your domain,
+       you will get "config error: mail loops back to myself"
+       errors.
+----------------------------------------------------------------------
+  * I'm connected to the network via a SLIP link.  Sometimes my sendmail
+    process hangs (although it looks like part of the message has been
+    transfered).  Everything else works.  What's wrong?
+
+       Most likely, the problem isn't sendmail at all, but the low
+       level network connection.  It's important that the MTU (Maximum
+       Transfer Unit) for the SLIP connection be set properly at both
+       ends.  If they disagree, large packets will be trashed and
+       the connection will hang.
+----------------------------------------------------------------------
++ * How can I get sendmail to deliver local mail to $HOME/.mail
++   instead of into /usr/spool/mail (or /usr/mail)?
++
++      This is a local mailer issue, not a sendmail issue.  Either
++      modify your local mailer (source code will be required) or
++      change the program called in the "local" mailer configuration
++      description to be a new program that does this local delivery.
++      I understand that "procmail" works well, although I haven't
++      used it myself.
+----------------------------------------------------------------------
++ * Under V8, the "From " header gets mysteriously munged when I send
++   to an alias.
++
++      ``It's not a bug, it's a feature.''  This happens when you have
++      a "owner-list" alias and you send to "list".  V8 propogates the
++      owner information into the envelope sender field (which appears
++      as the "From " header on UNIX mail or as the Return-Path: header)
++      so that downstream errors are properly returned to the mailing
++      list owner instead of to the sender.  In order to make this
++      appear as sensible as possible to end users, I recommend making
++      the owner point to a "request" address -- for example:
++
++              list:           :include:/path/name/list.list
++              owner-list:     list-request
++              list-request:   eric
++
++      This will make message sent to "list" come out as being
++      "From list-request" instead of "From eric".
+----------------------------------------------------------------------
diff --git a/usr.sbin/sendmail/KNOWNBUGS b/usr.sbin/sendmail/KNOWNBUGS
new file mode 100644 (file)
index 0000000..3b64ca7
--- /dev/null
@@ -0,0 +1,51 @@
+
+
+            K N O W N   B U G S   I N   S E N D M A I L
+                            (for 8.6.3)
+
+
+The following are bugs or deficiencies in sendmail that I am aware of
+but which have not been fixed in the current release.  You probably
+want to get the most up to date version of this from FTP.CS.Berkeley.EDU
+in /ucb/sendmail/KNOWNBUGS.
+
+* "SYSERR: openmailer(local): fd 1 not open" message
+
+  File descriptor 1 (standard output) should not be closed during normal
+  processing.  This is checked periodically, and sometimes this condition
+  is found and this message is produced.  Sendmail repairs the problem,
+  and the mail is still delivered, but I still don't know why it happens.
+  (There was a bug that was fixed in 8.6.beta.13 that might be related,
+  but I think this bug still exists.)
+
+* Null bytes are not handled properly.
+
+  Sendmail should handle full binary data.  As it stands, it handles
+  any value from 0x01-0xFF in the body and 0x01-0x80 and 0xA0-0xFF in
+  the header.  Notably missing is 0x00, which would require a major
+  restructuring of the code -- for example, almost no C library support
+  could be used to handle strings.
+
+* Route-addrs missing angle brackets.
+
+  There are cases where route-addrs do not get angle brackets around them,
+  such as in the "-r" flag on mailers or in the From_ line created when
+  mailing to files.
+
+* Duplicate error messages.
+
+  Sometimes identical, duplicate error messages can be generated.  As
+  near as I can tell, this is rare and relatively innocuous.
+
+* No "exposed users" in "nullrelay" configuration.
+
+  The "nullrelay" configuration hides all addresses behind the mail
+  hub name.  Some sites might prefer to expose some names such as
+  root.  This information is always available in Received: lines.
+
+* If you EXPN a list or user that has a program mailer, the output of
+  EXPN will include ``@local.host.name''.  You can't actually mail to
+  this address.  It's not clear what the right behaviour is in this
+  circumstance.
+
+(Version 8.8, last updated 10/24/93)
index d75173b..1ad17dc 100644 (file)
@@ -1,13 +1,8 @@
-#       @(#)Makefile   8.1 (Berkeley) 6/7/93
+#       @(#)Makefile   8.2 (Berkeley) 9/25/93
 
 
-SUBDIR= mailstats makemap praliases
+SUBDIR= src mailstats makemap praliases
 VER=   XX
 
 VER=   XX
 
-# don't trivially install sendmail
-.if !make(install)
-SUBDIR+=src
-.endif
-
 tar: Files.base Files.cf Files.misc Files.xdoc
        (cd src; ${MAKE})
        (cd doc; PRINTER=ps ${MAKE})
 tar: Files.base Files.cf Files.misc Files.xdoc
        (cd src; ${MAKE})
        (cd doc; PRINTER=ps ${MAKE})
index de494f0..740fa6c 100644 (file)
@@ -1,5 +1,5 @@
 /*-
 /*-
- *     @(#)READ_ME     8.1 (Berkeley) 6/7/93
+ *     @(#)READ_ME     8.5 (Berkeley) 9/28/93
  */
 
                        SENDMAIL RELEASE 8
  */
 
                        SENDMAIL RELEASE 8
@@ -12,6 +12,39 @@ Report any bugs to sendmail@CS.Berkeley.EDU.
 The latest version of sendmail is kept on FTP.CS.Berkeley.EDU, directory
 /ucb/sendmail; check there for the latest revision.
 
 The latest version of sendmail is kept on FTP.CS.Berkeley.EDU, directory
 /ucb/sendmail; check there for the latest revision.
 
+
++--------------+
+| MANUAL PAGES |
++--------------+
+
+The sendmail manual pages use contemporary Berkeley troff macros.  If
+your system does not process these manual pages, you can pick up the
+new macros in a BSD Net/2 FTP site (e.g.  on FTP.UU.NET, the files
+/systems/unix/bsd-sources/share/tmac/me/strip.sed and
+/systems/unix/bsd-sources/share/tmac/*).
+
+The strip.sed file is only used in installation.
+
+After installation, edit tmac.doc and tmac.andoc to reflect the
+installation path of the tmac files.  Those files contain pointers to
+/usr/share/tmac/, and those pointers are not changed by the `make
+install` process.
+
+Rename the existing tmac.an to be tmac.an.old, and rename tmac.andoc
+to be tmac.an.
+
+tmac.an will choose between tmac.an.old, your old macros, or tmac.doc,
+which are the new macros, so that both the new man pages and the
+existing man pages will be translated properly.
+
+I'm also told that the groff distribution from MIT has a tmac.doc
+macro set that is compatible with these macros.
+
+
++--------------+
+| RELATED RFCS |
++--------------+
+
 There are several related RFCs that you may wish to read -- they are
 available via anonymous FTP to several sites, including nic.ddn.mil
 (directory rfc), ftp.nisc.sri.com (rfc), nis.nsf.net (RFC),
 There are several related RFCs that you may wish to read -- they are
 available via anonymous FTP to several sites, including nic.ddn.mil
 (directory rfc), ftp.nisc.sri.com (rfc), nis.nsf.net (RFC),
@@ -49,9 +82,10 @@ you to get this make from Net2 (available on many public FTP archives).
 Failing that, some directories have a "Makefile.dist" that will work on
 older versions of make (but don't have the niceties included).
 
 Failing that, some directories have a "Makefile.dist" that will work on
 older versions of make (but don't have the niceties included).
 
-Similar comments apply to the man pages -- they use the new Berkeley
--mandoc macros instead of the -man macros.  You can get these from
-Net2 as well.
+
++-------------------+
+| DATABASE ROUTINES |
++-------------------+
 
 IF YOU WANT TO RUN THE NEW BERKELEY DB SOFTWARE:  ****  DO NOT  ****
 use the version that was on the Net2 tape -- it has a number of
 
 IF YOU WANT TO RUN THE NEW BERKELEY DB SOFTWARE:  ****  DO NOT  ****
 use the version that was on the Net2 tape -- it has a number of
@@ -63,6 +97,11 @@ faster, and the interface is nicer to animals and plants.  You will
 also probably find that you have to add -I/where/you/put/db/include
 to the sendmail makefile to get db.h to work properly.
 
 also probably find that you have to add -I/where/you/put/db/include
 to the sendmail makefile to get db.h to work properly.
 
+
++---------------------+
+| DIRECTORY STRUCTURE |
++---------------------+
+
 The structure of this directory tree is:
 
 cf             Source for Berkeley configuration files.  These are
 The structure of this directory tree is:
 
 cf             Source for Berkeley configuration files.  These are
@@ -92,3 +131,4 @@ rmail                Source for rmail(8).  This is used as a delivery
                other non-socket oriented mailers.  Older versions of
                rmail are probably deficient.
 src            Source for the sendmail program itself.
                other non-socket oriented mailers.  Older versions of
                rmail are probably deficient.
 src            Source for the sendmail program itself.
+test           Some test scripts (currently only for compilation aids).
index 79846b8..72d2731 100644 (file)
@@ -1,6 +1,545 @@
+8.6.3/8.6.3    93/10/24
+       IMPORTANT FIX: Fix several problems that caused open files to
+               be "lost" during queue runs; this overflowed the open
+               file table on large runs.  An assumption that fdopen
+               always succeeds sometimes resulted in core dumps when
+               this happens; sometimes the message is delivered twice,
+               sometimes (probably) infinite times.  This problem in
+               various form was reported by P{r (Pell) Emanuelsson and
+               Robert Campbell of U.C. Berkeley.
+       Special diagnosis of EMFILE error conditions -- it now prints
+               the known open file descriptors so you can figure out
+               what is consuming so much resources.
+       Fix a couple of problems caused by early address parsing
+               errors -- one caused it to return a "this is only a
+               warning" when it really wasn't, and the other started
+               parsing through a random pointer.  The first was
+               noted by Eric Wassenaar.
+       Fix an infinite loop problem caused by null components in the
+               host signature.  Problem noted by Jan Sorensen.
+       Be sure to reset the "current date" when sending an error
+               message -- PostMasterCopy messages were being sent
+               with an old Date: header.
+       Fix a problem that caused duplicated mail when sendmail was
+               (1) compiled without HASFLOCK, (2) you are sending to
+               an alias that has an owner-* alias, (3) you execute
+               sendmail with -t flag, (4) you run in -odb mode, and
+               (5) the sender specifies both the alias name and
+               another alias [i.e., the envelope is split], then
+               duplicate messages are sent.  The problem description
+               and one-line fix are from Motonori Nakamura of Kyoto
+               University.
+       Avoid a problem that causes error messages to be discarded
+               in some cases -- this was the result of a "fix" to
+               avoid duplicate error messages, but two are better
+               than zero.  Reported by Tim Rylance.
+       Fix a minor botch in checkfd012() -- fix from Dave Hill of
+               Computervision R&D Ltd.
+       Remove "X-Authentication-Warning: <user> set sender to <address>
+               using -f" entirely -- it is far too eager to include
+               this, and it is confusing folks.  I'll try to make it
+               work "right" in 8.7.  Problem noted by Yoshitaka
+               Tokugawa of dit Co., Ltd.
+       Fix a race condition with the errno value in tick() and
+               reapchild() -- this caused occasional misdiagnosis
+               of problems.  Kyle Jones of UUNET helped this along.
+       Repair rule loop-detection code.  From Michael Corrigan of
+               U.C. San Diego.
+       Fix a problem that caused sender domain addition (C mailer
+               flag to be ignored if you use -odq or use -odb with
+               a high load average.  Problem reported by Jim Murray
+               of Stratus.
+       Fix ident protocol on multi-homed machines.  It was not
+               always using the correct interface.  Fix from J.R.
+               Oldroyd of Opal.
+       Previously, sendmail assumed that any SMTP greeting message
+               that wasn't 2xx was a temporary failure -- it should
+               only take 4xx as a temporary failure, and return a
+               solid error message on anything else -- for example,
+               to allow you to reject connections on a workstation
+               that is MXed to a mail server.
+       Portability enhancements for 386BSD/FreeBSD/NetBSD from
+               Ollivier Robert.
+       CONFIG: FEATURE(always_add_domain) didn't always add the domain;
+               in particular, on local mail it modified the header sender
+               but not the header recipient address(es).  Reported by
+               Jeffrey Honig of Cornell University.  Also, strip
+               any host from envelope recipient address(es), since
+               local mailers don't understand host names -- this is
+               to help mailertable entries.  From Christopher Davis.
+       CONFIG: masquerading didn't apply to addresses that already
+               had a domain.  This change replaces a local hostname
+               by the masquerade name in the SMTP mailer (previously
+               it only added the masquerade name if it didn't already
+               have a domain name).  Several people complained about
+               this.
+
+8.6.2/8.6.2    93/10/15
+       Put a "successful delivery" message in the transcript for
+               addresses that get return-receipts.
+       Put a prominent "this is only a warning" message in warning
+               messages -- some people don't read carefully enough
+               and end up sending the message several times.
+       Include reason for temporary failure in the "warning" return
+               message.  Currently, it just says "cannot send for
+               four hours".
+       Fix the "Original message received" time generated for
+               returntosender messages.  It was previously listed as
+               the current time.  Bug reported by Eric Hagberg of
+               Cornell University Medical College.
+       If there is an error when writing the body of a message,
+               don't send the trailing dot and wait for a response
+               in sender SMTP, as this could cause the connection to
+               hang up under some bizarre circumstances.  From Eric
+               Wassenaar.
+       Fix some server SMTP synchronization problems caused when
+               connections fail during message collection.  From
+               Eric Wassenaar.
+       Fix a problem that can cause srvrsmtp to reject mail if the
+               name server is down -- it accepts the RCPT but rejects
+               the DATA command.  Problem reported by Jim Murray of
+               Stratus.
+       Fix a problem that can cause core dumps if the config file
+               incorrectly resolves to a null hostname.  Reported by
+               Allan Johannesen of WPI.
+       Non-root use of -C flag, dangerous -f flags, and use of -oQ
+               by non-root users were not put into
+               X-Authentication-Warning:s as intended because the
+               config file hadn't set the PrivacyFlags yet.  Fix
+               from Sven-Ove Westberg of the University of Lulea.
+       Under very odd circumstances, the alias file rebuild code
+               could get confused as to whether a database was
+               open or not.
+       Check "vendor code" on the end of V lines -- this is
+               intended to provide a hook for vendor-specific
+               configuration syntax.  (This is a "new feature",
+               but I've made an exception to my rule in a belief
+               that this is a highly exceptional case.)
+       Portability fixes for DG/UX (from Douglas Anderson of NCSC),
+               SCO Unix (from Murray Kucherawy), A/UX, and OSF/1
+               (from Jon Forrest of UC Berkeley)
+       CONFIG: fix ``mailer:host'' form of UUCP relay naming.
+
+8.6.1/8.6      93/10/08
+       Portability fixes for A/UX and Encore UMAX V.
+       Fix error message handling -- if you had a name server down
+               causing an error during parsing, that message was never
+               propogated to the queue file.
+
+8.6/8.6                93/10/05
+       Configuration cleanup: make it easier to undo IDENTPROTO in
+               conf.h (other systems have the same bug).
+       If HASGETDTABLESIZE and _SC_OPEN_MAX are both defined, assume
+               getdtablesize() instead of sysconf(); a disturbingly
+               large number of systems defined _SC_OPEN_MAX in the
+               header files but don't have the syscall.
+       Another patch to really truly ignore MX records in getcanonname
+               if trymx == FALSE.
+       Fix problem that caused the "250 IAA25499 Message accepted for
+               delivery" message to be omitted if there was an error
+               in the header of the message (e.g., a bad Errors-To:
+               line).  Pointed out by Michael Corrigan of UCSD.
+       Announce name of host we are chatting when we get errors; this
+               is an IDA-ism suggested by Christophe Wolfhugel.
+       Portability fixes for Alpha OSF/1 (from Anthony Baxter of the
+               Australian Artificial Intelligence Institute), SCO Unix
+               (from Murray Kucherawy of Hookup Communication Corp.),
+               NeXT (from Vince DeMarco and myself), Linux (from
+               Karl London <karl@borg.demon.co.uk>), BSDI (from
+               Christophe Wolfhugel, and SVR4 on Dell (from Kimmo
+               Suominen), AUX 3.0 on Macintosh, and ANSI C compilers.
+       Some changes to get around gcc optimizer bugs.  From Takahiro
+               Kanbe.
+       Fix error recovery in queueup if another tf file of the same
+               name already exists.  Problem stumbled over by Bill
+               Wisner of The Well.
+       Output YP_MASTER_NAME and YP_LAST_MODIFIED without null bytes.
+               Problem noted by Keith McMillan of Ameritech Services.
+       Deal with group permissions properly when opening .forward and
+               :include: files.  This relaxes the 8.1C restrictions
+               slightly more.  This includes proper setting of groups
+               when reading :include: files, allowing you to read some
+               files that you should be able to read but have previously
+               been denied unless you owned them or they had "other"
+               read permission.
+       Make certain that $j is in $=w (after the .cf is read) so that
+               if the user is forced to override some silly system,
+               MX suppression will still work.
+       Fix a couple of efficiency problems where newstr was double-
+               calling expensive routines.  In at least one case, it
+               wasn't guaranteed that they would always return the
+               same result.  Problem noted by Christophe Wolfhugel.
+       Fix null pointer dereference in putoutmsg -- only on an error
+               condition from a non-SMTP mailer.  From Motonori
+               Nakamura.
+       Macro expand "C" line class definitions before scanning so that
+               "CX $Z" works.
+       Fix problem that caused error message to be sent while still
+               trying to send the original message if the connection
+               is closed during a DATA command after getting an error
+               on an RCPT command (pretty obscure).  Problem reported
+               by John Myers of CMU.
+       Fix reply to NOOP to be 250 instead of 200 -- this is a long
+               term bug.
+       Fix a nasty bug causing core dumps when returning the "warning:
+               cannot deliver for N hours -- will keep trying" message;
+               it only occurred if you had PostMasterCopy set and
+               only on some architectures.  Although sendmail would
+               keep trying, it would send error messages on each
+               queue interval.  This is an important fix.
+       Allow u and g options to take user and group names respectively.
+       Don't do a chdir into the queue directory in -bt mode to make
+               ruleset testing a bit easier.
+       Don't allow users to turn off logging (using -oL) on the command
+               line -- command line can only raise, not lower, logging
+               level.
+       Set $u to the original recipient on the SMTP transaction or on
+               the command line.  This is only done if there is exactly
+               one recipient.  Technically, this does not meet the
+               specs, because it does not guarantee a domain on the
+               address.
+       Fix a problem that dumped error messages on bad addresses if
+               you used the -t flag.  Problem noted by Josh Smith of
+               Harvey Mudd College.
+       Given an address such as ``<foo> <bar>'', auto-quote the first
+               ``<foo>'' part, giving ``"<foo>" <bar>''.  This is to
+               avoid the problem of people who use angle brackets in
+               their full name information.
+       Fix a null pointer dereference if you set option "l", have
+               an Errors-To: header in the message, and have Errors-To:
+               defined in the config file H lines.  From J.R. Oldroyd.
+       Put YPCOMPAT on #ifdef NIS instead -- it's one less thing to get
+               wrong when compiling.  Suggested by Rick McCarty of TI.
+       Fix a problem that could pass negative SIZE parameter if the
+               df file got lost; this would cause servers to always
+               give a temporary failure, making the problem even worse.
+               Problem noted by Allan Johannesen of WPI.
+       Add "ident" timeout (one of the "r" option selectors) for IDENT
+               protocol timeouts (30s default).  Requested by Murray
+               Kucherawy of HookUp Communication Corp. to handle bogus
+               PC TCP/IP implementations.
+       Change $w default definition to be just the first component of
+               the domain name on config level 5.  The $j macro defaults
+               to the FQDN; $m remains as before.  This lets well-behaved
+               config files use any of the short, long, or subdomain
+               names.
+       Add makesendmail script in src to try to automate multi-architecture
+               builds.  I know, this is sub-optimal, but it is still
+               helpful.
+       Fix very obscure race condition that can cause a queue run to
+               get a queue file for an already completed job.  This
+               problem has existed for years.  Problem noted by the
+               long suffering Allan Johannesen of WPI.
+       Fix a problem that caused the raw sender name to be passed to
+               udbsender instead of the canonified name -- this caused
+               it to sometimes miss records that it should have found.
+       Relax check of name on HELO packet so that a program using -bs
+               that claims to be itself works properly.
+       Restore rewriting of $: part of address through 2, R, 4 in
+               buildaddr -- this requires passing a lot of flags to get
+               it right.  Unlike old versions, this ONLY rewrites
+               recipient addresses, not sender addresses.
+       Fix a bug that caused core dumps in config files that cannot
+               resolve /file/name style addresses.  Fix from Jonathan
+               Kamens of OpenVision Technologies.
+       Fix problem with fcntl locking that can cause error returns to
+               be lost if the lock is lost; this required fully
+               queueing everything, dropping the envelope (so errors
+               would get returned), and then re-reading the queue from
+               scratch.
+       Fix a problem that caused aliases that redefine an otherwise
+               true address to still send to the original address
+               if and only if the alias failed in certain bizarre
+               ways (e.g, if they pointed at a list:; syntax address).
+               Problem pointed out by Jonathan Kamens.
+       Remove support for frozen configuration files.  They caused
+               more trouble than it was worth.
+       Fix problem that can cause error messages to get ignored when
+               using both -odb and -t flags.  Problem noted by Rob
+               McNicholas at U.C. Berkeley.
+       Include all "normal" variations on hostname in $=w.  For example,
+               if the host name is vangogh.cs.berkeley.edu, $=w will
+               contain vangogh, vangogh.cs, and vangogh.cs.berkeley.edu.
+       Add "restrictqrun" privacy flag -- without this, anyone can run
+               the queue.
+       Reset SmtpPhase global on initial connection creation so that
+               messages don't come out with stale information.
+       Pass an "ext" argument to lockfile so that error/log messages
+               will properly reflect the true filename being locked.
+       Put all [...] address forms into $=w -- this eliminates the need
+               for MAXIPADDR in conf.h.  Suggested by John Gardiner
+               Myers of CMU.
+       Fix a bug that can cause qf files to be left around even after
+               an SMTP RSET command.  Problem and fix from Michael
+               Corrigan.
+       Don't send a PostMasterCopy to errors when the Precedence: is
+               negative.  Error reports still go to the envelope
+               sender address.
+       Add LA_SHORT for load averages.
+       Lock sendmail.st file when posting statistics.
+       Add "SendBufSize" and "RcvBufSize" suboptions to "O" option to
+               set the size of the TCP send and receive buffers; if you
+               run over a slow slip line you may need to set these down
+               (although it would be better to fix the SLIP implementation
+               so that it's not necessary to recompile every program
+               that does bulk data transfer).
+       Allow null defaults on $( ... $) lookups.  Problem reported by
+               Amir Plivatsky.
+       Diagnose crufty S and V config lines.  This resulted from an
+               observation that some people were using the SITE macro
+               without the SITECONFIG macro first, which was causing
+               bogus config files that were not caught.
+       Fix makemap -f flag to turn off case folding (it was turning it
+               on instead).  THIS IS A USER VISIBLE CHANGE!!!
+       Fix a problem that caused multiple error messages to be sent if
+               you used "sendmail -t -oem -odb", your system uses fcntl
+               locking, and one of the recipient addresses is unknown.
+       Reset uid earlier in include() so that recursive .forwards or
+               :include:s don't use the wrong uid.
+       If file descriptor 0, 1, or 2 was closed when sendmail was
+               called, the code to recover the descriptor was broken.
+               This sometimes (only sometimes) caused problems with the
+               alias file.  Fix from Motonori Nakamura.
+       Fix a problem that caused aliaswait to go into infinite recursion
+               if the @:@ metasymbol wasn't found in the alias file.
+       Improve error message on newaliases if database files cannot be
+               opened or if running with no database format defined.
+       Do a better estimation of the size of error messages when NoReturn
+               is set.  Problem noted by P{r (Pell) Emanuelsson.
+       Fix a problem causing the "c" option (don't connect to expensive
+               mailers) to be ignored in SMTP.  Problem noted and the
+               solution suggested by Robert Elz of Munnari University.
+       Improve connection caching algorithm by passing "[host]" to
+               hostsignature, which strips the square brackets and
+               returns the real name.  This allows mailertable entries
+               to match regular entries.
+       Re-enable Return-Receipt-To: -- people seem to want this stupid
+               feature, even if it doesn't work right.
+       Catch and log attempts to try the "wiz" command in server SMTP.
+               This also ups the log level from LOG_NOTICE to LOG_CRIT.
+       Be more generous at assigning $z to the home directory -- do this
+               for programs that are specified through a .forward file.
+               Fix from Andrew Chang of Sun Microsystems.
+       Always save a fatal error message in preference to a non-fatal
+               error message so that the "subject" line of return
+               messages is the best possible.
+       CONFIG: reduce the number of quotes needed to quote configuration
+               parameters with commas: two quotes should work now, e.g.,
+               define(ALIAS_FILE, ``/etc/aliases,/etc/aliases.local'').
+       CONFIG: class $=Z is a set of UUCP hosts that use uucp-dom
+               connections (domain-ized UUCP).
+       CONFIG: fix bug in default maps (-o must be before database file
+               name).  Pointed out by Christophe Wolfhugel.  
+       CONFIG: add FEATURE(nodns) to state that we are not relying on
+               DNS.  This would presumably be used in UUCP islands.
+       CONFIG: add OSTYPE(nextstep) and OSTYPE(linux).
+       CONFIG: log $u in Received: line.  This is in technical violation
+               of the standards, since it doesn't guarantee a domain
+               on the address.
+       CONFIG: don't assume "m" in local mailer flags -- this means that
+               if you redefine LOCAL_MAILER_FLAGS you will have to include
+               the "m" flag should you want it.  Apparently some Solaris 2.2
+               installations can't handle multiple local recipients.
+               Problem noted by Josh Smith.
+       CONFIG: add confDOMAIN_NAME to set $j (if undefined, $j defaults).
+       CONFIG: change default version level from 4 to 5.
+       CONFIG: add FEATURE(nullclient) to create a config file that
+               forwards all mail to a hub without ever looking at the
+               addresses in any detail.
+       CONFIG: properly strip mailer: information off of relays when
+               used to change .BITNET form into %-hack form.
+       CONFIG: fix a problem that caused infinite loops if presented
+               with an address such as "!foo".
+       CONFIG: check for self literal (e.g., [128.32.131.12]) even if
+               the reverse "PTR" mapping is broken.  There's a better
+               way to do this, but the change is fairly major and I
+               want to hold it for another release.  Problem noted by
+               Bret Marquis.
+
+8.5/8.5                93/07/23
+       Serious bug: if you used a command line recipient that was unknown
+               sendmail would not send a return message (it was treating
+               everything as though it had an SMTP-style client that
+               would do the return itself).  Problem noted by Josh Smith.
+       Change "trymx" option in getcanonname() to ignore all MX data,
+               even during a T_ANY query.  This actually didn't break
+               anything, because the only time you called getcanonname
+               with !trymx was if you already knew there were no MX
+               records, but it is somewhat cleaner.  From Motonori
+               Nakamura.
+       Don't call getcanonname from getmxrr if you already know there
+               are no DNS records matching the name.
+       Fix a problem causing error messages to always include "The
+               original message was received ... from localhost".
+               The correct original host information is now included.
+       Previous change to cf/sh/makeinfo.sh doesn't port to Ultrix (their
+               version of "test" doesn't have the -x flag).  Change it
+               to use -f instead.  From John Myers.
+       CONFIG: 8.4 mistakenly set the default SMTP-style mailer to
+               esmtp -- it should be smtp.
+       CONFIG: send all relayed mail using confRELAY_MAILER (defaults
+               to "relay" (a variant of "smtp") if MAILER(smtp) is used,
+               else "suucp" if MAILER(uucp) is used, else "unknown");
+               this cleans up the configs somewhat.  This fixes a serious
+               problem that caused route-addrs to get mistaken as relays,
+               pointed out by John Myers.  WARNING: this also causes
+               the default on SMART_HOST to change from "suucp" to
+               "relay" if you have MAILER(smtp) specified.
+
+8.4/8.4                93/07/22
+       Add option `w'.  If you receive a message that comes to you because
+               you are the best (lowest preference) target of an MX, and
+               you haven't explicitly recognized the source MX host in
+               your .cf file, this option will cause you to try the target
+               host directly (as if there were no MX for it at all).  If
+               `w' is not set, this case is a configuration error.
+               Beware: if `w' is set, senders may get bogus errors like
+               "message timed out" or "host unknown" for problems that
+               are really configuration errors.  This option is
+               disrecommended, provided only for compatibility with
+               UIUC sendmail.
+       Fix a problem that caused the incoming socket to be left open
+               when sendmail forks after the DATA command.  This caused
+               calling systems to wait in FIN_WAIT_2 state until the
+               entire list was processed and the child closed -- a
+               potentially prodigious amount of time.  Problem noted
+               by Neil Rickert.
+       Fix problem (created in 6.64) that caused mail sent to multiple
+               addresses, one of which was a bad address, to completely
+               suppress the sending of the message.  This changes
+               handling of EF_FATALERRS somewhat, and adds an
+               EF_GLOBALERRS flag.  This also fixes a potential problem
+               with duplicate error messages if there is a syntax error
+               in the header of a message that isn't noticed until late
+               in processing.  Original problem pointed out by Josh Smith
+               of Harvey Mudd College.  This release includes quite a bit
+               of dickering with error handling (see below).
+       Back out SMTP transaction if MAIL gets nested 501 error.  This
+               will only hurt already-broken software and should help
+               humans.
+       Fix a problem that broke aliases when neither NDBM nor NEWDB were
+               compiled in.  It would never read the alias file.
+       Repair unbalanced `)' and `>' (the "open" versions are already
+               repaired).
+       Logging of "done" in dropenvelope() was incorrect: it would
+               log this even when the queue file still existed.  Change
+               this to only log "done" (at log level 11) when the
+               queue file is actually removed.  From John Myers.
+       Log "lost connection" in server SMTP at log level 20 if there
+               is no pending transaction.  Some senders just close the
+               connection rather than sending QUIT.
+       Fix a bug causing getmxrr to add a dot to the end of unqualified
+               domains that do not have MX records -- this would cause
+               the subsequent host name lookup to fail.  The problem
+               only occurred if you had FEATURE(nocanonify) set.
+               Problem noted by Rick McCarty of Texas Instruments.
+       Fix invocation of setvbuf when passed a -X flag -- I had
+               unwittingly used an ANSI C extension, and this caused
+               core dumps on some machines.
+       Diagnose self-destructive alias loops on RCPT as well as EXPN.
+               Previously it just gave an empty send queue, which
+               then gave either "Need RCPT (recipient)" at the DATA
+               (confusing, since you had given an RCPT command which
+               returned 250) or just dropped the email, depending on
+               whether you were running VERBose mode.  Now it usually
+               diagnoses this case as "aliasing/forwarding loop broken".
+               Unfortunately, it still doesn't adequately diagnose
+               some true error conditions.
+       Add internal concept of "warning messages" using 6xx codes.
+               These are not reported only to Postmaster.  Unbalanced
+               parens, brackets, and quotes are printed as 653 codes.
+               They are always mapped to 5xx codes before use in SMTP.
+       Clean up error messages to tell both the actual address that
+               failed and the alias they arose from.  This makes it
+               somewhat easier to diagnose problems.  Difficulty noted
+               by Motonori Nakamura.
+       Fix a problem that inappropriately added a ctladdr to addresses
+               that shouldn't have had one during a queue run.  This
+               caused error messages to be handled differently during
+               a queue run than a direct run.
+       Don't print the qf name and line number if you get errors during
+               the direct run of the queue from srvrsmtp -- this was
+               just extra stuff for users to crawl through.
+       Put command line flags on second line of pid file so you can
+               auto-restart the daemon with all appropriate arguments.
+               Use "kill `head -1 /etc/sendmail.pid`" to stop the
+               daemon, and "eval `tail -1 /etc/sendmail.pid`" to
+               restart it.
+       Remove the ``setuid(getuid())'' in main -- this caused the
+               IDENT daemon to screw up.  This required that I change
+               HASSETEUID to HASSETREUID and complicate the mode
+               changing somewhat because both Ultrix and SunOS seem
+               to have a bug causing seteuid() to set the saved uid
+               as well as the effective.  The program test/t_setreuid.c
+               will test to see if your implementation of setreuid(2)
+               is appropriately functional.
+       The FallBackMX (option V) handling failed to properly identify
+               fallback to yourself -- most of the code was there,
+               but it wasn't being enabled.  Problem noted by Murray
+               Kucherawy of the University of Waterloo.
+       Change :include: open timeout from ETIMEDOUT to an internal
+               code EOPENTIMEOUT; this avoids adding "during SmtpPhase
+               with CurHostName" in error messages, which can be
+               confusing.  Reported by Jonathan Kamens of OpenVision
+               Technologies.
+       Back out setpgrp (setpgid on POSIX systems) call to reset the
+               process group id.  The original fix was to get around
+               some problems with recalcitrant MUAs, but it breaks
+               any call from a shell that creates a process group id
+               different from the process id.  I could try to fix
+               this by diddling the tty owner (using tcsetpgrp or
+               equivalent) but this is too likely to break other
+               things.
+       Portability changes:
+               Support -M as equivalent to -oM on Ultrix -- apparently
+                       DECnet calls sendmail with -MrDECnet -Ms<HOST> -bs
+                       instead of using standard flags.  Oh joy.  This
+                       behaviour reported by Jon Giltner of University
+                       of Colorado.
+               SGI IRIX  -- this includes several changes that should
+                       help other strict ANSI compilers.
+               SCO Unix -- from Murray Kucherawy of HookUp Communication
+                       Corporation.
+               Solaris running the Sun C compiler (which despite the
+                       documentation apparently doesn't define
+                       __STDC__ by default).
+               ConvexOS from Eric Schnoebelen of Convex.
+               Sony NEWS workstations and Omron LUNA workstations from
+                       Motonori Nakamura.
+       CONFIG: add confTRY_NULL_MX_LIST to set option `w'.
+       CONFIG: delete `C' and `e' from default SMTP mailers flags;
+               several people have made a good argument that this
+               creates more problems than it solves (although this
+               may prove painful in the short run).
+       CONFIG: generalize all the relays to accept a "mailer:host"
+               format.
+       CONFIG: move local processing in ruleset 0 into a new ruleset
+               98 (8 on old sendmail).  Domain literal [a.b.c.d]
+               addresses are also passed through this ruleset.
+       CONFIG: if neither SMART_HOST nor MAILER(smtp) were defined,
+               internet-style addresses would "fall off the end" of
+               ruleset zero and be interpreted as local -- however,
+               the angle brackets confused the recursive call.
+               These are now diagnosed as "Unrecognized host name".
+       CONFIG: USENET rules weren't included in S0 because of a mistaken
+               ifdef(`_MAILER_USENET_') instead of
+               ifdef(`_MAILER_usenet_').  Problem found by Rein Tollevik
+               of SINTEF RUNIT, Oslo.
+       CONFIG: move up LOCAL_RULE_0 processing so that it happens very
+               early in ruleset 0; this allows .mc authors to bypass
+               things like the "short circuit" code for local addresses.
+               Prompted by a comment by Bill Wisner of The Well.
+       CONFIG: add confSMTP_MAILER to define the mailer used (smtp or
+               esmtp) to send SMTP mail.  This allows you to default
+               to esmtp but use a mailertable or other override to
+               deal with broken servers.  This logic was pointed out
+               to me by Bill Wisner.  Ditto for confLOCAL_MAILER.
+       Changes to cf/sh/makeinfo.sh to make it portable to SVR4
+               environments.  Ugly as sin.
+
 8.3/8.3                93/07/13
 8.3/8.3                93/07/13
-       Fix (I hope) setuid problems introduced in 8.2 that caused
-               messages like "Cannot create qfXXXXXX: Invalid argument"
+       Fix setuid problems introduced in 8.2 that caused messages
+               like "Cannot create qfXXXXXX: Invalid argument"
                or "Cannot reopen dfXXXXXX: Permission denied".  This
                involved a new compile flag "HASSETEUID" that takes
                the place of the old _POSIX_SAVED_IDS -- it turns out
                or "Cannot reopen dfXXXXXX: Permission denied".  This
                involved a new compile flag "HASSETEUID" that takes
                the place of the old _POSIX_SAVED_IDS -- it turns out
        Fix compilation problem in getauthinfo() if IDENTPROTO is off.
        Turn off DEFNAMES and DNSRCH when getting the hostsignature
                (i.e., MX records) in level 1 configuration files; this
        Fix compilation problem in getauthinfo() if IDENTPROTO is off.
        Turn off DEFNAMES and DNSRCH when getting the hostsignature
                (i.e., MX records) in level 1 configuration files; this
-               matches the old behaviour.  From Nakamura Motonori of
+               matches the old behaviour.  From Motonori Nakamura of
                Kyoto University.
        Improve error message printing -- if sent through an alias,
                error messages include the name of the alias in the
                Kyoto University.
        Improve error message printing -- if sent through an alias,
                error messages include the name of the alias in the
 
 6.53/6.25      93/04/15
        Properly diagnose ruleset zero returning null (instead of a mailer
 
 6.53/6.25      93/04/15
        Properly diagnose ruleset zero returning null (instead of a mailer
-               triple).  From Nakamura Motonori of Kyoto University.
+               triple).  From Motonori Nakamura of Kyoto University.
        More generalization of socket code for other protocols.
        Shorten timeouts on reverse name lookups -- since they are done
                during connection establishment, long timeouts here can
        More generalization of socket code for other protocols.
        Shorten timeouts on reverse name lookups -- since they are done
                during connection establishment, long timeouts here can
                messages in the log.
        Redefine $r, $s, and $_ in error envelopes so you don't get
                incorrect cruft in the error message.  Problem noted by
                messages in the log.
        Redefine $r, $s, and $_ in error envelopes so you don't get
                incorrect cruft in the error message.  Problem noted by
-               Nakamura Motonori of Kyoto University.
+               Motonori Nakamura of Kyoto University.
        Fix a problem that can cause failure to return errors to Postmaster
        Fix a problem that can cause failure to return errors to Postmaster
-               in certain cases.  From Nakamura Motonori.
+               in certain cases.  From Motonori Nakamura.
        Fix a problem that can cause some systems to give duplicate error
                messages when a bad syntax address such as "<a" is presented
                to an SMTP server.   It doesn't seem to occur on all
        Fix a problem that can cause some systems to give duplicate error
                messages when a bad syntax address such as "<a" is presented
                to an SMTP server.   It doesn't seem to occur on all
-               machines.  From Nakamura Motonori.
+               machines.  From Motonori Nakamura.
        Default IDENTPROTO off for Ultrix and HPUX, which apparently have
                the interesting "feature" that when they receive a "Host
                unreachable" message they closes all open connections to
        Default IDENTPROTO off for Ultrix and HPUX, which apparently have
                the interesting "feature" that when they receive a "Host
                unreachable" message they closes all open connections to
 
 6.52/6.24      93/04/10
        Clean up some minor glitches on error return messages pointed out
 
 6.52/6.24      93/04/10
        Clean up some minor glitches on error return messages pointed out
-               by Nakamura Motonori of Kyoto University.
+               by Motonori Nakamura of Kyoto University.
        Fix reply() to not reset SmtpReplyBuffer on fatal errors; this
                was supposed to reset SmtpMsg Buffer.  This makes the
                client side code virtually useless.  Reported by Allan
        Fix reply() to not reset SmtpReplyBuffer on fatal errors; this
                was supposed to reset SmtpMsg Buffer.  This makes the
                client side code virtually useless.  Reported by Allan
        Some ANSI C fixes.
        Arrange to quote backslashes as well as other special characters
                in the phrase part of a route-addr.
        Some ANSI C fixes.
        Arrange to quote backslashes as well as other special characters
                in the phrase part of a route-addr.
-       Some fixes to FallBackMX code suggested by Nakamura Motonori of
+       Some fixes to FallBackMX code suggested by Motonori Nakamura of
                Kyoto University.
        More vigorous zeroing of CurHostAddr to avoid logging of bogus
                host addresses when you are actually just printing
                Kyoto University.
        More vigorous zeroing of CurHostAddr to avoid logging of bogus
                host addresses when you are actually just printing
                by several people.
        Improve information printed when infinite loops are discovered.
        Zero CurHostAddr to fix erroneous internet addresses in log when no
                by several people.
        Improve information printed when infinite loops are discovered.
        Zero CurHostAddr to fix erroneous internet addresses in log when no
-               addresses can be bound.  Pointed out by Nakamura Motonori
+               addresses can be bound.  Pointed out by Motonori Nakamura
                of Kyoto University.
        "Probe" SMTP connections using RSET instead of NOOP "just in case".
                Suggested by John Gardiner Myers of CMU.
                of Kyoto University.
        "Probe" SMTP connections using RSET instead of NOOP "just in case".
                Suggested by John Gardiner Myers of CMU.
                of U.C. San Diego.
        Fall back to other MX records if there is an error anywhere
                in delivery (actually on MAIL or DATA -- RCPT is harder).
                of U.C. San Diego.
        Fall back to other MX records if there is an error anywhere
                in delivery (actually on MAIL or DATA -- RCPT is harder).
-               Suggested by John Gardiner Myers and Nakamura Motonori.
+               Suggested by John Gardiner Myers and Motonori Nakamura.
        Revert to non-prototypes -- it turns out that our ANSI C
                compiler is more forgiving than most others about
                mixing prototyped extern declarations with non-prototyped
        Revert to non-prototypes -- it turns out that our ANSI C
                compiler is more forgiving than most others about
                mixing prototyped extern declarations with non-prototyped
                John Gardiner Myers).
        Fixes to SysExMsg logging (sometimes just got "message: %s"
                instead of "message: error message"), noted by Eric
                John Gardiner Myers).
        Fixes to SysExMsg logging (sometimes just got "message: %s"
                instead of "message: error message"), noted by Eric
-               Wassenaar.  Also reported by Nakamura Motonori.
-       Improvements to MX piggybacking code, from Nakamura Motonori.
+               Wassenaar.  Also reported by Motonori Nakamura.
+       Improvements to MX piggybacking code, from Motonori Nakamura.
        Fix case where CurHostName points to an auto variable that has
        Fix case where CurHostName points to an auto variable that has
-               been deallocated (from Nakamura Motonori).
+               been deallocated (from Motonori Nakamura).
        Fix bug causing newlines to be included in aliases if option
                "n" (check alias RHS) is set; bug noted by David Muir
                Sharnoff.
        Fix bug causing newlines to be included in aliases if option
                "n" (check alias RHS) is set; bug noted by David Muir
                Sharnoff.
        Fix some more bugs in alias owner code -- there were some wierd
                cases where an error in a non-aliased name would override
                the return info in an aliased name with an owner.
        Fix some more bugs in alias owner code -- there were some wierd
                cases where an error in a non-aliased name would override
                the return info in an aliased name with an owner.
-       Changes from WIDE Project, forwarded to me by Nakamura Motonori:
+       Changes from WIDE Project, forwarded to me by Motonori Nakamura:
                Log actual delivery host (after MX et al); from
                        yasuhiro@dcl.co.jp.
                Log daemon startup.
                Log actual delivery host (after MX et al); from
                        yasuhiro@dcl.co.jp.
                Log daemon startup.
 6.24/6.7       93/02/19
        Increase the number of domain search entries in domain.c to allow
                for the extra "" entry indicating the root domain.
 6.24/6.7       93/02/19
        Increase the number of domain search entries in domain.c to allow
                for the extra "" entry indicating the root domain.
-               Reported by Nakamura Motonori of Kyoto U.
+               Reported by Motonori Nakamura of Kyoto U.
        Add a "SMART_HOST" in the configs for UUCP-connected sites that
                want to forward all mail with extra "@"s to that site.
                Also allows SMART_HOST, LOCAL_RELAY, and MAIL_HUB to
        Add a "SMART_HOST" in the configs for UUCP-connected sites that
                want to forward all mail with extra "@"s to that site.
                Also allows SMART_HOST, LOCAL_RELAY, and MAIL_HUB to
        Properly log message sender on returned mail during queue run.
        Count number of recipients properly.
        Fix a problem in yp map code.
        Properly log message sender on returned mail during queue run.
        Count number of recipients properly.
        Fix a problem in yp map code.
-       Diagnose "message timed out" (from Nakamura Motonori).
+       Diagnose "message timed out" (from Motonori Nakamura).
 
 6.11/6.3       93/01/20
        Fix problem with address delimitor inside quotes.
 
 6.11/6.3       93/01/20
        Fix problem with address delimitor inside quotes.
index c648a63..76e0ee3 100644 (file)
@@ -4,11 +4,11 @@
 
                Eric Allman <eric@CS.Berkeley.EDU>
 
 
                Eric Allman <eric@CS.Berkeley.EDU>
 
-               @(#)README      8.3 (Berkeley) 7/13/93
+               @(#)README      8.14 (Berkeley) 9/19/93
 
 
 This document describes the sendmail configuration files being used
 
 
 This document describes the sendmail configuration files being used
-at Berkeley.  These use features in the new (R6) sendmail, and although
+at Berkeley.  These use features in the new (R8) sendmail, and although
 there is an ``OLDSENDMAIL'' mode, they haven't really been tested on
 old versions of sendmail and cannot be expected to work well.
 
 there is an ``OLDSENDMAIL'' mode, they haven't really been tested on
 old versions of sendmail and cannot be expected to work well.
 
@@ -37,10 +37,13 @@ to keep this up in the future.  [Note to GNU folks:  the construct
 "define(`FOO')" should work without my having to add a null value.]
 
 IF YOU DON'T HAVE A BERKELEY MAKE, don't despair!  Just run
 "define(`FOO')" should work without my having to add a null value.]
 
 IF YOU DON'T HAVE A BERKELEY MAKE, don't despair!  Just run
-"m4 foo.mc > foo.cf" -- that should be all you need.
+"m4 foo.mc > foo.cf" -- that should be all you need.  There is also
+a fairly crude (but functional) Makefile.dist that works on the
+old version of make.
 
 To get started, you may want to look at tcpproto.mc (for TCP-only
 
 To get started, you may want to look at tcpproto.mc (for TCP-only
-sites) and uucpproto.m4 (for UUCP-only sites).  Others are versions
+sites), uucpproto.mc (for UUCP-only sites), and clientproto.mc (for
+clusters of clients using a single mail host).  Others are versions
 that we use at Berkeley, although not all are in current use.  For
 example, ucbarpa has gone away, but I've left ucbarpa.mc in because
 it demonstrates some interesting techniques.
 that we use at Berkeley, although not all are in current use.  For
 example, ucbarpa has gone away, but I've left ucbarpa.mc in because
 it demonstrates some interesting techniques.
@@ -105,7 +108,7 @@ This example exposes the host inside of the CS subdomain -- that is,
 it doesn't try to hide the name of the workstation to the outside
 world.  Changing this to DOMAIN(cs.hidden) would have made outgoing
 messages refer to "<username>@CS.Berkeley.EDU" instead of using the
 it doesn't try to hide the name of the workstation to the outside
 world.  Changing this to DOMAIN(cs.hidden) would have made outgoing
 messages refer to "<username>@CS.Berkeley.EDU" instead of using the
-local hostname.  Internaly this is effected by using
+local hostname.  Internally this is effected by using
 "MASQUERADE_AS(CS.Berkeley.EDU)".
 
        MAILER(smtp)
 "MASQUERADE_AS(CS.Berkeley.EDU)".
 
        MAILER(smtp)
@@ -139,10 +142,9 @@ QUEUE_DIR          [/var/spool/mqueue] The directory containing
                        queue files.
 STATUS_FILE            [/etc/sendmail.st] The file containing status
                        information.
                        queue files.
 STATUS_FILE            [/etc/sendmail.st] The file containing status
                        information.
-LOCAL_MAILER_PATH      [/usr/libexec/mail.local] The program used to 
-                       deliver local mail.
-LOCAL_MAILER_FLAGS     [rn] The flags used by the local mailer.  The
-                       flags lsDFMm are always included.
+LOCAL_MAILER_PATH      [/bin/mail] The program used to deliver local mail.
+LOCAL_MAILER_FLAGS     [rmn] The flags used by the local mailer.  The
+                       flags lsDFM are always included.
 LOCAL_MAILER_ARGS      [mail -d $u] The arguments passed to deliver local
                        mail.
 LOCAL_SHELL_PATH       [/bin/sh] The shell used to deliver piped email.
 LOCAL_MAILER_ARGS      [mail -d $u] The arguments passed to deliver local
                        mail.
 LOCAL_SHELL_PATH       [/bin/sh] The shell used to deliver piped email.
@@ -155,8 +157,11 @@ USENET_MAILER_PATH [/usr/lib/news/inews] The name of the program
 USENET_MAILER_FLAGS    [rlsDFMmn] The mailer flags for the usenet mailer.
 USENET_MAILER_ARGS     [-m -h -n] The command line arguments for the
                        usenet mailer.
 USENET_MAILER_FLAGS    [rlsDFMmn] The mailer flags for the usenet mailer.
 USENET_MAILER_ARGS     [-m -h -n] The command line arguments for the
                        usenet mailer.
-SMTP_MAILER_FLAGS      [undefined] Flags added to SMTP mailer.
-UUCP_MAILER_FLAGS      [undefined] Flags added to UUCP mailer.
+SMTP_MAILER_FLAGS      [undefined] Flags added to SMTP mailer.  Default
+                       flags are `mDFMUX' (and `a' for esmtp mailer).
+UUCP_MAILER_FLAGS      [undefined] Flags added to UUCP mailer.  Default
+                       flags are `DFMhuU' (and `m' for suucp mailer, minus
+                       `U' for uucp-dom mailer).
 UUCP_MAILER_ARGS       [uux - -r -z -a$f -gC $h!rmail ($u)] The arguments
                        passed to the UUCP mailer.
 UUCP_MAX_SIZE          [100000] The maximum size message accepted for
 UUCP_MAILER_ARGS       [uux - -r -z -a$f -gC $h!rmail ($u)] The arguments
                        passed to the UUCP mailer.
 UUCP_MAX_SIZE          [100000] The maximum size message accepted for
@@ -167,23 +172,6 @@ HOSTMAP_SPEC               [dbm -o /etc/hostmap] The value for the builtin
                        the hostmap.  The default flag (-o) makes this
                        map optional.
 
                        the hostmap.  The default flag (-o) makes this
                        map optional.
 
-In addition, the following boolean flags may be defined -- the value
-is ignored.
-
-NEED_DOMAIN            If set, the $j macro is defined as $w.$D.
-                       If not set, $j is defined as $w.  If this is
-                       set, the domain must be defined using the line
-                       DD<domainname> (probably in the domain file,
-                       but possibly in the .mc file).  You will only
-                       need this if you define your system hostname
-                       without a domain (type "hostname" -- if it
-                       has no dots in the output, you qualify) AND
-                       if you are not running the nameserver AND if
-                       the first (canonical) name in /etc/hosts for
-                       your machine has no domain -- OR if you are
-                       running Ultrix or OSF/1 sendmail.  Either of
-                       these is probably a mistake.
-
 +---------+
 | DOMAINS |
 +---------+
 +---------+
 | DOMAINS |
 +---------+
@@ -208,6 +196,15 @@ LOCAL_RELAY        The site that will handle unqualified names -- that
                only works at small sites, and there are better
                methods.
 
                only works at small sites, and there are better
                methods.
 
+Each of these can be either ``mailer:hostname'' (in which case the
+mailer is the internal mailer name, such as ``suucp'' and the hostname
+is the name of the host as appropriate for that mailer) or just a
+``hostname'', in which case a default mailer type (usually ``relay'',
+a variant on SMTP) is used.  WARNING: if you have a wildcard MX
+record matching your domain, you probably want to define these to
+have a trailing dot so that you won't get the mail diverted back
+to yourself.
+
 The domain file can also be used to define a domain name, if needed
 (using "DD<domain>") and set certain site-wide features.  If all hosts
 at your site masquerade behind one email name, you could also use
 The domain file can also be used to define a domain name, if needed
 (using "DD<domain>") and set certain site-wide features.  If all hosts
 at your site masquerade behind one email name, you could also use
@@ -248,6 +245,8 @@ uucp                The Unix-to-Unix Copy Program mailer.  Actually, this
                names in the $=Y class are sent to suucp.  Note that
                this is a function of what version of rmail runs on
                the receiving end, and hence may be out of your control.
                names in the $=Y class are sent to suucp.  Note that
                this is a function of what version of rmail runs on
                the receiving end, and hence may be out of your control.
+               If smtp is defined, it also defines a "uucp-dom" mailer
+               that uses domain-style rewriting.
 
 usenet         Usenet (network news) delivery.  If this is specified,
                an extra rule is added to ruleset 0 that forwards all
 
 usenet         Usenet (network news) delivery.  If this is specified,
                an extra rule is added to ruleset 0 that forwards all
@@ -284,25 +283,33 @@ use_cw_file       Read the file /etc/sendmail.cw file to get alternate
                "Cw<name1> <name2> ..." is probably superior.
                The actual filename can be overridden by redefining
                confCW_FILE.
                "Cw<name1> <name2> ..." is probably superior.
                The actual filename can be overridden by redefining
                confCW_FILE.
+
 redirect       Reject all mail addressed to "address.REDIRECT" with
                a ``551 User not local; please try <address>'' message.
                If this is set, you can alias people who have left
                to their new address with ".REDIRECT" appended.
 redirect       Reject all mail addressed to "address.REDIRECT" with
                a ``551 User not local; please try <address>'' message.
                If this is set, you can alias people who have left
                to their new address with ".REDIRECT" appended.
+
 nouucp         Don't do anything special with UUCP addresses at all.
 nouucp         Don't do anything special with UUCP addresses at all.
+
 nocanonify     Don't pass addresses to $[ ... $] for canonification.
                This would generally only be used by sites that only
                act as mail gateways or which have user agents that do
 nocanonify     Don't pass addresses to $[ ... $] for canonification.
                This would generally only be used by sites that only
                act as mail gateways or which have user agents that do
-               full canonification themselves.
+               full canonification themselves.  You may also want to
+               use "define(`confBIND_OPTS',`-DNSRCH -DEFNAMES')" to
+               turn off the usual resolver options that do a similar
+               thing.
+
 notsticky      By default, email sent to "user@local.host" are marked
                as "sticky" -- that is, the local addresses aren't
                matched against UDB and don't go through ruleset 5.
                This features disables this treatment.  It would
                normally be used on network gateway machines.
 notsticky      By default, email sent to "user@local.host" are marked
                as "sticky" -- that is, the local addresses aren't
                matched against UDB and don't go through ruleset 5.
                This features disables this treatment.  It would
                normally be used on network gateway machines.
+
 mailertable    Include a "mailer table" which can be used to override
                routing for particular domains.  The argument of the
                FEATURE may be the key definition.  If none is specified,
                the definition used is:
 mailertable    Include a "mailer table" which can be used to override
                routing for particular domains.  The argument of the
                FEATURE may be the key definition.  If none is specified,
                the definition used is:
-                       hash /etc/mailertable -o
+                       hash -o /etc/mailertable
                Keys in this database are fully qualified domain names
                or partial domains preceded by a dot -- for example,
                "vangogh.CS.Berkeley.EDU" or ".CS.Berkeley.EDU".
                Keys in this database are fully qualified domain names
                or partial domains preceded by a dot -- for example,
                "vangogh.CS.Berkeley.EDU" or ".CS.Berkeley.EDU".
@@ -311,32 +318,37 @@ mailertable       Include a "mailer table" which can be used to override
                where "mailer" is the internal mailer name, and "domain"
                is where to send the message.  These maps are not
                reflected into the message header.
                where "mailer" is the internal mailer name, and "domain"
                is where to send the message.  These maps are not
                reflected into the message header.
+
 domaintable    Include a "domain table" which can be used to provide
                full domains on unqualified (single word) hosts.  The
                argument of the FEATURE may be the key definition.  If
                none is specified, the definition used is:
 domaintable    Include a "domain table" which can be used to provide
                full domains on unqualified (single word) hosts.  The
                argument of the FEATURE may be the key definition.  If
                none is specified, the definition used is:
-                       hash /etc/domaintable -o
+                       hash -o /etc/domaintable
                The key in this table is the unqualified host name; the
                value is the fully qualified domain.  Anything in the
                domaintable is reflected into headers; that is, this
                is done in ruleset 3.
                The key in this table is the unqualified host name; the
                value is the fully qualified domain.  Anything in the
                domaintable is reflected into headers; that is, this
                is done in ruleset 3.
+
 bitdomain      Look up bitnet hosts in a table to try to turn them into
                internet addresses.  The table can be built using the
 bitdomain      Look up bitnet hosts in a table to try to turn them into
                internet addresses.  The table can be built using the
-               bitdomain program contributed by John Gardiner Meyers.
+               bitdomain program contributed by John Gardiner Myers.
                The argument of the FEATURE may be the key definition; if
                none is specified, the definition used is:
                The argument of the FEATURE may be the key definition; if
                none is specified, the definition used is:
-                       hash /etc/bitdomain.db -o
+                       hash -o /etc/bitdomain.db
                Keys are the bitnet hostname; values are the corresponding
                internet hostname.
                Keys are the bitnet hostname; values are the corresponding
                internet hostname.
+
 uucpdomain     Similar feature for UUCP hosts.  The default map definition
                is:
 uucpdomain     Similar feature for UUCP hosts.  The default map definition
                is:
-                       hash /etc/uudomain.db -o
+                       hash -o /etc/uudomain.db
                At the moment there is no automagic tool to build this
                database.
                At the moment there is no automagic tool to build this
                database.
+
 always_add_domain
                Include the local host domain even on locally delivered
                mail.  Normally it is not added unless it is already
                present.
 always_add_domain
                Include the local host domain even on locally delivered
                mail.  Normally it is not added unless it is already
                present.
+
 allmasquerade  If masquerading is enabled (using MASQUERADE_AS), this
                feature will cause recipient addresses to also masquerade
                as being from the masquerade host.  Normally they get
 allmasquerade  If masquerading is enabled (using MASQUERADE_AS), this
                feature will cause recipient addresses to also masquerade
                as being from the masquerade host.  Normally they get
@@ -350,8 +362,22 @@ allmasquerade      If masquerading is enabled (using MASQUERADE_AS), this
                namespace on your masquerade host supersets all the
                local entries.
 
                namespace on your masquerade host supersets all the
                local entries.
 
-Other FEATUREs should be defined, but I was trying to keep these
-config files fairly lean and mean.
+nodns          We aren't running DNS at our site (for example,
+               we are UUCP-only connected).  It's hard to consider
+               this a "feature", but hey, it had to go somewhere.
+
+nullclient     This is a special case -- it creates a stripped down
+               configuration file containing nothing but support for
+               forwarding all mail to a central hub via a local
+               SMTP-based network.  The argument is the name of that
+               hub.
+               
+               The only other feature that should be used in conjunction
+               with this one is "nocanonify" (this causes addresses to
+               be sent unqualified via the SMTP connection; normally
+               they are qualifed with the masquerade name, which
+               defaults to the name of the hub machine).  No mailers
+               should be defined.  No aliasing or forwarding is done.
 
 
 +-------+
 
 
 +-------+
@@ -469,6 +495,10 @@ indicated domain, rather than $j.  One normally masquerades as one
 of your own subdomains (for example, it's unlikely that I would
 choose to masquerade as an MIT site).
 
 of your own subdomains (for example, it's unlikely that I would
 choose to masquerade as an MIT site).
 
+The masquerade name is not normally canonified, so it is important
+that it be your One True Name, that is, fully qualified and not a
+CNAME.
+
 there are always users that need to be "exposed" -- that is, their
 internal site name should be displayed instead of the masquerade name.
 Root is an example.  You can add users to this list using
 there are always users that need to be "exposed" -- that is, their
 internal site name should be displayed instead of the masquerade name.
 Root is an example.  You can add users to this list using
@@ -497,8 +527,8 @@ This adds users to class L; you could also use something like
 
        FL/etc/sendmail.cL
 
 
        FL/etc/sendmail.cL
 
-If you want all mail sent to a centralized hub, as for a shared
-/var/spool/mail scheme, use
+If you want all incoming mail sent to a centralized hub, as for a
+shared /var/spool/mail scheme, use
 
        define(`MAIL_HUB', mailer:hostname)
 
 
        define(`MAIL_HUB', mailer:hostname)
 
@@ -519,6 +549,20 @@ mammoth.CS.Berkeley.EDU
 Both LOCAL_RELAY and   mail.CS.Berkeley.EDU      mammoth.CS.Berkeley.EDU
 MAIL_HUB set as above
 
 Both LOCAL_RELAY and   mail.CS.Berkeley.EDU      mammoth.CS.Berkeley.EDU
 MAIL_HUB set as above
 
+If you want all outgoing mail to go to a central relay site, define
+SMART_HOST as well.  Briefly:
+
+       LOCAL_RELAY applies to unqualifed names (e.g., "eric").
+       MAIL_HUB applies to names qualified with the name of the
+               local host (e.g., "eric@mastodon.CS.Berkeley.EDU").
+       SMART_HOST applies to names qualified with other hosts.
+
+However, beware that other relays (e.g., UUCP_RELAY, BITNET_RELAY, and
+FAX_RELAY) take precedence over SMART_HOST, so if you really want
+absolutely everything to go to a single central site you will need to
+unset all the other relays -- or better yet, find or build a minimal
+config file that does this.
+
 
 +-------------------------------+
 | NON-SMTP BASED CONFIGURATIONS |
 
 +-------------------------------+
 | NON-SMTP BASED CONFIGURATIONS |
@@ -535,7 +579,7 @@ using:
 
        define(`SMART_HOST', mailer:hostname)
 
 
        define(`SMART_HOST', mailer:hostname)
 
-In this case, the ``mailer:'' defaults to "suucp".  Any messages that
+In this case, the ``mailer:'' defaults to "relay".  Any messages that
 can't be handled using the usual UUCP rules are passed to this host.
 
 If you are on a local SMTP-based net that connects to the outside
 can't be handled using the usual UUCP rules are passed to this host.
 
 If you are on a local SMTP-based net that connects to the outside
@@ -560,6 +604,84 @@ use:
 That is, send directly only to things you found in your DNS lookup;
 anything else goes through SMART_HOST.
 
 That is, send directly only to things you found in your DNS lookup;
 anything else goes through SMART_HOST.
 
+If you are not running DNS at all, it is important to use
+FEATURE(nodns) to avoid having sendmail queue everything waiting
+for the name server to come up.
+
+
++-----------+
+| WHO AM I? |
++-----------+
+
+Normally, the $j macro is automatically defined to be your fully
+qualified domain name (FQDN).  Sendmail does this by getting your
+host name using gethostname and then calling gethostbyname on the
+result.  For example, in some environments gethostname returns
+only the root of the host name (such as "foo"); gethostbyname is
+supposed to return the FQDN ("foo.bar.com").  In some (fairly rare)
+cases, gethostbyname may fail to return the FQDN.  In this case
+you MUST define confDOMAIN_NAME to be your fully qualified domain
+name.  This is usually done using:
+
+       Dmbar.com
+       define(`confDOMAIN_NAME', `$w.$m')dnl
+
+
++--------------------+
+| USING MAILERTABLES |
++--------------------+
+
+To use FEATURE(mailertable), you will have to create an external
+database containing the routing information for various domains.
+For example, a mailertable file in text format might be:
+
+       .my.domain              xnet:%1.my.domain
+       uuhost1.my.domain       suucp:uuhost1
+       .bitnet                 smtp:relay.bit.net
+
+This should normally be stored in /etc/mailertable.  The actual
+database version of the mailertable is built using:
+
+       makemap hash /etc/mailertable.db < /etc/mailertable
+
+The semantics are simple.  Any LHS entry that does not begin with
+a dot matches the full host name indicated.  LHS entries beginning
+with a dot match anything ending with that domain name -- that is,
+they can be thought of as having a leading "*" wildcard.  Matching
+is done in order of most-to-least qualified -- for example, even
+though ".my.domain" is listed first in the above example, an entry
+of "uuhost1.my.domain" will match the second entry since it is
+more explicit.
+
+The RHS should always be a "mailer:host" pair.  The mailer is the
+configuration name of a mailer (that is, an `M' line in the
+sendmail.cf file).  The "host" will be the hostname passed to
+that mailer.  In domain-based matches (that is, those with leading
+dots) the "%1" may be used to interpolate the wildcarded part of
+the host name.  For example, the first line above sends everything
+addressed to "anything.my.domain" to that same host name, but using
+the (presumably experimental) xnet mailer.
+
+
++--------------------------------+
+| USING USERDB TO MAP FULL NAMES |
++--------------------------------+
+
+The user database was not originally intended for mapping full names
+to login names (e.g., Eric.Allman => eric), but some people are using
+it that way.  (I would recommend that you set up aliases for this
+purpose instead -- since you can specify multiple alias files, this
+is fairly easy.)  The intent was to locate the default maildrop at
+a site, but allow you to override this by sending to a specific host.
+
+If you decide to set up the user database in this fashion, it is
+imperative that you also specify FEATURE(notsticky) -- otherwise,
+e-mail sent to Full.Name@local.host.name will be rejected.
+
+To build the internal form of the user databae, use:
+
+       makemap btree /usr/data/base.db < /usr/data/base.txt
+
 
 +------------------+
 | FlexFAX SOFTWARE |
 
 +------------------+
 | FlexFAX SOFTWARE |
@@ -569,16 +691,16 @@ Sam Leffler's FlexFAX software is still in beta test -- but he expects a
 public version out "later this week" [as of 3/1/93].  The following
 blurb is direct from Sam:
 
 public version out "later this week" [as of 3/1/93].  The following
 blurb is direct from Sam:
 
-       $Header: /freefall/a/cvs/386BSD/src/usr.sbin/sendmail/cf/README,v 1.3 1993/07/30 17:20:26 nate Exp $
+       $Header: /usr/people/sam/fax/RCS/HOWTO,v 1.14 93/05/24 11:42:16 sam Exp $
 
        How To Obtain This Software (in case all you get is this file)
 
        How To Obtain This Software (in case all you get is this file)
-
+       --------------------------------------------------------------
        The source code is available for public ftp on
        The source code is available for public ftp on
-           sgi.com                     sgi/fax/v2.1beta.tar.Z
+           sgi.com                     sgi/fax/v2.1.src.tar.Z
                (192.48.153.1)
 
        You can also obtain inst'able images for Silicon Graphics machines from
                (192.48.153.1)
 
        You can also obtain inst'able images for Silicon Graphics machines from
-           sgi.com                     sgi/fax/v2.1beta.inst.tar
+           sgi.com                     sgi/fax/v2.1.inst.tar
                (192.48.153.1)
 
        For example,
                (192.48.153.1)
 
        For example,
@@ -588,47 +710,69 @@ blurb is direct from Sam:
            ... <type in password>
            ftp> cd sgi/fax
            ftp> binary
            ... <type in password>
            ftp> cd sgi/fax
            ftp> binary
-           ftp> get v2.1beta.tar.Z
-
-       If you cannot use FTP at all, there is a service called "ftpmail"
-       available from gateekeeper.dec.com:  you can send e-mail to this
-       machine and it will use FTP to retrieve files for you and send you the
-       files back again via e-mail.  To find out more about the ftpmail
+           ftp> get v2.1.src.tar.Z
+
+       In general, the latest version of the 2.1 release of the software is
+       always available as "v2.1.src.tar.Z" or "v2.1.inst.tar" in the ftp
+       directory.  This file is a link to the appropriate released version (so
+       don't waste your time retrieving the linked file as well!) Any files of
+       the form v2.1.*.patch are shell scripts that can be used to patch older
+       versions of the source code.  For example, the file v2.1.0.patch would
+       contain patches to update v2.1.0.tar.Z.  (Note to beta testers: this is
+       different than the naming conventions used during beta testing.) Patch
+       files only work to go between consecutive versions, so if you are
+       multiple versions behind the latest release, you will need to apply
+       each patch file between your current version and the latest.
+
+
+       Obtaining the Software by Electronic Mail
+       -----------------------------------------
+       Do not send me requests for the software; they will be ignored (without
+       response).  If you cannot use FTP at all, there is a service called
+       "ftpmail" available from gatekeeper.dec.com:  you can send e-mail to
+       this machine and it will use FTP to retrieve files for you and send you
+       the files back again via e-mail.  To find out more about the ftpmail
        service, send a message to "ftpmail@gatekeeper.dec.com" whose body
        consists of the single line "help".
 
        service, send a message to "ftpmail@gatekeeper.dec.com" whose body
        consists of the single line "help".
 
+
+       Obtaining the Software Within Silicon Graphics
+       ----------------------------------------------
        Internal to Silicon Graphics there are inst'able images on the host
        Internal to Silicon Graphics there are inst'able images on the host
-       flake.asd in the directory /d/dist.  Thus you can do something like:
+       flake.asd in the directory /usr/dist.  Thus you can do something like:
 
 
-           % inst -f flake.asd.sgi.com:/d/dist/flexfax
+           % inst -f flake.asd.sgi.com:/usr/dist/flexfax
 
 
-       to install the software on your machine.
+       to install the latest version of the software on your machine.
 
 
+
+       What to do Once You've Retrieved Stuff
+       --------------------------------------
        The external distributions come in a compressed or uncompressed tar
        file.  To extract the source distribution:
 
        The external distributions come in a compressed or uncompressed tar
        file.  To extract the source distribution:
 
-           % zcat v2.1beta.tar.Z | tar xf -
+           % zcat v2.1.src.tar.Z | tar xf -
 
        (uncompress and extract individual files in current directory).  To
        unpack and install the client portion of the inst'able distribution:
 
            % mkdir dist
 
        (uncompress and extract individual files in current directory).  To
        unpack and install the client portion of the inst'able distribution:
 
            % mkdir dist
-           % cd dist; tar xf ../v2.1beta.inst.tar; cd ..
+           % cd dist; tar xf ../v2.1.inst.tar; cd ..
            % inst -f dist/flexfax
            ...
            inst> go
 
        (Note, the dist subdirectory is because some versions of inst fail if
            % inst -f dist/flexfax
            ...
            inst> go
 
        (Note, the dist subdirectory is because some versions of inst fail if
-       the files are in the current directory.) Server binaries is also
-       included in the inst'able images as flexfax.server.*.  It is not
-       installed by default, so to get it also you need to extract the do:
+       the files are in the current directory.) Server binaries are also
+       included in the inst'able images as flexfax.server.*.  They are not
+       installed by default, so to get them also you need to do:
 
            % inst -f flexfax
            ...
            inst> install flexfax.server.*
            inst> go
 
 
            % inst -f flexfax
            ...
            inst> install flexfax.server.*
            inst> go
 
-       The SGI binaries were built for Version 4.0.5 of the IRIX operating
+       The SGI binaries were built for Version 4.0.5H of the IRIX operating
        system.  They should work w/o problem on earlier versions of the
        system, but I have not fully tested this.  Also, note that to install a
        server on an SGI machine, you need to have installed the Display
        system.  They should work w/o problem on earlier versions of the
        system, but I have not fully tested this.  Also, note that to install a
        server on an SGI machine, you need to have installed the Display
@@ -636,23 +780,35 @@ blurb is direct from Sam:
        server will not be able to convert PostScript to facsimile for
        transmission.
 
        server will not be able to convert PostScript to facsimile for
        transmission.
 
-       If you are working from the source distribution, look at the file README
-       in the top of the source tree.  If you are working from the inst images,
-       you need to run faxaddmodem to setup and configure your fax modem.  Do
-       man faxaddmodem for more information.
+       If you are working from the source distribution, look at the file
+       README in the top of the source tree.  If you are working from the inst
+       images, the subsystem flexfax.man.readme contains the README file and
+       other useful pieces of information--the installed files are placed in
+       the directory /usr/local/doc/flexfax).  Basically you will need to run
+       the faxaddmodem script to setup and configure your fax modem.  Consult
+       the README file and the manual page for faxaddmodem for information.
 
 
-Also from Sam:
 
 
+       FlexFAX Mail List
+       -----------------
        A mailing list for users of this software is located on sgi.com.
        If you want to join this mailing list or have a list-related request
        such as getting your name removed from it, send a request to
 
        A mailing list for users of this software is located on sgi.com.
        If you want to join this mailing list or have a list-related request
        such as getting your name removed from it, send a request to
 
-           flexfax-request@sgi.com
+           majordomo@whizzer.wpd.sgi.com
+
+       For example, to subscribe, send the line "subscribe flexfax" in
+       the body of your message.  The line "help" will return a list of
+       the commands understood by the mailing list management software.
 
        Submissions (including bug reports) should be directed to:
 
            flexfax@sgi.com
 
 
        Submissions (including bug reports) should be directed to:
 
            flexfax@sgi.com
 
+       When corresponding about this software please always specify what
+       version you have, what system you're running on, and, if the problem is
+       specific to your modem, identify the modem and firmware revision.
+
 
 +--------------------------------+
 | TWEAKING CONFIGURATION OPTIONS |
 
 +--------------------------------+
 | TWEAKING CONFIGURATION OPTIONS |
@@ -679,7 +835,7 @@ confFROM_LINE               From $g  $d     Dl      The From_ line used when
 confFROM_HEADER                $?x$x <$g>$|$g$.        The format of an internally
                                        Dq      generated From: address.
 confOPERATORS          .:%@!^/[]       Do      Address operator characters.
 confFROM_HEADER                $?x$x <$g>$|$g$.        The format of an internally
                                        Dq      generated From: address.
 confOPERATORS          .:%@!^/[]       Do      Address operator characters.
-confSTMP_LOGIN_MSG     $j Sendmail $v/$Z ready at $b
+confSMTP_LOGIN_MSG     $j Sendmail $v/$Z ready at $b
                                        De      The initial (spontaneous)
                                                SMTP greeting message.
 confSEVEN_BIT_INPUT    False           O7      Force input to seven bits?
                                        De      The initial (spontaneous)
                                                SMTP greeting message.
 confSEVEN_BIT_INPUT    False           O7      Force input to seven bits?
@@ -711,6 +867,9 @@ confBIND_OPTS               (empty)         OI      Default options for BIND.
 confMIME_FORMAT_ERRORS True            Oj *    Send error messages as MIME-
                                                encapsulated messages per
                                                RFC 1344.
 confMIME_FORMAT_ERRORS True            Oj *    Send error messages as MIME-
                                                encapsulated messages per
                                                RFC 1344.
+confFORWARD_PATH       (undefined)     OJ      The colon-separated list of
+                                               places to search for .forward
+                                               files.
 confMCI_CACHE_SIZE     2               Ok      Size of open connection cache.
 confMCI_CACHE_TIMEOUT  5m              OK      Open connection cache timeout.
 confUSE_ERRORS_TO      False           Ol *    Use the Errors-To: header to
 confMCI_CACHE_SIZE     2               Ok      Size of open connection cache.
 confMCI_CACHE_TIMEOUT  5m              OK      Open connection cache timeout.
 confUSE_ERRORS_TO      False           Ol *    Use the Errors-To: header to
@@ -743,6 +902,11 @@ confTIME_ZONE              USE_SYSTEM      Ot      Time zone info -- can be
 confDEF_USER_ID                1               Ou      Default user id.
 confUSERDB_SPEC                (undefined)     OU      User database specification.
 confFALLBACK_MX                (undefined)     OV      Fallback MX host.
 confDEF_USER_ID                1               Ou      Default user id.
 confUSERDB_SPEC                (undefined)     OU      User database specification.
 confFALLBACK_MX                (undefined)     OV      Fallback MX host.
+confTRY_NULL_MX_LIST   False           Ow      If we are the best MX for a
+                                               host and haven't made other
+                                               arrangements, try connecting
+                                               to the host directly; normally
+                                               this would be a config error.
 confQUEUE_LA           8               Ox      Load average at which queue-only
                                                function kicks in.
 confREFUSE_LA          12              OX      Load average at which incoming
 confQUEUE_LA           8               Ox      Load average at which queue-only
                                                function kicks in.
 confREFUSE_LA          12              OX      Load average at which incoming
@@ -756,6 +920,20 @@ confWORK_TIME_FACTOR       (undefined)     OZ      Cost of each delivery attempt.
 confCW_FILE            /etc/sendmail.cw        Name of file used to get the
                                        Fw      local additions to the $=w
                                                class.
 confCW_FILE            /etc/sendmail.cw        Name of file used to get the
                                        Fw      local additions to the $=w
                                                class.
+confSMTP_MAILER                smtp            -       The mailer name used when
+                                               SMTP connectivity is required.
+                                               Either "smtp" or "esmtp".
+confLOCAL_MAILER       local           -       The mailer name used when
+                                               local connectivity is required.
+                                               Almost always "local".
+confRELAY_MAILER       relay           -       The default mailer name used
+                                               for relaying any mail (e.g.,
+                                               to a BITNET_RELAY, a
+                                               SMART_HOST, or whatever).
+                                               This can reasonably be "suucp"
+                                               if you are on a UUCP-connected
+                                               site.
+confDOMAIN_NAME                (undefined)     Dj      If defined, sets $j.
 
 
 +-----------+
 
 
 +-----------+
@@ -829,6 +1007,7 @@ RULESETS (* means built in to sendmail)
   90   Mailertable host stripping
   96   Bottom half of Ruleset 3 (ruleset 6 in old sendmail)
   97   Hook for recursive ruleset 0 call (ruleset 7 in old sendmail)
   90   Mailertable host stripping
   96   Bottom half of Ruleset 3 (ruleset 6 in old sendmail)
   97   Hook for recursive ruleset 0 call (ruleset 7 in old sendmail)
+  98   Local part of ruleset 0 (ruleset 8 in old sendmail)
 
 
 MAILERS
 
 
 MAILERS
@@ -897,7 +1076,7 @@ CLASSES
    W   UUCP hosts connected to relay $W
    X   UUCP hosts connected to relay $X
    Y   locally connected smart UUCP hosts
    W   UUCP hosts connected to relay $W
    X   UUCP hosts connected to relay $X
    Y   locally connected smart UUCP hosts
-   Z
+   Z   locally connected domain-ized UUCP hosts
    .   the class containing only a dot
 
 
    .   the class containing only a dot
 
 
index 37ca97b..e01fa33 100644 (file)
@@ -1,4 +1,4 @@
-#      @(#)Makefile    8.1 (Berkeley) 6/7/93
+#      @(#)Makefile    8.4 (Berkeley) 10/15/93
 
 M4=    m4
 #M4=   /usr/src/usr.bin/m4/obj/m4
 
 M4=    m4
 #M4=   /usr/src/usr.bin/m4/obj/m4
@@ -10,7 +10,7 @@ RM=   rm -f
 
 .mc.cf:
        $(RM) $@
 
 .mc.cf:
        $(RM) $@
-       (cd ${.CURDIR} && $(M4) ${@:R}.mc) > $@
+       (cd ${.CURDIR} && $(M4) ${@:R}.mc > obj/$@)
        $(CHMOD) $(ROMODE) $@
 
 ALL=   cs-hidden.cf cs-exposed.cf \
        $(CHMOD) $(ROMODE) $@
 
 ALL=   cs-hidden.cf cs-exposed.cf \
@@ -18,10 +18,11 @@ ALL=        cs-hidden.cf cs-exposed.cf \
        sunos3.5-cs-exposed.cf sunos3.5-cs-hidden.cf \
        sunos4.1-cs-exposed.cf sunos4.1-cs-hidden.cf \
        ultrix4.1-cs-exposed.cf ultrix4.1-cs-hidden.cf \
        sunos3.5-cs-exposed.cf sunos3.5-cs-hidden.cf \
        sunos4.1-cs-exposed.cf sunos4.1-cs-hidden.cf \
        ultrix4.1-cs-exposed.cf ultrix4.1-cs-hidden.cf \
+       osf1-cs-exposed.cf osf1-cs-hidden.cf \
        mail.cs.cf mail.eecs.cf ucbvax.cf vangogh.cf \
        chez.cf knecht.cf cogsci.cf alpha.cf s2k.cf auspex.cf \
        mail.cs.cf mail.eecs.cf ucbvax.cf vangogh.cf \
        chez.cf knecht.cf cogsci.cf alpha.cf s2k.cf auspex.cf \
-       python.cf sun-lamp.cf boat-anchor.cf\
-       tcpproto.cf uucpproto.cf 
+       python.cf \
+       clientproto.cf tcpproto.cf uucpproto.cf whisker.cf
 
 all: $(ALL)
 
 
 all: $(ALL)
 
@@ -31,23 +32,53 @@ clean cleandir:
 depend install: 
 
 # this is overkill, but....
 depend install: 
 
 # this is overkill, but....
-M4FILES=../domain/cs.exposed.m4 \
-       ../domain/cs.hidden.m4 \
+M4FILES=\
        ../domain/Berkeley.m4 \
        ../domain/Berkeley.m4 \
+       ../domain/cs.exposed.m4 \
+       ../domain/cs.hidden.m4 \
+       ../domain/eecs.hidden.m4 \
+       ../domain/s2k.m4 \
+       ../feature/allmasquerade.m4 \
+       ../feature/always_add_domain.m4 \
+       ../feature/bitdomain.m4 \
+       ../feature/domaintable.m4 \
+       ../feature/mailertable.m4 \
+       ../feature/nocanonify.m4 \
+       ../feature/nodns.m4 \
+       ../feature/notsticky.m4 \
+       ../feature/nouucp.m4 \
+       ../feature/nullclient.m4 \
+       ../feature/redirect.m4 \
        ../feature/use_cw_file.m4 \
        ../feature/use_cw_file.m4 \
+       ../feature/uucpdomain.m4 \
        ../hack/cssubdomain.m4 \
        ../m4/cf.m4 \
        ../hack/cssubdomain.m4 \
        ../m4/cf.m4 \
+       ../m4/nullrelay.m4 \
        ../m4/proto.m4 \
        ../m4/version.m4 \
        ../m4/proto.m4 \
        ../m4/version.m4 \
+       ../mailer/fax.m4 \
        ../mailer/local.m4 \
        ../mailer/smtp.m4 \
        ../mailer/local.m4 \
        ../mailer/smtp.m4 \
+       ../mailer/usenet.m4 \
        ../mailer/uucp.m4 \
        ../mailer/uucp.m4 \
+       ../ostype/aix3.m4 \
        ../ostype/bsd4.3.m4 \
        ../ostype/bsd4.4.m4 \
        ../ostype/bsd4.3.m4 \
        ../ostype/bsd4.4.m4 \
+       ../ostype/hpux.m4 \
+       ../ostype/irix.m4 \
+       ../ostype/linux.m4 \
+       ../ostype/nextstep.m4 \
+       ../ostype/osf1.m4 \
        ../ostype/riscos4.5.m4 \
        ../ostype/riscos4.5.m4 \
+       ../ostype/solaris2.m4 \
        ../ostype/sunos3.5.m4 \
        ../ostype/sunos4.1.m4 \
        ../ostype/sunos3.5.m4 \
        ../ostype/sunos4.1.m4 \
+       ../ostype/svr4.m4 \
        ../ostype/ultrix4.1.m4 \
        ../ostype/ultrix4.1.m4 \
+       ../siteconfig/uucp.cogsci.m4 \
+       ../siteconfig/uucp.old.arpa.m4 \
+       ../siteconfig/uucp.ucbarpa.m4 \
+       ../siteconfig/uucp.ucbvax.m4 \
 
 $(ALL):  $(M4FILES)
 
 
 $(ALL):  $(M4FILES)
 
diff --git a/usr.sbin/sendmail/cf/cf/Makefile.dist b/usr.sbin/sendmail/cf/cf/Makefile.dist
new file mode 100644 (file)
index 0000000..074529e
--- /dev/null
@@ -0,0 +1,85 @@
+#
+#  Makefile for configuration files.
+#
+#      @(#)Makefile.dist       8.1 (Berkeley) 8/25/93
+
+M4=    m4
+#M4=   /usr/src/usr.bin/m4/obj/m4
+CHMOD= chmod
+ROMODE=        444
+RM=    rm -f
+
+.SUFFIXES:  .mc .cf
+
+.mc.cf:
+       $(RM) $@
+       $(M4) $*.mc > $@
+       $(CHMOD) $(ROMODE) $@
+
+ALL=   cs-hidden.cf cs-exposed.cf \
+       hpux-cs-exposed.cf hpux-cs-hidden.cf \
+       sunos3.5-cs-exposed.cf sunos3.5-cs-hidden.cf \
+       sunos4.1-cs-exposed.cf sunos4.1-cs-hidden.cf \
+       ultrix4.1-cs-exposed.cf ultrix4.1-cs-hidden.cf \
+       mail.cs.cf mail.eecs.cf ucbvax.cf vangogh.cf \
+       chez.cf knecht.cf cogsci.cf alpha.cf s2k.cf auspex.cf \
+       python.cf \
+       clientproto.cf tcpproto.cf uucpproto.cf
+
+all: $(ALL)
+
+clean cleandir:
+       $(RM) $(ALL) core
+
+depend install: 
+
+# this is overkill, but....
+M4FILES=\
+       ../domain/Berkeley.m4 \
+       ../domain/cs.exposed.m4 \
+       ../domain/cs.hidden.m4 \
+       ../domain/eecs.hidden.m4 \
+       ../domain/s2k.m4 \
+       ../feature/allmasquerade.m4 \
+       ../feature/always_add_domain.m4 \
+       ../feature/bitdomain.m4 \
+       ../feature/domaintable.m4 \
+       ../feature/mailertable.m4 \
+       ../feature/nocanonify.m4 \
+       ../feature/nodns.m4 \
+       ../feature/notsticky.m4 \
+       ../feature/nouucp.m4 \
+       ../feature/nullclient.m4 \
+       ../feature/redirect.m4 \
+       ../feature/use_cw_file.m4 \
+       ../feature/uucpdomain.m4 \
+       ../hack/cssubdomain.m4 \
+       ../m4/cf.m4 \
+       ../m4/nullrelay.m4 \
+       ../m4/proto.m4 \
+       ../m4/version.m4 \
+       ../mailer/fax.m4 \
+       ../mailer/local.m4 \
+       ../mailer/smtp.m4 \
+       ../mailer/usenet.m4 \
+       ../mailer/uucp.m4 \
+       ../ostype/aix3.m4 \
+       ../ostype/bsd4.3.m4 \
+       ../ostype/bsd4.4.m4 \
+       ../ostype/hpux.m4 \
+       ../ostype/irix.m4 \
+       ../ostype/linux.m4 \
+       ../ostype/nextstep.m4 \
+       ../ostype/osf1.m4 \
+       ../ostype/riscos4.5.m4 \
+       ../ostype/solaris2.m4 \
+       ../ostype/sunos3.5.m4 \
+       ../ostype/sunos4.1.m4 \
+       ../ostype/svr4.m4 \
+       ../ostype/ultrix4.1.m4 \
+       ../siteconfig/uucp.cogsci.m4 \
+       ../siteconfig/uucp.old.arpa.m4 \
+       ../siteconfig/uucp.ucbarpa.m4 \
+       ../siteconfig/uucp.ucbvax.m4 \
+
+$(ALL):  $(M4FILES)
diff --git a/usr.sbin/sendmail/cf/cf/clientproto.mc b/usr.sbin/sendmail/cf/cf/clientproto.mc
new file mode 100644 (file)
index 0000000..902c1eb
--- /dev/null
@@ -0,0 +1,49 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+#
+#  This the prototype for a "null client" -- that is, a client that
+#  does nothing except forward all mail to a mail hub.
+#
+#  To use this, you MUST use the nullclient feature with the name of
+#  the mail hub as its argument.  You MAY also define an OSTYPE to
+#  define the location of the queue directories and the like.
+#  Other than these, it should never contain any other lines.
+#
+
+include(`../m4/cf.m4')
+VERSIONID(`@(#)clientproto.mc  8.2 (Berkeley) 8/21/93')
+
+FEATURE(nullclient, mailhost.$m)
index cb447c1..227e2fe 100644 (file)
@@ -34,9 +34,10 @@ divert(-1)
 #
 
 include(`../m4/cf.m4')
 #
 
 include(`../m4/cf.m4')
-VERSIONID(`@(#)mail.cs.mc      8.1 (Berkeley) 6/7/93')
+VERSIONID(`@(#)mail.cs.mc      8.3 (Berkeley) 10/15/93')
 OSTYPE(ultrix4.1)dnl
 OSTYPE(ultrix4.1)dnl
-DOMAIN(cs.exposed)dnl
+DOMAIN(Berkeley)dnl
+MASQUERADE_AS(CS.Berkeley.EDU)dnl
 FEATURE(notsticky)dnl
 MAILER(local)dnl
 MAILER(smtp)dnl
 FEATURE(notsticky)dnl
 MAILER(local)dnl
 MAILER(smtp)dnl
diff --git a/usr.sbin/sendmail/cf/cf/osf1-cs-exposed.mc b/usr.sbin/sendmail/cf/cf/osf1-cs-exposed.mc
new file mode 100644 (file)
index 0000000..eaed6cc
--- /dev/null
@@ -0,0 +1,41 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+include(`../m4/cf.m4')
+VERSIONID(`@(#)osf1-cs-exposed.mc      8.1 (Berkeley) 10/15/93')
+OSTYPE(osf1)dnl
+DOMAIN(cs.exposed)dnl
+MAILER(local)dnl
+MAILER(smtp)dnl
diff --git a/usr.sbin/sendmail/cf/cf/osf1-cs-hidden.mc b/usr.sbin/sendmail/cf/cf/osf1-cs-hidden.mc
new file mode 100644 (file)
index 0000000..2b85ba4
--- /dev/null
@@ -0,0 +1,41 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+include(`../m4/cf.m4')
+VERSIONID(`@(#)osf1-cs-hidden.mc       8.1 (Berkeley) 10/15/93')
+OSTYPE(osf1)dnl
+DOMAIN(cs.hidden)dnl
+MAILER(local)dnl
+MAILER(smtp)dnl
index 7fcb65a..aa31ca1 100644 (file)
@@ -33,8 +33,18 @@ divert(-1)
 # SUCH DAMAGE.
 #
 
 # SUCH DAMAGE.
 #
 
+#
+#  This is the prototype file for a configuration that supports nothing
+#  but basic SMTP connections via TCP.
+#
+#  You may want to add an OSTYPE macro to get the location of various
+#  support files for your operating system environment.
+#
+
 include(`../m4/cf.m4')
 include(`../m4/cf.m4')
-VERSIONID(`@(#)tcpproto.mc     8.1 (Berkeley) 6/7/93')
+VERSIONID(`@(#)tcpproto.mc     8.2 (Berkeley) 8/21/93')
+
 FEATURE(nouucp)
 FEATURE(nouucp)
+
 MAILER(local)
 MAILER(smtp)
 MAILER(local)
 MAILER(smtp)
index 9fe749e..c460d76 100644 (file)
@@ -33,7 +33,17 @@ divert(-1)
 # SUCH DAMAGE.
 #
 
 # SUCH DAMAGE.
 #
 
+#
+#  This is the prototype for a configuration that only supports UUCP.
+#
+#  You may want to add an OSTYPE macro to get the location of various
+#  support files for your operating system environment.
+#
+
 include(`../m4/cf.m4')
 include(`../m4/cf.m4')
-VERSIONID(`@(#)uucpproto.mc    8.1 (Berkeley) 6/7/93')
+VERSIONID(`@(#)uucpproto.mc    8.3 (Berkeley) 8/21/93')
+
+FEATURE(nodns)dnl
+
 MAILER(local)dnl
 MAILER(uucp)dnl
 MAILER(local)dnl
 MAILER(uucp)dnl
diff --git a/usr.sbin/sendmail/cf/cf/whisker.mc b/usr.sbin/sendmail/cf/cf/whisker.mc
new file mode 100644 (file)
index 0000000..b21cd88
--- /dev/null
@@ -0,0 +1,42 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+include(`../m4/cf.m4')
+VERSIONID(`@(#)whisker.mc      8.1 (FreeBSD) 25/10/93')
+OSTYPE(bsd4.4)
+
+FEATURE(nouucp)
+MAILER(local)dnl
+MAILER(smtp)dnl
index fc72e07..c151c4e 100644 (file)
@@ -33,8 +33,11 @@ divert(-1)
 # SUCH DAMAGE.
 #
 divert(0)
 # SUCH DAMAGE.
 #
 divert(0)
-VERSIONID(`@(#)Berkeley.m4     8.1 (Berkeley) 6/7/93')
+VERSIONID(`@(#)Berkeley.m4     8.3 (Berkeley) 10/5/93')
 define(`UUCP_RELAY', `ucbvax.Berkeley.EDU')dnl
 define(`BITNET_RELAY', `jade.Berkeley.EDU')dnl
 define(`UUCP_RELAY', `ucbvax.Berkeley.EDU')dnl
 define(`BITNET_RELAY', `jade.Berkeley.EDU')dnl
-define(`CSNET_RELAY', `Relay.Prime.COM')dnl
+define(`CSNET_RELAY', `Relay.CV.COM')dnl
+define(`confFORWARD_PATH', `$z/.forward.$w:$z/.forward')dnl
+define(`confCW_FILE', `-o /etc/sendmail.cw')dnl
 FEATURE(redirect)dnl
 FEATURE(redirect)dnl
+FEATURE(use_cw_file)dnl
index 91ee8ae..f9302f4 100644 (file)
@@ -34,12 +34,12 @@ divert(-1)
 #
 
 divert(0)
 #
 
 divert(0)
-VERSIONID(`@(#)bitdomain.m4    8.1 (Berkeley) 6/7/93')
+VERSIONID(`@(#)bitdomain.m4    8.3 (Berkeley) 8/7/93')
 divert(-1)
 
 
 PUSHDIVERT(6)
 divert(-1)
 
 
 PUSHDIVERT(6)
-Kbitdomain ifelse(_ARG_, `', `hash /etc/bitdomain -o', `_ARG_')
+Kbitdomain ifelse(_ARG_, `', `hash -o /etc/bitdomain', `_ARG_')
 POPDIVERT
 
 
 POPDIVERT
 
 
index 5c059e9..bfad1bc 100644 (file)
@@ -34,7 +34,7 @@ divert(-1)
 #
 
 divert(0)
 #
 
 divert(0)
-VERSIONID(`@(#)domaintable.m4  8.1 (Berkeley) 7/8/93')
+VERSIONID(`@(#)domaintable.m4  8.2 (Berkeley) 8/9/93')
 divert(-1)
 
 divert(-1)
 
-define(`DOMAIN_TABLE', ifelse(_ARG_, `', `hash /etc/domaintable -o', `_ARG_'))dnl
+define(`DOMAIN_TABLE', ifelse(_ARG_, `', `hash -o /etc/domaintable', `_ARG_'))dnl
index 89e1748..fa39997 100644 (file)
@@ -34,7 +34,7 @@ divert(-1)
 #
 
 divert(0)
 #
 
 divert(0)
-VERSIONID(`@(#)mailertable.m4  8.1 (Berkeley) 6/7/93')
+VERSIONID(`@(#)mailertable.m4  8.3 (Berkeley) 8/7/93')
 divert(-1)
 
 divert(-1)
 
-define(`MAILER_TABLE', ifelse(_ARG_, `', `hash /etc/mailertable -o', `_ARG_'))dnl
+define(`MAILER_TABLE', ifelse(_ARG_, `', `hash -o /etc/mailertable', `_ARG_'))dnl
diff --git a/usr.sbin/sendmail/cf/feature/nodns.m4 b/usr.sbin/sendmail/cf/feature/nodns.m4
new file mode 100644 (file)
index 0000000..465a5ae
--- /dev/null
@@ -0,0 +1,40 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+divert(0)
+VERSIONID(`@(#)nodns.m4        8.1 (Berkeley) 8/6/93')
+divert(-1)
+
+undefine(`confBIND_OPTS')dnl
diff --git a/usr.sbin/sendmail/cf/feature/nullclient.m4 b/usr.sbin/sendmail/cf/feature/nullclient.m4
new file mode 100644 (file)
index 0000000..930f265
--- /dev/null
@@ -0,0 +1,61 @@
+PUSHDIVERT(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+ifdef(`SMTP_MAILER_FLAGS',,
+       `define(`SMTP_MAILER_FLAGS',
+               `ifdef(`_OLD_SENDMAIL_', `L', `')')')
+define(_NULL_CLIENT_ONLY_, `1')
+ifelse(_ARG_, `', `errprint(`Feature "nullclient" requires argument')',
+       `define(`MAIL_HUB', _ARG_)')
+POPDIVERT
+
+#
+#  This is used only for relaying mail from a client to a hub when
+#  that client does absolutely nothing else -- i.e., it is a "null
+#  mailer".  In this sense, it acts like the "R" option in Sun
+#  sendmail.
+#
+
+VERSIONID(`@(#)nullclient.m4   8.2 (Berkeley) 8/21/93')
+
+PUSHDIVERT(7)
+############################################
+###   Null Client Mailer specification   ###
+############################################
+
+ifdef(`confRELAY_MAILER',,
+       `define(`confRELAY_MAILER', `nullclient')')dnl
+
+Mnullclient,   P=[IPC], F=CONCAT(mDFMuXa, SMTP_MAILER_FLAGS), A=IPC $h
+POPDIVERT
index 98396fd..c338766 100644 (file)
@@ -34,12 +34,12 @@ divert(-1)
 #
 
 divert(0)
 #
 
 divert(0)
-VERSIONID(`@(#)uucpdomain.m4   8.1 (Berkeley) 6/7/93')
+VERSIONID(`@(#)uucpdomain.m4   8.3 (Berkeley) 8/7/93')
 divert(-1)
 
 
 PUSHDIVERT(6)
 divert(-1)
 
 
 PUSHDIVERT(6)
-Kuudomain ifelse(_ARG_, `', `hash /etc/uudomain -o', `_ARG_')
+Kuudomain ifelse(_ARG_, `', `hash -o /etc/uudomain', `_ARG_')
 POPDIVERT
 
 
 POPDIVERT
 
 
index 4e4ca92..117f4a3 100644 (file)
@@ -142,6 +142,7 @@ define(`confREFUSE_LA', `12')
 define(`confSEPARATE_PROC', `False')
 define(`confCW_FILE', `/etc/sendmail.cw')
 define(`confMIME_FORMAT_ERRORS', `True')
 define(`confSEPARATE_PROC', `False')
 define(`confCW_FILE', `/etc/sendmail.cw')
 define(`confMIME_FORMAT_ERRORS', `True')
+define(`confTRY_NULL_MX_LIST', `False')
 
 divert(0)dnl
 
 divert(0)dnl
-VERSIONID(`@(#)cf.m4   8.1 (Berkeley) 6/7/93')
+VERSIONID(`@(#)cf.m4   8.2 (Berkeley) 7/18/93')
diff --git a/usr.sbin/sendmail/cf/m4/nullrelay.m4 b/usr.sbin/sendmail/cf/m4/nullrelay.m4
new file mode 100644 (file)
index 0000000..f190d0e
--- /dev/null
@@ -0,0 +1,302 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+divert(0)
+
+VERSIONID(`@(#)nullrelay.m4    8.4 (Berkeley) 9/3/93')
+
+#
+#  This configuration applies only to relay-only hosts.  They send
+#  all mail to a hub without consideration of the address syntax
+#  or semantics, except for adding the hub qualification to the
+#  addresses.
+#
+#      This is based on a prototype done by Bryan Costales of ICSI.
+#
+
+# hub host (to which all mail is sent)
+DH`'ifdef(`MAIL_HUB', MAIL_HUB,
+       `errprint(`MAIL_HUB not defined for nullclient feature')')
+
+# name from which everyone will appear to come
+DM`'ifdef(`MASQUERADE_NAME', MASQUERADE_NAME, MAIL_HUB)
+
+# route-addr separators
+C: : ,
+
+undivert(6)dnl
+
+######################
+#   Special macros   #
+######################
+
+# SMTP initial login message
+De`'confSMTP_LOGIN_MSG
+
+# UNIX initial From header format
+Dl`'confFROM_LINE
+
+# my name for error messages
+Dn`'confMAILER_NAME
+
+# delimiter (operator) characters
+Do`'confOPERATORS
+
+# format of a total name
+Dq<$g>
+include(`../m4/version.m4')
+
+###############
+#   Options   #
+###############
+
+# strip message body to 7 bits on input?
+O7`'confSEVEN_BIT_INPUT
+
+# no aliases here
+
+# substitution for space (blank) characters
+OB`'confBLANK_SUB
+
+# default delivery mode
+Od`'confDELIVERY_MODE
+
+# error message header/file
+ifdef(`confERROR_MESSAGE',
+       OE`'confERROR_MESSAGE,
+       #OE/etc/sendmail.oE)
+
+# error mode
+ifdef(`confERROR_MODE',
+       Oe`'confERROR_MODE,
+       #Oep)
+
+# save Unix-style "From_" lines at top of header?
+Of`'confSAVE_FROM_LINES
+
+# temporary file mode
+OF`'confTEMP_FILE_MODE
+
+# default GID
+Og`'confDEF_GROUP_ID
+
+# maximum hop count
+Oh`'confMAX_HOP
+
+# location of help file
+OH`'ifdef(`HELP_FILE', HELP_FILE, /usr/lib/sendmail.hf)
+
+# ignore dots as terminators in incoming messages?
+Oi`'confIGNORE_DOTS
+
+# Insist that the BIND name server be running to resolve names
+ifdef(`confBIND_OPTS',
+       OI`'confBIND_OPTS,
+       #OI)
+
+# deliver MIME-encapsulated error messages?
+Oj`'confMIME_FORMAT_ERRORS
+
+# open connection cache size
+Ok`'confMCI_CACHE_SIZE
+
+# open connection cache timeout
+OK`'confMCI_CACHE_TIMEOUT
+
+# use Errors-To: header?
+Ol`'confUSE_ERRORS_TO
+
+# log level
+OL`'confLOG_LEVEL
+
+# send to me too, even in an alias expansion?
+Om`'confME_TOO
+
+# default messages to old style headers if no special punctuation?
+Oo`'confOLD_STYLE_HEADERS
+
+# SMTP daemon options
+ifdef(`confDAEMON_OPTIONS',
+       OO`'confDAEMON_OPTIONS,
+       #OOPort=esmtp)
+
+# privacy flags
+Op`'confPRIVACY_FLAGS
+
+# who (if anyone) should get extra copies of error messages
+ifdef(`confCOPY_ERRORS_TO',
+       OP`'confCOPY_ERRORS_TO,
+       #OPPostmaster)
+
+# slope of queue-only function
+ifdef(`confQUEUE_FACTOR',
+       Oq`'confQUEUE_FACTOR,
+       #Oq600000)
+
+# queue directory
+OQ`'ifdef(`QUEUE_DIR', QUEUE_DIR, /var/spool/mqueue)
+
+# read timeout -- now OK per RFC 1123 section 5.3.2
+ifdef(`confREAD_TIMEOUT',
+       Or`'confREAD_TIMEOUT,
+       #Ordatablock=10m)
+
+# queue up everything before forking?
+Os`'confSAFE_QUEUE
+
+# status file
+OS`'ifdef(`STATUS_FILE', STATUS_FILE, /etc/sendmail.st)
+
+# default message timeout interval
+OT`'confMESSAGE_TIMEOUT
+
+# time zone handling:
+#  if undefined, use system default
+#  if defined but null, use TZ envariable passed in
+#  if defined and non-null, use that info
+ifelse(confTIME_ZONE, `USE_SYSTEM', `#Ot',
+       confTIME_ZONE, `USE_TZ', `Ot',
+       `Ot`'confTIME_ZONE')
+
+# default UID
+Ou`'confDEF_USER_ID
+
+# deliver each queued job in a separate process?
+OY`'confSEPARATE_PROC
+
+# work class factor
+ifdef(`confWORK_CLASS_FACTOR',
+       Oz`'confWORK_CLASS_FACTOR,
+       #Oz1800)
+
+# work time factor
+ifdef(`confWORK_TIME_FACTOR',
+       OZ`'confWORK_TIME_FACTOR,
+       #OZ90000)
+
+###########################
+#   Message precedences   #
+###########################
+
+Pfirst-class=0
+Pspecial-delivery=100
+Plist=-30
+Pbulk=-60
+Pjunk=-100
+
+#####################
+#   Trusted users   #
+#####################
+
+Troot
+Tdaemon
+Tuucp
+
+#########################
+#   Format of headers   #
+#########################
+
+H?P?Return-Path: $g
+HReceived: $?sfrom $s $.$?_($_) $.by $j ($v/$Z)$?r with $r$. id $i$?u for $u$.; $b
+H?D?Resent-Date: $a
+H?D?Date: $a
+H?F?Resent-From: $q
+H?F?From: $q
+H?x?Full-Name: $x
+HSubject:
+# HPosted-Date: $a
+# H?l?Received-Date: $b
+H?M?Resent-Message-Id: <$t.$i@$j>
+H?M?Message-Id: <$t.$i@$j>
+#\f
+######################################################################
+######################################################################
+#####
+#####                  REWRITING RULES
+#####
+######################################################################
+######################################################################
+
+###########################################
+###  Rulset 3 -- Name Canonicalization  ###
+###########################################
+S3
+
+# handle null input and list syntax (translate to <@> special case)
+R$@                    $@ <@>
+R$*:;$*                        $@ $1 :; <@>
+
+# basic textual canonicalization -- note RFC733 heuristic here
+R$*<$*>$*<$*>$*                $2$3<$4>$5                      strip multiple <> <>
+R$*<$*<$+>$*>$*                <$3>$5                          2-level <> nesting
+R$*<>$*                        $@ <@>                          MAIL FROM:<> case
+R$*<$+>$*              $2                              basic RFC821/822 parsing
+
+ifdef(`_NO_CANONIFY_', `dnl',
+`# eliminate local host if present
+R@ $=w $=: $+          $@ @ $M $2 $3                   @thishost ...
+R@ $+                  $@ $1                           @somewhere ...
+
+R$+ @ $=w              $@ $1 @ $M                      ...@thishost
+R$+ @ $+               $@ $1 @ $2                      ...@somewhere
+
+R$=w ! $+              $@ $2 @ $M                      thishost!...
+R$+ ! $+               $@ $1 ! $2 @ $M                 somewhere ! ...
+
+R$+ % $=w              $@ $1 @ $M                      ...%thishost
+R$+ % $+               $@ $1 @ $2                      ...%somewhere
+
+R$+                    $@ $1 @ $M                      unadorned user')
+
+
+######################################
+###   Ruleset 0 -- Parse Address   ###
+######################################
+
+S0
+
+R$*:;<@>               $#error $@ USAGE $: "list:; syntax illegal for recipient addresses"
+
+# pass everything else to a relay host
+R$*                    $#_RELAY_ $@ $H $: $1
+
+#\f
+######################################################################
+######################################################################
+#####
+`#####                 MAILER DEFINITIONS'
+#####
+######################################################################
+######################################################################
+undivert(7)dnl
index 39cbd62..b4240fe 100644 (file)
@@ -34,58 +34,80 @@ divert(-1)
 #
 divert(0)
 
 #
 divert(0)
 
-VERSIONID(`@(#)proto.m4        8.2 (Berkeley) 7/11/93')
+VERSIONID(`@(#)proto.m4        8.19 (Berkeley) 10/15/93')
 
 MAILER(local)dnl
 
 ifdef(`_OLD_SENDMAIL_',
 
 MAILER(local)dnl
 
 ifdef(`_OLD_SENDMAIL_',
-`define(`_SET_96_', 6)dnl
-define(`_SET_97_', 7)dnl',
-`# level 4 config file format
-V4
+`define(`_SET_95_', 5)dnl
+define(`_SET_96_', 6)dnl
+define(`_SET_97_', 7)dnl
+define(`_SET_98_', 8)dnl
+define(`confDOMAIN_NAME',
+       `ifdef(`NEED_DOMAIN', `$w.$d', `$w')')dnl',
+`# level 5 config file format
+V5
+define(`_SET_95_', 95)dnl
 define(`_SET_96_', 96)dnl
 define(`_SET_96_', 96)dnl
-define(`_SET_97_', 97)dnl')
+define(`_SET_97_', 97)dnl
+define(`_SET_98_', 98)dnl')
+ifdef(`confSMTP_MAILER',, `define(`confSMTP_MAILER', `smtp')')dnl
+ifdef(`confLOCAL_MAILER',, `define(`confLOCAL_MAILER', `local')')dnl
+ifdef(`confRELAY_MAILER',,
+       `define(`confRELAY_MAILER',
+               `ifdef(`_MAILER_smtp_', `relay',
+                       `ifdef(`_MAILER_uucp', `suucp', `unknown')')')')dnl
+define(`_SMTP_', `confSMTP_MAILER')dnl         for readability only
+define(`_LOCAL_', `confLOCAL_MAILER')dnl       for readability only
+define(`_RELAY_', `confRELAY_MAILER')dnl       for readability only
 
 ##################
 #   local info   #
 ##################
 
 
 ##################
 #   local info   #
 ##################
 
-CP.
-
 Cwlocalhost
 ifdef(`USE_CW_FILE',
 `# file containing names of hosts for which we receive email
 Cwlocalhost
 ifdef(`USE_CW_FILE',
 `# file containing names of hosts for which we receive email
-CONCAT(`Fw', confCW_FILE)', `dnl')
+Fw`'confCW_FILE',
+       `dnl')
+ifdef(`confDOMAIN_NAME', `
+# my official domain name
+Dj`'confDOMAIN_NAME',
+       `dnl')
+
+ifdef(`_NULL_CLIENT_ONLY_',
+`include(../m4/nullrelay.m4)m4exit',
+       `dnl')
+
+CP.
 
 ifdef(`UUCP_RELAY',
 `# UUCP relay host
 
 ifdef(`UUCP_RELAY',
 `# UUCP relay host
-CONCAT(DY, UUCP_RELAY)
+DY`'UUCP_RELAY
 CPUUCP
 
 ')dnl
 ifdef(`BITNET_RELAY',
 `#  BITNET relay host
 CPUUCP
 
 ')dnl
 ifdef(`BITNET_RELAY',
 `#  BITNET relay host
-CONCAT(DB, BITNET_RELAY)
+DB`'BITNET_RELAY
 CPBITNET
 
 ')dnl
 ifdef(`CSNET_RELAY',
 `# CSNET relay host
 CPBITNET
 
 ')dnl
 ifdef(`CSNET_RELAY',
 `# CSNET relay host
-CONCAT(DC, CSNET_RELAY)
+DC`'CSNET_RELAY
 CPCSNET
 
 ')dnl
 ifdef(`FAX_RELAY',
 `# FAX relay host
 CPCSNET
 
 ')dnl
 ifdef(`FAX_RELAY',
 `# FAX relay host
-CONCAT(DF, FAX_RELAY)
+DF`'FAX_RELAY
 CPFAX
 
 ')dnl
 CPFAX
 
 ')dnl
-ifdef(`SMART_HOST',
-`# "Smart" UUCP relay host
-CONCAT(DS, SMART_HOST)
+# "Smart" relay host (may be null)
+DS`'ifdef(`SMART_HOST', SMART_HOST)
 
 
-')dnl
 ifdef(`MAILER_TABLE',
 `# Mailer table (overriding domains)
 Kmailertable MAILER_TABLE
 ifdef(`MAILER_TABLE',
 `# Mailer table (overriding domains)
 Kmailertable MAILER_TABLE
@@ -97,16 +119,13 @@ Kdomaintable DOMAIN_TABLE
 
 ')dnl
 # who I send unqualified names to (null means deliver locally)
 
 ')dnl
 # who I send unqualified names to (null means deliver locally)
-CONCAT(DR, ifdef(`LOCAL_RELAY', LOCAL_RELAY))
+DR`'ifdef(`LOCAL_RELAY', LOCAL_RELAY)
 
 # who gets all local email traffic ($R has precedence for unqualified names)
 
 # who gets all local email traffic ($R has precedence for unqualified names)
-CONCAT(DH, ifdef(`MAIL_HUB', MAIL_HUB))
-
-# my official hostname ($w or $w.$D)
-CONCAT(Dj$w, ifdef(`NEED_DOMAIN', .$D))
+DH`'ifdef(`MAIL_HUB', MAIL_HUB)
 
 # who I masquerade as (can be $j)
 
 # who I masquerade as (can be $j)
-CONCAT(DM, ifdef(`MASQUERADE_NAME', MASQUERADE_NAME, $j))
+DM`'ifdef(`MASQUERADE_NAME', MASQUERADE_NAME, $j)
 
 # class L: names that should be delivered locally, even if we have a relay
 # class E: names that should be exposed as from this host, even if we masquerade
 
 # class L: names that should be delivered locally, even if we have a relay
 # class E: names that should be exposed as from this host, even if we masquerade
@@ -131,20 +150,20 @@ undivert(6)dnl
 ######################
 
 # SMTP initial login message
 ######################
 
 # SMTP initial login message
-CONCAT(De, confSMTP_LOGIN_MSG)
+De`'confSMTP_LOGIN_MSG
 
 # UNIX initial From header format
 
 # UNIX initial From header format
-CONCAT(Dl, confFROM_LINE)
+Dl`'confFROM_LINE
 
 # my name for error messages
 
 # my name for error messages
-CONCAT(Dn, confMAILER_NAME)
+Dn`'confMAILER_NAME
 
 # delimiter (operator) characters
 
 # delimiter (operator) characters
-CONCAT(Do, confOPERATORS)
+Do`'confOPERATORS
 
 # format of a total name
 
 # format of a total name
-CONCAT(Dq, ifdef(`confFROM_HEADER', confFROM_HEADER,
-       ifdef(`_OLD_SENDMAIL_', `$g$?x ($x)$.', `$?x$x <$g>$|$g$.')))
+Dq`'ifdef(`confFROM_HEADER', confFROM_HEADER,
+       ifdef(`_OLD_SENDMAIL_', `$g$?x ($x)$.', `$?x$x <$g>$|$g$.'))
 include(`../m4/version.m4')
 
 ###############
 include(`../m4/version.m4')
 
 ###############
@@ -152,173 +171,176 @@ include(`../m4/version.m4')
 ###############
 
 # strip message body to 7 bits on input?
 ###############
 
 # strip message body to 7 bits on input?
-CONCAT(O7, confSEVEN_BIT_INPUT)
+O7`'confSEVEN_BIT_INPUT
 
 # wait (in minutes) for alias file rebuild
 
 # wait (in minutes) for alias file rebuild
-CONCAT(Oa, confALIAS_WAIT)
+Oa`'confALIAS_WAIT
 
 # location of alias file
 
 # location of alias file
-CONCAT(OA, ifdef(`ALIAS_FILE', ALIAS_FILE, /etc/aliases))
+OA`'ifdef(`ALIAS_FILE', ALIAS_FILE, /etc/aliases)
 
 # minimum number of free blocks on filesystem
 
 # minimum number of free blocks on filesystem
-CONCAT(Ob, confMIN_FREE_BLOCKS)
+Ob`'confMIN_FREE_BLOCKS
 
 # substitution for space (blank) characters
 
 # substitution for space (blank) characters
-CONCAT(OB, confBLANK_SUB)
+OB`'confBLANK_SUB
 
 # connect to "expensive" mailers on initial submission?
 
 # connect to "expensive" mailers on initial submission?
-CONCAT(Oc, confCON_EXPENSIVE)
+Oc`'confCON_EXPENSIVE
 
 # checkpoint queue runs after every N successful deliveries
 
 # checkpoint queue runs after every N successful deliveries
-CONCAT(OC, confCHECKPOINT_INTERVAL)
+OC`'confCHECKPOINT_INTERVAL
 
 # default delivery mode
 
 # default delivery mode
-CONCAT(Od, confDELIVERY_MODE)
+Od`'confDELIVERY_MODE
 
 # automatically rebuild the alias database?
 
 # automatically rebuild the alias database?
-CONCAT(OD, confAUTO_REBUILD)
+OD`'confAUTO_REBUILD
 
 
-# error message header/file */
+# error message header/file
 ifdef(`confERROR_MESSAGE',
 ifdef(`confERROR_MESSAGE',
-       CONCAT(OE, confERROR_MESSAGE),
+       OE`'confERROR_MESSAGE,
        #OE/etc/sendmail.oE)
 
 # error mode
 ifdef(`confERROR_MODE',
        #OE/etc/sendmail.oE)
 
 # error mode
 ifdef(`confERROR_MODE',
-       CONCAT(Oe, confERROR_MODE),
+       Oe`'confERROR_MODE,
        #Oep)
 
 # save Unix-style "From_" lines at top of header?
        #Oep)
 
 # save Unix-style "From_" lines at top of header?
-CONCAT(Of, confSAVE_FROM_LINES)
+Of`'confSAVE_FROM_LINES
 
 # temporary file mode
 
 # temporary file mode
-CONCAT(OF, confTEMP_FILE_MODE)
+OF`'confTEMP_FILE_MODE
 
 # match recipients against GECOS field?
 
 # match recipients against GECOS field?
-CONCAT(OG, confMATCH_GECOS)
+OG`'confMATCH_GECOS
 
 # default GID
 
 # default GID
-CONCAT(Og, confDEF_GROUP_ID)
+Og`'confDEF_GROUP_ID
 
 # maximum hop count
 
 # maximum hop count
-CONCAT(Oh, confMAX_HOP)
+Oh`'confMAX_HOP
 
 # location of help file
 
 # location of help file
-CONCAT(OH, ifdef(`HELP_FILE', HELP_FILE, /usr/lib/sendmail.hf))
+OH`'ifdef(`HELP_FILE', HELP_FILE, /usr/lib/sendmail.hf)
 
 # ignore dots as terminators in incoming messages?
 
 # ignore dots as terminators in incoming messages?
-CONCAT(Oi, confIGNORE_DOTS)
+Oi`'confIGNORE_DOTS
 
 # Insist that the BIND name server be running to resolve names
 ifdef(`confBIND_OPTS',
 
 # Insist that the BIND name server be running to resolve names
 ifdef(`confBIND_OPTS',
-       CONCAT(OI, confBIND_OPTS),
+       OI`'confBIND_OPTS,
        #OI)
 
 # deliver MIME-encapsulated error messages?
        #OI)
 
 # deliver MIME-encapsulated error messages?
-CONCAT(Oj, confMIME_FORMAT_ERRORS)
+Oj`'confMIME_FORMAT_ERRORS
 
 # Forward file search path
 ifdef(`confFORWARD_PATH',
 
 # Forward file search path
 ifdef(`confFORWARD_PATH',
-       CONCAT(OJ, confFORWARD_PATH),
+       OJ`'confFORWARD_PATH,
        #OJ/var/forward/$u:$z/.forward.$w:$z/.forward)
 
 # open connection cache size
        #OJ/var/forward/$u:$z/.forward.$w:$z/.forward)
 
 # open connection cache size
-CONCAT(Ok, confMCI_CACHE_SIZE)
+Ok`'confMCI_CACHE_SIZE
 
 # open connection cache timeout
 
 # open connection cache timeout
-CONCAT(OK, confMCI_CACHE_TIMEOUT)
+OK`'confMCI_CACHE_TIMEOUT
 
 # use Errors-To: header?
 
 # use Errors-To: header?
-CONCAT(Ol, confUSE_ERRORS_TO)
+Ol`'confUSE_ERRORS_TO
 
 # log level
 
 # log level
-CONCAT(OL, confLOG_LEVEL)
+OL`'confLOG_LEVEL
 
 # send to me too, even in an alias expansion?
 
 # send to me too, even in an alias expansion?
-CONCAT(Om, confME_TOO)
+Om`'confME_TOO
 
 # verify RHS in newaliases?
 
 # verify RHS in newaliases?
-CONCAT(On, confCHECK_ALIASES)
+On`'confCHECK_ALIASES
 
 # default messages to old style headers if no special punctuation?
 
 # default messages to old style headers if no special punctuation?
-CONCAT(Oo, confOLD_STYLE_HEADERS)
+Oo`'confOLD_STYLE_HEADERS
 
 # SMTP daemon options
 ifdef(`confDAEMON_OPTIONS',
 
 # SMTP daemon options
 ifdef(`confDAEMON_OPTIONS',
-       CONCAT(OO, confDAEMON_OPTIONS),
+       OO`'confDAEMON_OPTIONS,
        #OOPort=esmtp)
 
 # privacy flags
        #OOPort=esmtp)
 
 # privacy flags
-CONCAT(Op, confPRIVACY_FLAGS)
+Op`'confPRIVACY_FLAGS
 
 # who (if anyone) should get extra copies of error messages
 ifdef(`confCOPY_ERRORS_TO',
 
 # who (if anyone) should get extra copies of error messages
 ifdef(`confCOPY_ERRORS_TO',
-       CONCAT(OP, confCOPY_ERRORS_TO),
+       OP`'confCOPY_ERRORS_TO,
        #OPPostmaster)
 
 # slope of queue-only function
 ifdef(`confQUEUE_FACTOR',
        #OPPostmaster)
 
 # slope of queue-only function
 ifdef(`confQUEUE_FACTOR',
-       CONCAT(Oq, confQUEUE_FACTOR),
+       Oq`'confQUEUE_FACTOR,
        #Oq600000)
 
 # queue directory
        #Oq600000)
 
 # queue directory
-CONCAT(OQ, ifdef(`QUEUE_DIR', QUEUE_DIR, /var/spool/mqueue))
+OQ`'ifdef(`QUEUE_DIR', QUEUE_DIR, /var/spool/mqueue)
 
 # read timeout -- now OK per RFC 1123 section 5.3.2
 ifdef(`confREAD_TIMEOUT',
 
 # read timeout -- now OK per RFC 1123 section 5.3.2
 ifdef(`confREAD_TIMEOUT',
-       CONCAT(Or, confREAD_TIMEOUT),
+       Or`'confREAD_TIMEOUT,
        #Ordatablock=10m)
 
 # queue up everything before forking?
        #Ordatablock=10m)
 
 # queue up everything before forking?
-CONCAT(Os, confSAFE_QUEUE)
+Os`'confSAFE_QUEUE
 
 # status file
 
 # status file
-CONCAT(OS, ifdef(`STATUS_FILE', STATUS_FILE, /etc/sendmail.st))
+OS`'ifdef(`STATUS_FILE', STATUS_FILE, /etc/sendmail.st)
 
 # default message timeout interval
 
 # default message timeout interval
-CONCAT(OT, confMESSAGE_TIMEOUT)
+OT`'confMESSAGE_TIMEOUT
 
 # time zone handling:
 #  if undefined, use system default
 #  if defined but null, use TZ envariable passed in
 #  if defined and non-null, use that info
 ifelse(confTIME_ZONE, `USE_SYSTEM', `#Ot',
 
 # time zone handling:
 #  if undefined, use system default
 #  if defined but null, use TZ envariable passed in
 #  if defined and non-null, use that info
 ifelse(confTIME_ZONE, `USE_SYSTEM', `#Ot',
-       confTIME_ZONE, `USE_TZ', `',
-       `CONCAT(Ot, confTIME_ZONE)')
+       confTIME_ZONE, `USE_TZ', `Ot',
+       `Ot`'confTIME_ZONE')
 
 # default UID
 
 # default UID
-CONCAT(Ou, confDEF_USER_ID)
+Ou`'confDEF_USER_ID
 
 # list of locations of user database file (null means no lookup)
 OU`'ifdef(`confUSERDB_SPEC', `confUSERDB_SPEC')
 
 # fallback MX host
 ifdef(`confFALLBACK_MX',
 
 # list of locations of user database file (null means no lookup)
 OU`'ifdef(`confUSERDB_SPEC', `confUSERDB_SPEC')
 
 # fallback MX host
 ifdef(`confFALLBACK_MX',
-       CONCAT(OV, confFALLBACK_MX),
+       OV`'confFALLBACK_MX,
        #OVfall.back.host.net)
 
        #OVfall.back.host.net)
 
+# if we are the best MX host for a site, try it directly instead of config err
+Ow`'confTRY_NULL_MX_LIST
+
 # load average at which we just queue messages
 # load average at which we just queue messages
-CONCAT(Ox, confQUEUE_LA)
+Ox`'confQUEUE_LA
 
 # load average at which we refuse connections
 
 # load average at which we refuse connections
-CONCAT(OX, confREFUSE_LA)
+OX`'confREFUSE_LA
 
 # work recipient factor
 ifdef(`confWORK_RECIPIENT_FACTOR',
 
 # work recipient factor
 ifdef(`confWORK_RECIPIENT_FACTOR',
-       CONCAT(Oy, confWORK_RECIPIENT_FACTOR),
+       Oy`'confWORK_RECIPIENT_FACTOR,
        #Oy30000)
 
 # deliver each queued job in a separate process?
        #Oy30000)
 
 # deliver each queued job in a separate process?
-CONCAT(OY, confSEPARATE_PROC)
+OY`'confSEPARATE_PROC
 
 # work class factor
 ifdef(`confWORK_CLASS_FACTOR',
 
 # work class factor
 ifdef(`confWORK_CLASS_FACTOR',
-       CONCAT(Oz, confWORK_CLASS_FACTOR),
+       Oz`'confWORK_CLASS_FACTOR,
        #Oz1800)
 
 # work time factor
 ifdef(`confWORK_TIME_FACTOR',
        #Oz1800)
 
 # work time factor
 ifdef(`confWORK_TIME_FACTOR',
-       CONCAT(OZ, confWORK_TIME_FACTOR),
+       OZ`'confWORK_TIME_FACTOR,
        #OZ90000)
 
 ###########################
        #OZ90000)
 
 ###########################
@@ -344,7 +366,7 @@ Tuucp
 #########################
 
 H?P?Return-Path: $g
 #########################
 
 H?P?Return-Path: $g
-HReceived: $?sfrom $s $.$?_($_) $.by $j ($v/$Z)$?r with $r$. id $i; $b
+HReceived: $?sfrom $s $.$?_($_) $.by $j ($v/$Z)$?r with $r$. id $i$?u for $u$.; $b
 H?D?Resent-Date: $a
 H?D?Date: $a
 H?F?Resent-From: $q
 H?D?Resent-Date: $a
 H?D?Date: $a
 H?F?Resent-From: $q
@@ -376,7 +398,7 @@ R$@                 $@ <@>
 R$*:;$*                        $@ $1 :; <@>
 
 # basic textual canonicalization -- note RFC733 heuristic here
 R$*:;$*                        $@ $1 :; <@>
 
 # basic textual canonicalization -- note RFC733 heuristic here
-R$*<$*>$*<$*>$*                <$2>$3$4$5                      strip multiple <> <>
+R$*<$*>$*<$*>$*                $2$3<$4>$5                      strip multiple <> <>
 R$*<$*<$+>$*>$*                <$3>$5                          2-level <> nesting
 R$*<>$*                        $@ <@>                          MAIL FROM:<> case
 R$*<$+>$*              $2                              basic RFC821/822 parsing
 R$*<$*<$+>$*>$*                <$3>$5                          2-level <> nesting
 R$*<>$*                        $@ <@>                          MAIL FROM:<> case
 R$*<$+>$*              $2                              basic RFC821/822 parsing
@@ -422,6 +444,9 @@ R$* < @ localhost > $*              $: $1 < @ $j . > $2             no domain at all
 R$* < @ localhost . $m > $*    $: $1 < @ $j . > $2             local domain
 ifdef(`_NO_UUCP_', `dnl',
 `R$* < @ localhost . UUCP > $* $: $1 < @ $j . > $2             .UUCP domain')
 R$* < @ localhost . $m > $*    $: $1 < @ $j . > $2             local domain
 ifdef(`_NO_UUCP_', `dnl',
 `R$* < @ localhost . UUCP > $* $: $1 < @ $j . > $2             .UUCP domain')
+R$* < @ [ $+ ] > $*            $: $1 < @ [[ $2 ]] > $3         catch [a.b.c.d]
+R$* < @ [ $=w ] > $*           $: $1 < @ $j . > $3             self-literal
+R$* < @ [[ $+ ]] > $*          $: $1 < @ [ $2 ] > $3           strip dbl [[]]
 ifdef(`DOMAIN_TABLE', `
 # look up unqualified domains in the domain table
 R$* < @ $- > $*                        $: $1 < @ $(domaintable $2 $) > $3',
 ifdef(`DOMAIN_TABLE', `
 # look up unqualified domains in the domain table
 R$* < @ $- > $*                        $: $1 < @ $(domaintable $2 $) > $3',
@@ -505,19 +530,24 @@ R$*                       $@ $>0 $1
 
 S0
 
 
 S0
 
-R<@>                   $#local $: <>                   special case error msgs
+R<@>                   $#_LOCAL_ $: <>                 special case error msgs
 R$*:;<@>               $#error $@ USAGE $: "list:; syntax illegal for recipient addresses"
 
 ifdef(`_MAILER_smtp_',
 `# handle numeric address spec
 R$*:;<@>               $#error $@ USAGE $: "list:; syntax illegal for recipient addresses"
 
 ifdef(`_MAILER_smtp_',
 `# handle numeric address spec
-R$* < @ [ $+ ] > $*    $: $1 < @ $[ [$2] $] > $3       numeric internet addr
-R$* < @ [ $+ ] > $*    $#smtp $@ [$2] $: $1 @ [$2] $3  numeric internet spec',
-`dnl')
+ifdef(`_NO_CANONIFY_', `dnl',
+`R$* < @ [ $+ ] > $*   $: $1 < @ $[ [$2] $] > $3       numeric internet addr')
+R$* < @ [ $+ ] > $*    $: $>_SET_98_ $1 < @ [ $2 ] > $3        numeric internet spec
+R$* < @ [ $+ ] > $*    $#_SMTP_ $@ [$2] $: $1 @ [$2] $3        still numeric: send',
+       `dnl')
 
 # now delete the local info -- note $=O to find characters that cause forwarding
 
 # now delete the local info -- note $=O to find characters that cause forwarding
-R$* < @ > $*           $@ $>_SET_97_ $1                        user@ => user
-R< @ $=w . > : $*      $@ $>_SET_97_ $2                        @here:... -> ...
-R$* $=O $* < @ $=w . > $@ $>_SET_97_ $1 $2 $3                  ...@here -> ...
+R$* < @ > $*           $@ $>_SET_97_ $1                user@ => user
+R< @ $=w . > : $*      $@ $>_SET_97_ $2                @here:... -> ...
+R$* $=O $* < @ $=w . > $@ $>_SET_97_ $1 $2 $3          ...@here -> ...
+
+# handle local hacks
+R$*                    $: $>_SET_98_ $1
 ifdef(`MAILER_TABLE',
 `
 # try mailer table lookup
 ifdef(`MAILER_TABLE',
 `
 # try mailer table lookup
@@ -530,92 +560,81 @@ R< $+ > $*                $: $>90 <$1> $2                 try domain',
 
 # short circuit local delivery so forwarded email works
 ifdef(`_LOCAL_NOT_STICKY_',
 
 # short circuit local delivery so forwarded email works
 ifdef(`_LOCAL_NOT_STICKY_',
-`R$=L < @ $=w . >              $#local $: @ $1                 special local names
-R$+ < @ $=w . >                $#local $: $1                   dispose directly',
+`R$=L < @ $=w . >              $#_LOCAL_ $: @ $1                       special local names
+R$+ < @ $=w . >                $#_LOCAL_ $: $1                 dispose directly',
 `R$+ < @ $=w . >               $: $1 < @ $2 @ $H >             first try hub
 ifdef(`_OLD_SENDMAIL_',
 `R$+ < $+ @ $-:$+ >    $# $3 $@ $4 $: $1 < $2 >        yep ....
 R$+ < $+ @ $+ >                $#relay $@ $3 $: $1 < $2 >      yep ....
 `R$+ < @ $=w . >               $: $1 < @ $2 @ $H >             first try hub
 ifdef(`_OLD_SENDMAIL_',
 `R$+ < $+ @ $-:$+ >    $# $3 $@ $4 $: $1 < $2 >        yep ....
 R$+ < $+ @ $+ >                $#relay $@ $3 $: $1 < $2 >      yep ....
-R$+ < $+ @ >           $#local $: $1                   nope, local address',
-`R$+ < $+ @ $+ >               $#local $: $1                   yep ....
-R$+ < $+ @ >           $#local $: @ $1                 nope, local address')')
-undivert(3)dnl
+R$+ < $+ @ >           $#_LOCAL_ $: $1                 nope, local address',
+`R$+ < $+ @ $+ >               $#_LOCAL_ $: $1                 yep ....
+R$+ < $+ @ >           $#_LOCAL_ $: @ $1                       nope, local address')')
 undivert(4)dnl
 
 ifdef(`_NO_UUCP_', `dnl',
 `# resolve remotely connected UUCP links (if any)
 ifdef(`_CLASS_V_',
 undivert(4)dnl
 
 ifdef(`_NO_UUCP_', `dnl',
 `# resolve remotely connected UUCP links (if any)
 ifdef(`_CLASS_V_',
-`R$* < @ $=V . UUCP > $*               $#smtp $@ $V $: <@ $V> : $1 @ $2.UUCP $3',
+`R$* < @ $=V . UUCP > $*               $: $>_SET_95_ < $V > $1 <@$2.UUCP> $3',
        `dnl')
 ifdef(`_CLASS_W_',
        `dnl')
 ifdef(`_CLASS_W_',
-`R$* < @ $=W . UUCP > $*               $#smtp $@ $W $: <@ $W> : $1 @ $2.UUCP $3',
+`R$* < @ $=W . UUCP > $*               $: $>_SET_95_ < $W > $1 <@$2.UUCP> $3',
        `dnl')
 ifdef(`_CLASS_X_',
        `dnl')
 ifdef(`_CLASS_X_',
-`R$* < @ $=X . UUCP > $*               $#smtp $@ $X $: <@ $X> : $1 @ $2.UUCP $3',
+`R$* < @ $=X . UUCP > $*               $: $>_SET_95_ < $X > $1 <@$2.UUCP> $3',
        `dnl')')
 
 # resolve fake top level domains by forwarding to other hosts
 ifdef(`BITNET_RELAY',
        `dnl')')
 
 # resolve fake top level domains by forwarding to other hosts
 ifdef(`BITNET_RELAY',
-`R$*<@$+.BITNET>$*     $#smtp $@ $B $: $1 <@$2.BITNET> $3      user@host.BITNET',
+`R$*<@$+.BITNET>$*     $: $>_SET_95_ < $B > $1 <@$2.BITNET> $3 user@host.BITNET',
        `dnl')
 ifdef(`CSNET_RELAY',
        `dnl')
 ifdef(`CSNET_RELAY',
-`R$*<@$+.CSNET>$*      $#smtp $@ $C $: $1 <@$2.CSNET> $3       user@host.CSNET',
+`R$*<@$+.CSNET>$*      $: $>_SET_95_ < $C > $1 <@$2.CSNET> $3  user@host.CSNET',
        `dnl')
 ifdef(`_MAILER_fax_',
        `dnl')
 ifdef(`_MAILER_fax_',
-`R$+ < @ $+ .FAX >     $#fax $@ $2 $: $1                       user@host.FAX',
+`R$+ < @ $+ .FAX >     $#fax $@ $2 $: $1               user@host.FAX',
 `ifdef(`FAX_RELAY',
 `ifdef(`FAX_RELAY',
-`R$*<@$+.FAX>$*                $#smtp $@ $F $: $1 <@$2.FAX> $3         user@host.FAX',
+`R$*<@$+.FAX>$*                $: $>_SET_95_ < $F > $1 <@$2.FAX> $3    user@host.FAX',
        `dnl')')
 
 ifdef(`UUCP_RELAY',
 `# forward non-local UUCP traffic to our UUCP relay
        `dnl')')
 
 ifdef(`UUCP_RELAY',
 `# forward non-local UUCP traffic to our UUCP relay
-R$*<@$*.UUCP>$*                $#smtp $@ $Y $: <@ $Y> : $1 @ $2.UUCP $3        uucp mail',
+R$*<@$*.UUCP>$*                $: $>_SET_95_ < $Y > $1 @ <$2.UUCP> $3  uucp mail',
 `ifdef(`_MAILER_uucp_',
 `# forward other UUCP traffic straight to UUCP
 `ifdef(`_MAILER_uucp_',
 `# forward other UUCP traffic straight to UUCP
-R< @ $+ .UUCP > : $+   $#uucp $@ $1 $: $2                      @host.UUCP:...
-R$+ < @ $+ .UUCP >     $#uucp $@ $2 $: $1                      user@host.UUCP',
+R< @ $+ .UUCP > : $+   $#uucp $@ $1 $: $2              @host.UUCP:...
+R$+ < @ $+ .UUCP >     $#uucp $@ $2 $: $1              user@host.UUCP',
        `dnl')')
        `dnl')')
-
-ifdef(`_MAILER_USENET_', `
+ifdef(`_MAILER_usenet_', `
 # addresses sent to net.group.USENET will get forwarded to a newsgroup
 # addresses sent to net.group.USENET will get forwarded to a newsgroup
-R$+ . USENET           $# usenet $: $1',
-`dnl')
+R$+ . USENET           $#usenet $: $1',
+       `dnl')
 
 ifdef(`_LOCAL_RULES_',
 `# figure out what should stay in our local mail system
 undivert(1)', `dnl')
 
 
 ifdef(`_LOCAL_RULES_',
 `# figure out what should stay in our local mail system
 undivert(1)', `dnl')
 
-ifdef(`SMART_HOST', `
-# pass names that still have a host to a smarthost
-R$* < @ $* > $*                $: < $S > $1 < @ $2 > $3        glue on smarthost name
-R<$-:$+> $* < @$* > $* $# $1 $@ $2 $: $3 < @ $4 > $5   if non-null, use it
-R<$+> $* < @$* > $*    $#suucp $@ $1 $: $2 < @ $3 > $4 if non-null, use it
-R<> $* < @ $* > $*     $1 < @ $2 > $3                  else strip off gunk',
+# pass names that still have a host to a smarthost (if defined)
+R$* < @ $* > $*                $: $>_SET_95_ < $S > $1 < @ $2 > $3     glue on smarthost name
 
 
-`ifdef(`_LOCAL_RULES_', `
-# reject messages that have host names we do not understand
-R$* < @ $* > $*                $#error $@ NOHOST $: Unrecognized host name $2',
-`ifdef(`_MAILER_smtp_',
-`# deal with other remote names
-R$* < @ $* > $*                $#smtp $@ $2 $: $1 < @ $2 > $3          user@host.domain')')')
+# deal with other remote names
+ifdef(`_MAILER_smtp_',
+`R$* < @$* > $*                $#_SMTP_ $@ $2 $: $1 < @ $2 > $3                user@host.domain',
+`R$* < @$* > $*                $#error $@NOHOST $: Unrecognized host name $2')
 
 ifdef(`_OLD_SENDMAIL_',
 `# forward remaining names to local relay, if any
 
 ifdef(`_OLD_SENDMAIL_',
 `# forward remaining names to local relay, if any
-R$=L                   $#local $: $1                   special local names
-R$+                    $: $1 < @ $R >                  append relay
-R$+ < @ >              $: $1 < @ $H >                  no relay, try hub
-R$+ < @ >              $#local $: $1                   no relay or hub: local
-R$+ < @ $=w  >         $#local $: $1                   we are relay/hub: local
-R$+ < @ $-:$+ >                $# $2 $@ $3 $: $1               deliver to relay/hub
-R$+ < @ $+ >           $#relay $@ $2 $: $1             deliver to relay/hub',
+R$=L                   $#_LOCAL_ $: $1                 special local names
+R$+                    $: $>_SET_95_ < $R > $1                 try relay
+R$+                    $: $>_SET_95_ < $H > $1                 try hub
+R$+                    $#_LOCAL_ $: $1                 no relay or hub: local',
 
 `# if this is quoted, strip the quotes and try again
 R$+                    $: $(dequote $1 $)              strip quotes
 
 `# if this is quoted, strip the quotes and try again
 R$+                    $: $(dequote $1 $)              strip quotes
-R$* $=O $*             $@ $>_SET_97_ $1 $2 $3                  try again
+R$+ $=O $+             $@ $>_SET_97_ $1 $2 $3                  try again
 
 # handle locally delivered names
 
 # handle locally delivered names
-R$=L                   $#local $: @ $1                 special local names
-R$+                    $#local $: $1                   regular local names
+R$=L                   $#_LOCAL_ $: @ $1                       special local names
+R$+                    $#_LOCAL_ $: $1                 regular local names
 
 ###########################################################################
 ###   Ruleset 5 -- special rewriting after aliases have been expanded   ###
 
 ###########################################################################
 ###   Ruleset 5 -- special rewriting after aliases have been expanded   ###
@@ -625,26 +644,39 @@ R$+                       $#local $: $1                   regular local names
 S5
 
 # see if we have a relay or a hub
 S5
 
 # see if we have a relay or a hub
-R$+                    $: $1 < @ $R >
-R$+ < @ >              $: $1 < @ $H >                  no relay, try hub
-R$+ < @ $=w >          $@ $1                           we are relay/hub: local
-R$+ < @ $-:$+ >                $# $2 $@ $3 $: $1               send to relay or hub
-ifdef(`_MAILER_smtp_',
-`R$+ < @ $+ >          $#relay $@ $2 $: $1             send to relay or hub')')
+R$+                    $: $>_SET_95_ < $R > $1                 try relay
+R$+                    $: $>_SET_95_ < $H > $1                 try hub')
 ifdef(`MAILER_TABLE',
 `
 
 ifdef(`MAILER_TABLE',
 `
 
-###########################################################################
-###  Ruleset 90 -- try domain part of mailertable entry                ###
-###               (new sendmail only)                                  ###
-###########################################################################
+###################################################################
+###  Ruleset 90 -- try domain part of mailertable entry        ###
+###               (new sendmail only)                          ###
+###################################################################
 
 S90
 
 S90
-R<$- . $+ > $*         $: < $(mailertable .$2 $) > $3  lookup
+R<$- . $+ > $*         $: < $(mailertable .$2 $@ $1 $) > $3    lookup
 R<$- : $+ > $*         $# $1 $@ $2 $: $3               check -- resolved?
 R< . $+ > $*           $@ $>90 <$1> $2                 no -- strip & try again
 R<$*> $*               $@ $2                           no match',
 `dnl')
 R<$- : $+ > $*         $# $1 $@ $2 $: $3               check -- resolved?
 R< . $+ > $*           $@ $>90 <$1> $2                 no -- strip & try again
 R<$*> $*               $@ $2                           no match',
 `dnl')
+
+###################################################################
+###  Ruleset _SET_95_ -- canonify mailer:host syntax to triple ###
+###################################################################
+
+S`'_SET_95_
+R< > $*                        $@ $1                           strip off null relay
+R< $- : $+ > $*                $# $1 $@ $2 $: $3               try qualified mailer
+R< $=w > $*            $@ $2                           delete local host
+R< $+ > $*             $#_RELAY_ $@ $1 $: $2           use unqualified mailer
+
+###################################################################
+###  Ruleset _SET_98_ -- local part of ruleset zero (can be null)      ###
+###################################################################
+
+S`'_SET_98_
+undivert(3)dnl
 #\f
 ######################################################################
 ######################################################################
 #\f
 ######################################################################
 ######################################################################
index 174b7da..57f00aa 100644 (file)
@@ -32,8 +32,8 @@ divert(-1)
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
-VERSIONID(`@(#)version.m4      8.3 (Berkeley) 7/13/93')
+VERSIONID(`@(#)version.m4      8.6.1.3 (Berkeley) 10/24/93')
 #
 divert(0)
 # Configuration version number
 #
 divert(0)
 # Configuration version number
-DZ8.3
+DZ8.6.3
index 8c96851..34b030b 100644 (file)
@@ -32,8 +32,8 @@ PUSHDIVERT(-1)
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
-ifdef(`LOCAL_MAILER_FLAGS',, `define(`LOCAL_MAILER_FLAGS', `rn')')
-ifdef(`LOCAL_MAILER_PATH',, `define(`LOCAL_MAILER_PATH', /usr/libexec/mail.local)')
+ifdef(`LOCAL_MAILER_FLAGS',, `define(`LOCAL_MAILER_FLAGS', `rmn')')
+ifdef(`LOCAL_MAILER_PATH',, `define(`LOCAL_MAILER_PATH', /bin/mail)')
 ifdef(`LOCAL_MAILER_ARGS',, `define(`LOCAL_MAILER_ARGS', `mail -d $u')')
 ifdef(`LOCAL_SHELL_FLAGS',, `define(`LOCAL_SHELL_FLAGS', `eu')')
 ifdef(`LOCAL_SHELL_PATH',, `define(`LOCAL_SHELL_PATH', /bin/sh)')
 ifdef(`LOCAL_MAILER_ARGS',, `define(`LOCAL_MAILER_ARGS', `mail -d $u')')
 ifdef(`LOCAL_SHELL_FLAGS',, `define(`LOCAL_SHELL_FLAGS', `eu')')
 ifdef(`LOCAL_SHELL_PATH',, `define(`LOCAL_SHELL_PATH', /bin/sh)')
@@ -44,15 +44,21 @@ POPDIVERT
 ###   Local and Program Mailer specification   ###
 ##################################################
 
 ###   Local and Program Mailer specification   ###
 ##################################################
 
-VERSIONID(`@(#)local.m4        8.3 (Berkeley) 7/13/93')
+VERSIONID(`@(#)local.m4        8.5 (Berkeley) 10/23/93')
 
 
-Mlocal,                P=LOCAL_MAILER_PATH, F=CONCAT(`lsDFMm', LOCAL_MAILER_FLAGS), S=10, R=20,
+Mlocal,                P=LOCAL_MAILER_PATH, F=CONCAT(`lsDFM', LOCAL_MAILER_FLAGS), S=10, R=20/40,
                A=LOCAL_MAILER_ARGS
 Mprog,         P=LOCAL_SHELL_PATH, F=CONCAT(`lsDFM', LOCAL_SHELL_FLAGS), S=10, R=20, D=$z:/,
                A=LOCAL_SHELL_ARGS
 
 S10
 R<@>                   $n                      errors to mailer-daemon
                A=LOCAL_MAILER_ARGS
 Mprog,         P=LOCAL_SHELL_PATH, F=CONCAT(`lsDFM', LOCAL_SHELL_FLAGS), S=10, R=20, D=$z:/,
                A=LOCAL_SHELL_ARGS
 
 S10
 R<@>                   $n                      errors to mailer-daemon
+R$+                    $: $>40 $1
+
+S20
+R$+ < @ $* >           $: $1                   strip host part
+
+S40
 ifdef(`_ALWAYS_ADD_DOMAIN_',
 `R$* < @ $* > $*               $@ $1 < @ $2 > $3       already fully qualified
 R$*                    $: $1 @ $M              add local qualification
 ifdef(`_ALWAYS_ADD_DOMAIN_',
 `R$* < @ $* > $*               $@ $1 < @ $2 > $3       already fully qualified
 R$*                    $: $1 @ $M              add local qualification
index 9119451..7ff09c3 100644 (file)
@@ -40,46 +40,62 @@ POPDIVERT
 ###   SMTP Mailer specification   ###
 #####################################
 
 ###   SMTP Mailer specification   ###
 #####################################
 
-VERSIONID(`@(#)smtp.m4 8.3 (Berkeley) 7/11/93')
+VERSIONID(`@(#)smtp.m4 8.6 (Berkeley) 10/23/93')
 
 
-Msmtp,         P=[IPC], F=CONCAT(mDFMueXC, SMTP_MAILER_FLAGS), S=11, R=ifdef(`_ALL_MASQUERADE_', `11', `21'), E=\r\n,
+Msmtp,         P=[IPC], F=CONCAT(mDFMuX, SMTP_MAILER_FLAGS), S=11/31, R=ifdef(`_ALL_MASQUERADE_', `11/31', `21'), E=\r\n,
                ifdef(`_OLD_SENDMAIL_',, `L=990, ')A=IPC $h
                ifdef(`_OLD_SENDMAIL_',, `L=990, ')A=IPC $h
-Mesmtp,                P=[IPC], F=CONCAT(mDFMueXCa, SMTP_MAILER_FLAGS), S=11, R=ifdef(`_ALL_MASQUERADE_', `11', `21'), E=\r\n,
+Mesmtp,                P=[IPC], F=CONCAT(mDFMuXa, SMTP_MAILER_FLAGS), S=11/31, R=ifdef(`_ALL_MASQUERADE_', `11/31', `21'), E=\r\n,
                ifdef(`_OLD_SENDMAIL_',, `L=990, ')A=IPC $h
                ifdef(`_OLD_SENDMAIL_',, `L=990, ')A=IPC $h
-Mrelay,                P=[IPC], F=CONCAT(mDFMueXCa, SMTP_MAILER_FLAGS), S=11, R=19, E=\r\n,
+Mrelay,                P=[IPC], F=CONCAT(mDFMuXa, SMTP_MAILER_FLAGS), S=11/31, R=19, E=\r\n,
                ifdef(`_OLD_SENDMAIL_',, `L=2040, ')A=IPC $h
 
                ifdef(`_OLD_SENDMAIL_',, `L=2040, ')A=IPC $h
 
+#
+#  envelope sender and masquerading recipient rewriting
+#
 S11
 S11
+R$+                    $: $>19 $1                      sender/recipient common
+R$* :; <@>             $@ $1 :;                        list:; special case
 
 
-# do sender/recipient common rewriting
-R$+                    $: $>19 $1
-
-# if already @ qualified, we are done
+# handle unqualified names
 R$* < @ $* > $*                $@ $1 < @ $2 > $3               already qualified
 R$* < @ $* > $*                $@ $1 < @ $2 > $3               already qualified
+R$*                    $@ $>29 $1
 
 
-# do not qualify list:; syntax
-R$* :; <@>             $@ $1 :;
-
-# unqualified names (e.g., "eric") "come from" $M
-R$=E                   $@ $1 < @ $j>                   show exposed names
-R$+                    $: $1 < @ $M >                  user w/o host
-R$+ <@>                        $: $1 < @ $j >                  in case $M undefined
 
 
-ifdef(`_ALL_MASQUERADE_', `dnl',
-`S21
+#
+#  header recipient rewriting if not masquerading recipients
+#
+S21
 
 # do sender/recipient common rewriting
 R$+                    $: $>19 $1
 
 
 # do sender/recipient common rewriting
 R$+                    $: $>19 $1
 
-# if already @ qualified, we are done
+# unqualified names (e.g., "eric") are qualified by local host
 R$* < @ $* > $*                $@ $1 < @ $2 > $3               already qualified
 R$* < @ $* > $*                $@ $1 < @ $2 > $3               already qualified
+R$+                    $: $1 < @ $j >                  add local domain
 
 
-# do not qualify list:; syntax
-R$* :; <@>             $@ $1 :;
 
 
-# unqualified names (e.g., "eric") are qualified by local host
-R$+                    $: $1 < @ $j >')
+#
+#  header sender and masquerading recipient rewriting
+#
+S31
+R$+                    $: $>19 $1                      sender/recipient common
+R$* :; <@>             $@ $1 :;                        list:; special case
+
+# do special header rewriting
+R$* <@> $*             $@ $1 <@> $2                    pass null host through
+R< @ $* > $*           $@ < @ $1 > $2                  pass route-addr through
+R$=E < @ $=w . >       $@ $1 < @ $2 >                  exposed user as is
+R$* < @ $=w . >                $: $1 < @ $M >                  masquerade as domain
+R$* < @ >              $: $1 < @ $j >                  in case $M undefined
+
+# handle unqualified names
+R$* < @ $* > $*                $@ $1 < @ $2 > $3               already qualified
+R$*                    $@ $>29 $1
 
 
+
+#
+#  common rewriting for all SMTP addresses
+#
 S19
 
 # pass <route-addr>s through
 S19
 
 # pass <route-addr>s through
@@ -87,10 +103,21 @@ R< @ $+ > $*               $@ < @ $1 > $2                  resolve <route-addr>
 
 # output fake domains as user%fake@relay
 ifdef(`BITNET_RELAY',
 
 # output fake domains as user%fake@relay
 ifdef(`BITNET_RELAY',
-`R$+ <@ $+ . BITNET >  $: $1 % $2 .BITNET < @ $B >     user@host.BITNET',
+`R$+ <@ $+ . BITNET >  $: $1 % $2 .BITNET < @ $B >     user@host.BITNET
+R$+.BITNET <@ $+:$+ >  $: $1 .BITNET < @ $3 >          strip mailer: part',
        `dnl')
 ifdef(`CSNET_RELAY',
        `dnl')
 ifdef(`CSNET_RELAY',
-`R$+ <@ $+ . CSNET >   $: $1 % $2 .CSNET < @ $C >      user@host.CSNET',
+`R$+ <@ $+ . CSNET >   $: $1 % $2 .CSNET < @ $C >      user@host.CSNET
+R$+.CSNET <@ $+:$+ >   $: $1 .CSNET < @ $3 >           strip mailer: part',
        `dnl')
 ifdef(`_NO_UUCP_', `dnl',
 `R$+ <@ $+ . UUCP >    $: $2 ! $1 < @ $j >             user@host.UUCP')
        `dnl')
 ifdef(`_NO_UUCP_', `dnl',
 `R$+ <@ $+ . UUCP >    $: $2 ! $1 < @ $j >             user@host.UUCP')
+
+
+#
+#  common sender and masquerading recipient rewriting
+#
+S29
+R$=E                   $@ $1 < @ $j>                   show exposed names
+R$+                    $: $1 < @ $M >                  user w/o host
+R$+ <@>                        $: $1 < @ $j >                  in case $M undefined
index f97e3dc..d859a27 100644 (file)
@@ -42,7 +42,7 @@ POPDIVERT
 ###   UUCP Mailer specification   ###
 #####################################
 
 ###   UUCP Mailer specification   ###
 #####################################
 
-VERSIONID(`@(#)uucp.m4 8.4 (Berkeley) 7/13/93')
+VERSIONID(`@(#)uucp.m4 8.5 (Berkeley) 7/28/93')
 
 # old UUCP mailer
 Muucp,         P=UUCP_MAILER_PATH, F=CONCAT(DFMhuU, UUCP_MAILER_FLAGS), S=12, R=22, M=UUCP_MAX_SIZE,
 
 # old UUCP mailer
 Muucp,         P=UUCP_MAILER_PATH, F=CONCAT(DFMhuU, UUCP_MAILER_FLAGS), S=12, R=22, M=UUCP_MAX_SIZE,
@@ -86,8 +86,10 @@ R$* < @ $+ >                 $2 ! $1                 convert to UUCP format
 
 PUSHDIVERT(4)
 # resolve locally connected UUCP links
 
 PUSHDIVERT(4)
 # resolve locally connected UUCP links
+R< @ $=Z . UUCP > : $+         $#uucp-dom $@ $1 $: $2  @host.UUCP: ...
+R$+ < @ $=Z . UUCP >           $#uucp-dom $@ $2 $: $1  user@host.UUCP
 R< @ $=Y . UUCP > : $+         $#suucp $@ $1 $: $2     @host.UUCP: ...
 R< @ $=Y . UUCP > : $+         $#suucp $@ $1 $: $2     @host.UUCP: ...
-R< @ $=U . UUCP > : $+         $#uucp $@ $1 $: $2      @host.UUCP: ...
 R$+ < @ $=Y . UUCP >           $#suucp $@ $2 $: $1     user@host.UUCP
 R$+ < @ $=Y . UUCP >           $#suucp $@ $2 $: $1     user@host.UUCP
+R< @ $=U . UUCP > : $+         $#uucp $@ $1 $: $2      @host.UUCP: ...
 R$+ < @ $=U . UUCP >           $#uucp $@ $2 $: $1      user@host.UUCP
 POPDIVERT
 R$+ < @ $=U . UUCP >           $#uucp $@ $2 $: $1      user@host.UUCP
 POPDIVERT
index 3eda563..4411fd0 100644 (file)
@@ -34,7 +34,7 @@ divert(-1)
 #
 
 divert(0)
 #
 
 divert(0)
-VERSIONID(`@(#)aix3.m4 8.2 (Berkeley) 7/13/93')
+VERSIONID(`@(#)aix3.m4 8.3 (Berkeley) 8/8/93')
 define(`LOCAL_MAILER_PATH', /bin/bellmail)dnl
 define(`LOCAL_MAILER_ARGS', mail $u)dnl
 define(`LOCAL_MAILER_PATH', /bin/bellmail)dnl
 define(`LOCAL_MAILER_ARGS', mail $u)dnl
-define(`LOCAL_MAILER_FLAGS', `n')dnl
+define(`LOCAL_MAILER_FLAGS', `mn')dnl
diff --git a/usr.sbin/sendmail/cf/ostype/aux.m4 b/usr.sbin/sendmail/cf/ostype/aux.m4
new file mode 100644 (file)
index 0000000..b7ea47b
--- /dev/null
@@ -0,0 +1,43 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+divert(0)
+VERSIONID(`@(#)aux.m4  8.1 (Berkeley) 9/2/93')
+define(`ALIAS_FILE', /usr/lib/aliases)dnl
+define(`QUEUE_DIR', /usr/spool/mqueue)dnl
+define(`STATUS_FILE', /usr/lib/sendmail.st)dnl
+define(`UUCP_MAILER_PATH', /usr/bin/uux)dnl
+define(`LOCAL_MAILER_FLAGS', mn)dnl
+define(`LOCAL_MAILER_ARGS', `mail -d -r $f $u')dnl
index ea1c05b..0a1d097 100644 (file)
@@ -34,6 +34,10 @@ divert(-1)
 #
 
 divert(0)
 #
 
 divert(0)
-VERSIONID(`@(#)hpux.m4 8.1 (Berkeley) 6/7/93')
-define(`_HPUX_', `')dnl
-define(`LOCAL_MAILER_FLAGS', `')dnl
+VERSIONID(`@(#)hpux.m4 8.4 (Berkeley) 8/24/93')
+
+define(`QUEUE_DIR', /usr/spool/mqueue)dnl
+define(`ALIAS_FILE', /usr/lib/aliases)dnl
+define(`STATUS_FILE', /usr/lib/sendmail.st)dnl
+define(`LOCAL_MAILER_FLAGS', `m')dnl
+define(`confTIME_ZONE', `USE_TZ')dnl
index 7e4e8dc..6baf60b 100644 (file)
@@ -34,5 +34,5 @@ divert(-1)
 #
 
 divert(0)
 #
 
 divert(0)
-VERSIONID(`@(#)irix.m4 8.1 (Berkeley) 6/7/93')
-define(`LOCAL_MAILER_FLAGS', Ehu)dnl
+VERSIONID(`@(#)irix.m4 8.2 (Berkeley) 8/8/93')
+define(`LOCAL_MAILER_FLAGS', Ehmu)dnl
diff --git a/usr.sbin/sendmail/cf/ostype/linux.m4 b/usr.sbin/sendmail/cf/ostype/linux.m4
new file mode 100644 (file)
index 0000000..527b6fa
--- /dev/null
@@ -0,0 +1,38 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+divert(0)
+VERSIONID(`@(#)linux.m4        8.2 (Berkeley) 8/21/93')
+define(`LOCAL_MAILER_PATH', /bin/mail.local)dnl
diff --git a/usr.sbin/sendmail/cf/ostype/nextstep.m4 b/usr.sbin/sendmail/cf/ostype/nextstep.m4
new file mode 100644 (file)
index 0000000..a005dc9
--- /dev/null
@@ -0,0 +1,42 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+divert(0)
+VERSIONID(`@(#)nextstep.m4     8.3 (Berkeley) 8/13/93')
+define(`ALIAS_FILE', /etc/sendmail/aliases)dnl
+define(`HELP_FILE', /usr/lib/sendmail.hf)dnl
+define(`STATUS_FILE', /etc/sendmail/sendmail.st)dnl
+define(`UUCP_MAILER_PATH', /usr/bin/uux)dnl
+define(`QUEUE_DIR', /usr/spool/mqueue)dnl
diff --git a/usr.sbin/sendmail/cf/ostype/solaris2.m4 b/usr.sbin/sendmail/cf/ostype/solaris2.m4
new file mode 100644 (file)
index 0000000..f73df08
--- /dev/null
@@ -0,0 +1,43 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+divert(0)
+VERSIONID(`@(#)solaris2.m4     8.1 (Berkeley) 8/7/93')
+divert(-1)
+
+define(`ALIAS_FILE', /etc/mail/aliases)
+define(`HELP_FILE', /var/lib/sendmail.hf)
+define(`STATUS_FILE', /etc/mail/sendmail.st)
+define(`LOCAL_MAILER_FLAGS', `fSn')
diff --git a/usr.sbin/sendmail/cf/ostype/svr4.m4 b/usr.sbin/sendmail/cf/ostype/svr4.m4
new file mode 100644 (file)
index 0000000..dd50127
--- /dev/null
@@ -0,0 +1,45 @@
+divert(-1)
+#
+# Copyright (c) 1983 Eric P. Allman
+# Copyright (c) 1988, 1993
+#      The Regents of the University of California.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by the University of
+#      California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+divert(0)
+VERSIONID(`@(#)svr4.m4 8.1 (Berkeley) 8/24/93')
+
+ifdef(`ALIAS_FILE',,`define(`ALIAS_FILE', /usr/ucblib/aliases)')dnl
+ifdef(`HELP_FILE',,`define(`HELP_FILE', /usr/ucblib/sendmail.hf)')dnl
+ifdef(`STATUS_FILE',,`define(`STATUS_FILE', /usr/ucblib/sendmail.st)')dnl
+define(`LOCAL_MAILER_PATH', `/usr/ucblib/binmail')dnl
+define(`LOCAL_MAILER_FLAGS', `rmn')dnl
+define(`LOCAL_SHELL_FLAGS', `ehuP')dnl
+define(`UUCP_MAILER_ARGS', `uux - -r -a$f -gmedium $h!rmail ($u)')dnl
index c7c3633..216cf61 100644 (file)
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
-#      @(#)makeinfo.sh 8.1 (Berkeley) 6/7/93
+#      @(#)makeinfo.sh 8.3 (Berkeley) 7/23/93
 #
 
 #
 
-echo '#####' built by `whoami` on `date`
-echo '#####' in `pwd` on `hostname`
+usewhoami=0
+usehostname=0
+for p in `echo $PATH | sed 's/:/ /g'`
+do
+       if [ "x$p" = "x" ]
+       then
+               p="."
+       fi
+       if [ -f $p/whoami ]
+       then
+               usewhoami=1
+               if [ $usehostname -ne 0 ]
+               then
+                       break;
+               fi
+       fi
+       if [ -f $p/hostname ]
+       then
+               usehostname=1
+               if [ $usewhoami -ne 0 ]
+               then
+                       break;
+               fi
+       fi
+done
+if [ $usewhoami -ne 0 ]
+then
+       user=`whoami`
+else
+       user=$LOGNAME
+fi
+
+if [ $usehostname -ne 0 ]
+then
+       host=`hostname`
+else
+       host=`uname -n`
+fi
+echo '#####' built by $user on `date`
+echo '#####' in `pwd` on $host
index 5a747c5..5d7b1b5 100644 (file)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    @(#)op.me       8.2 (Berkeley) 7/11/93
+.\"    @(#)op.me       8.26 (Berkeley) 10/14/93
 .\"
 .\" eqn op.me | pic | troff -me
 .eh 'SMM:08-%''Sendmail Installation and Operation Guide'
 .oh 'Sendmail Installation and Operation Guide''SMM:08-%'
 .\" SD is lib if sendmail is installed in /usr/lib, sbin if in /usr/sbin
 .ds SD sbin
 .\"
 .\" eqn op.me | pic | troff -me
 .eh 'SMM:08-%''Sendmail Installation and Operation Guide'
 .oh 'Sendmail Installation and Operation Guide''SMM:08-%'
 .\" SD is lib if sendmail is installed in /usr/lib, sbin if in /usr/sbin
 .ds SD sbin
+.\" SB is bin if newaliases/mailq are installed in /usr/bin, ucb if in /usr/ucb
+.ds SB bin
 .nr si 3n
 .de $0
 .(x
 .nr si 3n
 .de $0
 .(x
@@ -51,6 +53,7 @@
 \\$1 \\$2.  \\$3
 .)x
 ..
 \\$1 \\$2.  \\$3
 .)x
 ..
+.sc
 .+c
 .(l C
 .sz 16
 .+c
 .(l C
 .sz 16
@@ -66,9 +69,9 @@ University of California, Berkeley
 Mammoth Project
 eric@CS.Berkeley.EDU
 .sp
 Mammoth Project
 eric@CS.Berkeley.EDU
 .sp
-Version 8.2
+Version 8.26
 .sp
 .sp
-For Sendmail Version 8.2
+For Sendmail Version 8.6
 .)l
 .sp 2
 .pp
 .)l
 .sp 2
 .pp
@@ -76,7 +79,7 @@ For Sendmail Version 8.2
 implements a general purpose internetwork mail routing facility
 under the UNIX*
 .(f
 implements a general purpose internetwork mail routing facility
 under the UNIX*
 .(f
-*UNIX is a trademark of Bell Laboratories.
+*UNIX is a trademark of Unix Systems Laboratories.
 .)f
 operating system.
 It is not tied to any one transport protocol \*-
 .)f
 operating system.
 It is not tied to any one transport protocol \*-
@@ -142,18 +145,23 @@ file.
 This section is for masochists
 and people who must write their own configuration file.
 Section six
 This section is for masochists
 and people who must write their own configuration file.
 Section six
+describes configuration that can be done at compile time.
+Section seven
 gives a brief description of differences
 in this version of
 .i sendmail .
 The appendixes give a brief
 but detailed explanation of a number of features
 not described in the rest of the paper.
 gives a brief description of differences
 in this version of
 .i sendmail .
 The appendixes give a brief
 but detailed explanation of a number of features
 not described in the rest of the paper.
-.bp 5
+.bp 7
 .sh 1 "BASIC INSTALLATION"
 .pp
 .sh 1 "BASIC INSTALLATION"
 .pp
-There are two basic steps to installing sendmail.
+There are two basic steps to installing
+.i sendmail .
 The hard part is to build the configuration table.
 The hard part is to build the configuration table.
-This is a file that sendmail reads when it starts up
+This is a file that
+.i sendmail
+reads when it starts up
 that describes the mailers it knows about,
 how to parse addresses,
 how to rewrite the message header,
 that describes the mailers it knows about,
 how to parse addresses,
 how to rewrite the message header,
@@ -164,7 +172,8 @@ by adjusting an existing off-the-shelf configuration.
 The second part is actually doing the installation,
 i.e., creating the necessary files, etc.
 .pp
 The second part is actually doing the installation,
 i.e., creating the necessary files, etc.
 .pp
-The remainder of this section will describe the installation of sendmail
+The remainder of this section will describe the installation of
+.i sendmail
 assuming you can use one of the existing configurations
 and that the standard installation parameters are acceptable.
 All pathnames and examples
 assuming you can use one of the existing configurations
 and that the standard installation parameters are acceptable.
 All pathnames and examples
@@ -181,7 +190,9 @@ If you have a running binary already on your system,
 you should probably skip to section 1.2.
 .sh 2 "Compiling Sendmail"
 .pp
 you should probably skip to section 1.2.
 .sh 2 "Compiling Sendmail"
 .pp
-All sendmail source is in the
+All
+.i sendmail
+source is in the
 .i src
 subdirectory.
 If you are running on a 4.4BSD system,
 .i src
 subdirectory.
 If you are running on a 4.4BSD system,
@@ -231,7 +242,7 @@ if you do,
 old databases are read,
 but when a new database is created it will be in NEWDB format.
 As a nasty hack,
 old databases are read,
 but when a new database is created it will be in NEWDB format.
 As a nasty hack,
-if you have NEWDB, NDBM, and YPCOMPAT defined,
+if you have NEWDB, NDBM, and NIS defined,
 and if the file
 .i /var/yp/Makefile
 exists and is readable,
 and if the file
 .i /var/yp/Makefile
 exists and is readable,
@@ -294,9 +305,9 @@ make install
 This should install the binary in
 /usr/\*(SD
 and create links from
 This should install the binary in
 /usr/\*(SD
 and create links from
-/usr/bin/newaliases
+/usr/\*(SB/newaliases
 and
 and
-/usr/bin/mailq
+/usr/\*(SB/mailq
 to
 /usr/\*(SD/sendmail.
 On 4.4BSD systems it will also format and install man pages.
 to
 /usr/\*(SD/sendmail.
 On 4.4BSD systems it will also format and install man pages.
@@ -341,7 +352,7 @@ I haven't tested these yet on an isolated LAN environment
 with a single UUCP connection to the outside world.
 If you are in such an environment,
 please send comments to
 with a single UUCP connection to the outside world.
 If you are in such an environment,
 please send comments to
-sendmail@okeeffe.CS.Berkeley.EDU.
+sendmail@CS.Berkeley.EDU.
 .pp
 Our configuration files are processed by
 .i m4
 .pp
 Our configuration files are processed by
 .i m4
@@ -349,7 +360,7 @@ to facilitate local customization;
 the directory
 .i cf
 of the
 the directory
 .i cf
 of the
-sendmail
+.i sendmail
 distribution directory
 contains the source files.
 This directory contains several subdirectories:
 distribution directory
 contains the source files.
 This directory contains several subdirectories:
@@ -400,7 +411,9 @@ These are referenced using the
 macro.
 An example feature is
 use_cw_file
 macro.
 An example feature is
 use_cw_file
-(which tells sendmail to read an /etc/sendmail.cw file on startup
+(which tells
+.i sendmail
+to read an /etc/sendmail.cw file on startup
 to find the set of local names).
 .ip hack
 Local hacks, referenced using the
 to find the set of local names).
 .ip hack
 Local hacks, referenced using the
@@ -505,11 +518,13 @@ file.
 .pp
 This subsection describes the files that
 comprise the
 .pp
 This subsection describes the files that
 comprise the
-sendmail
+.i sendmail
 installation.
 .sh 3 "/usr/\*(SD/sendmail"
 .pp
 installation.
 .sh 3 "/usr/\*(SD/sendmail"
 .pp
-The binary for sendmail is located in /usr/\*(SD\**.
+The binary for
+.i sendmail
+is located in /usr/\*(SD\**.
 .(f
 \**This is usually
 /usr/sbin
 .(f
 \**This is usually
 /usr/sbin
@@ -533,13 +548,14 @@ and permissions are
 .)f
 .sh 3 "/etc/sendmail.cf"
 .pp
 .)f
 .sh 3 "/etc/sendmail.cf"
 .pp
-This is the configuration file for sendmail.
-This and the frozen configuration file
-are the only two non-library file names compiled into sendmail\**.
+This is the configuration file for
+.i sendmail .
+This is the only non-library file name compiled into
+.i sendmail \**.
 .(f
 \**The system libraries can reference other files;
 in particular, system library subroutines that
 .(f
 \**The system libraries can reference other files;
 in particular, system library subroutines that
-sendmail
+.i sendmail
 calls probably reference
 .i /etc/passwd
 and
 calls probably reference
 .i /etc/passwd
 and
@@ -558,7 +574,7 @@ If you have a particularly unusual system configuration
 you may need to create a special version.
 The format of this file is detailed in later sections
 of this document.
 you may need to create a special version.
 The format of this file is detailed in later sections
 of this document.
-.sh 3 "/usr/ucb/newaliases"
+.sh 3 "/usr/\*(SB/newaliases"
 .pp
 If you are running delivermail,
 it is critical that the
 .pp
 If you are running delivermail,
 it is critical that the
@@ -567,8 +583,8 @@ command be replaced.
 This can just be a link to
 .i sendmail :
 .(b
 This can just be a link to
 .i sendmail :
 .(b
-rm \-f /usr/ucb/newaliases
-ln /usr/\*(SD/sendmail /usr/ucb/newaliases
+rm \-f /usr/\*(SB/newaliases
+ln /usr/\*(SD/sendmail /usr/\*(SB/newaliases
 .)b
 This can be installed in whatever search path you prefer
 for your system.
 .)b
 This can be installed in whatever search path you prefer
 for your system.
@@ -634,32 +650,11 @@ is defined in the
 option of the
 .i sendmail.cf
 file.
 option of the
 .i sendmail.cf
 file.
-.sh 3 "/etc/sendmail.fc"
-.pp
-If you intend to install the frozen version of the configuration file
-(for quick startup)
-you should create the file /etc/sendmail.fc
-and initialize it.
-This step may be safely skipped.
-.(b
-cp /dev/null /etc/sendmail.fc
-chmod 644 /etc/sendmail.fc
-/usr/\*(SD/sendmail \-bz
-.)b
-In general, freeze files are not worth doing
-unless your disks are much faster than your CPU;
-this is seldom true any more.
-.pp
-If your
-.i sendmail
-was not compiled with
-.sm FROZENCONFIG
-defined, the
-.b \-bz
-flag will be ignored.
 .sh 3 "/etc/rc"
 .pp
 .sh 3 "/etc/rc"
 .pp
-It will be necessary to start up the sendmail daemon when your system reboots.
+It will be necessary to start up the
+.i sendmail
+daemon when your system reboots.
 This daemon performs two functions:
 it listens on the SMTP socket for connections
 (to receive mail from a remote system)
 This daemon performs two functions:
 it listens on the SMTP socket for connections
 (to receive mail from a remote system)
@@ -724,17 +719,21 @@ do
                rm \-f $tffile
        fi
 done
                rm \-f $tffile
        fi
 done
-# remove bogus qf files
+# remove df files with no corresponding qf files
 for dffile in df*
 do
        qffile=`echo $dffile | sed 's/d/q/'`
        if [ \-r $dffile \-a ! \-f $qffile ]
        then
                echo \-n " <incomplete: $dffile>" > /dev/console
 for dffile in df*
 do
        qffile=`echo $dffile | sed 's/d/q/'`
        if [ \-r $dffile \-a ! \-f $qffile ]
        then
                echo \-n " <incomplete: $dffile>" > /dev/console
-               rm \-f $dffile
+               mv $dffile `echo $dffile | sed 's/d/D/'`
        fi
 done
        fi
 done
-fi
+# announce files that have been saved during disaster recovery
+for xffile in [A-Z]f*
+do
+       echo \-n " <panic: $xffile>" > /dev/console
+done
 .)b
 .pp
 If you are not running a version of UNIX
 .)b
 .pp
 If you are not running a version of UNIX
@@ -777,7 +776,7 @@ is defined in the
 option of the
 .i sendmail.cf
 file.
 option of the
 .i sendmail.cf
 file.
-.sh 3 "/usr/ucb/newaliases"
+.sh 3 "/usr/\*(SB/newaliases"
 .pp
 If
 .i sendmail
 .pp
 If
 .i sendmail
@@ -789,7 +788,7 @@ flag
 (i.e., will rebuild the alias database;
 see below).
 This should be a link to /usr/\*(SD/sendmail.
 (i.e., will rebuild the alias database;
 see below).
 This should be a link to /usr/\*(SD/sendmail.
-.sh 3 "/usr/ucb/mailq"
+.sh 3 "/usr/\*(SB/mailq"
 .pp
 If
 .i sendmail
 .pp
 If
 .i sendmail
@@ -804,46 +803,6 @@ will print the contents of the mail queue;
 see below).
 This should be a link to /usr/\*(SD/sendmail.
 .sh 1 "NORMAL OPERATIONS"
 see below).
 This should be a link to /usr/\*(SD/sendmail.
 .sh 1 "NORMAL OPERATIONS"
-.sh 2 "``Quick'' Configuration Startup"
-.pp
-if the
-.sm FROZENCONFIG
-option is included during compilation,
-a precompiled (``frozen'') version of the configuration file
-can be created using the
-.b \-bz
-flag.
-This is really only worthwhile doing
-if you are on a slow processor with a relatively fast I/O system
-(a VAX 11/750 is a good example).
-Since it creates other problems,
-I recommend against using the frozen configuration
-on most current architectures.
-.pp
-To create the freeze file, use
-.(b
-/usr/\*(SD/sendmail \-bz
-.)b
-This creates the frozen configuration file
-.i /etc/sendmail.fc .
-This file is an image of
-.i sendmail 's
-data space after reading in the configuration file.
-If this file exists,
-it is used instead of
-.i /etc/sendmail.cf
-.i sendmail.fc
-must be rebuilt manually every time
-.i sendmail.cf
-is changed.
-.pp
-The frozen configuration file will be ignored
-if a
-.b \-C
-flag is specified
-or if sendmail detects that it is out of date.
-However, the heuristics are not strong
-so this should not be trusted.
 .sh 2 "The System Log"
 .pp
 The system log is supported by the
 .sh 2 "The System Log"
 .pp
 The system log is supported by the
@@ -890,7 +849,9 @@ However, you may find that manual intervention is sometimes necessary.
 For example,
 if a major host is down for a period of time
 the queue may become clogged.
 For example,
 if a major host is down for a period of time
 the queue may become clogged.
-Although sendmail ought to recover gracefully when the host comes up,
+Although
+.i sendmail
+ought to recover gracefully when the host comes up,
 you may find performance unacceptably bad in the meantime.
 .sh 3 "Printing the queue"
 .pp
 you may find performance unacceptably bad in the meantime.
 .sh 3 "Printing the queue"
 .pp
@@ -900,7 +861,8 @@ using the
 command
 (or by specifying the
 .b \-bp
 command
 (or by specifying the
 .b \-bp
-flag to sendmail):
+flag to
+.i sendmail ):
 .(b
 mailq
 .)b
 .(b
 mailq
 .)b
@@ -1103,7 +1065,9 @@ it adds an alias of the form
 @: @
 .)b
 (which is not normally legal).
 @: @
 .)b
 (which is not normally legal).
-Before sendmail will access the database,
+Before
+.i sendmail
+will access the database,
 it checks to insure that this entry exists\**.
 .(f
 \**The
 it checks to insure that this entry exists\**.
 .(f
 \**The
@@ -1220,7 +1184,19 @@ when the final delivery is complete,
 that is,
 when successfully delivered to a mailer with the
 .b l
 that is,
 when successfully delivered to a mailer with the
 .b l
-flag (local delivery) set in the mailer descriptor.
+flag (local delivery) set in the mailer descriptor\**.
+.(f
+\**Some sites disable this header,
+and other (non-\c
+.i sendmail )
+systems do not implement it.
+Do not assume that a failure to get a return receipt
+means that the mail did not arrive.
+Also, do not assume that getting a return receipt
+means that the mail has been read;
+it just means that the message has been delivered
+to the recipient's mailbox.
+.)f
 .sh 3 "Errors-To:"
 .pp
 If errors occur anywhere during processing,
 .sh 3 "Errors-To:"
 .pp
 If errors occur anywhere during processing,
@@ -1262,6 +1238,7 @@ it is in no sense perfect;
 a determined forger can easily spoof the IDENT protocol.
 The following description is excerpted from RFC 1413:
 .ba +5
 a determined forger can easily spoof the IDENT protocol.
 The following description is excerpted from RFC 1413:
 .ba +5
+.lp
 6.  Security Considerations
 .lp
 The information returned by this protocol is at most as trustworthy
 6.  Security Considerations
 .lp
 The information returned by this protocol is at most as trustworthy
@@ -1575,6 +1552,9 @@ such as NOOP (no-operation) and VERB (go into verbose mode).
 In server SMTP,
 the time to wait for another command.
 [1h, 5m].
 In server SMTP,
 the time to wait for another command.
 [1h, 5m].
+.ip ident
+The timeout waiting for a reply to an IDENT query
+[30s, unspecified].
 .lp
 For compatibility with old configuration files,
 if no ``keyword='' is specified,
 .lp
 For compatibility with old configuration files,
 if no ``keyword='' is specified,
@@ -1719,7 +1699,7 @@ and 1800
 (for the class factor).
 The initial priority is:
 .EQ
 (for the class factor).
 The initial priority is:
 .EQ
-pri = size - (class times bold z) + (nrcpt times bold y)
+pri = msgsize - (class times bold z) + (nrcpt times bold y)
 .EN
 (Remember, higher values for this parameter actually mean
 that the job will be treated with lower priority.)
 .EN
 (Remember, higher values for this parameter actually mean
 that the job will be treated with lower priority.)
@@ -1768,15 +1748,17 @@ pri > { bold q } over { LA - { bold x } + 1 }
 .EN
 The
 .b q
 .EN
 The
 .b q
-option defaults to 200000,
-so each point of load average is worth 200000
+option defaults to 600000,
+so each point of load average is worth 600000
 priority points
 (as described above).
 .pp
 For drastic cases,
 the
 .b X
 priority points
 (as described above).
 .pp
 For drastic cases,
 the
 .b X
-option defines a load average at which sendmail will refuse
+option defines a load average at which
+.i sendmail
+will refuse
 to accept network connections.
 Locally generated mail
 (including incoming UUCP mail)
 to accept network connections.
 Locally generated mail
 (including incoming UUCP mail)
@@ -1816,13 +1798,17 @@ if you have a mailer that takes a long time to deliver a message.
 If you run in mode
 .q q
 (queue only)
 If you run in mode
 .q q
 (queue only)
+or
+.q b
+(deliver in background)
 .i sendmail
 will not expand aliases and follow .forward files
 upon initial receipt of the mail.
 This speeds up the response to RCPT commands.
 .sh 2 "Log Level"
 .pp
 .i sendmail
 will not expand aliases and follow .forward files
 upon initial receipt of the mail.
 This speeds up the response to RCPT commands.
 .sh 2 "Log Level"
 .pp
-The level of logging can be set for sendmail.
+The level of logging can be set for
+.i sendmail .
 The default using a standard configuration table is level 9.
 The levels are as follows:
 .nr ii 0.5i
 The default using a standard configuration table is level 9.
 The levels are as follows:
 .nr ii 0.5i
@@ -1956,7 +1942,7 @@ any intended changes will also be ignored or forgotten.
 .sh 2 "Connection Caching"
 .pp
 When processing the queue,
 .sh 2 "Connection Caching"
 .pp
 When processing the queue,
-.b sendmail
+.i sendmail
 will try to keep the last few open connections open
 to avoid startup and shutdown costs.
 This only applies to IPC connections.
 will try to keep the last few open connections open
 to avoid startup and shutdown costs.
 This only applies to IPC connections.
@@ -1980,7 +1966,7 @@ connections will be closed as quickly as possible.
 The default is one.
 This should be set as appropriate for your system size;
 it will limit the amount of system resources that
 The default is one.
 This should be set as appropriate for your system size;
 it will limit the amount of system resources that
-.b sendmail
+.i sendmail
 will use during queue runs.
 .pp
 The
 will use during queue runs.
 .pp
 The
@@ -1999,20 +1985,29 @@ The default is five minutes.
 If your system supports the name server,
 then the probability is that
 .i sendmail
 If your system supports the name server,
 then the probability is that
 .i sendmail
-will be using it regardless of how you configure sendmail.
-However, if you have nameserver support
-which you are not using,
-sendmail will get a
+will be using it regardless of how you configure
+.i sendmail .
+In particular, the system routine
+.i gethostbyname (3)
+is used to look up host names,
+and most vendor versions try some combination of DNS, NIS,
+and file lookup in /etc/hosts.
+.pp
+However, if you do not have a nameserver configured at all,
+such as at a UUCP-only site,
+.i sendmail
+will get a
 .q "connection refused"
 message when it tries to connect to the name server
 .q "connection refused"
 message when it tries to connect to the name server
-(either by calling
+(either indirectly by calling
 .i gethostbyname
 .i gethostbyname
-or by trying to look up the MX records).
+or directly by looking up MX records).
 If the
 .b I
 option is set,
 .i sendmail
 If the
 .b I
 option is set,
 .i sendmail
-will interpret this to mean a temporary failure;
+will interpret this to mean a temporary failure
+and will queue the mail for later processing;
 otherwise, it ignores the name server data.
 If your name server is running properly,
 the setting of this option is not relevant;
 otherwise, it ignores the name server data.
 If your name server is running properly,
 the setting of this option is not relevant;
@@ -2035,7 +2030,8 @@ and turns off the DNSRCH (search the domain path) options.
 Most resolver libraries default DNSRCH, DEFNAMES, and RECURSE
 flags on and all others off.
 Note the use of the initial ``True'' \*-
 Most resolver libraries default DNSRCH, DEFNAMES, and RECURSE
 flags on and all others off.
 Note the use of the initial ``True'' \*-
-this is for compatibility with previous versions of sendmail,
+this is for compatibility with previous versions of
+.i sendmail ,
 but is not otherwise necessary.
 .pp
 Version level 1 configurations
 but is not otherwise necessary.
 .pp
 Version level 1 configurations
@@ -2144,6 +2140,14 @@ The
 .q restrictmailq
 option restricts printing the queue to the group that owns the queue directory.
 It is absurd to set this if you don't also protect the logs.
 .q restrictmailq
 option restricts printing the queue to the group that owns the queue directory.
 It is absurd to set this if you don't also protect the logs.
+.pp
+The
+.q restrictqrun
+option restricts people running the queue
+(that is, using the
+.b \-q
+command line flag)
+to root and the owner of the queue directory.
 .sh 2 "Send to Me Too"
 .pp
 Normally,
 .sh 2 "Send to Me Too"
 .pp
 Normally,
@@ -2399,9 +2403,12 @@ The
 .b $#
 syntax should
 .i only
 .b $#
 syntax should
 .i only
-be used in ruleset zero.
+be used in ruleset zero
+or a subroutine of ruleset zero.
 It causes evaluation of the ruleset to terminate immediately,
 It causes evaluation of the ruleset to terminate immediately,
-and signals to sendmail that the address has completely resolved.
+and signals to
+.i sendmail
+that the address has completely resolved.
 The complete syntax is:
 .(b
 \fB$#\fP\fImailer\fP \fB$@\fP\fIhost\fP \fB$:\fP\fIuser\fP
 The complete syntax is:
 .(b
 \fB$#\fP\fImailer\fP \fB$@\fP\fIhost\fP \fB$:\fP\fIuser\fP
@@ -2571,7 +2578,8 @@ corresponding to the
 .i sending
 mailer).
 Ruleset three
 .i sending
 mailer).
 Ruleset three
-is applied by sendmail
+is applied by
+.i sendmail
 before doing anything with any address.
 .pp
 Ruleset zero
 before doing anything with any address.
 .pp
 Ruleset zero
@@ -2707,7 +2715,8 @@ clause may be omitted.
 .pp
 Lower case macro names are reserved to have
 special semantics,
 .pp
 Lower case macro names are reserved to have
 special semantics,
-used to pass information in or out of sendmail,
+used to pass information in or out of
+.i sendmail ,
 and special characters are reserved to
 provide conditionals, etc.
 Upper case names
 and special characters are reserved to
 provide conditionals, etc.
 Upper case names
@@ -2717,38 +2726,76 @@ through
 .b $Z )
 are specifically reserved for configuration file authors.
 .pp
 .b $Z )
 are specifically reserved for configuration file authors.
 .pp
-The following macros
-.i must
-be defined to transmit information into
-.i sendmail:
-.(b
-.ta 4n
-e      The SMTP entry message
-j      The \*(lqofficial\*(rq domain name for this site
-l      The format of the UNIX from line
-n      The name of the daemon (for error messages)
-o      The set of "operators" in addresses
-q      default format of sender address
-.)b
-The
-.b $e
-macro is printed out when SMTP starts up.
+The following macros are defined and/or used internally by
+.i sendmail
+for interpolation into argv's for mailers
+or for other contexts.
+The ones marked \(dg are information passed into sendmail\**,
+.(f
+\**As of version 8.6,
+all of these macros have reasonable defaults.
+Previous versions required that they be defined.
+.)f
+the ones marked \(dd are information passed both in and out of sendmail,
+and the unmarked macros are passed out of sendmail
+but are not otherwise used internally.
+These macros are:
+.nr ii 5n
+.ip $a
+.b "The origination date in RFC 822 format."
+.ip $b
+.b "The current date in RFC 822 format."
+.ip $c
+.b "The hop count."
+.ip $d
+.b "The current date in UNIX (ctime) format."
+.ip $e\(dg
+.b "The SMTP entry message."
+This is printed out when SMTP starts up.
 The first word must be the
 .b $j
 The first word must be the
 .b $j
-macro.
-The
+macro as specified by RFC821.
+Defaults to
+.q "$j Sendmail $v ready at $b" .
+Commonly redefined to include the configuration version number, e.g.,
+.q "$j Sendmail $v/$Z ready at $b"
+.ip $f
+.b "The sender (from) address."
+.ip $g
+.b "The sender address relative to the recipient."
+.ip $h
+.b "The recipient host."
+.ip $i
+.b "The queue id."
+.ip $j\(dd
+.b "The \*(lqofficial\*(rq domain name for this site."
+This is fully qualified if the full qualification can be found.
+It
+.i must
+be redefined to be the fully qualified domain name
+if your system is not configured so that information can find
+it automatically.
+.ip $k
+.b "The UUCP node name (from the uname system call)."
+.ip $l\(dg
+.b "The format of the UNIX from line."
+Unless you have changed the UNIX mailbox format,
+you should not change the default,
+which is
+.q "From $g  $d" .
+.ip $m
+.b "The domain part of the \fIgethostname\fP return value."
+Under normal circumstances,
 .b $j
 .b $j
-macro
-should be in RFC821 format.
-The
-.b $l
-and
-.b $n
-macros can be considered constants
-except under terribly unusual circumstances.
-The
-.b $o
-macro consists of a list of characters
+is equivalent to
+.b $w.$m .
+.ip $n\(dg
+.b "The name of the daemon (for error messages)."
+Defaults to
+.q MAILER-DAEMON .
+.ip $o\(dg
+.b "The set of "operators" in addresses."
+A list of characters
 which will be considered tokens
 and which will separate tokens
 when doing parsing.
 which will be considered tokens
 and which will separate tokens
 when doing parsing.
@@ -2763,24 +2810,27 @@ would be scanned as three tokens:
 .q @,
 and
 .q b.
 .q @,
 and
 .q b.
-Finally, the
+Defaults to
+.q ".:@[]" ,
+which is the minimum set necessary to do RFC 822 parsing;
+a richer set of operators is
+.q ".:%@!/[]" ,
+which adds support for UUCP, the %-hack, and X.400 addresses.
+.ip $p
+.b "Sendmail's process id."
+.ip $q\(dg
+.b "Default format of sender address."
+The
 .b $q
 macro specifies how an address should appear in a message
 when it is defaulted.
 .b $q
 macro specifies how an address should appear in a message
 when it is defaulted.
-For example, on our system these definitions are:
-.(b
-De$j Sendmail $v/$Z ready at $b
-DnMAILER-DAEMON
-DlFrom $g  $d
-Do.:%@!^/[]
-Dq$?x$x <$g>$|$g$.
-Dj$w
-.)b
-An acceptable alternative for the
-.b $q
-macro is
-.q "$g$?x ($x)$." .
-These correspond to the following two formats:
+Defaults to
+.q "<$g>" .
+It is commonly redefined to be
+.q "$?x$x <$g>$|$g$."
+or
+.q "$g$?x ($x)$." ,
+corresponding to the following two formats:
 .(b
 Eric Allman <eric@CS.Berkeley.EDU>
 eric@CS.Berkeley.EDU (Eric Allman)
 .(b
 Eric Allman <eric@CS.Berkeley.EDU>
 eric@CS.Berkeley.EDU (Eric Allman)
@@ -2788,34 +2838,28 @@ eric@CS.Berkeley.EDU (Eric Allman)
 .i Sendmail
 properly quotes names that have special characters
 if the first form is used.
 .i Sendmail
 properly quotes names that have special characters
 if the first form is used.
+.ip $r
+.b "Protocol used to receive the message."
+.ip $s
+.b "Sender's host name."
+.ip $t
+.b "A numeric representation of the current time."
+.ip $u
+.b "The recipient user."
+.ip $v
+.b "The version number of \fIsendmail\fP."
+.ip $w\(dd
+.b "The hostname of this site."
 .pp
 .pp
-Some macros are defined by
-.i sendmail
-for interpolation into argv's for mailers
-or for other contexts.
-These macros are:
-.(b
-a      The origination date in RFC 822 format
-b      The current date in RFC 822 format
-c      The hop count
-d      The date in UNIX (ctime) format
-f      The sender (from) address
-g      The sender address relative to the recipient
-h      The recipient host
-i      The queue id
-k      The UUCP node name (from the uname system call)
-m      The domain part of the \fIgethostname\fP return value
-p      Sendmail's pid
-r      Protocol used to receive the message
-s      Sender's host name
-t      A numeric representation of the current time
-u      The recipient user
-v      The version number of sendmail
-w      The hostname of this site
-x      The full name of the sender
-z      The home directory of the recipient
-_      The validated sender address
-.)b
+The
+.b $w
+macro is set to the root name of this host (but see below for caveats).
+.ip $x
+.b "The full name of the sender."
+.ip $z
+.b "The home directory of the recipient."
+.ip $_
+.b "The validated sender address."
 .pp
 There are three types of dates that can be used.
 The
 .pp
 There are three types of dates that can be used.
 The
@@ -2845,6 +2889,59 @@ macro in UNIX
 (ctime)
 format.
 .pp
 (ctime)
 format.
 .pp
+The macros
+.b $w ,
+.b $j ,
+and
+.b $m
+are set to the identity of this host.
+.i Sendmail
+tries to find the fully qualified name of the host
+if at all possible;
+it does this by calling
+.i gethostname (2)
+to get the current hostname
+and then passing that to
+.i gethostbyname (3)
+which is supposed to return the canonical version of that host name.\**
+.(f
+\**For example, on some systems
+.i gethostname
+might return
+.q foo
+which would be mapped to
+.q foo.bar.com
+by
+.i gethostbyname .
+.)f
+Assuming this is successful,
+.b $j
+is set to the fully qualified name
+and
+.b $m
+is set to the domain part of the name
+(everything after the first dot).
+The
+.b $w
+macro is set to the first word
+(everything before the first dot)
+if you have a level 5 or higher configuration file;
+otherwise, it is set to the same value as
+.b $j .
+If the canonification is not successful,
+it is imperative that the config file set
+.b $j
+to the fully qualified domain name\**.
+.(f
+\**Older versions of sendmail didn't pre-define
+.b $j
+at all, so up until 8.6,
+config files
+.i always
+had to define
+.b $j .
+.)f
+.pp
 The
 .b $f
 macro is the id of the sender
 The
 .b $f
 macro is the id of the sender
@@ -2874,7 +2971,7 @@ The
 macro is set to the full name of the sender.
 This can be determined in several ways.
 It can be passed as flag to
 macro is set to the full name of the sender.
 This can be determined in several ways.
 It can be passed as flag to
-.i sendmail.
+.i sendmail .
 The second choice is the value of the
 .q Full-name:
 line in the header if it exists,
 The second choice is the value of the
 .q Full-name:
 line in the header if it exists,
@@ -2922,10 +3019,7 @@ macro is set to be the version number of
 .i sendmail ;
 this is normally put in timestamps
 and has been proven extremely useful for debugging.
 .i sendmail ;
 this is normally put in timestamps
 and has been proven extremely useful for debugging.
-The
-.b $w
-macro is set to the name of this host
-if it can be determined.
+.pp
 The
 .b $c
 field is set to the
 The
 .b $c
 field is set to the
@@ -2941,8 +3035,10 @@ The
 .b $r
 and
 .b $s
 .b $r
 and
 .b $s
-fields are set to the protocol used to communicate with sendmail
+fields are set to the protocol used to communicate with
+.i sendmail
 and the sending hostname.
 and the sending hostname.
+.pp
 The
 .b $_
 is set to a validated sender host name.
 The
 .b $_
 is set to a validated sender host name.
@@ -3314,7 +3410,9 @@ Since the queue directory is not normally readable by normal users
 scripts as recipients can fail.
 .sh 3 "H \*- define header"
 .pp
 scripts as recipients can fail.
 .sh 3 "H \*- define header"
 .pp
-The format of the header lines that sendmail inserts into the message
+The format of the header lines that
+.i sendmail
+inserts into the message
 are defined by the
 .b H
 line.
 are defined by the
 .b H
 line.
@@ -3408,7 +3506,7 @@ where
 .b :
 is optional and defaults to ``implicit''.
 Depending on how
 .b :
 is optional and defaults to ``implicit''.
 Depending on how
-.b sendmail
+.i sendmail
 is compiled, valid classes are
 .q implicit
 (search through a compiled-in list of alias file types,
 is compiled, valid classes are
 .q implicit
 (search through a compiled-in list of alias file types,
@@ -3530,6 +3628,7 @@ for mailers to run in
 to
 .i n .
 Defaults to 1.
 to
 .i n .
 Defaults to 1.
+The value can also be given as a symbolic group name.
 .ip G
 Allow fuzzy matching on the GECOS field.
 If this flag is set,
 .ip G
 Allow fuzzy matching on the GECOS field.
 If this flag is set,
@@ -3600,7 +3699,9 @@ and then in
 The maximum number of open connections that will be cached at a time.
 The default is one.
 This delays closing the the current connection until
 The maximum number of open connections that will be cached at a time.
 The default is one.
 This delays closing the the current connection until
-either this invocation of sendmail needs to connect to another host
+either this invocation of
+.i sendmail
+needs to connect to another host
 or it terminates.
 Setting it to zero defaults to the old behavior,
 that is, connections are closed immediately.
 or it terminates.
 Setting it to zero defaults to the old behavior,
 that is, connections are closed immediately.
@@ -3611,7 +3712,7 @@ If this time is exceeded,
 the connection is immediately closed.
 This value should be small (on the order of ten minutes).
 Before
 the connection is immediately closed.
 This value should be small (on the order of ten minutes).
 Before
-.b sendmail
+.i sendmail
 uses a cached connection,
 it always sends a NOOP (no operation) command
 to check the connection;
 uses a cached connection,
 it always sends a NOOP (no operation) command
 to check the connection;
@@ -3626,7 +3727,9 @@ If there is an
 .q Errors-To:
 header, send error messages to the addresses listed there.
 They normally go to the envelope sender.
 .q Errors-To:
 header, send error messages to the addresses listed there.
 They normally go to the envelope sender.
-Use of this option causes sendmail to violate RFC 1123.
+Use of this option causes
+.i sendmail
+to violate RFC 1123.
 .ip L\fIn\fP
 Set the default log level to
 .i n .
 .ip L\fIn\fP
 Set the default log level to
 .i n .
@@ -3689,15 +3792,21 @@ noexpn  Disallow EXPN entirely
 needvrfyhelo   Insist on HELO or EHLO command before VRFY
 novrfy Disallow VRFY entirely
 restrictmailq  Restrict mailq command
 needvrfyhelo   Insist on HELO or EHLO command before VRFY
 novrfy Disallow VRFY entirely
 restrictmailq  Restrict mailq command
+restrictqrun   Restrict \-q command line flag
 goaway Disallow essentially all SMTP status queries
 .)b
 The
 .q goaway
 pseudo-flag sets all flags except
 goaway Disallow essentially all SMTP status queries
 .)b
 The
 .q goaway
 pseudo-flag sets all flags except
-.q restrictmailq .
+.q restrictmailq
+and
+.q restrictqrun .
 If mailq is restricted,
 only people in the same group as the queue directory
 can print the queue.
 If mailq is restricted,
 only people in the same group as the queue directory
 can print the queue.
+If queue runs are restricted,
+only root and the owner of the queue directory
+can run the queue.
 .ip P\fIpostmaster\fP
 If set,
 copies of error messages will be sent to the named
 .ip P\fIpostmaster\fP
 If set,
 copies of error messages will be sent to the named
@@ -3748,6 +3857,7 @@ rset      reply to RSET command [5m, none]
 quit   reply to QUIT command [2m, none]
 misc   reply to NOOP and VERB commands [2m, none]
 command        command read [1h, 5m]
 quit   reply to QUIT command [2m, none]
 misc   reply to NOOP and VERB commands [2m, none]
 command        command read [1h, 5m]
+ident  IDENT protocol timeout [30s, none]
 .)b
 All but
 .q command
 .)b
 All but
 .q command
@@ -3788,13 +3898,15 @@ under any circumstances.
 .ip S\fIfile\fP
 Log statistics in the named
 .i file .
 .ip S\fIfile\fP
 Log statistics in the named
 .i file .
-.ip t\fIS,D\fP
-Set the local time zone name to
-.i S
-for standard time and
-.i D
-for daylight time;
-this is only used under version six.
+.ip t\fItzinfo\fP
+Set the local time zone info to
+.i tzinfo
+\*- for example,
+.q PST8PDT .
+Actually, if this is not set,
+the TZ environment variable is cleared (so the system default is used);
+if set but null, the user's TZ variable is used,
+and if set and non-null the TZ variable is set to this value.
 .ip T\fIrtime/wtime\fP
 Set the queue timeout to
 .i rtime .
 .ip T\fIrtime/wtime\fP
 Set the queue timeout to
 .i rtime .
@@ -3815,6 +3927,7 @@ Mailers without the
 flag in the mailer definition
 will run as this user.
 Defaults to 1.
 flag in the mailer definition
 will run as this user.
 Defaults to 1.
+The value can also be given as a symbolic user name.
 .ip U\fIudbspec\fP
 The user database specification.
 .ip v
 .ip U\fIudbspec\fP
 The user database specification.
 .ip v
@@ -3842,6 +3955,29 @@ If specified, the
 acts like a very low priority MX
 on every host.
 This is intended to be used by sites with poor network connectivity.
 acts like a very low priority MX
 on every host.
 This is intended to be used by sites with poor network connectivity.
+.ip w
+If you are the
+.q best
+(that is, lowest preference)
+MX for a given host,
+you should normally detect this situation
+and treat that condition specially,
+by forwarding the mail to a UUCP feed,
+treating it as local,
+or whatever.
+However, in some cases (such as Internet firewalls)
+you may want to try to connect directly to that host
+as though it had no MX records at all.
+Setting this option causes
+.i sendmail
+to try this.
+The downside is that errors in your configuration
+are likely to be diagnosed as
+.q "host unknown"
+or
+.q "message timed out"
+instead of something more meaningful.
+This option is disrecommended.
 .ip x\fILA\fP
 When the system load average exceeds
 .i LA ,
 .ip x\fILA\fP
 When the system load average exceeds
 .i LA ,
@@ -3961,6 +4097,19 @@ These are not intended to be long term supports;
 rather, they describe compatibility features
 which will probably be removed in future releases.
 .pp
 rather, they describe compatibility features
 which will probably be removed in future releases.
 .pp
+.b N.B.:
+these version
+.i levels
+have nothing
+to do with the version
+.i number
+on the files.
+For example,
+as of this writing
+version 8 config files
+(specifically, 8.6)
+used version level 5 configurations.
+.pp
 .q Old
 configuration files are defined as version level one.
 Version level two files make the following changes:
 .q Old
 configuration files are defined as version level one.
 Version level two files make the following changes:
@@ -4007,6 +4156,15 @@ Version level three files
 allow # initiated comments on all lines.
 Exceptions are backslash escaped # marks
 and the $# syntax.
 allow # initiated comments on all lines.
 Exceptions are backslash escaped # marks
 and the $# syntax.
+.pp
+Version level four configurations
+are completely equivalent to level three
+for historical reasons.
+.pp
+Version level five configuration files
+change the default definition of
+.b $w
+to be just the first component of the hostname.
 .sh 3 "K \*- key file declaration"
 .pp
 Special maps can be defined using the line:
 .sh 3 "K \*- key file declaration"
 .pp
 Special maps can be defined using the line:
@@ -4019,7 +4177,8 @@ is the handle by which this map is referenced in the rewriting rules.
 The
 .i mapclass
 is the name of a type of map;
 The
 .i mapclass
 is the name of a type of map;
-these are compiled in to sendmail.
+these are compiled in to
+.i sendmail .
 The
 .i arguments
 are interpreted depending on the class;
 The
 .i arguments
 are interpreted depending on the class;
@@ -4095,21 +4254,33 @@ There are four predefined database lookup classes:
 .q hash ,
 and
 .q nis .
 .q hash ,
 and
 .q nis .
-The first requires that sendmail be compiled with the
+The first requires that
+.i sendmail
+be compiled with the
 .b ndbm
 library;
 the second two require the
 .b db
 library,
 .b ndbm
 library;
 the second two require the
 .b db
 library,
-and the third requires that sendmail be compiled with NIS support.
+and the third requires that
+.i sendmail
+be compiled with NIS support.
 All four accept as arguments the some optional flags
 All four accept as arguments the some optional flags
-and a filename (or a mapname for NIS).
+and a filename
+(or a mapname for NIS;
+the filename is the root of the database path,
+so that
+.q .db
+or some other extension appropriate for the database type
+will be added to get the actual database name).
 Known flags are:
 .ip "\-o"
 Indicates that this map is optional \*- that is,
 if it cannot be opened,
 no error is produced,
 Known flags are:
 .ip "\-o"
 Indicates that this map is optional \*- that is,
 if it cannot be opened,
 no error is produced,
-and sendmail will behave as if the map existed but was empty.
+and
+.i sendmail
+will behave as if the map existed but was empty.
 .ip "\-N"
 Normally when maps are written,
 the trailing null byte is not included as part of the key.
 .ip "\-N"
 Normally when maps are written,
 the trailing null byte is not included as part of the key.
@@ -4141,14 +4312,14 @@ are specified,
 will never try any matches at all \(em
 that is, everything will appear to fail.
 .ip "\-a\fIx\fP"
 will never try any matches at all \(em
 that is, everything will appear to fail.
 .ip "\-a\fIx\fP"
-Append the character
+Append the string
 .i x
 on successful matches.
 For example, the default
 .i host
 map appends a dot on successful matches.
 .ip "\-f"
 .i x
 on successful matches.
 For example, the default
 .i host
 map appends a dot on successful matches.
 .ip "\-f"
-Fold upper to lower case before looking up the key.
+Do not fold upper to lower case before looking up the key.
 .ip "\-m"
 Match only (without replacing the value).
 If you only care about the existence of a key and not the value
 .ip "\-m"
 Match only (without replacing the value).
 If you only care about the existence of a key and not the value
@@ -4171,13 +4342,24 @@ the two
 .i db -based
 maps append
 .q \&.db .
 .i db -based
 maps append
 .q \&.db .
+For example, the map specification
+.(b
+Kuucp dbm \-o \-N /usr/lib/uucpmap
+.)b
+specifies an optional map named
+.q uucp
+of class
+.q dbm ;
+it always has null bytes at the end of every string,
+and the data is located in
+/usr/lib/uucpmap.{dir,pag}.
 .pp
 The program
 .i makemap (8)
 can be used to build any of the three database-oriented maps.
 It takes the following flags:
 .ip \-f
 .pp
 The program
 .i makemap (8)
 can be used to build any of the three database-oriented maps.
 It takes the following flags:
 .ip \-f
-Do not fold upper to lower case in the map.
+Fold upper to lower case in the map.
 .ip \-N
 Include null bytes in keys.
 .ip \-o
 .ip \-N
 Include null bytes in keys.
 .ip \-o
@@ -4187,6 +4369,21 @@ Allow replacement of existing keys;
 normally, re-inserting an existing key is an error.
 .ip \-v
 Print what is happening.
 normally, re-inserting an existing key is an error.
 .ip \-v
 Print what is happening.
+.lp
+The
+.i sendmail
+daemon does not have to be restarted to read the new maps
+as long as you change them in place;
+file locking is used so that the maps won't be read
+while they are being updated.\**
+.(f
+\**That is, don't create new maps and then use
+.i mv (1)
+to move them into place.
+I consider this a shortfall (a.k.a. bug) in
+.i sendmail
+which should be fixed in a future release.
+.)f
 .pp
 There are also two builtin maps that are,
 strictly speaking,
 .pp
 There are also two builtin maps that are,
 strictly speaking,
@@ -4618,9 +4815,11 @@ a single word address
 is probably going to print out several pages worth of information.
 .pp
 You should be warned that internally,
 is probably going to print out several pages worth of information.
 .pp
 You should be warned that internally,
-.b sendmail
+.i sendmail
 applies ruleset 3 to all addresses.
 applies ruleset 3 to all addresses.
-In this version of sendmail, you will have to do that manually.
+In this version of
+.i sendmail ,
+you will have to do that manually.
 For example, older versions allowed you to use
 .(b
 0 bruce@broadcast.sony.com
 For example, older versions allowed you to use
 .(b
 0 bruce@broadcast.sony.com
@@ -4659,7 +4858,7 @@ or
 .b \-r
 flag respectively.
 These flags are only passed if they were passed to
 .b \-r
 flag respectively.
 These flags are only passed if they were passed to
-.i sendmail,
+.i sendmail ,
 so that mailers that give errors under some circumstances
 can be placated.
 If the mailer is not picky
 so that mailers that give errors under some circumstances
 can be placated.
 If the mailer is not picky
@@ -4782,6 +4981,15 @@ These sets can also be used
 to do special purpose output rewriting
 in cooperation with ruleset four.
 .pp
 to do special purpose output rewriting
 in cooperation with ruleset four.
 .pp
+The S and R fields
+can be specified as two numbers separated by a slash
+(e.g.,
+.q "S=10/11" ),
+meaning that all envelope addresses will be processed through ruleset 10
+and all header addresses will be processed through ruleset 11.
+With only one number specified,
+both envelope and header rewriting sets are set to the indicated ruleset.
+.pp
 The E field defines the string to use
 as an end-of-line indication.
 A string containing only newline is the default.
 The E field defines the string to use
 as an end-of-line indication.
 A string containing only newline is the default.
@@ -4857,7 +5065,9 @@ and recipient addresses by ruleset twenty-one.
 There is a 100,000 byte limit on messages passed through this mailer.
 .sh 2 "The User Database"
 .pp
 There is a 100,000 byte limit on messages passed through this mailer.
 .sh 2 "The User Database"
 .pp
-If you have a version of sendmail with the user database package
+If you have a version of
+.i sendmail
+with the user database package
 compiled in,
 the handling of sender and recipient addresses
 is modified.
 compiled in,
 the handling of sender and recipient addresses
 is modified.
@@ -4921,7 +5131,8 @@ In the University this is often just the name of their graduate advisor.
 A pointer to a file from which plan information can be gathered.
 .pp
 As of this writing,
 A pointer to a file from which plan information can be gathered.
 .pp
 As of this writing,
-only a few of these fields are actually being used by sendmail:
+only a few of these fields are actually being used by
+.i sendmail :
 .i maildrop
 and
 .i mailname .
 .i maildrop
 and
 .i mailname .
@@ -4976,6 +5187,38 @@ The effect is that anyone known in the database
 gets their outgoing mail stamped as
 .q user@CS.Berkeley.EDU ,
 but people not listed in the database use the local hostname.
 gets their outgoing mail stamped as
 .q user@CS.Berkeley.EDU ,
 but people not listed in the database use the local hostname.
+.sh 3 "Creating the database\**"
+.(f
+\**These instructions are known to be incomplete.
+A future version of the user database is planned
+including things such as finger service \*- and good documentation.
+.)f
+.pp
+The user database is built from a text file
+using the
+.i makemap
+utility
+(in the distribution in the makemap subdirectory).
+The text file is a series of lines corresponding to userdb records;
+each line has a key and a value separated by white space.
+The key is always in the format described above \*-
+for example:
+.(b
+eric:maildrop
+.)b
+This file is normally installed in a system directory;
+for example, it might be called
+.i /etc/userdb .
+To make the database version of the map, run the program:
+.(b
+makemap btree /etc/userdb.db < /etc/userdb
+.)b
+Then create a config file that uses this.
+For example, using the V8 M4 configuration, include the
+following line in your .mc file:
+.(b
+define(\`confUSERDB_SPEC\', /etc/userdb.db)
+.)b
 .sh 1 "OTHER CONFIGURATION"
 .pp
 There are some configuration changes that can be made by
 .sh 1 "OTHER CONFIGURATION"
 .pp
 There are some configuration changes that can be made by
@@ -4998,9 +5241,11 @@ a much less efficient method of alias lookup is used.
 If set, use the new database package from Berkeley (from 4.4BSD).
 This package is substantially faster than DBM or NDBM.
 If NEWDB and NDBM are both set,
 If set, use the new database package from Berkeley (from 4.4BSD).
 This package is substantially faster than DBM or NDBM.
 If NEWDB and NDBM are both set,
-sendmail will read DBM files,
+.i sendmail
+will read DBM files,
 but will create and use NEWDB files.
 but will create and use NEWDB files.
-.ip YPCOMPAT
+.ip NIS
+Include support for NIS.
 If set together with
 .i both
 NEWDB and NDBM,
 If set together with
 .i both
 NEWDB and NDBM,
@@ -5011,9 +5256,6 @@ exists and is readable.
 This is intended for compatibility with Sun Microsystems'
 .i mkalias
 program used on YP masters.
 This is intended for compatibility with Sun Microsystems'
 .i mkalias
 program used on YP masters.
-.ip _AIX3
-Compile for IBM AIX 3.x.
-This has only been tested on 3.2.3.
 .ip SYSTEM5
 Set all of the compilation parameters appropriate for System V.
 .ip LOCKF
 .ip SYSTEM5
 Set all of the compilation parameters appropriate for System V.
 .ip LOCKF
@@ -5062,8 +5304,6 @@ You should only set one of HASSTATFS or HASUSTAT;
 the first is preferred.
 .ip _PATH_SENDMAILCF
 The pathname of the sendmail.cf file.
 the first is preferred.
 .ip _PATH_SENDMAILCF
 The pathname of the sendmail.cf file.
-.ip _PATH_SENDMAILFC
-The pathname of the sendmail.fc file.
 .ip _PATH_SENDMAILPID
 The pathname of the sendmail.pid file.
 .ip LA_TYPE
 .ip _PATH_SENDMAILPID
 The pathname of the sendmail.pid file.
 .ip LA_TYPE
@@ -5085,6 +5325,10 @@ is:
 The kernel stores the load average in the kernel as an array of long integers.
 The actual values are scaled by a factor FSCALE
 (default 256).
 The kernel stores the load average in the kernel as an array of long integers.
 The actual values are scaled by a factor FSCALE
 (default 256).
+.ip LA_SHORT
+The kernel stores the load average in the kernel as an array of short integers.
+The actual values are scaled by a factor FSCALE
+(default 256).
 .ip LA_FLOAT
 The kernel stores the load average in the kernel as an array of
 double precision floats.
 .ip LA_FLOAT
 The kernel stores the load average in the kernel as an array of
 double precision floats.
@@ -5097,7 +5341,8 @@ Always return zero as the load average.
 This is the fallback case.
 .lp
 If type
 This is the fallback case.
 .lp
 If type
-.sm LA_INT
+.sm LA_INT ,
+.sm LA_SHORT ,
 or
 .sm LA_FLOAT
 is specified,
 or
 .sm LA_FLOAT
 is specified,
@@ -5111,6 +5356,14 @@ usually
 .q _avenrun
 or
 .q avenrun ).
 .q _avenrun
 or
 .q avenrun ).
+.pp
+There are also several compilation flags to indicate the environment
+such as
+.q _AIX3
+and
+.q _SCO_unix_ .
+See the READ_ME
+file for the latest scoop on these flags.
 .sh 2 "Parameters in src/conf.h"
 .pp
 Parameters and compilation options
 .sh 2 "Parameters in src/conf.h"
 .pp
 Parameters and compilation options
@@ -5171,10 +5424,6 @@ The maximum number of entries that will be processed
 in a single queue run.
 .ip "MAXMXHOSTS [20]"
 The maximum number of MX records we will accept for any single host.
 in a single queue run.
 .ip "MAXMXHOSTS [20]"
 The maximum number of MX records we will accept for any single host.
-.ip "MAXIPADDR [16]"
-The maximum number of numeric IP addresses we will accept
-for this host.
-This does not limit the number the number of addresses for other hosts.
 .lp
 A number of other compilation options exist.
 These specify whether or not specific code should be compiled in.
 .lp
 A number of other compilation options exist.
 These specify whether or not specific code should be compiled in.
@@ -5193,7 +5442,7 @@ have turned it off and thus crippled debuggers.
 If set,
 support for Internet protocol networking is compiled in.
 Previous versions of
 If set,
 support for Internet protocol networking is compiled in.
 Previous versions of
-.b sendmail
+.i sendmail
 referred to this as
 .sm DAEMON ;
 this old usage is now incorrect.
 referred to this as
 .sm DAEMON ;
 this old usage is now incorrect.
@@ -5341,7 +5590,7 @@ specifies a sender.
 The order of these fields in the
 .i HdrInfo
 table specifies
 The order of these fields in the
 .i HdrInfo
 table specifies
-.i sendmail's
+.i sendmail 's
 preference
 for which field to return error messages to.
 .nr ii 5n
 preference
 for which field to return error messages to.
 .nr ii 5n
@@ -5681,7 +5930,7 @@ We now recommend that you create a new keyed map instead.
 .pp
 The following summarizes changes
 since the last commonly available version of
 .pp
 The following summarizes changes
 since the last commonly available version of
-.b sendmail
+.i sendmail
 (5.67):
 .sh 2 "Connection Caching"
 .pp
 (5.67):
 .sh 2 "Connection Caching"
 .pp
@@ -5754,7 +6003,7 @@ and limited support for RFC 1426 (BODY).
 .sh 2 "Eight-Bit Clean"
 .pp
 Previous versions of
 .sh 2 "Eight-Bit Clean"
 .pp
 Previous versions of
-.b sendmail
+.i sendmail
 used the 0200 bit for quoting.
 This version avoids that use.
 However, for compatibility with RFC 822,
 used the 0200 bit for quoting.
 This version avoids that use.
 However, for compatibility with RFC 822,
@@ -5776,14 +6025,15 @@ had a number of annoying
 .q features
 which have been removed in this release.
 In particular,
 .q features
 which have been removed in this release.
 In particular,
-these more tightly bind (pun intended) the name server to sendmail,
+these more tightly bind (pun intended) the name server to
+.i sendmail ,
 so that the name server resolution rules are incorporated directly into
 .b sendmail .
 .sh 2 "Keyed Files"
 .pp
 Generalized keyed files is an idea taken directly from
 .sm IDA
 so that the name server resolution rules are incorporated directly into
 .b sendmail .
 .sh 2 "Keyed Files"
 .pp
 Generalized keyed files is an idea taken directly from
 .sm IDA
-.b sendmail
+.i sendmail
 (albeit with a completely different implementation).
 They can be useful on large sites.
 .pp
 (albeit with a completely different implementation).
 They can be useful on large sites.
 .pp
@@ -5925,7 +6175,8 @@ Connection cache lifetime.
 Enable Errors-To: header.
 These headers violate RFC 1123;
 this option is included to provide back compatibility
 Enable Errors-To: header.
 These headers violate RFC 1123;
 this option is included to provide back compatibility
-with old versions of sendmail.
+with old versions of
+.i sendmail .
 .ip O
 Set incoming SMTP daemon options, such as an alternate SMTP port.
 .ip p
 .ip O
 Set incoming SMTP daemon options, such as an alternate SMTP port.
 .ip p
@@ -5938,6 +6189,9 @@ User database spec.
 Fallback
 .q MX
 host.
 Fallback
 .q MX
 host.
+.ip w
+.q "Best MX"
+handling technique.
 .ip 7
 Do not run eight bit clean.
 .sh 2 "Extended Options"
 .ip 7
 Do not run eight bit clean.
 .sh 2 "Extended Options"
@@ -6036,9 +6290,10 @@ Previous versions of
 treated VRFY and EXPN the same.
 In this version,
 VRFY doesn't expand aliases or follow .forward files.
 treated VRFY and EXPN the same.
 In this version,
 VRFY doesn't expand aliases or follow .forward files.
+EXPN still does.
 .pp
 As an optimization, if you run with your default delivery mode being
 .pp
 As an optimization, if you run with your default delivery mode being
-queue-only,
+queue-only or deliver-in-background,
 the RCPT command will also not chase aliases and .forward files.
 It will chase them when it processes the queue.
 .sh 2 "[IPC] Mailers Allow Multiple Hosts"
 the RCPT command will also not chase aliases and .forward files.
 It will chase them when it processes the queue.
 .sh 2 "[IPC] Mailers Allow Multiple Hosts"
@@ -6049,7 +6304,9 @@ as its
 .q Path ,
 the $@ part (host name)
 can be a colon-separated list of hosts instead of a single hostname.
 .q Path ,
 the $@ part (host name)
 can be a colon-separated list of hosts instead of a single hostname.
-This asks sendmail to search the list for the first entry that is available
+This asks
+.i sendmail
+to search the list for the first entry that is available
 exactly as though it were an MX record.
 The intent is to route internal traffic through internal networks
 without publishing an MX record to the net.
 exactly as though it were an MX record.
 The intent is to route internal traffic through internal networks
 without publishing an MX record to the net.
@@ -6116,16 +6373,20 @@ The following people made notable contributions:
 Keith Bostic, CSRG, University of California, Berkeley
 Michael J. Corrigan, University of California, San Diego
 Bryan Costales, International Computer Science Institute
 Keith Bostic, CSRG, University of California, Berkeley
 Michael J. Corrigan, University of California, San Diego
 Bryan Costales, International Computer Science Institute
-P{r (Pell) Emanuelsson
+Pa\*:r (Pell) Emanuelsson
 Craig Everhart, Transarc Corporation
 Tom Ivar Helbekkmo, Norwegian School of Economics
 Allan E. Johannesen, WPI
 Craig Everhart, Transarc Corporation
 Tom Ivar Helbekkmo, Norwegian School of Economics
 Allan E. Johannesen, WPI
-Takahiro Kanbe, FujiXerox
+Jonathan Kamens, OpenVision Technologies, Inc.
+Takahiro Kanbe, Fuji Xerox Information Systems Co., Ltd.
 Brian Kantor, University of California, San Diego
 Brian Kantor, University of California, San Diego
+Murray S. Kucherawy, HookUp Communication Corp.
 Bruce Lilly, Sony U.S.
 Bruce Lilly, Sony U.S.
+Karl London
 Nakamura Motonori, Kyoto University
 John Gardiner Myers, Carnegie Mellon University
 Neil Rickert, Northern Illinois University
 Nakamura Motonori, Kyoto University
 John Gardiner Myers, Carnegie Mellon University
 Neil Rickert, Northern Illinois University
+Eric Schnoebelen, Convex Computer Corp.
 Eric Wassenaar, National Institute for Nuclear and High Energy Physics, Amsterdam
 Christophe Wolfhugel, Herve Schauer Consultants (Paris)
 .)l
 Eric Wassenaar, National Institute for Nuclear and High Energy Physics, Amsterdam
 Christophe Wolfhugel, Herve Schauer Consultants (Paris)
 .)l
@@ -6153,7 +6414,6 @@ t Run in test mode
 v      Just verify addresses, don't collect or deliver
 i      Initialize the alias database
 p      Print the mail queue
 v      Just verify addresses, don't collect or deliver
 i      Initialize the alias database
 p      Print the mail queue
-z      Freeze the configuration file
 .)b
 .ip \-B\fItype\fP
 Indicate body type.
 .)b
 .ip \-B\fItype\fP
 Indicate body type.
@@ -6214,7 +6474,9 @@ this is equivalent to using \-p.)
 .ip \-q\fItime\fP
 Try to process the queued up mail.
 If the time is given,
 .ip \-q\fItime\fP
 Try to process the queued up mail.
 If the time is given,
-a sendmail will run through the queue at the specified interval
+a
+.i sendmail
+will run through the queue at the specified interval
 to deliver queued mail;
 otherwise, it only runs once.
 .ip \-q\fIXstring\fP
 to deliver queued mail;
 otherwise, it only runs once.
 .ip \-q\fIXstring\fP
@@ -6247,7 +6509,9 @@ line will be deleted before sending.
 Any addresses in the argument vector will be deleted
 from the send list.
 .ip "\-X \fIlogfile\fP"
 Any addresses in the argument vector will be deleted
 from the send list.
 .ip "\-X \fIlogfile\fP"
-Log all traffic in and out of sendmail in the indicated
+Log all traffic in and out of
+.i sendmail
+in the indicated
 .i logfile
 for debugging mailer problems.
 This produces a lot of data very quickly and should be used sparingly.
 .i logfile
 for debugging mailer problems.
 This produces a lot of data very quickly and should be used sparingly.
@@ -6316,7 +6580,7 @@ due to a race condition.
 It should exist for no more than a few milliseconds
 at any given time.
 [This is only used on old versions of
 It should exist for no more than a few milliseconds
 at any given time.
 [This is only used on old versions of
-sendmail;
+.i sendmail ;
 it is not used 
 on newer versions.]
 .ip q
 it is not used 
 on newer versions.]
 .ip q
@@ -6476,7 +6740,7 @@ check there to find the actual pathnames.
 .ip "/usr/\*(SD/sendmail"
 The binary of
 .i sendmail .
 .ip "/usr/\*(SD/sendmail"
 The binary of
 .i sendmail .
-.ip /usr/bin/newaliases
+.ip /usr/\*(SB/newaliases
 A link to /usr/\*(SD/sendmail;
 causes the alias database to be rebuilt.
 Running this program is completely equivalent to giving
 A link to /usr/\*(SD/sendmail;
 causes the alias database to be rebuilt.
 Running this program is completely equivalent to giving
@@ -6484,7 +6748,7 @@ Running this program is completely equivalent to giving
 the
 .b \-bi
 flag.
 the
 .b \-bi
 flag.
-.ip /usr/bin/mailq
+.ip /usr/\*(SB/mailq
 Prints a listing of the mail queue.
 This program is equivalent to using the
 .b \-bp
 Prints a listing of the mail queue.
 This program is equivalent to using the
 .b \-bp
@@ -6493,9 +6757,6 @@ flag to
 .ip /etc/sendmail.cf
 The configuration file,
 in textual form.
 .ip /etc/sendmail.cf
 The configuration file,
 in textual form.
-.ip /etc/sendmail.fc
-The configuration file
-represented as a memory image.
 .ip /usr/lib/sendmail.hf
 The SMTP help file.
 .ip /etc/sendmail.st
 .ip /usr/lib/sendmail.hf
 The SMTP help file.
 .ip /etc/sendmail.st
@@ -6542,10 +6803,15 @@ A transcript of the current session.
 .\"Eric Allman
 .\"Britton-Lee, Inc.
 .\".sp
 .\"Eric Allman
 .\"Britton-Lee, Inc.
 .\".sp
-.\"Version 8.2
+.\"Version 8.26
 .\".ce 0
 .\".ce 0
-.pn 2
-.bp
+.bp 2
+.rs
+.sp |4i
+.ce 2
+This page intentionally left blank;
+replace it with a blank sheet for double-sided output.
+.bp 3
 .ce
 .sz 12
 TABLE OF CONTENTS
 .ce
 .sz 12
 TABLE OF CONTENTS
index 45a80cd..711f11a 100644 (file)
@@ -5,7 +5,7 @@
 %%+ font Times-Italic
 %%+ font Symbol
 %%DocumentSuppliedResources: procset grops 1.08 0
 %%+ font Times-Italic
 %%+ font Symbol
 %%DocumentSuppliedResources: procset grops 1.08 0
-%%Pages: 61
+%%Pages: 64
 %%PageOrder: Ascend
 %%Orientation: Portrait
 %%EndComments
 %%PageOrder: Ascend
 %%Orientation: Portrait
 %%EndComments
@@ -204,8 +204,8 @@ BP
 /Times-Roman@0 SF(Eric Allman)263.42 196.2 Q(Uni)219.725 208.2 Q -.15(ve)-.25 G
 (rsity of California, Berk).15 E(ele)-.1 E(y)-.15 E(Mammoth Project)251.75
 220.2 Q(eric@CS.Berk)239.41 232.2 Q(ele)-.1 E -.65(y.)-.15 G(EDU).65 E -1.11
 /Times-Roman@0 SF(Eric Allman)263.42 196.2 Q(Uni)219.725 208.2 Q -.15(ve)-.25 G
 (rsity of California, Berk).15 E(ele)-.1 E(y)-.15 E(Mammoth Project)251.75
 220.2 Q(eric@CS.Berk)239.41 232.2 Q(ele)-.1 E -.65(y.)-.15 G(EDU).65 E -1.11
-(Ve)265.225 256.2 S(rsion 8.2)1.11 E -.15(Fo)236.965 280.2 S 2.5(rS).15 G
-(endmail V)258.765 280.2 Q(ersion 8.2)-1.11 E/F3 10/Times-Italic@0 SF(Sendmail)
+(Ve)262.725 256.2 S(rsion 8.26)1.11 E -.15(Fo)236.965 280.2 S 2.5(rS).15 G
+(endmail V)258.765 280.2 Q(ersion 8.6)-1.11 E/F3 10/Times-Italic@0 SF(Sendmail)
 97 324.6 Q F2 .699(implements a general purpose internetw)3.199 F .698
 (ork mail routing f)-.1 F .698(acility under the UNIX* operat-)-.1 F .378
 (ing system.)72 336.6 R .378(It is not tied to an)5.378 F 2.878(yo)-.15 G .378
 97 324.6 Q F2 .699(implements a general purpose internetw)3.199 F .698
 (ork mail routing f)-.1 F .698(acility under the UNIX* operat-)-.1 F .378
 (ing system.)72 336.6 R .378(It is not tied to an)5.378 F 2.878(yo)-.15 G .378
@@ -253,61 +253,68 @@ just the operation under unusual circumstances.)72 505.2 R 1.972
 (rding the com-).05 F .886(mand line ar)72 581.4 R 3.386(guments. Section)-.18
 F<8c76>3.386 E 3.386(ec)-.15 G .885
 (ontains the nitty-gritty information about the con\214guration \214le.)221.92
 (rding the com-).05 F .886(mand line ar)72 581.4 R 3.386(guments. Section)-.18
 F<8c76>3.386 E 3.386(ec)-.15 G .885
 (ontains the nitty-gritty information about the con\214guration \214le.)221.92
-581.4 R(This)5.885 E .501
-(section is for masochists and people who must write their o)72 593.4 R .501
-(wn con\214guration \214le.)-.25 F .501(Section six gi)5.501 F -.15(ve)-.25 G
-3.002(sab).15 G(rief)490.12 593.4 Q .355(description of dif)72 605.4 R .355
-(ferences in this v)-.25 F .355(ersion of)-.15 F F3(sendmail)2.855 E F2 5.355
-(.T)C .355(he appendix)298.85 605.4 R .355(es gi)-.15 F .654 -.15(ve a b)-.25 H
-.354(rief b).15 F .354(ut detailed e)-.2 F(xplanation)-.15 E
-(of a number of features not described in the rest of the paper)72 617.4 Q(.)
--.55 E .32 LW 76 680.4 72 680.4 DL 80 680.4 76 680.4 DL 84 680.4 80 680.4 DL 88
-680.4 84 680.4 DL 92 680.4 88 680.4 DL 96 680.4 92 680.4 DL 100 680.4 96 680.4
-DL 104 680.4 100 680.4 DL 108 680.4 104 680.4 DL 112 680.4 108 680.4 DL 116
-680.4 112 680.4 DL 120 680.4 116 680.4 DL 124 680.4 120 680.4 DL 128 680.4 124
-680.4 DL 132 680.4 128 680.4 DL 136 680.4 132 680.4 DL 140 680.4 136 680.4 DL
-144 680.4 140 680.4 DL 148 680.4 144 680.4 DL 152 680.4 148 680.4 DL 156 680.4
-152 680.4 DL 160 680.4 156 680.4 DL 164 680.4 160 680.4 DL 168 680.4 164 680.4
-DL 172 680.4 168 680.4 DL 176 680.4 172 680.4 DL 180 680.4 176 680.4 DL 184
-680.4 180 680.4 DL 188 680.4 184 680.4 DL 192 680.4 188 680.4 DL 196 680.4 192
-680.4 DL 200 680.4 196 680.4 DL 204 680.4 200 680.4 DL 208 680.4 204 680.4 DL
-212 680.4 208 680.4 DL 216 680.4 212 680.4 DL/F4 8/Times-Roman@0 SF
-(*UNIX is a trademark of Bell Laboratories.)93.6 692.4 Q/F5 10/Times-Bold@0 SF
-(Sendmail Installation and Operation Guide)72 756 Q(SMM:08-1)457.9 756 Q EP
-%%Page: 5 2
+581.4 R(This)5.885 E .004
+(section is for masochists and people who must write their o)72 593.4 R .005
+(wn con\214guration \214le.)-.25 F .005(Section six describes con-)5.005 F .886
+(\214guration that can be done at compile time.)72 605.4 R .886(Section se)
+5.886 F -.15(ve)-.25 G 3.386(ng).15 G -2.15 -.25(iv e)322.1 605.4 T 3.386(sab)
+.25 G .886(rief description of dif)354.022 605.4 R .885(ferences in this)-.25 F
+-.15(ve)72 617.4 S 1.619(rsion of).15 F F3(sendmail)4.119 E F2 6.619(.T)C 1.619
+(he appendix)169.197 617.4 R 1.619(es gi)-.15 F 1.919 -.15(ve a b)-.25 H 1.619
+(rief b).15 F 1.619(ut detailed e)-.2 F 1.62
+(xplanation of a number of features not)-.15 F
+(described in the rest of the paper)72 629.4 Q(.)-.55 E .32 LW 76 680.4 72
+680.4 DL 80 680.4 76 680.4 DL 84 680.4 80 680.4 DL 88 680.4 84 680.4 DL 92
+680.4 88 680.4 DL 96 680.4 92 680.4 DL 100 680.4 96 680.4 DL 104 680.4 100
+680.4 DL 108 680.4 104 680.4 DL 112 680.4 108 680.4 DL 116 680.4 112 680.4 DL
+120 680.4 116 680.4 DL 124 680.4 120 680.4 DL 128 680.4 124 680.4 DL 132 680.4
+128 680.4 DL 136 680.4 132 680.4 DL 140 680.4 136 680.4 DL 144 680.4 140 680.4
+DL 148 680.4 144 680.4 DL 152 680.4 148 680.4 DL 156 680.4 152 680.4 DL 160
+680.4 156 680.4 DL 164 680.4 160 680.4 DL 168 680.4 164 680.4 DL 172 680.4 168
+680.4 DL 176 680.4 172 680.4 DL 180 680.4 176 680.4 DL 184 680.4 180 680.4 DL
+188 680.4 184 680.4 DL 192 680.4 188 680.4 DL 196 680.4 192 680.4 DL 200 680.4
+196 680.4 DL 204 680.4 200 680.4 DL 208 680.4 204 680.4 DL 212 680.4 208 680.4
+DL 216 680.4 212 680.4 DL/F4 8/Times-Roman@0 SF
+(*UNIX is a trademark of Unix Systems Laboratories.)93.6 692.4 Q/F5 10
+/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 756 Q(SMM:08-1)
+457.9 756 Q EP
+%%Page: 7 2
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-5)457.9 60 Q 2.5(1. B)72 96 R(ASIC INST)-.3 E(ALLA)-.9 E(TION)-.95 E/F1
-10/Times-Roman@0 SF .233(There are tw)112 112.2 R 2.733(ob)-.1 G .233
-(asic steps to installing sendmail.)175.629 112.2 R .233(The hard part is to b)
-5.233 F .234(uild the con\214guration table.)-.2 F 1.186(This is a \214le that\
- sendmail reads when it starts up that describes the mailers it kno)87 124.2 R
-1.185(ws about, ho)-.25 F 3.685(wt)-.25 G(o)499 124.2 Q .714
-(parse addresses, ho)87 136.2 R 3.214(wt)-.25 G 3.214(or)178.312 136.2 S -.25
-(ew)189.856 136.2 S .715(rite the message header).25 F 3.215(,a)-.4 G .715
-(nd the settings of v)306.745 136.2 R .715(arious options.)-.25 F .715
-(Although the)5.715 F .852(con\214guration table is quite comple)87 148.2 R
-.852(x, a con\214guration can usually be b)-.15 F .852(uilt by adjusting an e)
--.2 F .852(xisting of)-.15 F(f-)-.25 E 1.077(the-shelf con\214guration.)87
-160.2 R 1.078(The second part is actually doing the installation, i.e., creati\
-ng the necessary)6.077 F(\214les, etc.)87 172.2 Q .192(The remainder of this s\
-ection will describe the installation of sendmail assuming you can use one)112
-188.4 R 1.431(of the e)87 200.4 R 1.432(xisting con\214gurations and that the \
-standard installation parameters are acceptable.)-.15 F 1.432(All path-)6.432 F
-8.62(names and e)87 212.4 R 8.62(xamples are gi)-.15 F -.15(ve)-.25 G 11.12(nf)
-.15 G 8.62(rom the root of the)257.57 212.4 R/F2 10/Times-Italic@0 SF(sendmail)
-378.16 212.4 Q F1 8.62(subtree, normally)425.39 212.4 R F2(/usr/sr)87 224.4 Q
-(c/usr)-.37 E(.sbin/sendmail)-1.11 E F1(on 4.4BSD.)2.5 E .511
-(If you are loading this of)112 240.6 R 3.011(ft)-.25 G .511
-(he tape, continue with the ne)222.576 240.6 R .511(xt session.)-.15 F .511
-(If you ha)5.511 F .811 -.15(ve a r)-.2 H .512(unning binary).15 F
+(SMM:08-7)457.9 60 Q 2.5(1. B)72 96 R(ASIC INST)-.3 E(ALLA)-.9 E(TION)-.95 E/F1
+10/Times-Roman@0 SF .234(There are tw)112 112.2 R 2.733(ob)-.1 G .233
+(asic steps to installing)175.631 112.2 R/F2 10/Times-Italic@0 SF(sendmail)
+2.733 E F1 5.233(.T)C .233(he hard part is to b)317.076 112.2 R .233
+(uild the con\214guration table.)-.2 F 1.185(This is a \214le that)87 124.2 R
+F2(sendmail)3.686 E F1 1.186
+(reads when it starts up that describes the mailers it kno)3.686 F 1.186
+(ws about, ho)-.25 F 3.686(wt)-.25 G(o)499 124.2 Q .715(parse addresses, ho)87
+136.2 R 3.215(wt)-.25 G 3.215(or)178.315 136.2 S -.25(ew)189.86 136.2 S .715
+(rite the message header).25 F 3.215(,a)-.4 G .715(nd the settings of v)306.75
+136.2 R .714(arious options.)-.25 F .714(Although the)5.714 F .852
+(con\214guration table is quite comple)87 148.2 R .852
+(x, a con\214guration can usually be b)-.15 F .852(uilt by adjusting an e)-.2 F
+.852(xisting of)-.15 F(f-)-.25 E 1.078(the-shelf con\214guration.)87 160.2 R
+1.078(The second part is actually doing the installation, i.e., creating the n\
+ecessary)6.078 F(\214les, etc.)87 172.2 Q .192
+(The remainder of this section will describe the installation of)112 188.4 R F2
+(sendmail)2.692 E F1 .192(assuming you can use one)2.692 F 1.432(of the e)87
+200.4 R 1.432(xisting con\214gurations and that the standard installation para\
+meters are acceptable.)-.15 F 1.431(All path-)6.431 F 8.62(names and e)87 212.4
+R 8.62(xamples are gi)-.15 F -.15(ve)-.25 G 11.12(nf).15 G 8.62
+(rom the root of the)257.57 212.4 R F2(sendmail)378.16 212.4 Q F1 8.62
+(subtree, normally)425.39 212.4 R F2(/usr/sr)87 224.4 Q(c/usr)-.37 E
+(.sbin/sendmail)-1.11 E F1(on 4.4BSD.)2.5 E .511(If you are loading this of)112
+240.6 R 3.011(ft)-.25 G .511(he tape, continue with the ne)222.578 240.6 R .511
+(xt session.)-.15 F .511(If you ha)5.511 F .811 -.15(ve a r)-.2 H .511
+(unning binary).15 F
 (already on your system, you should probably skip to section 1.2.)87 252.6 Q F0
 (already on your system, you should probably skip to section 1.2.)87 252.6 Q F0
-2.5(1.1. Compiling)87 276.6 R(Sendmail)2.5 E F1 .435
-(All sendmail source is in the)127 292.8 R F2(sr)2.935 E(c)-.37 E F1
-(subdirectory)2.934 E 5.434(.I)-.65 G 2.934(fy)321.658 292.8 S .434
-(ou are running on a 4.4BSD system, com-)332.922 292.8 R
+2.5(1.1. Compiling)87 276.6 R(Sendmail)2.5 E F1(All)127 292.8 Q F2(sendmail)
+2.934 E F1 .434(source is in the)2.934 F F2(sr)2.934 E(c)-.37 E F1
+(subdirectory)2.934 E 5.434(.I)-.65 G 2.934(fy)321.652 292.8 S .435
+(ou are running on a 4.4BSD system, com-)332.916 292.8 R
 (pile by typing \231mak)102 304.8 Q 2.5(e\232. On)-.1 F
 (other systems, you may ha)2.5 E .3 -.15(ve t)-.2 H 2.5(om).15 G(ak)348.75
 304.8 Q 2.5(es)-.1 G(ome other adjustments.)368.92 304.8 Q F0 2.5(1.1.1. Old)
 (pile by typing \231mak)102 304.8 Q 2.5(e\232. On)-.1 F
 (other systems, you may ha)2.5 E .3 -.15(ve t)-.2 H 2.5(om).15 G(ak)348.75
 304.8 Q 2.5(es)-.1 G(ome other adjustments.)368.92 304.8 Q F0 2.5(1.1.1. Old)
@@ -322,61 +329,61 @@ R -.15(ve)-.25 G .885(ral ne).15 F 3.385(ws)-.25 G(yntax)280.025 377.4 Q .885
 413.4 R(\215ags)2.5 E F2(Sendmail)142 429.6 Q F1(supports tw)2.5 E 2.5(od)-.1 G
 (if)240.51 429.6 Q(ferent formats for the)-.25 E F2(aliases)2.5 E F1 2.5
 (database. These)2.5 F(formats are:)2.5 E 39.5(NDBM The)117 445.8 R -.74(``)
 413.4 R(\215ags)2.5 E F2(Sendmail)142 429.6 Q F1(supports tw)2.5 E 2.5(od)-.1 G
 (if)240.51 429.6 Q(ferent formats for the)-.25 E F2(aliases)2.5 E F1 2.5
 (database. These)2.5 F(formats are:)2.5 E 39.5(NDBM The)117 445.8 R -.74(``)
-3.167 G(ne).74 E 3.167(wD)-.25 G(BM')240.434 445.8 Q 3.167('f)-.74 G .667
-(ormat, a)268.411 445.8 R -.25(va)-.2 G .666
-(ilable on nearly all systems around today).25 F 5.666(.T)-.65 G(his)492.33
-445.8 Q -.1(wa)189 457.8 S 3.54(st).1 G 1.041
-(he preferred format prior to 4.4BSD.)210.77 457.8 R 1.041(It allo)6.041 F
-1.041(ws such comple)-.25 F 3.541(xt)-.15 G 1.041(hings as)470.459 457.8 R
+3.166 G(ne).74 E 3.166(wD)-.25 G(BM')240.432 445.8 Q 3.166('f)-.74 G .666
+(ormat, a)268.408 445.8 R -.25(va)-.2 G .666
+(ilable on nearly all systems around today).25 F 5.667(.T)-.65 G(his)492.33
+445.8 Q -.1(wa)189 457.8 S 3.541(st).1 G 1.041
+(he preferred format prior to 4.4BSD.)210.771 457.8 R 1.041(It allo)6.041 F
+1.041(ws such comple)-.25 F 3.54(xt)-.15 G 1.04(hings as)470.46 457.8 R
 (multiple databases and closing a currently open database.)189 469.8 Q 32.84
 (multiple databases and closing a currently open database.)189 469.8 Q 32.84
-(NEWDB The)117 486 R(ne)3.324 E 3.324(wd)-.25 G .824(atabase package from Berk)
-232.608 486 R(ele)-.1 E 4.624 -.65(y. I)-.15 H 3.324(fy).65 G .824(ou ha)
-382.718 486 R 1.124 -.15(ve t)-.2 H .824(his, use it.).15 F .823(It allo)5.823
+(NEWDB The)117 486 R(ne)3.323 E 3.323(wd)-.25 G .824(atabase package from Berk)
+232.606 486 R(ele)-.1 E 4.624 -.65(y. I)-.15 H 3.324(fy).65 G .824(ou ha)
+382.716 486 R 1.124 -.15(ve t)-.2 H .824(his, use it.).15 F .824(It allo)5.824
 F(ws)-.25 E .839
 (long records, multiple open databases, real in-memory caching, and so forth.)
 F(ws)-.25 E .839
 (long records, multiple open databases, real in-memory caching, and so forth.)
-189 498 R -1.1(Yo)189 510 S 3.582(uc)1.1 G 1.081
-(an de\214ne this in conjunction with one of the other tw)213.142 510 R 1.081
-(o; if you do, old)-.1 F .692(databases are read, b)189 522 R .693
+189 498 R -1.1(Yo)189 510 S 3.581(uc)1.1 G 1.081
+(an de\214ne this in conjunction with one of the other tw)213.141 510 R 1.082
+(o; if you do, old)-.1 F .693(databases are read, b)189 522 R .693
 (ut when a ne)-.2 F 3.193(wd)-.25 G .693
 (ut when a ne)-.2 F 3.193(wd)-.25 G .693
-(atabase is created it will be in NEWDB)341.679 522 R 4.286(format. As)189 534
-R 4.286(an)4.286 G 1.786(asty hack, if you ha)254.068 534 R 2.085 -.15(ve N)-.2
-H 1.785(EWDB, NDBM, and YPCOMP).15 F -1.11(AT)-.92 G 1.162
-(de\214ned, and if the \214le)189 546 R F2(/var/yp/Mak)3.663 E(e\214le)-.1 E F1
--.15(ex)3.663 G 1.163(ists and is readable,).15 F F2(sendmail)3.663 E F1(will)
-3.663 E .345(create both ne)189 558 R 2.845(wa)-.25 G .345(nd old v)260.035 558
-R .345(ersions of the alias \214le during a)-.15 F F2(ne)2.844 E(walias)-.15 E
-F1(command.)2.844 E 1.219
-(This is required because the Sun NIS/YP system reads the DBM v)189 570 R 1.22
-(ersion of)-.15 F(the alias \214le.)189 582 Q(It')5 E 2.5(su)-.55 G
-(gly as sin, b)265.11 582 Q(ut it w)-.2 E(orks.)-.1 E 1.112
+(atabase is created it will be in NEWDB)341.681 522 R 2.851(format. As)189 534
+R 2.851(an)2.851 G .351(asty hack, if you ha)249.763 534 R .652 -.15(ve N)-.2 H
+.352(EWDB, NDBM, and NIS de\214ned, and).15 F 1.593(if the \214le)189 546 R F2
+(/var/yp/Mak)4.093 E(e\214le)-.1 E F1 -.15(ex)4.093 G 1.593
+(ists and is readable,).15 F F2(sendmail)4.093 E F1 1.592(will create both)
+4.092 F(ne)189 558 Q 3.975(wa)-.25 G 1.475(nd old v)213.825 558 R 1.475
+(ersions of the alias \214le during a)-.15 F F2(ne)3.976 E(walias)-.15 E F1
+3.976(command. This)3.976 F(is)3.976 E .711
+(required because the Sun NIS/YP system reads the DBM v)189 570 R .71
+(ersion of the alias)-.15 F 2.5(\214le. It')189 582 R 2.5(su)-.55 G
+(gly as sin, b)229.56 582 Q(ut it w)-.2 E(orks.)-.1 E 1.112
 (If neither of these are de\214ned,)117 598.2 R F2(sendmail)3.612 E F1 1.112
 (reads the alias \214le into memory on e)3.612 F -.15(ve)-.25 G 1.112(ry in).15
 F -.2(vo)-.4 G(cation.).2 E(This can be slo)117 610.2 Q 2.5(wa)-.25 G
 (nd should be a)191.18 610.2 Q -.2(vo)-.2 G(ided.).2 E .719
 (System V based systems can de\214ne SYSTEM5 to mak)142 626.4 R 3.219(es)-.1 G
 (If neither of these are de\214ned,)117 598.2 R F2(sendmail)3.612 E F1 1.112
 (reads the alias \214le into memory on e)3.612 F -.15(ve)-.25 G 1.112(ry in).15
 F -.2(vo)-.4 G(cation.).2 E(This can be slo)117 610.2 Q 2.5(wa)-.25 G
 (nd should be a)191.18 610.2 Q -.2(vo)-.2 G(ided.).2 E .719
 (System V based systems can de\214ne SYSTEM5 to mak)142 626.4 R 3.219(es)-.1 G
--2.15 -.25(ev e)378.081 626.4 T .719(ral small adjustments.).25 F(This)5.72 E
+-2.15 -.25(ev e)378.083 626.4 T .719(ral small adjustments.).25 F(This)5.719 E
 1.076(changes the handling of timezones and uses the much less ef)117 638.4 R
 (\214cient)-.25 E F2(loc)3.576 E(kf)-.2 E F1 1.076(call in preference to)3.576
 1.076(changes the handling of timezones and uses the much less ef)117 638.4 R
 (\214cient)-.25 E F2(loc)3.576 E(kf)-.2 E F1 1.076(call in preference to)3.576
-F F2(\215oc)117 650.4 Q(k)-.2 E F1 7.224(.T)C 2.224(hese can be speci\214ed se\
-parately using the compilation \215ags SYS5TZ and LOCKF)151.514 650.4 R
-(respecti)117 662.4 Q -.15(ve)-.25 G(ly).15 E(.)-.65 E 1.647(If you don')142
-678.6 R 4.147(th)-.18 G -2.25 -.2(av e)202.031 678.6 T(the)4.347 E F2(unseten)
+F F2(\215oc)117 650.4 Q(k)-.2 E F1 7.225(.T)C 2.224(hese can be speci\214ed se\
+parately using the compilation \215ags SYS5TZ and LOCKF)151.515 650.4 R
+(respecti)117 662.4 Q -.15(ve)-.25 G(ly).15 E(.)-.65 E 1.646(If you don')142
+678.6 R 4.147(th)-.18 G -2.25 -.2(av e)202.03 678.6 T(the)4.347 E F2(unseten)
 4.147 E(v)-.4 E F1 1.647(routine in your system library)4.147 F 4.147(,d)-.65 G
 4.147 E(v)-.4 E F1 1.647(routine in your system library)4.147 F 4.147(,d)-.65 G
-1.647(e\214ne the UNSETENV)411.277 678.6 R(compilation \215ag.)117 690.6 Q -1.1
-(Yo)142 706.8 S 3.854(um)1.1 G 1.354(ay also ha)169.754 706.8 R 1.654 -.15
-(ve t)-.2 H 3.854(od).15 G 1.355(e\214ne the compilation v)242.03 706.8 R 1.355
-(ariable LA_TYPE to describe ho)-.25 F 3.855(wy)-.25 G(our)490.67 706.8 Q
+1.647(e\214ne the UNSETENV)411.276 678.6 R(compilation \215ag.)117 690.6 Q -1.1
+(Yo)142 706.8 S 3.855(um)1.1 G 1.355(ay also ha)169.755 706.8 R 1.655 -.15
+(ve t)-.2 H 3.855(od).15 G 1.355(e\214ne the compilation v)242.035 706.8 R
+1.354(ariable LA_TYPE to describe ho)-.25 F 3.854(wy)-.25 G(our)490.67 706.8 Q
 (load a)117 718.8 Q -.15(ve)-.2 G(rage is computed.).15 E
 (This and other \215ags are detailed in section 6.1.)5 E EP
 (load a)117 718.8 Q -.15(ve)-.2 G(rage is computed.).15 E
 (This and other \215ags are detailed in section 6.1.)5 E EP
-%%Page: 6 3
+%%Page: 8 3
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 198.36(SMM:08-6 Sendmail)72 60 R
+/F0 10/Times-Bold@0 SF 198.36(SMM:08-8 Sendmail)72 60 R
 (Installation and Operation Guide)2.5 E 2.5(1.1.3. Compilation)102 96 R
 (Installation and Operation Guide)2.5 E 2.5(1.1.3. Compilation)102 96 R
-(and installation)2.5 E/F1 10/Times-Roman@0 SF .309
+(and installation)2.5 E/F1 10/Times-Roman@0 SF .308
 (After making the local system con\214guration described abo)142 112.2 R -.15
 (After making the local system con\214guration described abo)142 112.2 R -.15
-(ve)-.15 G 2.808(,Y).15 G .308(ou should be able to com-)398.86 112.2 R .87
+(ve)-.15 G 2.809(,Y).15 G .309(ou should be able to com-)398.855 112.2 R .87
 (pile and install the system.)117 126.2 R .87
 (Compilation can be performed using \231mak)5.87 F(e)-.1 E/F2 7/Times-Roman@0
 SF(1)412.24 122.2 Q F1 3.37<9a69>415.74 126.2 S 3.37(nt)426.33 126.2 S(he)
 (pile and install the system.)117 126.2 R .87
 (Compilation can be performed using \231mak)5.87 F(e)-.1 E/F2 7/Times-Roman@0
 SF(1)412.24 122.2 Q F1 3.37<9a69>415.74 126.2 S 3.37(nt)426.33 126.2 S(he)
@@ -384,45 +391,45 @@ SF(1)412.24 122.2 Q F1 3.37<9a69>415.74 126.2 S 3.37(nt)426.33 126.2 S(he)
 -.65 G(ou may be able to install using)166.07 138.2 Q(mak)157 154.4 Q 2.5(ei)
 -.1 G(nstall)183.84 154.4 Q 3.346
 (This should install the binary in /usr/sbin and create links from /usr/bin/ne)
 -.65 G(ou may be able to install using)166.07 138.2 Q(mak)157 154.4 Q 2.5(ei)
 -.1 G(nstall)183.84 154.4 Q 3.346
 (This should install the binary in /usr/sbin and create links from /usr/bin/ne)
-117 170.6 R -.1(wa)-.25 G 3.345(liases and).1 F 1.576
+117 170.6 R -.1(wa)-.25 G 3.346(liases and).1 F 1.577
 (/usr/bin/mailq to /usr/sbin/sendmail.)117 182.6 R 1.577
 (/usr/bin/mailq to /usr/sbin/sendmail.)117 182.6 R 1.577
-(On 4.4BSD systems it will also format and install man)6.576 F(pages.)117 194.6
+(On 4.4BSD systems it will also format and install man)6.577 F(pages.)117 194.6
 Q F0 2.5(1.2. Con\214guration)87 218.6 R(Files)2.5 E/F3 10/Times-Italic@0 SF
 (Sendmail)127 234.8 Q F1 .355(cannot operate without a con\214guration \214le.)
 2.855 F .355(The con\214guration de\214nes the mail sys-)5.355 F .286
 Q F0 2.5(1.2. Con\214guration)87 218.6 R(Files)2.5 E/F3 10/Times-Italic@0 SF
 (Sendmail)127 234.8 Q F1 .355(cannot operate without a con\214guration \214le.)
 2.855 F .355(The con\214guration de\214nes the mail sys-)5.355 F .286
-(tems understood at this site, ho)102 246.8 R 2.786(wt)-.25 G 2.786(oa)239.854
-246.8 S .286(ccess them, ho)252.08 246.8 R 2.786(wt)-.25 G 2.786(of)323.788
-246.8 S(orw)334.904 246.8 Q .286(ard email to remote mail systems, and)-.1 F
-3.114(an)102 258.8 S .614(umber of tuning parameters.)114.554 258.8 R .614
+(tems understood at this site, ho)102 246.8 R 2.786(wt)-.25 G 2.786(oa)239.856
+246.8 S .286(ccess them, ho)252.082 246.8 R 2.786(wt)-.25 G 2.786(of)323.79
+246.8 S(orw)334.906 246.8 Q .286(ard email to remote mail systems, and)-.1 F
+3.113(an)102 258.8 S .613(umber of tuning parameters.)114.553 258.8 R .614
 (This con\214guration \214le is detailed in the later portion of this docu-)
 5.614 F(ment.)102 270.8 Q(The)127 287 Q F3(sendmail)2.764 E F1 .264
 (con\214guration can be daunting at \214rst.)2.764 F .264(The w)5.264 F .264
 (This con\214guration \214le is detailed in the later portion of this docu-)
 5.614 F(ment.)102 270.8 Q(The)127 287 Q F3(sendmail)2.764 E F1 .264
 (con\214guration can be daunting at \214rst.)2.764 F .264(The w)5.264 F .264
-(orld is comple)-.1 F .264(x, and the mail con-)-.15 F .109
-(\214guration re\215ects that.)102 299 R .109(The distrib)5.109 F .108
+(orld is comple)-.1 F .264(x, and the mail con-)-.15 F .108
+(\214guration re\215ects that.)102 299 R .108(The distrib)5.108 F .109
 (ution includes an m4-based con\214guration package that hides a lot)-.2 F
 (of the comple)102 311 Q(xity)-.15 E(.)-.65 E .47
 (These con\214guration \214les are simpler than old v)127 327.2 R .47
 (ersions lar)-.15 F .47(gely because the w)-.18 F .47(orld has become)-.1 F
 (ution includes an m4-based con\214guration package that hides a lot)-.2 F
 (of the comple)102 311 Q(xity)-.15 E(.)-.65 E .47
 (These con\214guration \214les are simpler than old v)127 327.2 R .47
 (ersions lar)-.15 F .47(gely because the w)-.18 F .47(orld has become)-.1 F
-1.449(simpler; in particular)102 339.2 R 3.949(,t)-.4 G -.15(ex)197.607 339.2 S
-1.449(t-based host \214les are of).15 F 1.448(\214cially eliminated, ob)-.25 F
-1.448(viating the need to \231hide\232)-.15 F(hosts behind a re)102 351.2 Q
+1.448(simpler; in particular)102 339.2 R 3.948(,t)-.4 G -.15(ex)197.604 339.2 S
+1.448(t-based host \214les are of).15 F 1.449(\214cially eliminated, ob)-.25 F
+1.449(viating the need to \231hide\232)-.15 F(hosts behind a re)102 351.2 Q
 (gistered internet g)-.15 E(ate)-.05 E -.1(wa)-.25 G -.65(y.).1 G .092(These \
 \214les also assume that most of your neighbors use domain-based UUCP addressi\
 ng; that)127 367.4 R .361(is, instead of naming hosts as \231host!user\232 the)
 (gistered internet g)-.15 E(ate)-.05 E -.1(wa)-.25 G -.65(y.).1 G .092(These \
 \214les also assume that most of your neighbors use domain-based UUCP addressi\
 ng; that)127 367.4 R .361(is, instead of naming hosts as \231host!user\232 the)
-102 379.4 R 2.861(yw)-.15 G .361(ill use \231host.domain!user\232.)299.438
-379.4 R .36(The con\214guration \214les)5.36 F(can be customized to w)102 391.4
-Q(ork around this, b)-.1 E(ut it is more comple)-.2 E(x.)-.15 E 2.828(Ih)127
-407.6 S -2.25 -.2(av e)138.158 407.6 T(n').2 E 2.828(tt)-.18 G .328
+102 379.4 R 2.861(yw)-.15 G .361(ill use \231host.domain!user\232.)299.435
+379.4 R .361(The con\214guration \214les)5.361 F(can be customized to w)102
+391.4 Q(ork around this, b)-.1 E(ut it is more comple)-.2 E(x.)-.15 E 2.828(Ih)
+127 407.6 S -2.25 -.2(av e)138.158 407.6 T(n').2 E 2.828(tt)-.18 G .328
 (ested these yet on an isolated LAN en)168.226 407.6 R .328
 (ested these yet on an isolated LAN en)168.226 407.6 R .328
-(vironment with a single UUCP connection to)-.4 F 4.409(the outside w)102 419.6
-R 6.909(orld. If)-.1 F 4.409(you are in such an en)6.909 F 4.408
-(vironment, please send comments to send-)-.4 F(mail@ok)102 431.6 Q(eef)-.1 E
-(fe.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU.).65 E .657
+(vironment with a single UUCP connection to)-.4 F 4.408(the outside w)102 419.6
+R 6.908(orld. If)-.1 F 4.409(you are in such an en)6.908 F 4.409
+(vironment, please send comments to send-)-.4 F(mail@CS.Berk)102 431.6 Q(ele)
+-.1 E -.65(y.)-.15 G(EDU.).65 E .658
 (Our con\214guration \214les are processed by)127 447.8 R F3(m4)3.158 E F1 .658
 (Our con\214guration \214les are processed by)127 447.8 R F3(m4)3.158 E F1 .658
-(to f)3.158 F .658(acilitate local customization; the directory)-.1 F F3(cf)
-3.158 E F1 .397(of the sendmail distrib)102 459.8 R .396
+(to f)3.158 F .657(acilitate local customization; the directory)-.1 F F3(cf)
+3.157 E F1 .396(of the)102 459.8 R F3(sendmail)2.896 E F1(distrib)2.896 E .396
 (ution directory contains the source \214les.)-.2 F .396
 (ution directory contains the source \214les.)-.2 F .396
-(This directory contains se)5.396 F -.15(ve)-.25 G .396(ral sub-).15 F
+(This directory contains se)5.396 F -.15(ve)-.25 G .397(ral sub-).15 F
 (directories:)102 471.8 Q 61.73(cf Both)102 488 R .56
 (site-dependent and site-independent descriptions of hosts.)3.06 F .56
 (These can be lit-)5.56 F .445(eral host names \(e.g., \231ucb)174 500 R -.25
 (directories:)102 471.8 Q 61.73(cf Both)102 488 R .56
 (site-dependent and site-independent descriptions of hosts.)3.06 F .56
 (These can be lit-)5.56 F .445(eral host names \(e.g., \231ucb)174 500 R -.25
@@ -438,54 +445,55 @@ F 2.14(output is in the corresponding)174 548 R F0(.cf)4.64 E F1 4.64
 .428(subdomain descriptions.)2.928 F .428(These are tied to the w)5.428 F .428
 (ay your or)-.1 F -.05(ga)-.18 G(niza-).05 E .292(tion w)174 588.2 R .292
 (ants to do addressing.)-.1 F -.15(Fo)5.292 G 2.792(re).15 G(xample,)313.122
 .428(subdomain descriptions.)2.928 F .428(These are tied to the w)5.428 F .428
 (ay your or)-.1 F -.05(ga)-.18 G(niza-).05 E .292(tion w)174 588.2 R .292
 (ants to do addressing.)-.1 F -.15(Fo)5.292 G 2.792(re).15 G(xample,)313.122
-588.2 Q F0(domain/cs.exposed.m4)2.792 E F1 .292(is our descrip-)2.792 F .442
+588.2 Q F0(domain/cs.exposed.m4)2.792 E F1 .292(is our descrip-)2.792 F .443
 (tion for hosts in the CS.Berk)174 600.2 R(ele)-.1 E -.65(y.)-.15 G .443
 (tion for hosts in the CS.Berk)174 600.2 R(ele)-.1 E -.65(y.)-.15 G .443
-(EDU subdomain that w).65 F .443(ant their indi)-.1 F .443(vidual host-)-.25 F
-.963(name to be e)174 612.2 R .963(xternally visible;)-.15 F F0
-(domain/cs.hidden.m4)3.463 E F1 .963(is the same e)3.463 F .962(xcept that the)
--.15 F 2.627(hostname is hidden \(e)174 624.2 R -.15(ve)-.25 G 2.628
-(rything looks lik).15 F 5.128(ei)-.1 G 5.128(tc)362.036 624.2 S 2.628
-(omes from CS.Berk)374.384 624.2 R(ele)-.1 E -.65(y.)-.15 G(EDU\).).65 E
+(EDU subdomain that w).65 F .442(ant their indi)-.1 F .442(vidual host-)-.25 F
+.962(name to be e)174 612.2 R .963(xternally visible;)-.15 F F0
+(domain/cs.hidden.m4)3.463 E F1 .963(is the same e)3.463 F .963(xcept that the)
+-.15 F 2.628(hostname is hidden \(e)174 624.2 R -.15(ve)-.25 G 2.628
+(rything looks lik).15 F 5.128(ei)-.1 G 5.128(tc)362.038 624.2 S 2.627
+(omes from CS.Berk)374.386 624.2 R(ele)-.1 E -.65(y.)-.15 G(EDU\).).65 E
 (These are referenced using the)174 636.2 Q/F4 9/Times-Roman@0 SF(DOMAIN)2.5 E
 F0(m4)2.5 E F1(macro in the)2.5 E F0(.mc)2.5 E F1(\214le.)2.5 E 41.74
 (feature De\214nitions)102 652.4 R .728
 (These are referenced using the)174 636.2 Q/F4 9/Times-Roman@0 SF(DOMAIN)2.5 E
 F0(m4)2.5 E F1(macro in the)2.5 E F0(.mc)2.5 E F1(\214le.)2.5 E 41.74
 (feature De\214nitions)102 652.4 R .728
-(of speci\214c features that some particular host in your site might w)3.229 F
-(ant.)-.1 E 2.466(These are referenced using the)174 664.4 R F4(FEA)4.966 E
-(TURE)-.999 E F0(m4)4.966 E F1 4.966(macro. An)4.966 F -.15(ex)4.967 G 2.467
-(ample feature is).15 F 1.316(use_cw_\214le \(which tells sendmail to read an \
-/etc/sendmail.cw \214le on startup to)174 676.4 R .32 LW 76 686 72 686 DL 80
-686 76 686 DL 84 686 80 686 DL 88 686 84 686 DL 92 686 88 686 DL 96 686 92 686
-DL 100 686 96 686 DL 104 686 100 686 DL 108 686 104 686 DL 112 686 108 686 DL
-116 686 112 686 DL 120 686 116 686 DL 124 686 120 686 DL 128 686 124 686 DL 132
-686 128 686 DL 136 686 132 686 DL 140 686 136 686 DL 144 686 140 686 DL 148 686
-144 686 DL 152 686 148 686 DL 156 686 152 686 DL 160 686 156 686 DL 164 686 160
-686 DL 168 686 164 686 DL 172 686 168 686 DL 176 686 172 686 DL 180 686 176 686
-DL 184 686 180 686 DL 188 686 184 686 DL 192 686 188 686 DL 196 686 192 686 DL
-200 686 196 686 DL 204 686 200 686 DL 208 686 204 686 DL 212 686 208 686 DL 216
-686 212 686 DL/F5 5/Times-Roman@0 SF(1)93.6 696.4 Q/F6 8/Times-Roman@0 SF
-(where you may ha)3.2 I .24 -.12(ve t)-.16 H 2(or).12 G(eplace \231mak)175.132
-699.6 Q(e\232 with \231mak)-.08 E 2<65ad>-.08 G 2(fM)267.452 699.6 S(ak)279.228
-699.6 Q(e\214le.dist\232 as appropriate.)-.08 E EP
-%%Page: 7 4
+(of speci\214c features that some particular host in your site might w)3.228 F
+(ant.)-.1 E 2.467(These are referenced using the)174 664.4 R F4(FEA)4.966 E
+(TURE)-.999 E F0(m4)4.966 E F1 4.966(macro. An)4.966 F -.15(ex)4.966 G 2.466
+(ample feature is).15 F 1.316(use_cw_\214le \(which tells)174 676.4 R F3
+(sendmail)3.816 E F1 1.317(to read an /etc/sendmail.cw \214le on startup to)
+3.816 F .32 LW 76 686 72 686 DL 80 686 76 686 DL 84 686 80 686 DL 88 686 84 686
+DL 92 686 88 686 DL 96 686 92 686 DL 100 686 96 686 DL 104 686 100 686 DL 108
+686 104 686 DL 112 686 108 686 DL 116 686 112 686 DL 120 686 116 686 DL 124 686
+120 686 DL 128 686 124 686 DL 132 686 128 686 DL 136 686 132 686 DL 140 686 136
+686 DL 144 686 140 686 DL 148 686 144 686 DL 152 686 148 686 DL 156 686 152 686
+DL 160 686 156 686 DL 164 686 160 686 DL 168 686 164 686 DL 172 686 168 686 DL
+176 686 172 686 DL 180 686 176 686 DL 184 686 180 686 DL 188 686 184 686 DL 192
+686 188 686 DL 196 686 192 686 DL 200 686 196 686 DL 204 686 200 686 DL 208 686
+204 686 DL 212 686 208 686 DL 216 686 212 686 DL/F5 5/Times-Roman@0 SF(1)93.6
+696.4 Q/F6 8/Times-Roman@0 SF(where you may ha)3.2 I .24 -.12(ve t)-.16 H 2(or)
+.12 G(eplace \231mak)175.132 699.6 Q(e\232 with \231mak)-.08 E 2<65ad>-.08 G 2
+(fM)267.452 699.6 S(ak)279.228 699.6 Q(e\214le.dist\232 as appropriate.)-.08 E
+EP
+%%Page: 9 4
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-7)457.9 60 Q/F1 10/Times-Roman@0 SF(\214nd the set of local names\).)
-174 96 Q 50.62(hack Local)102 112.2 R 1.886(hacks, referenced using the)4.386 F
+(SMM:08-9)457.9 60 Q/F1 10/Times-Roman@0 SF(\214nd the set of local names\).)
+174 96 Q 50.62(hack Local)102 112.2 R 1.886(hacks, referenced using the)4.387 F
 /F2 9/Times-Roman@0 SF(HA)4.386 E(CK)-.36 E F0(m4)4.386 E F1 4.386(macro. T)
 /F2 9/Times-Roman@0 SF(HA)4.386 E(CK)-.36 E F0(m4)4.386 E F1 4.386(macro. T)
-4.386 F 1.886(ry to a)-.35 F -.2(vo)-.2 G 1.886(id these.).2 F(The)6.887 E
+4.386 F 1.886(ry to a)-.35 F -.2(vo)-.2 G 1.886(id these.).2 F(The)6.886 E
 (point of ha)174 124.2 Q(ving them here is to mak)-.2 E 2.5(ei)-.1 G 2.5(tc)
 325.91 124.2 S(lear that the)335.63 124.2 Q 2.5(ys)-.15 G(mell.)394.08 124.2 Q
 56.72(m4 Site-independent)102 140.4 R/F3 10/Times-Italic@0 SF(m4)2.538 E F1
 .038(\(1\) include \214les that ha)B .338 -.15(ve i)-.2 H .038
 (nformation common to all con\214gu-).15 F(ration \214les.)174 152.4 Q
 (This can be thought of as a \231#include\232 directory)5 E(.)-.65 E 43.95
 (point of ha)174 124.2 Q(ving them here is to mak)-.2 E 2.5(ei)-.1 G 2.5(tc)
 325.91 124.2 S(lear that the)335.63 124.2 Q 2.5(ys)-.15 G(mell.)394.08 124.2 Q
 56.72(m4 Site-independent)102 140.4 R/F3 10/Times-Italic@0 SF(m4)2.538 E F1
 .038(\(1\) include \214les that ha)B .338 -.15(ve i)-.2 H .038
 (nformation common to all con\214gu-).15 F(ration \214les.)174 152.4 Q
 (This can be thought of as a \231#include\232 directory)5 E(.)-.65 E 43.95
-(mailer De\214nitions)102 168.6 R .917(of mailers, referenced using the)3.417 F
-F2(MAILER)3.417 E F0(m4)3.417 E F1 3.418(macro. De\214ned)3.418 F(mailer)3.418
+(mailer De\214nitions)102 168.6 R .918(of mailers, referenced using the)3.418 F
+F2(MAILER)3.417 E F0(m4)3.417 E F1 3.417(macro. De\214ned)3.417 F(mailer)3.417
 E(types in this distrib)174 180.6 Q(ution are f)-.2 E
 (ax, local, smtp, uucp, and usenet.)-.1 E 43.39(ostype De\214nitions)102 196.8
 E(types in this distrib)174 180.6 Q(ution are f)-.2 E
 (ax, local, smtp, uucp, and usenet.)-.1 E 43.39(ostype De\214nitions)102 196.8
-R 1.157(describing v)3.657 F 1.157(arious operating system en)-.25 F 1.156
+R 1.156(describing v)3.656 F 1.157(arious operating system en)-.25 F 1.157
 (vironments \(such as the loca-)-.4 F(tion of support \214les\).)174 208.8 Q
 (These are referenced using the)5 E F2(OSTYPE)2.5 E F0(m4)2.5 E F1(macro.)2.5 E
 60.61(sh Shell)102 225 R(\214les used by the)2.5 E F0(m4)2.5 E F1 -.2(bu)2.5 G
 (vironments \(such as the loca-)-.4 F(tion of support \214les\).)174 208.8 Q
 (These are referenced using the)5 E F2(OSTYPE)2.5 E F0(m4)2.5 E F1(macro.)2.5 E
 60.61(sh Shell)102 225 R(\214les used by the)2.5 E F0(m4)2.5 E F1 -.2(bu)2.5 G
@@ -498,190 +506,177 @@ R 1.157(describing v)3.657 F 1.157(arious operating system en)-.25 F 1.156
 293.4 Q(SITE\(well\))214 305.4 Q(The)174 321.6 Q 2.5(ya)-.15 G
 (re referenced using the SITECONFIG macro:)201.34 321.6 Q
 (SITECONFIG\(site.con\214g.\214le, name_of_site, X\))214 337.8 Q(where)174 354
 293.4 Q(SITE\(well\))214 305.4 Q(The)174 321.6 Q 2.5(ya)-.15 G
 (re referenced using the SITECONFIG macro:)201.34 321.6 Q
 (SITECONFIG\(site.con\214g.\214le, name_of_site, X\))214 337.8 Q(where)174 354
-Q F3(X)2.704 E F1 .204(is the macro/class name to use.)2.704 F .203
+Q F3(X)2.703 E F1 .203(is the macro/class name to use.)2.703 F .204
 (It can be U \(indicating locally connected)5.204 F(hosts\) or one of W)174 366
 Q 2.5(,X)-.92 G 2.5(,o)259.73 366 S 2.5(rYf)269.73 366 S
 (It can be U \(indicating locally connected)5.204 F(hosts\) or one of W)174 366
 Q 2.5(,X)-.92 G 2.5(,o)259.73 366 S 2.5(rYf)269.73 366 S
-(or up to three remote UUCP hubs.)288.61 366 Q .756(If you are in a ne)127
-382.2 R 3.256(wd)-.25 G .756(omain \(e.g., a compan)214.036 382.2 R .757
-(y\), you will probably w)-.15 F .757(ant to create a cf/domain)-.1 F .871
+(or up to three remote UUCP hubs.)288.61 366 Q .757(If you are in a ne)127
+382.2 R 3.257(wd)-.25 G .757(omain \(e.g., a compan)214.042 382.2 R .756
+(y\), you will probably w)-.15 F .756(ant to create a cf/domain)-.1 F .87
 (\214le for your domain.)102 394.2 R .871
 (\214le for your domain.)102 394.2 R .871
-(This consists primarily of relay de\214nitions: for e)5.871 F .87
-(xample, Berk)-.15 F(ele)-.1 E(y')-.15 E 3.37(sd)-.55 G(omain)479 394.2 Q .16
+(This consists primarily of relay de\214nitions: for e)5.871 F .871
+(xample, Berk)-.15 F(ele)-.1 E(y')-.15 E 3.371(sd)-.55 G(omain)479 394.2 Q .16
 (de\214nition de\214nes relays for BitNET)102 406.2 R 2.66(,C)-.74 G(SNET)
 257.61 406.2 Q 2.66(,a)-.74 G .16(nd UUCP)291.47 406.2 R 5.16(.O)-1.11 G 2.66
 (ft)344.57 406.2 S .16(hese, only the UUCP relay is particu-)353.34 406.2 R .46
 (larly speci\214c to Berk)102 418.2 R(ele)-.1 E 4.26 -.65(y. A)-.15 H .46
 (ll of these are internet-style domain names.).65 F .46(Please check to mak)
 5.46 F 2.96(ec)-.1 G(er)493.1 418.2 Q(-)-.2 E(tain the)102 430.2 Q 2.5(ya)-.15
 (de\214nition de\214nes relays for BitNET)102 406.2 R 2.66(,C)-.74 G(SNET)
 257.61 406.2 Q 2.66(,a)-.74 G .16(nd UUCP)291.47 406.2 R 5.16(.O)-1.11 G 2.66
 (ft)344.57 406.2 S .16(hese, only the UUCP relay is particu-)353.34 406.2 R .46
 (larly speci\214c to Berk)102 418.2 R(ele)-.1 E 4.26 -.65(y. A)-.15 H .46
 (ll of these are internet-style domain names.).65 F .46(Please check to mak)
 5.46 F 2.96(ec)-.1 G(er)493.1 418.2 Q(-)-.2 E(tain the)102 430.2 Q 2.5(ya)-.15
-G(re reasonable for your domain.)143.51 430.2 Q 1.406(Subdomains at Berk)127
-446.4 R(ele)-.1 E 3.906(ya)-.15 G 1.407
-(re also represented in the cf/domain directory)235.678 446.4 R 6.407(.F)-.65 G
-1.407(or e)439.406 446.4 R 1.407(xample, the)-.15 F 1.491(domain cs-e)102 458.4
+G(re reasonable for your domain.)143.51 430.2 Q 1.407(Subdomains at Berk)127
+446.4 R(ele)-.1 E 3.907(ya)-.15 G 1.407
+(re also represented in the cf/domain directory)235.681 446.4 R 6.406(.F)-.65 G
+1.406(or e)439.408 446.4 R 1.406(xample, the)-.15 F 1.49(domain cs-e)102 458.4
 R 1.491(xposed is the Computer Science subdomain with the local hostname sho)
 R 1.491(xposed is the Computer Science subdomain with the local hostname sho)
--.15 F 1.49(wn to other)-.25 F 1.41(users; cs-hidden mak)102 470.4 R 1.411
-(es users appear to be from the CS.Berk)-.1 F(ele)-.1 E -.65(y.)-.15 G 1.411
-(EDU subdomain \(with no local).65 F 1.084(host information included\).)102
-482.4 R -1.1(Yo)6.084 G 3.584(uw)1.1 G 1.084(ill probably ha)246.336 482.4 R
-1.384 -.15(ve t)-.2 H 3.584(ou).15 G 1.083
-(pdate this directory to be appropriate for)335.872 482.4 R(your domain.)102
-494.4 Q -1.1(Yo)127 510.6 S 4.372(uw)1.1 G 1.872(ill ha)154.712 510.6 R 2.172
--.15(ve t)-.2 H 4.372(ou).15 G 1.872(se or create)207.478 510.6 R F0(.mc)4.372
-E F1 1.872(\214les in the)4.372 F F3(cf/cf)4.372 E F1 1.873
-(subdirectory for your hosts.)4.373 F 1.873(This is)6.873 F
+-.15 F 1.491(wn to other)-.25 F 1.411(users; cs-hidden mak)102 470.4 R 1.411
+(es users appear to be from the CS.Berk)-.1 F(ele)-.1 E -.65(y.)-.15 G 1.41
+(EDU subdomain \(with no local).65 F 1.083(host information included\).)102
+482.4 R -1.1(Yo)6.083 G 3.583(uw)1.1 G 1.083(ill probably ha)246.332 482.4 R
+1.384 -.15(ve t)-.2 H 3.584(ou).15 G 1.084
+(pdate this directory to be appropriate for)335.866 482.4 R(your domain.)102
+494.4 Q -1.1(Yo)127 510.6 S 4.373(uw)1.1 G 1.873(ill ha)154.713 510.6 R 2.173
+-.15(ve t)-.2 H 4.373(ou).15 G 1.873(se or create)207.482 510.6 R F0(.mc)4.372
+E F1 1.872(\214les in the)4.372 F F3(cf/cf)4.372 E F1 1.872
+(subdirectory for your hosts.)4.372 F 1.872(This is)6.872 F
 (detailed in the cf/README \214le.)102 522.6 Q F0 2.5(1.3. Details)87 546.6 R
 (detailed in the cf/README \214le.)102 522.6 Q F0 2.5(1.3. Details)87 546.6 R
-(of Installation Files)2.5 E F1(This subsection describes the \214les that com\
-prise the sendmail installation.)127 562.8 Q F0 2.5(1.3.1. /usr/sbin/sendmail)
-102 586.8 R F1 .079(The binary for sendmail is located in /usr/sbin)142 605 R
-/F4 7/Times-Roman@0 SF(2)326.703 601 Q F1 5.079(.I)330.203 605 S 2.579(ts)
-341.112 605 S .08(hould be setuid root.)350.361 605 R -.15(Fo)5.08 G 2.58(rs)
-.15 G .08(ecurity rea-)458.11 605 R(sons, /, /usr)117 619 Q 2.5(,a)-.4 G
-(nd /usr/sbin should be o)171.6 619 Q(wned by root, mode 755)-.25 E F4(3)364.4
-615 Q F1(.)367.9 619 Q .32 LW 76 646 72 646 DL 80 646 76 646 DL 84 646 80 646
-DL 88 646 84 646 DL 92 646 88 646 DL 96 646 92 646 DL 100 646 96 646 DL 104 646
-100 646 DL 108 646 104 646 DL 112 646 108 646 DL 116 646 112 646 DL 120 646 116
-646 DL 124 646 120 646 DL 128 646 124 646 DL 132 646 128 646 DL 136 646 132 646
-DL 140 646 136 646 DL 144 646 140 646 DL 148 646 144 646 DL 152 646 148 646 DL
-156 646 152 646 DL 160 646 156 646 DL 164 646 160 646 DL 168 646 164 646 DL 172
-646 168 646 DL 176 646 172 646 DL 180 646 176 646 DL 184 646 180 646 DL 188 646
-184 646 DL 192 646 188 646 DL 196 646 192 646 DL 200 646 196 646 DL 204 646 200
-646 DL 208 646 204 646 DL 212 646 208 646 DL 216 646 212 646 DL/F5 5
-/Times-Roman@0 SF(2)93.6 656.4 Q/F6 8/Times-Roman@0 SF .385
-(This is usually /usr/sbin on 4.4BSD and ne)3.2 J .385(wer systems; man)-.2 F
-2.385(ys)-.12 G .385(ystems install it in /usr/lib)302.966 659.6 R 4.384(.I)
--.32 G .384(understand it is in /usr/ucblib on)398.744 659.6 R
-(System V Release 4.)72 669.2 Q F5(3)93.6 679.6 Q F6 .15(Some v)3.2 J .15
-(endors ship them o)-.12 F .15
+(of Installation Files)2.5 E F1
+(This subsection describes the \214les that comprise the)127 562.8 Q F3
+(sendmail)2.5 E F1(installation.)2.5 E F0 2.5(1.3.1. /usr/sbin/sendmail)102
+586.8 R F1 .08(The binary for)142 605 R F3(sendmail)2.58 E F1 .079
+(is located in /usr/sbin)2.58 F/F4 7/Times-Roman@0 SF(2)326.708 601 Q F1 5.079
+(.I)330.208 605 S 2.579(ts)341.117 605 S .079(hould be setuid root.)350.366 605
+R -.15(Fo)5.079 G 2.579(rs).15 G .079(ecurity rea-)458.111 605 R(sons, /, /usr)
+117 619 Q 2.5(,a)-.4 G(nd /usr/sbin should be o)171.6 619 Q
+(wned by root, mode 755)-.25 E F4(3)364.4 615 Q F1(.)367.9 619 Q .32 LW 76 646
+72 646 DL 80 646 76 646 DL 84 646 80 646 DL 88 646 84 646 DL 92 646 88 646 DL
+96 646 92 646 DL 100 646 96 646 DL 104 646 100 646 DL 108 646 104 646 DL 112
+646 108 646 DL 116 646 112 646 DL 120 646 116 646 DL 124 646 120 646 DL 128 646
+124 646 DL 132 646 128 646 DL 136 646 132 646 DL 140 646 136 646 DL 144 646 140
+646 DL 148 646 144 646 DL 152 646 148 646 DL 156 646 152 646 DL 160 646 156 646
+DL 164 646 160 646 DL 168 646 164 646 DL 172 646 168 646 DL 176 646 172 646 DL
+180 646 176 646 DL 184 646 180 646 DL 188 646 184 646 DL 192 646 188 646 DL 196
+646 192 646 DL 200 646 196 646 DL 204 646 200 646 DL 208 646 204 646 DL 212 646
+208 646 DL 216 646 212 646 DL/F5 5/Times-Roman@0 SF(2)93.6 656.4 Q/F6 8
+/Times-Roman@0 SF .384(This is usually /usr/sbin on 4.4BSD and ne)3.2 J .384
+(wer systems; man)-.2 F 2.385(ys)-.12 G .385(ystems install it in /usr/lib)
+302.957 659.6 R 4.385(.I)-.32 G .385(understand it is in /usr/ucblib on)398.739
+659.6 R(System V Release 4.)72 669.2 Q F5(3)93.6 679.6 Q F6 .149(Some v)3.2 J
+.15(endors ship them o)-.12 F .15
 (wned by bin; this creates a security hole that is not actually related to)-.2
 (wned by bin; this creates a security hole that is not actually related to)-.2
-F/F7 8/Times-Italic@0 SF(sendmail)2.15 E F6 4.15(.O)C .149(ther important di-)
-447.262 682.8 R(rectories that should ha)72 692.4 Q .24 -.12(ve r)-.16 H
+F/F7 8/Times-Italic@0 SF(sendmail)2.15 E F6 4.15(.O)C .15(ther important di-)
+447.26 682.8 R(rectories that should ha)72 692.4 Q .24 -.12(ve r)-.16 H
 (estricti).12 E .24 -.12(ve o)-.2 H(wnerships and permissions are /bin, /usr/b\
 in, /etc, /usr/etc, /lib, and /usr/lib)-.08 E(.)-.32 E EP
 (estricti).12 E .24 -.12(ve o)-.2 H(wnerships and permissions are /bin, /usr/b\
 in, /etc, /usr/etc, /lib, and /usr/lib)-.08 E(.)-.32 E EP
-%%Page: 8 5
+%%Page: 10 5
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 198.36(SMM:08-8 Sendmail)72 60 R
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-10 Sendmail)72 60 R
 (Installation and Operation Guide)2.5 E 2.5(1.3.2. /etc/sendmail.cf)102 96 R/F1
 (Installation and Operation Guide)2.5 E 2.5(1.3.2. /etc/sendmail.cf)102 96 R/F1
-10/Times-Roman@0 SF .78(This is the con\214guration \214le for sendmail.)142
-112.2 R .781(This and the frozen con\214guration \214le are the)5.781 F 2.178
-(only tw)117 126.2 R 4.678(on)-.1 G 2.178
-(on-library \214le names compiled into sendmail)164.036 126.2 R/F2 7
-/Times-Roman@0 SF(4)354.636 122.2 Q F1 7.179(.S)358.136 126.2 S 2.179
-(ome older systems install it in)373.375 126.2 R F0(/usr/lib/sendmail.cf)117
-138.2 Q F1(.)A(If you w)142 154.4 Q(ant to mo)-.1 E .3 -.15(ve t)-.15 H
-(his \214le, change).15 E/F3 10/Times-Italic@0 SF(sr)2.5 E(c/pathnames.h)-.37 E
-F1(.)A .721(The con\214guration \214le is normally created using the distrib)
-142 170.6 R .721(ution \214les described abo)-.2 F -.15(ve)-.15 G 5.72(.I).15 G
-(f)500.67 170.6 Q .64(you ha)117 182.6 R .94 -.15(ve a p)-.2 H .64
+10/Times-Roman@0 SF .025(This is the con\214guration \214le for)142 112.2 R/F2
+10/Times-Italic@0 SF(sendmail)2.525 E F1 5.025(.T)C .025
+(his is the only non-library \214le name compiled)321.335 112.2 R(into)117
+126.2 Q F2(sendmail)2.5 E/F3 7/Times-Roman@0 SF(4)171.17 122.2 Q F1 5(.S)174.67
+126.2 S(ome older systems install it in)187.73 126.2 Q F0(/usr/lib/sendmail.cf)
+2.5 E F1(.)A(If you w)142 142.4 Q(ant to mo)-.1 E .3 -.15(ve t)-.15 H
+(his \214le, change).15 E F2(sr)2.5 E(c/pathnames.h)-.37 E F1(.)A .721
+(The con\214guration \214le is normally created using the distrib)142 158.6 R
+.721(ution \214les described abo)-.2 F -.15(ve)-.15 G 5.72(.I).15 G(f)500.67
+158.6 Q .64(you ha)117 170.6 R .94 -.15(ve a p)-.2 H .64
 (articularly unusual system con\214guration you may need to create a special v)
 .15 F(ersion.)-.15 E
 (The format of this \214le is detailed in later sections of this document.)117
 (articularly unusual system con\214guration you may need to create a special v)
 .15 F(ersion.)-.15 E
 (The format of this \214le is detailed in later sections of this document.)117
-194.6 Q F0 2.5(1.3.3. /usr/ucb/newaliases)102 218.6 R F1 1.59
-(If you are running deli)142 234.8 R -.15(ve)-.25 G 1.589
-(rmail, it is critical that the).15 F F3(ne)4.089 E(waliases)-.15 E F1 1.589
-(command be replaced.)4.089 F(This can just be a link to)117 246.8 Q F3
-(sendmail)2.5 E F1(:)A(rm \255f /usr/ucb/ne)157 263 Q -.1(wa)-.25 G(liases).1 E
-(ln /usr/sbin/sendmail /usr/ucb/ne)157 275 Q -.1(wa)-.25 G(liases).1 E
-(This can be installed in whate)117 291.2 Q -.15(ve)-.25 G 2.5(rs).15 G
-(earch path you prefer for your system.)254.91 291.2 Q F0 2.5(1.3.4. /v)102
-315.2 R(ar/spool/mqueue)-.1 E F1 .217(The directory)142 331.4 R F3
+182.6 Q F0 2.5(1.3.3. /usr/bin/newaliases)102 206.6 R F1 1.59
+(If you are running deli)142 222.8 R -.15(ve)-.25 G 1.589
+(rmail, it is critical that the).15 F F2(ne)4.089 E(waliases)-.15 E F1 1.589
+(command be replaced.)4.089 F(This can just be a link to)117 234.8 Q F2
+(sendmail)2.5 E F1(:)A(rm \255f /usr/bin/ne)157 251 Q -.1(wa)-.25 G(liases).1 E
+(ln /usr/sbin/sendmail /usr/bin/ne)157 263 Q -.1(wa)-.25 G(liases).1 E
+(This can be installed in whate)117 279.2 Q -.15(ve)-.25 G 2.5(rs).15 G
+(earch path you prefer for your system.)254.91 279.2 Q F0 2.5(1.3.4. /v)102
+303.2 R(ar/spool/mqueue)-.1 E F1 .217(The directory)142 319.4 R F2
 (/var/spool/mqueue)2.717 E F1 .218(should be created to hold the mail queue.)
 (/var/spool/mqueue)2.717 E F1 .218(should be created to hold the mail queue.)
-2.717 F .218(This directory)5.218 F(should be mode 700 and o)117 343.4 Q
+2.717 F .218(This directory)5.218 F(should be mode 700 and o)117 331.4 Q
 (wned by root.)-.25 E(The actual path of this directory is de\214ned in the)142
 (wned by root.)-.25 E(The actual path of this directory is de\214ned in the)142
-359.6 Q F0(Q)2.5 E F1(option of the)2.5 E F3(sendmail.cf)2.5 E F1(\214le.)2.5 E
-F0 2.5(1.3.5. /etc/aliases*)102 383.6 R F1 1.493
-(The system aliases are held in \231/etc/aliases\232.)142 399.8 R 3.992(As)
-6.492 G 1.492(ample is gi)350.01 399.8 R -.15(ve)-.25 G 3.992(ni).15 G 3.992
-<6e99>417.696 399.8 S 1.492(lib/aliases\232 which)431.128 399.8 R
-(includes some aliases which)117 411.8 Q F3(must)2.5 E F1(be de\214ned:)2.5 E
-(cp lib/aliases /etc/aliases)157 428 Q F3(edit /etc/aliases)157 440 Q F1 -1.1
-(Yo)117 456.2 S 2.5(us)1.1 G(hould e)139.51 456.2 Q(xtend this \214le with an)
--.15 E 2.5(ya)-.15 G(liases that are apropos to your system.)267.54 456.2 Q
-(Normally)142 472.4 Q F3(sendmail)3.609 E F1 1.109(looks at a v)3.609 F 1.109
-(ersion of these \214les maintained by the)-.15 F F3(dbm)3.609 E F1 1.11
-(\(3\) or)1.666 F F3(db)3.61 E F1(\(3\))1.666 E 3.46(routines. These)117 484.4
+347.6 Q F0(Q)2.5 E F1(option of the)2.5 E F2(sendmail.cf)2.5 E F1(\214le.)2.5 E
+F0 2.5(1.3.5. /etc/aliases*)102 371.6 R F1 1.493
+(The system aliases are held in \231/etc/aliases\232.)142 387.8 R 3.992(As)
+6.492 G 1.492(ample is gi)350.01 387.8 R -.15(ve)-.25 G 3.992(ni).15 G 3.992
+<6e99>417.696 387.8 S 1.492(lib/aliases\232 which)431.128 387.8 R
+(includes some aliases which)117 399.8 Q F2(must)2.5 E F1(be de\214ned:)2.5 E
+(cp lib/aliases /etc/aliases)157 416 Q F2(edit /etc/aliases)157 428 Q F1 -1.1
+(Yo)117 444.2 S 2.5(us)1.1 G(hould e)139.51 444.2 Q(xtend this \214le with an)
+-.15 E 2.5(ya)-.15 G(liases that are apropos to your system.)267.54 444.2 Q
+(Normally)142 460.4 Q F2(sendmail)3.609 E F1 1.109(looks at a v)3.609 F 1.109
+(ersion of these \214les maintained by the)-.15 F F2(dbm)3.609 E F1 1.11
+(\(3\) or)1.666 F F2(db)3.61 E F1(\(3\))1.666 E 3.46(routines. These)117 472.4
 R .96(are stored either in \231/etc/aliases.dir\232 and \231/etc/aliases.pag\
 \232 or \231/etc/aliases.db\232)3.46 F 1.022
 R .96(are stored either in \231/etc/aliases.dir\232 and \231/etc/aliases.pag\
 \232 or \231/etc/aliases.db\232)3.46 F 1.022
-(depending on which database package you are using.)117 496.4 R 1.022
-(These can initially be created as empty)6.022 F(\214les, b)117 508.4 Q(ut the)
--.2 E 2.5(yw)-.15 G(ill ha)180.54 508.4 Q .3 -.15(ve t)-.2 H 2.5(ob).15 G 2.5
-(ei)227.69 508.4 S(nitialized promptly)237.41 508.4 Q 5(.T)-.65 G
-(hese should be mode 644:)326.76 508.4 Q(cp /de)157 524.6 Q
-(v/null /etc/aliases.dir)-.25 E(cp /de)157 536.6 Q(v/null /etc/aliases.pag)-.25
-E(chmod 644 /etc/aliases.*)157 548.6 Q(ne)157 560.6 Q -.1(wa)-.25 G(liases).1 E
-(The)117 576.8 Q F3(db)2.79 E F1 .29(routines preset the mode reasonably)2.79 F
-2.79(,s)-.65 G 2.79(ot)301.68 576.8 S .29(his step can be skipped.)312.25 576.8
-R .29(The actual path of this)5.29 F(\214le is de\214ned in the)117 588.8 Q F0
-(A)2.5 E F1(option of the)2.5 E F3(sendmail.cf)2.5 E F1(\214le.)2.5 E F0 2.5
-(1.3.6. /etc/sendmail.fc)102 612.8 R F1 .609
-(If you intend to install the frozen v)142 629 R .61
-(ersion of the con\214guration \214le \(for quick startup\) you)-.15 F
-(should create the \214le /etc/sendmail.fc and initialize it.)117 641 Q
-(This step may be safely skipped.)5 E .32 LW 76 669.2 72 669.2 DL 80 669.2 76
-669.2 DL 84 669.2 80 669.2 DL 88 669.2 84 669.2 DL 92 669.2 88 669.2 DL 96
-669.2 92 669.2 DL 100 669.2 96 669.2 DL 104 669.2 100 669.2 DL 108 669.2 104
-669.2 DL 112 669.2 108 669.2 DL 116 669.2 112 669.2 DL 120 669.2 116 669.2 DL
-124 669.2 120 669.2 DL 128 669.2 124 669.2 DL 132 669.2 128 669.2 DL 136 669.2
-132 669.2 DL 140 669.2 136 669.2 DL 144 669.2 140 669.2 DL 148 669.2 144 669.2
-DL 152 669.2 148 669.2 DL 156 669.2 152 669.2 DL 160 669.2 156 669.2 DL 164
-669.2 160 669.2 DL 168 669.2 164 669.2 DL 172 669.2 168 669.2 DL 176 669.2 172
-669.2 DL 180 669.2 176 669.2 DL 184 669.2 180 669.2 DL 188 669.2 184 669.2 DL
-192 669.2 188 669.2 DL 196 669.2 192 669.2 DL 200 669.2 196 669.2 DL 204 669.2
-200 669.2 DL 208 669.2 204 669.2 DL 212 669.2 208 669.2 DL 216 669.2 212 669.2
-DL/F4 5/Times-Roman@0 SF(4)93.6 679.6 Q/F5 8/Times-Roman@0 SF .589
+(depending on which database package you are using.)117 484.4 R 1.022
+(These can initially be created as empty)6.022 F(\214les, b)117 496.4 Q(ut the)
+-.2 E 2.5(yw)-.15 G(ill ha)180.54 496.4 Q .3 -.15(ve t)-.2 H 2.5(ob).15 G 2.5
+(ei)227.69 496.4 S(nitialized promptly)237.41 496.4 Q 5(.T)-.65 G
+(hese should be mode 644:)326.76 496.4 Q(cp /de)157 512.6 Q
+(v/null /etc/aliases.dir)-.25 E(cp /de)157 524.6 Q(v/null /etc/aliases.pag)-.25
+E(chmod 644 /etc/aliases.*)157 536.6 Q(ne)157 548.6 Q -.1(wa)-.25 G(liases).1 E
+(The)117 564.8 Q F2(db)2.79 E F1 .29(routines preset the mode reasonably)2.79 F
+2.79(,s)-.65 G 2.79(ot)301.68 564.8 S .29(his step can be skipped.)312.25 564.8
+R .29(The actual path of this)5.29 F(\214le is de\214ned in the)117 576.8 Q F0
+(A)2.5 E F1(option of the)2.5 E F2(sendmail.cf)2.5 E F1(\214le.)2.5 E F0 2.5
+(1.3.6. /etc/r)102 600.8 R(c)-.18 E F1 .155
+(It will be necessary to start up the)142 617 R F2(sendmail)2.655 E F1 .156
+(daemon when your system reboots.)2.655 F .156(This dae-)5.156 F 1.538
+(mon performs tw)117 629 R 4.037(of)-.1 G 1.537
+(unctions: it listens on the SMTP sock)201.223 629 R 1.537
+(et for connections \(to recei)-.1 F 1.837 -.15(ve m)-.25 H(ail).15 E .442(fro\
+m a remote system\) and it processes the queue periodically to insure that mai\
+l gets deli)117 641 R -.15(ve)-.25 G(red).15 E(when hosts come up.)117 653 Q
+.32 LW 76 669.2 72 669.2 DL 80 669.2 76 669.2 DL 84 669.2 80 669.2 DL 88 669.2
+84 669.2 DL 92 669.2 88 669.2 DL 96 669.2 92 669.2 DL 100 669.2 96 669.2 DL 104
+669.2 100 669.2 DL 108 669.2 104 669.2 DL 112 669.2 108 669.2 DL 116 669.2 112
+669.2 DL 120 669.2 116 669.2 DL 124 669.2 120 669.2 DL 128 669.2 124 669.2 DL
+132 669.2 128 669.2 DL 136 669.2 132 669.2 DL 140 669.2 136 669.2 DL 144 669.2
+140 669.2 DL 148 669.2 144 669.2 DL 152 669.2 148 669.2 DL 156 669.2 152 669.2
+DL 160 669.2 156 669.2 DL 164 669.2 160 669.2 DL 168 669.2 164 669.2 DL 172
+669.2 168 669.2 DL 176 669.2 172 669.2 DL 180 669.2 176 669.2 DL 184 669.2 180
+669.2 DL 188 669.2 184 669.2 DL 192 669.2 188 669.2 DL 196 669.2 192 669.2 DL
+200 669.2 196 669.2 DL 204 669.2 200 669.2 DL 208 669.2 204 669.2 DL 212 669.2
+208 669.2 DL 216 669.2 212 669.2 DL/F4 5/Times-Roman@0 SF(4)93.6 679.6 Q/F5 8
+/Times-Roman@0 SF .588
 (The system libraries can reference other \214les; in particular)3.2 J 2.589
 (The system libraries can reference other \214les; in particular)3.2 J 2.589
-(,s)-.32 G .588
-(ystem library subroutines that sendmail calls probably reference)294.809 682.8
-R/F6 8/Times-Italic@0 SF(/etc/passwd)72 692.4 Q F5(and)2 E F6(/etc/r)2 E(esolv)
--.296 E(.conf)-.592 E F5(.)A EP
-%%Page: 9 6
+(,s)-.32 G .589(ystem library subroutines that)294.805 682.8 R/F6 8
+/Times-Italic@0 SF(sendmail)2.589 E F5 .589(calls probably reference)2.589 F F6
+(/etc/passwd)72 692.4 Q F5(and)2 E F6(/etc/r)2 E(esolv)-.296 E(.conf)-.592 E F5
+(.)A EP
+%%Page: 11 6
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-9)457.9 60 Q/F1 10/Times-Roman@0 SF(cp /de)157 96 Q
-(v/null /etc/sendmail.fc)-.25 E(chmod 644 /etc/sendmail.fc)157 108 Q
-(/usr/sbin/sendmail \255bz)157 120 Q 1.028
-(In general, freeze \214les are not w)117 136.2 R 1.027
-(orth doing unless your disks are much f)-.1 F 1.027(aster than your CPU;)-.1 F
-(this is seldom true an)117 148.2 Q 2.5(ym)-.15 G(ore.)217.13 148.2 Q 1.32
-(If your)142 164.4 R/F2 10/Times-Italic@0 SF(sendmail)3.82 E F1 -.1(wa)3.821 G
-3.821(sn).1 G 1.321(ot compiled with)238.832 164.4 R/F3 9/Times-Roman@0 SF(FR)
-3.821 E(OZENCONFIG)-.36 E F1 1.321(de\214ned, the)3.821 F F0(\255bz)3.821 E F1
-1.321(\215ag will be)3.821 F(ignored.)117 176.4 Q F0 2.5(1.3.7. /etc/r)102
-200.4 R(c)-.18 E F1 .155(It will be necessary to start up the sendmail daemon \
-when your system reboots.)142 216.6 R .155(This dae-)5.155 F 1.537
-(mon performs tw)117 228.6 R 4.037(of)-.1 G 1.537
-(unctions: it listens on the SMTP sock)201.221 228.6 R 1.537
-(et for connections \(to recei)-.1 F 1.838 -.15(ve m)-.25 H(ail).15 E .442(fro\
-m a remote system\) and it processes the queue periodically to insure that mai\
-l gets deli)117 240.6 R -.15(ve)-.25 G(red).15 E(when hosts come up.)117 252.6
-Q .505(Add the follo)142 268.8 R .505(wing lines to \231/etc/rc\232 \(or \231/\
-etc/rc.local\232 as appropriate\) in the area where it)-.25 F
-(is starting up the daemons:)117 280.8 Q
-(if [ \255f /usr/sbin/sendmail \255a \255f /etc/sendmail.cf ]; then)157 297 Q
-(\(cd /v)193 309 Q(ar/spool/mqueue; rm \255f [lnx]f*\))-.25 E
-(/usr/sbin/sendmail \255bd \255q30m &)193 321 Q(echo \255n ' sendmail' >/de)193
-333 Q(v/console)-.25 E<8c>157 345 Q .174
+(SMM:08-11)452.9 60 Q/F1 10/Times-Roman@0 SF .505(Add the follo)142 96 R .505(\
+wing lines to \231/etc/rc\232 \(or \231/etc/rc.local\232 as appropriate\) in t\
+he area where it)-.25 F(is starting up the daemons:)117 108 Q
+(if [ \255f /usr/sbin/sendmail \255a \255f /etc/sendmail.cf ]; then)157 124.2 Q
+(\(cd /v)193 136.2 Q(ar/spool/mqueue; rm \255f [lnx]f*\))-.25 E
+(/usr/sbin/sendmail \255bd \255q30m &)193 148.2 Q(echo \255n ' sendmail' >/de)
+193 160.2 Q(v/console)-.25 E<8c>157 172.2 Q .173
 (The \231cd\232 and \231rm\232 commands insure that all lock \214les ha)117
 (The \231cd\232 and \231rm\232 commands insure that all lock \214les ha)117
-361.2 R .473 -.15(ve b)-.2 H .173(een remo).15 F -.15(ve)-.15 G .173(d; e).15 F
-.173(xtraneous lock \214les)-.15 F .004
-(may be left around if the system goes do)117 373.2 R .005
-(wn in the middle of processing a message.)-.25 F .005(The line that)5.005 F
-2.294(actually in)117 385.2 R -.2(vo)-.4 G -.1(ke).2 G(s).1 E F2(sendmail)4.794
-E F1 2.294(has tw)4.794 F 4.794<6f8d>-.1 G 2.293
-(ags: \231\255bd\232 causes it to listen on the SMTP port, and)272.94 385.2 R
-(\231\255q30m\232 causes it to run the queue e)117 397.2 Q -.15(ve)-.25 G
-(ry half hour).15 E(.)-.55 E .378(Some people use a more comple)142 413.4 R
-2.879(xs)-.15 G .379(tartup script, remo)285.209 413.4 R .379
+188.4 R .474 -.15(ve b)-.2 H .174(een remo).15 F -.15(ve)-.15 G .174(d; e).15 F
+.174(xtraneous lock \214les)-.15 F .005
+(may be left around if the system goes do)117 200.4 R .004
+(wn in the middle of processing a message.)-.25 F .004(The line that)5.004 F
+2.293(actually in)117 212.4 R -.2(vo)-.4 G -.1(ke).2 G(s).1 E/F2 10
+/Times-Italic@0 SF(sendmail)4.793 E F1 2.293(has tw)4.793 F 4.793<6f8d>-.1 G
+2.293(ags: \231\255bd\232 causes it to listen on the SMTP port, and)272.935
+212.4 R(\231\255q30m\232 causes it to run the queue e)117 224.4 Q -.15(ve)-.25
+G(ry half hour).15 E(.)-.55 E .379(Some people use a more comple)142 240.6 R
+2.879(xs)-.15 G .379(tartup script, remo)285.214 240.6 R .378
 (ving zero length qf \214les and df \214les)-.15 F
 (ving zero length qf \214les and df \214les)-.15 F
-(for which there is no qf \214le.)117 425.4 Q -.15(Fo)5 G 2.5(re).15 G(xample:)
-253.9 425.4 Q EP
-%%Page: 10 7
+(for which there is no qf \214le.)117 252.6 Q -.15(Fo)5 G 2.5(re).15 G(xample:)
+253.9 252.6 Q EP
+%%Page: 12 7
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-10 Sendmail)72 60 R
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-12 Sendmail)72 60 R
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5(#r)157 96 S
 (emo)167.83 96 Q .3 -.15(ve z)-.15 H(ero length qf \214les).15 E(for qf)157 108
 Q(\214le in qf*)-.25 E(do)157 120 Q(if [ \255r $qf)193 132 Q(\214le ])-.25 E
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5(#r)157 96 S
 (emo)167.83 96 Q .3 -.15(ve z)-.15 H(ero length qf \214les).15 E(for qf)157 108
 Q(\214le in qf*)-.25 E(do)157 120 Q(if [ \255r $qf)193 132 Q(\214le ])-.25 E
@@ -696,363 +691,365 @@ Q(\214le in qf*)-.25 E(do)157 120 Q(if [ \255r $qf)193 132 Q(\214le ])-.25 E
 -.25 E(v/console)-.25 E(mv $tf)229 324 Q(\214le $qf)-.25 E(\214le)-.25 E(else)
 193 336 Q(echo \255n " <e)229 348 Q(xtra: $tf)-.15 E(\214le>" > /de)-.25 E
 (v/console)-.25 E(rm \255f $tf)229 360 Q(\214le)-.25 E<8c>193 372 Q(done)157
 -.25 E(v/console)-.25 E(mv $tf)229 324 Q(\214le $qf)-.25 E(\214le)-.25 E(else)
 193 336 Q(echo \255n " <e)229 348 Q(xtra: $tf)-.15 E(\214le>" > /de)-.25 E
 (v/console)-.25 E(rm \255f $tf)229 360 Q(\214le)-.25 E<8c>193 372 Q(done)157
-384 Q 2.5(#r)157 396 S(emo)167.83 396 Q .3 -.15(ve b)-.15 H(ogus qf \214les).15
-E(for df)157 408 Q(\214le in df*)-.25 E(do)157 420 Q(qf)193 432 Q
-(\214le=`echo $df)-.25 E(\214le | sed ')-.25 E(s/d/q/'`)-.55 E(if [ \255r $df)
-193 444 Q(\214le \255a ! \255f $qf)-.25 E(\214le ])-.25 E(then)193 456 Q
+384 Q 2.5(#r)157 396 S(emo)167.83 396 Q .3 -.15(ve d)-.15 H 2.5<668c>.15 G
+(les with no corresponding qf \214les)213.08 396 Q(for df)157 408 Q
+(\214le in df*)-.25 E(do)157 420 Q(qf)193 432 Q(\214le=`echo $df)-.25 E
+(\214le | sed ')-.25 E(s/d/q/'`)-.55 E(if [ \255r $df)193 444 Q
+(\214le \255a ! \255f $qf)-.25 E(\214le ])-.25 E(then)193 456 Q
 (echo \255n " <incomplete: $df)229 468 Q(\214le>" > /de)-.25 E(v/console)-.25 E
 (echo \255n " <incomplete: $df)229 468 Q(\214le>" > /de)-.25 E(v/console)-.25 E
-(rm \255f $df)229 480 Q(\214le)-.25 E<8c>193 492 Q(done)157 504 Q<8c>157 516 Q
-.756(If you are not running a v)142 536.4 R .755
-(ersion of UNIX that supports Berk)-.15 F(ele)-.1 E 3.255(yT)-.15 G(CP/IP)
-416.725 536.4 Q 3.255(,d)-1.11 G 3.255(on)450.27 536.4 S .755(ot include)
-463.525 536.4 R(the)117 548.4 Q F0(\255bd)2.5 E F1(\215ag.)2.5 E F0 2.5
-(1.3.8. /usr/lib/sendmail.hf)102 572.4 R F1 2.078
-(This is the help \214le used by the SMTP)142 588.6 R F0(HELP)4.578 E F1 4.578
+(mv $df)229 480 Q(\214le `echo $df)-.25 E(\214le | sed ')-.25 E(s/d/D/'`)-.55 E
+<8c>193 492 Q(done)157 504 Q 2.5(#a)157 516 S(nnounce \214les that ha)168.94
+516 Q .3 -.15(ve b)-.2 H(een sa).15 E -.15(ve)-.2 G 2.5(dd).15 G
+(uring disaster reco)314.32 516 Q -.15(ve)-.15 G(ry).15 E(for xf)157 528 Q
+(\214le in [A-Z]f*)-.25 E(do)157 540 Q(echo \255n " <panic: $xf)193 552 Q
+(\214le>" > /de)-.25 E(v/console)-.25 E(done)157 564 Q .755
+(If you are not running a v)142 584.4 R .755(ersion of UNIX that supports Berk)
+-.15 F(ele)-.1 E 3.256(yT)-.15 G(CP/IP)416.722 584.4 Q 3.256(,d)-1.11 G 3.256
+(on)450.268 584.4 S .756(ot include)463.524 584.4 R(the)117 596.4 Q F0(\255bd)
+2.5 E F1(\215ag.)2.5 E F0 2.5(1.3.7. /usr/lib/sendmail.hf)102 620.4 R F1 2.078
+(This is the help \214le used by the SMTP)142 636.6 R F0(HELP)4.578 E F1 4.578
 (command. It)4.578 F 2.078(should be copied from)4.578 F
 (command. It)4.578 F 2.078(should be copied from)4.578 F
-(\231lib/sendmail.hf\232:)117 600.6 Q(cp lib/sendmail.hf /usr/lib)157 616.8 Q
-(The actual path of this \214le is de\214ned in the)117 633 Q F0(H)2.5 E F1
+(\231lib/sendmail.hf\232:)117 648.6 Q(cp lib/sendmail.hf /usr/lib)157 664.8 Q
+(The actual path of this \214le is de\214ned in the)117 681 Q F0(H)2.5 E F1
 (option of the)2.5 E/F2 10/Times-Italic@0 SF(sendmail.cf)2.5 E F1(\214le.)2.5 E
 (option of the)2.5 E/F2 10/Times-Italic@0 SF(sendmail.cf)2.5 E F1(\214le.)2.5 E
-F0 2.5(1.3.9. /etc/sendmail.st)102 657 R F1 3.04
-(If you wish to collect statistics about your mail traf)142 673.2 R 3.04
-(\214c, you should create the \214le)-.25 F(\231/etc/sendmail.st\232:)117 685.2
-Q(cp /de)157 701.4 Q(v/null /etc/sendmail.st)-.25 E(chmod 666 /etc/sendmail.st)
-157 713.4 Q EP
-%%Page: 11 8
+EP
+%%Page: 13 8
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-11)452.9 60 Q/F1 10/Times-Roman@0 SF .715(This \214le does not gro)117
-96 R 4.516 -.65(w. I)-.25 H 3.216(ti).65 G 3.216(sp)231.502 96 S .716
-(rinted with the program \231mailstats/mailstats.c.)243.608 96 R 5.716<9a54>-.7
-G .716(he actual path)447.028 96 R(of this \214le is de\214ned in the)117 108 Q
-F0(S)2.5 E F1(option of the)2.5 E/F2 10/Times-Italic@0 SF(sendmail.cf)2.5 E F1
-(\214le.)2.5 E F0 2.5(1.3.10. /usr/ucb/newaliases)102 132 R F1(If)142 148.2 Q
-F2(sendmail)3.256 E F1 .756(is in)3.256 F -.2(vo)-.4 G -.1(ke).2 G 3.256(da).1
-G 3.256<7399>240.424 148.2 S(ne)252.01 148.2 Q -.1(wa)-.25 G(liases,).1 E 3.255
-<9a69>-.7 G 3.255(tw)307.255 148.2 S .755(ill simulate the)320.51 148.2 R F0
-(\255bi)3.255 E F1 .755(\215ag \(i.e., will reb)3.255 F .755(uild the)-.2 F
-(alias database; see belo)117 160.2 Q 2.5(w\). This)-.25 F
-(should be a link to /usr/sbin/sendmail.)2.5 E F0 2.5(1.3.11. /usr/ucb/mailq)
-102 184.2 R F1(If)142 200.4 Q F2(sendmail)3.439 E F1 .939(is in)3.439 F -.2(vo)
--.4 G -.1(ke).2 G 3.439(da).1 G 3.439<7399>241.156 200.4 S(mailq,)252.925 200.4
-Q 3.439<9a69>-.7 G 3.439(tw)288.164 200.4 S .939(ill simulate the)301.603 200.4
-R F0(\255bp)3.439 E F1 .94(\215ag \(i.e.,)3.44 F F2(sendmail)3.44 E F1 .94
-(will print)3.44 F(the contents of the mail queue; see belo)117 212.4 Q 2.5
-(w\). This)-.25 F(should be a link to /usr/sbin/sendmail.)2.5 E F0 2.5
-(2. NORMAL)72 236.4 R(OPERA)2.5 E(TIONS)-.95 E 2.5(2.1. `)87 260.4 R(`Quick')
--.63 E 2.5('C)-.63 G(on\214guration Startup)154.9 260.4 Q F1 .523(if the)127
-276.6 R/F3 9/Times-Roman@0 SF(FR)3.023 E(OZENCONFIG)-.36 E F1 .523
-(option is included during compilation, a precompiled \(`)3.023 F(`frozen')-.74
-E .522('\) v)-.74 F(er)-.15 E(-)-.2 E .068
-(sion of the con\214guration \214le can be created using the)102 288.6 R F0
-(\255bz)2.568 E F1 2.568(\215ag. This)2.568 F .069(is really only w)2.568 F
-.069(orthwhile doing)-.1 F .432(if you are on a slo)102 300.6 R 2.932(wp)-.25 G
-.432(rocessor with a relati)190.994 300.6 R -.15(ve)-.25 G .432(ly f).15 F .432
-(ast I/O system \(a V)-.1 F .432(AX 11/750 is a good e)-1.35 F(xample\).)-.15 E
-.131(Since it creates other problems, I recommend ag)102 312.6 R .132
-(ainst using the frozen con\214guration on most current)-.05 F(architectures.)
-102 324.6 Q 1.6 -.8(To c)127 340.8 T(reate the freeze \214le, use).8 E
-(/usr/sbin/sendmail \255bz)142 357 Q .762
-(This creates the frozen con\214guration \214le)102 373.2 R F2
-(/etc/sendmail.fc)3.262 E F1 5.761(.T)C .761(his \214le is an image of)348.403
-373.2 R F2(sendmail)3.261 E F1 1.861 -.55('s d)D(ata).55 E .692
-(space after reading in the con\214guration \214le.)102 385.2 R .693
-(If this \214le e)5.692 F .693(xists, it is used instead of)-.15 F F2
-(/etc/sendmail.cf)3.193 E(sendmail.fc)102 397.2 Q F1(must be reb)2.5 E
-(uilt manually e)-.2 E -.15(ve)-.25 G(ry time).15 E F2(sendmail.cf)2.5 E F1
-(is changed.)2.5 E .953(The frozen con\214guration \214le will be ignored if a)
-127 413.4 R F0<ad43>3.452 E F1 .952
-(\215ag is speci\214ed or if sendmail detects)3.452 F(that it is out of date.)
-102 425.4 Q(Ho)5 E(we)-.25 E -.15(ve)-.25 G .8 -.4(r, t).15 H
-(he heuristics are not strong so this should not be trusted.).4 E F0 2.5
-(2.2. The)87 449.4 R(System Log)2.5 E F1(The system log is supported by the)127
-465.6 Q F2(syslo)2.5 E(gd)-.1 E F1(\(8\) program.)1.666 E F0 2.5(2.2.1. F)102
-489.6 R(ormat)-.25 E F1 .574(Each line in the system log consists of a timesta\
-mp, the name of the machine that gener)142 505.8 R(-)-.2 E .849
-(ated it \(for logging from se)117 517.8 R -.15(ve)-.25 G .849(ral machines o)
-.15 F -.15(ve)-.15 G 3.349(rt).15 G .848(he local area netw)316.942 517.8 R
-.848(ork\), the w)-.1 F .848(ord \231sendmail:\232,)-.1 F(and a message.)117
-529.8 Q F0 2.5(2.2.2. Le)102 553.8 R -.1(ve)-.15 G(ls).1 E F1 .204(If you ha)
-142 570 R -.15(ve)-.2 G F2(syslo)2.854 E(gd)-.1 E F1 .204(\(8\) or an equi)
-1.666 F -.25(va)-.25 G .205(lent installed, you will be able to do logging.).25
-F .205(There is)5.205 F 2.788(al)117 582 S(ar)127.008 582 Q .287
+(SMM:08-13)452.9 60 Q 2.5(1.3.8. /etc/sendmail.st)102 96 R/F1 10/Times-Roman@0
+SF 3.04(If you wish to collect statistics about your mail traf)142 112.2 R 3.04
+(\214c, you should create the \214le)-.25 F(\231/etc/sendmail.st\232:)117 124.2
+Q(cp /de)157 140.4 Q(v/null /etc/sendmail.st)-.25 E(chmod 666 /etc/sendmail.st)
+157 152.4 Q .716(This \214le does not gro)117 168.6 R 4.516 -.65(w. I)-.25 H
+3.216(ti).65 G 3.216(sp)231.506 168.6 S .716
+(rinted with the program \231mailstats/mailstats.c.)243.612 168.6 R 5.715<9a54>
+-.7 G .715(he actual path)447.03 168.6 R(of this \214le is de\214ned in the)117
+180.6 Q F0(S)2.5 E F1(option of the)2.5 E/F2 10/Times-Italic@0 SF(sendmail.cf)
+2.5 E F1(\214le.)2.5 E F0 2.5(1.3.9. /usr/bin/newaliases)102 204.6 R F1(If)142
+220.8 Q F2(sendmail)3.255 E F1 .755(is in)3.255 F -.2(vo)-.4 G -.1(ke).2 G
+3.255(da).1 G 3.255<7399>240.42 220.8 S(ne)252.005 220.8 Q -.1(wa)-.25 G
+(liases,).1 E 3.255<9a69>-.7 G 3.255(tw)307.25 220.8 S .755(ill simulate the)
+320.505 220.8 R F0(\255bi)3.255 E F1 .756(\215ag \(i.e., will reb)3.256 F .756
+(uild the)-.2 F(alias database; see belo)117 232.8 Q 2.5(w\). This)-.25 F
+(should be a link to /usr/sbin/sendmail.)2.5 E F0 2.5(1.3.10. /usr/bin/mailq)
+102 256.8 R F1(If)142 273 Q F2(sendmail)3.44 E F1 .94(is in)3.44 F -.2(vo)-.4 G
+-.1(ke).2 G 3.44(da).1 G 3.44<7399>241.16 273 S(mailq,)252.93 273 Q 3.439<9a69>
+-.7 G 3.439(tw)288.169 273 S .939(ill simulate the)301.608 273 R F0(\255bp)
+3.439 E F1 .939(\215ag \(i.e.,)3.439 F F2(sendmail)3.439 E F1 .939(will print)
+3.439 F(the contents of the mail queue; see belo)117 285 Q 2.5(w\). This)-.25 F
+(should be a link to /usr/sbin/sendmail.)2.5 E F0 2.5(2. NORMAL)72 309 R(OPERA)
+2.5 E(TIONS)-.95 E 2.5(2.1. The)87 333 R(System Log)2.5 E F1
+(The system log is supported by the)127 349.2 Q F2(syslo)2.5 E(gd)-.1 E F1
+(\(8\) program.)1.666 E F0 2.5(2.1.1. F)102 373.2 R(ormat)-.25 E F1 .574(Each \
+line in the system log consists of a timestamp, the name of the machine that g\
+ener)142 389.4 R(-)-.2 E .849(ated it \(for logging from se)117 401.4 R -.15
+(ve)-.25 G .849(ral machines o).15 F -.15(ve)-.15 G 3.349(rt).15 G .848
+(he local area netw)316.942 401.4 R .848(ork\), the w)-.1 F .848
+(ord \231sendmail:\232,)-.1 F(and a message.)117 413.4 Q F0 2.5(2.1.2. Le)102
+437.4 R -.1(ve)-.15 G(ls).1 E F1 .204(If you ha)142 453.6 R -.15(ve)-.2 G F2
+(syslo)2.854 E(gd)-.1 E F1 .204(\(8\) or an equi)1.666 F -.25(va)-.25 G .205
+(lent installed, you will be able to do logging.).25 F .205(There is)5.205 F
+2.788(al)117 465.6 S(ar)127.008 465.6 Q .287
 (ge amount of information that can be logged.)-.18 F .287
 (The log is arranged as a succession of le)5.287 F -.15(ve)-.25 G(ls.).15 E .65
 (ge amount of information that can be logged.)-.18 F .287
 (The log is arranged as a succession of le)5.287 F -.15(ve)-.25 G(ls.).15 E .65
-(At the lo)117 594 R .65(west le)-.25 F -.15(ve)-.25 G 3.15(lo).15 G .65(nly e)
-201.72 594 R .651(xtremely strange situations are logged.)-.15 F .651
+(At the lo)117 477.6 R .65(west le)-.25 F -.15(ve)-.25 G 3.15(lo).15 G .65
+(nly e)201.72 477.6 R .651(xtremely strange situations are logged.)-.15 F .651
 (At the highest le)5.651 F -.15(ve)-.25 G .651(l, e).15 F -.15(ve)-.25 G 3.151
 (At the highest le)5.651 F -.15(ve)-.25 G .651(l, e).15 F -.15(ve)-.25 G 3.151
-(nt).15 G(he)494.56 594 Q .826(most mundane and uninteresting e)117 606 R -.15
-(ve)-.25 G .825(nts are recorded for posterity).15 F 5.825(.A)-.65 G 3.325(sac)
-400.27 606 S(on)419.69 606 Q -.15(ve)-.4 G .825(ntion, log le).15 F -.15(ve)
--.25 G(ls).15 E .2(under ten are considered generally \231useful;\232 log le)
-117 618 R -.15(ve)-.25 G .201(ls abo).15 F .501 -.15(ve 6)-.15 H 2.701(4a).15 G
-.201(re reserv)381.566 618 R .201(ed for deb)-.15 F .201(ugging pur)-.2 F(-)-.2
-E 2.5(poses. Le)117 630 R -.15(ve)-.25 G(ls from 11\25564 are reserv).15 E
+(nt).15 G(he)494.56 477.6 Q .826(most mundane and uninteresting e)117 489.6 R
+-.15(ve)-.25 G .825(nts are recorded for posterity).15 F 5.825(.A)-.65 G 3.325
+(sac)400.27 489.6 S(on)419.69 489.6 Q -.15(ve)-.4 G .825(ntion, log le).15 F
+-.15(ve)-.25 G(ls).15 E .2
+(under ten are considered generally \231useful;\232 log le)117 501.6 R -.15(ve)
+-.25 G .201(ls abo).15 F .501 -.15(ve 6)-.15 H 2.701(4a).15 G .201(re reserv)
+381.566 501.6 R .201(ed for deb)-.15 F .201(ugging pur)-.2 F(-)-.2 E 2.5
+(poses. Le)117 513.6 R -.15(ve)-.25 G(ls from 11\25564 are reserv).15 E
 (ed for v)-.15 E(erbose information that some sites might w)-.15 E(ant.)-.1 E
 (ed for v)-.15 E(erbose information that some sites might w)-.15 E(ant.)-.1 E
-2.5(Ac)142 646.2 S(omplete description of the log le)156.16 646.2 Q -.15(ve)
--.25 G(ls is gi).15 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(ns)340.35 646.2 S
-(ection 4.6.)351.74 646.2 Q F0 2.5(2.3. The)87 670.2 R(Mail Queue)2.5 E F1 .263
-(The mail queue should be processed transparently)127 686.4 R 5.262(.H)-.65 G
--.25(ow)342.868 686.4 S -2.15 -.25(ev e).25 H 1.062 -.4(r, y).25 H .262
-(ou may \214nd that manual inter).4 F(-)-.2 E -.15(ve)102 698.4 S .081
-(ntion is sometimes necessary).15 F 5.081(.F)-.65 G .081(or e)240.254 698.4 R
+2.5(Ac)142 529.8 S(omplete description of the log le)156.16 529.8 Q -.15(ve)
+-.25 G(ls is gi).15 E -.15(ve)-.25 G 2.5(ni).15 G 2.5(ns)340.35 529.8 S
+(ection 4.6.)351.74 529.8 Q F0 2.5(2.2. The)87 553.8 R(Mail Queue)2.5 E F1 .263
+(The mail queue should be processed transparently)127 570 R 5.262(.H)-.65 G
+-.25(ow)342.868 570 S -2.15 -.25(ev e).25 H 1.062 -.4(r, y).25 H .262
+(ou may \214nd that manual inter).4 F(-)-.2 E -.15(ve)102 582 S .081
+(ntion is sometimes necessary).15 F 5.081(.F)-.65 G .081(or e)240.254 582 R
 .081(xample, if a major host is do)-.15 F .081
 .081(xample, if a major host is do)-.15 F .081
-(wn for a period of time the queue)-.25 F .268(may become clogged.)102 710.4 R
-.268(Although sendmail ought to reco)5.268 F -.15(ve)-.15 G 2.768(rg).15 G .268
-(racefully when the host comes up, you)348.254 710.4 R
-(may \214nd performance unacceptably bad in the meantime.)102 722.4 Q EP
-%%Page: 12 9
+(wn for a period of time the queue)-.25 F .268(may become clogged.)102 594 R
+(Although)5.268 E F2(sendmail)2.768 E F1 .268(ought to reco)2.768 F -.15(ve)
+-.15 G 2.768(rg).15 G .268(racefully when the host comes up, you)348.254 594 R
+(may \214nd performance unacceptably bad in the meantime.)102 606 Q F0 2.5
+(2.2.1. Printing)102 630 R(the queue)2.5 E F1 .526
+(The contents of the queue can be printed using the)142 646.2 R F2(mailq)3.026
+E F1 .526(command \(or by specifying the)3.026 F F0(\255bp)117 658.2 Q F1
+(\215ag to)2.5 E F2(sendmail)2.5 E F1(\):)A(mailq)157 674.4 Q 1.673
+(This will produce a listing of the queue id')117 690.6 R 1.673
+(s, the size of the message, the date the message)-.55 F
+(entered the queue, and the sender and recipients.)117 702.6 Q EP
+%%Page: 14 9
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-12 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E 2.5(2.3.1. Printing)102 96 R(the queue)
-2.5 E/F1 10/Times-Roman@0 SF .526
-(The contents of the queue can be printed using the)142 112.2 R/F2 10
-/Times-Italic@0 SF(mailq)3.026 E F1 .526(command \(or by specifying the)3.026 F
-F0(\255bp)117 124.2 Q F1(\215ag to sendmail\):)2.5 E(mailq)157 140.4 Q 1.673
-(This will produce a listing of the queue id')117 156.6 R 1.673
-(s, the size of the message, the date the message)-.55 F
-(entered the queue, and the sender and recipients.)117 168.6 Q F0 2.5(2.3.2. F)
-102 192.6 R(or)-.25 E(cing the queue)-.18 E F2(Sendmail)142 208.8 Q F1 1.137
-(should run the queue automatically at interv)3.637 F 3.638(als. The)-.25 F
-1.138(algorithm is to read and)3.638 F .355
-(sort the queue, and then to attempt to process all jobs in order)117 220.8 R
-5.355(.W)-.55 G .355(hen it attempts to run the job,)384.37 220.8 R F2
-(sendmail)117 232.8 Q F1(\214rst checks to see if the job is lock)2.5 E 2.5
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-14 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E 2.5(2.2.2. F)102 96 R(or)-.25 E
+(cing the queue)-.18 E/F1 10/Times-Italic@0 SF(Sendmail)142 112.2 Q/F2 10
+/Times-Roman@0 SF 1.137(should run the queue automatically at interv)3.637 F
+3.638(als. The)-.25 F 1.138(algorithm is to read and)3.638 F .355
+(sort the queue, and then to attempt to process all jobs in order)117 124.2 R
+5.355(.W)-.55 G .355(hen it attempts to run the job,)384.37 124.2 R F1
+(sendmail)117 136.2 Q F2(\214rst checks to see if the job is lock)2.5 E 2.5
 (ed. If)-.1 F(so, it ignores the job)2.5 E(.)-.4 E .338
 (ed. If)-.1 F(so, it ignores the job)2.5 E(.)-.4 E .338
-(There is no attempt to insure that only one queue processor e)142 249 R .338
-(xists at an)-.15 F 2.838(yt)-.15 G .339(ime, since there)440.282 249 R .095
-(is no guarantee that a job cannot tak)117 261 R 2.595(ef)-.1 G(ore)272.07 261
-Q -.15(ve)-.25 G 2.595(rt).15 G 2.595(op)302.585 261 S .094(rocess \(ho)315.18
-261 R(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F2(sendmail)2.994 E F1 .094
-(does include heuris-)2.594 F 1.086
+(There is no attempt to insure that only one queue processor e)142 152.4 R .338
+(xists at an)-.15 F 2.838(yt)-.15 G .339(ime, since there)440.282 152.4 R .095
+(is no guarantee that a job cannot tak)117 164.4 R 2.595(ef)-.1 G(ore)272.07
+164.4 Q -.15(ve)-.25 G 2.595(rt).15 G 2.595(op)302.585 164.4 S .094
+(rocess \(ho)315.18 164.4 R(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F1(sendmail)
+2.994 E F2 .094(does include heuris-)2.594 F 1.086
 (tics to try to abort jobs that are taking absurd amounts of time; technically)
 (tics to try to abort jobs that are taking absurd amounts of time; technically)
-117 273 R 3.587(,t)-.65 G 1.087(his violates RFC)435.146 273 R .462(821, b)117
-285 R .461(ut is blessed by RFC 1123\).)-.2 F .461
+117 176.4 R 3.587(,t)-.65 G 1.087(his violates RFC)435.146 176.4 R .462(821, b)
+117 188.4 R .461(ut is blessed by RFC 1123\).)-.2 F .461
 (Due to the locking algorithm, it is impossible for one job to)5.461 F 1.086
 (Due to the locking algorithm, it is impossible for one job to)5.461 F 1.086
-(freeze the entire queue.)117 297 R(Ho)6.086 E(we)-.25 E -.15(ve)-.25 G 1.886
--.4(r, a).15 H 3.586(nu).4 G(ncooperati)279.346 297 Q 1.386 -.15(ve r)-.25 H
-1.086(ecipient host or a program recipient that).15 F(ne)117 309 Q -.15(ve)-.25
-G 3.351(rr).15 G .851(eturns can accumulate man)145.491 309 R 3.351(yp)-.15 G
-.851(rocesses in your system.)269.825 309 R(Unfortunately)5.851 E 3.351(,t)-.65
-G .85(here is no com-)439.52 309 R(pletely general w)117 321 Q(ay to solv)-.1 E
-2.5(et)-.15 G(his.)234.23 321 Q .082
-(In some cases, you may \214nd that a major host going do)142 337.2 R .083
-(wn for a couple of days may create)-.25 F 2.925(ap)117 349.2 S(rohibiti)
-129.365 349.2 Q -.15(ve)-.25 G .425(ly lar).15 F .425(ge queue.)-.18 F .424
-(This will result in)5.425 F F2(sendmail)2.924 E F1 .424
+(freeze the entire queue.)117 200.4 R(Ho)6.086 E(we)-.25 E -.15(ve)-.25 G 1.886
+-.4(r, a).15 H 3.586(nu).4 G(ncooperati)279.346 200.4 Q 1.386 -.15(ve r)-.25 H
+1.086(ecipient host or a program recipient that).15 F(ne)117 212.4 Q -.15(ve)
+-.25 G 3.351(rr).15 G .851(eturns can accumulate man)145.491 212.4 R 3.351(yp)
+-.15 G .851(rocesses in your system.)269.825 212.4 R(Unfortunately)5.851 E
+3.351(,t)-.65 G .85(here is no com-)439.52 212.4 R(pletely general w)117 224.4
+Q(ay to solv)-.1 E 2.5(et)-.15 G(his.)234.23 224.4 Q .082
+(In some cases, you may \214nd that a major host going do)142 240.6 R .083
+(wn for a couple of days may create)-.25 F 2.925(ap)117 252.6 S(rohibiti)
+129.365 252.6 Q -.15(ve)-.25 G .425(ly lar).15 F .425(ge queue.)-.18 F .424
+(This will result in)5.425 F F1(sendmail)2.924 E F2 .424
 (spending an inordinate amount of time)2.924 F 1.084(sorting the queue.)117
 (spending an inordinate amount of time)2.924 F 1.084(sorting the queue.)117
-361.2 R 1.084(This situation can be \214x)6.084 F 1.084(ed by mo)-.15 F 1.085
-(ving the queue to a temporary place and)-.15 F .023(creating a ne)117 373.2 R
-2.523(wq)-.25 G 2.523(ueue. The)182.629 373.2 R .022
+264.6 R 1.084(This situation can be \214x)6.084 F 1.084(ed by mo)-.15 F 1.085
+(ving the queue to a temporary place and)-.15 F .023(creating a ne)117 276.6 R
+2.523(wq)-.25 G 2.523(ueue. The)182.629 276.6 R .022
 (old queue can be run later when the of)2.523 F .022
 (old queue can be run later when the of)2.523 F .022
-(fending host returns to service.)-.25 F 1.6 -.8(To d)142 389.4 T 2.5(ot).8 G
-(his, it is acceptable to mo)170.09 389.4 Q .3 -.15(ve t)-.15 H
-(he entire queue directory:).15 E(cd /v)157 405.6 Q(ar/spool)-.25 E
-(mv mqueue omqueue; mkdir mqueue; chmod 700 mqueue)157 417.6 Q -1.1(Yo)117
-433.8 S 2.708(us)1.1 G .208(hould then kill the e)139.718 433.8 R .209
+(fending host returns to service.)-.25 F 1.6 -.8(To d)142 292.8 T 2.5(ot).8 G
+(his, it is acceptable to mo)170.09 292.8 Q .3 -.15(ve t)-.15 H
+(he entire queue directory:).15 E(cd /v)157 309 Q(ar/spool)-.25 E
+(mv mqueue omqueue; mkdir mqueue; chmod 700 mqueue)157 321 Q -1.1(Yo)117 337.2
+S 2.708(us)1.1 G .208(hould then kill the e)139.718 337.2 R .209
 (xisting daemon \(since it will still be processing in the old queue direc-)
 (xisting daemon \(since it will still be processing in the old queue direc-)
--.15 F(tory\) and create a ne)117 445.8 Q 2.5(wd)-.25 G(aemon.)213.1 445.8 Q
-1.6 -.8(To r)142 462 T(un the old mail queue, run the follo).8 E(wing command:)
--.25 E(/usr/sbin/sendmail \255oQ/v)157 478.2 Q(ar/spool/omqueue \255q)-.25 E
-(The)117 494.4 Q F0(\255oQ)2.868 E F1 .367
+-.15 F(tory\) and create a ne)117 349.2 Q 2.5(wd)-.25 G(aemon.)213.1 349.2 Q
+1.6 -.8(To r)142 365.4 T(un the old mail queue, run the follo).8 E
+(wing command:)-.25 E(/usr/sbin/sendmail \255oQ/v)157 381.6 Q
+(ar/spool/omqueue \255q)-.25 E(The)117 397.8 Q F0(\255oQ)2.868 E F2 .367
 (\215ag speci\214es an alternate queue directory and the)2.868 F F0<ad71>2.867
 (\215ag speci\214es an alternate queue directory and the)2.868 F F0<ad71>2.867
-E F1 .367(\215ag says to just run e)2.867 F -.15(ve)-.25 G .367(ry job in).15 F
-.593(the queue.)117 506.4 R .593(If you ha)5.593 F .893 -.15(ve a t)-.2 H
-(endenc).15 E 3.093(yt)-.15 G -2.1 -.25(ow a)263.111 506.4 T .593(rd v).25 F
--.1(oy)-.2 G .593(eurism, you can use the).1 F F0<ad76>3.094 E F1 .594
-(\215ag to w)3.094 F .594(atch what is)-.1 F(going on.)117 518.4 Q
-(When the queue is \214nally emptied, you can remo)142 534.6 Q .3 -.15(ve t)
--.15 H(he directory:).15 E(rmdir /v)157 550.8 Q(ar/spool/omqueue)-.25 E F0 2.5
-(2.4. The)87 579 R(Alias Database)2.5 E F1 .361(The alias database e)127 595.2
-R .361(xists in tw)-.15 F 2.861(of)-.1 G 2.861(orms. One)261.116 595.2 R .361
-(is a te)2.861 F .36(xt form, maintained in the \214le)-.15 F F2(/etc/aliases.)
-2.86 E F1(The aliases are of the form)102 607.2 Q(name: name1, name2, ...)142
-623.4 Q(Only local names may be aliased; e.g.,)102 639.6 Q(eric@prep.ai.MIT)142
-655.8 Q(.EDU: eric@CS.Berk)-.74 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E .348
-(will not ha)102 672 R .648 -.15(ve t)-.2 H .348(he desired ef).15 F 2.849
-(fect. Aliases)-.25 F .349(may be continued by starting an)2.849 F 2.849(yc)
--.15 G .349(ontinuation lines with a)408.783 672 R(space or a tab)102 684 Q 5
-(.B)-.4 G(lank lines and lines be)170.47 684 Q
+E F2 .367(\215ag says to just run e)2.867 F -.15(ve)-.25 G .367(ry job in).15 F
+.593(the queue.)117 409.8 R .593(If you ha)5.593 F .893 -.15(ve a t)-.2 H
+(endenc).15 E 3.093(yt)-.15 G -2.1 -.25(ow a)263.111 409.8 T .593(rd v).25 F
+-.1(oy)-.2 G .593(eurism, you can use the).1 F F0<ad76>3.094 E F2 .594
+(\215ag to w)3.094 F .594(atch what is)-.1 F(going on.)117 421.8 Q
+(When the queue is \214nally emptied, you can remo)142 438 Q .3 -.15(ve t)-.15
+H(he directory:).15 E(rmdir /v)157 454.2 Q(ar/spool/omqueue)-.25 E F0 2.5
+(2.3. The)87 482.4 R(Alias Database)2.5 E F2 .361(The alias database e)127
+498.6 R .361(xists in tw)-.15 F 2.861(of)-.1 G 2.861(orms. One)261.116 498.6 R
+.361(is a te)2.861 F .36(xt form, maintained in the \214le)-.15 F F1
+(/etc/aliases.)2.86 E F2(The aliases are of the form)102 510.6 Q
+(name: name1, name2, ...)142 526.8 Q(Only local names may be aliased; e.g.,)102
+543 Q(eric@prep.ai.MIT)142 559.2 Q(.EDU: eric@CS.Berk)-.74 E(ele)-.1 E -.65(y.)
+-.15 G(EDU).65 E .348(will not ha)102 575.4 R .648 -.15(ve t)-.2 H .348
+(he desired ef).15 F 2.849(fect. Aliases)-.25 F .349
+(may be continued by starting an)2.849 F 2.849(yc)-.15 G .349
+(ontinuation lines with a)408.783 575.4 R(space or a tab)102 587.4 Q 5(.B)-.4 G
+(lank lines and lines be)170.47 587.4 Q
 (ginning with a sharp sign \(\231#\232\) are comments.)-.15 E 1.593
 (ginning with a sharp sign \(\231#\232\) are comments.)-.15 E 1.593
-(The second form is processed by the)127 700.2 R F2(dbm)4.093 E F1 1.593
-(\(3\) \(or)1.666 F F2(db)4.093 E F1 1.593(\(3\)\) library)1.666 F 6.593(.T)
--.65 G 1.593(his form is in the \214les)409.085 700.2 R F2(/etc/aliases.dir)102
-712.2 Q F1(and)3.028 E F2(/etc/aliases.pa)3.028 E -.15(g.)-.1 G F1 .528
-(This is the form that)5.678 F F2(sendmail)3.029 E F1 .529
-(actually uses to resolv)3.029 F 3.029(ea)-.15 G(liases.)479.28 712.2 Q
-(This technique is used to impro)102 724.2 Q .3 -.15(ve p)-.15 H(erformance.)
-.15 E EP
-%%Page: 13 10
+(The second form is processed by the)127 603.6 R F1(dbm)4.093 E F2 1.593
+(\(3\) \(or)1.666 F F1(db)4.093 E F2 1.593(\(3\)\) library)1.666 F 6.593(.T)
+-.65 G 1.593(his form is in the \214les)409.085 603.6 R F1(/etc/aliases.dir)102
+615.6 Q F2(and)3.028 E F1(/etc/aliases.pa)3.028 E -.15(g.)-.1 G F2 .528
+(This is the form that)5.678 F F1(sendmail)3.029 E F2 .529
+(actually uses to resolv)3.029 F 3.029(ea)-.15 G(liases.)479.28 615.6 Q
+(This technique is used to impro)102 627.6 Q .3 -.15(ve p)-.15 H(erformance.)
+.15 E -1.1(Yo)127 643.8 S 2.5(uc)1.1 G(an also use)150.06 643.8 Q/F3 9
+/Times-Roman@0 SF(NIS)2.5 E F2(-based alias \214les.)A -.15(Fo)5 G 2.5(re).15 G
+(xample, the speci\214cation:)305.069 643.8 Q -.35(OA)142 660 S(/etc/aliases)
+.35 E -.35(OA)142 672 S(nis:mail.aliases@my).35 E(.nis.domain)-.65 E(will \214\
+rst search the /etc/aliases \214le and then the map named \231mail.aliases\232\
+ in \231my)102 688.2 Q(.nis.domain\232.)-.65 E
+(Additional \215ags can be added after the colon e)127 704.4 Q(xactly lik)-.15
+E 2.5(ea)-.1 G F0(K)A F2(line \212 for e)2.5 E(xample:)-.15 E EP
+%%Page: 15 10
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-13)452.9 60 Q/F1 10/Times-Roman@0 SF -1.1(Yo)127 96 S 2.5(uc)1.1 G
-(an also use)150.06 96 Q/F2 9/Times-Roman@0 SF(NIS)2.5 E F1
-(-based alias \214les.)A -.15(Fo)5 G 2.5(re).15 G(xample, the speci\214cation:)
-305.069 96 Q -.35(OA)142 112.2 S(/etc/aliases).35 E -.35(OA)142 124.2 S
-(nis:mail.aliases@my).35 E(.nis.domain)-.65 E(will \214rst search the /etc/ali\
-ases \214le and then the map named \231mail.aliases\232 in \231my)102 140.4 Q
-(.nis.domain\232.)-.65 E(Additional \215ags can be added after the colon e)127
-156.6 Q(xactly lik)-.15 E 2.5(ea)-.1 G F0(K)A F1(line \212 for e)2.5 E(xample:)
--.15 E -.35(OA)142 172.8 S(nis:-N mail.aliases@my).35 E(.nis.domain)-.65 E
-(will search the appropriate NIS map and al)102 189 Q -.1(wa)-.1 G
-(ys include null bytes in the k).1 E -.15(ey)-.1 G(.)-.5 E F0 2.5(2.4.1. Reb)
-102 213 R(uilding the alias database)-.2 E F1 .542(The DB or DBM v)142 229.2 R
-.542(ersion of the database may be reb)-.15 F .542(uilt e)-.2 F .542
-(xplicitly by e)-.15 F -.15(xe)-.15 G .542(cuting the com-).15 F(mand)117 241.2
-Q(ne)157 257.4 Q -.1(wa)-.25 G(liases).1 E(This is equi)117 273.6 Q -.25(va)
--.25 G(lent to gi).25 E(ving)-.25 E/F3 10/Times-Italic@0 SF(sendmail)2.5 E F1
-(the)2.5 E F0(\255bi)2.5 E F1(\215ag:)2.5 E(/usr/sbin/sendmail \255bi)157 289.8
-Q .259(If the \231D\232 option is speci\214ed in the con\214guration,)142 310.2
-R F3(sendmail)2.759 E F1 .26(will reb)2.759 F .26(uild the alias database)-.2 F
-1.921(automatically if possible when it is out of date.)117 322.2 R(Auto-reb)
+(SMM:08-15)452.9 60 Q/F1 10/Times-Roman@0 SF -.35(OA)142 96 S
+(nis:-N mail.aliases@my).35 E(.nis.domain)-.65 E
+(will search the appropriate NIS map and al)102 112.2 Q -.1(wa)-.1 G
+(ys include null bytes in the k).1 E -.15(ey)-.1 G(.)-.5 E F0 2.5(2.3.1. Reb)
+102 136.2 R(uilding the alias database)-.2 E F1 .542(The DB or DBM v)142 152.4
+R .542(ersion of the database may be reb)-.15 F .542(uilt e)-.2 F .542
+(xplicitly by e)-.15 F -.15(xe)-.15 G .542(cuting the com-).15 F(mand)117 164.4
+Q(ne)157 180.6 Q -.1(wa)-.25 G(liases).1 E(This is equi)117 196.8 Q -.25(va)
+-.25 G(lent to gi).25 E(ving)-.25 E/F2 10/Times-Italic@0 SF(sendmail)2.5 E F1
+(the)2.5 E F0(\255bi)2.5 E F1(\215ag:)2.5 E(/usr/sbin/sendmail \255bi)157 213 Q
+.259(If the \231D\232 option is speci\214ed in the con\214guration,)142 233.4 R
+F2(sendmail)2.759 E F1 .26(will reb)2.759 F .26(uild the alias database)-.2 F
+1.921(automatically if possible when it is out of date.)117 245.4 R(Auto-reb)
 6.921 E 1.92(uild can be dangerous on hea)-.2 F(vily)-.2 E 1.45
 6.921 E 1.92(uild can be dangerous on hea)-.2 F(vily)-.2 E 1.45
-(loaded machines with lar)117 334.2 R 1.45(ge alias \214les; if it might tak)
--.18 F 3.951(em)-.1 G 1.451(ore than \214v)355.654 334.2 R 3.951(em)-.15 G
-1.451(inutes to reb)420.127 334.2 R 1.451(uild the)-.2 F
-(database, there is a chance that se)117 346.2 Q -.15(ve)-.25 G
+(loaded machines with lar)117 257.4 R 1.45(ge alias \214les; if it might tak)
+-.18 F 3.951(em)-.1 G 1.451(ore than \214v)355.654 257.4 R 3.951(em)-.15 G
+1.451(inutes to reb)420.127 257.4 R 1.451(uild the)-.2 F
+(database, there is a chance that se)117 269.4 Q -.15(ve)-.25 G
 (ral processes will start the reb).15 E(uild process simultaneously)-.2 E(.)
 (ral processes will start the reb).15 E(uild process simultaneously)-.2 E(.)
--.65 E 1.77(If you ha)142 362.4 R 2.07 -.15(ve m)-.2 H 1.77
+-.65 E 1.77(If you ha)142 285.6 R 2.07 -.15(ve m)-.2 H 1.77
 (ultiple aliases databases speci\214ed, the).15 F F0(\255bi)4.27 E F1 1.77
 (\215ag reb)4.27 F 1.77(uilds all the database)-.2 F
 (ultiple aliases databases speci\214ed, the).15 F F0(\255bi)4.27 E F1 1.77
 (\215ag reb)4.27 F 1.77(uilds all the database)-.2 F
-(types it understands \(for e)117 374.4 Q(xample, it can reb)-.15 E
-(uild dbm databases b)-.2 E(ut not nis databases\).)-.2 E F0 2.5(2.4.2. P)102
-398.4 R(otential pr)-.2 E(oblems)-.18 E F1 1.131
+(types it understands \(for e)117 297.6 Q(xample, it can reb)-.15 E
+(uild dbm databases b)-.2 E(ut not nis databases\).)-.2 E F0 2.5(2.3.2. P)102
+321.6 R(otential pr)-.2 E(oblems)-.18 E F1 1.131
 (There are a number of problems that can occur with the alias database.)142
 (There are a number of problems that can occur with the alias database.)142
-414.6 R(The)6.131 E 3.631(ya)-.15 G 1.131(ll result)472.589 414.6 R 1.104
-(from a)117 426.6 R F3(sendmail)3.604 E F1 1.104(process accessing the DBM v)
+337.8 R(The)6.131 E 3.631(ya)-.15 G 1.131(ll result)472.589 337.8 R 1.104
+(from a)117 349.8 R F2(sendmail)3.604 E F1 1.104(process accessing the DBM v)
 3.604 F 1.103(ersion while it is only partially b)-.15 F 3.603(uilt. This)-.2 F
 3.604 F 1.103(ersion while it is only partially b)-.15 F 3.603(uilt. This)-.2 F
-(can)3.603 E 1.248(happen under tw)117 438.6 R 3.748(oc)-.1 G 1.248
+(can)3.603 E 1.248(happen under tw)117 361.8 R 3.748(oc)-.1 G 1.248
 (ircumstances: One process accesses the database while another process is)
 (ircumstances: One process accesses the database while another process is)
-199.234 438.6 R(reb)117 450.6 Q .518(uilding it, or the process reb)-.2 F .518
+199.234 361.8 R(reb)117 373.8 Q .518(uilding it, or the process reb)-.2 F .518
 (uilding the database dies \(due to being killed or a system crash\))-.2 F
 (uilding the database dies \(due to being killed or a system crash\))-.2 F
-(before completing the reb)117 462.6 Q(uild.)-.2 E .792(Sendmail has tw)142
-478.8 R 3.292(ot)-.1 G .792(echniques to try to relie)220.666 478.8 R 1.092
--.15(ve t)-.25 H .792(hese problems.).15 F .793(First, it ignores interrupts)
-5.793 F .045(while reb)117 490.8 R .045(uilding the database; this a)-.2 F -.2
-(vo)-.2 G .045(ids the problem of someone aborting the process lea).2 F .045
-(ving a)-.2 F(partially reb)117 502.8 Q(uilt database.)-.2 E
-(Second, at the end of the reb)5 E(uild it adds an alias of the form)-.2 E
-(@: @)157 519 Q .336(\(which is not normally le)117 535.2 R -.05(ga)-.15 G
-2.836(l\). Before).05 F .336
-(sendmail will access the database, it checks to insure that)2.836 F
-(this entry e)117 549.2 Q(xists)-.15 E/F4 7/Times-Roman@0 SF(5)179.63 545.2 Q
-F1(.)183.13 549.2 Q F0 2.5(2.4.3. List)102 573.2 R -.1(ow)2.5 G(ners).1 E F1 .4
-(If an error occurs on sending to a certain address, say \231)142 589.4 R F3(x)
-A F1<9a2c>A F3(sendmail)2.901 E F1 .401(will look for an alias)2.901 F .418
-(of the form \231o)117 601.4 R(wner)-.25 E(-)-.2 E F3(x)A F1 2.918<9a74>C 2.918
-(or)212.632 601.4 S(ecei)223.88 601.4 Q .718 -.15(ve t)-.25 H .418(he errors.)
-.15 F .417(This is typically useful for a mailing list where the)5.418 F 1.116
-(submitter of the list has no control o)117 613.4 R -.15(ve)-.15 G 3.617(rt).15
-G 1.117(he maintenance of the list itself; in this case the list)288.4 613.4 R
-(maintainer w)117 625.4 Q(ould be the o)-.1 E(wner of the list.)-.25 E -.15(Fo)
-5 G 2.5(re).15 G(xample:)309.38 625.4 Q .32 LW 76 669.2 72 669.2 DL 80 669.2 76
-669.2 DL 84 669.2 80 669.2 DL 88 669.2 84 669.2 DL 92 669.2 88 669.2 DL 96
-669.2 92 669.2 DL 100 669.2 96 669.2 DL 104 669.2 100 669.2 DL 108 669.2 104
-669.2 DL 112 669.2 108 669.2 DL 116 669.2 112 669.2 DL 120 669.2 116 669.2 DL
-124 669.2 120 669.2 DL 128 669.2 124 669.2 DL 132 669.2 128 669.2 DL 136 669.2
-132 669.2 DL 140 669.2 136 669.2 DL 144 669.2 140 669.2 DL 148 669.2 144 669.2
-DL 152 669.2 148 669.2 DL 156 669.2 152 669.2 DL 160 669.2 156 669.2 DL 164
-669.2 160 669.2 DL 168 669.2 164 669.2 DL 172 669.2 168 669.2 DL 176 669.2 172
-669.2 DL 180 669.2 176 669.2 DL 184 669.2 180 669.2 DL 188 669.2 184 669.2 DL
-192 669.2 188 669.2 DL 196 669.2 192 669.2 DL 200 669.2 196 669.2 DL 204 669.2
-200 669.2 DL 208 669.2 204 669.2 DL 212 669.2 208 669.2 DL 216 669.2 212 669.2
-DL/F5 5/Times-Roman@0 SF(5)93.6 679.6 Q/F6 8/Times-Roman@0 SF .389(The \231a\
-\232 option is required in the con\214guration for this action to occur)3.2 J
-4.389(.T)-.44 G .389(his should normally be speci\214ed unless you are run-)
-334.24 682.8 R(ning)72 692.4 Q/F7 8/Times-Italic@0 SF(delivermail)2 E F6
-(in parallel with)2 E F7(sendmail.)2 E EP
-%%Page: 14 11
+(before completing the reb)117 385.8 Q(uild.)-.2 E .792(Sendmail has tw)142 402
+R 3.292(ot)-.1 G .792(echniques to try to relie)220.666 402 R 1.092 -.15(ve t)
+-.25 H .792(hese problems.).15 F .793(First, it ignores interrupts)5.793 F .045
+(while reb)117 414 R .045(uilding the database; this a)-.2 F -.2(vo)-.2 G .045
+(ids the problem of someone aborting the process lea).2 F .045(ving a)-.2 F
+(partially reb)117 426 Q(uilt database.)-.2 E(Second, at the end of the reb)5 E
+(uild it adds an alias of the form)-.2 E(@: @)157 442.2 Q .336
+(\(which is not normally le)117 458.4 R -.05(ga)-.15 G 2.836(l\). Before).05 F
+F2(sendmail)2.836 E F1 .336(will access the database, it checks to insure that)
+2.836 F(this entry e)117 472.4 Q(xists)-.15 E/F3 7/Times-Roman@0 SF(5)179.63
+468.4 Q F1(.)183.13 472.4 Q F0 2.5(2.3.3. List)102 496.4 R -.1(ow)2.5 G(ners).1
+E F1 .4(If an error occurs on sending to a certain address, say \231)142 512.6
+R F2(x)A F1<9a2c>A F2(sendmail)2.901 E F1 .401(will look for an alias)2.901 F
+.418(of the form \231o)117 524.6 R(wner)-.25 E(-)-.2 E F2(x)A F1 2.918<9a74>C
+2.918(or)212.632 524.6 S(ecei)223.88 524.6 Q .718 -.15(ve t)-.25 H .418
+(he errors.).15 F .417(This is typically useful for a mailing list where the)
+5.418 F 1.116(submitter of the list has no control o)117 536.6 R -.15(ve)-.15 G
+3.617(rt).15 G 1.117(he maintenance of the list itself; in this case the list)
+288.4 536.6 R(maintainer w)117 548.6 Q(ould be the o)-.1 E(wner of the list.)
+-.25 E -.15(Fo)5 G 2.5(re).15 G(xample:)309.38 548.6 Q
+(unix-wizards: eric@ucbarpa, wnj@monet, nosuchuser)157 564.8 Q(,)-.4 E
+(sam@matisse)193 576.8 Q -.25(ow)157 588.8 S(ner).25 E
+(-unix-wizards: eric@ucbarpa)-.2 E -.1(wo)117 605 S 1.959(uld cause \231eric@u\
+cbarpa\232 to get the error that will occur when someone sends to unix-).1 F
+(wizards due to the inclusion of \231nosuchuser\232 on the list.)117 617 Q .958
+(List o)142 633.2 R .958(wners also cause the en)-.25 F -.15(ve)-.4 G .959
+(lope sender address to be modi\214ed.).15 F .959(The contents of the)5.959 F
+-.25(ow)117 645.2 S .429(ner alias are used if the).25 F 2.929(yp)-.15 G .429
+(oint to a single user)236.364 645.2 R 2.928(,o)-.4 G .428
+(therwise the name of the alias itself is used.)326.436 645.2 R -.15(Fo)117
+657.2 S 2.5(rt).15 G(his reason, and to obe)136.02 657.2 Q 2.5(yI)-.15 G
+(nternet con)233.63 657.2 Q -.15(ve)-.4 G(ntions, a typical scheme w).15 E
+(ould be:)-.1 E .32 LW 76 669.2 72 669.2 DL 80 669.2 76 669.2 DL 84 669.2 80
+669.2 DL 88 669.2 84 669.2 DL 92 669.2 88 669.2 DL 96 669.2 92 669.2 DL 100
+669.2 96 669.2 DL 104 669.2 100 669.2 DL 108 669.2 104 669.2 DL 112 669.2 108
+669.2 DL 116 669.2 112 669.2 DL 120 669.2 116 669.2 DL 124 669.2 120 669.2 DL
+128 669.2 124 669.2 DL 132 669.2 128 669.2 DL 136 669.2 132 669.2 DL 140 669.2
+136 669.2 DL 144 669.2 140 669.2 DL 148 669.2 144 669.2 DL 152 669.2 148 669.2
+DL 156 669.2 152 669.2 DL 160 669.2 156 669.2 DL 164 669.2 160 669.2 DL 168
+669.2 164 669.2 DL 172 669.2 168 669.2 DL 176 669.2 172 669.2 DL 180 669.2 176
+669.2 DL 184 669.2 180 669.2 DL 188 669.2 184 669.2 DL 192 669.2 188 669.2 DL
+196 669.2 192 669.2 DL 200 669.2 196 669.2 DL 204 669.2 200 669.2 DL 208 669.2
+204 669.2 DL 212 669.2 208 669.2 DL 216 669.2 212 669.2 DL/F4 5/Times-Roman@0
+SF(5)93.6 679.6 Q/F5 8/Times-Roman@0 SF .389(The \231a\232 option is required \
+in the con\214guration for this action to occur)3.2 J 4.389(.T)-.44 G .389
+(his should normally be speci\214ed unless you are run-)334.24 682.8 R(ning)72
+692.4 Q/F6 8/Times-Italic@0 SF(delivermail)2 E F5(in parallel with)2 E F6
+(sendmail.)2 E EP
+%%Page: 16 11
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-14 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF
-(unix-wizards: eric@ucbarpa, wnj@monet, nosuchuser)157 96 Q(,)-.4 E
-(sam@matisse)193 108 Q -.25(ow)157 120 S(ner).25 E(-unix-wizards: eric@ucbarpa)
--.2 E -.1(wo)117 136.2 S 1.959(uld cause \231eric@ucbarpa\232 to get the error\
- that will occur when someone sends to unix-).1 F
-(wizards due to the inclusion of \231nosuchuser\232 on the list.)117 148.2 Q
-.958(List o)142 164.4 R .958(wners also cause the en)-.25 F -.15(ve)-.4 G .959
-(lope sender address to be modi\214ed.).15 F .959(The contents of the)5.959 F
--.25(ow)117 176.4 S .429(ner alias are used if the).25 F 2.929(yp)-.15 G .429
-(oint to a single user)236.364 176.4 R 2.928(,o)-.4 G .428
-(therwise the name of the alias itself is used.)326.436 176.4 R -.15(Fo)117
-188.4 S 2.5(rt).15 G(his reason, and to obe)136.02 188.4 Q 2.5(yI)-.15 G
-(nternet con)233.63 188.4 Q -.15(ve)-.4 G(ntions, a typical scheme w).15 E
-(ould be:)-.1 E 18.49(list: some,)157 204.6 R(set, of, addresses)2.5 E 22.28
-(list-request: list-admin-1,)157 216.6 R(list-admin-2, ...)2.5 E -.25(ow)157
-228.6 S(ner).25 E 26.62(-list: list-request)-.2 F F0 2.5(2.5. User)87 256.8 R
-(Inf)2.5 E(ormation Database)-.25 E F1 1.059(If you ha)127 273 R 1.359 -.15
-(ve a ve)-.2 H 1.059(rsion of).15 F/F2 10/Times-Italic@0 SF(sendmail)3.559 E F1
-1.06(with the user information database compiled in, and you)3.559 F(ha)102 285
-Q 2.206 -.15(ve s)-.2 H 1.906(peci\214ed one or more databases using the).15 F
-F0(U)4.406 E F1 1.905(option, the databases will be searched for a)4.406 F F2
-(user)102 297 Q F1(:maildrop entry)A 5(.I)-.65 G 2.5(ff)191.34 297 S
-(ound, the mail will be sent to the speci\214ed address.)200.5 297 Q 1.288
-(If the \214rst tok)127 313.2 R 1.288(en passed to user part of the \231local\
-\232 mailer is an at sign, the at sign will be)-.1 F(stripped of)102 325.2 Q
-2.5(fa)-.25 G(nd this step will be skipped.)155.07 325.2 Q F0 2.5(2.6. P)87
-349.2 R(er)-.2 E(-User F)-.37 E(orwarding \(.f)-.25 E(orward Files\))-.25 E F1
-.121(As an alternati)127 365.4 R .421 -.15(ve t)-.25 H 2.621(ot).15 G .121
-(he alias database, an)210.404 365.4 R 2.621(yu)-.15 G .12
-(ser may put a \214le with the name \231.forw)304.878 365.4 R .12
-(ard\232 in his)-.1 F .205(or her home directory)102 377.4 R 5.205(.I)-.65 G
-2.705(ft)199.92 377.4 S .205(his \214le e)208.735 377.4 R(xists,)-.15 E F2
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-16 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 18.49
+(list: some,)157 96 R(set, of, addresses)2.5 E 22.28
+(list-request: list-admin-1,)157 108 R(list-admin-2, ...)2.5 E -.25(ow)157 120
+S(ner).25 E 26.62(-list: list-request)-.2 F F0 2.5(2.4. User)87 148.2 R(Inf)2.5
+E(ormation Database)-.25 E F1 1.059(If you ha)127 164.4 R 1.359 -.15(ve a ve)
+-.2 H 1.059(rsion of).15 F/F2 10/Times-Italic@0 SF(sendmail)3.559 E F1 1.06
+(with the user information database compiled in, and you)3.559 F(ha)102 176.4 Q
+2.206 -.15(ve s)-.2 H 1.906(peci\214ed one or more databases using the).15 F F0
+(U)4.406 E F1 1.905(option, the databases will be searched for a)4.406 F F2
+(user)102 188.4 Q F1(:maildrop entry)A 5(.I)-.65 G 2.5(ff)191.34 188.4 S
+(ound, the mail will be sent to the speci\214ed address.)200.5 188.4 Q 1.288
+(If the \214rst tok)127 204.6 R 1.288(en passed to user part of the \231local\
+\232 mailer is an at sign, the at sign will be)-.1 F(stripped of)102 216.6 Q
+2.5(fa)-.25 G(nd this step will be skipped.)155.07 216.6 Q F0 2.5(2.5. P)87
+240.6 R(er)-.2 E(-User F)-.37 E(orwarding \(.f)-.25 E(orward Files\))-.25 E F1
+.121(As an alternati)127 256.8 R .421 -.15(ve t)-.25 H 2.621(ot).15 G .121
+(he alias database, an)210.404 256.8 R 2.621(yu)-.15 G .12
+(ser may put a \214le with the name \231.forw)304.878 256.8 R .12
+(ard\232 in his)-.1 F .205(or her home directory)102 268.8 R 5.205(.I)-.65 G
+2.705(ft)199.92 268.8 S .205(his \214le e)208.735 268.8 R(xists,)-.15 E F2
 (sendmail)2.705 E F1 .205
 (redirects mail for that user to the list of addresses)2.705 F .909
 (sendmail)2.705 E F1 .205
 (redirects mail for that user to the list of addresses)2.705 F .909
-(listed in the .forw)102 389.4 R .908(ard \214le.)-.1 F -.15(Fo)5.908 G 3.408
+(listed in the .forw)102 280.8 R .908(ard \214le.)-.1 F -.15(Fo)5.908 G 3.408
 (re).15 G .908
 (xample, if the home directory for user \231mckusick\232 has a .forw)233.98
 (re).15 G .908
 (xample, if the home directory for user \231mckusick\232 has a .forw)233.98
-389.4 R(ard)-.1 E(\214le with contents:)102 401.4 Q(mckusick@ernie)142 417.6 Q
-(kirk@calder)142 429.6 Q(then an)102 445.8 Q 2.5(ym)-.15 G(ail arri)146.29
-445.8 Q
-(ving for \231mckusick\232 will be redirected to the speci\214ed accounts.)-.25
-E(Actually)127 462 Q 3.374(,t)-.65 G .874
+280.8 R(ard)-.1 E(\214le with contents:)102 292.8 Q(mckusick@ernie)142 309 Q
+(kirk@calder)142 321 Q(then an)102 337.2 Q 2.5(ym)-.15 G(ail arri)146.29 337.2
+Q(ving for \231mckusick\232 will be redirected to the speci\214ed accounts.)
+-.25 E(Actually)127 353.4 Q 3.374(,t)-.65 G .874
 (he con\214guration \214le de\214nes a sequence of \214lenames to check.)
 (he con\214guration \214le de\214nes a sequence of \214lenames to check.)
-169.444 462 R .875(By def)5.875 F .875(ault, this is)-.1 F .688(the user')102
-474 R 3.188(s.)-.55 G(forw)146.426 474 Q .688(ard \214le, b)-.1 F .687
+169.444 353.4 R .875(By def)5.875 F .875(ault, this is)-.1 F .688(the user')102
+365.4 R 3.188(s.)-.55 G(forw)146.426 365.4 Q .688(ard \214le, b)-.1 F .687
 (ut can be de\214ned to be more generally using the)-.2 F F0(J)3.187 E F1 3.187
 (ut can be de\214ned to be more generally using the)-.2 F F0(J)3.187 E F1 3.187
-(option. If)3.187 F .687(you change)3.187 F .393(this, you will ha)102 486 R
+(option. If)3.187 F .687(you change)3.187 F .393(this, you will ha)102 377.4 R
 .693 -.15(ve t)-.2 H 2.893(oi).15 G .393
 .693 -.15(ve t)-.2 H 2.893(oi).15 G .393
-(nform your user base of the change; .forw)193.064 486 R .393
-(ard is pretty well incorporated into)-.1 F(the collecti)102 498 Q .3 -.15
-(ve s)-.25 H(ubconscious.).15 E F0 2.5(2.7. Special)87 522 R(Header Lines)2.5 E
-F1(Se)127 538.2 Q -.15(ve)-.25 G 1.898(ral header lines ha).15 F 2.197 -.15
+(nform your user base of the change; .forw)193.064 377.4 R .393
+(ard is pretty well incorporated into)-.1 F(the collecti)102 389.4 Q .3 -.15
+(ve s)-.25 H(ubconscious.).15 E F0 2.5(2.6. Special)87 413.4 R(Header Lines)2.5
+E F1(Se)127 429.6 Q -.15(ve)-.25 G 1.898(ral header lines ha).15 F 2.197 -.15
 (ve s)-.2 H 1.897
 (pecial interpretations de\214ned by the con\214guration \214le.).15 F(Others)
 (ve s)-.2 H 1.897
 (pecial interpretations de\214ned by the con\214guration \214le.).15 F(Others)
-6.897 E(ha)102 550.2 Q 1.205 -.15(ve i)-.2 H .905(nterpretations b).15 F .905
+6.897 E(ha)102 441.6 Q 1.205 -.15(ve i)-.2 H .905(nterpretations b).15 F .905
 (uilt into)-.2 F F2(sendmail)3.405 E F1 .906
 (that cannot be changed without changing the code.)3.405 F(These)5.906 E -.2
 (uilt into)-.2 F F2(sendmail)3.405 E F1 .906
 (that cannot be changed without changing the code.)3.405 F(These)5.906 E -.2
-(bu)102 562.2 S(iltins are described here.).2 E F0 2.5(2.7.1. Retur)102 586.2 R
+(bu)102 453.6 S(iltins are described here.).2 E F0 2.5(2.6.1. Retur)102 477.6 R
 (n-Receipt-T)-.15 E(o:)-.92 E F1 1.371
 (n-Receipt-T)-.15 E(o:)-.92 E F1 1.371
-(If this header is sent, a message will be sent to an)142 602.4 R 3.87(ys)-.15
-G 1.37(peci\214ed addresses when the \214nal)366.88 602.4 R(deli)117 614.4 Q
+(If this header is sent, a message will be sent to an)142 493.8 R 3.87(ys)-.15
+G 1.37(peci\214ed addresses when the \214nal)366.88 493.8 R(deli)117 505.8 Q
 -.15(ve)-.25 G .367(ry is complete, that is, when successfully deli).15 F -.15
 (ve)-.25 G .368(red to a mailer with the).15 F F0(l)2.868 E F1 .368
 (\215ag \(local deli)2.868 F(v-)-.25 E(ery\) set in the mailer descriptor)117
 -.15(ve)-.25 G .367(ry is complete, that is, when successfully deli).15 F -.15
 (ve)-.25 G .368(red to a mailer with the).15 F F0(l)2.868 E F1 .368
 (\215ag \(local deli)2.868 F(v-)-.25 E(ery\) set in the mailer descriptor)117
-626.4 Q(.)-.55 E F0 2.5(2.7.2. Err)102 650.4 R(ors-T)-.18 E(o:)-.92 E F1 .22
-(If errors occur an)142 666.6 R .22
+519.8 Q/F3 7/Times-Roman@0 SF(6)242.25 515.8 Q F1(.)245.75 519.8 Q F0 2.5
+(2.6.2. Err)102 543.8 R(ors-T)-.18 E(o:)-.92 E F1 .22(If errors occur an)142
+560 R .22
 (ywhere during processing, this header will cause error messages to go to)-.15
 (ywhere during processing, this header will cause error messages to go to)-.15
-F(the listed addresses.)117 678.6 Q(This is intended for mailing lists.)5 E
-.384(The Errors-T)142 694.8 R .384(o: header w)-.8 F .384
+F(the listed addresses.)117 572 Q(This is intended for mailing lists.)5 E .384
+(The Errors-T)142 588.2 R .384(o: header w)-.8 F .384
 (as created in the bad old days when UUCP didn')-.1 F 2.885(tu)-.18 G .385
 (as created in the bad old days when UUCP didn')-.1 F 2.885(tu)-.18 G .385
-(nderstand the)450.015 694.8 R .89(distinction between an en)117 706.8 R -.15
+(nderstand the)450.015 588.2 R .89(distinction between an en)117 600.2 R -.15
 (ve)-.4 G .89(lope and a header; this w).15 F .889(as a hack to pro)-.1 F .889
 (ve)-.4 G .89(lope and a header; this w).15 F .889(as a hack to pro)-.1 F .889
-(vide what should no)-.15 F 3.389(wb)-.25 G(e)499.56 706.8 Q(passed as the en)
-117 718.8 Q -.15(ve)-.4 G(lope sender address.).15 E(It should go a)5 E -.1(wa)
--.15 G 3.8 -.65(y. I).1 H 2.5(ti).65 G 2.5(so)365.22 718.8 S(nly used if the)
-376.61 718.8 Q F0(l)2.5 E F1(option is set.)2.5 E EP
-%%Page: 15 12
+(vide what should no)-.15 F 3.389(wb)-.25 G(e)499.56 600.2 Q(passed as the en)
+117 612.2 Q -.15(ve)-.4 G(lope sender address.).15 E(It should go a)5 E -.1(wa)
+-.15 G 3.8 -.65(y. I).1 H 2.5(ti).65 G 2.5(so)365.22 612.2 S(nly used if the)
+376.61 612.2 Q F0(l)2.5 E F1(option is set.)2.5 E .32 LW 76 659.6 72 659.6 DL
+80 659.6 76 659.6 DL 84 659.6 80 659.6 DL 88 659.6 84 659.6 DL 92 659.6 88
+659.6 DL 96 659.6 92 659.6 DL 100 659.6 96 659.6 DL 104 659.6 100 659.6 DL 108
+659.6 104 659.6 DL 112 659.6 108 659.6 DL 116 659.6 112 659.6 DL 120 659.6 116
+659.6 DL 124 659.6 120 659.6 DL 128 659.6 124 659.6 DL 132 659.6 128 659.6 DL
+136 659.6 132 659.6 DL 140 659.6 136 659.6 DL 144 659.6 140 659.6 DL 148 659.6
+144 659.6 DL 152 659.6 148 659.6 DL 156 659.6 152 659.6 DL 160 659.6 156 659.6
+DL 164 659.6 160 659.6 DL 168 659.6 164 659.6 DL 172 659.6 168 659.6 DL 176
+659.6 172 659.6 DL 180 659.6 176 659.6 DL 184 659.6 180 659.6 DL 188 659.6 184
+659.6 DL 192 659.6 188 659.6 DL 196 659.6 192 659.6 DL 200 659.6 196 659.6 DL
+204 659.6 200 659.6 DL 208 659.6 204 659.6 DL 212 659.6 208 659.6 DL 216 659.6
+212 659.6 DL/F4 5/Times-Roman@0 SF(6)93.6 670 Q/F5 8/Times-Roman@0 SF .127
+(Some sites disable this header)3.2 J 2.127(,a)-.32 G .127(nd other \(non-)
+199.959 673.2 R/F6 8/Times-Italic@0 SF(sendmail)A F5 2.127(\)s)C .127
+(ystems do not implement it.)282.772 673.2 R .127(Do not assume that a f)4.127
+F .126(ailure to get a re-)-.08 F .317
+(turn receipt means that the mail did not arri)72 682.8 R -.12(ve)-.2 G 4.317
+(.A).12 G .318(lso, do not assume that getting a return receipt means that the\
+ mail has been read; it)232.509 682.8 R
+(just means that the message has been deli)72 692.4 Q -.12(ve)-.2 G
+(red to the recipient').12 E 2(sm)-.44 G(ailbox.)285.648 692.4 Q EP
+%%Page: 17 12
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-15)452.9 60 Q 2.5(2.7.3. A)102 96 R(ppar)-.25 E(ently-T)-.18 E(o:)-.92
+(SMM:08-17)452.9 60 Q 2.5(2.6.3. A)102 96 R(ppar)-.25 E(ently-T)-.18 E(o:)-.92
 E/F1 10/Times-Roman@0 SF .22
 (If a message comes in with no recipients listed in the message \(in a T)142
 112.2 R .22(o:, Cc:, or Bcc: line\))-.8 F(then)117 124.2 Q/F2 10/Times-Italic@0
 E/F1 10/Times-Roman@0 SF .22
 (If a message comes in with no recipients listed in the message \(in a T)142
 112.2 R .22(o:, Cc:, or Bcc: line\))-.8 F(then)117 124.2 Q/F2 10/Times-Italic@0
@@ -1062,7 +1059,7 @@ SF(sendmail)2.79 E F1 .29(will add an \231)2.79 F(Apparently-T)-.8 E .289
 (not put in as a standard recipient line to w)117 136.2 Q(arn an)-.1 E 2.5(yr)
 -.15 G(ecipients that the list is not complete.)319.77 136.2 Q
 (At least one recipient line is required under RFC 822.)142 152.4 Q F0 2.5
 (not put in as a standard recipient line to w)117 136.2 Q(arn an)-.1 E 2.5(yr)
 -.15 G(ecipients that the list is not complete.)319.77 136.2 Q
 (At least one recipient line is required under RFC 822.)142 152.4 Q F0 2.5
-(2.8. IDENT)87 176.4 R(Pr)2.5 E(otocol Support)-.18 E F2(Sendmail)127 192.6 Q
+(2.7. IDENT)87 176.4 R(Pr)2.5 E(otocol Support)-.18 E F2(Sendmail)127 192.6 Q
 F1 1.835(supports the IDENT protocol as de\214ned in RFC 1413.)4.335 F 1.835
 (Although this enhances)6.835 F .29
 (identi\214cation of the author of an email message by doing a `)102 204.6 R
 F1 1.835(supports the IDENT protocol as de\214ned in RFC 1413.)4.335 F 1.835
 (Although this enhances)6.835 F .29
 (identi\214cation of the author of an email message by doing a `)102 204.6 R
@@ -1071,302 +1068,304 @@ F1 1.835(supports the IDENT protocol as de\214ned in RFC 1413.)4.335 F 1.835
 wner of a particular TCP connection in the audit trail it is in no sense perfe\
 ct; a deter)-.25 F(-)-.2 E 1.294(mined for)102 228.6 R 1.294
 (ger can easily spoof the IDENT protocol.)-.18 F 1.294(The follo)6.294 F 1.294
 wner of a particular TCP connection in the audit trail it is in no sense perfe\
 ct; a deter)-.25 F(-)-.2 E 1.294(mined for)102 228.6 R 1.294
 (ger can easily spoof the IDENT protocol.)-.18 F 1.294(The follo)6.294 F 1.294
-(wing description is e)-.25 F 1.293(xcerpted from)-.15 F(RFC 1413: 6.)102 240.6
-Q(Security Considerations)5 E .005
-(The information returned by this protocol is at most as trustw)127 256.8 R
-(orth)-.1 E 2.506(ya)-.05 G 2.506(st)400.5 256.8 S .006(he host pro)409.676
-256.8 R .006(viding it OR)-.15 F .274(the or)127 268.8 R -.05(ga)-.18 G .274
+(wing description is e)-.25 F 1.293(xcerpted from)-.15 F(RFC 1413:)102 240.6 Q
+2.5(6. Security)127 256.8 R(Considerations)2.5 E .005
+(The information returned by this protocol is at most as trustw)127 273 R(orth)
+-.1 E 2.506(ya)-.05 G 2.506(st)400.5 273 S .006(he host pro)409.676 273 R .006
+(viding it OR)-.15 F .274(the or)127 285 R -.05(ga)-.18 G .274
 (nization operating the host.).05 F -.15(Fo)5.274 G 2.774(re).15 G .273
 (nization operating the host.).05 F -.15(Fo)5.274 G 2.774(re).15 G .273
-(xample, a PC in an open lab has fe)295.314 268.8 R 2.773(wi)-.25 G 2.773(fa)
-448.614 268.8 S .573 -.15(ny c)459.157 268.8 T(ontrols).15 E .986(on it to pre)
-127 280.8 R -.15(ve)-.25 G .986(nt a user from ha).15 F .986
+(xample, a PC in an open lab has fe)295.314 285 R 2.773(wi)-.25 G 2.773(fa)
+448.614 285 S .573 -.15(ny c)459.157 285 T(ontrols).15 E .986(on it to pre)127
+297 R -.15(ve)-.25 G .986(nt a user from ha).15 F .986
 (ving this protocol return an)-.2 F 3.486(yi)-.15 G .987
 (ving this protocol return an)-.2 F 3.486(yi)-.15 G .987
-(denti\214er the user w)378.052 280.8 R 3.487(ants. Lik)-.1 F(e-)-.1 E 1.441(w\
-ise, if the host has been compromised the information returned may be complete\
-ly erro-)127 292.8 R(neous and misleading.)127 304.8 Q .521(The Identi\214cati\
-on Protocol is not intended as an authorization or access control protocol.)127
-321 R(At)5.521 E 1.037(best, it pro)127 333 R 1.037
+(denti\214er the user w)378.052 297 R 3.487(ants. Lik)-.1 F(e-)-.1 E 1.441(wis\
+e, if the host has been compromised the information returned may be completely\
+ erro-)127 309 R(neous and misleading.)127 321 Q .521(The Identi\214cation Pro\
+tocol is not intended as an authorization or access control protocol.)127 337.2
+R(At)5.521 E 1.037(best, it pro)127 349.2 R 1.037
 (vides some additional auditing information with respect to TCP connections.)
 (vides some additional auditing information with respect to TCP connections.)
--.15 F(At)6.036 E -.1(wo)127 345 S(rst, it can pro).1 E
+-.15 F(At)6.036 E -.1(wo)127 361.2 S(rst, it can pro).1 E
 (vide misleading, incorrect, or maliciously incorrect information.)-.15 E 1.006
 (The use of the information returned by this protocol for other than auditing \
 (vide misleading, incorrect, or maliciously incorrect information.)-.15 E 1.006
 (The use of the information returned by this protocol for other than auditing \
-is strongly dis-)127 361.2 R 2.697(couraged. Speci\214cally)127 373.2 R 2.697
-(,u)-.65 G .197(sing Identi\214cation Protocol information to mak)228.114 373.2
-R 2.697(ea)-.1 G .197(ccess control deci-)429.186 373.2 R .514(sions - either \
+is strongly dis-)127 377.4 R 2.697(couraged. Speci\214cally)127 389.4 R 2.697
+(,u)-.65 G .197(sing Identi\214cation Protocol information to mak)228.114 389.4
+R 2.697(ea)-.1 G .197(ccess control deci-)429.186 389.4 R .514(sions - either \
 as the primary method \(i.e., no other checks\) or as an adjunct to other meth\
 as the primary method \(i.e., no other checks\) or as an adjunct to other meth\
-ods)127 385.2 R(may result in a weak)127 397.2 Q(ening of normal host security)
--.1 E(.)-.65 E 1.779(An Identi\214cation serv)127 413.4 R 1.778(er may re)-.15
+ods)127 401.4 R(may result in a weak)127 413.4 Q(ening of normal host security)
+-.1 E(.)-.65 E 1.779(An Identi\214cation serv)127 429.6 R 1.778(er may re)-.15
 F -.15(ve)-.25 G 1.778
 (al information about users, entities, objects or processes).15 F .336
 F -.15(ve)-.25 G 1.778
 (al information about users, entities, objects or processes).15 F .336
-(which might normally be considered pri)127 425.4 R -.25(va)-.25 G 2.836
+(which might normally be considered pri)127 441.6 R -.25(va)-.25 G 2.836
 (te. An).25 F .337(Identi\214cation serv)2.836 F .337(er pro)-.15 F .337
 (vides service which)-.15 F .806
 (te. An).25 F .337(Identi\214cation serv)2.836 F .337(er pro)-.15 F .337
 (vides service which)-.15 F .806
-(is a rough analog of the CallerID services pro)127 437.4 R .806
-(vided by some phone companies and man)-.15 F 3.306(yo)-.15 G(f)500.67 437.4 Q
-1.397(the same pri)127 449.4 R -.25(va)-.25 G 1.697 -.15(cy c).25 H 1.397
+(is a rough analog of the CallerID services pro)127 453.6 R .806
+(vided by some phone companies and man)-.15 F 3.306(yo)-.15 G(f)500.67 453.6 Q
+1.397(the same pri)127 465.6 R -.25(va)-.25 G 1.697 -.15(cy c).25 H 1.397
 (onsiderations and ar).15 F 1.398
 (guments that apply to the CallerID service apply to)-.18 F 3.546
 (onsiderations and ar).15 F 1.398
 (guments that apply to the CallerID service apply to)-.18 F 3.546
-(Identi\214cation. If)127 461.4 R 1.046(you w)3.546 F(ouldn')-.1 E 3.546(tr)
--.18 G 1.045(un a "\214nger" serv)260.334 461.4 R 1.045(er due to pri)-.15 F
+(Identi\214cation. If)127 477.6 R 1.046(you w)3.546 F(ouldn')-.1 E 3.546(tr)
+-.18 G 1.045(un a "\214nger" serv)260.334 477.6 R 1.045(er due to pri)-.15 F
 -.25(va)-.25 G 1.345 -.15(cy c).25 H 1.045(onsiderations you may).15 F(not w)
 -.25(va)-.25 G 1.345 -.15(cy c).25 H 1.045(onsiderations you may).15 F(not w)
-127 473.4 Q(ant to run this protocol.)-.1 E F0 2.5(3. ARGUMENTS)72 497.4 R F1
-.017(The complete list of ar)112 513.6 R .017(guments to)-.18 F F2(sendmail)
+127 489.6 Q(ant to run this protocol.)-.1 E F0 2.5(3. ARGUMENTS)72 513.6 R F1
+.017(The complete list of ar)112 529.8 R .017(guments to)-.18 F F2(sendmail)
 2.517 E F1 .017(is described in detail in Appendix A.)2.517 F .018
 2.517 E F1 .017(is described in detail in Appendix A.)2.517 F .018
-(Some important)5.018 F(ar)87 525.6 Q(guments are described here.)-.18 E F0 2.5
-(3.1. Queue)87 549.6 R(Inter)2.5 E -.1(va)-.1 G(l).1 E F1 .455(The amount of t\
+(Some important)5.018 F(ar)87 541.8 Q(guments are described here.)-.18 E F0 2.5
+(3.1. Queue)87 565.8 R(Inter)2.5 E -.1(va)-.1 G(l).1 E F1 .455(The amount of t\
 ime between forking a process to run through the queue is de\214ned by the)127
 ime between forking a process to run through the queue is de\214ned by the)127
-565.8 R F0<ad71>2.955 E F1 2.705(\215ag. If)102 577.8 R .206(you run in mode)
-2.705 F F0(f)2.706 E F1(or)2.706 E F0(a)2.706 E F1 .206(this can be relati)
-2.706 F -.15(ve)-.25 G .206(ly lar).15 F .206(ge, since it will only be rele)
--.18 F -.25(va)-.25 G .206(nt when a host).25 F .07(that w)102 589.8 R .07
-(as do)-.1 F .07(wn comes back up.)-.25 F .07(If you run in)5.07 F F0(q)2.57 E
-F1 .07(mode it should be relati)2.57 F -.15(ve)-.25 G .07
+582 R F0<ad71>2.955 E F1 2.705(\215ag. If)102 594 R .206(you run in mode)2.705
+F F0(f)2.706 E F1(or)2.706 E F0(a)2.706 E F1 .206(this can be relati)2.706 F
+-.15(ve)-.25 G .206(ly lar).15 F .206(ge, since it will only be rele)-.18 F
+-.25(va)-.25 G .206(nt when a host).25 F .07(that w)102 606 R .07(as do)-.1 F
+.07(wn comes back up.)-.25 F .07(If you run in)5.07 F F0(q)2.57 E F1 .07
+(mode it should be relati)2.57 F -.15(ve)-.25 G .07
 (ly short, since it de\214nes the).15 F
 (ly short, since it de\214nes the).15 F
-(maximum amount of time that a message may sit in the queue.)102 601.8 Q 1.335
-(RFC 1123 section 5.3.1.1 says that this v)127 618 R 1.336
+(maximum amount of time that a message may sit in the queue.)102 618 Q 1.335
+(RFC 1123 section 5.3.1.1 says that this v)127 634.2 R 1.336
 (alue should be at least 30 minutes \(although that)-.25 F(probably doesn')102
 (alue should be at least 30 minutes \(although that)-.25 F(probably doesn')102
-630 Q 2.5(tm)-.18 G(ak)179.59 630 Q 2.5(es)-.1 G(ense if you use `)199.76 630 Q
-(`queue-only')-.74 E 2.5('m)-.74 G(ode\).)329.08 630 Q F0 2.5(3.2. Daemon)87
-654 R(Mode)2.5 E F1 .085(If you allo)127 670.2 R 2.585(wi)-.25 G .085
-(ncoming mail o)181.165 670.2 R -.15(ve)-.15 G 2.585(ra).15 G 2.585(nI)263.61
-670.2 S .085(PC connection, you should ha)274.525 670.2 R .384 -.15(ve a d)-.2
-H .084(aemon running.).15 F(This)5.084 E .069(should be set by your)102 682.2 R
-F2(/etc/r)2.569 E(c)-.37 E F1 .069(\214le using the)2.569 F F0(\255bd)2.569 E
-F1 2.57(\215ag. The)2.569 F F0(\255bd)2.57 E F1 .07(\215ag and the)2.57 F F0
-<ad71>2.57 E F1 .07(\215ag may be combined)2.57 F(in one call:)102 694.2 Q
-(/usr/sbin/sendmail \255bd \255q30m)142 710.4 Q EP
-%%Page: 16 13
+646.2 Q 2.5(tm)-.18 G(ak)179.59 646.2 Q 2.5(es)-.1 G(ense if you use `)199.76
+646.2 Q(`queue-only')-.74 E 2.5('m)-.74 G(ode\).)329.08 646.2 Q F0 2.5
+(3.2. Daemon)87 670.2 R(Mode)2.5 E F1 .085(If you allo)127 686.4 R 2.585(wi)
+-.25 G .085(ncoming mail o)181.165 686.4 R -.15(ve)-.15 G 2.585(ra).15 G 2.585
+(nI)263.61 686.4 S .085(PC connection, you should ha)274.525 686.4 R .384 -.15
+(ve a d)-.2 H .084(aemon running.).15 F(This)5.084 E .069
+(should be set by your)102 698.4 R F2(/etc/r)2.569 E(c)-.37 E F1 .069
+(\214le using the)2.569 F F0(\255bd)2.569 E F1 2.57(\215ag. The)2.569 F F0
+(\255bd)2.57 E F1 .07(\215ag and the)2.57 F F0<ad71>2.57 E F1 .07
+(\215ag may be combined)2.57 F(in one call:)102 710.4 Q EP
+%%Page: 18 13
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-16 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E 2.5(3.3. F)87 96 R(or)-.25 E
-(cing the Queue)-.18 E/F1 10/Times-Roman@0 SF .04(In some cases you may \214nd\
- that the queue has gotten clogged for some reason.)127 112.2 R -1.1(Yo)5.04 G
-2.54(uc)1.1 G .04(an force)471.48 112.2 R 3.184(aq)102 124.2 S .684
-(ueue run using the)114.624 124.2 R F0<ad71>3.184 E F1 .684(\215ag \(with no v)
-3.184 F 3.184(alue\). It)-.25 F .684(is entertaining to use the)3.184 F F0
-<ad76>3.185 E F1 .685(\215ag \(v)3.185 F .685(erbose\) when)-.15 F
-(this is done to w)102 136.2 Q(atch what happens:)-.1 E
-(/usr/sbin/sendmail \255q \255v)142 152.4 Q -1.1(Yo)127 172.8 S 4.004(uc)1.1 G
-1.504(an also limit the jobs to those with a particular queue identi\214er)
-151.564 172.8 R 4.004(,s)-.4 G(ender)428.362 172.8 Q 4.004(,o)-.4 G 4.004(rr)
-461.676 172.8 S(ecipient)472.34 172.8 Q .686
-(using one of the queue modi\214ers.)102 184.8 R -.15(Fo)5.687 G 3.187(re).15 G
-.687(xample, \231\255qRberk)265.654 184.8 R(ele)-.1 E .687
-(y\232 restricts the queue run to jobs that)-.15 F(ha)102 196.8 Q .526 -.15
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-18 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF
+(/usr/sbin/sendmail \255bd \255q30m)142 96 Q F0 2.5(3.3. F)87 124.2 R(or)-.25 E
+(cing the Queue)-.18 E F1 .04(In some cases you may \214nd that the queue has \
+gotten clogged for some reason.)127 140.4 R -1.1(Yo)5.04 G 2.54(uc)1.1 G .04
+(an force)471.48 140.4 R 3.184(aq)102 152.4 S .684(ueue run using the)114.624
+152.4 R F0<ad71>3.184 E F1 .684(\215ag \(with no v)3.184 F 3.184(alue\). It)
+-.25 F .684(is entertaining to use the)3.184 F F0<ad76>3.185 E F1 .685
+(\215ag \(v)3.185 F .685(erbose\) when)-.15 F(this is done to w)102 164.4 Q
+(atch what happens:)-.1 E(/usr/sbin/sendmail \255q \255v)142 180.6 Q -1.1(Yo)
+127 201 S 4.004(uc)1.1 G 1.504
+(an also limit the jobs to those with a particular queue identi\214er)151.564
+201 R 4.004(,s)-.4 G(ender)428.362 201 Q 4.004(,o)-.4 G 4.004(rr)461.676 201 S
+(ecipient)472.34 201 Q .686(using one of the queue modi\214ers.)102 213 R -.15
+(Fo)5.687 G 3.187(re).15 G .687(xample, \231\255qRberk)265.654 213 R(ele)-.1 E
+.687(y\232 restricts the queue run to jobs that)-.15 F(ha)102 225 Q .526 -.15
 (ve t)-.2 H .226(he string \231berk).15 F(ele)-.1 E .226(y\232 some)-.15 F .225
 (where in one of the recipient addresses.)-.25 F(Similarly)5.225 E 2.725<2c99>
 (ve t)-.2 H .226(he string \231berk).15 F(ele)-.1 E .226(y\232 some)-.15 F .225
 (where in one of the recipient addresses.)-.25 F(Similarly)5.225 E 2.725<2c99>
--.65 G .225(\255qSstring\232 lim-)441.185 196.8 R(its the run to particular se\
-nders and \231\255qIstring\232 limits it to particular identi\214ers.)102 208.8
-Q F0 2.5(3.4. Deb)87 232.8 R(ugging)-.2 E F1 1.365(There are a f)127 249 R
-1.365(airly lar)-.1 F 1.365(ge number of deb)-.18 F 1.365(ug \215ags b)-.2 F
-1.365(uilt into)-.2 F/F2 10/Times-Italic@0 SF(sendmail)3.865 E F1 6.365(.E)C
-1.365(ach deb)417.65 249 R 1.365(ug \215ag has a)-.2 F 1.116(number and a le)
-102 261 R -.15(ve)-.25 G 1.116(l, where higher le).15 F -.15(ve)-.25 G 1.116
+-.65 G .225(\255qSstring\232 lim-)441.185 225 R(its the run to particular send\
+ers and \231\255qIstring\232 limits it to particular identi\214ers.)102 237 Q
+F0 2.5(3.4. Deb)87 261 R(ugging)-.2 E F1 1.365(There are a f)127 277.2 R 1.365
+(airly lar)-.1 F 1.365(ge number of deb)-.18 F 1.365(ug \215ags b)-.2 F 1.365
+(uilt into)-.2 F/F2 10/Times-Italic@0 SF(sendmail)3.865 E F1 6.365(.E)C 1.365
+(ach deb)417.65 277.2 R 1.365(ug \215ag has a)-.2 F 1.116(number and a le)102
+289.2 R -.15(ve)-.25 G 1.116(l, where higher le).15 F -.15(ve)-.25 G 1.116
 (ls means to print out more information.).15 F 1.116(The con)6.116 F -.15(ve)
 (ls means to print out more information.).15 F 1.116(The con)6.116 F -.15(ve)
--.4 G 1.116(ntion is).15 F .293(that le)102 273 R -.15(ve)-.25 G .293
+-.4 G 1.116(ntion is).15 F .293(that le)102 301.2 R -.15(ve)-.25 G .293
 (ls greater than nine are \231absurd,).15 F 2.794<9a69>-.7 G .294(.e., the)
 (ls greater than nine are \231absurd,).15 F 2.794<9a69>-.7 G .294(.e., the)
-274.014 273 R 2.794(yp)-.15 G .294(rint out so much information that you w)
-313.612 273 R(ouldn')-.1 E(t)-.18 E .692(normally w)102 285 R .692
+274.014 301.2 R 2.794(yp)-.15 G .294(rint out so much information that you w)
+313.612 301.2 R(ouldn')-.1 E(t)-.18 E .692(normally w)102 313.2 R .692
 (ant to see them e)-.1 F .692(xcept for deb)-.15 F .692
 (ugging that particular piece of code.)-.2 F(Deb)5.692 E .691
 (ant to see them e)-.1 F .692(xcept for deb)-.15 F .692
 (ugging that particular piece of code.)-.2 F(Deb)5.692 E .691
-(ug \215ags are set)-.2 F(using the)102 297 Q F0<ad64>2.5 E F1
-(option; the syntax is:)2.5 E(deb)142 313.2 Q(ug-\215ag:)-.2 E F0<ad64>200.13
-313.2 Q F1(deb)2.5 E(ug-list)-.2 E(deb)142 325.2 Q 13.05(ug-list: deb)-.2 F
-(ug-option [ , deb)-.2 E(ug-option ])-.2 E(deb)142 337.2 Q -.28(ug-option: deb)
+(ug \215ags are set)-.2 F(using the)102 325.2 Q F0<ad64>2.5 E F1
+(option; the syntax is:)2.5 E(deb)142 341.4 Q(ug-\215ag:)-.2 E F0<ad64>200.13
+341.4 Q F1(deb)2.5 E(ug-list)-.2 E(deb)142 353.4 Q 13.05(ug-list: deb)-.2 F
+(ug-option [ , deb)-.2 E(ug-option ])-.2 E(deb)142 365.4 Q -.28(ug-option: deb)
 -.2 F(ug-range [ . deb)-.2 E(ug-le)-.2 E -.15(ve)-.25 G 2.5(l]).15 G(deb)142
 -.2 F(ug-range [ . deb)-.2 E(ug-le)-.2 E -.15(ve)-.25 G 2.5(l]).15 G(deb)142
-349.2 Q 3.07(ug-range: inte)-.2 F(ger | inte)-.15 E(ger \255 inte)-.15 E(ger)
--.15 E(deb)142 361.2 Q(ug-le)-.2 E -.15(ve)-.25 G 6.24(l: inte).15 F(ger)-.15 E
-(where spaces are for reading ease only)102 377.4 Q 5(.F)-.65 G(or e)268.64
-377.4 Q(xample,)-.15 E 34.99(\255d12 Set)142 393.6 R(\215ag 12 to le)2.5 E -.15
-(ve)-.25 G 2.5(l1).15 G 27.49(\255d12.3 Set)142 405.6 R(\215ag 12 to le)2.5 E
--.15(ve)-.25 G 2.5(l3).15 G 26.66(\255d3-17 Set)142 417.6 R
+377.4 Q 3.07(ug-range: inte)-.2 F(ger | inte)-.15 E(ger \255 inte)-.15 E(ger)
+-.15 E(deb)142 389.4 Q(ug-le)-.2 E -.15(ve)-.25 G 6.24(l: inte).15 F(ger)-.15 E
+(where spaces are for reading ease only)102 405.6 Q 5(.F)-.65 G(or e)268.64
+405.6 Q(xample,)-.15 E 34.99(\255d12 Set)142 421.8 R(\215ag 12 to le)2.5 E -.15
+(ve)-.25 G 2.5(l1).15 G 27.49(\255d12.3 Set)142 433.8 R(\215ag 12 to le)2.5 E
+-.15(ve)-.25 G 2.5(l3).15 G 26.66(\255d3-17 Set)142 445.8 R
 (\215ags 3 through 17 to le)2.5 E -.15(ve)-.25 G 2.5(l1).15 G 19.16
 (\215ags 3 through 17 to le)2.5 E -.15(ve)-.25 G 2.5(l1).15 G 19.16
-(\255d3-17.4 Set)142 429.6 R(\215ags 3 through 17 to le)2.5 E -.15(ve)-.25 G
-2.5(l4).15 G -.15(Fo)102 445.8 S 4.065(rac).15 G 1.565(omplete list of the a)
-132.75 445.8 R -.25(va)-.2 G 1.565(ilable deb).25 F 1.565
-(ug \215ags you will ha)-.2 F 1.865 -.15(ve t)-.2 H 4.065(ol).15 G 1.566
-(ook at the code \(the)380.895 445.8 R 4.066(ya)-.15 G 1.566(re too)479.384
-445.8 R(dynamic to k)102 457.8 Q(eep this documentation up to date\).)-.1 E F0
-2.5(3.5. T)87 481.8 R(rying a Differ)-.74 E(ent Con\214guration File)-.18 E F1
-(An alternati)127 498 Q .3 -.15(ve c)-.25 H
-(on\214guration \214le can be speci\214ed using the).15 E F0<ad43>2.5 E F1
-(\215ag; for e)2.5 E(xample,)-.15 E(/usr/sbin/sendmail \255Ctest.cf)142 514.2 Q
-.429(uses the con\214guration \214le)102 530.4 R F2(test.cf)2.928 E F1 .428
+(\255d3-17.4 Set)142 457.8 R(\215ags 3 through 17 to le)2.5 E -.15(ve)-.25 G
+2.5(l4).15 G -.15(Fo)102 474 S 4.065(rac).15 G 1.565(omplete list of the a)
+132.75 474 R -.25(va)-.2 G 1.565(ilable deb).25 F 1.565(ug \215ags you will ha)
+-.2 F 1.865 -.15(ve t)-.2 H 4.065(ol).15 G 1.566(ook at the code \(the)380.895
+474 R 4.066(ya)-.15 G 1.566(re too)479.384 474 R(dynamic to k)102 486 Q
+(eep this documentation up to date\).)-.1 E F0 2.5(3.5. T)87 510 R
+(rying a Differ)-.74 E(ent Con\214guration File)-.18 E F1(An alternati)127
+526.2 Q .3 -.15(ve c)-.25 H(on\214guration \214le can be speci\214ed using the)
+.15 E F0<ad43>2.5 E F1(\215ag; for e)2.5 E(xample,)-.15 E
+(/usr/sbin/sendmail \255Ctest.cf)142 542.4 Q .429
+(uses the con\214guration \214le)102 558.6 R F2(test.cf)2.928 E F1 .428
 (instead of the def)2.928 F(ault)-.1 E F2(/etc/sendmail.cf)2.928 E(.)-.15 E F1
 .428(If the)5.428 F F0<ad43>2.928 E F1 .428(\215ag has no v)2.928 F(alue)-.25 E
 (instead of the def)2.928 F(ault)-.1 E F2(/etc/sendmail.cf)2.928 E(.)-.15 E F1
 .428(If the)5.428 F F0<ad43>2.928 E F1 .428(\215ag has no v)2.928 F(alue)-.25 E
-(it def)102 542.4 Q(aults to)-.1 E F2(sendmail.cf)2.5 E F1
-(in the current directory)2.5 E(.)-.65 E F0 2.5(3.6. Changing)87 566.4 R(the V)
-2.5 E(alues of Options)-.92 E F1(Options can be o)127 582.6 Q -.15(ve)-.15 G
+(it def)102 570.6 Q(aults to)-.1 E F2(sendmail.cf)2.5 E F1
+(in the current directory)2.5 E(.)-.65 E F0 2.5(3.6. Changing)87 594.6 R(the V)
+2.5 E(alues of Options)-.92 E F1(Options can be o)127 610.8 Q -.15(ve)-.15 G
 (rridden using the).15 E F0<ad6f>2.5 E F1 2.5(\215ag. F)2.5 F(or e)-.15 E
 (rridden using the).15 E F0<ad6f>2.5 E F1 2.5(\215ag. F)2.5 F(or e)-.15 E
-(xample,)-.15 E(/usr/sbin/sendmail \255oT2m)142 598.8 Q(sets the)102 615 Q F0
+(xample,)-.15 E(/usr/sbin/sendmail \255oT2m)142 627 Q(sets the)102 643.2 Q F0
 (T)2.5 E F1(\(timeout\) option to tw)2.5 E 2.5(om)-.1 G
 (T)2.5 E F1(\(timeout\) option to tw)2.5 E 2.5(om)-.1 G
-(inutes for this run only)246.63 615 Q(.)-.65 E .181(Some options ha)127 631.2
-R .481 -.15(ve s)-.2 H .181(ecurity implications.).15 F .181(Sendmail allo)
-5.181 F .182(ws you to set these, b)-.25 F .182(ut refuses to run)-.2 F
-(as root thereafter)102 643.2 Q(.)-.55 E F0 2.5(3.7. Logging)87 667.2 R -.74
-(Tr)2.5 G(af\214c).74 E F1(Man)127 683.4 Q 3.255(yS)-.15 G .754
-(MTP implementations do not fully implement the protocol.)158.995 683.4 R -.15
-(Fo)5.754 G 3.254(re).15 G .754(xample, some per)428.542 683.4 R(-)-.2 E 1.178
-(sonal computer based SMTPs do not understand continuation lines in reply code\
-s.)102 695.4 R 1.178(These can be)6.178 F -.15(ve)102 707.4 S .13
-(ry hard to trace.).15 F .13(If you suspect such a problem, you can set traf)
-5.13 F .13(\214c logging using the)-.25 F F0<ad58>2.63 E F1 2.63(\215ag. F)2.63
-F(or)-.15 E -.15(ex)102 719.4 S(ample,).15 E EP
-%%Page: 17 14
+(inutes for this run only)246.63 643.2 Q(.)-.65 E .181(Some options ha)127
+659.4 R .481 -.15(ve s)-.2 H .181(ecurity implications.).15 F .181
+(Sendmail allo)5.181 F .182(ws you to set these, b)-.25 F .182
+(ut refuses to run)-.2 F(as root thereafter)102 671.4 Q(.)-.55 E F0 2.5
+(3.7. Logging)87 695.4 R -.74(Tr)2.5 G(af\214c).74 E F1(Man)127 711.6 Q 3.255
+(yS)-.15 G .754(MTP implementations do not fully implement the protocol.)
+158.995 711.6 R -.15(Fo)5.754 G 3.254(re).15 G .754(xample, some per)428.542
+711.6 R(-)-.2 E 1.178(sonal computer based SMTPs do not understand continuatio\
+n lines in reply codes.)102 723.6 R 1.178(These can be)6.178 F EP
+%%Page: 19 14
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-17)452.9 60 Q/F1 10/Times-Roman@0 SF
-(/usr/sbin/sendmail \255X /tmp/traf)142 96 Q(\214c -bd)-.25 E
-(will log all traf)102 112.2 Q(\214c in the \214le)-.25 E/F2 10/Times-Italic@0
-SF(/tmp/tr)2.5 E(af)-.15 E<8c63>-.18 E F1(.)A .128(This logs a lot of data v)
-127 128.4 R .128(ery quickly and should ne)-.15 F -.15(ve)-.25 G 2.628(rb).15 G
-2.628(eu)345.888 128.4 S .128(sed during normal operations.)357.956 128.4 R
-(After)5.129 E 1.326(starting up such a daemon, force the errant implementatio\
-n to send a message to your host.)102 140.4 R(All)6.326 E .504(message traf)102
-152.4 R .504(\214c in and out of)-.25 F F2(sendmail)3.004 E F1 3.004(,i)C .504
-(ncluding the incoming SMTP traf)265.258 152.4 R .505
-(\214c, will be logged in this)-.25 F(\214le.)102 164.4 Q F0 2.5(4. TUNING)72
-188.4 R F1 1.922(There are a number of con\214guration parameters you may w)112
-204.6 R 1.922(ant to change, depending on the)-.1 F .366
-(requirements of your site.)87 216.6 R .367
+(SMM:08-19)452.9 60 Q/F1 10/Times-Roman@0 SF -.15(ve)102 96 S .13
+(ry hard to trace.).15 F .13(If you suspect such a problem, you can set traf)
+5.13 F .13(\214c logging using the)-.25 F F0<ad58>2.63 E F1 2.63(\215ag. F)2.63
+F(or)-.15 E -.15(ex)102 108 S(ample,).15 E(/usr/sbin/sendmail \255X /tmp/traf)
+142 124.2 Q(\214c -bd)-.25 E(will log all traf)102 140.4 Q(\214c in the \214le)
+-.25 E/F2 10/Times-Italic@0 SF(/tmp/tr)2.5 E(af)-.15 E<8c63>-.18 E F1(.)A .128
+(This logs a lot of data v)127 156.6 R .128(ery quickly and should ne)-.15 F
+-.15(ve)-.25 G 2.628(rb).15 G 2.628(eu)345.888 156.6 S .128
+(sed during normal operations.)357.956 156.6 R(After)5.129 E 1.326(starting up\
+ such a daemon, force the errant implementation to send a message to your host\
+.)102 168.6 R(All)6.326 E .504(message traf)102 180.6 R .504
+(\214c in and out of)-.25 F F2(sendmail)3.004 E F1 3.004(,i)C .504
+(ncluding the incoming SMTP traf)265.258 180.6 R .505
+(\214c, will be logged in this)-.25 F(\214le.)102 192.6 Q F0 2.5(4. TUNING)72
+216.6 R F1 1.922(There are a number of con\214guration parameters you may w)112
+232.8 R 1.922(ant to change, depending on the)-.1 F .366
+(requirements of your site.)87 244.8 R .367
 (Most of these are set using an option in the con\214guration \214le.)5.366 F
 (Most of these are set using an option in the con\214guration \214le.)5.366 F
--.15(Fo)5.367 G 2.867(re).15 G(xample,)472.06 216.6 Q(the line \231O)87 228.6 Q
+-.15(Fo)5.367 G 2.867(re).15 G(xample,)472.06 244.8 Q(the line \231O)87 256.8 Q
 (T5d\232 sets option \231T\232 to the v)-.4 E(alue \2315d\232 \(\214v)-.25 E
 (T5d\232 sets option \231T\232 to the v)-.4 E(alue \2315d\232 \(\214v)-.25 E
-2.5(ed)-.15 G(ays\).)312.55 228.6 Q .735(Most of these options ha)112 244.8 R
+2.5(ed)-.15 G(ays\).)312.55 256.8 Q .735(Most of these options ha)112 273 R
 1.035 -.15(ve a)-.2 H .735(ppropriate def).15 F .735(aults for most sites.)-.1
 F(Ho)5.735 E(we)-.25 E -.15(ve)-.25 G 1.535 -.4(r, s).15 H .735(ites ha).4 F
 1.035 -.15(ve a)-.2 H .735(ppropriate def).15 F .735(aults for most sites.)-.1
 F(Ho)5.735 E(we)-.25 E -.15(ve)-.25 G 1.535 -.4(r, s).15 H .735(ites ha).4 F
-.735(ving v)-.2 F .735(ery high)-.15 F .045(mail loads may \214nd the)87 256.8
-2.545(yn)-.15 G .046(eed to tune them as appropriate for their mail load.)
-193.465 256.8 R .046(In particular)5.046 F 2.546(,s)-.4 G .046(ites e)459.394
-256.8 R(xperi-)-.15 E 1.088(encing a lar)87 268.8 R 1.088
-(ge number of small messages, man)-.18 F 3.588(yo)-.15 G 3.587(fw)294.504 268.8
-S 1.087(hich are deli)308.641 268.8 R -.15(ve)-.25 G 1.087(red to man).15 F
-3.587(yr)-.15 G 1.087(ecipients, may \214nd)425.996 268.8 R(that the)87 280.8 Q
-2.5(yn)-.15 G(eed to adjust the parameters dealing with queue priorities.)
-129.07 280.8 Q F0 2.5(4.1. T)87 304.8 R(imeouts)-.18 E F1 .582(All time interv)
-127 321 R .583(als are set using a scaled syntax.)-.25 F -.15(Fo)5.583 G 3.083
-(re).15 G .583(xample, \23110m\232 represents ten minutes,)346.138 321 R
-(whereas \2312h30m\232 represents tw)102 333 Q 2.5(oa)-.1 G(nd a half hours.)
-241.3 333 Q(The full set of scales is:)5 E 16.11(ss)142 349.2 S(econds)165.89
-349.2 Q 12.22(mm)142 361.2 S(inutes)169.78 361.2 Q 15(hh)142 373.2 S(ours)167
-373.2 Q 15(dd)142 385.2 S(ays)167 385.2 Q 12.78(ww)142 397.2 S(eeks)169.22
-397.2 Q F0 2.5(4.1.1. Queue)102 425.4 R(inter)2.5 E -.1(va)-.1 G(l).1 E F1 .18
-(The ar)142 441.6 R .18(gument to the)-.18 F F0<ad71>2.68 E F1 .18
+.735(ving v)-.2 F .735(ery high)-.15 F .045(mail loads may \214nd the)87 285 R
+2.545(yn)-.15 G .046(eed to tune them as appropriate for their mail load.)
+193.465 285 R .046(In particular)5.046 F 2.546(,s)-.4 G .046(ites e)459.394 285
+R(xperi-)-.15 E 1.088(encing a lar)87 297 R 1.088
+(ge number of small messages, man)-.18 F 3.588(yo)-.15 G 3.587(fw)294.504 297 S
+1.087(hich are deli)308.641 297 R -.15(ve)-.25 G 1.087(red to man).15 F 3.587
+(yr)-.15 G 1.087(ecipients, may \214nd)425.996 297 R(that the)87 309 Q 2.5(yn)
+-.15 G(eed to adjust the parameters dealing with queue priorities.)129.07 309 Q
+F0 2.5(4.1. T)87 333 R(imeouts)-.18 E F1 .582(All time interv)127 349.2 R .583
+(als are set using a scaled syntax.)-.25 F -.15(Fo)5.583 G 3.083(re).15 G .583
+(xample, \23110m\232 represents ten minutes,)346.138 349.2 R
+(whereas \2312h30m\232 represents tw)102 361.2 Q 2.5(oa)-.1 G(nd a half hours.)
+241.3 361.2 Q(The full set of scales is:)5 E 16.11(ss)142 377.4 S(econds)165.89
+377.4 Q 12.22(mm)142 389.4 S(inutes)169.78 389.4 Q 15(hh)142 401.4 S(ours)167
+401.4 Q 15(dd)142 413.4 S(ays)167 413.4 Q 12.78(ww)142 425.4 S(eeks)169.22
+425.4 Q F0 2.5(4.1.1. Queue)102 453.6 R(inter)2.5 E -.1(va)-.1 G(l).1 E F1 .18
+(The ar)142 469.8 R .18(gument to the)-.18 F F0<ad71>2.68 E F1 .18
 (\215ag speci\214es ho)2.68 F 2.68(wo)-.25 G .18
 (\215ag speci\214es ho)2.68 F 2.68(wo)-.25 G .18
-(ften a sub-daemon will run the queue.)319.25 441.6 R .18(This is)5.18 F .967
-(typically set to between \214fteen minutes and one hour)117 453.6 R 5.968(.R)
--.55 G .968(FC 1123 section 5.3.1.1 recommends)350.968 453.6 R
-(that this be at least 30 minutes.)117 465.6 Q F0 2.5(4.1.2. Read)102 489.6 R
+(ften a sub-daemon will run the queue.)319.25 469.8 R .18(This is)5.18 F .967
+(typically set to between \214fteen minutes and one hour)117 481.8 R 5.968(.R)
+-.55 G .968(FC 1123 section 5.3.1.1 recommends)350.968 481.8 R
+(that this be at least 30 minutes.)117 493.8 Q F0 2.5(4.1.2. Read)102 517.8 R
 (timeouts)2.5 E F1 .51(It is possible to time out when reading the standard in\
 (timeouts)2.5 E F1 .51(It is possible to time out when reading the standard in\
-put or when reading from a remote)142 505.8 R .324(SMTP serv)117 517.8 R(er)
--.15 E 5.324(.T)-.55 G .324(hese timeouts are set using the)183.608 517.8 R F0
-(r)2.824 E F1 .324(option in the con\214guration \214le.)2.824 F .324(The ar)
-5.324 F(gument)-.18 E .843(is a list of)117 529.8 R F2 -.1(ke)3.342 G(ywor)-.2
-E(d=value)-.37 E F1 3.342(pairs. The)3.342 F .842(recognized k)3.342 F -.15(ey)
+put or when reading from a remote)142 534 R .324(SMTP serv)117 546 R(er)-.15 E
+5.324(.T)-.55 G .324(hese timeouts are set using the)183.608 546 R F0(r)2.824 E
+F1 .324(option in the con\214guration \214le.)2.824 F .324(The ar)5.324 F
+(gument)-.18 E .843(is a list of)117 558 R F2 -.1(ke)3.342 G(ywor)-.2 E
+(d=value)-.37 E F1 3.342(pairs. The)3.342 F .842(recognized k)3.342 F -.15(ey)
 -.1 G -.1(wo).15 G .842(rds, their def).1 F .842(ault v)-.1 F .842
 -.1 G -.1(wo).15 G .842(rds, their def).1 F .842(ault v)-.1 F .842
-(alues, and the mini-)-.25 F(mum v)117 541.8 Q(alues allo)-.25 E
-(wed by RFC 1123 section 5.3.2 are:)-.25 E 46.16(initial The)117 558 R -.1(wa)
-2.5 G(it for the initial 220 greeting message [5m, 5m].).1 E 52.28(helo The)117
-574.2 R -.1(wa)4.226 G 1.727
+(alues, and the mini-)-.25 F(mum v)117 570 Q(alues allo)-.25 E
+(wed by RFC 1123 section 5.3.2 are:)-.25 E 46.16(initial The)117 586.2 R -.1
+(wa)2.5 G(it for the initial 220 greeting message [5m, 5m].).1 E 52.28
+(helo The)117 602.4 R -.1(wa)4.226 G 1.727
 (it for a reply from a HELO or EHLO command [5m, unspeci\214ed].).1 F .1
 (it for a reply from a HELO or EHLO command [5m, unspeci\214ed].).1 F .1
-(This may require a host name lookup, so \214v)189 586.2 R 2.6(em)-.15 G .1
-(inutes is probably a reasonable)380.29 586.2 R(minimum.)189 598.2 Q 46.72
-(mail\207 The)117 614.4 R -.1(wa)2.5 G
+(This may require a host name lookup, so \214v)189 614.4 R 2.6(em)-.15 G .1
+(inutes is probably a reasonable)380.29 614.4 R(minimum.)189 626.4 Q 46.72
+(mail\207 The)117 642.6 R -.1(wa)2.5 G
 (it for a reply from a MAIL command [10m, 5m].).1 E 48.95(rcpt\207 The)117
 (it for a reply from a MAIL command [10m, 5m].).1 E 48.95(rcpt\207 The)117
-630.6 R -.1(wa)3.481 G .981(it for a reply from a RCPT command [1h, 5m].).1 F
+658.8 R -.1(wa)3.481 G .981(it for a reply from a RCPT command [1h, 5m].).1 F
 .982(This should be long)5.982 F
 .982(This should be long)5.982 F
-(because it could be pointing at a list that tak)189 642.6 Q
-(es a long time to e)-.1 E(xpand.)-.15 E 34.5(datainit\207 The)117 658.8 R -.1
+(because it could be pointing at a list that tak)189 670.8 Q
+(es a long time to e)-.1 E(xpand.)-.15 E 34.5(datainit\207 The)117 687 R -.1
 (wa)2.5 G(it for a reply from a D).1 E -1.21 -1.11(AT A)-.4 H
 (wa)2.5 G(it for a reply from a D).1 E -1.21 -1.11(AT A)-.4 H
-(command [5m, 2m].)3.61 E 25.62(datablock\207 The)117 675 R -.1(wa)2.696 G .196
-(it for reading a data block \(that is, the body of the message\).).1 F .196
-([1h, 3m].)5.196 F .621
+(command [5m, 2m].)3.61 E 25.62(datablock\207 The)117 703.2 R -.1(wa)2.696 G
+.196(it for reading a data block \(that is, the body of the message\).).1 F
+.196([1h, 3m].)5.196 F 2.686
 (This should be long because it also applies to programs piping input to)189
 (This should be long because it also applies to programs piping input to)189
-687 R F2(send-)3.121 E(mail)189 699 Q F1(which ha)2.5 E .3 -.15(ve n)-.2 H 2.5
-(og).15 G(uarantee of promptness.)274.75 699 Q EP
-%%Page: 18 15
+715.2 R EP
+%%Page: 20 15
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-18 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 30.06
-(data\214nal\207 The)117 96 R -.1(wa)2.806 G .306
-(it for a reply from the dot terminating a message.).1 F .306([1h, 10m].)5.306
-F .306(If this is)5.306 F .883
-(shorter than the time actually needed for the recei)189 108 R -.15(ve)-.25 G
-3.384(rt).15 G 3.384(od)412.878 108 S(eli)426.262 108 Q -.15(ve)-.25 G 3.384
-(rt).15 G .884(he message,)454.796 108 R(duplicates will be generated.)189 120
-Q(This is discussed in RFC 1047.)5 E 55.06(rset The)117 136.2 R -.1(wa)2.5 G
-(it for a reply from a RSET command [5m, unspeci\214ed].).1 E 53.94(quit The)
-117 152.4 R -.1(wa)2.5 G(it for a reply from a Q).1 E
-(UIT command [2m, unspeci\214ed].)-.1 E 50.61(misc The)117 168.6 R -.1(wa)2.761
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-20 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Italic@0 SF(sendmail)189 96
+Q/F2 10/Times-Roman@0 SF(which ha)2.5 E .3 -.15(ve n)-.2 H 2.5(og).15 G
+(uarantee of promptness.)293.08 96 Q 30.06(data\214nal\207 The)117 112.2 R -.1
+(wa)2.806 G .306(it for a reply from the dot terminating a message.).1 F .306
+([1h, 10m].)5.306 F .306(If this is)5.306 F .883
+(shorter than the time actually needed for the recei)189 124.2 R -.15(ve)-.25 G
+3.384(rt).15 G 3.384(od)412.878 124.2 S(eli)426.262 124.2 Q -.15(ve)-.25 G
+3.384(rt).15 G .884(he message,)454.796 124.2 R(duplicates will be generated.)
+189 136.2 Q(This is discussed in RFC 1047.)5 E 55.06(rset The)117 152.4 R -.1
+(wa)2.5 G(it for a reply from a RSET command [5m, unspeci\214ed].).1 E 53.94
+(quit The)117 168.6 R -.1(wa)2.5 G(it for a reply from a Q).1 E
+(UIT command [2m, unspeci\214ed].)-.1 E 50.61(misc The)117 184.8 R -.1(wa)2.761
 G .261(it for a reply from miscellaneous \(b).1 F .261
 (ut short\) commands such as NOOP)-.2 F(\(no-operation\) and VERB \(go into v)
 G .261(it for a reply from miscellaneous \(b).1 F .261
 (ut short\) commands such as NOOP)-.2 F(\(no-operation\) and VERB \(go into v)
-189 180.6 Q(erbose mode\).)-.15 E([2m, unspeci\214ed].)5 E 25.06
-(command\207 In)117 196.8 R(serv)2.5 E(er SMTP)-.15 E 2.5(,t)-1.11 G
-(he time to w)259.4 196.8 Q(ait for another command.)-.1 E([1h, 5m].)5 E -.15
-(Fo)117 213 S 3.633(rc).15 G 1.134
-(ompatibility with old con\214guration \214les, if no `)138.813 213 R(`k)-.74 E
--.15(ey)-.1 G -.1(wo).15 G(rd=').1 E 3.634('i)-.74 G 3.634(ss)390.854 213 S
-1.134(peci\214ed, all the timeouts)402.268 213 R(mark)117 225 Q
-(ed with \207 are set to the indicated v)-.1 E(alue.)-.25 E(Man)142 241.2 Q
-2.501(yo)-.15 G 2.501(ft)172.681 241.2 S .001(he RFC 1123 minimum v)181.292
-241.2 R .001(alues may well be too short.)-.25 F/F2 10/Times-Italic@0 SF
-(Sendmail)5 E F1 -.1(wa)2.5 G 2.5(sd).1 G(esigned to)463.17 241.2 Q .066
-(the RFC 822 protocols, which did not specify read timeouts; hence,)117 253.2 R
-F2(sendmail)2.567 E F1 .067(does not guarantee)2.567 F .438
-(to reply to messages promptly)117 265.2 R 5.438(.I)-.65 G 2.938(np)249.92
-265.2 S(articular)262.858 265.2 Q 2.938(,a\231)-.4 G .438
-(RCPT\232 command specifying a mailing list will)313.034 265.2 R -.15(ex)117
-279.2 S .205(pand and v).15 F .205(erify the entire list; a lar)-.15 F .205
-(ge list on a slo)-.18 F 2.705(ws)-.25 G .205(ystem may tak)339.81 279.2 R
-2.705(em)-.1 G .205(ore than \214v)413.375 279.2 R 2.705(em)-.15 G(inutes)
-474.11 279.2 Q/F3 7/Times-Roman@0 SF(6)498 275.2 Q F1(.)501.5 279.2 Q 3.036(Ir)
-117 291.2 S .536(ecommend a one hour timeout \212 since this f)126.696 291.2 R
+189 196.8 Q(erbose mode\).)-.15 E([2m, unspeci\214ed].)5 E 25.06
+(command\207 In)117 213 R(serv)2.5 E(er SMTP)-.15 E 2.5(,t)-1.11 G
+(he time to w)259.4 213 Q(ait for another command.)-.1 E([1h, 5m].)5 E 49.5
+(ident The)117 229.2 R(timeout w)2.5 E
+(aiting for a reply to an IDENT query [30s, unspeci\214ed].)-.1 E -.15(Fo)117
+245.4 S 3.633(rc).15 G 1.134
+(ompatibility with old con\214guration \214les, if no `)138.813 245.4 R(`k)-.74
+E -.15(ey)-.1 G -.1(wo).15 G(rd=').1 E 3.634('i)-.74 G 3.634(ss)390.854 245.4 S
+1.134(peci\214ed, all the timeouts)402.268 245.4 R(mark)117 257.4 Q
+(ed with \207 are set to the indicated v)-.1 E(alue.)-.25 E(Man)142 273.6 Q
+2.501(yo)-.15 G 2.501(ft)172.681 273.6 S .001(he RFC 1123 minimum v)181.292
+273.6 R .001(alues may well be too short.)-.25 F F1(Sendmail)5 E F2 -.1(wa)2.5
+G 2.5(sd).1 G(esigned to)463.17 273.6 Q .066
+(the RFC 822 protocols, which did not specify read timeouts; hence,)117 285.6 R
+F1(sendmail)2.567 E F2 .067(does not guarantee)2.567 F .438
+(to reply to messages promptly)117 297.6 R 5.438(.I)-.65 G 2.938(np)249.92
+297.6 S(articular)262.858 297.6 Q 2.938(,a\231)-.4 G .438
+(RCPT\232 command specifying a mailing list will)313.034 297.6 R -.15(ex)117
+311.6 S .205(pand and v).15 F .205(erify the entire list; a lar)-.15 F .205
+(ge list on a slo)-.18 F 2.705(ws)-.25 G .205(ystem may tak)339.81 311.6 R
+2.705(em)-.1 G .205(ore than \214v)413.375 311.6 R 2.705(em)-.15 G(inutes)
+474.11 311.6 Q/F3 7/Times-Roman@0 SF(7)498 307.6 Q F2(.)501.5 311.6 Q 3.036(Ir)
+117 323.6 S .536(ecommend a one hour timeout \212 since this f)126.696 323.6 R
 .536(ailure is rare, a long timeout is not onerous and)-.1 F
 .536(ailure is rare, a long timeout is not onerous and)-.1 F
-(may ultimately help reduce netw)117 303.2 Q(ork load.)-.1 E -.15(Fo)142 319.4
-S 2.5(re).15 G(xample, the line:)162.53 319.4 Q(Orcommand=25m,datablock=3h)157
-335.6 Q .344(sets the serv)117 351.8 R .344(er SMTP command timeout to 25 minu\
-tes and the input data block timeout to three)-.15 F(hours.)117 363.8 Q F0 2.5
-(4.1.3. Message)102 387.8 R(timeouts)2.5 E F1 .237
-(After sitting in the queue for a fe)142 404 R 2.737(wd)-.25 G .237
-(ays, a message will time out.)289.726 404 R .238(This is to insure that at)
-5.238 F .283(least the sender is a)117 416 R -.1(wa)-.15 G .282
+(may ultimately help reduce netw)117 335.6 Q(ork load.)-.1 E -.15(Fo)142 351.8
+S 2.5(re).15 G(xample, the line:)162.53 351.8 Q(Orcommand=25m,datablock=3h)157
+368 Q .344(sets the serv)117 384.2 R .344(er SMTP command timeout to 25 minute\
+s and the input data block timeout to three)-.15 F(hours.)117 396.2 Q F0 2.5
+(4.1.3. Message)102 420.2 R(timeouts)2.5 E F2 .237
+(After sitting in the queue for a fe)142 436.4 R 2.737(wd)-.25 G .237
+(ays, a message will time out.)289.726 436.4 R .238(This is to insure that at)
+5.238 F .283(least the sender is a)117 448.4 R -.1(wa)-.15 G .282
 (re of the inability to send a message.).1 F .282
 (re of the inability to send a message.).1 F .282
-(The timeout is typically set to three)5.282 F 2.5(days. This)117 428 R
-(timeout is set using the)2.5 E F0(T)2.5 E F1
+(The timeout is typically set to three)5.282 F 2.5(days. This)117 460.4 R
+(timeout is set using the)2.5 E F0(T)2.5 E F2
 (option in the con\214guration \214le.)2.5 E .413(The time of submission is se\
 (option in the con\214guration \214le.)2.5 E .413(The time of submission is se\
-t in the queue, rather than the amount of time left until time-)142 444.2 R
-3.263(out. As)117 456.2 R 3.263(ar)3.263 G .763
-(esult, you can \215ush messages that ha)163.449 456.2 R 1.062 -.15(ve b)-.2 H
+t in the queue, rather than the amount of time left until time-)142 476.6 R
+3.263(out. As)117 488.6 R 3.263(ar)3.263 G .763
+(esult, you can \215ush messages that ha)163.449 488.6 R 1.062 -.15(ve b)-.2 H
 .762(een hanging for a short period by running).15 F
 .762(een hanging for a short period by running).15 F
-(the queue with a short message timeout.)117 468.2 Q -.15(Fo)5 G 2.5(re).15 G
-(xample,)302.79 468.2 Q(/usr/sbin/sendmail \255oT1d \255q)157 484.4 Q
-(will run the queue and \215ush an)117 500.6 Q(ything that is one day old.)-.15
-E 1.077(Since this option is global, and since you can not)142 516.8 R F2 3.577
-(ap)3.577 G(riori)364.395 516.8 Q F1(kno)3.577 E 3.577(wh)-.25 G 1.577 -.25
-(ow l)416.859 516.8 T 1.077(ong another host).25 F .476
-(outside your domain will be do)117 528.8 R .475(wn, a \214v)-.25 F 2.975(ed)
--.15 G .475(ay timeout is recommended.)291.785 528.8 R .475(This allo)5.475 F
-.475(ws a recipient)-.25 F 1.579(to \214x the problem e)117 540.8 R -.15(ve)
--.25 G 4.079(ni).15 G 4.079(fi)222.545 540.8 S 4.079(to)232.734 540.8 S 1.579
-(ccurs at the be)244.593 540.8 R 1.58(ginning of a long week)-.15 F 4.08
+(the queue with a short message timeout.)117 500.6 Q -.15(Fo)5 G 2.5(re).15 G
+(xample,)302.79 500.6 Q(/usr/sbin/sendmail \255oT1d \255q)157 516.8 Q
+(will run the queue and \215ush an)117 533 Q(ything that is one day old.)-.15 E
+1.077(Since this option is global, and since you can not)142 549.2 R F1 3.577
+(ap)3.577 G(riori)364.395 549.2 Q F2(kno)3.577 E 3.577(wh)-.25 G 1.577 -.25
+(ow l)416.859 549.2 T 1.077(ong another host).25 F .476
+(outside your domain will be do)117 561.2 R .475(wn, a \214v)-.25 F 2.975(ed)
+-.15 G .475(ay timeout is recommended.)291.785 561.2 R .475(This allo)5.475 F
+.475(ws a recipient)-.25 F 1.579(to \214x the problem e)117 573.2 R -.15(ve)
+-.25 G 4.079(ni).15 G 4.079(fi)222.545 573.2 S 4.079(to)232.734 573.2 S 1.579
+(ccurs at the be)244.593 573.2 R 1.58(ginning of a long week)-.15 F 4.08
 (end. RFC)-.1 F 1.58(1123 section)4.08 F
 (end. RFC)-.1 F 1.58(1123 section)4.08 F
-(5.3.1.1 says that this parameter should be `)117 552.8 Q
-(`at least 4\2555 days')-.74 E('.)-.74 E(The)142 569 Q F0(T)2.711 E F1 .211
+(5.3.1.1 says that this parameter should be `)117 585.2 Q
+(`at least 4\2555 days')-.74 E('.)-.74 E(The)142 601.4 Q F0(T)2.711 E F2 .211
 (option can also tak)2.711 F 2.711(eas)-.1 G .21
 (option can also tak)2.711 F 2.711(eas)-.1 G .21
-(econd timeout indicating a time after which a w)263.637 569 R .21(arning mes-)
--.1 F(sage should be sent; the tw)117 581 Q 2.5(ot)-.1 G
-(imeouts are separated by a slash.)234.67 581 Q -.15(Fo)5 G 2.5(re).15 G
-(xample, the v)391.28 581 Q(alue)-.25 E(5d/4h)157 597.2 Q .971
-(causes email to f)117 613.4 R .971(ail after \214v)-.1 F 3.471(ed)-.15 G .971
-(ays, b)245.326 613.4 R .971(ut a w)-.2 F .971
+(econd timeout indicating a time after which a w)263.637 601.4 R .21
+(arning mes-)-.1 F(sage should be sent; the tw)117 613.4 Q 2.5(ot)-.1 G
+(imeouts are separated by a slash.)234.67 613.4 Q -.15(Fo)5 G 2.5(re).15 G
+(xample, the v)391.28 613.4 Q(alue)-.25 E(5d/4h)157 629.6 Q .971
+(causes email to f)117 645.8 R .971(ail after \214v)-.1 F 3.471(ed)-.15 G .971
+(ays, b)245.326 645.8 R .971(ut a w)-.2 F .971
 (arning message will be sent after four hours.)-.1 F(This)5.972 E
 (arning message will be sent after four hours.)-.1 F(This)5.972 E
-(should be lar)117 625.4 Q(ge enough that the message will ha)-.18 E .3 -.15
+(should be lar)117 657.8 Q(ge enough that the message will ha)-.18 E .3 -.15
 (ve b)-.2 H(een tried se).15 E -.15(ve)-.25 G(ral times.).15 E .32 LW 76 669.2
 72 669.2 DL 80 669.2 76 669.2 DL 84 669.2 80 669.2 DL 88 669.2 84 669.2 DL 92
 669.2 88 669.2 DL 96 669.2 92 669.2 DL 100 669.2 96 669.2 DL 104 669.2 100
 (ve b)-.2 H(een tried se).15 E -.15(ve)-.25 G(ral times.).15 E .32 LW 76 669.2
 72 669.2 DL 80 669.2 76 669.2 DL 84 669.2 80 669.2 DL 88 669.2 84 669.2 DL 92
 669.2 88 669.2 DL 96 669.2 92 669.2 DL 100 669.2 96 669.2 DL 104 669.2 100
@@ -1378,17 +1377,17 @@ DL 148 669.2 144 669.2 DL 152 669.2 148 669.2 DL 156 669.2 152 669.2 DL 160
 669.2 DL 176 669.2 172 669.2 DL 180 669.2 176 669.2 DL 184 669.2 180 669.2 DL
 188 669.2 184 669.2 DL 192 669.2 188 669.2 DL 196 669.2 192 669.2 DL 200 669.2
 196 669.2 DL 204 669.2 200 669.2 DL 208 669.2 204 669.2 DL 212 669.2 208 669.2
 669.2 DL 176 669.2 172 669.2 DL 180 669.2 176 669.2 DL 184 669.2 180 669.2 DL
 188 669.2 184 669.2 DL 192 669.2 188 669.2 DL 196 669.2 192 669.2 DL 200 669.2
 196 669.2 DL 204 669.2 200 669.2 DL 208 669.2 204 669.2 DL 212 669.2 208 669.2
-DL 216 669.2 212 669.2 DL/F4 5/Times-Roman@0 SF(6)93.6 679.6 Q/F5 8
+DL 216 669.2 212 669.2 DL/F4 5/Times-Roman@0 SF(7)93.6 679.6 Q/F5 8
 /Times-Roman@0 SF .344(This v)3.2 J .344(eri\214cation includes looking up e)
 -.12 F -.12(ve)-.2 G .344(ry address with the name serv).12 F .344(er; this in)
 -.12 F -.16(vo)-.32 G(lv).16 E .344(es netw)-.12 F .343
 (ork delays, and can in some cases)-.08 F(can be considerable.)72 692.4 Q EP
 /Times-Roman@0 SF .344(This v)3.2 J .344(eri\214cation includes looking up e)
 -.12 F -.12(ve)-.2 G .344(ry address with the name serv).12 F .344(er; this in)
 -.12 F -.16(vo)-.32 G(lv).16 E .344(es netw)-.12 F .343
 (ork delays, and can in some cases)-.08 F(can be considerable.)72 692.4 Q EP
-%%Page: 19 16
+%%Page: 21 16
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-19)452.9 60 Q 2.5(4.2. F)87 96 R(orking During Queue Runs)-.25 E/F1 10
+(SMM:08-21)452.9 60 Q 2.5(4.2. F)87 96 R(orking During Queue Runs)-.25 E/F1 10
 /Times-Roman@0 SF .303(By setting the)127 112.2 R F0(Y)2.802 E F1(option,)2.802
 E/F2 10/Times-Italic@0 SF(sendmail)2.802 E F1 .302(will fork before each indi)
 2.802 F .302(vidual message while running the)-.25 F 2.513(queue. This)102
 /Times-Roman@0 SF .303(By setting the)127 112.2 R F0(Y)2.802 E F1(option,)2.802
 E/F2 10/Times-Italic@0 SF(sendmail)2.802 E F1 .302(will fork before each indi)
 2.802 F .302(vidual message while running the)-.25 F 2.513(queue. This)102
@@ -1426,10 +1425,10 @@ F1(and)3.394 E F0(z)3.394 E F1(options)3.394 E(respecti)102 333 Q -.15(ve)-.25
 G(ly).15 E 5.962(.T)-.65 G(he)163.842 333 Q 3.462(yd)-.15 G(ef)186.594 333 Q
 .962(ault to 30000 \(for the recipient f)-.1 F .963
 (actor\) and 1800 \(for the class f)-.1 F 3.463(actor\). The)-.1 F
 G(ly).15 E 5.962(.T)-.65 G(he)163.842 333 Q 3.462(yd)-.15 G(ef)186.594 333 Q
 .962(ault to 30000 \(for the recipient f)-.1 F .963
 (actor\) and 1800 \(for the class f)-.1 F 3.463(actor\). The)-.1 F
-(initial priority is:)102 345 Q F2(pri)244.54 363 Q/F3 10/Symbol SF(=)3.16 E F1
-(\()2.8 E F2(class).2 E F3<b4>2.47 E F0(z\))2.2 E F3(+)2.2 E F1(\()2.2 E F2
-(nrcpt).36 E F3<b4>2.88 E F0(y\))2.2 E F1(\(Remember)102 381 Q 3.328(,h)-.4 G
-.828(igher v)159.638 381 R .828
+(initial priority is:)102 345 Q F2(pri)223.76 363 Q/F3 10/Symbol SF(=)3.16 E F2
+(msgsize)3.18 E F3(-)2.38 E F1(\()2.2 E F2(class).2 E F3<b4>2.47 E F0(z\))2.2 E
+F3(+)2.2 E F1(\()2.2 E F2(nrcpt).36 E F3<b4>2.88 E F0(y\))2.2 E F1(\(Remember)
+102 381 Q 3.328(,h)-.4 G .828(igher v)159.638 381 R .828
 (alues for this parameter actually mean that the job will be treated with lo)
 -.25 F(wer)-.25 E(priority)102 393 Q(.\))-.65 E 1.519(The priority of a job ca\
 n also be adjusted each time it is processed \(that is, each time an)127 409.2
 (alues for this parameter actually mean that the job will be treated with lo)
 -.25 F(wer)-.25 E(priority)102 393 Q(.\))-.65 E 1.519(The priority of a job ca\
 n also be adjusted each time it is processed \(that is, each time an)127 409.2
@@ -1457,12 +1456,12 @@ E F0(q)A F1 .987(option\) di)3.487 F .986(vided by the dif)-.25 F .986
 (queued if)102 533.4 Q(f:)-.25 E F2(pri)269.76 554.63 Q F1(>)3.16 E F0(q)312.48
 547.63 Q F2(LA)294.81 561.63 Q F3(-)2.23 E F0(x)2.2 E F3(+)2.2 E .4 LW 336.29
 552.03 294.23 552.03 DL F1(1)331.29 561.63 Q(The)102 576.13 Q F0(q)3.143 E F1
 (queued if)102 533.4 Q(f:)-.25 E F2(pri)269.76 554.63 Q F1(>)3.16 E F0(q)312.48
 547.63 Q F2(LA)294.81 561.63 Q F3(-)2.23 E F0(x)2.2 E F3(+)2.2 E .4 LW 336.29
 552.03 294.23 552.03 DL F1(1)331.29 561.63 Q(The)102 576.13 Q F0(q)3.143 E F1
-.643(option def)3.143 F .642(aults to 200000, so each point of load a)-.1 F
--.15(ve)-.2 G .642(rage is w).15 F .642(orth 200000 priority points \(as)-.1 F
+.643(option def)3.143 F .642(aults to 600000, so each point of load a)-.1 F
+-.15(ve)-.2 G .642(rage is w).15 F .642(orth 600000 priority points \(as)-.1 F
 (described abo)102 588.13 Q -.15(ve)-.15 G(\).).15 E -.15(Fo)127 604.33 S 2.886
 (rd).15 G .386(rastic cases, the)148.626 604.33 R F0(X)2.887 E F1 .387
 (described abo)102 588.13 Q -.15(ve)-.15 G(\).).15 E -.15(Fo)127 604.33 S 2.886
 (rd).15 G .386(rastic cases, the)148.626 604.33 R F0(X)2.887 E F1 .387
-(option de\214nes a load a)2.887 F -.15(ve)-.2 G .387
-(rage at which sendmail will refuse to accept).15 F(netw)102 616.33 Q
+(option de\214nes a load a)2.887 F -.15(ve)-.2 G .387(rage at which).15 F F2
+(sendmail)2.887 E F1 .387(will refuse to accept)2.887 F(netw)102 616.33 Q
 (ork connections.)-.1 E
 (Locally generated mail \(including incoming UUCP mail\) is still accepted.)5 E
 F0 2.5(4.5. Deli)87 640.33 R -.1(ve)-.1 G(ry Mode).1 E F1 .417
 (ork connections.)-.1 E
 (Locally generated mail \(including incoming UUCP mail\) is still accepted.)5 E
 F0 2.5(4.5. Deli)87 640.33 R -.1(ve)-.1 G(ry Mode).1 E F1 .417
@@ -1479,11 +1478,11 @@ F F2(sendmail)2.916 E F1 .416
 (r\)).15 E 1.49(There are tradeof)102 724.93 R 3.99(fs. Mode)-.25 F 1.491
 (\231i\232 passes the maximum amount of information to the sender)3.99 F 3.991
 (,b)-.4 G 1.491(ut is)485.559 724.93 R EP
 (r\)).15 E 1.49(There are tradeof)102 724.93 R 3.99(fs. Mode)-.25 F 1.491
 (\231i\232 passes the maximum amount of information to the sender)3.99 F 3.991
 (,b)-.4 G 1.491(ut is)485.559 724.93 R EP
-%%Page: 20 17
+%%Page: 22 17
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-20 Sendmail)72 60 R
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-22 Sendmail)72 60 R
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .433(hardly e)
 102 96 R -.15(ve)-.25 G 2.933(rn).15 G(ecessary)155.226 96 Q 5.433(.M)-.65 G
 .433(ode \231q\232 puts the minimum load on your machine, b)205.269 96 R .432
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .433(hardly e)
 102 96 R -.15(ve)-.25 G 2.933(rn).15 G(ecessary)155.226 96 Q 5.433(.M)-.65 G
 .433(ode \231q\232 puts the minimum load on your machine, b)205.269 96 R .432
 -.25 G -.4(r,).15 G .033(this mode can cause lar)102 120 R .032
 (ge numbers of processes if you ha)-.18 F .332 -.15(ve a m)-.2 H .032
 (ailer that tak).15 F .032(es a long time to deli)-.1 F -.15(ve)-.25 G(r).15 E
 -.25 G -.4(r,).15 G .033(this mode can cause lar)102 120 R .032
 (ge numbers of processes if you ha)-.18 F .332 -.15(ve a m)-.2 H .032
 (ailer that tak).15 F .032(es a long time to deli)-.1 F -.15(ve)-.25 G(r).15 E
-2.5(am)102 132 S(essage.)116.72 132 Q 1.208
-(If you run in mode \231q\232 \(queue only\))127 148.2 R/F2 10/Times-Italic@0
-SF(sendmail)3.708 E F1 1.208(will not e)3.708 F 1.208(xpand aliases and follo)
--.15 F 3.708(w.)-.25 G(forw)472.45 148.2 Q(ard)-.1 E
-(\214les upon initial receipt of the mail.)102 160.2 Q
-(This speeds up the response to RCPT commands.)5 E F0 2.5(4.6. Log)87 184.2 R
-(Le)2.5 E -.1(ve)-.15 G(l).1 E F1 .19(The le)127 200.4 R -.15(ve)-.25 G 2.69
-(lo).15 G 2.69(fl)171.97 200.4 S .189(ogging can be set for sendmail.)180.77
-200.4 R .189(The def)5.189 F .189(ault using a standard con\214guration table)
--.1 F(is le)102 212.4 Q -.15(ve)-.25 G 2.5(l9).15 G 5(.T)137.71 212.4 S(he le)
-151.32 212.4 Q -.15(ve)-.25 G(ls are as follo).15 E(ws:)-.25 E 31(0N)102 228.6
-S 2.5(ol)145.22 228.6 S(ogging.)155.5 228.6 Q 31(1S)102 244.8 S
-(erious system f)143.56 244.8 Q(ailures and potential security problems.)-.1 E
-31(2L)102 261 S(ost communications \(netw)144.11 261 Q
-(ork problems\) and protocol f)-.1 E(ailures.)-.1 E 31(3O)102 277.2 S
-(ther serious f)145.22 277.2 Q(ailures.)-.1 E 31(4M)102 293.4 S(inor f)146.89
-293.4 Q(ailures.)-.1 E 31(5M)102 309.6 S(essage collection statistics.)146.89
-309.6 Q 31(6C)102 325.8 S(reation of error messages, VRFY and EXPN commands.)
-144.67 325.8 Q 31(7D)102 342 S(eli)145.22 342 Q -.15(ve)-.25 G(ry f).15 E
-(ailures \(host or user unkno)-.1 E(wn, etc.\).)-.25 E 31(8S)102 358.2 S
-(uccessful deli)143.56 358.2 Q -.15(ve)-.25 G(ries.).15 E 31(9M)102 374.4 S
-(essages being deferred \(due to a host being do)146.89 374.4 Q(wn, etc.\).)
--.25 E 23.5(10 Database)102 390.6 R -.15(ex)2.5 G(pansion \(alias, forw).15 E
-(ard, and userdb lookups\).)-.1 E 23.5(15 Automatic)102 406.8 R
-(alias database reb)2.5 E(uilds.)-.2 E 23.5(20 Logs)102 423 R .603
-(attempts to run lock)3.102 F .603(ed queue \214les.)-.1 F .603
+2.5(am)102 132 S(essage.)116.72 132 Q .337
+(If you run in mode \231q\232 \(queue only\) or \231b\232 \(deli)127 148.2 R
+-.15(ve)-.25 G 2.838(ri).15 G 2.838(nb)341.09 148.2 S(ackground\))353.928 148.2
+Q/F2 10/Times-Italic@0 SF(sendmail)2.838 E F1 .338(will not e)2.838 F(xpand)
+-.15 E 1.314(aliases and follo)102 160.2 R 3.813(w.)-.25 G(forw)182.901 160.2 Q
+1.313(ard \214les upon initial receipt of the mail.)-.1 F 1.313
+(This speeds up the response to)6.313 F(RCPT commands.)102 172.2 Q F0 2.5
+(4.6. Log)87 196.2 R(Le)2.5 E -.1(ve)-.15 G(l).1 E F1 .189(The le)127 212.4 R
+-.15(ve)-.25 G 2.689(lo).15 G 2.689(fl)171.968 212.4 S .189
+(ogging can be set for)180.767 212.4 R F2(sendmail)2.689 E F1 5.189(.T)C .189
+(he def)317.991 212.4 R .19(ault using a standard con\214guration table)-.1 F
+(is le)102 224.4 Q -.15(ve)-.25 G 2.5(l9).15 G 5(.T)137.71 224.4 S(he le)151.32
+224.4 Q -.15(ve)-.25 G(ls are as follo).15 E(ws:)-.25 E 31(0N)102 240.6 S 2.5
+(ol)145.22 240.6 S(ogging.)155.5 240.6 Q 31(1S)102 256.8 S(erious system f)
+143.56 256.8 Q(ailures and potential security problems.)-.1 E 31(2L)102 273 S
+(ost communications \(netw)144.11 273 Q(ork problems\) and protocol f)-.1 E
+(ailures.)-.1 E 31(3O)102 289.2 S(ther serious f)145.22 289.2 Q(ailures.)-.1 E
+31(4M)102 305.4 S(inor f)146.89 305.4 Q(ailures.)-.1 E 31(5M)102 321.6 S
+(essage collection statistics.)146.89 321.6 Q 31(6C)102 337.8 S
+(reation of error messages, VRFY and EXPN commands.)144.67 337.8 Q 31(7D)102
+354 S(eli)145.22 354 Q -.15(ve)-.25 G(ry f).15 E(ailures \(host or user unkno)
+-.1 E(wn, etc.\).)-.25 E 31(8S)102 370.2 S(uccessful deli)143.56 370.2 Q -.15
+(ve)-.25 G(ries.).15 E 31(9M)102 386.4 S
+(essages being deferred \(due to a host being do)146.89 386.4 Q(wn, etc.\).)
+-.25 E 23.5(10 Database)102 402.6 R -.15(ex)2.5 G(pansion \(alias, forw).15 E
+(ard, and userdb lookups\).)-.1 E 23.5(15 Automatic)102 418.8 R
+(alias database reb)2.5 E(uilds.)-.2 E 23.5(20 Logs)102 435 R .603
+(attempts to run lock)3.103 F .603(ed queue \214les.)-.1 F .603
 (These are not errors, b)5.603 F .603(ut can be useful to note if)-.2 F
 (These are not errors, b)5.603 F .603(ut can be useful to note if)-.2 F
-(your queue appears to be clogged.)138 435 Q 23.5(30 Lost)102 451.2 R
-(locks \(only if using lockf instead of \215ock\).)2.5 E(Additionally)102 467.4
-Q 3.684(,v)-.65 G 1.184(alues abo)162.844 467.4 R 1.484 -.15(ve 6)-.15 H 3.684
-(4a).15 G 1.183(re reserv)232.466 467.4 R 1.183(ed for e)-.15 F 1.183
-(xtremely v)-.15 F 1.183(erbose deb)-.15 F 1.183(uggging output.)-.2 F 1.183
-(No normal)6.183 F(site w)102 479.4 Q(ould e)-.1 E -.15(ve)-.25 G 2.5(rs).15 G
-(et these.)168.99 479.4 Q F0 2.5(4.7. File)87 503.4 R(Modes)2.5 E F1 .813
-(There are a number of \214les that may ha)127 519.6 R 1.113 -.15(ve a n)-.2 H
+(your queue appears to be clogged.)138 447 Q 23.5(30 Lost)102 463.2 R
+(locks \(only if using lockf instead of \215ock\).)2.5 E(Additionally)102 479.4
+Q 3.683(,v)-.65 G 1.183(alues abo)162.843 479.4 R 1.483 -.15(ve 6)-.15 H 3.683
+(4a).15 G 1.183(re reserv)232.462 479.4 R 1.183(ed for e)-.15 F 1.183
+(xtremely v)-.15 F 1.184(erbose deb)-.15 F 1.184(uggging output.)-.2 F 1.184
+(No normal)6.184 F(site w)102 491.4 Q(ould e)-.1 E -.15(ve)-.25 G 2.5(rs).15 G
+(et these.)168.99 491.4 Q F0 2.5(4.7. File)87 515.4 R(Modes)2.5 E F1 .813
+(There are a number of \214les that may ha)127 531.6 R 1.113 -.15(ve a n)-.2 H
 .813(umber of modes.).15 F .813(The modes depend on what)5.813 F
 .813(umber of modes.).15 F .813(The modes depend on what)5.813 F
-(functionality you w)102 531.6 Q(ant and the le)-.1 E -.15(ve)-.25 G 2.5(lo).15
-G 2.5(fs)253.15 531.6 S(ecurity you require.)262.87 531.6 Q F0 2.5(4.7.1. T)102
-555.6 R 2.5(os)-.92 G(uid or not to suid?)146.64 555.6 Q F2(Sendmail)142 571.8
-Q F1 .934(can safely be made setuid to root.)3.434 F .934
-(At the point where it is about to)5.934 F F2 -.2(ex)3.433 G(ec).2 E F1 .933
-(\(2\) a)1.666 F(mailer)117 583.8 Q 2.582(,i)-.4 G 2.582(tc)150.012 583.8 S
+(functionality you w)102 543.6 Q(ant and the le)-.1 E -.15(ve)-.25 G 2.5(lo).15
+G 2.5(fs)253.15 543.6 S(ecurity you require.)262.87 543.6 Q F0 2.5(4.7.1. T)102
+567.6 R 2.5(os)-.92 G(uid or not to suid?)146.64 567.6 Q F2(Sendmail)142 583.8
+Q F1 .933(can safely be made setuid to root.)3.433 F .934
+(At the point where it is about to)5.934 F F2 -.2(ex)3.434 G(ec).2 E F1 .934
+(\(2\) a)1.666 F(mailer)117 595.8 Q 2.583(,i)-.4 G 2.583(tc)150.013 595.8 S
 .082(hecks to see if the userid is zero; if so, it resets the userid and group\
 .082(hecks to see if the userid is zero; if so, it resets the userid and group\
-id to a def)159.814 583.8 R .083(ault \(set)-.1 F .577(by the)117 595.8 R F0(u)
-3.077 E F1(and)3.077 E F0(g)3.077 E F1 3.077(options\). \(This)3.077 F .576
+id to a def)159.816 595.8 R .082(ault \(set)-.1 F .576(by the)117 607.8 R F0(u)
+3.076 E F1(and)3.076 E F0(g)3.076 E F1 3.076(options\). \(This)3.076 F .576
 (can be o)3.076 F -.15(ve)-.15 G .576(rridden by setting the).15 F F0(S)3.076 E
 (can be o)3.076 F -.15(ve)-.15 G .576(rridden by setting the).15 F F0(S)3.076 E
-F1 .576(\215ag to the mailer for mailers)3.076 F 1.531
-(that are trusted and must be called as root.\))117 607.8 R(Ho)6.531 E(we)-.25
-E -.15(ve)-.25 G 2.331 -.4(r, t).15 H 1.532
-(his will cause mail processing to be).4 F(accounted \(using)117 619.8 Q F2(sa)
+F1 .577(\215ag to the mailer for mailers)3.077 F 1.532
+(that are trusted and must be called as root.\))117 619.8 R(Ho)6.531 E(we)-.25
+E -.15(ve)-.25 G 2.331 -.4(r, t).15 H 1.531
+(his will cause mail processing to be).4 F(accounted \(using)117 631.8 Q F2(sa)
 2.5 E F1(\(8\)\) to root rather than to the user sending the mail.)1.666 E F0
 2.5 E F1(\(8\)\) to root rather than to the user sending the mail.)1.666 E F0
-2.5(4.7.2. Should)102 643.8 R(my alias database be writable?)2.5 E F1 .058
-(At Berk)142 660 R(ele)-.1 E 2.558(yw)-.15 G 2.558(eh)200.186 660 S -2.25 -.2
-(av e)212.184 660 T .058(the alias database \(/etc/aliases*\) mode 644.)2.758 F
-.058(While this is not as \215e)5.058 F(x-)-.15 E 1.718
-(ible as if the database were more 666, it a)117 672 R -.2(vo)-.2 G 1.719
+2.5(4.7.2. Should)102 655.8 R(my alias database be writable?)2.5 E F1 .058
+(At Berk)142 672 R(ele)-.1 E 2.558(yw)-.15 G 2.558(eh)200.186 672 S -2.25 -.2
+(av e)212.184 672 T .058(the alias database \(/etc/aliases*\) mode 644.)2.758 F
+.058(While this is not as \215e)5.058 F(x-)-.15 E 1.719
+(ible as if the database were more 666, it a)117 684 R -.2(vo)-.2 G 1.718
 (ids potential security problems with a globally).2 F(writable database.)117
 (ids potential security problems with a globally).2 F(writable database.)117
-684 Q 1.191(The database that)142 700.2 R F2(sendmail)3.691 E F1 1.191
-(actually used is represented by the tw)3.691 F 3.69<6f8c>-.1 G(les)429.12
-700.2 Q F2(aliases.dir)3.69 E F1(and)3.69 E F2(aliases.pa)117 712.2 Q(g)-.1 E
-F1 .158(\(both in /etc\) \(or)2.658 F F2(aliases.db)2.658 E F1 .159
-(if you are running with the ne)2.659 F 2.659(wB)-.25 G(erk)412.852 712.2 Q
-(ele)-.1 E 2.659(yd)-.15 G .159(atabase prim-)449.691 712.2 R(iti)117 724.2 Q
--.15(ve)-.25 G 3.607(s\). The).15 F 1.107
-(mode on these \214les should match the mode on /etc/aliases.)3.607 F(If)6.106
-E F2(aliases)3.606 E F1 1.106(is writable)3.606 F EP
-%%Page: 21 18
+696 Q 1.19(The database that)142 712.2 R F2(sendmail)3.69 E F1 1.191
+(actually used is represented by the tw)3.691 F 3.691<6f8c>-.1 G(les)429.118
+712.2 Q F2(aliases.dir)3.691 E F1(and)3.691 E F2(aliases.pa)117 724.2 Q(g)-.1 E
+F1 1.936(\(both in /etc\) \(or)4.436 F F2(aliases.db)4.436 E F1 1.936
+(if you are running with the ne)4.436 F 4.435(wB)-.25 G(erk)435.955 724.2 Q
+(ele)-.1 E 4.435(yd)-.15 G(atabase)474.57 724.2 Q EP
+%%Page: 23 18
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-21)452.9 60 Q/F1 10/Times-Roman@0 SF 1.624(and the DBM \214les \()117
-96 R/F2 10/Times-Italic@0 SF(aliases.dir)A F1(and)4.124 E F2(aliases.pa)4.124 E
-(g)-.1 E F1 4.124(\)a)C 1.624(re not, users will be unable to re\215ect their)
-324.648 96 R .72(desired changes through to the actual database.)117 108 R(Ho)
-5.719 E(we)-.25 E -.15(ve)-.25 G 1.519 -.4(r, i).15 H(f).4 E F2(aliases)3.219 E
-F1 .719(is read-only and the DBM)3.219 F(\214les are writable, a slightly soph\
-isticated user can arrange to steal mail an)117 120 Q(yw)-.15 E(ay)-.1 E(.)-.65
-E .62(If your DBM \214les are not writable by the w)142 136.2 R .621
-(orld or you do not ha)-.1 F .921 -.15(ve a)-.2 H(uto-reb).15 E .621
+(SMM:08-23)452.9 60 Q/F1 10/Times-Roman@0 SF(primiti)117 96 Q -.15(ve)-.25 G
+4.855(s\). The).15 F 2.356
+(mode on these \214les should match the mode on /etc/aliases.)4.855 F(If)7.356
+E/F2 10/Times-Italic@0 SF(aliases)4.856 E F1(is)4.856 E .662
+(writable and the DBM \214les \()117 108 R F2(aliases.dir)A F1(and)3.161 E F2
+(aliases.pa)3.161 E(g)-.1 E F1 3.161(\)a)C .661
+(re not, users will be unable to re\215ect)353.843 108 R 1.037
+(their desired changes through to the actual database.)117 120 R(Ho)6.037 E(we)
+-.25 E -.15(ve)-.25 G 1.837 -.4(r, i).15 H(f).4 E F2(aliases)3.537 E F1 1.038
+(is read-only and the)3.537 F(DBM \214les are writable, a slightly sophisticat\
+ed user can arrange to steal mail an)117 132 Q(yw)-.15 E(ay)-.1 E(.)-.65 E .621
+(If your DBM \214les are not writable by the w)142 148.2 R .62
+(orld or you do not ha)-.1 F .92 -.15(ve a)-.2 H(uto-reb).15 E .62
 (uild enabled)-.2 F .564(\(with the \231D\232 option\), then you must be caref\
 (uild enabled)-.2 F .564(\(with the \231D\232 option\), then you must be caref\
-ul to reconstruct the alias database each time you)117 148.2 R(change the te)
-117 160.2 Q(xt v)-.15 E(ersion:)-.15 E(ne)157 176.4 Q -.1(wa)-.25 G(liases).1 E
-(If this step is ignored or for)117 192.6 Q(gotten an)-.18 E 2.5(yi)-.15 G
-(ntended changes will also be ignored or for)273.32 192.6 Q(gotten.)-.18 E F0
-2.5(4.8. Connection)87 216.6 R(Caching)2.5 E F1 .493
-(When processing the queue,)127 232.8 R F0(sendmail)2.993 E F1 .493
-(will try to k)2.993 F .493(eep the last fe)-.1 F 2.994(wo)-.25 G .494
-(pen connections open to)405.588 232.8 R -.2(avo)102 244.8 S
+ul to reconstruct the alias database each time you)117 160.2 R(change the te)
+117 172.2 Q(xt v)-.15 E(ersion:)-.15 E(ne)157 188.4 Q -.1(wa)-.25 G(liases).1 E
+(If this step is ignored or for)117 204.6 Q(gotten an)-.18 E 2.5(yi)-.15 G
+(ntended changes will also be ignored or for)273.32 204.6 Q(gotten.)-.18 E F0
+2.5(4.8. Connection)87 228.6 R(Caching)2.5 E F1 .642
+(When processing the queue,)127 244.8 R F2(sendmail)3.142 E F1 .642
+(will try to k)3.142 F .642(eep the last fe)-.1 F 3.142(wo)-.25 G .642
+(pen connections open to)405.144 244.8 R -.2(avo)102 256.8 S
 (id startup and shutdo).2 E(wn costs.)-.25 E
 (This only applies to IPC connections.)5 E .286
 (id startup and shutdo).2 E(wn costs.)-.25 E
 (This only applies to IPC connections.)5 E .286
-(When trying to open a connection the cache is \214rst searched.)127 261 R .286
+(When trying to open a connection the cache is \214rst searched.)127 273 R .287
 (If an open connection is found,)5.286 F .92
 (If an open connection is found,)5.286 F .92
-(it is probed to see if it is still acti)102 273 R 1.22 -.15(ve b)-.25 H 3.42
-(ys).15 G .92(ending a)270.89 273 R/F3 9/Times-Roman@0 SF(NOOP)3.42 E F1 3.42
+(it is probed to see if it is still acti)102 285 R 1.22 -.15(ve b)-.25 H 3.42
+(ys).15 G .92(ending a)270.892 285 R/F3 9/Times-Roman@0 SF(NOOP)3.42 E F1 3.42
 (command. It)3.42 F .92(is not an error if this f)3.42 F(ails;)-.1 E
 (command. It)3.42 F .92(is not an error if this f)3.42 F(ails;)-.1 E
-(instead, the connection is closed and reopened.)102 285 Q -1 -.8(Tw o)127
-301.2 T .207(parameters control the connection cache.)3.507 F(The)5.207 E F0(k)
-2.707 E F1 .207(option de\214nes the number of simultane-)2.707 F 1.819
-(ous open connections that will be permitted.)102 313.2 R 1.82
-(If it is set to zero, connections will be closed as)6.819 F .796
-(quickly as possible.)102 325.2 R .796(The def)5.796 F .796(ault is one.)-.1 F
+(instead, the connection is closed and reopened.)102 297 Q -1 -.8(Tw o)127
+313.2 T .207(parameters control the connection cache.)3.506 F(The)5.207 E F0(k)
+2.707 E F1 .207(option de\214nes the number of simultane-)2.707 F 1.82
+(ous open connections that will be permitted.)102 325.2 R 1.819
+(If it is set to zero, connections will be closed as)6.82 F .795
+(quickly as possible.)102 337.2 R .796(The def)5.796 F .796(ault is one.)-.1 F
 .796(This should be set as appropriate for your system size; it)5.796 F
 .796(This should be set as appropriate for your system size; it)5.796 F
-(will limit the amount of system resources that)102 337.2 Q F0(sendmail)2.5 E
-F1(will use during queue runs.)2.5 E(The)127 353.4 Q F0(K)3.647 E F1 1.148
-(option speci\214es the maximum time that an)3.647 F 3.648(yc)-.15 G 1.148
-(ached connection will be permitted to)347.45 353.4 R 2.896(idle. When)102
-365.4 R .396(the idle time e)2.896 F .396(xceeds this v)-.15 F .396
-(alue the connection is closed.)-.25 F .395(This number should be small)5.395 F
-.162(\(under ten minutes\) to pre)102 377.4 R -.15(ve)-.25 G .163
-(nt you from grabbing too man).15 F 2.663(yr)-.15 G .163
-(esources from other hosts.)347.485 377.4 R .163(The def)5.163 F(ault)-.1 E
-(is \214v)102 389.4 Q 2.5(em)-.15 G(inutes.)136.3 389.4 Q F0 2.5(4.9. Name)87
-413.4 R(Ser)2.5 E -.1(ve)-.1 G 2.5(rA).1 G(ccess)172.33 413.4 Q F1 .422
-(If your system supports the name serv)127 429.6 R(er)-.15 E 2.921(,t)-.4 G
-.421(hen the probability is that)297.151 429.6 R F2(sendmail)2.921 E F1 .421
-(will be using it)2.921 F(re)102 441.6 Q -.05(ga)-.15 G .153(rdless of ho).05 F
-2.653(wy)-.25 G .153(ou con\214gure sendmail.)180.599 441.6 R(Ho)5.153 E(we)
--.25 E -.15(ve)-.25 G .954 -.4(r, i).15 H 2.654(fy).4 G .154(ou ha)331.956
-441.6 R .454 -.15(ve n)-.2 H(ameserv).15 E .154(er support which you are)-.15 F
-.979(not using, sendmail will get a \231connection refused\232 message when it\
- tries to connect to the name)102 453.6 R(serv)102 465.6 Q .591
-(er \(either by calling)-.15 F F2 -.1(ge)3.091 G(thostbyname).1 E F1 .591
-(or by trying to look up the MX records\).)3.091 F .591(If the)5.591 F F0(I)
-3.091 E F1 .592(option is)3.092 F(set,)102 477.6 Q F2(sendmail)3.34 E F1 .839
-(will interpret this to mean a temporary f)3.34 F .839
-(ailure; otherwise, it ignores the name serv)-.1 F(er)-.15 E 2.59(data. If)102
-489.6 R .09(your name serv)2.59 F .09(er is running properly)-.15 F 2.59(,t)
--.65 G .09(he setting of this option is not rele)291.6 489.6 R -.25(va)-.25 G
-.09(nt; ho).25 F(we)-.25 E -.15(ve)-.25 G .89 -.4(r, i).15 H 2.59(ti).4 G(s)
-500.11 489.6 Q(important that it be set properly to mak)102 501.6 Q 2.5(ee)-.1
-G(rror handling w)269.66 501.6 Q(ork properly)-.1 E(.)-.65 E .633
-(This option also allo)127 517.8 R .633(ws you to tweak name serv)-.25 F .633
+(will limit the amount of system resources that)102 349.2 Q F2(sendmail)2.5 E
+F1(will use during queue runs.)2.5 E(The)127 365.4 Q F0(K)3.648 E F1 1.148
+(option speci\214es the maximum time that an)3.648 F 3.648(yc)-.15 G 1.148
+(ached connection will be permitted to)347.452 365.4 R 2.895(idle. When)102
+377.4 R .395(the idle time e)2.895 F .395(xceeds this v)-.15 F .396
+(alue the connection is closed.)-.25 F .396(This number should be small)5.396 F
+.163(\(under ten minutes\) to pre)102 389.4 R -.15(ve)-.25 G .163
+(nt you from grabbing too man).15 F 2.663(yr)-.15 G .162
+(esources from other hosts.)347.49 389.4 R .162(The def)5.162 F(ault)-.1 E
+(is \214v)102 401.4 Q 2.5(em)-.15 G(inutes.)136.3 401.4 Q F0 2.5(4.9. Name)87
+425.4 R(Ser)2.5 E -.1(ve)-.1 G 2.5(rA).1 G(ccess)172.33 425.4 Q F1 .421
+(If your system supports the name serv)127 441.6 R(er)-.15 E 2.921(,t)-.4 G
+.421(hen the probability is that)297.147 441.6 R F2(sendmail)2.921 E F1 .422
+(will be using it)2.922 F(re)102 453.6 Q -.05(ga)-.15 G 1.432(rdless of ho).05
+F 3.932(wy)-.25 G 1.432(ou con\214gure)184.436 453.6 R F2(sendmail)3.932 E F1
+6.432(.I)C 3.932(np)288.442 453.6 S(articular)302.374 453.6 Q 3.932(,t)-.4 G
+1.431(he system routine)344.506 453.6 R F2 -.1(ge)3.931 G(thostbyname).1 E F1
+1.431(\(3\) is)B .43(used to look up host names, and most v)102 465.6 R .431
+(endor v)-.15 F .431(ersions try some combination of DNS, NIS, and \214le)-.15
+F(lookup in /etc/hosts.)102 477.6 Q(Ho)127 493.8 Q(we)-.25 E -.15(ve)-.25 G
+2.12 -.4(r, i).15 H 3.82(fy).4 G 1.32(ou do not ha)183.85 493.8 R 1.62 -.15
+(ve a n)-.2 H(ameserv).15 E 1.32
+(er con\214gured at all, such as at a UUCP-only site,)-.15 F F2(sendmail)102
+505.8 Q F1 .14(will get a \231connection refused\232 message when it tries to \
+connect to the name serv)2.64 F .14(er \(either)-.15 F .915
+(indirectly by calling)102 517.8 R F2 -.1(ge)3.415 G(thostbyname).1 E F1 .915
+(or directly by looking up MX records\).)3.415 F .915(If the)5.915 F F0(I)3.415
+E F1 .915(option is set,)3.415 F F2(sendmail)102 529.8 Q F1 .135
+(will interpret this to mean a temporary f)2.635 F .135
+(ailure and will queue the mail for later processing;)-.1 F .884
+(otherwise, it ignores the name serv)102 541.8 R .884(er data.)-.15 F .884
+(If your name serv)5.884 F .884(er is running properly)-.15 F 3.383(,t)-.65 G
+.883(he setting of)452.794 541.8 R 1.164(this option is not rele)102 553.8 R
+-.25(va)-.25 G 1.164(nt; ho).25 F(we)-.25 E -.15(ve)-.25 G 1.964 -.4(r, i).15 H
+3.664(ti).4 G 3.664(si)265.818 553.8 S 1.164
+(mportant that it be set properly to mak)276.152 553.8 R 3.665(ee)-.1 G 1.165
+(rror handling)450.345 553.8 R -.1(wo)102 565.8 S(rk properly).1 E(.)-.65 E
+.633(This option also allo)127 582 R .633(ws you to tweak name serv)-.25 F .633
 (er options.)-.15 F .632(The command line tak)5.633 F .632(es a series)-.1 F
 (er options.)-.15 F .632(The command line tak)5.633 F .632(es a series)-.1 F
-.442(of \215ags as documented in)102 529.8 R F2 -.37(re)2.942 G(solver).37 E F1
+.442(of \215ags as documented in)102 594 R F2 -.37(re)2.942 G(solver).37 E F1
 .442(\(3\) \(with the leading \231RES_\232 deleted\).)B .442
 .442(\(3\) \(with the leading \231RES_\232 deleted\).)B .442
-(Each can be preceded by)5.442 F(an optional `+' or `)102 541.8 Q/F4 10/Symbol
-SF(-)A F1 2.5('. F)B(or e)-.15 E(xample, the line)-.15 E(OIT)142 558 Q(rue +AA)
--.35 E(ONL)-.55 E(Y)-1 E F4(-)2.5 E F1(DNSRCH)A .862(turns on the AA)102 574.2
-R(ONL)-.55 E 3.362(Y\()-1 G .862(accept authoritati)201.658 574.2 R 1.162 -.15
+(Each can be preceded by)5.442 F(an optional `+' or `)102 606 Q/F4 10/Symbol SF
+(-)A F1 2.5('. F)B(or e)-.15 E(xample, the line)-.15 E(OIT)142 622.2 Q(rue +AA)
+-.35 E(ONL)-.55 E(Y)-1 E F4(-)2.5 E F1(DNSRCH)A .862(turns on the AA)102 638.4
+R(ONL)-.55 E 3.362(Y\()-1 G .862(accept authoritati)201.658 638.4 R 1.162 -.15
 (ve a)-.25 H .861(nswers only\) and turns of).15 F 3.361(ft)-.25 G .861
 (ve a)-.25 H .861(nswers only\) and turns of).15 F 3.361(ft)-.25 G .861
-(he DNSRCH \(search the)402.827 574.2 R 2.039(domain path\) options.)102 586.2
+(he DNSRCH \(search the)402.827 638.4 R 2.039(domain path\) options.)102 650.4
 R 2.039(Most resolv)7.039 F 2.039(er libraries def)-.15 F 2.039
 (ault DNSRCH, DEFN)-.1 F 2.039(AMES, and RECURSE)-.35 F .187
 R 2.039(Most resolv)7.039 F 2.039(er libraries def)-.15 F 2.039
 (ault DNSRCH, DEFN)-.1 F 2.039(AMES, and RECURSE)-.35 F .187
-(\215ags on and all others of)102 598.2 R 2.687(f. Note)-.25 F .186
+(\215ags on and all others of)102 662.4 R 2.687(f. Note)-.25 F .186
 (the use of the initial `)2.686 F(`T)-.74 E(rue')-.35 E 2.686('\212t)-.74 G
 (the use of the initial `)2.686 F(`T)-.74 E(rue')-.35 E 2.686('\212t)-.74 G
-.186(his is for compatibility with pre)365.82 598.2 R(vi-)-.25 E(ous v)102
-610.2 Q(ersions of sendmail, b)-.15 E(ut is not otherwise necessary)-.2 E(.)
--.65 E -1.11(Ve)127 626.4 S 2.256(rsion le)1.11 F -.15(ve)-.25 G 4.756(l1c).15
-G 2.256(on\214gurations turn DNSRCH and DEFN)200.298 626.4 R 2.257(AMES of)-.35
-F 4.757(fw)-.25 G 2.257(hen doing deli)424.896 626.4 R -.15(ve)-.25 G(ry).15 E
-2.06(lookups, b)102 638.4 R 2.06(ut lea)-.2 F 2.36 -.15(ve t)-.2 H 2.06
+.186(his is for compatibility with pre)365.82 662.4 R(vi-)-.25 E(ous v)102
+674.4 Q(ersions of)-.15 E F2(sendmail)2.5 E F1 2.5(,b)C
+(ut is not otherwise necessary)210.81 674.4 Q(.)-.65 E -1.11(Ve)127 690.6 S
+2.256(rsion le)1.11 F -.15(ve)-.25 G 4.756(l1c).15 G 2.256
+(on\214gurations turn DNSRCH and DEFN)200.298 690.6 R 2.257(AMES of)-.35 F
+4.757(fw)-.25 G 2.257(hen doing deli)424.896 690.6 R -.15(ve)-.25 G(ry).15 E
+2.06(lookups, b)102 702.6 R 2.06(ut lea)-.2 F 2.36 -.15(ve t)-.2 H 2.06
 (hem on e).15 F -.15(ve)-.25 G 2.06(rywhere else.).15 F -1.11(Ve)7.06 G 2.06
 (rsion 8 of)1.11 F F2(sendmail)4.56 E F1 2.06(ignores them when doing)4.56 F
 .313(canoni\214cation lookups \(that is, when using $[ ... $]\), and al)102
 (hem on e).15 F -.15(ve)-.25 G 2.06(rywhere else.).15 F -1.11(Ve)7.06 G 2.06
 (rsion 8 of)1.11 F F2(sendmail)4.56 E F1 2.06(ignores them when doing)4.56 F
 .313(canoni\214cation lookups \(that is, when using $[ ... $]\), and al)102
-650.4 R -.1(wa)-.1 G .313(ys does the search.).1 F .313(If you don')5.313 F
-2.813(tw)-.18 G(ant)491.78 650.4 Q(to do automatic name e)102 662.4 Q
-(xtension, don')-.15 E 2.5(tc)-.18 G(all $[ ... $].)261.93 662.4 Q .189
-(The search rules for $[ ... $] are some)127 678.6 R .189(what dif)-.25 F .189
-(ferent than usual.)-.25 F .189(If the name \(that is, the `)5.189 F(`...)-.74
-E -.74('')-.7 G(\)).74 E .109(has at least one dot, it al)102 690.6 R -.1(wa)
--.1 G .109(ys tries the unmodi\214ed name \214rst.).1 F .11(If that f)5.11 F
-.11(ails, it tries the reduced search)-.1 F .124
-(path, and lastly tries the unmodi\214ed name \(b)102 702.6 R .124
-(ut only for names without a dot, since names with a dot)-.2 F(ha)102 714.6 Q
-.788 -.15(ve a)-.2 H .488(lready been tried\).).15 F .488(This allo)5.488 F
-.489(ws names such as `)-.25 F(`utc.CS')-.74 E 2.989('t)-.74 G 2.989(om)362.805
-714.6 S .489(atch the site in Czechoslo)378.574 714.6 R -.25(va)-.15 G(kia).25
-E EP
-%%Page: 22 19
+714.6 R -.1(wa)-.1 G .313(ys does the search.).1 F .313(If you don')5.313 F
+2.813(tw)-.18 G(ant)491.78 714.6 Q EP
+%%Page: 24 19
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-22 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.588
-(rather than the site in your local Computer Science department.)102 96 R 1.587
-(It also prefers A and CN)6.587 F(AME)-.35 E .512(records o)102 108 R -.15(ve)
--.15 G 3.012(rM).15 G 3.012(Xr)163.814 108 S .512
-(ecords \212 that is, if it \214nds an MX record it mak)177.376 108 R .513
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-24 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF
+(to do automatic name e)102 96 Q(xtension, don')-.15 E 2.5(tc)-.18 G
+(all $[ ... $].)261.93 96 Q .189(The search rules for $[ ... $] are some)127
+112.2 R .189(what dif)-.25 F .189(ferent than usual.)-.25 F .189
+(If the name \(that is, the `)5.189 F(`...)-.74 E -.74('')-.7 G(\)).74 E .109
+(has at least one dot, it al)102 124.2 R -.1(wa)-.1 G .109
+(ys tries the unmodi\214ed name \214rst.).1 F .11(If that f)5.11 F .11
+(ails, it tries the reduced search)-.1 F .124
+(path, and lastly tries the unmodi\214ed name \(b)102 136.2 R .124
+(ut only for names without a dot, since names with a dot)-.2 F(ha)102 148.2 Q
+.788 -.15(ve a)-.2 H .488(lready been tried\).).15 F .488(This allo)5.488 F
+.489(ws names such as `)-.25 F(`utc.CS')-.74 E 2.989('t)-.74 G 2.989(om)362.805
+148.2 S .489(atch the site in Czechoslo)378.574 148.2 R -.25(va)-.15 G(kia).25
+E 1.588(rather than the site in your local Computer Science department.)102
+160.2 R 1.587(It also prefers A and CN)6.587 F(AME)-.35 E .512(records o)102
+172.2 R -.15(ve)-.15 G 3.012(rM).15 G 3.012(Xr)163.814 172.2 S .512
+(ecords \212 that is, if it \214nds an MX record it mak)177.376 172.2 R .513
 (es note of it, b)-.1 F .513(ut k)-.2 F .513(eeps looking.)-.1 F 1.542(This w)
 (es note of it, b)-.1 F .513(ut k)-.2 F .513(eeps looking.)-.1 F 1.542(This w)
-102 120 R(ay)-.1 E 4.042(,i)-.65 G 4.042(fy)149.054 120 S 1.541(ou ha)161.426
-120 R 1.841 -.15(ve a w)-.2 H 1.541
+102 184.2 R(ay)-.1 E 4.042(,i)-.65 G 4.042(fy)149.054 184.2 S 1.541(ou ha)
+161.426 184.2 R 1.841 -.15(ve a w)-.2 H 1.541
 (ildcard MX record matching your domain, it will not assume that all).15 F
 (ildcard MX record matching your domain, it will not assume that all).15 F
-(names match.)102 132 Q F0 2.5(4.10. Mo)87 156 R(ving the P)-.1 E(er)-.2 E
+(names match.)102 196.2 Q F0 2.5(4.10. Mo)87 220.2 R(ving the P)-.1 E(er)-.2 E
 (-User F)-.37 E(orward Files)-.25 E F1 .772(Some sites mount each user')127
 (-User F)-.37 E(orward Files)-.25 E F1 .772(Some sites mount each user')127
-172.2 R 3.272(sh)-.55 G .772(ome directory from a local disk on their w)256.13
-172.2 R .772(orkstation, so that)-.1 F .576(local access is f)102 184.2 R 3.076
+236.4 R 3.272(sh)-.55 G .772(ome directory from a local disk on their w)256.13
+236.4 R .772(orkstation, so that)-.1 F .576(local access is f)102 248.4 R 3.076
 (ast. Ho)-.1 F(we)-.25 E -.15(ve)-.25 G 1.376 -.4(r, t).15 H .575
 (he result is that .forw).4 F .575(ard \214le lookups are slo)-.1 F 4.375 -.65
 (ast. Ho)-.1 F(we)-.25 E -.15(ve)-.25 G 1.376 -.4(r, t).15 H .575
 (he result is that .forw).4 F .575(ard \214le lookups are slo)-.1 F 4.375 -.65
-(w. I)-.25 H 3.075(ns).65 G .575(ome cases, mail)439.25 184.2 R .216(can e)102
-196.2 R -.15(ve)-.25 G 2.716(nb).15 G 2.716(ed)144.792 196.2 S(eli)156.948
-196.2 Q -.15(ve)-.25 G .216
+(w. I)-.25 H 3.075(ns).65 G .575(ome cases, mail)439.25 248.4 R .216(can e)102
+260.4 R -.15(ve)-.25 G 2.716(nb).15 G 2.716(ed)144.792 260.4 S(eli)156.948
+260.4 Q -.15(ve)-.25 G .216
 (red on machines inappropriately because of a \214le serv).15 F .216
 (er being do)-.15 F 2.716(wn. The)-.25 F(perfor)2.716 E(-)-.2 E
 (red on machines inappropriately because of a \214le serv).15 F .216
 (er being do)-.15 F 2.716(wn. The)-.25 F(perfor)2.716 E(-)-.2 E
-(mance can be especially bad if you run the automounter)102 208.2 Q(.)-.55 E
-(The)127 224.4 Q F0(J)2.5 E F1(option allo)2.5 E(ws you to set a path of forw)
+(mance can be especially bad if you run the automounter)102 272.4 Q(.)-.55 E
+(The)127 288.6 Q F0(J)2.5 E F1(option allo)2.5 E(ws you to set a path of forw)
 -.25 E(ard \214les.)-.1 E -.15(Fo)5 G 2.5(re).15 G
 -.25 E(ard \214les.)-.1 E -.15(Fo)5 G 2.5(re).15 G
-(xample, the con\214g \214le line)366.6 224.4 Q(OJ/v)142 240.6 Q(ar/forw)-.25 E
-(ard/$u:$z/.forw)-.1 E(ard)-.1 E -.1(wo)102 256.8 S .208
+(xample, the con\214g \214le line)366.6 288.6 Q(OJ/v)142 304.8 Q(ar/forw)-.25 E
+(ard/$u:$z/.forw)-.1 E(ard)-.1 E -.1(wo)102 321 S .208
 (uld \214rst look for a \214le with the same name as the user').1 F 2.707(sl)
 (uld \214rst look for a \214le with the same name as the user').1 F 2.707(sl)
--.55 G .207(ogin in /v)343.191 256.8 R(ar/forw)-.25 E .207
+-.55 G .207(ogin in /v)343.191 321 R(ar/forw)-.25 E .207
 (ard; if that is not found)-.1 F .129
 (ard; if that is not found)-.1 F .129
-(\(or is inaccessible\) the \214le \231.forw)102 268.8 R .129
+(\(or is inaccessible\) the \214le \231.forw)102 333 R .129
 (ard\232 in the user')-.1 F 2.629(sh)-.55 G .13(ome directory is searched.)
 (ard\232 in the user')-.1 F 2.629(sh)-.55 G .13(ome directory is searched.)
-311.901 268.8 R 2.63(At)5.13 G .13(ruly perv)435.02 268.8 R .13(erse site)-.15
-F(could also search by sender by using $r)102 280.8 Q 2.5(,$)-.4 G(s, or $f.)
-269.07 280.8 Q .69(If you create a directory such as /v)127 297 R(ar/forw)-.25
+311.901 333 R 2.63(At)5.13 G .13(ruly perv)435.02 333 R .13(erse site)-.15 F
+(could also search by sender by using $r)102 345 Q 2.5(,$)-.4 G(s, or $f.)
+269.07 345 Q .69(If you create a directory such as /v)127 361.2 R(ar/forw)-.25
 E .69(ard, it should be mode 1777 \(that is, the stick)-.1 F 3.19(yb)-.15 G(it)
 E .69(ard, it should be mode 1777 \(that is, the stick)-.1 F 3.19(yb)-.15 G(it)
-498.44 297 Q(should be set\).)102 309 Q
-(Users should create the \214les mode 644.)5 E F0 2.5(4.11. Fr)87 333 R
-(ee Space)-.18 E F1 1.122(On systems that ha)127 349.2 R 1.422 -.15(ve t)-.2 H
+498.44 361.2 Q(should be set\).)102 373.2 Q
+(Users should create the \214les mode 644.)5 E F0 2.5(4.11. Fr)87 397.2 R
+(ee Space)-.18 E F1 1.122(On systems that ha)127 413.4 R 1.422 -.15(ve t)-.2 H
 (he).15 E/F2 10/Times-Italic@0 SF(statfs)3.622 E F1 1.123
 (\(2\) system call, you can specify a minimum number of free)B .61
 (he).15 E/F2 10/Times-Italic@0 SF(statfs)3.622 E F1 1.123
 (\(2\) system call, you can specify a minimum number of free)B .61
-(blocks on the queue \214lesystem using the)102 361.2 R F0(b)3.11 E F1 3.11
+(blocks on the queue \214lesystem using the)102 425.4 R F0(b)3.11 E F1 3.11
 (option. If)3.11 F .61(there are fe)3.11 F .61
 (wer than the indicated number of)-.25 F .406
 (blocks free on the \214lesystem on which the queue is mounted the SMTP serv)
 (option. If)3.11 F .61(there are fe)3.11 F .61
 (wer than the indicated number of)-.25 F .406
 (blocks free on the \214lesystem on which the queue is mounted the SMTP serv)
-102 373.2 R .407(er will reject mail with)-.15 F(the 452 error code.)102 385.2
+102 437.4 R .407(er will reject mail with)-.15 F(the 452 error code.)102 449.4
 Q(This in)5 E(vites the SMTP client to try ag)-.4 E(ain later)-.05 E(.)-.55 E
 Q(This in)5 E(vites the SMTP client to try ag)-.4 E(ain later)-.05 E(.)-.55 E
-(Be)127 401.4 Q -.1(wa)-.25 G .746(re of setting this option too high; it can \
+(Be)127 465.6 Q -.1(wa)-.25 G .746(re of setting this option too high; it can \
 cause rejection of email when that mail w).1 F(ould)-.1 E
 cause rejection of email when that mail w).1 F(ould)-.1 E
-(be processed without dif)102 413.4 Q(\214culty)-.25 E(.)-.65 E 1.772
-(This option can also specify an adv)127 429.6 R 1.773
+(be processed without dif)102 477.6 Q(\214culty)-.25 E(.)-.65 E 1.772
+(This option can also specify an adv)127 493.8 R 1.773
 (ertised \231maximum message size\232 for hosts that speak)-.15 F(ESMTP)102
 (ertised \231maximum message size\232 for hosts that speak)-.15 F(ESMTP)102
-441.6 Q(.)-1.11 E F0 2.5(4.12. Pri)87 465.6 R -.1(va)-.1 G(cy Flags).1 E F1
-(The)127 481.8 Q F0(p)3.591 E F1 1.091(option allo)3.591 F 1.091
+505.8 Q(.)-1.11 E F0 2.5(4.12. Pri)87 529.8 R -.1(va)-.1 G(cy Flags).1 E F1
+(The)127 546 Q F0(p)3.591 E F1 1.091(option allo)3.591 F 1.091
 (ws you to set certain `)-.25 F(`pri)-.74 E -.25(va)-.25 G -.15(cy).25 G 2.571
 (ws you to set certain `)-.25 F(`pri)-.74 E -.25(va)-.25 G -.15(cy).25 G 2.571
--.74('' \215).15 H 3.591(ags. Actually).74 F 3.59(,m)-.65 G(an)409.27 481.8 Q
-3.59(yo)-.15 G 3.59(ft)432.15 481.8 S 1.09(hem don')441.85 481.8 R 3.59(tg)-.18
-G -2.15 -.25(iv e)492.18 481.8 T .254(you an)102 493.8 R 2.754(ye)-.15 G .254
-(xtra pri)141.088 493.8 R -.25(va)-.25 G -.15(cy).25 G 2.754(,r)-.5 G .254
-(ather just insisting that client SMTP serv)196.666 493.8 R .254
-(ers use the HELO command before)-.15 F(using certain commands.)102 505.8 Q
-.124(The option tak)127 522 R .124
-(es a series of \215ag names; the \214nal pri)-.1 F -.25(va)-.25 G .424 -.15
-(cy i).25 H 2.624(st).15 G .124(he inclusi)367.708 522 R .424 -.15(ve o)-.25 H
-2.624(ro).15 G 2.624(ft)434.06 522 S .123(hose \215ags.)442.794 522 R -.15(Fo)
-5.123 G(r).15 E -.15(ex)102 534 S(ample:).15 E(Op needmailhelo, noe)142 550.2 Q
-(xpn)-.15 E .928(insists that the HELO or EHLO command be used before a MAIL c\
-ommand is accepted and dis-)102 566.4 R(ables the EXPN command.)102 578.4 Q
-.244(The \231restrictmailq\232 option restricts printing the queue to the grou\
-p that o)127 594.6 R .244(wns the queue direc-)-.25 F(tory)102 606.6 Q 5(.I)
--.65 G 2.5(ti)128.29 606.6 S 2.5(sa)136.35 606.6 S
-(bsurd to set this if you don')147.18 606.6 Q 2.5(ta)-.18 G
-(lso protect the logs.)266.72 606.6 Q F0 2.5(4.13. Send)87 630.6 R(to Me T)2.5
-E(oo)-.92 E F1(Normally)127 646.8 Q(,)-.65 E F2(sendmail)3.423 E F1 .923
-(deletes the \(en)3.423 F -.15(ve)-.4 G .923(lope\) sender from an).15 F 3.423
-(yl)-.15 G .924(ist e)375.484 646.8 R 3.424(xpansions. F)-.15 F .924(or e)-.15
-F .924(xample, if)-.15 F .761(\231matt\232 sends to a list that contains \231m\
-att\232 as one of the members he w)102 658.8 R(on')-.1 E 3.261(tg)-.18 G .761
-(et a cop)416.705 658.8 R 3.261(yo)-.1 G 3.261(ft)462.488 658.8 S .761(he mes-)
-471.859 658.8 R 3.066(sage. If)102 670.8 R(the)3.066 E F0<ad6d>3.066 E F1 .566
-(\(me too\) command line \215ag, or if the)3.066 F F0(m)3.067 E F1 .567
-(option is set in the con\214guration \214le, this)3.067 F(beha)102 682.8 Q
-(viour is supressed.)-.2 E(Some sites lik)5 E 2.5(et)-.1 G 2.5(or)265.58 682.8
-S(un the)276.41 682.8 Q/F3 9/Times-Roman@0 SF(SMTP)2.5 E F1(daemon with)2.5 E
-F0<ad6d>2.5 E F1(.)A EP
-%%Page: 23 20
+-.74('' \215).15 H 3.591(ags. Actually).74 F 3.59(,m)-.65 G(an)409.27 546 Q
+3.59(yo)-.15 G 3.59(ft)432.15 546 S 1.09(hem don')441.85 546 R 3.59(tg)-.18 G
+-2.15 -.25(iv e)492.18 546 T .254(you an)102 558 R 2.754(ye)-.15 G .254
+(xtra pri)141.088 558 R -.25(va)-.25 G -.15(cy).25 G 2.754(,r)-.5 G .254
+(ather just insisting that client SMTP serv)196.666 558 R .254
+(ers use the HELO command before)-.15 F(using certain commands.)102 570 Q .124
+(The option tak)127 586.2 R .124(es a series of \215ag names; the \214nal pri)
+-.1 F -.25(va)-.25 G .424 -.15(cy i).25 H 2.624(st).15 G .124(he inclusi)
+367.708 586.2 R .424 -.15(ve o)-.25 H 2.624(ro).15 G 2.624(ft)434.06 586.2 S
+.123(hose \215ags.)442.794 586.2 R -.15(Fo)5.123 G(r).15 E -.15(ex)102 598.2 S
+(ample:).15 E(Op needmailhelo, noe)142 614.4 Q(xpn)-.15 E .928(insists that th\
+e HELO or EHLO command be used before a MAIL command is accepted and dis-)102
+630.6 R(ables the EXPN command.)102 642.6 Q .244(The \231restrictmailq\232 opt\
+ion restricts printing the queue to the group that o)127 658.8 R .244
+(wns the queue direc-)-.25 F(tory)102 670.8 Q 5(.I)-.65 G 2.5(ti)128.29 670.8 S
+2.5(sa)136.35 670.8 S(bsurd to set this if you don')147.18 670.8 Q 2.5(ta)-.18
+G(lso protect the logs.)266.72 670.8 Q .83(The \231restrictqrun\232 option res\
+tricts people running the queue \(that is, using the)127 687 R F0<ad71>3.33 E
+F1(command)3.33 E(line \215ag\) to root and the o)102 699 Q
+(wner of the queue directory)-.25 E(.)-.65 E EP
+%%Page: 25 20
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-23)452.9 60 Q 2.5(5. THE)72 96 R(WHOLE SCOOP ON THE CONFIGURA)2.5 E
-(TION FILE)-.95 E/F1 10/Times-Roman@0 SF .264(This section describes the con\
-\214guration \214le in detail, including hints on ho)112 112.2 R 2.764(wt)-.25
-G 2.763(ow)426.298 112.2 S .263(rite one of your)441.281 112.2 R -.25(ow)87
-124.2 S 2.5(ni).25 G 2.5(fy)109.25 124.2 S(ou ha)120.08 124.2 Q .3 -.15(ve t)
--.2 H(o.).15 E .648(There is one point that should be made clear immediately: \
-the syntax of the con\214guration \214le is)112 140.4 R 1.077
-(designed to be reasonably easy to parse, since this is done e)87 152.4 R -.15
-(ve)-.25 G 1.076(ry time).15 F/F2 10/Times-Italic@0 SF(sendmail)3.576 E F1
-1.076(starts up, rather than)3.576 F(easy for a human to read or write.)87
-164.4 Q
+(SMM:08-25)452.9 60 Q 2.5(4.13. Send)87 96 R(to Me T)2.5 E(oo)-.92 E/F1 10
+/Times-Roman@0 SF(Normally)127 112.2 Q(,)-.65 E/F2 10/Times-Italic@0 SF
+(sendmail)3.424 E F1 .924(deletes the \(en)3.424 F -.15(ve)-.4 G .923
+(lope\) sender from an).15 F 3.423(yl)-.15 G .923(ist e)375.488 112.2 R 3.423
+(xpansions. F)-.15 F .923(or e)-.15 F .923(xample, if)-.15 F .761(\231matt\232\
+ sends to a list that contains \231matt\232 as one of the members he w)102
+124.2 R(on')-.1 E 3.261(tg)-.18 G .761(et a cop)416.705 124.2 R 3.261(yo)-.1 G
+3.261(ft)462.488 124.2 S .761(he mes-)471.859 124.2 R 3.067(sage. If)102 136.2
+R(the)3.067 E F0<ad6d>3.067 E F1 .567
+(\(me too\) command line \215ag, or if the)3.067 F F0(m)3.066 E F1 .566
+(option is set in the con\214guration \214le, this)3.066 F(beha)102 148.2 Q
+(viour is supressed.)-.2 E(Some sites lik)5 E 2.5(et)-.1 G 2.5(or)265.58 148.2
+S(un the)276.41 148.2 Q/F3 9/Times-Roman@0 SF(SMTP)2.5 E F1(daemon with)2.5 E
+F0<ad6d>2.5 E F1(.)A F0 2.5(5. THE)72 172.2 R(WHOLE SCOOP ON THE CONFIGURA)2.5
+E(TION FILE)-.95 E F1 .264(This section describes the con\214guration \214le i\
+n detail, including hints on ho)112 188.4 R 2.764(wt)-.25 G 2.764(ow)426.294
+188.4 S .264(rite one of your)441.278 188.4 R -.25(ow)87 200.4 S 2.5(ni).25 G
+2.5(fy)109.25 200.4 S(ou ha)120.08 200.4 Q .3 -.15(ve t)-.2 H(o.).15 E .648(Th\
+ere is one point that should be made clear immediately: the syntax of the con\
+\214guration \214le is)112 216.6 R 1.076
+(designed to be reasonably easy to parse, since this is done e)87 228.6 R -.15
+(ve)-.25 G 1.077(ry time).15 F F2(sendmail)3.577 E F1 1.077
+(starts up, rather than)3.577 F(easy for a human to read or write.)87 240.6 Q
 (On the \231future project\232 list is a con\214guration-\214le compiler)5 E(.)
 (On the \231future project\232 list is a con\214guration-\214le compiler)5 E(.)
--.55 E(An o)112 180.6 Q -.15(ve)-.15 G(rvie).15 E 2.5(wo)-.25 G 2.5(ft)170.88
-180.6 S(he con\214guration \214le is gi)179.49 180.6 Q -.15(ve)-.25 G 2.5<6e8c>
-.15 G(rst, follo)301.59 180.6 Q(wed by details of the semantics.)-.25 E F0 2.5
-(5.1. Con\214guration)87 204.6 R(File Lines)2.5 E F1 1.315
-(The con\214guration \214le is or)127 220.8 R -.05(ga)-.18 G 1.316
-(nized as a series of lines, each of which be).05 F 1.316(gins with a single)
--.15 F .742(character de\214ning the semantics for the rest of the line.)102
-232.8 R .742(Lines be)5.742 F .741(ginning with a space or a tab are)-.15 F
-1.148
+-.55 E(An o)112 256.8 Q -.15(ve)-.15 G(rvie).15 E 2.5(wo)-.25 G 2.5(ft)170.88
+256.8 S(he con\214guration \214le is gi)179.49 256.8 Q -.15(ve)-.25 G 2.5<6e8c>
+.15 G(rst, follo)301.59 256.8 Q(wed by details of the semantics.)-.25 E F0 2.5
+(5.1. Con\214guration)87 280.8 R(File Lines)2.5 E F1 1.316
+(The con\214guration \214le is or)127 297 R -.05(ga)-.18 G 1.316
+(nized as a series of lines, each of which be).05 F 1.315(gins with a single)
+-.15 F .741(character de\214ning the semantics for the rest of the line.)102
+309 R .742(Lines be)5.742 F .742(ginning with a space or a tab are)-.15 F 1.149
 (continuation lines \(although the semantics are not well de\214ned in man)102
 (continuation lines \(although the semantics are not well de\214ned in man)102
-244.8 R 3.649(yp)-.15 G 3.649(laces\). Blank)407.513 244.8 R 1.149(lines and)
-3.649 F(lines be)102 256.8 Q(ginning with a sharp symbol \(`#'\) are comments.)
--.15 E F0 2.5(5.1.1. R)102 280.8 R(and S \212 r)2.5 E(ewriting rules)-.18 E F1
-.407(The core of address parsing are the re)142 297 R .406(writing rules.)-.25
-F .406(These are an ordered production sys-)5.406 F(tem.)117 309 Q F2(Sendmail)
-5.282 E F1 .282(scans through the set of re)2.782 F .283
-(writing rules looking for a match on the left hand side)-.25 F .132
-(\(LHS\) of the rule.)117 321 R .131(When a rule matches, the address is repla\
-ced by the right hand side \(RHS\) of)5.131 F(the rule.)117 333 Q 1.125
-(There are se)142 349.2 R -.15(ve)-.25 G 1.125(ral sets of re).15 F 1.126
-(writing rules.)-.25 F 1.126(Some of the re)6.126 F 1.126
-(writing sets are used internally)-.25 F .21(and must ha)117 361.2 R .51 -.15
+321 R 3.648(yp)-.15 G 3.648(laces\). Blank)407.516 321 R 1.148(lines and)3.648
+F(lines be)102 333 Q(ginning with a sharp symbol \(`#'\) are comments.)-.15 E
+F0 2.5(5.1.1. R)102 357 R(and S \212 r)2.5 E(ewriting rules)-.18 E F1 .406
+(The core of address parsing are the re)142 373.2 R .406(writing rules.)-.25 F
+.407(These are an ordered production sys-)5.407 F(tem.)117 385.2 Q F2(Sendmail)
+5.283 E F1 .283(scans through the set of re)2.783 F .282
+(writing rules looking for a match on the left hand side)-.25 F .131
+(\(LHS\) of the rule.)117 397.2 R .131(When a rule matches, the address is rep\
+laced by the right hand side \(RHS\) of)5.131 F(the rule.)117 409.2 Q 1.126
+(There are se)142 425.4 R -.15(ve)-.25 G 1.126(ral sets of re).15 F 1.126
+(writing rules.)-.25 F 1.126(Some of the re)6.126 F 1.125
+(writing sets are used internally)-.25 F .21(and must ha)117 437.4 R .51 -.15
 (ve s)-.2 H .21(peci\214c semantics.).15 F .21(Other re)5.21 F .21
 (writing sets do not ha)-.25 F .51 -.15(ve s)-.2 H .21
 (peci\214cally assigned seman-).15 F
 (tics, and may be referenced by the mailer de\214nitions or by other re)117
 (ve s)-.2 H .21(peci\214c semantics.).15 F .21(Other re)5.21 F .21
 (writing sets do not ha)-.25 F .51 -.15(ve s)-.2 H .21
 (peci\214cally assigned seman-).15 F
 (tics, and may be referenced by the mailer de\214nitions or by other re)117
-373.2 Q(writing sets.)-.25 E(The syntax of these tw)142 389.4 Q 2.5(oc)-.1 G
-(ommands are:)244.38 389.4 Q F0(S)157 405.6 Q F2(n)A F1 .277
-(Sets the current ruleset being collected to)117 421.8 R F2(n)2.778 E F1 5.278
-(.I)C 2.778(fy)302.52 421.8 S .278(ou be)313.628 421.8 R .278
-(gin a ruleset more than once it deletes the)-.15 F(old de\214nition.)117 433.8
-Q F0(R)157 450 Q F2(lhs rhs comments)A F1 .303(The \214elds must be separated \
-by at least one tab character; there may be embedded spaces in the)117 466.2 R
-2.738(\214elds. The)117 478.2 R F2(lhs)2.738 E F1 .238
-(is a pattern that is applied to the input.)2.738 F .239
-(If it matches, the input is re)5.239 F .239(written to the)-.25 F F2(rhs)117
-490.2 Q F1 5(.T)C(he)143.39 490.2 Q F2(comments)2.5 E F1(are ignored.)2.5 E
-2.266(Macro e)142 506.4 R 2.266(xpansions of the form)-.15 F F0($)4.766 E F2(x)
-A F1 2.265(are performed when the con\214guration \214le is read.)4.765 F .08
-(Expansions of the form)117 518.4 R F0($&)2.58 E F2(x)A F1 .081
-(are performed at run time using a some)2.58 F .081
+449.4 Q(writing sets.)-.25 E(The syntax of these tw)142 465.6 Q 2.5(oc)-.1 G
+(ommands are:)244.38 465.6 Q F0(S)157 481.8 Q F2(n)A F1 .278
+(Sets the current ruleset being collected to)117 498 R F2(n)2.778 E F1 5.278
+(.I)C 2.778(fy)302.524 498 S .278(ou be)313.632 498 R .278
+(gin a ruleset more than once it deletes the)-.15 F(old de\214nition.)117 510 Q
+F0(R)157 526.2 Q F2(lhs rhs comments)A F1 .303(The \214elds must be separated \
+by at least one tab character; there may be embedded spaces in the)117 542.4 R
+2.739(\214elds. The)117 554.4 R F2(lhs)2.739 E F1 .239
+(is a pattern that is applied to the input.)2.739 F .238
+(If it matches, the input is re)5.238 F .238(written to the)-.25 F F2(rhs)117
+566.4 Q F1 5(.T)C(he)143.39 566.4 Q F2(comments)2.5 E F1(are ignored.)2.5 E
+2.265(Macro e)142 582.6 R 2.265(xpansions of the form)-.15 F F0($)4.765 E F2(x)
+A F1 2.266(are performed when the con\214guration \214le is read.)4.765 F .081
+(Expansions of the form)117 594.6 R F0($&)2.581 E F2(x)A F1 .081
+(are performed at run time using a some)2.581 F .08
 (what less general algorithm.)-.25 F .639
 (This for is intended only for referencing internally de\214ned macros such as)
 (what less general algorithm.)-.25 F .639
 (This for is intended only for referencing internally de\214ned macros such as)
-117 530.4 R F0($h)3.138 E F1 .638(that are changed)3.138 F(at runtime.)117
-542.4 Q F0 2.5(5.1.1.1. The)117 566.4 R(left hand side)2.5 E F1 1.617
-(The left hand side of re)157 582.6 R 1.617(writing rules contains a pattern.)
+117 606.6 R F0($h)3.139 E F1 .639(that are changed)3.139 F(at runtime.)117
+618.6 Q F0 2.5(5.1.1.1. The)117 642.6 R(left hand side)2.5 E F1 1.617
+(The left hand side of re)157 658.8 R 1.617(writing rules contains a pattern.)
 -.25 F 1.617(Normal w)6.617 F 1.617(ords are simply)-.1 F(matched directly)132
 -.25 F 1.617(Normal w)6.617 F 1.617(ords are simply)-.1 F(matched directly)132
-594.6 Q 5(.M)-.65 G(etasyntax is introduced using a dollar sign.)214.67 594.6 Q
-(The metasymbols are:)5 E F0($*)172 610.8 Q F1(Match zero or more tok)192.14
-610.8 Q(ens)-.1 E F0($+)172 622.8 Q F1(Match one or more tok)9.44 E(ens)-.1 E
-F0<24ad>172 634.8 Q F1(Match e)9.44 E(xactly one tok)-.15 E(en)-.1 E F0($=)172
-646.8 Q F2(x)A F1(Match an)5 E 2.5(yp)-.15 G(hrase in class)241.98 646.8 Q F2
-(x)2.5 E F0($~)172 658.8 Q F2(x)A F1(Match an)7.37 E 2.5(yw)-.15 G
-(ord not in class)244.1 658.8 Q F2(x)2.5 E F1 .499(If an)132 675 R 2.999(yo)
--.15 G 2.999(ft)163.948 675 S .499(hese match, the)173.057 675 R 2.999(ya)-.15
-G .499(re assigned to the symbol)248.274 675 R F0($)2.999 E F2(n)A F1 .498
-(for replacement on the right hand)2.999 F(side, where)132 687 Q F2(n)2.5 E F1
-(is the inde)2.5 E 2.5(xi)-.15 G 2.5(nt)238.78 687 S(he LHS.)249.06 687 Q -.15
-(Fo)5 G 2.5(re).15 G(xample, if the LHS:)307.92 687 Q($\255:$+)172 703.2 Q
-(is applied to the input:)132 719.4 Q EP
-%%Page: 24 21
+670.8 Q 5(.M)-.65 G(etasyntax is introduced using a dollar sign.)214.67 670.8 Q
+(The metasymbols are:)5 E EP
+%%Page: 26 21
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-24 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(UCB)172 96 Q
-(ARP)-.35 E(A:eric)-.92 E(the rule will match, and the v)132 112.2 Q
-(alues passed to the RHS will be:)-.25 E 7.5($1 UCB)172 128.4 R(ARP)-.35 E(A)
--.92 E 7.5($2 eric)172 140.4 R(Additionally)157 160.8 Q 3.398(,t)-.65 G .898
-(he LHS can include)215.588 160.8 R F0($@)3.398 E F1 .898(to match zero tok)
-3.398 F 3.398(ens. This)-.1 F(is)3.398 E/F2 10/Times-Italic@0 SF(not)3.398 E F1
-.898(bound to a)3.398 F F0($)132 172.8 Q F2(N)A F1 .837(on the RHS, and is nor\
-mally only used when it stands alone in order to match the null)3.338 F(input.)
-132 184.8 Q F0 2.5(5.1.1.2. The)117 208.8 R(right hand side)2.5 E F1 .525
-(When the left hand side of a re)157 225 R .526
-(writing rule matches, the input is deleted and replaced)-.25 F .932
-(by the right hand side.)132 237 R -.8(To)5.932 G -.1(ke).8 G .932
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-26 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E($*)172 96 Q/F1 10/Times-Roman@0 SF
+(Match zero or more tok)192.14 96 Q(ens)-.1 E F0($+)172 108 Q F1
+(Match one or more tok)9.44 E(ens)-.1 E F0<24ad>172 120 Q F1(Match e)9.44 E
+(xactly one tok)-.15 E(en)-.1 E F0($=)172 132 Q/F2 10/Times-Italic@0 SF(x)A F1
+(Match an)5 E 2.5(yp)-.15 G(hrase in class)241.98 132 Q F2(x)2.5 E F0($~)172
+144 Q F2(x)A F1(Match an)7.37 E 2.5(yw)-.15 G(ord not in class)244.1 144 Q F2
+(x)2.5 E F1 .498(If an)132 160.2 R 2.998(yo)-.15 G 2.998(ft)163.946 160.2 S
+.499(hese match, the)173.054 160.2 R 2.999(ya)-.15 G .499
+(re assigned to the symbol)248.271 160.2 R F0($)2.999 E F2(n)A F1 .499
+(for replacement on the right hand)2.999 F(side, where)132 172.2 Q F2(n)2.5 E
+F1(is the inde)2.5 E 2.5(xi)-.15 G 2.5(nt)238.78 172.2 S(he LHS.)249.06 172.2 Q
+-.15(Fo)5 G 2.5(re).15 G(xample, if the LHS:)307.92 172.2 Q($\255:$+)172 188.4
+Q(is applied to the input:)132 204.6 Q(UCB)172 220.8 Q(ARP)-.35 E(A:eric)-.92 E
+(the rule will match, and the v)132 237 Q(alues passed to the RHS will be:)-.25
+E 7.5($1 UCB)172 253.2 R(ARP)-.35 E(A)-.92 E 7.5($2 eric)172 265.2 R
+(Additionally)157 285.6 Q 3.398(,t)-.65 G .898(he LHS can include)215.588 285.6
+R F0($@)3.398 E F1 .898(to match zero tok)3.398 F 3.398(ens. This)-.1 F(is)
+3.398 E F2(not)3.398 E F1 .898(bound to a)3.398 F F0($)132 297.6 Q F2(N)A F1
+.837(on the RHS, and is normally only used when it stands alone in order to ma\
+tch the null)3.337 F(input.)132 309.6 Q F0 2.5(5.1.1.2. The)117 333.6 R
+(right hand side)2.5 E F1 .526(When the left hand side of a re)157 349.8 R .525
+(writing rule matches, the input is deleted and replaced)-.25 F .931
+(by the right hand side.)132 361.8 R -.8(To)5.932 G -.1(ke).8 G .932
 (ns are copied directly from the RHS unless the).1 F 3.432(yb)-.15 G -.15(eg)
 (ns are copied directly from the RHS unless the).1 F 3.432(yb)-.15 G -.15(eg)
-457.848 237 S .931(in with a).15 F(dollar sign.)132 249 Q(Metasymbols are:)5 E
-F0($)172 265.2 Q F2(n)A F1(Substitute inde\214nite tok)222.55 265.2 Q(en)-.1 E
-F2(n)2.5 E F1(from LHS)2.5 E F0($[)172 277.2 Q F2(name)A F0($])A F1
-(Canonicalize)222.55 277.2 Q F2(name)2.5 E F0($\()172 289.2 Q F2(map k)A -.3
-(ey)-.1 G F0($@)2.8 E F2(ar)A(guments)-.37 E F0($:)2.5 E F2(default)A F0($\))
-2.5 E F1(Generalized k)222.55 301.2 Q -.15(ey)-.1 G(ed mapping function).15 E
-F0($>)172 313.2 Q F2(n)A F1(\231Call\232 ruleset)222.55 313.2 Q F2(n)2.5 E F0
-($#)172 325.2 Q F2(mailer)A F1(Resolv)222.55 325.2 Q 2.5(et)-.15 G(o)259.9
-325.2 Q F2(mailer)2.5 E F0($@)172 337.2 Q F2(host)A F1(Specify)222.55 337.2 Q
-F2(host)2.5 E F0($:)172 349.2 Q F2(user)A F1(Specify)222.55 349.2 Q F2(user)2.5
-E F1(The)157 369.6 Q F0($)3.012 E F2(n)A F1 .512
-(syntax substitutes the corresponding v)3.012 F .513(alue from a)-.25 F F0($+)
-3.013 E F1(,)A F0<24ad>3.013 E F1(,)A F0($*)3.013 E F1(,)A F0($=)3.013 E F1
-3.013(,o)C(r)461.874 369.6 Q F0($~)3.013 E F1(match)3.013 E(on the LHS.)132
-381.6 Q(It may be used an)5 E(ywhere.)-.15 E 2.701(Ah)157 397.8 S .201
-(ost name enclosed between)171.921 397.8 R F0($[)2.7 E F1(and)2.7 E F0($])2.7 E
-F1 .2(is look)2.7 F .2(ed up using the)-.1 F F2 -.1(ge)2.7 G(thostent).1 E F1
-.2(\(3\) routines)1.666 F 3.332(and replaced by the canonical name)132 411.8 R
-/F3 7/Times-Roman@0 SF(7)291.672 407.8 Q F1 8.333(.F)295.172 411.8 S 3.333
-(or e)311.415 411.8 R 3.333(xample, \231$[csam$]\232 might become \231lbl-)-.15
-F 1.924(csam.arpa\232 and \231$[[128.32.130.2]$]\232 w)132 423.8 R 1.923
+457.846 361.8 S .932(in with a).15 F(dollar sign.)132 373.8 Q(Metasymbols are:)
+5 E F0($)172 390 Q F2(n)A F1(Substitute inde\214nite tok)222.55 390 Q(en)-.1 E
+F2(n)2.5 E F1(from LHS)2.5 E F0($[)172 402 Q F2(name)A F0($])A F1(Canonicalize)
+222.55 402 Q F2(name)2.5 E F0($\()172 414 Q F2(map k)A -.3(ey)-.1 G F0($@)2.8 E
+F2(ar)A(guments)-.37 E F0($:)2.5 E F2(default)A F0($\))2.5 E F1(Generalized k)
+222.55 426 Q -.15(ey)-.1 G(ed mapping function).15 E F0($>)172 438 Q F2(n)A F1
+(\231Call\232 ruleset)222.55 438 Q F2(n)2.5 E F0($#)172 450 Q F2(mailer)A F1
+(Resolv)222.55 450 Q 2.5(et)-.15 G(o)259.9 450 Q F2(mailer)2.5 E F0($@)172 462
+Q F2(host)A F1(Specify)222.55 462 Q F2(host)2.5 E F0($:)172 474 Q F2(user)A F1
+(Specify)222.55 474 Q F2(user)2.5 E F1(The)157 494.4 Q F0($)3.013 E F2(n)A F1
+.513(syntax substitutes the corresponding v)3.013 F .513(alue from a)-.25 F F0
+($+)3.013 E F1(,)A F0<24ad>3.013 E F1(,)A F0($*)3.012 E F1(,)A F0($=)3.012 E F1
+3.012(,o)C(r)461.876 494.4 Q F0($~)3.012 E F1(match)3.012 E(on the LHS.)132
+506.4 Q(It may be used an)5 E(ywhere.)-.15 E 2.7(Ah)157 522.6 S .2
+(ost name enclosed between)171.92 522.6 R F0($[)2.7 E F1(and)2.7 E F0($])2.7 E
+F1 .2(is look)2.7 F .201(ed up using the)-.1 F F2 -.1(ge)2.701 G(thostent).1 E
+F1 .201(\(3\) routines)1.666 F 3.333(and replaced by the canonical name)132
+536.6 R/F3 7/Times-Roman@0 SF(8)291.675 532.6 Q F1 8.333(.F)295.175 536.6 S
+3.333(or e)311.418 536.6 R 3.332
+(xample, \231$[csam$]\232 might become \231lbl-)-.15 F 1.923
+(csam.arpa\232 and \231$[[128.32.130.2]$]\232 w)132 548.6 R 1.923
 (ould become \231v)-.1 F(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU.)
 (ould become \231v)-.1 F(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU.)
-.65 E<9a>-.7 E F2(Send-)6.923 E(mail)132 435.8 Q F1 .435(recognizes it')2.935 F
-2.935(sn)-.55 G .436(umeric IP address without calling the name serv)218.575
-435.8 R .436(er and replaces it with)-.15 F(it')132 447.8 Q 2.5(sc)-.55 G
-(anonical name.)151.17 447.8 Q(The)157 464 Q F0($\()2.862 E F1(...)2.862 E F0
+.65 E<9a>-.7 E F2(Send-)6.924 E(mail)132 560.6 Q F1 .436(recognizes it')2.936 F
+2.936(sn)-.55 G .436(umeric IP address without calling the name serv)218.578
+560.6 R .435(er and replaces it with)-.15 F(it')132 572.6 Q 2.5(sc)-.55 G
+(anonical name.)151.17 572.6 Q(The)157 588.8 Q F0($\()2.861 E F1(...)2.861 E F0
 ($\))5.361 E F1 .361
 (syntax is a more general form of lookup; it uses a named map instead of)2.861
 ($\))5.361 E F1 .361
 (syntax is a more general form of lookup; it uses a named map instead of)2.861
-F .124(an implicit map.)132 476 R .125(If no lookup is found, the indicted)
-5.124 F F2(default)2.625 E F1 .125(is inserted; if no def)2.625 F .125
-(ault is speci-)-.1 F(\214ed and no lookup matches, the v)132 488 Q
-(alue is left unchanged.)-.25 E(The)157 504.2 Q F0($>)3.572 E F2(n)A F1 1.071
+F .125(an implicit map.)132 600.8 R .125(If no lookup is found, the indicted)
+5.125 F F2(default)2.625 E F1 .124(is inserted; if no def)2.625 F .124
+(ault is speci-)-.1 F(\214ed and no lookup matches, the v)132 612.8 Q
+(alue is left unchanged.)-.25 E(The)157 629 Q F0($>)3.571 E F2(n)A F1 1.071
 (syntax causes the remainder of the line to be substituted as usual and then)
 (syntax causes the remainder of the line to be substituted as usual and then)
-3.572 F .571(passed as the ar)132 516.2 R .572(gument to ruleset)-.18 F F2(n)
-3.072 E F1 5.572(.T)C .572(he \214nal v)288.852 516.2 R .572(alue of ruleset)
--.25 F F2(n)3.072 E F1 .572(then becomes the substitu-)3.072 F
-(tion for this rule.)132 528.2 Q(The)157 544.4 Q F0($#)3.097 E F1 .597
-(syntax should)3.097 F F2(only)3.097 E F1 .597(be used in ruleset zero.)3.097 F
-.596(It causes e)5.597 F -.25(va)-.25 G .596(luation of the ruleset).25 F .606
-(to terminate immediately)132 556.4 R 3.106(,a)-.65 G .607
-(nd signals to sendmail that the address has completely resolv)243.158 556.4 R
-(ed.)-.15 E(The complete syntax is:)132 568.4 Q F0($#)172 584.6 Q F2(mailer)A
-F0($@)2.5 E F2(host)A F0($:)2.5 E F2(user)A F1 .394
-(This speci\214es the {mailer)132 600.8 R 2.894(,h)-.4 G .394
-(ost, user} 3-tuple necessary to direct the mailer)245.466 600.8 R 5.394(.I)
--.55 G 2.894(ft)447.548 600.8 S .394(he mailer is)456.552 600.8 R .136
-(local the host part may be omitted)132 614.8 R F3(8)268.916 610.8 Q F1 5.136
-(.T)272.416 614.8 S(he)286.162 614.8 Q F2(mailer)2.636 E F1 .135
-(must be a single w)2.636 F .135(ord, b)-.1 F .135(ut the)-.2 F F2(host)2.635 E
-F1(and)2.635 E F2(user)2.635 E F1 .251(may be multi-part.)132 626.8 R .252
-(If the)5.252 F F2(mailer)2.752 E F1 .252(is the b)2.752 F .252
-(uiltin IPC mailer)-.2 F 2.752(,t)-.4 G(he)369.72 626.8 Q F2(host)2.752 E F1
-.252(may be a colon-separated)2.752 F 2.439
-(list of hosts that are searched in order for the \214rst w)132 638.8 R 2.438
-(orking address \(e)-.1 F 2.438(xactly lik)-.15 F 4.938(eM)-.1 G(X)496.78 638.8
-Q(records\).)132 650.8 Q .32 LW 76 660.4 72 660.4 DL 80 660.4 76 660.4 DL 84
-660.4 80 660.4 DL 88 660.4 84 660.4 DL 92 660.4 88 660.4 DL 96 660.4 92 660.4
-DL 100 660.4 96 660.4 DL 104 660.4 100 660.4 DL 108 660.4 104 660.4 DL 112
-660.4 108 660.4 DL 116 660.4 112 660.4 DL 120 660.4 116 660.4 DL 124 660.4 120
-660.4 DL 128 660.4 124 660.4 DL 132 660.4 128 660.4 DL 136 660.4 132 660.4 DL
-140 660.4 136 660.4 DL 144 660.4 140 660.4 DL 148 660.4 144 660.4 DL 152 660.4
-148 660.4 DL 156 660.4 152 660.4 DL 160 660.4 156 660.4 DL 164 660.4 160 660.4
-DL 168 660.4 164 660.4 DL 172 660.4 168 660.4 DL 176 660.4 172 660.4 DL 180
-660.4 176 660.4 DL 184 660.4 180 660.4 DL 188 660.4 184 660.4 DL 192 660.4 188
-660.4 DL 196 660.4 192 660.4 DL 200 660.4 196 660.4 DL 204 660.4 200 660.4 DL
-208 660.4 204 660.4 DL 212 660.4 208 660.4 DL 216 660.4 212 660.4 DL/F4 5
-/Times-Roman@0 SF(7)93.6 670.8 Q/F5 8/Times-Roman@0 SF
-(This is actually completely equi)3.2 I -.2(va)-.2 G(lent to $\(host).2 E/F6 8
-/Times-Italic@0 SF(hostname)2 E F5 2($\). In)B(particular)2 E 2(,a)-.32 G/F7 8
-/Times-Bold@0 SF($:)A F5(def)2 E(ault can be used.)-.08 E F4(8)93.6 684.4 Q F5
--.88(Yo)3.2 K 2.207(um).88 G .207(ay w)117.427 687.6 R .208
-(ant to use it for special \231per user\232 e)-.08 F 2.208(xtensions. F)-.12 F
-.208(or e)-.12 F .208
-(xample, at CMU you can send email to \231jgm+foo\232; the part af-)-.12 F(ter\
- the plus sign is not part of the user name, and is passed to the local mailer\
- for local use.)72 697.2 Q EP
-%%Page: 25 22
+3.571 F .572(passed as the ar)132 641 R .572(gument to ruleset)-.18 F F2(n)
+3.072 E F1 5.572(.T)C .572(he \214nal v)288.854 641 R .572(alue of ruleset)-.25
+F F2(n)3.072 E F1 .571(then becomes the substitu-)3.072 F(tion for this rule.)
+132 653 Q .32 LW 76 678.8 72 678.8 DL 80 678.8 76 678.8 DL 84 678.8 80 678.8 DL
+88 678.8 84 678.8 DL 92 678.8 88 678.8 DL 96 678.8 92 678.8 DL 100 678.8 96
+678.8 DL 104 678.8 100 678.8 DL 108 678.8 104 678.8 DL 112 678.8 108 678.8 DL
+116 678.8 112 678.8 DL 120 678.8 116 678.8 DL 124 678.8 120 678.8 DL 128 678.8
+124 678.8 DL 132 678.8 128 678.8 DL 136 678.8 132 678.8 DL 140 678.8 136 678.8
+DL 144 678.8 140 678.8 DL 148 678.8 144 678.8 DL 152 678.8 148 678.8 DL 156
+678.8 152 678.8 DL 160 678.8 156 678.8 DL 164 678.8 160 678.8 DL 168 678.8 164
+678.8 DL 172 678.8 168 678.8 DL 176 678.8 172 678.8 DL 180 678.8 176 678.8 DL
+184 678.8 180 678.8 DL 188 678.8 184 678.8 DL 192 678.8 188 678.8 DL 196 678.8
+192 678.8 DL 200 678.8 196 678.8 DL 204 678.8 200 678.8 DL 208 678.8 204 678.8
+DL 212 678.8 208 678.8 DL 216 678.8 212 678.8 DL/F4 5/Times-Roman@0 SF(8)93.6
+689.2 Q/F5 8/Times-Roman@0 SF(This is actually completely equi)3.2 I -.2(va)-.2
+G(lent to $\(host).2 E/F6 8/Times-Italic@0 SF(hostname)2 E F5 2($\). In)B
+(particular)2 E 2(,a)-.32 G/F7 8/Times-Bold@0 SF($:)A F5(def)2 E
+(ault can be used.)-.08 E EP
+%%Page: 27 22
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-25)452.9 60 Q/F1 10/Times-Roman@0 SF 3.794(AR)157 96 S 1.294
-(HS may also be preceded by a)174.684 96 R F0($@)3.795 E F1 1.295(or a)3.795 F
-F0($:)3.795 E F1 1.295(to control e)3.795 F -.25(va)-.25 G 3.795(luation. A).25
-F F0($@)3.795 E F1(pre\214x)3.795 E .611
-(causes the ruleset to return with the remainder of the RHS as the v)132 108 R
-3.11(alue. A)-.25 F F0($:)3.11 E F1 .61(pre\214x causes)3.11 F .431
-(the rule to terminate immediately)132 120 R 2.931(,b)-.65 G .431
-(ut the ruleset to continue; this can be used to a)276.625 120 R -.2(vo)-.2 G
-.432(id con-).2 F(tinued application of a rule.)132 132 Q
-(The pre\214x is stripped before continuing.)5 E(The)157 148.2 Q F0($@)2.5 E F1
+(SMM:08-27)452.9 60 Q/F1 10/Times-Roman@0 SF(The)157 96 Q F0($#)3.358 E F1 .858
+(syntax should)3.358 F/F2 10/Times-Italic@0 SF(only)3.358 E F1 .858
+(be used in ruleset zero or a subroutine of ruleset zero.)3.358 F(It)5.859 E
+1.1(causes e)132 108 R -.25(va)-.25 G 1.1
+(luation of the ruleset to terminate immediately).25 F 3.6(,a)-.65 G 1.1
+(nd signals to)377.11 108 R F2(sendmail)3.6 E F1 1.1(that the)3.6 F
+(address has completely resolv)132 120 Q 2.5(ed. The)-.15 F
+(complete syntax is:)2.5 E F0($#)172 136.2 Q F2(mailer)A F0($@)2.5 E F2(host)A
+F0($:)2.5 E F2(user)A F1 .394(This speci\214es the {mailer)132 152.4 R 2.894
+(,h)-.4 G .394(ost, user} 3-tuple necessary to direct the mailer)245.466 152.4
+R 5.394(.I)-.55 G 2.894(ft)447.548 152.4 S .394(he mailer is)456.552 152.4 R
+.135(local the host part may be omitted)132 166.4 R/F3 7/Times-Roman@0 SF(9)
+268.91 162.4 Q F1 5.135(.T)272.41 166.4 S(he)286.155 166.4 Q F2(mailer)2.635 E
+F1 .136(must be a single w)2.636 F .136(ord, b)-.1 F .136(ut the)-.2 F F2(host)
+2.636 E F1(and)2.636 E F2(user)2.636 E F1 .252(may be multi-part.)132 178.4 R
+.252(If the)5.252 F F2(mailer)2.752 E F1 .252(is the b)2.752 F .252
+(uiltin IPC mailer)-.2 F 2.752(,t)-.4 G(he)369.722 178.4 Q F2(host)2.752 E F1
+.251(may be a colon-separated)2.752 F 2.439
+(list of hosts that are searched in order for the \214rst w)132 190.4 R 2.439
+(orking address \(e)-.1 F 2.439(xactly lik)-.15 F 4.939(eM)-.1 G(X)496.78 190.4
+Q(records\).)132 202.4 Q 3.795(AR)157 218.6 S 1.295
+(HS may also be preceded by a)174.685 218.6 R F0($@)3.795 E F1 1.295(or a)3.795
+F F0($:)3.795 E F1 1.294(to control e)3.795 F -.25(va)-.25 G 3.794(luation. A)
+.25 F F0($@)3.794 E F1(pre\214x)3.794 E .61
+(causes the ruleset to return with the remainder of the RHS as the v)132 230.6
+R 3.111(alue. A)-.25 F F0($:)3.111 E F1 .611(pre\214x causes)3.111 F .432
+(the rule to terminate immediately)132 242.6 R 2.931(,b)-.65 G .431
+(ut the ruleset to continue; this can be used to a)276.629 242.6 R -.2(vo)-.2 G
+.431(id con-).2 F(tinued application of a rule.)132 254.6 Q
+(The pre\214x is stripped before continuing.)5 E(The)157 270.8 Q F0($@)2.5 E F1
 (and)2.5 E F0($:)2.5 E F1(pre\214x)2.5 E(es may precede a)-.15 E F0($>)2.5 E F1
 (and)2.5 E F0($:)2.5 E F1(pre\214x)2.5 E(es may precede a)-.15 E F0($>)2.5 E F1
-(spec; for e)2.5 E(xample:)-.15 E 20.19(R$+ $:)172 164.4 R($>7 $1)2.5 E .256
-(matches an)132 180.6 R .256(ything, passes that to ruleset se)-.15 F -.15(ve)
+(spec; for e)2.5 E(xample:)-.15 E 20.19(R$+ $:)172 287 R($>7 $1)2.5 E .256
+(matches an)132 303.2 R .256(ything, passes that to ruleset se)-.15 F -.15(ve)
 -.25 G .256(n, and continues; the).15 F F0($:)2.756 E F1 .256
 (is necessary to a)2.756 F -.2(vo)-.2 G .256(id an).2 F(in\214nite loop.)132
 -.25 G .256(n, and continues; the).15 F F0($:)2.756 E F1 .256
 (is necessary to a)2.756 F -.2(vo)-.2 G .256(id an).2 F(in\214nite loop.)132
-192.6 Q .051(Substitution occurs in the order described, that is, parameters f\
-rom the LHS are substi-)157 208.8 R .556(tuted, hostnames are canonicalized, \
-\231subroutines\232 are called, and \214nally)132 220.8 R F0($#)3.056 E F1(,)A
-F0($@)3.056 E F1 3.056(,a)C(nd)467.348 220.8 Q F0($:)3.056 E F1(are)3.056 E
-(processed.)132 232.8 Q F0 2.5(5.1.1.3. Semantics)117 256.8 R(of r)2.5 E
-(ewriting rule sets)-.18 E F1 2.921(There are \214v)157 273 R 5.421(er)-.15 G
--.25(ew)226.973 273 S 2.922(riting sets that ha).25 F 3.222 -.15(ve s)-.2 H
-2.922(peci\214c semantics.).15 F 2.922(These are related as)7.922 F
-(depicted by \214gure 2.)132 285 Q 1.092
-(Ruleset three should turn the address into \231canonical form.)157 301.2 R
-6.091<9a54>-.7 G 1.091(his form should ha)416.917 301.2 R -.15(ve)-.2 G
-(the basic syntax:)132 313.2 Q(local-part@host-domain-spec)172 329.4 Q 1.295
-(If no \231@\232 sign is speci\214ed, then the host-domain-spec)132 345.6 R/F2
-10/Times-Italic@0 SF(may)3.796 E F1 1.296(be appended from the sender)3.796 F
-1.284(address \(if the)132 357.6 R F0(C)3.784 E F1 1.284
-(\215ag is set in the mailer de\214nition corresponding to the)3.784 F F2
-(sending)3.784 E F1(mailer\).)3.784 E
-(Ruleset three is applied by sendmail before doing an)132 369.6 Q
-(ything with an)-.15 E 2.5(ya)-.15 G(ddress.)411.39 369.6 Q .506(Ruleset zero \
-is applied after ruleset three to addresses that are going to actually spec-)
-157 385.8 R .296(ify recipients.)132 397.8 R .296(It must resolv)5.296 F 2.796
-(et)-.15 G 2.796(oa)258.04 397.8 S F2({mailer)A 2.796(,h)-1.11 G .296
-(ost, user})312.368 397.8 R F1 2.795(triple. The)2.796 F F2(mailer)2.795 E F1
-.295(must be de\214ned in)2.795 F .56
-(the mailer de\214nitions from the con\214guration \214le.)132 409.8 R(The)
-5.561 E F2(host)3.061 E F1 .561(is de\214ned into the)3.061 F F0($h)3.061 E F1
-.561(macro for)3.061 F(use in the ar)132 421.8 Q(gv e)-.18 E
-(xpansion of the speci\214ed mailer)-.15 E(.)-.55 E 1.357(Rulesets one and tw)
-157 438 R 3.857(oa)-.1 G 1.357
-(re applied to all sender and recipient addresses respecti)254.538 438 R -.15
-(ve)-.25 G(ly).15 E(.)-.65 E(The)132 450 Q 2.5(ya)-.15 G(re applied before an)
-159.34 450 Q 2.5(ys)-.15 G(peci\214cation in the mailer de\214nition.)250.27
-450 Q(The)5 E 2.5(ym)-.15 G(ust ne)429 450 Q -.15(ve)-.25 G 2.5(rr).15 G(esolv)
-470.81 450 Q(e.)-.15 E .4 LW 77 483.6 72 483.6 DL 79 483.6 74 483.6 DL 84 483.6
-79 483.6 DL 89 483.6 84 483.6 DL 94 483.6 89 483.6 DL 99 483.6 94 483.6 DL 104
-483.6 99 483.6 DL 109 483.6 104 483.6 DL 114 483.6 109 483.6 DL 119 483.6 114
-483.6 DL 124 483.6 119 483.6 DL 129 483.6 124 483.6 DL 134 483.6 129 483.6 DL
-139 483.6 134 483.6 DL 144 483.6 139 483.6 DL 149 483.6 144 483.6 DL 154 483.6
-149 483.6 DL 159 483.6 154 483.6 DL 164 483.6 159 483.6 DL 169 483.6 164 483.6
-DL 174 483.6 169 483.6 DL 179 483.6 174 483.6 DL 184 483.6 179 483.6 DL 189
-483.6 184 483.6 DL 194 483.6 189 483.6 DL 199 483.6 194 483.6 DL 204 483.6 199
-483.6 DL 209 483.6 204 483.6 DL 214 483.6 209 483.6 DL 219 483.6 214 483.6 DL
-224 483.6 219 483.6 DL 229 483.6 224 483.6 DL 234 483.6 229 483.6 DL 239 483.6
-234 483.6 DL 244 483.6 239 483.6 DL 249 483.6 244 483.6 DL 254 483.6 249 483.6
-DL 259 483.6 254 483.6 DL 264 483.6 259 483.6 DL 269 483.6 264 483.6 DL 274
-483.6 269 483.6 DL 279 483.6 274 483.6 DL 284 483.6 279 483.6 DL 289 483.6 284
-483.6 DL 294 483.6 289 483.6 DL 299 483.6 294 483.6 DL 304 483.6 299 483.6 DL
-309 483.6 304 483.6 DL 314 483.6 309 483.6 DL 319 483.6 314 483.6 DL 324 483.6
-319 483.6 DL 329 483.6 324 483.6 DL 334 483.6 329 483.6 DL 339 483.6 334 483.6
-DL 344 483.6 339 483.6 DL 349 483.6 344 483.6 DL 354 483.6 349 483.6 DL 359
-483.6 354 483.6 DL 364 483.6 359 483.6 DL 369 483.6 364 483.6 DL 374 483.6 369
-483.6 DL 379 483.6 374 483.6 DL 384 483.6 379 483.6 DL 389 483.6 384 483.6 DL
-394 483.6 389 483.6 DL 399 483.6 394 483.6 DL 404 483.6 399 483.6 DL 409 483.6
-404 483.6 DL 414 483.6 409 483.6 DL 419 483.6 414 483.6 DL 424 483.6 419 483.6
-DL 429 483.6 424 483.6 DL 434 483.6 429 483.6 DL 439 483.6 434 483.6 DL 444
-483.6 439 483.6 DL 449 483.6 444 483.6 DL 454 483.6 449 483.6 DL 459 483.6 454
-483.6 DL 464 483.6 459 483.6 DL 469 483.6 464 483.6 DL 474 483.6 469 483.6 DL
-479 483.6 474 483.6 DL 484 483.6 479 483.6 DL 489 483.6 484 483.6 DL 494 483.6
-489 483.6 DL 499 483.6 494 483.6 DL 504 483.6 499 483.6 DL(addr)91.915 578 Q
-133.2 576 111.6 576 DL 133.2 576 126 577.8 DL 133.2 576 126 574.2 DL(3)141.5
-578 Q 133.2 565.2 133.2 586.8 DL 154.8 565.2 133.2 565.2 DL 154.8 586.8 154.8
-565.2 DL 133.2 586.8 154.8 586.8 DL 176.4 576 154.8 576 DL 176.4 576 169.2
-577.8 DL 176.4 576 169.2 574.2 DL(D)183.59 578 Q 176.4 565.2 176.4 586.8 DL 198
-565.2 176.4 565.2 DL 198 586.8 198 565.2 DL 176.4 586.8 198 586.8 DL 219.6 576
-198 576 DL 277.2 558 255.6 558 DL 277.2 558 270 559.8 DL 277.2 558 270 556.2 DL
-(1)285.5 560 Q 277.2 547.2 277.2 568.8 DL 298.8 547.2 277.2 547.2 DL 298.8
-568.8 298.8 547.2 DL 277.2 568.8 298.8 568.8 DL 320.4 558 298.8 558 DL 320.4
-558 313.2 559.8 DL 320.4 558 313.2 556.2 DL(S)328.42 560 Q 320.4 547.2 320.4
-568.8 DL 342 547.2 320.4 547.2 DL 342 568.8 342 547.2 DL 320.4 568.8 342 568.8
-DL 363.6 558 342 558 DL 277.2 594 255.6 594 DL 277.2 594 270 595.8 DL 277.2 594
-270 592.2 DL(2)285.5 596 Q 277.2 583.2 277.2 604.8 DL 298.8 583.2 277.2 583.2
-DL 298.8 604.8 298.8 583.2 DL 277.2 604.8 298.8 604.8 DL 320.4 594 298.8 594 DL
-320.4 594 313.2 595.8 DL 320.4 594 313.2 592.2 DL(R)327.865 596 Q 320.4 583.2
-320.4 604.8 DL 342 583.2 320.4 583.2 DL 342 604.8 342 583.2 DL 320.4 604.8 342
-604.8 DL 363.6 594 342 594 DL 421.2 576 399.6 576 DL 421.2 576 414 577.8 DL
-421.2 576 414 574.2 DL(4)429.5 578 Q 421.2 565.2 421.2 586.8 DL 442.8 565.2
-421.2 565.2 DL 442.8 586.8 442.8 565.2 DL 421.2 586.8 442.8 586.8 DL 464.4 576
-442.8 576 DL 464.4 576 457.2 577.8 DL 464.4 576 457.2 574.2 DL(msg)466.865 578
-Q 255.6 558 219.6 576 DL 255.6 594 219.6 576 DL 399.6 576 363.6 558 DL 399.6
-576 363.6 594 DL 208.8 522 187.2 522 DL 208.8 522 201.6 523.8 DL 208.8 522
-201.6 520.2 DL(0)217.1 524 Q 208.8 511.2 208.8 532.8 DL 230.4 511.2 208.8 511.2
-DL 230.4 532.8 230.4 511.2 DL 208.8 532.8 230.4 532.8 DL 252 522 230.4 522 DL
-252 522 244.8 523.8 DL 252 522 244.8 520.2 DL(resolv)265.69 524 Q(ed address)
--.15 E 187.2 522 162 576 DL(Figure 2 \212 Re)216.045 624 Q
-(writing set semantics)-.25 E 2.5(D\212s)209.35 636 S(ender domain addition)
-235.46 636 Q 2.5(S\212m)209.35 648 S(ailer)237.69 648 Q(-speci\214c sender re)
--.2 E(writing)-.25 E 2.5(R\212m)209.35 660 S(ailer)238.8 660 Q
-(-speci\214c recipient re)-.2 E(writing)-.25 E 77 672 72 672 DL 79 672 74 672
-DL 84 672 79 672 DL 89 672 84 672 DL 94 672 89 672 DL 99 672 94 672 DL 104 672
-99 672 DL 109 672 104 672 DL 114 672 109 672 DL 119 672 114 672 DL 124 672 119
-672 DL 129 672 124 672 DL 134 672 129 672 DL 139 672 134 672 DL 144 672 139 672
-DL 149 672 144 672 DL 154 672 149 672 DL 159 672 154 672 DL 164 672 159 672 DL
-169 672 164 672 DL 174 672 169 672 DL 179 672 174 672 DL 184 672 179 672 DL 189
-672 184 672 DL 194 672 189 672 DL 199 672 194 672 DL 204 672 199 672 DL 209 672
-204 672 DL 214 672 209 672 DL 219 672 214 672 DL 224 672 219 672 DL 229 672 224
-672 DL 234 672 229 672 DL 239 672 234 672 DL 244 672 239 672 DL 249 672 244 672
-DL 254 672 249 672 DL 259 672 254 672 DL 264 672 259 672 DL 269 672 264 672 DL
-274 672 269 672 DL 279 672 274 672 DL 284 672 279 672 DL 289 672 284 672 DL 294
-672 289 672 DL 299 672 294 672 DL 304 672 299 672 DL 309 672 304 672 DL 314 672
-309 672 DL 319 672 314 672 DL 324 672 319 672 DL 329 672 324 672 DL 334 672 329
-672 DL 339 672 334 672 DL 344 672 339 672 DL 349 672 344 672 DL 354 672 349 672
-DL 359 672 354 672 DL 364 672 359 672 DL 369 672 364 672 DL 374 672 369 672 DL
-379 672 374 672 DL 384 672 379 672 DL 389 672 384 672 DL 394 672 389 672 DL 399
-672 394 672 DL 404 672 399 672 DL 409 672 404 672 DL 414 672 409 672 DL 419 672
-414 672 DL 424 672 419 672 DL 429 672 424 672 DL 434 672 429 672 DL 439 672 434
-672 DL 444 672 439 672 DL 449 672 444 672 DL 454 672 449 672 DL 459 672 454 672
-DL 464 672 459 672 DL 469 672 464 672 DL 474 672 469 672 DL 479 672 474 672 DL
-484 672 479 672 DL 489 672 484 672 DL 494 672 489 672 DL 499 672 494 672 DL 504
-672 499 672 DL EP
-%%Page: 26 23
+315.2 Q .051(Substitution occurs in the order described, that is, parameters f\
+rom the LHS are substi-)157 331.4 R .556(tuted, hostnames are canonicalized, \
+\231subroutines\232 are called, and \214nally)132 343.4 R F0($#)3.056 E F1(,)A
+F0($@)3.056 E F1 3.056(,a)C(nd)467.346 343.4 Q F0($:)3.057 E F1(are)3.057 E
+(processed.)132 355.4 Q F0 2.5(5.1.1.3. Semantics)117 379.4 R(of r)2.5 E
+(ewriting rule sets)-.18 E F1 2.922(There are \214v)157 395.6 R 5.422(er)-.15 G
+-.25(ew)226.976 395.6 S 2.922(riting sets that ha).25 F 3.222 -.15(ve s)-.2 H
+2.922(peci\214c semantics.).15 F 2.921(These are related as)7.921 F
+(depicted by \214gure 2.)132 407.6 Q .4 LW 77 441.2 72 441.2 DL 79 441.2 74
+441.2 DL 84 441.2 79 441.2 DL 89 441.2 84 441.2 DL 94 441.2 89 441.2 DL 99
+441.2 94 441.2 DL 104 441.2 99 441.2 DL 109 441.2 104 441.2 DL 114 441.2 109
+441.2 DL 119 441.2 114 441.2 DL 124 441.2 119 441.2 DL 129 441.2 124 441.2 DL
+134 441.2 129 441.2 DL 139 441.2 134 441.2 DL 144 441.2 139 441.2 DL 149 441.2
+144 441.2 DL 154 441.2 149 441.2 DL 159 441.2 154 441.2 DL 164 441.2 159 441.2
+DL 169 441.2 164 441.2 DL 174 441.2 169 441.2 DL 179 441.2 174 441.2 DL 184
+441.2 179 441.2 DL 189 441.2 184 441.2 DL 194 441.2 189 441.2 DL 199 441.2 194
+441.2 DL 204 441.2 199 441.2 DL 209 441.2 204 441.2 DL 214 441.2 209 441.2 DL
+219 441.2 214 441.2 DL 224 441.2 219 441.2 DL 229 441.2 224 441.2 DL 234 441.2
+229 441.2 DL 239 441.2 234 441.2 DL 244 441.2 239 441.2 DL 249 441.2 244 441.2
+DL 254 441.2 249 441.2 DL 259 441.2 254 441.2 DL 264 441.2 259 441.2 DL 269
+441.2 264 441.2 DL 274 441.2 269 441.2 DL 279 441.2 274 441.2 DL 284 441.2 279
+441.2 DL 289 441.2 284 441.2 DL 294 441.2 289 441.2 DL 299 441.2 294 441.2 DL
+304 441.2 299 441.2 DL 309 441.2 304 441.2 DL 314 441.2 309 441.2 DL 319 441.2
+314 441.2 DL 324 441.2 319 441.2 DL 329 441.2 324 441.2 DL 334 441.2 329 441.2
+DL 339 441.2 334 441.2 DL 344 441.2 339 441.2 DL 349 441.2 344 441.2 DL 354
+441.2 349 441.2 DL 359 441.2 354 441.2 DL 364 441.2 359 441.2 DL 369 441.2 364
+441.2 DL 374 441.2 369 441.2 DL 379 441.2 374 441.2 DL 384 441.2 379 441.2 DL
+389 441.2 384 441.2 DL 394 441.2 389 441.2 DL 399 441.2 394 441.2 DL 404 441.2
+399 441.2 DL 409 441.2 404 441.2 DL 414 441.2 409 441.2 DL 419 441.2 414 441.2
+DL 424 441.2 419 441.2 DL 429 441.2 424 441.2 DL 434 441.2 429 441.2 DL 439
+441.2 434 441.2 DL 444 441.2 439 441.2 DL 449 441.2 444 441.2 DL 454 441.2 449
+441.2 DL 459 441.2 454 441.2 DL 464 441.2 459 441.2 DL 469 441.2 464 441.2 DL
+474 441.2 469 441.2 DL 479 441.2 474 441.2 DL 484 441.2 479 441.2 DL 489 441.2
+484 441.2 DL 494 441.2 489 441.2 DL 499 441.2 494 441.2 DL 504 441.2 499 441.2
+DL(addr)91.915 535.6 Q 133.2 533.6 111.6 533.6 DL 133.2 533.6 126 535.4 DL
+133.2 533.6 126 531.8 DL(3)141.5 535.6 Q 133.2 522.8 133.2 544.4 DL 154.8 522.8
+133.2 522.8 DL 154.8 544.4 154.8 522.8 DL 133.2 544.4 154.8 544.4 DL 176.4
+533.6 154.8 533.6 DL 176.4 533.6 169.2 535.4 DL 176.4 533.6 169.2 531.8 DL(D)
+183.59 535.6 Q 176.4 522.8 176.4 544.4 DL 198 522.8 176.4 522.8 DL 198 544.4
+198 522.8 DL 176.4 544.4 198 544.4 DL 219.6 533.6 198 533.6 DL 277.2 515.6
+255.6 515.6 DL 277.2 515.6 270 517.4 DL 277.2 515.6 270 513.8 DL(1)285.5 517.6
+Q 277.2 504.8 277.2 526.4 DL 298.8 504.8 277.2 504.8 DL 298.8 526.4 298.8 504.8
+DL 277.2 526.4 298.8 526.4 DL 320.4 515.6 298.8 515.6 DL 320.4 515.6 313.2
+517.4 DL 320.4 515.6 313.2 513.8 DL(S)328.42 517.6 Q 320.4 504.8 320.4 526.4 DL
+342 504.8 320.4 504.8 DL 342 526.4 342 504.8 DL 320.4 526.4 342 526.4 DL 363.6
+515.6 342 515.6 DL 277.2 551.6 255.6 551.6 DL 277.2 551.6 270 553.4 DL 277.2
+551.6 270 549.8 DL(2)285.5 553.6 Q 277.2 540.8 277.2 562.4 DL 298.8 540.8 277.2
+540.8 DL 298.8 562.4 298.8 540.8 DL 277.2 562.4 298.8 562.4 DL 320.4 551.6
+298.8 551.6 DL 320.4 551.6 313.2 553.4 DL 320.4 551.6 313.2 549.8 DL(R)327.865
+553.6 Q 320.4 540.8 320.4 562.4 DL 342 540.8 320.4 540.8 DL 342 562.4 342 540.8
+DL 320.4 562.4 342 562.4 DL 363.6 551.6 342 551.6 DL 421.2 533.6 399.6 533.6 DL
+421.2 533.6 414 535.4 DL 421.2 533.6 414 531.8 DL(4)429.5 535.6 Q 421.2 522.8
+421.2 544.4 DL 442.8 522.8 421.2 522.8 DL 442.8 544.4 442.8 522.8 DL 421.2
+544.4 442.8 544.4 DL 464.4 533.6 442.8 533.6 DL 464.4 533.6 457.2 535.4 DL
+464.4 533.6 457.2 531.8 DL(msg)466.865 535.6 Q 255.6 515.6 219.6 533.6 DL 255.6
+551.6 219.6 533.6 DL 399.6 533.6 363.6 515.6 DL 399.6 533.6 363.6 551.6 DL
+208.8 479.6 187.2 479.6 DL 208.8 479.6 201.6 481.4 DL 208.8 479.6 201.6 477.8
+DL(0)217.1 481.6 Q 208.8 468.8 208.8 490.4 DL 230.4 468.8 208.8 468.8 DL 230.4
+490.4 230.4 468.8 DL 208.8 490.4 230.4 490.4 DL 252 479.6 230.4 479.6 DL 252
+479.6 244.8 481.4 DL 252 479.6 244.8 477.8 DL(resolv)265.69 481.6 Q(ed address)
+-.15 E 187.2 479.6 162 533.6 DL(Figure 2 \212 Re)216.045 581.6 Q
+(writing set semantics)-.25 E 2.5(D\212s)209.35 593.6 S(ender domain addition)
+235.46 593.6 Q 2.5(S\212m)209.35 605.6 S(ailer)237.69 605.6 Q
+(-speci\214c sender re)-.2 E(writing)-.25 E 2.5(R\212m)209.35 617.6 S(ailer)
+238.8 617.6 Q(-speci\214c recipient re)-.2 E(writing)-.25 E 77 629.6 72 629.6
+DL 79 629.6 74 629.6 DL 84 629.6 79 629.6 DL 89 629.6 84 629.6 DL 94 629.6 89
+629.6 DL 99 629.6 94 629.6 DL 104 629.6 99 629.6 DL 109 629.6 104 629.6 DL 114
+629.6 109 629.6 DL 119 629.6 114 629.6 DL 124 629.6 119 629.6 DL 129 629.6 124
+629.6 DL 134 629.6 129 629.6 DL 139 629.6 134 629.6 DL 144 629.6 139 629.6 DL
+149 629.6 144 629.6 DL 154 629.6 149 629.6 DL 159 629.6 154 629.6 DL 164 629.6
+159 629.6 DL 169 629.6 164 629.6 DL 174 629.6 169 629.6 DL 179 629.6 174 629.6
+DL 184 629.6 179 629.6 DL 189 629.6 184 629.6 DL 194 629.6 189 629.6 DL 199
+629.6 194 629.6 DL 204 629.6 199 629.6 DL 209 629.6 204 629.6 DL 214 629.6 209
+629.6 DL 219 629.6 214 629.6 DL 224 629.6 219 629.6 DL 229 629.6 224 629.6 DL
+234 629.6 229 629.6 DL 239 629.6 234 629.6 DL 244 629.6 239 629.6 DL 249 629.6
+244 629.6 DL 254 629.6 249 629.6 DL 259 629.6 254 629.6 DL 264 629.6 259 629.6
+DL 269 629.6 264 629.6 DL 274 629.6 269 629.6 DL 279 629.6 274 629.6 DL 284
+629.6 279 629.6 DL 289 629.6 284 629.6 DL 294 629.6 289 629.6 DL 299 629.6 294
+629.6 DL 304 629.6 299 629.6 DL 309 629.6 304 629.6 DL 314 629.6 309 629.6 DL
+319 629.6 314 629.6 DL 324 629.6 319 629.6 DL 329 629.6 324 629.6 DL 334 629.6
+329 629.6 DL 339 629.6 334 629.6 DL 344 629.6 339 629.6 DL 349 629.6 344 629.6
+DL 354 629.6 349 629.6 DL 359 629.6 354 629.6 DL 364 629.6 359 629.6 DL 369
+629.6 364 629.6 DL 374 629.6 369 629.6 DL 379 629.6 374 629.6 DL 384 629.6 379
+629.6 DL 389 629.6 384 629.6 DL 394 629.6 389 629.6 DL 399 629.6 394 629.6 DL
+404 629.6 399 629.6 DL 409 629.6 404 629.6 DL 414 629.6 409 629.6 DL 419 629.6
+414 629.6 DL 424 629.6 419 629.6 DL 429 629.6 424 629.6 DL 434 629.6 429 629.6
+DL 439 629.6 434 629.6 DL 444 629.6 439 629.6 DL 449 629.6 444 629.6 DL 454
+629.6 449 629.6 DL 459 629.6 454 629.6 DL 464 629.6 459 629.6 DL 469 629.6 464
+629.6 DL 474 629.6 469 629.6 DL 479 629.6 474 629.6 DL 484 629.6 479 629.6 DL
+489 629.6 484 629.6 DL 494 629.6 489 629.6 DL 499 629.6 494 629.6 DL 504 629.6
+499 629.6 DL .32 LW 76 663.2 72 663.2 DL 80 663.2 76 663.2 DL 84 663.2 80 663.2
+DL 88 663.2 84 663.2 DL 92 663.2 88 663.2 DL 96 663.2 92 663.2 DL 100 663.2 96
+663.2 DL 104 663.2 100 663.2 DL 108 663.2 104 663.2 DL 112 663.2 108 663.2 DL
+116 663.2 112 663.2 DL 120 663.2 116 663.2 DL 124 663.2 120 663.2 DL 128 663.2
+124 663.2 DL 132 663.2 128 663.2 DL 136 663.2 132 663.2 DL 140 663.2 136 663.2
+DL 144 663.2 140 663.2 DL 148 663.2 144 663.2 DL 152 663.2 148 663.2 DL 156
+663.2 152 663.2 DL 160 663.2 156 663.2 DL 164 663.2 160 663.2 DL 168 663.2 164
+663.2 DL 172 663.2 168 663.2 DL 176 663.2 172 663.2 DL 180 663.2 176 663.2 DL
+184 663.2 180 663.2 DL 188 663.2 184 663.2 DL 192 663.2 188 663.2 DL 196 663.2
+192 663.2 DL 200 663.2 196 663.2 DL 204 663.2 200 663.2 DL 208 663.2 204 663.2
+DL 212 663.2 208 663.2 DL 216 663.2 212 663.2 DL/F4 5/Times-Roman@0 SF(9)93.6
+673.6 Q/F5 8/Times-Roman@0 SF -.88(Yo)3.2 K 2.208(um).88 G .208(ay w)117.428
+676.8 R .208(ant to use it for special \231per user\232 e)-.08 F 2.208
+(xtensions. F)-.12 F .208(or e)-.12 F .208
+(xample, at CMU you can send email to \231jgm+foo\232; the part af-)-.12 F(ter\
+ the plus sign is not part of the user name, and is passed to the local mailer\
+ for local use.)72 686.4 Q EP
+%%Page: 28 23
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-26 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .265
-(Ruleset four is applied to all addresses in the message.)157 96 R .266
-(It is typically used to translate)5.265 F(internal to e)132 108 Q
-(xternal form.)-.15 E F0 2.5(5.1.1.4. IPC)117 132 R(mailers)2.5 E F1 .333
-(Some special processing occurs if the ruleset zero resolv)157 148.2 R .332
-(es to an IPC mailer \(that is, a)-.15 F .241
-(mailer that has \231[IPC]\232 listed as the P)132 160.2 R .241(ath in the)-.15
-F F0(M)2.741 E F1 .241(con\214guration line.)2.741 F .242(The host name passed)
-5.242 F .885(after \231$@\232 has MX e)132 172.2 R .885
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-28 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.091
+(Ruleset three should turn the address into \231canonical form.)157 96 R 6.092
+<9a54>-.7 G 1.092(his form should ha)416.914 96 R -.15(ve)-.2 G
+(the basic syntax:)132 108 Q(local-part@host-domain-spec)172 124.2 Q 1.296
+(If no \231@\232 sign is speci\214ed, then the host-domain-spec)132 140.4 R/F2
+10/Times-Italic@0 SF(may)3.796 E F1 1.295(be appended from the sender)3.796 F
+1.284(address \(if the)132 152.4 R F0(C)3.784 E F1 1.284
+(\215ag is set in the mailer de\214nition corresponding to the)3.784 F F2
+(sending)3.784 E F1(mailer\).)3.784 E(Ruleset three is applied by)132 164.4 Q
+F2(sendmail)2.5 E F1(before doing an)2.5 E(ything with an)-.15 E 2.5(ya)-.15 G
+(ddress.)411.39 164.4 Q .506(Ruleset zero is applied after ruleset three to ad\
+dresses that are going to actually spec-)157 180.6 R .295(ify recipients.)132
+192.6 R .295(It must resolv)5.295 F 2.795(et)-.15 G 2.795(oa)258.035 192.6 S F2
+({mailer).001 E 2.796(,h)-1.11 G .296(ost, user})312.362 192.6 R F1 2.796
+(triple. The)2.796 F F2(mailer)2.796 E F1 .296(must be de\214ned in)2.796 F
+.561(the mailer de\214nitions from the con\214guration \214le.)132 204.6 R(The)
+5.561 E F2(host)3.061 E F1 .56(is de\214ned into the)3.061 F F0($h)3.06 E F1
+.56(macro for)3.06 F(use in the ar)132 216.6 Q(gv e)-.18 E
+(xpansion of the speci\214ed mailer)-.15 E(.)-.55 E 1.356(Rulesets one and tw)
+157 232.8 R 3.856(oa)-.1 G 1.357
+(re applied to all sender and recipient addresses respecti)254.534 232.8 R -.15
+(ve)-.25 G(ly).15 E(.)-.65 E(The)132 244.8 Q 2.5(ya)-.15 G
+(re applied before an)159.34 244.8 Q 2.5(ys)-.15 G
+(peci\214cation in the mailer de\214nition.)250.27 244.8 Q(The)5 E 2.5(ym)-.15
+G(ust ne)429 244.8 Q -.15(ve)-.25 G 2.5(rr).15 G(esolv)470.81 244.8 Q(e.)-.15 E
+.266(Ruleset four is applied to all addresses in the message.)157 261 R .265
+(It is typically used to translate)5.265 F(internal to e)132 273 Q
+(xternal form.)-.15 E F0 2.5(5.1.1.4. IPC)117 297 R(mailers)2.5 E F1 .332
+(Some special processing occurs if the ruleset zero resolv)157 313.2 R .333
+(es to an IPC mailer \(that is, a)-.15 F .242
+(mailer that has \231[IPC]\232 listed as the P)132 325.2 R .241(ath in the)-.15
+F F0(M)2.741 E F1 .241(con\214guration line.)2.741 F .241(The host name passed)
+5.241 F .884(after \231$@\232 has MX e)132 337.2 R .885
 (xpansion performed; this looks the name up in DNS to \214nd alternate)-.15 F
 (xpansion performed; this looks the name up in DNS to \214nd alternate)-.15 F
-(deli)132 184.2 Q -.15(ve)-.25 G(ry sites.).15 E(The host name can also be pro)
-157 200.4 Q(vided as a dotted quad in square brack)-.15 E(ets; for e)-.1 E
-(xample:)-.15 E([128.32.149.78])172 216.6 Q(This causes direct con)132 232.8 Q
+(deli)132 349.2 Q -.15(ve)-.25 G(ry sites.).15 E(The host name can also be pro)
+157 365.4 Q(vided as a dotted quad in square brack)-.15 E(ets; for e)-.1 E
+(xample:)-.15 E([128.32.149.78])172 381.6 Q(This causes direct con)132 397.8 Q
 -.15(ve)-.4 G(rsion of the numeric v).15 E(alue to a TCP/IP host address.)-.25
 E .894(The host name passed in after the \231$@\232 may also be a colon-separa\
 -.15(ve)-.4 G(rsion of the numeric v).15 E(alue to a TCP/IP host address.)-.25
 E .894(The host name passed in after the \231$@\232 may also be a colon-separa\
-ted list of hosts.)157 249 R .63(Each is separately MX e)132 261 R .629
-(xpanded and the results are concatenated to mak)-.15 F 3.129(e\()-.1 G .629
-(essentially\) one)440.881 261 R .378(long MX list.)132 273 R .378
-(The intent here is to create \231f)5.378 F(ak)-.1 E .378
-(e\232 MX records that are not published in DNS)-.1 F(for pri)132 285 Q -.25
+ted list of hosts.)157 414 R .629(Each is separately MX e)132 426 R .629
+(xpanded and the results are concatenated to mak)-.15 F 3.13(e\()-.1 G .63
+(essentially\) one)440.88 426 R .379(long MX list.)132 438 R .378
+(The intent here is to create \231f)5.379 F(ak)-.1 E .378
+(e\232 MX records that are not published in DNS)-.1 F(for pri)132 450 Q -.25
 (va)-.25 G(te internal netw).25 E(orks.)-.1 E .17
 (va)-.25 G(te internal netw).25 E(orks.)-.1 E .17
-(As a \214nal special case, the host name can be passed in as a te)157 301.2 R
-.17(xt string in square brack-)-.15 F(ets:)132 313.2 Q([ucb)172 329.4 Q -.25
-(va)-.15 G(x.berk).25 E(ele)-.1 E -.65(y.)-.15 G(edu]).65 E 1.244(This form a)
-132 345.6 R -.2(vo)-.2 G 1.244(ids the MX mapping.).2 F F0(N.B.:)6.244 E F1
-1.245(This is intended only for situations where you)3.744 F(ha)132 357.6 Q
+(As a \214nal special case, the host name can be passed in as a te)157 466.2 R
+.17(xt string in square brack-)-.15 F(ets:)132 478.2 Q([ucb)172 494.4 Q -.25
+(va)-.15 G(x.berk).25 E(ele)-.1 E -.65(y.)-.15 G(edu]).65 E 1.245(This form a)
+132 510.6 R -.2(vo)-.2 G 1.245(ids the MX mapping.).2 F F0(N.B.:)6.244 E F1
+1.244(This is intended only for situations where you)3.744 F(ha)132 522.6 Q
 .814 -.15(ve a n)-.2 H(etw).15 E .514(ork \214re)-.1 F -.1(wa)-.25 G .514
 (ll, so that your MX record points to a g).1 F(ate)-.05 E -.1(wa)-.25 G 3.014
 .814 -.15(ve a n)-.2 H(etw).15 E .514(ork \214re)-.1 F -.1(wa)-.25 G .514
 (ll, so that your MX record points to a g).1 F(ate)-.05 E -.1(wa)-.25 G 3.014
-(ym).1 G .514(achine; this machine)420.762 357.6 R 1.603
-(could then do direct deli)132 369.6 R -.15(ve)-.25 G 1.604
-(ry to machines within your local domain.).15 F 1.604(Use of this feature)6.604
+(ym).1 G .514(achine; this machine)420.762 522.6 R 1.604
+(could then do direct deli)132 534.6 R -.15(ve)-.25 G 1.604
+(ry to machines within your local domain.).15 F 1.603(Use of this feature)6.603
 F(directly violates RFC 1123 section 5.3.5: it should not be used lightly)132
 F(directly violates RFC 1123 section 5.3.5: it should not be used lightly)132
-381.6 Q(.)-.65 E F0 2.5(5.1.2. D)102 405.6 R 2.5<8a64>2.5 G(e\214ne macr)157.28
-405.6 Q(o)-.18 E F1 .547(Macros are named with a single character)142 421.8 R
-5.546(.T)-.55 G .546(hese may be selected from the entire ASCII)325.498 421.8 R
-.892(set, b)117 433.8 R .892(ut user)-.2 F .892
+546.6 Q(.)-.65 E F0 2.5(5.1.2. D)102 570.6 R 2.5<8a64>2.5 G(e\214ne macr)157.28
+570.6 Q(o)-.18 E F1 .546(Macros are named with a single character)142 586.8 R
+5.546(.T)-.55 G .547(hese may be selected from the entire ASCII)325.492 586.8 R
+.892(set, b)117 598.8 R .892(ut user)-.2 F .892
 (-de\214ned macros should be selected from the set of upper case letters only)
 (-de\214ned macros should be selected from the set of upper case letters only)
--.2 F 5.892(.L)-.65 G -.25(ow)484.26 433.8 S(er).25 E
-(case letters and special symbols are used internally)117 445.8 Q(.)-.65 E
-(The syntax for macro de\214nitions is:)142 462 Q F0(D)157 478.2 Q/F2 10
-/Times-Italic@0 SF 1.666(xv)C(al)-1.666 E F1(where)117 494.4 Q F2(x)2.5 E F1
-(is the name of the macro and)2.5 E F2(val)2.5 E F1(is the v)2.5 E
-(alue it should ha)-.25 E -.15(ve)-.2 G(.).15 E 1.085
-(Macros are interpolated using the construct)142 510.6 R F0($)3.585 E F2(x)A F1
-3.585(,w)C(here)346.775 510.6 Q F2(x)3.585 E F1 1.085
-(is the name of the macro to be)3.585 F 3.45(interpolated. This)117 522.6 R .95
+-.2 F 5.892(.L)-.65 G -.25(ow)484.26 598.8 S(er).25 E
+(case letters and special symbols are used internally)117 610.8 Q(.)-.65 E
+(The syntax for macro de\214nitions is:)142 627 Q F0(D)157 643.2 Q F2 1.666(xv)
+C(al)-1.666 E F1(where)117 659.4 Q F2(x)2.5 E F1(is the name of the macro and)
+2.5 E F2(val)2.5 E F1(is the v)2.5 E(alue it should ha)-.25 E -.15(ve)-.2 G(.)
+.15 E 1.085(Macros are interpolated using the construct)142 675.6 R F0($)3.585
+E F2(x)A F1 3.585(,w)C(here)346.775 675.6 Q F2(x)3.585 E F1 1.085
+(is the name of the macro to be)3.585 F 3.45(interpolated. This)117 687.6 R .95
 (interpolation is done when the con\214guration \214le is read, e)3.45 F .95
 (interpolation is done when the con\214guration \214le is read, e)3.45 F .95
-(xcept in)-.15 F F0(M)3.45 E F1(lines.)3.45 E(The special construct)117 534.6 Q
+(xcept in)-.15 F F0(M)3.45 E F1(lines.)3.45 E(The special construct)117 699.6 Q
 F0($&)2.5 E F2(x)A F1(can be used in)2.5 E F0(R)2.5 E F1
 F0($&)2.5 E F2(x)A F1(can be used in)2.5 E F0(R)2.5 E F1
-(lines to get deferred interpolation.)2.5 E
-(Conditionals can be speci\214ed using the syntax:)142 550.8 Q($?x te)157 567 Q
-(xt1 $| te)-.15 E(xt2 $.)-.15 E .246(This interpolates)117 583.2 R F2(te)2.746
-E(xt1)-.2 E F1 .246(if the macro)2.746 F F0($x)2.745 E F1 .245(is set, and)
-2.745 F F2(te)2.745 E(xt2)-.2 E F1 2.745(otherwise. The)2.745 F .245
-(\231else\232 \()2.745 F F0($|)A F1 2.745(\)c)C .245(lause may be)451.3 583.2 R
-(omitted.)117 595.2 Q(Lo)142 611.4 Q .261(wer case macro names are reserv)-.25
-F .261(ed to ha)-.15 F .562 -.15(ve s)-.2 H .262
-(pecial semantics, used to pass information).15 F 1.163
-(in or out of sendmail, and special characters are reserv)117 623.4 R 1.163
-(ed to pro)-.15 F 1.163(vide conditionals, etc.)-.15 F(Upper)6.162 E
-(case names \(that is,)117 635.4 Q F0($A)2.5 E F1(through)2.5 E F0($Z)2.5 E F1
-2.5(\)a)C(re speci\214cally reserv)267.53 635.4 Q
-(ed for con\214guration \214le authors.)-.15 E(The follo)142 651.6 Q
-(wing macros)-.25 E F2(must)2.5 E F1(be de\214ned to transmit information into)
-2.5 E F2(sendmail:)2.5 E EP
-%%Page: 27 24
+(lines to get deferred interpolation.)2.5 E EP
+%%Page: 29 24
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-27)452.9 60 Q/F1 10/Times-Roman@0 SF 15.56(eT)157 96 S
-(he SMTP entry message)183.11 96 Q 17.22(jT)157 108 S(he \231of)183.11 108 Q
-(\214cial\232 domain name for this site)-.25 E 17.22(lT)157 120 S
-(he format of the UNIX from line)183.11 120 Q 15(nT)157 132 S
-(he name of the daemon \(for error messages\))183.11 132 Q 15(oT)157 144 S
-(he set of "operators" in addresses)183.11 144 Q 15(qd)157 156 S(ef)182 156 Q
-(ault format of sender address)-.1 E(The)117 172.2 Q F0($e)2.656 E F1 .157
-(macro is printed out when SMTP starts up.)2.656 F .157(The \214rst w)5.157 F
-.157(ord must be the)-.1 F F0($j)2.657 E F1 2.657(macro. The)2.657 F F0($j)
-2.657 E F1 .536(macro should be in RFC821 format.)117 184.2 R(The)5.536 E F0
-($l)3.036 E F1(and)3.036 E F0($n)3.036 E F1 .536
-(macros can be considered constants e)3.036 F(xcept)-.15 E .782
-(under terribly unusual circumstances.)117 196.2 R(The)5.783 E F0($o)3.283 E F1
-.783(macro consists of a list of characters which will)3.283 F .498
-(be considered tok)117 208.2 R .498(ens and which will separate tok)-.1 F .498
-(ens when doing parsing.)-.1 F -.15(Fo)5.498 G 2.998(re).15 G .497
-(xample, if \231@\232)441.866 208.2 R .996(were in the)117 220.2 R F0($o)3.496
-E F1 .996(macro, then the input \231a@b\232 w)3.496 F .997
-(ould be scanned as three tok)-.1 F .997(ens: \231a,)-.1 F 3.497<9a99>-.7 G(@,)
-470.613 220.2 Q 3.497<9a61>-.7 G(nd)494 220.2 Q<9962>117 232.2 Q 5.595 -.7
-(.\232 F)-.4 H(inally).7 E 4.195(,t)-.65 G(he)176.14 232.2 Q F0($q)4.195 E F1
-1.695(macro speci\214es ho)4.195 F 4.194(wa)-.25 G 4.194(na)297.954 232.2 S
-1.694(ddress should appear in a message when it is)311.588 232.2 R(def)117
-244.2 Q 2.5(aulted. F)-.1 F(or e)-.15 E
-(xample, on our system these de\214nitions are:)-.15 E
-(De$j Sendmail $v/$Z ready at $b)157 260.4 Q(DnMAILER-D)157 272.4 Q(AEMON)-.4 E
-(DlFrom $g)157 284.4 Q($d)5 E(Do.:%@!^/[])157 296.4 Q(Dq$?x$x <$g>$|$g$.)157
-308.4 Q(Dj$w)157 320.4 Q .067(An acceptable alternati)117 336.6 R .367 -.15
-(ve f)-.25 H .067(or the).15 F F0($q)2.567 E F1 .067
-(macro is \231$g$?x \($x\)$.)2.567 F 2.567(\232. These)-.7 F .068
-(correspond to the follo)2.567 F(wing)-.25 E(tw)117 348.6 Q 2.5(of)-.1 G
-(ormats:)137.73 348.6 Q(Eric Allman <eric@CS.Berk)157 364.8 Q(ele)-.1 E -.65
-(y.)-.15 G(EDU>).65 E(eric@CS.Berk)157 376.8 Q(ele)-.1 E -.65(y.)-.15 G
-(EDU \(Eric Allman\)).65 E/F2 10/Times-Italic@0 SF(Sendmail)117 393 Q F1
-(properly quotes names that ha)2.5 E .3 -.15(ve s)-.2 H
-(pecial characters if the \214rst form is used.).15 E .24
-(Some macros are de\214ned by)142 409.2 R F2(sendmail)2.739 E F1 .239
-(for interpolation into ar)2.739 F(gv')-.18 E 2.739(sf)-.55 G .239
-(or mailers or for other)414.734 409.2 R(conte)117 421.2 Q 2.5(xts. These)-.15
-F(macros are:)2.5 E 15.56(aT)157 437.4 S(he origination date in RFC 822 format)
-183.11 437.4 Q 15(bT)157 449.4 S(he current date in RFC 822 format)183.11 449.4
-Q 15.56(cT)157 461.4 S(he hop count)183.11 461.4 Q 15(dT)157 473.4 S
-(he date in UNIX \(ctime\) format)183.11 473.4 Q 16.67(fT)157 485.4 S
-(he sender \(from\) address)183.11 485.4 Q 15(gT)157 497.4 S
-(he sender address relati)183.11 497.4 Q .3 -.15(ve t)-.25 H 2.5(ot).15 G
-(he recipient)301.29 497.4 Q 15(hT)157 509.4 S(he recipient host)183.11 509.4 Q
-17.22(iT)157 521.4 S(he queue id)183.11 521.4 Q 15(kT)157 533.4 S
-(he UUCP node name \(from the uname system call\))183.11 533.4 Q 12.22(mT)157
-545.4 S(he domain part of the)183.11 545.4 Q F2 -.1(ge)2.5 G(thostname).1 E F1
-(return v)2.5 E(alue)-.25 E 15(pS)157 557.4 S(endmail')182.56 557.4 Q 2.5(sp)
--.55 G(id)228.95 557.4 Q 16.67(rP)157 569.4 S(rotocol used to recei)182.56
-569.4 Q .3 -.15(ve t)-.25 H(he message).15 E 16.11(sS)157 581.4 S(ender')182.56
-581.4 Q 2.5(sh)-.55 G(ost name)218.94 581.4 Q 17.22(tA)157 593.4 S
-(numeric representation of the current time)186.72 593.4 Q 15(uT)157 605.4 S
-(he recipient user)183.11 605.4 Q 15(vT)157 617.4 S(he v)183.11 617.4 Q
-(ersion number of sendmail)-.15 E 12.78(wT)157 629.4 S
-(he hostname of this site)183.11 629.4 Q 15(xT)157 641.4 S
-(he full name of the sender)183.11 641.4 Q 15.56(zT)157 653.4 S
-(he home directory of the recipient)183.11 653.4 Q 15(_T)157 665.4 S(he v)
-183.11 665.4 Q(alidated sender address)-.25 E .918
-(There are three types of dates that can be used.)142 685.8 R(The)5.918 E F0
-($a)3.418 E F1(and)3.418 E F0($b)3.418 E F1 .918(macros are in RFC 822)3.418 F
-(format;)117 697.8 Q F0($a)3.047 E F1 .547(is the time as e)3.047 F .547
-(xtracted from the \231Date:\232 line of the message \(if there w)-.15 F .546
-(as one\), and)-.1 F F0($b)117 709.8 Q F1 .145
-(is the current date and time \(used for postmarks\).)2.645 F .145
-(If no \231Date:\232 line is found in the incoming)5.145 F(message,)117 721.8 Q
-F0($a)2.547 E F1 .047(is set to the current time also.)2.547 F(The)5.046 E F0
-($d)2.546 E F1 .046(macro is equi)2.546 F -.25(va)-.25 G .046(lent to the).25 F
-F0($b)2.546 E F1 .046(macro in UNIX)2.546 F EP
-%%Page: 28 25
+(SMM:08-29)452.9 60 Q/F1 10/Times-Roman@0 SF
+(Conditionals can be speci\214ed using the syntax:)142 96 Q($?x te)157 112.2 Q
+(xt1 $| te)-.15 E(xt2 $.)-.15 E .245(This interpolates)117 128.4 R/F2 10
+/Times-Italic@0 SF(te)2.745 E(xt1)-.2 E F1 .245(if the macro)2.745 F F0($x)
+2.745 E F1 .245(is set, and)2.745 F F2(te)2.745 E(xt2)-.2 E F1 2.745
+(otherwise. The)2.745 F .246(\231else\232 \()2.746 F F0($|)A F1 2.746(\)c)C
+.246(lause may be)451.298 128.4 R(omitted.)117 140.4 Q(Lo)142 156.6 Q .262
+(wer case macro names are reserv)-.25 F .262(ed to ha)-.15 F .561 -.15(ve s)-.2
+H .261(pecial semantics, used to pass information).15 F 1.162(in or out of)117
+168.6 R F2(sendmail)3.663 E F1 3.663(,a)C 1.163
+(nd special characters are reserv)215.583 168.6 R 1.163(ed to pro)-.15 F 1.163
+(vide conditionals, etc.)-.15 F(Upper)6.163 E(case names \(that is,)117 180.6 Q
+F0($A)2.5 E F1(through)2.5 E F0($Z)2.5 E F1 2.5(\)a)C(re speci\214cally reserv)
+267.53 180.6 Q(ed for con\214guration \214le authors.)-.15 E .053(The follo)142
+196.8 R .053(wing macros are de\214ned and/or used internally by)-.25 F F2
+(sendmail)2.552 E F1 .052(for interpolation into)2.552 F(ar)117 208.8 Q(gv')
+-.18 E 5.178(sf)-.55 G 2.678(or mailers or for other conte)149.768 208.8 R
+5.179(xts. The)-.15 F 2.679(ones mark)5.179 F 2.679
+(ed \207 are information passed into)-.1 F(sendmail)117 222.8 Q/F3 7
+/Times-Roman@0 SF(10)153.11 218.8 Q F1 4.232(,t)160.11 222.8 S 1.732
+(he ones mark)169.622 222.8 R 1.732
+(ed \210 are information passed both in and out of sendmail, and the)-.1 F
+(unmark)117 234.8 Q 2.177(ed macros are passed out of sendmail b)-.1 F 2.177
+(ut are not otherwise used internally)-.2 F 7.177(.T)-.65 G(hese)486.23 234.8 Q
+(macros are:)117 246.8 Q($a)117 263 Q F0(The origination date in RFC 822 f)142
+263 Q(ormat.)-.25 E F1($b)117 279.2 Q F0(The curr)142 279.2 Q
+(ent date in RFC 822 f)-.18 E(ormat.)-.25 E F1($c)117 295.4 Q F0
+(The hop count.)142 295.4 Q F1($d)117 311.6 Q F0(The curr)142 311.6 Q
+(ent date in UNIX \(ctime\) f)-.18 E(ormat.)-.25 E F1($e\207)117 327.8 Q F0
+1.342(The SMTP entry message.)142 327.8 R F1 1.341
+(This is printed out when SMTP starts up.)6.342 F 1.341(The \214rst w)6.341 F
+(ord)-.1 E .428(must be the)142 339.8 R F0($j)2.928 E F1 .429
+(macro as speci\214ed by RFC821.)2.928 F(Def)5.429 E .429
+(aults to \231$j Sendmail $v ready at $b\232.)-.1 F 2.313
+(Commonly rede\214ned to include the con\214guration v)142 351.8 R 2.313
+(ersion number)-.15 F 4.813(,e)-.4 G 2.313(.g., \231$j Sendmail)431.874 351.8 R
+($v/$Z ready at $b\232)142 363.8 Q($f)117 380 Q F0(The sender \(fr)142 380 Q
+(om\) addr)-.18 E(ess.)-.18 E F1($g)117 396.2 Q F0(The sender addr)142 396.2 Q
+(ess r)-.18 E(elati)-.18 E .2 -.1(ve t)-.1 H 2.5(ot).1 G(he r)275.59 396.2 Q
+(ecipient.)-.18 E F1($h)117 412.4 Q F0(The r)142 412.4 Q(ecipient host.)-.18 E
+F1($i)117 428.6 Q F0(The queue id.)142 428.6 Q F1($j\210)117 444.8 Q F0 .557
+(The \231of\214cial\232 domain name f)142 444.8 R .557(or this site.)-.25 F F1
+.557(This is fully quali\214ed if the full quali\214cation)5.557 F .137
+(can be found.)142 456.8 R(It)5.137 E F2(must)2.637 E F1 .136
+(be rede\214ned to be the fully quali\214ed domain name if your system is)2.637
+F(not con\214gured so that information can \214nd it automatically)142 468.8 Q
+(.)-.65 E($k)117 485 Q F0(The UUCP node name \(fr)142 485 Q
+(om the uname system call\).)-.18 E F1($l\207)117 501.2 Q F0 .972(The f)142
+501.2 R .972(ormat of the UNIX fr)-.25 F .972(om line.)-.18 F F1 .972
+(Unless you ha)5.972 F 1.272 -.15(ve c)-.2 H .972(hanged the UNIX mailbox for)
+.15 F(-)-.2 E(mat, you should not change the def)142 513.2 Q
+(ault, which is \231From $g)-.1 E($d\232.)5 E($m)117 529.4 Q F0 .84
+(The domain part of the)142 529.4 R F2 -.1(ge)3.339 G(thostname).1 E F0 -.18
+(re)3.339 G(tur).18 E 3.339(nv)-.15 G(alue.)337.055 529.4 Q F1 .839
+(Under normal circumstances,)5.839 F F0($j)3.339 E F1(is)3.339 E(equi)142 541.4
+Q -.25(va)-.25 G(lent to).25 E F0($w)2.5 E(.$m)-.7 E F1(.)A($n\207)117 557.6 Q
+F0(The name of the daemon \(f)142 557.6 Q(or err)-.25 E(or messages\).)-.18 E
+F1(Def)5 E(aults to \231MAILER-D)-.1 E(AEMON\232.)-.4 E($o\207)117 573.8 Q F0
+.335(The set of)142 573.8 R F1 .335
+(operators" A list of characters which will be considered tok)2.835 F .336
+(ens and which will)-.1 F .422(separate tok)142 585.8 R .422
+(ens when doing parsing.)-.1 F -.15(Fo)5.422 G 2.921(re).15 G .421
+(xample, if \231@\232 were in the)315.211 585.8 R F0($o)2.921 E F1 .421
+(macro, then the)2.921 F .995(input \231a@b\232 w)142 597.8 R .995
+(ould be scanned as three tok)-.1 F .995(ens: \231a,)-.1 F 3.495<9a99>-.7 G(@,)
+364.765 597.8 Q 3.495<9a61>-.7 G .995(nd \231b)388.15 597.8 R 4.895 -.7
+(.\232 D)-.4 H(ef).7 E .995(aults to \231.:@[]\232,)-.1 F .926(which is the mi\
+nimum set necessary to do RFC 822 parsing; a richer set of operators is)142
+609.8 R(\231.:%@!/[]\232, which adds support for UUCP)142 621.8 Q 2.5(,t)-1.11
+G(he %-hack, and X.400 addresses.)319.24 621.8 Q($p)117 638 Q F0(Sendmail')142
+638 Q 2.5(sp)-.37 G -.18(ro)196.92 638 S(cess id.).18 E F1($q\207)117 654.2 Q
+F0 2.357(Default f)142 654.2 R 2.357(ormat of sender addr)-.25 F(ess.)-.18 E F1
+(The)7.357 E F0($q)4.857 E F1 2.358(macro speci\214es ho)4.858 F 4.858(wa)-.25
+G 4.858(na)432.624 654.2 S 2.358(ddress should)446.922 654.2 R .626
+(appear in a message when it is def)142 666.2 R 3.126(aulted. Def)-.1 F .626
+(aults to \231<$g>\232.)-.1 F .625(It is commonly rede\214ned)5.625 F .182
+(to be \231$?x$x <$g>$|$g$.)142 678.2 R 5.182<9a6f>-.7 G 2.682<7299>255.848
+678.2 S .182($g$?x \($x\)$.)266.3 678.2 R .183
+(\232, corresponding to the follo)-.7 F .183(wing tw)-.25 F 2.683(of)-.1 G
+(ormats:)474 678.2 Q .32 LW 76 687.8 72 687.8 DL 80 687.8 76 687.8 DL 84 687.8
+80 687.8 DL 88 687.8 84 687.8 DL 92 687.8 88 687.8 DL 96 687.8 92 687.8 DL 100
+687.8 96 687.8 DL 104 687.8 100 687.8 DL 108 687.8 104 687.8 DL 112 687.8 108
+687.8 DL 116 687.8 112 687.8 DL 120 687.8 116 687.8 DL 124 687.8 120 687.8 DL
+128 687.8 124 687.8 DL 132 687.8 128 687.8 DL 136 687.8 132 687.8 DL 140 687.8
+136 687.8 DL 144 687.8 140 687.8 DL 148 687.8 144 687.8 DL 152 687.8 148 687.8
+DL 156 687.8 152 687.8 DL 160 687.8 156 687.8 DL 164 687.8 160 687.8 DL 168
+687.8 164 687.8 DL 172 687.8 168 687.8 DL 176 687.8 172 687.8 DL 180 687.8 176
+687.8 DL 184 687.8 180 687.8 DL 188 687.8 184 687.8 DL 192 687.8 188 687.8 DL
+196 687.8 192 687.8 DL 200 687.8 196 687.8 DL 204 687.8 200 687.8 DL 208 687.8
+204 687.8 DL 212 687.8 208 687.8 DL 216 687.8 212 687.8 DL/F4 5/Times-Roman@0
+SF(10)93.6 698.2 Q/F5 8/Times-Roman@0 SF(As of v)3.2 I
+(ersion 8.6, all of these macros ha)-.12 E .24 -.12(ve r)-.16 H(easonable def)
+.12 E 2(aults. Pre)-.08 F(vious v)-.2 E(ersions required that the)-.12 E 2(yb)
+-.12 G 2(ed)424.728 701.4 S(e\214ned.)434.28 701.4 Q EP
+%%Page: 30 25
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-28 Sendmail)72 60 R
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-30 Sendmail)72 60 R
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF
-(\(ctime\) format.)117 96 Q(The)142 112.2 Q F0($f)3.114 E F1 .614(macro is the\
- id of the sender as originally determined; when mailing to a speci\214c)3.114
-F .602(host the)117 124.2 R F0($g)3.102 E F1 .602
-(macro is set to the address of the sender)3.102 F/F2 10/Times-Italic@0 SF -.37
-(re)3.101 G .601(lative to the r).37 F(ecipient.)-.37 E F1 -.15(Fo)5.601 G
-3.101(re).15 G .601(xample, if I)456.418 124.2 R 1.65
-(send to \231bollard@matisse.CS.Berk)117 136.2 R(ele)-.1 E -.65(y.)-.15 G 1.65
-(EDU\232 from the machine \231v).65 F(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)
--.15 G(EDU\232).65 E(the)117 148.2 Q F0($f)2.5 E F1
-(macro will be \231eric\232 and the)2.5 E F0($g)2.5 E F1
+(Eric Allman <eric@CS.Berk)182 96 Q(ele)-.1 E -.65(y.)-.15 G(EDU>).65 E
+(eric@CS.Berk)182 108 Q(ele)-.1 E -.65(y.)-.15 G(EDU \(Eric Allman\)).65 E/F2
+10/Times-Italic@0 SF(Sendmail)142 124.2 Q F1(properly quotes names that ha)2.5
+E .3 -.15(ve s)-.2 H(pecial characters if the \214rst form is used.).15 E($r)
+117 140.4 Q F0(Pr)142 140.4 Q(otocol used to r)-.18 E(ecei)-.18 E .2 -.1(ve t)
+-.1 H(he message.).1 E F1($s)117 156.6 Q F0(Sender')142 156.6 Q 2.5(sh)-.37 G
+(ost name.)186.91 156.6 Q F1($t)117 172.8 Q F0 2.5(An)142 172.8 S(umeric r)
+157.28 172.8 Q(epr)-.18 E(esentation of the curr)-.18 E(ent time.)-.18 E F1($u)
+117 189 Q F0(The r)142 189 Q(ecipient user)-.18 E(.)-1 E F1($v)117 205.2 Q F0
+(The v)142 205.2 Q(ersion number of)-.1 E F2(sendmail)2.5 E F0(.)A F1($w\210)
+117 221.4 Q F0(The hostname of this site.)7.78 E F1(The)142 237.6 Q F0($w)2.5 E
+F1(macro is set to the root name of this host \(b)2.5 E(ut see belo)-.2 E 2.5
+(wf)-.25 G(or ca)403.46 237.6 Q -.15(ve)-.2 G(ats\).).15 E($x)117 253.8 Q F0
+(The full name of the sender)142 253.8 Q(.)-1 E F1($z)117 270 Q F0
+(The home dir)142 270 Q(ectory of the r)-.18 E(ecipient.)-.18 E F1($_)117 286.2
+Q F0(The v)142 286.2 Q(alidated sender addr)-.1 E(ess.)-.18 E F1 .918
+(There are three types of dates that can be used.)142 302.4 R(The)5.918 E F0
+($a)3.418 E F1(and)3.418 E F0($b)3.418 E F1 .917(macros are in RFC 822)3.418 F
+(format;)117 314.4 Q F0($a)3.046 E F1 .546(is the time as e)3.046 F .547
+(xtracted from the \231Date:\232 line of the message \(if there w)-.15 F .547
+(as one\), and)-.1 F F0($b)117 326.4 Q F1 .145
+(is the current date and time \(used for postmarks\).)2.645 F .145
+(If no \231Date:\232 line is found in the incoming)5.145 F(message,)117 338.4 Q
+F0($a)2.546 E F1 .046(is set to the current time also.)2.546 F(The)5.046 E F0
+($d)2.546 E F1 .046(macro is equi)2.546 F -.25(va)-.25 G .047(lent to the).25 F
+F0($b)2.547 E F1 .047(macro in UNIX)2.547 F(\(ctime\) format.)117 350.4 Q .607
+(The macros)142 366.6 R F0($w)3.107 E F1(,)A F0($j)3.107 E F1 3.107(,a)C(nd)
+228.848 366.6 Q F0($m)3.107 E F1 .607(are set to the identity of this host.)
+3.107 F F2(Sendmail)5.606 E F1 .606(tries to \214nd the)3.106 F .025(fully qua\
+li\214ed name of the host if at all possible; it does this by calling)117 378.6
+R F2 -.1(ge)2.525 G(thostname).1 E F1 .025(\(2\) to get the)B 1.512
+(current hostname and then passing that to)117 390.6 R F2 -.1(ge)4.012 G
+(thostbyname).1 E F1 1.511(\(3\) which is supposed to return the)B .184
+(canonical v)117 404.6 R .184(ersion of that host name.)-.15 F/F3 7
+/Times-Roman@0 SF(11)262.19 400.6 Q F1 .184(Assuming this is successful,)
+271.874 404.6 R F0($j)2.684 E F1 .185(is set to the fully quali\214ed)2.685 F
+1.464(name and)117 416.6 R F0($m)3.964 E F1 1.464
+(is set to the domain part of the name \(e)3.964 F -.15(ve)-.25 G 1.464
+(rything after the \214rst dot\).).15 F(The)6.463 E F0($w)3.963 E F1 .166
+(macro is set to the \214rst w)117 428.6 R .166(ord \(e)-.1 F -.15(ve)-.25 G
+.166(rything before the \214rst dot\) if you ha).15 F .466 -.15(ve a l)-.2 H
+-2.15 -.25(ev e).15 H 2.666(l5o).25 G 2.666(rh)452.018 428.6 S .166(igher con-)
+463.014 428.6 R .184(\214guration \214le; otherwise, it is set to the same v)
+117 440.6 R .183(alue as)-.25 F F0($j)2.683 E F1 5.183(.I)C 2.683(ft)355.325
+440.6 S .183(he canoni\214cation is not successful,)364.118 440.6 R
+(it is imperati)117 454.6 Q .3 -.15(ve t)-.25 H(hat the con\214g \214le set).15
+E F0($j)2.5 E F1(to the fully quali\214ed domain name)2.5 E F3(12)416.59 450.6
+Q F1(.)423.59 454.6 Q(The)142 470.8 Q F0($f)3.114 E F1 .614(macro is the id of\
+ the sender as originally determined; when mailing to a speci\214c)3.114 F .602
+(host the)117 482.8 R F0($g)3.102 E F1 .602
+(macro is set to the address of the sender)3.102 F F2 -.37(re)3.101 G .601
+(lative to the r).37 F(ecipient.)-.37 E F1 -.15(Fo)5.601 G 3.101(re).15 G .601
+(xample, if I)456.418 482.8 R 1.65(send to \231bollard@matisse.CS.Berk)117
+494.8 R(ele)-.1 E -.65(y.)-.15 G 1.65(EDU\232 from the machine \231v).65 F
+(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU\232).65 E(the)117 506.8 Q
+F0($f)2.5 E F1(macro will be \231eric\232 and the)2.5 E F0($g)2.5 E F1
 (macro will be \231eric@v)2.5 E(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G
 (macro will be \231eric@v)2.5 E(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G
-(EDU.).65 E<9a>-.7 E(The)142 164.4 Q F0($x)3.838 E F1 1.338
+(EDU.).65 E<9a>-.7 E(The)142 523 Q F0($x)3.838 E F1 1.338
 (macro is set to the full name of the sender)3.838 F 6.337(.T)-.55 G 1.337
 (macro is set to the full name of the sender)3.838 F 6.337(.T)-.55 G 1.337
-(his can be determined in se)369.135 164.4 R -.15(ve)-.25 G(ral).15 E -.1(wa)
-117 176.4 S 2.952(ys. It).1 F .453(can be passed as \215ag to)2.953 F F2
-(sendmail.)2.953 E F1 .453(The second choice is the v)5.453 F .453
-(alue of the \231Full-name:\232)-.25 F .513(line in the header if it e)117
-188.4 R .512
+(his can be determined in se)369.135 523 R -.15(ve)-.25 G(ral).15 E -.1(wa)117
+535 S 2.952(ys. It).1 F .453(can be passed as \215ag to)2.953 F F2(sendmail)
+2.953 E F1 5.453(.T)C .453(he second choice is the v)303.446 535 R .453
+(alue of the \231Full-name:\232)-.25 F .513(line in the header if it e)117 547
+R .512
 (xists, and the third choice is the comment \214eld of a \231From:\232 line.)
 (xists, and the third choice is the comment \214eld of a \231From:\232 line.)
--.15 F .512(If all)5.512 F 1.148(of these f)117 200.4 R 1.148
+-.15 F .512(If all)5.512 F 1.148(of these f)117 559 R 1.148
 (ail, and if the message is being originated locally)-.1 F 3.648(,t)-.65 G
 (ail, and if the message is being originated locally)-.1 F 3.648(,t)-.65 G
-1.149(he full name is look)369.678 200.4 R 1.149(ed up in the)-.1 F F2
-(/etc/passwd)117 212.4 Q F1(\214le.)2.5 E .439(When sending, the)142 228.6 R F0
-($h)2.939 E F1(,)A F0($u)2.939 E F1 2.938(,a)C(nd)256.964 228.6 Q F0($z)2.938 E
+1.149(he full name is look)369.678 559 R 1.149(ed up in the)-.1 F F2
+(/etc/passwd)117 571 Q F1(\214le.)2.5 E .439(When sending, the)142 587.2 R F0
+($h)2.939 E F1(,)A F0($u)2.939 E F1 2.938(,a)C(nd)256.964 587.2 Q F0($z)2.938 E
 F1 .438(macros get set to the host, user)2.938 F 2.938(,a)-.4 G .438
 F1 .438(macros get set to the host, user)2.938 F 2.938(,a)-.4 G .438
-(nd home directory \(if)417.426 228.6 R 1.454(local\) of the recipient.)117
-240.6 R 1.454(The \214rst tw)6.454 F 3.954(oa)-.1 G 1.454(re set from the)
-278.438 240.6 R F0($@)3.955 E F1(and)3.955 E F0($:)3.955 E F1 1.455
-(part of the re)3.955 F 1.455(writing rules,)-.25 F(respecti)117 252.6 Q -.15
-(ve)-.25 G(ly).15 E(.)-.65 E(The)142 268.8 Q F0($p)2.806 E F1(and)2.806 E F0
+(nd home directory \(if)417.426 587.2 R 1.454(local\) of the recipient.)117
+599.2 R 1.454(The \214rst tw)6.454 F 3.954(oa)-.1 G 1.454(re set from the)
+278.438 599.2 R F0($@)3.955 E F1(and)3.955 E F0($:)3.955 E F1 1.455
+(part of the re)3.955 F 1.455(writing rules,)-.25 F(respecti)117 611.2 Q -.15
+(ve)-.25 G(ly).15 E(.)-.65 E(The)142 627.4 Q F0($p)2.806 E F1(and)2.806 E F0
 ($t)2.806 E F1 .306(macros are used to create unique strings \(e.g., for the \
 ($t)2.806 E F1 .306(macros are used to create unique strings \(e.g., for the \
-\231Message-Id:\232 \214eld\).)2.806 F(The)117 280.8 Q F0($i)2.537 E F1 .037(m\
+\231Message-Id:\232 \214eld\).)2.806 F(The)117 639.4 Q F0($i)2.537 E F1 .037(m\
 acro is set to the queue id on this host; if put into the timestamp line it ca\
 acro is set to the queue id on this host; if put into the timestamp line it ca\
-n be e)2.537 F(xtremely)-.15 E .407(useful for tracking messages.)117 292.8 R
+n be e)2.537 F(xtremely)-.15 E .407(useful for tracking messages.)117 651.4 R
 (The)5.407 E F0($v)2.907 E F1 .407(macro is set to be the v)2.907 F .407
 (ersion number of)-.15 F F2(sendmail)2.907 E F1 2.907(;t)C .407(his is)482.753
 (The)5.407 E F0($v)2.907 E F1 .407(macro is set to be the v)2.907 F .407
 (ersion number of)-.15 F F2(sendmail)2.907 E F1 2.907(;t)C .407(his is)482.753
-292.8 R 2.109(normally put in timestamps and has been pro)117 304.8 R -.15(ve)
--.15 G 4.609(ne).15 G 2.109(xtremely useful for deb)334.512 304.8 R 4.61
-(ugging. The)-.2 F F0($w)4.61 E F1 1.222
-(macro is set to the name of this host if it can be determined.)117 316.8 R
-(The)6.221 E F0($c)3.721 E F1 1.221(\214eld is set to the \231hop)3.721 F
-(count,)117 328.8 Q 3.332<9a69>-.7 G .833
-(.e., the number of times this message has been processed.)151.572 328.8 R .833
-(This can be determined by)5.833 F(the)117 340.8 Q F0<ad68>2.5 E F1
-(\215ag on the command line or by counting the timestamps in the message.)2.5 E
-(The)142 357 Q F0($r)3.427 E F1(and)3.427 E F0($s)3.427 E F1 .926
-(\214elds are set to the protocol used to communicate with sendmail and the)
-3.427 F .968(sending hostname.)117 369 R(The)5.968 E F0($_)3.468 E F1 .969
-(is set to a v)3.469 F .969(alidated sender host name.)-.25 F .969
-(If the sender is running an)5.969 F(RFC 1413 compliant IDENT serv)117 381 Q
-(er)-.15 E 2.5(,i)-.4 G 2.5(tw)267.55 381 S
-(ill include the user name on that host.)280.05 381 Q F0 2.5(5.1.3. C)102 405 R
-(and F \212 de\214ne classes)2.5 E F1 .197
-(Classes of phrases may be de\214ned to match on the left hand side of re)142
-421.2 R .196(writing rules, where)-.25 F 2.79<6199>117 433.2 S .291
-(phrase\232 is a sequence of characters that do not contain space characters.)
-128.67 433.2 R -.15(Fo)5.291 G 2.791(re).15 G .291(xample a class)445.098 433.2
-R .356(of all local names for this site might be created so that attempts to s\
-end to oneself can be elimi-)117 445.2 R 2.89(nated. These)117 457.2 R .39(can\
- either be de\214ned directly in the con\214guration \214le or read in from an\
-other \214le.)2.89 F .797(Classes may be gi)117 469.2 R -.15(ve)-.25 G 3.297
-(nn).15 G .796(ames from the set of upper case letters.)213.668 469.2 R(Lo)
-5.796 E .796(wer case letters and special)-.25 F(characters are reserv)117
-481.2 Q(ed for system use.)-.15 E(The syntax is:)142 497.4 Q F0(C)157 513.6 Q
-F2 1.666(cp)C(hr)-1.666 E(ase1 phr)-.15 E(ase2...)-.15 E F0(F)157 525.6 Q F2
-1.666<638c>C(le)-1.666 E F1 1.114(The \214rst form de\214nes the class)117
-541.8 R F2(c)3.614 E F1 1.114(to match an)3.614 F 3.614(yo)-.15 G 3.615(ft)
-319.63 541.8 S 1.115(he named w)329.355 541.8 R 3.615(ords. It)-.1 F 1.115
-(is permissible to split)3.615 F(them among multiple lines; for e)117 553.8 Q
-(xample, the tw)-.15 E 2.5(of)-.1 G(orms:)317.57 553.8 Q(CHmonet ucbmonet)157
-570 Q(and)117 586.2 Q(CHmonet)157 602.4 Q(CHucbmonet)157 614.4 Q(are equi)117
-630.6 Q -.25(va)-.25 G 2.5(lent. The).25 F
-(second form reads the elements of the class)2.5 E F2(c)2.5 E F1
-(from the named)2.5 E F2(\214le)2.5 E F1(.)A(The)142 646.8 Q F0($~)3.113 E F1
-.613(\(match entries not in class\) only matches a single w)3.113 F .612
-(ord; multi-w)-.1 F .612(ord entries in the)-.1 F
-(class are ignored in this conte)117 658.8 Q(xt.)-.15 E .383(The class)142 675
-R F0($=w)2.883 E F1 .384(is set to be the set of all names this host is kno)
-2.883 F .384(wn by)-.25 F 5.384(.T)-.65 G .384(his can be used to)431.364 675 R
-(match local hostnames.)117 687 Q(The class)142 703.2 Q F0($=k)2.5 E F1
-(is set to be the same as)2.5 E F0($k)2.5 E F1 2.5(,t)C
-(hat is, the UUCP node name.)312.69 703.2 Q EP
-%%Page: 29 26
+651.4 R(normally put in timestamps and has been pro)117 663.4 Q -.15(ve)-.15 G
+2.5(ne).15 G(xtremely useful for deb)317.64 663.4 Q(ugging.)-.2 E .32 LW 76 673
+72 673 DL 80 673 76 673 DL 84 673 80 673 DL 88 673 84 673 DL 92 673 88 673 DL
+96 673 92 673 DL 100 673 96 673 DL 104 673 100 673 DL 108 673 104 673 DL 112
+673 108 673 DL 116 673 112 673 DL 120 673 116 673 DL 124 673 120 673 DL 128 673
+124 673 DL 132 673 128 673 DL 136 673 132 673 DL 140 673 136 673 DL 144 673 140
+673 DL 148 673 144 673 DL 152 673 148 673 DL 156 673 152 673 DL 160 673 156 673
+DL 164 673 160 673 DL 168 673 164 673 DL 172 673 168 673 DL 176 673 172 673 DL
+180 673 176 673 DL 184 673 180 673 DL 188 673 184 673 DL 192 673 188 673 DL 196
+673 192 673 DL 200 673 196 673 DL 204 673 200 673 DL 208 673 204 673 DL 212 673
+208 673 DL 216 673 212 673 DL/F4 5/Times-Roman@0 SF(11)93.6 683.4 Q/F5 8
+/Times-Roman@0 SF -.12(Fo)3.2 K 2(re).12 G(xample, on some systems)115.024
+686.6 Q/F6 8/Times-Italic@0 SF -.08(ge)2 G(thostname).08 E F5
+(might return \231foo\232 which w)2 E(ould be mapped to \231foo.bar)-.08 E
+(.com\232 by)-.44 E F6 -.08(ge)2 G(thostbyname).08 E F5(.)A F4(12)93.6 697 Q F5
+(Older v)3.2 I(ersions of sendmail didn')-.12 E 2(tp)-.144 G(re-de\214ne)211.88
+700.2 Q/F7 8/Times-Bold@0 SF($j)2 E F5
+(at all, so up until 8.6, con\214g \214les)2 E F6(always)2 E F5
+(had to de\214ne)2 E F7($j)2 E F5(.)A EP
+%%Page: 31 26
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-29)452.9 60 Q 2.5(5.1.4. M)102 96 R 2.5<8a64>2.5 G(e\214ne mailer)159.5
-96 Q/F1 10/Times-Roman@0 SF(Programs and interf)142 112.2 Q
-(aces to mailers are de\214ned in this line.)-.1 E(The format is:)5 E F0(M)157
-128.4 Q/F2 10/Times-Italic@0 SF(name)A F1 2.5(,{)C F2(\214eld)197.9 128.4 Q F1
-(=)A F2(value)A F1(}*)1.666 E(where)117 144.6 Q F2(name)3.244 E F1 .744(is the\
- name of the mailer \(used internally only\) and the \231\214eld=name\232 pair\
-s de\214ne)3.244 F(attrib)117 156.6 Q(utes of the mailer)-.2 E 5(.F)-.55 G
-(ields are:)220.13 156.6 Q -.15(Pa)157 172.8 S 51.87(th The).15 F
-(pathname of the mailer)2.5 E 47.83(Flags Special)157 184.8 R
-(\215ags for this mailer)2.5 E 41.73(Sender A)157 196.8 R(re)2.5 E
-(writing set for sender addresses)-.25 E 31.17(Recipient A)157 208.8 R(re)2.5 E
-(writing set for recipient addresses)-.25 E(Ar)157 220.8 Q 49.13(gv An)-.18 F
+(SMM:08-31)452.9 60 Q/F1 10/Times-Roman@0 SF(The)142 96 Q F0($c)2.714 E F1 .214
+(\214eld is set to the \231hop count,)2.714 F 2.714<9a69>-.7 G .215
+(.e., the number of times this message has been pro-)297.656 96 R 3.184
+(cessed. This)117 108 R .684(can be determined by the)3.184 F F0<ad68>3.184 E
+F1 .683(\215ag on the command line or by counting the times-)3.184 F
+(tamps in the message.)117 120 Q(The)142 136.2 Q F0($r)3.426 E F1(and)3.426 E
+F0($s)3.426 E F1 .926
+(\214elds are set to the protocol used to communicate with)3.426 F/F2 10
+/Times-Italic@0 SF(sendmail)3.427 E F1 .927(and the)3.427 F(sending hostname.)
+117 148.2 Q(The)142 164.4 Q F0($_)2.72 E F1 .22(is set to a v)2.72 F .22
+(alidated sender host name.)-.25 F .22
+(If the sender is running an RFC 1413 com-)5.22 F(pliant IDENT serv)117 176.4 Q
+(er)-.15 E 2.5(,i)-.4 G 2.5(tw)206.43 176.4 S
+(ill include the user name on that host.)218.93 176.4 Q F0 2.5(5.1.3. C)102
+200.4 R(and F \212 de\214ne classes)2.5 E F1 .197
+(Classes of phrases may be de\214ned to match on the left hand side of re)142
+216.6 R .197(writing rules, where)-.25 F 2.791<6199>117 228.6 S .291
+(phrase\232 is a sequence of characters that do not contain space characters.)
+128.671 228.6 R -.15(Fo)5.29 G 2.79(re).15 G .29(xample a class)445.1 228.6 R
+.356(of all local names for this site might be created so that attempts to sen\
+d to oneself can be elimi-)117 240.6 R 2.89(nated. These)117 252.6 R .39(can e\
+ither be de\214ned directly in the con\214guration \214le or read in from anot\
+her \214le.)2.89 F .796(Classes may be gi)117 264.6 R -.15(ve)-.25 G 3.296(nn)
+.15 G .796(ames from the set of upper case letters.)213.664 264.6 R(Lo)5.796 E
+.797(wer case letters and special)-.25 F(characters are reserv)117 276.6 Q
+(ed for system use.)-.15 E(The syntax is:)142 292.8 Q F0(C)157 309 Q F2 1.666
+(cp)C(hr)-1.666 E(ase1 phr)-.15 E(ase2...)-.15 E F0(F)157 321 Q F2 1.666<638c>C
+(le)-1.666 E F1 1.115(The \214rst form de\214nes the class)117 337.2 R F2(c)
+3.615 E F1 1.115(to match an)3.615 F 3.614(yo)-.15 G 3.614(ft)319.638 337.2 S
+1.114(he named w)329.362 337.2 R 3.614(ords. It)-.1 F 1.114
+(is permissible to split)3.614 F(them among multiple lines; for e)117 349.2 Q
+(xample, the tw)-.15 E 2.5(of)-.1 G(orms:)317.57 349.2 Q(CHmonet ucbmonet)157
+365.4 Q(and)117 381.6 Q(CHmonet)157 397.8 Q(CHucbmonet)157 409.8 Q(are equi)117
+426 Q -.25(va)-.25 G 2.5(lent. The).25 F
+(second form reads the elements of the class)2.5 E F2(c)2.5 E F1
+(from the named)2.5 E F2(\214le)2.5 E F1(.)A(The)142 442.2 Q F0($~)3.112 E F1
+.613(\(match entries not in class\) only matches a single w)3.112 F .613
+(ord; multi-w)-.1 F .613(ord entries in the)-.1 F
+(class are ignored in this conte)117 454.2 Q(xt.)-.15 E .384(The class)142
+470.4 R F0($=w)2.884 E F1 .384
+(is set to be the set of all names this host is kno)2.884 F .384(wn by)-.25 F
+5.384(.T)-.65 G .383(his can be used to)431.368 470.4 R(match local hostnames.)
+117 482.4 Q(The class)142 498.6 Q F0($=k)2.5 E F1(is set to be the same as)2.5
+E F0($k)2.5 E F1 2.5(,t)C(hat is, the UUCP node name.)312.69 498.6 Q F0 2.5
+(5.1.4. M)102 522.6 R 2.5<8a64>2.5 G(e\214ne mailer)159.5 522.6 Q F1
+(Programs and interf)142 538.8 Q(aces to mailers are de\214ned in this line.)
+-.1 E(The format is:)5 E F0(M)157 555 Q F2(name)A F1 2.5(,{)C F2(\214eld)197.9
+555 Q F1(=)A F2(value)A F1(}*)1.666 E(where)117 571.2 Q F2(name)3.244 E F1 .744
+(is the name of the mailer \(used internally only\) and the \231\214eld=name\
+\232 pairs de\214ne)3.244 F(attrib)117 583.2 Q(utes of the mailer)-.2 E 5(.F)
+-.55 G(ields are:)220.13 583.2 Q -.15(Pa)157 599.4 S 51.87(th The).15 F
+(pathname of the mailer)2.5 E 47.83(Flags Special)157 611.4 R
+(\215ags for this mailer)2.5 E 41.73(Sender A)157 623.4 R(re)2.5 E
+(writing set for sender addresses)-.25 E 31.17(Recipient A)157 635.4 R(re)2.5 E
+(writing set for recipient addresses)-.25 E(Ar)157 647.4 Q 49.13(gv An)-.18 F
 (ar)2.5 E(gument v)-.18 E(ector to pass to this mailer)-.15 E 55.61(Eol The)157
 (ar)2.5 E(gument v)-.18 E(ector to pass to this mailer)-.15 E 55.61(Eol The)157
-232.8 R(end-of-line string for this mailer)2.5 E 35.62(Maxsize The)157 244.8 R
-(maximum message length to this mailer)2.5 E 32.27(Linelimit The)157 256.8 R
-(maximum line length in the message body)2.5 E 31.18(Directory The)157 268.8 R
+659.4 R(end-of-line string for this mailer)2.5 E 35.62(Maxsize The)157 671.4 R
+(maximum message length to this mailer)2.5 E 32.27(Linelimit The)157 683.4 R
+(maximum line length in the message body)2.5 E 31.18(Directory The)157 695.4 R
 -.1(wo)2.5 G(rking directory for the mailer).1 E
 -.1(wo)2.5 G(rking directory for the mailer).1 E
-(Only the \214rst character of the \214eld name is check)117 285 Q(ed.)-.1 E
-1.144(The follo)142 301.2 R 1.144
-(wing \215ags may be set in the mailer description.)-.25 F(An)6.144 E 3.644(yo)
--.15 G 1.144(ther \215ags may be used)409.994 301.2 R(freely to conditionally \
-assign headers to messages destined for particular mailers.)117 313.2 Q 15.56
-(aR)117 329.4 S(un Extended SMTP \(ESMTP\) protocol \(de\214ned in RFCs 1425, \
-1426, and 1427\).)143.67 329.4 Q 15(bF)117 345.6 S .674
-(orce a blank line on the end of a message.)142.41 345.6 R .674
-(This is intended to w)5.674 F .674(ork around some stupid)-.1 F -.15(ve)137
-357.6 S .851(rsions of /bin/mail that require a blank line, b).15 F .851
-(ut do not pro)-.2 F .852(vide it themselv)-.15 F 3.352(es. It)-.15 F -.1(wo)
-3.352 G(uld).1 E(not normally be used on netw)137 369.6 Q(ork mail.)-.1 E 15.56
-(cD)117 385.8 S 4.166(on)144.22 385.8 S 1.666
-(ot include comments in addresses.)158.386 385.8 R 1.665
-(This should only be used if you ha)6.665 F 1.965 -.15(ve t)-.2 H 4.165(ow).15
-G(ork)490.67 385.8 Q(around a remote mailer that gets confused by comments.)137
-397.8 Q 13.33(CI)117 414 S 3.06(fm)140.33 414 S .56(ail is)154.5 414 R F2 -.37
-(re)3.06 G(ceived).37 E F1 .56(from a mailer with this \215ag set, an)3.06 F
-3.06(ya)-.15 G .56(ddresses in the header that do not)367.33 414 R(ha)137 426 Q
-.331 -.15(ve a)-.2 H 2.531(na).15 G 2.531(ts)174.472 426 S .031
-(ign \(\231@\232\) after being re)183.673 426 R .031
-(written by ruleset three will ha)-.25 F .33 -.15(ve t)-.2 H .03
-(he \231@domain\232 clause).15 F(from the sender tack)137 438 Q(ed on.)-.1 E
+(Only the \214rst character of the \214eld name is check)117 711.6 Q(ed.)-.1 E
+EP
+%%Page: 32 27
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-32 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.144(The follo)
+142 96 R 1.144(wing \215ags may be set in the mailer description.)-.25 F(An)
+6.144 E 3.644(yo)-.15 G 1.144(ther \215ags may be used)409.994 96 R(freely to \
+conditionally assign headers to messages destined for particular mailers.)117
+108 Q 15.56(aR)117 124.2 S(un Extended SMTP \(ESMTP\) protocol \(de\214ned in \
+RFCs 1425, 1426, and 1427\).)143.67 124.2 Q 15(bF)117 140.4 S .674
+(orce a blank line on the end of a message.)142.41 140.4 R .674
+(This is intended to w)5.674 F .675(ork around some stupid)-.1 F -.15(ve)137
+152.4 S .852(rsions of /bin/mail that require a blank line, b).15 F .851
+(ut do not pro)-.2 F .851(vide it themselv)-.15 F 3.351(es. It)-.15 F -.1(wo)
+3.351 G(uld).1 E(not normally be used on netw)137 164.4 Q(ork mail.)-.1 E 15.56
+(cD)117 180.6 S 4.165(on)144.22 180.6 S 1.665
+(ot include comments in addresses.)158.385 180.6 R 1.665
+(This should only be used if you ha)6.665 F 1.966 -.15(ve t)-.2 H 4.166(ow).15
+G(ork)490.67 180.6 Q(around a remote mailer that gets confused by comments.)137
+192.6 Q 13.33(CI)117 208.8 S 3.06(fm)140.33 208.8 S .56(ail is)154.5 208.8 R/F2
+10/Times-Italic@0 SF -.37(re)3.06 G(ceived).37 E F1 .56
+(from a mailer with this \215ag set, an)3.06 F 3.06(ya)-.15 G .56
+(ddresses in the header that do not)367.33 208.8 R(ha)137 220.8 Q .33 -.15
+(ve a)-.2 H 2.53(na).15 G 2.53(ts)174.47 220.8 S .03
+(ign \(\231@\232\) after being re)183.67 220.8 R .031
+(written by ruleset three will ha)-.25 F .331 -.15(ve t)-.2 H .031
+(he \231@domain\232 clause).15 F(from the sender tack)137 232.8 Q(ed on.)-.1 E
 (This allo)5 E(ws mail with headers of the form:)-.25 E(From: usera@hosta)177
 (This allo)5 E(ws mail with headers of the form:)-.25 E(From: usera@hosta)177
-454.2 Q -.8(To)177 466.2 S 2.5(:u).8 G(serb@hostb, userc)197.59 466.2 Q
-(to be re)137 482.4 Q(written as:)-.25 E(From: usera@hosta)177 498.6 Q -.8(To)
-177 510.6 S 2.5(:u).8 G(serb@hostb, userc@hosta)197.59 510.6 Q(automatically)
-137 526.8 Q(.)-.65 E 12.78(DT)117 543 S(his mailer w)143.11 543 Q
-(ants a \231Date:\232 header line.)-.1 E 15.56(eT)117 559.2 S .562
-(his mailer is e)143.11 559.2 R(xpensi)-.15 E .862 -.15(ve t)-.25 H 3.062(oc)
-.15 G .562(onnect to, so try to a)253.97 559.2 R -.2(vo)-.2 G .562
-(id connecting normally; an).2 F 3.063(yn)-.15 G(ecessary)470.13 559.2 Q
-(connection will occur during a queue run.)137 571.2 Q 13.89(EE)117 587.4 S
-(scape lines be)143.11 587.4 Q
+249 Q -.8(To)177 261 S 2.5(:u).8 G(serb@hostb, userc)197.59 261 Q(to be re)137
+277.2 Q(written as:)-.25 E(From: usera@hosta)177 293.4 Q -.8(To)177 305.4 S 2.5
+(:u).8 G(serb@hostb, userc@hosta)197.59 305.4 Q(automatically)137 321.6 Q(.)
+-.65 E 12.78(DT)117 337.8 S(his mailer w)143.11 337.8 Q
+(ants a \231Date:\232 header line.)-.1 E 15.56(eT)117 354 S .563
+(his mailer is e)143.11 354 R(xpensi)-.15 E .862 -.15(ve t)-.25 H 3.062(oc).15
+G .562(onnect to, so try to a)253.972 354 R -.2(vo)-.2 G .562
+(id connecting normally; an).2 F 3.062(yn)-.15 G(ecessary)470.13 354 Q
+(connection will occur during a queue run.)137 366 Q 13.89(EE)117 382.2 S
+(scape lines be)143.11 382.2 Q
 (ginning with \231From\232 in the message with a `>' sign.)-.15 E 16.67(fT)117
 (ginning with \231From\232 in the message with a `>' sign.)-.15 E 16.67(fT)117
-603.6 S .969(he mailer w)143.11 603.6 R .969(ants a)-.1 F F0<ad66>3.469 E F2
+398.4 S .968(he mailer w)143.11 398.4 R .968(ants a)-.1 F F0<ad66>3.469 E F2
 (fr)3.469 E(om)-.45 E F1 .969(\215ag, b)3.469 F .969(ut only if this is a netw)
 (fr)3.469 E(om)-.45 E F1 .969(\215ag, b)3.469 F .969(ut only if this is a netw)
--.2 F .969(ork forw)-.1 F .968(ard operation \(i.e., the)-.1 F(mailer will gi)
-137 615.6 Q .3 -.15(ve a)-.25 H 2.5(ne).15 G(rror if the e)218.81 615.6 Q -.15
+-.2 F .969(ork forw)-.1 F .969(ard operation \(i.e., the)-.1 F(mailer will gi)
+137 410.4 Q .3 -.15(ve a)-.25 H 2.5(ne).15 G(rror if the e)218.81 410.4 Q -.15
 (xe)-.15 G(cuting user does not ha).15 E .3 -.15(ve s)-.2 H
 (xe)-.15 G(cuting user does not ha).15 E .3 -.15(ve s)-.2 H
-(pecial permissions\).).15 E 14.44(FT)117 631.8 S(his mailer w)143.11 631.8 Q
-(ants a \231From:\232 header line.)-.1 E 15(gN)117 648 S(ormally)144.22 648 Q
-(,)-.65 E F2(sendmail)3.529 E F1 1.029
+(pecial permissions\).).15 E 14.44(FT)117 426.6 S(his mailer w)143.11 426.6 Q
+(ants a \231From:\232 header line.)-.1 E 15(gN)117 442.8 S(ormally)144.22 442.8
+Q(,)-.65 E F2(sendmail)3.53 E F1 1.029
 (sends internally generated email \(e.g., error messages\) using the null)3.529
 (sends internally generated email \(e.g., error messages\) using the null)3.529
-F .006(return address)137 662 R/F3 7/Times-Roman@0 SF(9)193.376 658 Q F1 .006
-(as required by RFC 1123.)199.382 662 R(Ho)5.006 E(we)-.25 E -.15(ve)-.25 G
-.806 -.4(r, s).15 H .006(ome mailers don').4 F 2.505(ta)-.18 G .005
-(ccept a null return)431.505 662 R 5.372(address. If)137 674 R(necessary)5.372
-E 5.372(,y)-.65 G 2.872(ou can set the)240.486 674 R F0(g)5.372 E F1 2.872
-(\215ag to pre)5.372 F -.15(ve)-.25 G(nt).15 E F2(sendmail)5.372 E F1 2.873
-(from obe)5.372 F 2.873(ying the)-.15 F .32 LW 76 683.6 72 683.6 DL 80 683.6 76
-683.6 DL 84 683.6 80 683.6 DL 88 683.6 84 683.6 DL 92 683.6 88 683.6 DL 96
-683.6 92 683.6 DL 100 683.6 96 683.6 DL 104 683.6 100 683.6 DL 108 683.6 104
-683.6 DL 112 683.6 108 683.6 DL 116 683.6 112 683.6 DL 120 683.6 116 683.6 DL
-124 683.6 120 683.6 DL 128 683.6 124 683.6 DL 132 683.6 128 683.6 DL 136 683.6
-132 683.6 DL 140 683.6 136 683.6 DL 144 683.6 140 683.6 DL 148 683.6 144 683.6
-DL 152 683.6 148 683.6 DL 156 683.6 152 683.6 DL 160 683.6 156 683.6 DL 164
-683.6 160 683.6 DL 168 683.6 164 683.6 DL 172 683.6 168 683.6 DL 176 683.6 172
-683.6 DL 180 683.6 176 683.6 DL 184 683.6 180 683.6 DL 188 683.6 184 683.6 DL
-192 683.6 188 683.6 DL 196 683.6 192 683.6 DL 200 683.6 196 683.6 DL 204 683.6
-200 683.6 DL 208 683.6 204 683.6 DL 212 683.6 208 683.6 DL 216 683.6 212 683.6
-DL/F4 5/Times-Roman@0 SF(9)93.6 694 Q/F5 8/Times-Roman@0 SF(Actually)3.2 I 2
-(,t)-.52 G(his only applies to SMTP)129.356 697.2 Q 2(,w)-.888 G
-(hich uses the `)219.588 697.2 Q(`MAIL FR)-.592 E(OM:<>')-.32 E 2('c)-.592 G
-(ommand.)333.98 697.2 Q EP
-%%Page: 30 27
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-30 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .212
-(standards; error messages will be sent as from the MAILER-D)137 96 R .211
-(AEMON \(actually)-.4 F 2.711(,t)-.65 G .211(he v)470.439 96 R(alue)-.25 E
-(of the)137 108 Q F0($n)2.5 E F1(macro\).)2.5 E 15(hU)117 124.2 S
-(pper case should be preserv)144.22 124.2 Q(ed in host names for this mailer)
--.15 E(.)-.55 E 16.67(IT)117 140.4 S .092
-(his mailer will be speaking SMTP to another)143.11 140.4 R/F2 10
-/Times-Italic@0 SF(sendmail)2.592 E F1 2.593<8a61>2.593 G 2.593(ss)381.242
-140.4 S .093(uch it can use special proto-)391.615 140.4 R .319(col features.)
-137 152.4 R .319(This option is not required \(i.e., if this option is omitted\
- the transmission will)5.319 F(still operate successfully)137 164.4 Q 2.5(,a)
--.65 G(lthough perhaps not as ef)244.11 164.4 Q(\214ciently as possible\).)-.25
-E 17.22(lT)117 180.6 S(his mailer is local \(i.e., \214nal deli)143.11 180.6 Q
--.15(ve)-.25 G(ry will be performed\).).15 E 13.89(LL)117 196.8 S .69
-(imit the line lengths as speci\214ed in RFC821.)143.11 196.8 R .69
-(This deprecated option should be replaced)5.69 F(by the)137 208.8 Q F0(L=)2.5
+F 1.766(return address)137 456.8 R/F3 7/Times-Roman@0 SF(13)195.136 452.8 Q F1
+1.766(as required by RFC 1123.)206.402 456.8 R(Ho)6.766 E(we)-.25 E -.15(ve)
+-.25 G 2.566 -.4(r, s).15 H 1.766(ome mailers don').4 F 4.266(ta)-.18 G 1.767
+(ccept a null)454.366 456.8 R .922(return address.)137 468.8 R .922
+(If necessary)5.922 F 3.422(,y)-.65 G .922(ou can set the)261.938 468.8 R F0(g)
+3.422 E F1 .922(\215ag to pre)3.422 F -.15(ve)-.25 G(nt).15 E F2(sendmail)3.422
+E F1 .922(from obe)3.422 F .922(ying the)-.15 F .212
+(standards; error messages will be sent as from the MAILER-D)137 480.8 R .212
+(AEMON \(actually)-.4 F 2.712(,t)-.65 G .212(he v)470.438 480.8 R(alue)-.25 E
+(of the)137 492.8 Q F0($n)2.5 E F1(macro\).)2.5 E 15(hU)117 509 S
+(pper case should be preserv)144.22 509 Q(ed in host names for this mailer)-.15
+E(.)-.55 E 16.67(IT)117 525.2 S .093
+(his mailer will be speaking SMTP to another)143.11 525.2 R F2(sendmail)2.593 E
+F1 2.592<8a61>2.592 G 2.592(ss)381.248 525.2 S .092
+(uch it can use special proto-)391.62 525.2 R .318(col features.)137 537.2 R
+.319(This option is not required \(i.e., if this option is omitted the transmi\
+ssion will)5.318 F(still operate successfully)137 549.2 Q 2.5(,a)-.65 G
+(lthough perhaps not as ef)244.11 549.2 Q(\214ciently as possible\).)-.25 E
+17.22(lT)117 565.4 S(his mailer is local \(i.e., \214nal deli)143.11 565.4 Q
+-.15(ve)-.25 G(ry will be performed\).).15 E 13.89(LL)117 581.6 S .69
+(imit the line lengths as speci\214ed in RFC821.)143.11 581.6 R .69
+(This deprecated option should be replaced)5.69 F(by the)137 593.6 Q F0(L=)2.5
 E F1(mail declaration.)2.5 E -.15(Fo)5 G 2.5(rh).15 G(istoric reasons, the)
 E F1(mail declaration.)2.5 E -.15(Fo)5 G 2.5(rh).15 G(istoric reasons, the)
-272.54 208.8 Q F0(L)2.5 E F1(\215ag also sets the)2.5 E F0(7)2.5 E F1(\215ag.)
-2.5 E 12.22(mT)117 225 S 1.273
+272.54 593.6 Q F0(L)2.5 E F1(\215ag also sets the)2.5 E F0(7)2.5 E F1(\215ag.)
+2.5 E 12.22(mT)117 609.8 S 1.273
 (his mailer can send to multiple users on the same host in one transaction.)
 (his mailer can send to multiple users on the same host in one transaction.)
-143.11 225 R 1.273(When a)6.273 F F0($u)3.773 E F1 .621(macro occurs in the)137
-237 R F2(ar)3.121 E(gv)-.37 E F1 .621
+143.11 609.8 R 1.274(When a)6.273 F F0($u)3.774 E F1 .622(macro occurs in the)
+137 621.8 R F2(ar)3.122 E(gv)-.37 E F1 .621
 (part of the mailer de\214nition, that \214eld will be repeated as neces-)3.121
 (part of the mailer de\214nition, that \214eld will be repeated as neces-)3.121
-F(sary for all qualifying users.)137 249 Q 11.11(MT)117 265.2 S(his mailer w)
-143.11 265.2 Q(ants a \231Message-Id:\232 header line.)-.1 E 15(nD)117 281.4 S
-2.5(on)144.22 281.4 S
+F(sary for all qualifying users.)137 633.8 Q 11.11(MT)117 650 S(his mailer w)
+143.11 650 Q(ants a \231Message-Id:\232 header line.)-.1 E 15(nD)117 666.2 S
+2.5(on)144.22 666.2 S
 (ot insert a UNIX-style \231From\232 line on the front of the message.)156.72
 (ot insert a UNIX-style \231From\232 line on the front of the message.)156.72
-281.4 Q 15(pU)117 297.6 S .702(se the route-addr style re)144.22 297.6 R -.15
-(ve)-.25 G .702(rse-path in the SMTP \231MAIL FR).15 F .701
-(OM:\232 command rather than)-.4 F .421
+666.2 Q .32 LW 76 678.8 72 678.8 DL 80 678.8 76 678.8 DL 84 678.8 80 678.8 DL
+88 678.8 84 678.8 DL 92 678.8 88 678.8 DL 96 678.8 92 678.8 DL 100 678.8 96
+678.8 DL 104 678.8 100 678.8 DL 108 678.8 104 678.8 DL 112 678.8 108 678.8 DL
+116 678.8 112 678.8 DL 120 678.8 116 678.8 DL 124 678.8 120 678.8 DL 128 678.8
+124 678.8 DL 132 678.8 128 678.8 DL 136 678.8 132 678.8 DL 140 678.8 136 678.8
+DL 144 678.8 140 678.8 DL 148 678.8 144 678.8 DL 152 678.8 148 678.8 DL 156
+678.8 152 678.8 DL 160 678.8 156 678.8 DL 164 678.8 160 678.8 DL 168 678.8 164
+678.8 DL 172 678.8 168 678.8 DL 176 678.8 172 678.8 DL 180 678.8 176 678.8 DL
+184 678.8 180 678.8 DL 188 678.8 184 678.8 DL 192 678.8 188 678.8 DL 196 678.8
+192 678.8 DL 200 678.8 196 678.8 DL 204 678.8 200 678.8 DL 208 678.8 204 678.8
+DL 212 678.8 208 678.8 DL 216 678.8 212 678.8 DL/F4 5/Times-Roman@0 SF(13)93.6
+689.2 Q/F5 8/Times-Roman@0 SF(Actually)3.2 I 2(,t)-.52 G
+(his only applies to SMTP)131.856 692.4 Q 2(,w)-.888 G(hich uses the `)222.088
+692.4 Q(`MAIL FR)-.592 E(OM:<>')-.32 E 2('c)-.592 G(ommand.)336.48 692.4 Q EP
+%%Page: 33 28
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-33)452.9 60 Q/F1 10/Times-Roman@0 SF 15(pU)117 96 S .701
+(se the route-addr style re)144.22 96 R -.15(ve)-.25 G .702
+(rse-path in the SMTP \231MAIL FR).15 F .702(OM:\232 command rather than)-.4 F
+.421
 (just the return address; although this is required in RFC821 section 3.1, man)
 (just the return address; although this is required in RFC821 section 3.1, man)
-137 309.6 R 2.922(yh)-.15 G .422(osts do not)459.816 309.6 R(process re)137
-321.6 Q -.15(ve)-.25 G(rse-paths properly).15 E 5(.R)-.65 G -2.15 -.25(ev e)
-272.3 321.6 T(rse-paths are of).25 E(\214cially discouraged by RFC 1123.)-.25 E
-14.44(PT)117 337.8 S(his mailer w)143.11 337.8 Q(ants a \231Return-P)-.1 E
-(ath:\232 line.)-.15 E 16.67(rS)117 354 S(ame as)142.56 354 Q F0(f)2.5 E F1 2.5
-(,b)C(ut sends a)185.68 354 Q F0<ad72>2.5 E F1(\215ag.)2.5 E 16.11(sS)117 370.2
-S(trip quote characters of)142.56 370.2 Q 2.5(fo)-.25 G 2.5(ft)245.61 370.2 S
-(he address before calling the mailer)254.22 370.2 Q(.)-.55 E 14.44(SD)117
-386.4 S(on')144.22 386.4 Q 3.443(tr)-.18 G .943
-(eset the userid before calling the mailer)166.923 386.4 R 5.943(.T)-.55 G .943
-(his w)344.324 386.4 R .942(ould be used in a secure en)-.1 F(viron-)-.4 E .49
-(ment where)137 398.4 R F2(sendmail)2.99 E F1 .49(ran as root.)2.99 F .491
-(This could be used to a)5.491 F -.2(vo)-.2 G .491(id for).2 F .491
-(ged addresses.)-.18 F .491(This \215ag)5.491 F(is suppressed if gi)137 410.4 Q
--.15(ve)-.25 G 2.5(nf).15 G(rom an \231unsafe\232 en)228.81 410.4 Q
-(vironment \(e.g, a user')-.4 E 2.5(sm)-.55 G(ail.cf \214le\).)410.31 410.4 Q
-15(uU)117 426.6 S(pper case should be preserv)144.22 426.6 Q
-(ed in user names for this mailer)-.15 E(.)-.55 E 12.78(UT)117 442.8 S 2.997
-(his mailer w)143.11 442.8 R 2.996
+137 108 R 2.921(yh)-.15 G .421(osts do not)459.818 108 R(process re)137 120 Q
+-.15(ve)-.25 G(rse-paths properly).15 E 5(.R)-.65 G -2.15 -.25(ev e)272.3 120 T
+(rse-paths are of).25 E(\214cially discouraged by RFC 1123.)-.25 E 14.44(PT)117
+136.2 S(his mailer w)143.11 136.2 Q(ants a \231Return-P)-.1 E(ath:\232 line.)
+-.15 E 16.67(rS)117 152.4 S(ame as)142.56 152.4 Q F0(f)2.5 E F1 2.5(,b)C
+(ut sends a)185.68 152.4 Q F0<ad72>2.5 E F1(\215ag.)2.5 E 16.11(sS)117 168.6 S
+(trip quote characters of)142.56 168.6 Q 2.5(fo)-.25 G 2.5(ft)245.61 168.6 S
+(he address before calling the mailer)254.22 168.6 Q(.)-.55 E 14.44(SD)117
+184.8 S(on')144.22 184.8 Q 3.442(tr)-.18 G .942
+(eset the userid before calling the mailer)166.922 184.8 R 5.943(.T)-.55 G .943
+(his w)344.319 184.8 R .943(ould be used in a secure en)-.1 F(viron-)-.4 E .491
+(ment where)137 196.8 R/F2 10/Times-Italic@0 SF(sendmail)2.991 E F1 .491
+(ran as root.)2.991 F .491(This could be used to a)5.491 F -.2(vo)-.2 G .49
+(id for).2 F .49(ged addresses.)-.18 F .49(This \215ag)5.49 F
+(is suppressed if gi)137 208.8 Q -.15(ve)-.25 G 2.5(nf).15 G
+(rom an \231unsafe\232 en)228.81 208.8 Q(vironment \(e.g, a user')-.4 E 2.5(sm)
+-.55 G(ail.cf \214le\).)410.31 208.8 Q 15(uU)117 225 S
+(pper case should be preserv)144.22 225 Q(ed in user names for this mailer)-.15
+E(.)-.55 E 12.78(UT)117 241.2 S 2.996(his mailer w)143.11 241.2 R 2.996
 (ants Unix-style \231From\232 lines with the ugly UUCP-style \231remote from)
 (ants Unix-style \231From\232 lines with the ugly UUCP-style \231remote from)
--.1 F(<host>\232 on the end.)137 454.8 Q 15(xT)117 471 S(his mailer w)143.11
-471 Q(ants a \231Full-Name:\232 header line.)-.1 E 12.78(XT)117 487.2 S 1.22
-(his mailer w)143.11 487.2 R 1.22
+-.1 F(<host>\232 on the end.)137 253.2 Q 15(xT)117 269.4 S(his mailer w)143.11
+269.4 Q(ants a \231Full-Name:\232 header line.)-.1 E 12.78(XT)117 285.6 S 1.22
+(his mailer w)143.11 285.6 R 1.22
 (ant to use the hidden dot algorithm as speci\214ed in RFC821; basically)-.1 F
 (ant to use the hidden dot algorithm as speci\214ed in RFC821; basically)-.1 F
-3.72(,a)-.65 G -.15(ny)494.15 487.2 S .225(line be)137 499.2 R .225
-(ginning with a dot will ha)-.15 F .525 -.15(ve a)-.2 H 2.725(ne).15 G .224
-(xtra dot prepended \(to be stripped at the other end\).)296.47 499.2 R .525(T\
-his insures that lines in the message containing a dot will not terminate the \
-message pre-)137 511.2 R(maturely)137 523.2 Q(.)-.65 E 15(7S)117 539.4 S .152
-(trip all output to se)142.56 539.4 R -.15(ve)-.25 G 2.652(nb).15 G 2.652
-(its. This)240.42 539.4 R .152(is the def)2.652 F .152(ault if the)-.1 F F0(L)
+3.72(,a)-.65 G -.15(ny)494.15 285.6 S .224(line be)137 297.6 R .224
+(ginning with a dot will ha)-.15 F .525 -.15(ve a)-.2 H 2.725(ne).15 G .225
+(xtra dot prepended \(to be stripped at the other end\).)296.465 297.6 R .525(\
+This insures that lines in the message containing a dot will not terminate the\
+ message pre-)137 309.6 R(maturely)137 321.6 Q(.)-.65 E 15(7S)117 337.8 S .152
+(trip all output to se)142.56 337.8 R -.15(ve)-.25 G 2.652(nb).15 G 2.652
+(its. This)240.42 337.8 R .152(is the def)2.652 F .152(ault if the)-.1 F F0(L)
 2.652 E F1 .152(\215ag is set.)2.652 F .152(Note that setting this is)5.152 F
 2.652 E F1 .152(\215ag is set.)2.652 F .152(Note that setting this is)5.152 F
-.078(not suf)137 551.4 R .079
+.079(not suf)137 349.8 R .079
 (\214cient to get full eight bit data passed through)-.25 F F2(sendmail)2.579 E
 (\214cient to get full eight bit data passed through)-.25 F F2(sendmail)2.579 E
-F1 5.079(.I)C 2.579(ft)398.437 551.4 S(he)407.126 551.4 Q F0(7)2.579 E F1 .079
-(option is set, this is)2.579 F(essentially al)137 563.4 Q -.1(wa)-.1 G
+F1 5.079(.I)C 2.579(ft)398.439 349.8 S(he)407.128 349.8 Q F0(7)2.579 E F1 .079
+(option is set, this is)2.579 F(essentially al)137 361.8 Q -.1(wa)-.1 G
 (ys set, since the eighth bit w).1 E(as stripped on input.)-.1 E 2.122(The mai\
 ler with the special name \231error\232 can be used to generate a user error)
 (ys set, since the eighth bit w).1 E(as stripped on input.)-.1 E 2.122(The mai\
 ler with the special name \231error\232 can be used to generate a user error)
-142 579.6 R 7.122(.T)-.55 G(he)494.56 579.6 Q .246
-(\(optional\) host \214eld is an e)117 591.6 R .247
+142 378 R 7.122(.T)-.55 G(he)494.56 378 Q .247
+(\(optional\) host \214eld is an e)117 390 R .247
 (xit status to be returned, and the user \214eld is a message to be printed.)
 (xit status to be returned, and the user \214eld is a message to be printed.)
--.15 F .337(The e)117 603.6 R .337(xit status may be numeric or one of the v)
--.15 F .336(alues USA)-.25 F .336(GE, NOUSER, NOHOST)-.4 F 2.836(,U)-.74 G -.35
-(NA)465.4 603.6 S -1.35(VA)-1 G(IL-)1.35 E .828(ABLE, SOFTW)117 615.6 R .828
+-.15 F .336(The e)117 402 R .336(xit status may be numeric or one of the v)-.15
+F .337(alues USA)-.25 F .337(GE, NOUSER, NOHOST)-.4 F 2.837(,U)-.74 G -.35(NA)
+465.4 402 S -1.35(VA)-1 G(IL-)1.35 E .828(ABLE, SOFTW)117 414 R .828
 (ARE, TEMPF)-1.2 F .828(AIL, PR)-.74 F -1.88 -.4(OT O)-.4 H .828
 (ARE, TEMPF)-1.2 F .828(AIL, PR)-.74 F -1.88 -.4(OT O)-.4 H .828
-(COL, or CONFIG to return the corresponding EX_).4 F -.15(ex)117 627.6 S
-(it code.).15 E -.15(Fo)5 G 2.5(re).15 G(xample, the entry:)181.26 627.6 Q
-($#error $@ NOHOST $: Host unkno)157 643.8 Q(wn in this domain)-.25 E .261(on \
+(COL, or CONFIG to return the corresponding EX_).4 F -.15(ex)117 426 S
+(it code.).15 E -.15(Fo)5 G 2.5(re).15 G(xample, the entry:)181.26 426 Q
+($#error $@ NOHOST $: Host unkno)157 442.2 Q(wn in this domain)-.25 E .261(on \
 the RHS of a rule will cause the speci\214ed error to be generated and the \
 the RHS of a rule will cause the speci\214ed error to be generated and the \
-\231Host unkno)117 660 R .261(wn\232 e)-.25 F(xit)-.15 E
-(status to be returned if the LHS matches.)117 672 Q
-(This mailer is only functional in ruleset zero.)5 E 1.563
-(The mailer named \231local\232)142 688.2 R F2(must)4.063 E F1 1.564
-(be de\214ned in e)4.063 F -.15(ve)-.25 G 1.564(ry con\214guration \214le.).15
-F 1.564(This is used to)6.564 F(deli)117 700.2 Q -.15(ve)-.25 G 4.039(rl).15 G
-1.539(ocal mail, and is treated specially in se)151.189 700.2 R -.15(ve)-.25 G
-1.538(ral w).15 F 4.038(ays. Additionally)-.1 F 4.038(,t)-.65 G 1.538
-(hree other mailers)428.724 700.2 R 1.367(named \231prog\232, \231*\214le*\232\
-, and \231*include*\232 may be de\214ned to tune the deli)117 712.2 R -.15(ve)
--.25 G 1.368(ry of messages to).15 F
-(programs, \214les, and :include: lists respecti)117 724.2 Q -.15(ve)-.25 G(ly)
-.15 E 5(.T)-.65 G(he)315.38 724.2 Q 2.5(yd)-.15 G(ef)337.17 724.2 Q(ault to:)
--.1 E EP
-%%Page: 31 28
+\231Host unkno)117 458.4 R .262(wn\232 e)-.25 F(xit)-.15 E
+(status to be returned if the LHS matches.)117 470.4 Q
+(This mailer is only functional in ruleset zero.)5 E 1.564
+(The mailer named \231local\232)142 486.6 R F2(must)4.064 E F1 1.564
+(be de\214ned in e)4.064 F -.15(ve)-.25 G 1.563(ry con\214guration \214le.).15
+F 1.563(This is used to)6.563 F(deli)117 498.6 Q -.15(ve)-.25 G 4.038(rl).15 G
+1.538(ocal mail, and is treated specially in se)151.188 498.6 R -.15(ve)-.25 G
+1.539(ral w).15 F 4.039(ays. Additionally)-.1 F 4.039(,t)-.65 G 1.539
+(hree other mailers)428.722 498.6 R 1.367(named \231prog\232, \231*\214le*\232\
+, and \231*include*\232 may be de\214ned to tune the deli)117 510.6 R -.15(ve)
+-.25 G 1.367(ry of messages to).15 F
+(programs, \214les, and :include: lists respecti)117 522.6 Q -.15(ve)-.25 G(ly)
+.15 E 5(.T)-.65 G(he)315.38 522.6 Q 2.5(yd)-.15 G(ef)337.17 522.6 Q(ault to:)
+-.1 E(Mprog, P=/bin/sh, F=lsD, A=sh \255c $u)157 538.8 Q(M*\214le*, P=/de)157
+550.8 Q(v/null, F=lsDFMPEu, A=FILE)-.25 E(M*include*, P=/de)157 562.8 Q
+(v/null, F=su, A=INCLUDE)-.25 E 1.263(The Sender and Recipient re)142 583.2 R
+1.263(writing sets may either be a simple inte)-.25 F 1.264(ger or may be tw)
+-.15 F(o)-.1 E(inte)117 595.2 Q .047
+(gers separated by a slash; if so, the \214rst re)-.15 F .046
+(writing set is applied to en)-.25 F -.15(ve)-.4 G .046(lope addresses and the)
+.15 F(second is applied to headers.)117 607.2 Q 1.258
+(The Directory is actually a colon-separated path of directories to try)142
+623.4 R 6.259(.F)-.65 G 1.259(or e)439.702 623.4 R 1.259(xample, the)-.15 F
+.144(de\214nition \231D=$z:/\232 \214rst tries to e)117 635.4 R -.15(xe)-.15 G
+.143(cute in the recipient').15 F 2.643(sh)-.55 G .143
+(ome directory; if that is not a)353.332 635.4 R -.25(va)-.2 G(ilable,).25 E
+.78(it tries to e)117 647.4 R -.15(xe)-.15 G .78
+(cute in the root of the \214lesystem.).15 F .781
+(This is intended to be used only on the \231prog\232)5.781 F(mailer)117 659.4
+Q 2.899(,s)-.4 G .398(ince some shells \(such as)151.439 659.4 R F2(csh)2.898 E
+F1 2.898(\)r)C .398(efuse to e)279.358 659.4 R -.15(xe)-.15 G .398(cute if the)
+.15 F 2.898(yc)-.15 G .398(annot read the home directory)380.588 659.4 R(.)-.65
+E .416(Since the queue directory is not normally readable by normal users)117
+671.4 R F2(csh)2.916 E F1 .416(scripts as recipients can)2.916 F -.1(fa)117
+683.4 S(il.).1 E EP
+%%Page: 34 29
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-31)452.9 60 Q/F1 10/Times-Roman@0 SF
-(Mprog, P=/bin/sh, F=lsD, A=sh \255c $u)157 96 Q(M*\214le*, P=/de)157 108 Q
-(v/null, F=lsDFMPEu, A=FILE)-.25 E(M*include*, P=/de)157 120 Q
-(v/null, F=su, A=INCLUDE)-.25 E 1.264(The Sender and Recipient re)142 140.4 R
-1.263(writing sets may either be a simple inte)-.25 F 1.263(ger or may be tw)
--.15 F(o)-.1 E(inte)117 152.4 Q .046
-(gers separated by a slash; if so, the \214rst re)-.15 F .047
-(writing set is applied to en)-.25 F -.15(ve)-.4 G .047(lope addresses and the)
-.15 F(second is applied to headers.)117 164.4 Q 1.259
-(The Directory is actually a colon-separated path of directories to try)142
-180.6 R 6.258(.F)-.65 G 1.258(or e)439.704 180.6 R 1.258(xample, the)-.15 F
-.143(de\214nition \231D=$z:/\232 \214rst tries to e)117 192.6 R -.15(xe)-.15 G
-.143(cute in the recipient').15 F 2.643(sh)-.55 G .144
-(ome directory; if that is not a)353.327 192.6 R -.25(va)-.2 G(ilable,).25 E
-.781(it tries to e)117 204.6 R -.15(xe)-.15 G .781
-(cute in the root of the \214lesystem.).15 F .78
-(This is intended to be used only on the \231prog\232)5.781 F(mailer)117 216.6
-Q 2.898(,s)-.4 G .398(ince some shells \(such as)151.438 216.6 R/F2 10
-/Times-Italic@0 SF(csh)2.898 E F1 2.898(\)r)C .398(efuse to e)279.356 216.6 R
--.15(xe)-.15 G .398(cute if the).15 F 2.898(yc)-.15 G .398
-(annot read the home directory)380.586 216.6 R(.)-.65 E .416
-(Since the queue directory is not normally readable by normal users)117 228.6 R
-F2(csh)2.916 E F1 .416(scripts as recipients can)2.916 F -.1(fa)117 240.6 S
-(il.).1 E F0 2.5(5.1.5. H)102 264.6 R 2.5<8a64>2.5 G(e\214ne header)157.84
-264.6 Q F1 .198(The format of the header lines that sendmail inserts into the \
-message are de\214ned by the)142 280.8 R F0(H)2.699 E F1 2.5(line. The)117
-292.8 R(syntax of this line is:)2.5 E F0(H)157 309 Q F1([)A F0(?)A F2(m\215a)A
-(gs)-.1 E F0(?)A F1(])A F2(hname)A F0(:)A F2(htemplate)2.5 E F1 .691(Continuat\
-ion lines in this spec are re\215ected directly into the outgoing message.)117
-325.2 R(The)5.69 E F2(htemplate)3.19 E F1 1.566(is macro e)117 337.2 R 1.567
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-34 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E 2.5(5.1.5. H)102 96 R 2.5<8a64>2.5 G
+(e\214ne header)157.84 96 Q/F1 10/Times-Roman@0 SF .198
+(The format of the header lines that)142 112.2 R/F2 10/Times-Italic@0 SF
+(sendmail)2.698 E F1 .198(inserts into the message are de\214ned by the)2.698 F
+F0(H)2.698 E F1 2.5(line. The)117 124.2 R(syntax of this line is:)2.5 E F0(H)
+157 140.4 Q F1([)A F0(?)A F2(m\215a)A(gs)-.1 E F0(?)A F1(])A F2(hname)A F0(:)A
+F2(htemplate)2.5 E F1 .691(Continuation lines in this spec are re\215ected dir\
+ectly into the outgoing message.)117 156.6 R(The)5.691 E F2(htemplate)3.191 E
+F1 1.567(is macro e)117 168.6 R 1.567
 (xpanded before insertion into the message.)-.15 F 1.567(If the)6.567 F F2
 (m\215a)4.067 E(gs)-.1 E F1 1.567(\(surrounded by question)4.067 F .219(marks\
 \) are speci\214ed, at least one of the speci\214ed \215ags must be stated in \
 (xpanded before insertion into the message.)-.15 F 1.567(If the)6.567 F F2
 (m\215a)4.067 E(gs)-.1 E F1 1.567(\(surrounded by question)4.067 F .219(marks\
 \) are speci\214ed, at least one of the speci\214ed \215ags must be stated in \
-the mailer de\214nition for)117 349.2 R .093
-(this header to be automatically output.)117 361.2 R .093
+the mailer de\214nition for)117 180.6 R .094
+(this header to be automatically output.)117 192.6 R .093
 (If one of these headers is in the input it is re\215ected to the)5.093 F
 (If one of these headers is in the input it is re\215ected to the)5.093 F
-(output re)117 373.2 Q -.05(ga)-.15 G(rdless of these \215ags.).05 E
-(Some headers ha)142 389.4 Q .3 -.15(ve s)-.2 H
+(output re)117 204.6 Q -.05(ga)-.15 G(rdless of these \215ags.).05 E
+(Some headers ha)142 220.8 Q .3 -.15(ve s)-.2 H
 (pecial semantics that will be described belo).15 E -.65(w.)-.25 G F0 2.5
 (pecial semantics that will be described belo).15 E -.65(w.)-.25 G F0 2.5
-(5.1.6. O)102 413.4 R 2.5<8a73>2.5 G(et option)156.17 413.4 Q F1 .045(There ar\
+(5.1.6. O)102 244.8 R 2.5<8a73>2.5 G(et option)156.17 244.8 Q F1 .045(There ar\
 e a number of \231random\232 options that can be set from a con\214guration \
 e a number of \231random\232 options that can be set from a con\214guration \
-\214le.)142 429.6 R(Options)5.045 E(are represented by single characters.)117
-441.6 Q(The syntax of this line is:)5 E F0(O)157 457.8 Q F2 1.666(ov)C(alue)
--1.666 E F1 1.054(This sets option)117 474 R F2(o)3.554 E F1 1.054(to be)3.554
-F F2(value)3.554 E F1 6.054(.D)C 1.054(epending on the option,)256.318 474 R F2
-(value)3.555 E F1 1.055(may be a string, an inte)3.555 F(ger)-.15 E 3.555(,a)
--.4 G(boolean \(with le)117 486 Q -.05(ga)-.15 G 2.5(lv).05 G
-(alues \231t\232, \231T\232, \231f\232, or \231F\232; the def)201.26 486 Q
+\214le.)142 261 R(Options)5.046 E(are represented by single characters.)117 273
+Q(The syntax of this line is:)5 E F0(O)157 289.2 Q F2 1.666(ov)C(alue)-1.666 E
+F1 1.055(This sets option)117 305.4 R F2(o)3.555 E F1 1.055(to be)3.555 F F2
+(value)3.555 E F1 6.055(.D)C 1.054(epending on the option,)256.325 305.4 R F2
+(value)3.554 E F1 1.054(may be a string, an inte)3.554 F(ger)-.15 E 3.554(,a)
+-.4 G(boolean \(with le)117 317.4 Q -.05(ga)-.15 G 2.5(lv).05 G
+(alues \231t\232, \231T\232, \231f\232, or \231F\232; the def)201.26 317.4 Q
 (ault is TR)-.1 E(UE\), or a time interv)-.4 E(al.)-.25 E
 (ault is TR)-.1 E(UE\), or a time interv)-.4 E(al.)-.25 E
-(The options supported are:)142 502.2 Q(a)117 518.4 Q F2(N)A F1 .655(If set, w)
-189 518.4 R .655(ait up to)-.1 F F2(N)3.155 E F1 .655
+(The options supported are:)142 333.6 Q(a)117 349.8 Q F2(N)A F1 .655(If set, w)
+189 349.8 R .655(ait up to)-.1 F F2(N)3.155 E F1 .655
 (minutes for an \231@:@\232 entry to e)3.155 F .655(xist in the alias database)
 (minutes for an \231@:@\232 entry to e)3.155 F .655(xist in the alias database)
--.15 F .474(before starting up.)189 530.4 R .474(If it does not appear in)5.474
-F F2(N)2.974 E F1 .475(minutes, reb)2.974 F .475(uild the database \(if)-.2 F
-(the)189 542.4 Q F0(D)2.5 E F1(option is also set\) or issue a w)2.5 E(arning.)
--.1 E(A)117 558.6 Q F2 .507(spec, spec, ...)B F1 .507
-(Specify possible alias \214le\(s\).)190.014 558.6 R(Each)5.507 E F2(spec)3.006
-E F1 .506(should be in the format `)3.006 F(`)-.74 E F2(class)A F0(:)A F2
-(\214le)3.006 E F1 -.74('')C(where)189 570.6 Q F2(class)2.947 E F0(:)A F1 .447
-(is optional and def)2.947 F .447(aults to `)-.1 F(`implicit')-.74 E 2.947
-('. Depending)-.74 F .448(on ho)2.948 F(w)-.25 E F0(send-)2.948 E(mail)189
-582.6 Q F1 1.224(is compiled, v)3.724 F 1.224
+-.15 F .475(before starting up.)189 361.8 R .474(If it does not appear in)5.475
+F F2(N)2.974 E F1 .474(minutes, reb)2.974 F .474(uild the database \(if)-.2 F
+(the)189 373.8 Q F0(D)2.5 E F1(option is also set\) or issue a w)2.5 E(arning.)
+-.1 E(A)117 390 Q F2 .506(spec, spec, ...)B F1 .506
+(Specify possible alias \214le\(s\).)190.012 390 R(Each)5.506 E F2(spec)3.006 E
+F1 .507(should be in the format `)3.006 F(`)-.74 E F2(class)A F0(:)A F2(\214le)
+3.007 E F1 -.74('')C(where)189 402 Q F2(class)3.05 E F0(:)A F1 .549
+(is optional and def)3.049 F .549(aults to `)-.1 F(`implicit')-.74 E 3.049
+('. Depending)-.74 F .549(on ho)3.049 F(w)-.25 E F2(send-)3.049 E(mail)189 414
+Q F1 1.335(is compiled, v)3.835 F 1.335
 (alid classes are \231implicit\232 \(search through a compiled-in)-.25 F .193
 (list of alias \214le types, for back compatibility\), \231hash\232 \(if)189
 (alid classes are \231implicit\232 \(search through a compiled-in)-.25 F .193
 (list of alias \214le types, for back compatibility\), \231hash\232 \(if)189
-594.6 R/F3 9/Times-Roman@0 SF(NEWDB)2.693 E F1 .193(is speci\214ed\),)2.693 F
-.882(\231dbm\232 \(if)189 606.6 R F3(NDBM)3.382 E F1 .882
+426 R/F3 9/Times-Roman@0 SF(NEWDB)2.693 E F1 .193(is speci\214ed\),)2.693 F
+.881(\231dbm\232 \(if)189 438 R F3(NDBM)3.381 E F1 .882
 (is speci\214ed\), \231stab\232 \(internal symbol table \212 not normally)3.382
 (is speci\214ed\), \231stab\232 \(internal symbol table \212 not normally)3.382
-F .475(used unless you ha)189 618.6 R .775 -.15(ve n)-.2 H 2.975(oo).15 G .476
-(ther database lookup\), or \231nis\232 \(if)295.735 618.6 R F3(NIS)2.976 E F1
-.476(is speci\214ed\).)2.976 F(If a list of)189 630.6 Q F2(spec)2.5 E F1 2.5
-(sa)C(re pro)259.26 630.6 Q(vided,)-.15 E F2(sendmail)2.5 E F1
-(searches them in order)2.5 E(.)-.55 E(b)117 646.8 Q F2(N)A F1(/)A F2(M)A F1
-1.589(Insist on at least)189 646.8 R F2(N)4.089 E F1 1.588
-(blocks free on the \214lesystem that holds the queue \214les)4.089 F .19
-(before accepting email via SMTP)189 658.8 R 5.19(.I)-1.11 G 2.69(ft)334.09
-658.8 S .19(here is insuf)342.89 658.8 R .19(\214cient space)-.25 F F2
-(sendmail)2.69 E F1(gi)2.69 E -.15(ve)-.25 G(s).15 E 3.67(a4)189 670.8 S 1.17
-(52 response to the MAIL command.)202.11 670.8 R 1.17(This in)6.17 F 1.17
-(vites the sender to try ag)-.4 F(ain)-.05 E(later)189 682.8 Q 5.986(.T)-.55 G
-.986(he optional)220.816 682.8 R F2(M)3.486 E F1 .987
-(is a maximum message size adv)3.486 F .987(ertised in the ESMTP)-.15 F
-(EHLO response.)189 694.8 Q(It is currently otherwise unused.)5 E(B)117 711 Q
-F2(c)A F1 1.445(Set the blank substitution character to)189 711 R F2(c)3.945 E
-F1 6.444(.U)C 1.444(nquoted spaces in addresses are)371.594 711 R
-(replaced by this character)189 723 Q 5(.D)-.55 G(ef)305.63 723 Q
-(aults to space \(i.e., no change is made\).)-.1 E EP
-%%Page: 32 29
+F .476(used unless you ha)189 450 R .776 -.15(ve n)-.2 H 2.976(oo).15 G .475
+(ther database lookup\), or \231nis\232 \(if)295.74 450 R F3(NIS)2.975 E F1
+.475(is speci\214ed\).)2.975 F(If a list of)189 462 Q F2(spec)2.5 E F1 2.5(sa)C
+(re pro)259.26 462 Q(vided,)-.15 E F2(sendmail)2.5 E F1(searches them in order)
+2.5 E(.)-.55 E(b)117 478.2 Q F2(N)A F1(/)A F2(M)A F1 1.588(Insist on at least)
+189 478.2 R F2(N)4.088 E F1 1.589
+(blocks free on the \214lesystem that holds the queue \214les)4.088 F .19
+(before accepting email via SMTP)189 490.2 R 5.19(.I)-1.11 G 2.69(ft)334.09
+490.2 S .19(here is insuf)342.89 490.2 R .19(\214cient space)-.25 F F2
+(sendmail)2.69 E F1(gi)2.69 E -.15(ve)-.25 G(s).15 E 3.67(a4)189 502.2 S 1.17
+(52 response to the MAIL command.)202.11 502.2 R 1.17(This in)6.17 F 1.17
+(vites the sender to try ag)-.4 F(ain)-.05 E(later)189 514.2 Q 5.987(.T)-.55 G
+.987(he optional)220.817 514.2 R F2(M)3.487 E F1 .987
+(is a maximum message size adv)3.487 F .986(ertised in the ESMTP)-.15 F
+(EHLO response.)189 526.2 Q(It is currently otherwise unused.)5 E(B)117 542.4 Q
+F2(c)A F1 1.444(Set the blank substitution character to)189 542.4 R F2(c)3.945
+E F1 6.445(.U)C 1.445(nquoted spaces in addresses are)371.59 542.4 R
+(replaced by this character)189 554.4 Q 5(.D)-.55 G(ef)305.63 554.4 Q
+(aults to space \(i.e., no change is made\).)-.1 E 67.56(cI)117 570.6 S 3.893
+(fa)192.33 570.6 S 3.893(no)203.993 570.6 S 1.393(utgoing mailer is mark)
+217.886 570.6 R 1.393(ed as being e)-.1 F(xpensi)-.15 E -.15(ve)-.25 G 3.892
+(,d).15 G(on')415.296 570.6 Q 3.892(tc)-.18 G 1.392(onnect immedi-)439.558
+570.6 R(ately)189 582.6 Q 6.163(.T)-.65 G 1.164
+(his requires that queueing be compiled in, since it will depend on a)222.563
+582.6 R(queue run process to actually send the mail.)189 594.6 Q(C)117 610.8 Q
+F2(N)A F1 1.49(Checkpoints the queue e)189 610.8 R -.15(ve)-.25 G(ry).15 E F2
+(N)3.99 E F1(\(def)3.99 E 1.49(ault 10\) addresses sent.)-.1 F 1.49
+(If your system)6.49 F .785(crashes during deli)189 622.8 R -.15(ve)-.25 G .785
+(ry to a lar).15 F .785(ge list, this pre)-.18 F -.15(ve)-.25 G .785
+(nts retransmission to an).15 F 3.285(yb)-.15 G(ut)496.22 622.8 Q
+(the last recipients.)189 634.8 Q(d)117 651 Q F2(x)A F1(Deli)189 651 Q -.15(ve)
+-.25 G 2.5(ri).15 G 2.5(nm)223.87 651 S(ode)239.15 651 Q F2(x)2.5 E F1 5(.L)C
+-2.25 -.15(eg a)274.14 651 T 2.5(lm).15 G(odes are:)300.88 651 Q 17.22(iD)229
+667.2 S(eli)256.22 667.2 Q -.15(ve)-.25 G 2.5(ri).15 G(nteracti)283.87 667.2 Q
+-.15(ve)-.25 G(ly \(synchronously\)).15 E 15(bD)229 679.2 S(eli)256.22 679.2 Q
+-.15(ve)-.25 G 2.5(ri).15 G 2.5(nb)283.87 679.2 S(ackground \(asynchronously\))
+296.37 679.2 Q 15(qJ)229 691.2 S(ust queue the message \(deli)252.89 691.2 Q
+-.15(ve)-.25 G 2.5(rd).15 G(uring queue run\))382.74 691.2 Q(Def)189 707.4 Q
+1.32(aults to `)-.1 F(`b')-.74 E 3.82('i)-.74 G 3.82(fn)261.64 707.4 S 3.82(oo)
+273.79 707.4 S 1.32(ption is speci\214ed, `)287.61 707.4 R(`i')-.74 E 3.82('i)
+-.74 G 3.82(fi)385.57 707.4 S 3.82(ti)395.5 707.4 S 3.82(ss)404.88 707.4 S 1.32
+(peci\214ed b)416.48 707.4 R 1.32(ut gi)-.2 F -.15(ve)-.25 G 3.82(nn).15 G(o)
+499 707.4 Q(ar)189 719.4 Q(gument \(i.e., `)-.18 E(`Od')-.74 E 2.5('i)-.74 G
+2.5(se)278.98 719.4 S(qui)289.81 719.4 Q -.25(va)-.25 G(lent to `).25 E(`Odi')
+-.74 E('\).)-.74 E EP
+%%Page: 35 30
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-32 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 67.56(cI)117 96
-S 3.892(fa)192.33 96 S 3.892(no)203.992 96 S 1.393(utgoing mailer is mark)
-217.884 96 R 1.393(ed as being e)-.1 F(xpensi)-.15 E -.15(ve)-.25 G 3.893(,d)
-.15 G(on')415.294 96 Q 3.893(tc)-.18 G 1.393(onnect immedi-)439.557 96 R(ately)
-189 108 Q 6.164(.T)-.65 G 1.164
-(his requires that queueing be compiled in, since it will depend on a)222.564
-108 R(queue run process to actually send the mail.)189 120 Q(C)117 136.2 Q/F2
-10/Times-Italic@0 SF(N)A F1 1.49(Checkpoints the queue e)189 136.2 R -.15(ve)
--.25 G(ry).15 E F2(N)3.99 E F1(\(def)3.99 E 1.49(ault 10\) addresses sent.)-.1
-F 1.49(If your system)6.49 F .785(crashes during deli)189 148.2 R -.15(ve)-.25
-G .785(ry to a lar).15 F .785(ge list, this pre)-.18 F -.15(ve)-.25 G .785
-(nts retransmission to an).15 F 3.285(yb)-.15 G(ut)496.22 148.2 Q
-(the last recipients.)189 160.2 Q(d)117 176.4 Q F2(x)A F1(Deli)189 176.4 Q -.15
-(ve)-.25 G 2.5(ri).15 G 2.5(nm)223.87 176.4 S(ode)239.15 176.4 Q F2(x)2.5 E F1
-5(.L)C -2.25 -.15(eg a)274.14 176.4 T 2.5(lm).15 G(odes are:)300.88 176.4 Q
-17.22(iD)229 192.6 S(eli)256.22 192.6 Q -.15(ve)-.25 G 2.5(ri).15 G(nteracti)
-283.87 192.6 Q -.15(ve)-.25 G(ly \(synchronously\)).15 E 15(bD)229 204.6 S(eli)
-256.22 204.6 Q -.15(ve)-.25 G 2.5(ri).15 G 2.5(nb)283.87 204.6 S
-(ackground \(asynchronously\))296.37 204.6 Q 15(qJ)229 216.6 S
-(ust queue the message \(deli)252.89 216.6 Q -.15(ve)-.25 G 2.5(rd).15 G
-(uring queue run\))382.74 216.6 Q(Def)189 232.8 Q 1.32(aults to `)-.1 F(`b')
--.74 E 3.82('i)-.74 G 3.82(fn)261.64 232.8 S 3.82(oo)273.79 232.8 S 1.32
-(ption is speci\214ed, `)287.61 232.8 R(`i')-.74 E 3.82('i)-.74 G 3.82(fi)
-385.57 232.8 S 3.82(ti)395.5 232.8 S 3.82(ss)404.88 232.8 S 1.32(peci\214ed b)
-416.48 232.8 R 1.32(ut gi)-.2 F -.15(ve)-.25 G 3.82(nn).15 G(o)499 232.8 Q(ar)
-189 244.8 Q(gument \(i.e., `)-.18 E(`Od')-.74 E 2.5('i)-.74 G 2.5(se)278.98
-244.8 S(qui)289.81 244.8 Q -.25(va)-.25 G(lent to `).25 E(`Odi')-.74 E('\).)
--.74 E 64.78(DI)117 261 S 2.736(fs)192.33 261 S .236(et, reb)202.286 261 R .236
-(uild the alias database if necessary and possible.)-.2 F .235
-(If this option is not)5.236 F(set,)189 273 Q F2(sendmail)3.385 E F1 .885
-(will ne)3.385 F -.15(ve)-.25 G 3.385(rr).15 G(eb)292.96 273 Q .885
-(uild the alias database unless e)-.2 F .885(xplicitly requested)-.15 F(using)
-189 285 Q F0(\255bi)2.5 E F1(.)A(e)117 301.2 Q F2(x)A F1
-(Dispose of errors using mode)189 301.2 Q F2(x)2.5 E F1 5(.T)C(he v)327.31
-301.2 Q(alues for)-.25 E F2(x)2.5 E F1(are:)2.5 E 15(pP)229 317.4 S
-(rint error messages \(def)254.56 317.4 Q(ault\))-.1 E 15(qN)229 329.4 S 2.5
-(om)256.22 329.4 S(essages, just gi)271.5 329.4 Q .3 -.15(ve ex)-.25 H
-(it status).15 E 12.22(mM)229 341.4 S(ail back errors)257.89 341.4 Q 12.78(wW)
-229 353.4 S(rite back errors \(mail if user not logged in\))258.44 353.4 Q
-15.56(eM)229 365.4 S(ail back errors and gi)257.89 365.4 Q .3 -.15(ve z)-.25 H
-(ero e).15 E(xit stat al)-.15 E -.1(wa)-.1 G(ys).1 E(E)117 385.8 Q F2
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-35)452.9 60 Q/F1 10/Times-Roman@0 SF 64.78(DI)117 96 S 2.735(fs)192.33
+96 S .235(et, reb)202.285 96 R .236
+(uild the alias database if necessary and possible.)-.2 F .236
+(If this option is not)5.236 F(set,)189 108 Q/F2 10/Times-Italic@0 SF(sendmail)
+3.385 E F1 .885(will ne)3.385 F -.15(ve)-.25 G 3.385(rr).15 G(eb)292.96 108 Q
+.885(uild the alias database unless e)-.2 F .885(xplicitly requested)-.15 F
+(using)189 120 Q F0(\255bi)2.5 E F1(.)A(e)117 136.2 Q F2(x)A F1
+(Dispose of errors using mode)189 136.2 Q F2(x)2.5 E F1 5(.T)C(he v)327.31
+136.2 Q(alues for)-.25 E F2(x)2.5 E F1(are:)2.5 E 15(pP)229 152.4 S
+(rint error messages \(def)254.56 152.4 Q(ault\))-.1 E 15(qN)229 164.4 S 2.5
+(om)256.22 164.4 S(essages, just gi)271.5 164.4 Q .3 -.15(ve ex)-.25 H
+(it status).15 E 12.22(mM)229 176.4 S(ail back errors)257.89 176.4 Q 12.78(wW)
+229 188.4 S(rite back errors \(mail if user not logged in\))258.44 188.4 Q
+15.56(eM)229 200.4 S(ail back errors and gi)257.89 200.4 Q .3 -.15(ve z)-.25 H
+(ero e).15 E(xit stat al)-.15 E -.1(wa)-.1 G(ys).1 E(E)117 220.8 Q F2
 (\214le/messa)A -.1(ge)-.1 G F1 .549
 (\214le/messa)A -.1(ge)-.1 G F1 .549
-(Prepend error messages with the indicated message.)189 385.8 R .549(If it be)
-5.549 F .549(gins with a slash,)-.15 F .107(it is assumed to be the pathname o\
-f a \214le containing a message \(this is the rec-)189 397.8 R 1.317
-(ommended setting\).)189 409.8 R 1.316(Otherwise, it is a literal message.)
-6.317 F 1.316(The error \214le might)6.316 F .99
+(Prepend error messages with the indicated message.)189 220.8 R .549(If it be)
+5.549 F .55(gins with a slash,)-.15 F .107(it is assumed to be the pathname of\
+ a \214le containing a message \(this is the rec-)189 232.8 R 1.316
+(ommended setting\).)189 244.8 R 1.316(Otherwise, it is a literal message.)
+6.316 F 1.317(The error \214le might)6.317 F .99
 (contain the name, email address, and/or phone number of a local postmaster)189
 (contain the name, email address, and/or phone number of a local postmaster)189
-421.8 R .429(who could pro)189 433.8 R .429(vide assistance in to end users.)
--.15 F .428(If the option is missing or null,)5.429 F .342
-(or if it names a \214le which does not e)189 445.8 R .342
-(xist or which is not readable, no message)-.15 F(is printed.)189 457.8 Q 68.67
-(fS)117 474 S -2.25 -.2(av e)194.56 474 T 2.399
-(Unix-style \231From\232 lines at the front of headers.)5.1 F 2.399
-(Normally the)7.399 F 4.899(ya)-.15 G(re)496.23 474 Q
-(assumed redundant and discarded.)189 486 Q(F)117 502.2 Q F2(mode)A F1
-(The \214le mode for queue \214les.)189 502.2 Q(g)117 518.4 Q F2(n)A F1
-(Set the def)189 518.4 Q(ault group id for mailers to run in to)-.1 E F2(n)2.5
-E F1 5(.D)C(ef)397.77 518.4 Q(aults to 1.)-.1 E 64.78(GA)117 534.6 S(llo)196.22
-534.6 Q 3.491(wf)-.25 G .991(uzzy matching on the GECOS \214eld.)220.571 534.6
-R .992(If this \215ag is set, and the usual)5.991 F .794(user name lookups f)
-189 546.6 R .793(ail \(that is, there is no alias with this name and a)-.1 F F2
--.1(ge)3.293 G(tpw-).1 E(nam)189 558.6 Q F1 -.1(fa)3.701 G 1.201
+256.8 R .428(who could pro)189 268.8 R .428(vide assistance in to end users.)
+-.15 F .429(If the option is missing or null,)5.429 F .342
+(or if it names a \214le which does not e)189 280.8 R .342
+(xist or which is not readable, no message)-.15 F(is printed.)189 292.8 Q 68.67
+(fS)117 309 S -2.25 -.2(av e)194.56 309 T 2.399
+(Unix-style \231From\232 lines at the front of headers.)5.099 F 2.399
+(Normally the)7.399 F 4.9(ya)-.15 G(re)496.23 309 Q
+(assumed redundant and discarded.)189 321 Q(F)117 337.2 Q F2(mode)A F1
+(The \214le mode for queue \214les.)189 337.2 Q(g)117 353.4 Q F2(n)A F1 .934
+(Set the def)189 353.4 R .933(ault group id for mailers to run in to)-.1 F F2
+(n)3.433 E F1 5.933(.D)C(ef)408.968 353.4 Q .933(aults to 1.)-.1 F .933(The v)
+5.933 F(alue)-.25 E(can also be gi)189 365.4 Q -.15(ve)-.25 G 2.5(na).15 G 2.5
+(sas)264.69 365.4 S(ymbolic group name.)281.91 365.4 Q 64.78(GA)117 381.6 S
+(llo)196.22 381.6 Q 3.491(wf)-.25 G .991(uzzy matching on the GECOS \214eld.)
+220.571 381.6 R .992(If this \215ag is set, and the usual)5.991 F .794
+(user name lookups f)189 393.6 R .793
+(ail \(that is, there is no alias with this name and a)-.1 F F2 -.1(ge)3.293 G
+(tpw-).1 E(nam)189 405.6 Q F1 -.1(fa)3.701 G 1.201
 (ils\), sequentially search the passw).1 F 1.202
 (ils\), sequentially search the passw).1 F 1.202
-(ord \214le for a matching entry in the)-.1 F 1.446(GECOS \214eld.)189 570.6 R
+(ord \214le for a matching entry in the)-.1 F 1.446(GECOS \214eld.)189 417.6 R
 1.446(This also requires that MA)6.446 F 1.446(TCHGECOS be turned on during)
 1.446(This also requires that MA)6.446 F 1.446(TCHGECOS be turned on during)
--1.11 F 2.5(compilation. This)189 582.6 R(option is not recommended.)2.5 E(h)
-117 598.8 Q F2(N)A F1 1.273(The maximum hop count.)189 598.8 R 1.274
+-1.11 F 2.5(compilation. This)189 429.6 R(option is not recommended.)2.5 E(h)
+117 445.8 Q F2(N)A F1 1.273(The maximum hop count.)189 445.8 R 1.274
 (Messages that ha)6.273 F 1.574 -.15(ve b)-.2 H 1.274(een processed more than)
 .15 F F2(N)3.774 E F1(times are assumed to be in a loop and are rejected.)189
 (Messages that ha)6.273 F 1.574 -.15(ve b)-.2 H 1.274(een processed more than)
 .15 F F2(N)3.774 E F1(times are assumed to be in a loop and are rejected.)189
-610.8 Q(Def)5 E(aults to 25.)-.1 E(H)117 627 Q F2(\214le)A F1
-(Specify the help \214le for SMTP)189 627 Q(.)-1.11 E 69.22(iI)117 643.2 S
-1.015(gnore dots in incoming messages.)192.33 643.2 R 1.014(This is al)6.014 F
--.1(wa)-.1 G 1.014(ys disabled \(that is, dots are).1 F(al)189 655.2 Q -.1(wa)
--.1 G(ys accepted\) when reading SMTP mail.).1 E 68.67(II)117 671.4 S .619
-(nsist that the BIND name serv)192.33 671.4 R .619(er be running to resolv)-.15
-F 3.119(eh)-.15 G .62(ost names.)421.52 671.4 R .62(If this is)5.62 F .945
-(not set and the name serv)189 683.4 R .945(er is not running, the)-.15 F F2
+457.8 Q(Def)5 E(aults to 25.)-.1 E(H)117 474 Q F2(\214le)A F1
+(Specify the help \214le for SMTP)189 474 Q(.)-1.11 E 69.22(iI)117 490.2 S
+1.015(gnore dots in incoming messages.)192.33 490.2 R 1.014(This is al)6.014 F
+-.1(wa)-.1 G 1.014(ys disabled \(that is, dots are).1 F(al)189 502.2 Q -.1(wa)
+-.1 G(ys accepted\) when reading SMTP mail.).1 E 68.67(II)117 518.4 S .619
+(nsist that the BIND name serv)192.33 518.4 R .619(er be running to resolv)-.15
+F 3.119(eh)-.15 G .62(ost names.)421.52 518.4 R .62(If this is)5.62 F .945
+(not set and the name serv)189 530.4 R .945(er is not running, the)-.15 F F2
 (/etc/hosts)3.445 E F1 .945(\214le will be consid-)3.445 F .187(ered complete.)
 (/etc/hosts)3.445 E F1 .945(\214le will be consid-)3.445 F .187(ered complete.)
-189 695.4 R .188(In general, you do w)5.187 F .188
+189 542.4 R .188(In general, you do w)5.187 F .188
 (ant to set this option if your)-.1 F F2(/etc/hosts)2.688 E F1(\214le)2.688 E
 (ant to set this option if your)-.1 F F2(/etc/hosts)2.688 E F1(\214le)2.688 E
-.412(does not include all hosts kno)189 707.4 R .412
+.412(does not include all hosts kno)189 554.4 R .412
 (wn to you or if you are using the MX \(mail for)-.25 F(-)-.2 E -.1(wa)189
 (wn to you or if you are using the MX \(mail for)-.25 F(-)-.2 E -.1(wa)189
-719.4 S 2.03(rding\) feature of the BIND name serv).1 F(er)-.15 E 7.03(.T)-.55
-G 2.03(he name serv)385.96 719.4 R 2.03(er will still be)-.15 F EP
-%%Page: 33 30
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-33)452.9 60 Q/F1 10/Times-Roman@0 SF .56(consulted e)189 96 R -.15(ve)
--.25 G 3.06(ni).15 G 3.06(ft)254.71 96 S .56(his option is not set, b)263.88 96
-R(ut)-.2 E/F2 10/Times-Italic@0 SF(sendmail)3.06 E F1 .56
-(will feel free to resort to)3.06 F(reading)189 108 Q F2(/etc/hosts)3.052 E F1
-.552(if the name serv)3.052 F .553(er is not a)-.15 F -.25(va)-.2 G 3.053
-(ilable. Thus,).25 F .553(you should)3.053 F F2(ne)3.053 E(ver)-.15 E F1
-(set this option if you do not run the name serv)189 120 Q(er)-.15 E(.)-.55 E
-69.22(jI)117 136.2 S 3.129(fs)192.33 136.2 S .628
+566.4 S .314(rding\) feature of the BIND name serv).1 F(er)-.15 E 5.315(.T)-.55
+G .315(he name serv)373.95 566.4 R .315(er will still be con-)-.15 F 1.523
+(sulted e)189 578.4 R -.15(ve)-.25 G 4.023(ni).15 G 4.023(ft)242.196 578.4 S
+1.523(his option is not set, b)252.329 578.4 R(ut)-.2 E F2(sendmail)4.023 E F1
+1.522(will feel free to resort to)4.023 F(reading)189 590.4 Q F2(/etc/hosts)
+3.052 E F1 .552(if the name serv)3.052 F .553(er is not a)-.15 F -.25(va)-.2 G
+3.053(ilable. Thus,).25 F .553(you should)3.053 F F2(ne)3.053 E(ver)-.15 E F1
+(set this option if you do not run the name serv)189 602.4 Q(er)-.15 E(.)-.55 E
+69.22(jI)117 618.6 S 3.129(fs)192.33 618.6 S .628
 (et, send error messages in MIME format \(see RFC1341 and RFC1344 for)202.679
 (et, send error messages in MIME format \(see RFC1341 and RFC1344 for)202.679
-136.2 R(details\).)189 148.2 Q(J)117 164.4 Q F2(path)A F1 4.923
-(Set the path for searching for users' .forw)189 164.4 R 4.923(ard \214les.)-.1
-F 4.923(The def)9.923 F 4.923(ault is)-.1 F(\231$z/.forw)189 176.4 Q 2.869
+618.6 R(details\).)189 630.6 Q(J)117 646.8 Q F2(path)A F1 4.923
+(Set the path for searching for users' .forw)189 646.8 R 4.923(ard \214les.)-.1
+F 4.923(The def)9.923 F 4.923(ault is)-.1 F(\231$z/.forw)189 658.8 Q 2.869
 (ard\232. Some)-.1 F .368
 (sites that use the automounter may prefer to change this)2.869 F .676
 (ard\232. Some)-.1 F .368
 (sites that use the automounter may prefer to change this)2.869 F .676
-(to \231/v)189 188.4 R(ar/forw)-.25 E .676
+(to \231/v)189 670.8 R(ar/forw)-.25 E .676
 (ard/$u\232 to search a \214le with the same name as the user in a sys-)-.1 F
 (ard/$u\232 to search a \214le with the same name as the user in a sys-)-.1 F
-.925(tem directory)189 200.4 R 5.925(.I)-.65 G 3.425(tc)254.63 200.4 S .924
-(an also be set to a sequence of paths separated by colons;)265.275 200.4 R F2
-(sendmail)189 212.4 Q F1 .645
+.925(tem directory)189 682.8 R 5.925(.I)-.65 G 3.425(tc)254.63 682.8 S .924
+(an also be set to a sequence of paths separated by colons;)265.275 682.8 R F2
+(sendmail)189 694.8 Q F1 .645
 (stops at the \214rst \214le it can successfully and safely open.)3.145 F -.15
 (stops at the \214rst \214le it can successfully and safely open.)3.145 F -.15
-(Fo)5.646 G 3.146(re).15 G(xam-)483.45 212.4 Q 1.535(ple, \231/v)189 224.4 R
+(Fo)5.646 G 3.146(re).15 G(xam-)483.45 694.8 Q 1.535(ple, \231/v)189 706.8 R
 (ar/forw)-.25 E(ard/$u:$z/.forw)-.1 E 1.535(ard\232 will search \214rst in /v)
 (ar/forw)-.25 E(ard/$u:$z/.forw)-.1 E 1.535(ard\232 will search \214rst in /v)
--.1 F(ar/forw)-.25 E(ard/)-.1 E F2(username)A F1(and then in)189 236.4 Q F2
+-.1 F(ar/forw)-.25 E(ard/)-.1 E F2(username)A F1(and then in)189 718.8 Q F2
 (~username)2.5 E F1(/.forw)A(ard \(b)-.1 E
 (~username)2.5 E F1(/.forw)A(ard \(b)-.1 E
-(ut only if the \214rst \214le does not e)-.2 E(xist\).)-.15 E(k)117 252.6 Q F2
-(N)A F1 .196
-(The maximum number of open connections that will be cached at a time.)189
-252.6 R(The)5.197 E(def)189 264.6 Q .567(ault is one.)-.1 F .567
+(ut only if the \214rst \214le does not e)-.2 E(xist\).)-.15 E EP
+%%Page: 36 31
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-36 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(k)117 96 Q/F2 10
+/Times-Italic@0 SF(N)A F1 .196
+(The maximum number of open connections that will be cached at a time.)189 96 R
+(The)5.197 E(def)189 108 Q .567(ault is one.)-.1 F .567
 (This delays closing the the current connection until either this)5.567 F(in)
 (This delays closing the the current connection until either this)5.567 F(in)
-189 276.6 Q -.2(vo)-.4 G .516
-(cation of sendmail needs to connect to another host or it terminates.).2 F
-(Set-)5.516 E 1.959(ting it to zero def)189 288.6 R 1.959
-(aults to the old beha)-.1 F(vior)-.2 E 4.458(,t)-.4 G 1.958
-(hat is, connections are closed)379.248 288.6 R(immediately)189 300.6 Q(.)-.65
-E(K)117 316.8 Q F2(timeout)A F1 .882
+189 120 Q -.2(vo)-.4 G .515(cation of).2 F F2(sendmail)3.015 E F1 .516
+(needs to connect to another host or it terminates.)3.016 F(Set-)5.516 E 1.959
+(ting it to zero def)189 132 R 1.959(aults to the old beha)-.1 F(vior)-.2 E
+4.458(,t)-.4 G 1.958(hat is, connections are closed)379.248 132 R(immediately)
+189 144 Q(.)-.65 E(K)117 160.2 Q F2(timeout)A F1 .882
 (The maximum amount of time a cached connection will be permitted to idle)189
 (The maximum amount of time a cached connection will be permitted to idle)189
-316.8 R 2.746(without acti)189 328.8 R(vity)-.25 E 7.746(.I)-.65 G 5.246(ft)
-267.482 328.8 S 2.746(his time is e)278.838 328.8 R 2.746
-(xceeded, the connection is immediately)-.15 F 4.422(closed. This)189 340.8 R
+160.2 R 2.746(without acti)189 172.2 R(vity)-.25 E 7.746(.I)-.65 G 5.246(ft)
+267.482 172.2 S 2.746(his time is e)278.838 172.2 R 2.746
+(xceeded, the connection is immediately)-.15 F 4.422(closed. This)189 184.2 R
 -.25(va)4.422 G 1.923(lue should be small \(on the order of ten minutes\).).25
 -.25(va)4.422 G 1.923(lue should be small \(on the order of ten minutes\).).25
-F(Before)6.923 E F0(sendmail)189 352.8 Q F1 1.084
-(uses a cached connection, it al)3.584 F -.1(wa)-.1 G 1.083
+F(Before)6.923 E F2(sendmail)189 196.2 Q F1 1.287
+(uses a cached connection, it al)3.787 F -.1(wa)-.1 G 1.286
 (ys sends a NOOP \(no operation\)).1 F 2.058
 (ys sends a NOOP \(no operation\)).1 F 2.058
-(command to check the connection; if this f)189 364.8 R 2.058
-(ails, it reopens the connection.)-.1 F .478(This k)189 376.8 R .478
+(command to check the connection; if this f)189 208.2 R 2.058
+(ails, it reopens the connection.)-.1 F .478(This k)189 220.2 R .478
 (eeps your end from f)-.1 F .478(ailing if the other end times out.)-.1 F .478
 (eeps your end from f)-.1 F .478(ailing if the other end times out.)-.1 F .478
-(The point of this)5.478 F 3.099(option is to be a good netw)189 388.8 R 3.099
+(The point of this)5.478 F 3.099(option is to be a good netw)189 232.2 R 3.099
 (ork neighbor and a)-.1 F -.2(vo)-.2 G 3.1(id using up e).2 F(xcessi)-.15 E
 (ork neighbor and a)-.1 F -.2(vo)-.2 G 3.1(id using up e).2 F(xcessi)-.15 E
--.15(ve)-.25 G(resources on the other end.)189 400.8 Q(The def)5 E
-(ault is \214v)-.1 E 2.5(em)-.15 G(inutes.)383.99 400.8 Q 69.22(lI)117 417 S
-3.14(ft)192.33 417 S .64(here is an \231Errors-T)201.58 417 R .64
+-.15(ve)-.25 G(resources on the other end.)189 244.2 Q(The def)5 E
+(ault is \214v)-.1 E 2.5(em)-.15 G(inutes.)383.99 244.2 Q 69.22(lI)117 260.4 S
+3.14(ft)192.33 260.4 S .64(here is an \231Errors-T)201.58 260.4 R .64
 (o:\232 header)-.8 F 3.14(,s)-.4 G .64
 (o:\232 header)-.8 F 3.14(,s)-.4 G .64
-(end error messages to the addresses listed)333.53 417 R 3.95(there. The)189
-429 R 3.95(yn)-.15 G 1.451(ormally go to the en)247.29 429 R -.15(ve)-.4 G
+(end error messages to the addresses listed)333.53 260.4 R 3.95(there. The)189
+272.4 R 3.95(yn)-.15 G 1.451(ormally go to the en)247.29 272.4 R -.15(ve)-.4 G
 1.451(lope sender).15 F 6.451(.U)-.55 G 1.451(se of this option causes)405.426
 1.451(lope sender).15 F 6.451(.U)-.55 G 1.451(se of this option causes)405.426
-429 R(sendmail to violate RFC 1123.)189 441 Q(L)117 457.2 Q F2(n)A F1
-(Set the def)189 457.2 Q(ault log le)-.1 E -.15(ve)-.25 G 2.5(lt).15 G(o)288.77
-457.2 Q F2(n)2.5 E F1 5(.D)C(ef)315.99 457.2 Q(aults to 9.)-.1 E 64.22(mS)117
-473.4 S(end to me too, e)194.56 473.4 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fIa)
-278.04 473.4 S 2.5(mi)294.14 473.4 S 2.5(na)307.2 473.4 S 2.5(na)319.14 473.4 S
-(lias e)331.08 473.4 Q(xpansion.)-.15 E(M)117 489.6 Q F2 1.666(xv)C(alue)-1.666
-E F1 1.313(Set the macro)189 489.6 R F2(x)3.812 E F1(to)3.812 E F2(value)3.812
-E F1 6.312(.T)C 1.312(his is intended only for use from the command)306.854
-489.6 R(line.)189 501.6 Q 67(nV)117 517.8 S
-(alidate the RHS of aliases when reb)195.11 517.8 Q
-(uilding the alias database.)-.2 E 67(oA)117 534 S 1.786
+272.4 R F2(sendmail)189 284.4 Q F1(to violate RFC 1123.)2.5 E(L)117 300.6 Q F2
+(n)A F1(Set the def)189 300.6 Q(ault log le)-.1 E -.15(ve)-.25 G 2.5(lt).15 G
+(o)288.77 300.6 Q F2(n)2.5 E F1 5(.D)C(ef)315.99 300.6 Q(aults to 9.)-.1 E
+64.22(mS)117 316.8 S(end to me too, e)194.56 316.8 Q -.15(ve)-.25 G 2.5(ni).15
+G 2.5(fIa)278.04 316.8 S 2.5(mi)294.14 316.8 S 2.5(na)307.2 316.8 S 2.5(na)
+319.14 316.8 S(lias e)331.08 316.8 Q(xpansion.)-.15 E(M)117 333 Q F2 1.666(xv)C
+(alue)-1.666 E F1 1.313(Set the macro)189 333 R F2(x)3.812 E F1(to)3.812 E F2
+(value)3.812 E F1 6.312(.T)C 1.312
+(his is intended only for use from the command)306.854 333 R(line.)189 345 Q 67
+(nV)117 361.2 S(alidate the RHS of aliases when reb)195.11 361.2 Q
+(uilding the alias database.)-.2 E 67(oA)117 377.4 S 1.786
 (ssume that the headers may be in old format, i.e., spaces delimit names.)
 (ssume that the headers may be in old format, i.e., spaces delimit names.)
-196.22 534 R .433(This actually turns on an adapti)189 546 R .733 -.15(ve a)
--.25 H .433(lgorithm: if an).15 F 2.932(yr)-.15 G .432
-(ecipient address contains)403.156 546 R 5.089(ac)189 558 S 2.589
-(omma, parenthesis, or angle brack)202.969 558 R 2.589
-(et, it will be assumed that commas)-.1 F .485(already e)189 570 R 2.985
+196.22 377.4 R .433(This actually turns on an adapti)189 389.4 R .733 -.15
+(ve a)-.25 H .433(lgorithm: if an).15 F 2.932(yr)-.15 G .432
+(ecipient address contains)403.156 389.4 R 5.089(ac)189 401.4 S 2.589
+(omma, parenthesis, or angle brack)202.969 401.4 R 2.589
+(et, it will be assumed that commas)-.1 F .485(already e)189 413.4 R 2.985
 (xist. If)-.15 F .485(this \215ag is not on, only commas delimit names.)2.985 F
 (xist. If)-.15 F .485(this \215ag is not on, only commas delimit names.)2.985 F
-.484(Headers are)5.484 F(al)189 582 Q -.1(wa)-.1 G
-(ys output with commas between the names.).1 E(O)117 598.2 Q F2(options)A F1
-(Set serv)189 598.2 Q(er SMTP options.)-.15 E(The options are)5 E F2 -.1(ke)2.5
+.484(Headers are)5.484 F(al)189 425.4 Q -.1(wa)-.1 G
+(ys output with commas between the names.).1 E(O)117 441.6 Q F2(options)A F1
+(Set serv)189 441.6 Q(er SMTP options.)-.15 E(The options are)5 E F2 -.1(ke)2.5
 G(y=value)-.2 E F1 2.5(pairs. Kno)2.5 F(wn k)-.25 E -.15(ey)-.1 G 2.5(sa).15 G
 G(y=value)-.2 E F1 2.5(pairs. Kno)2.5 F(wn k)-.25 E -.15(ey)-.1 G 2.5(sa).15 G
-(re:)488.82 598.2 Q 52.83(Port Name/number)229 614.4 R(of listening port \(def)
-2.5 E(aults to "smtp"\))-.1 E 48.95(Addr Address)229 626.4 R(mask \(def)2.5 E
-(aults IN)-.1 E(ADDR_ANY\))-.35 E -.15(Fa)229 638.4 S 41.31(mily Address).15 F
--.1(fa)2.5 G(mily \(def).1 E(aults to INET\))-.1 E 44.5(Listen Size)229 650.4 R
-(of listen queue \(def)2.5 E(aults to 10\))-.1 E(The)189 666.6 Q F2(Addr)4.113
-E F1 1.614(ess mask may be a numeric address in dot notation or a netw)B(ork)
--.1 E(name.)189 678.6 Q(p)117 694.8 Q F2(opt,opt,...)1.666 E F1 1.221
-(Set the pri)189 694.8 R -.25(va)-.25 G -.15(cy).25 G F2(opt)3.871 E F1 3.721
-(ions. `)B(`Pri)-.74 E -.25(va)-.25 G -.15(cy).25 G 2.701 -.74('' i).15 H 3.721
-(sr).74 G 1.221(eally a misnomer; man)351.856 694.8 R 3.721(yo)-.15 G 3.72(ft)
-460.47 694.8 S 1.22(hese are)470.3 694.8 R 2.418(just a w)189 706.8 R 2.418
+(re:)488.82 441.6 Q 52.83(Port Name/number)229 457.8 R(of listening port \(def)
+2.5 E(aults to "smtp"\))-.1 E 48.95(Addr Address)229 469.8 R(mask \(def)2.5 E
+(aults IN)-.1 E(ADDR_ANY\))-.35 E -.15(Fa)229 481.8 S 41.31(mily Address).15 F
+-.1(fa)2.5 G(mily \(def).1 E(aults to INET\))-.1 E 44.5(Listen Size)229 493.8 R
+(of listen queue \(def)2.5 E(aults to 10\))-.1 E(The)189 510 Q F2(Addr)4.113 E
+F1 1.614(ess mask may be a numeric address in dot notation or a netw)B(ork)-.1
+E(name.)189 522 Q(p)117 538.2 Q F2(opt,opt,...)1.666 E F1 1.221(Set the pri)189
+538.2 R -.25(va)-.25 G -.15(cy).25 G F2(opt)3.871 E F1 3.721(ions. `)B(`Pri)
+-.74 E -.25(va)-.25 G -.15(cy).25 G 2.701 -.74('' i).15 H 3.721(sr).74 G 1.221
+(eally a misnomer; man)351.856 538.2 R 3.721(yo)-.15 G 3.72(ft)460.47 538.2 S
+1.22(hese are)470.3 538.2 R 2.418(just a w)189 550.2 R 2.418
 (ay of insisting on stricter adherence to the SMTP protocol.)-.1 F(The)7.419 E
 (ay of insisting on stricter adherence to the SMTP protocol.)-.1 F(The)7.419 E
-F2(opt)189 718.8 Q F1(ions can be selected from:)A EP
-%%Page: 34 31
+F2(opt)189 562.2 Q F1(ions can be selected from:)A 40.26(public Allo)229 578.4
+R 2.5(wo)-.25 G(pen access)329.01 578.4 Q 11.38(needmailhelo Insist)229 590.4 R
+(on HELO or EHLO command before MAIL)2.5 E(neede)229 602.4 Q 9.87
+(xpnhelo Insist)-.15 F(on HELO or EHLO command before EXPN)2.5 E(noe)229 614.4
+Q 35.97(xpn Disallo)-.15 F 2.5(wE)-.25 G(XPN entirely)341.23 614.4 Q 12.5
+(needvrfyhelo Insist)229 626.4 R(on HELO or EHLO command before VRFY)2.5 E(no)
+229 638.4 Q 38.75(vrfy Disallo)-.15 F 2.5(wV)-.25 G(RFY entirely)342.34 638.4 Q
+14.71(restrictmailq Restrict)229 650.4 R(mailq command)2.5 E 19.16
+(restrictqrun Restrict)229 662.4 R(\255q command line \215ag)2.5 E(goa)229
+674.4 Q -.1(wa)-.15 G 36.91(yD).1 G(isallo)303.98 674.4 Q 2.5(we)-.25 G
+(ssentially all SMTP status queries)339.56 674.4 Q 1.566(The \231goa)189 690.6
+R -.1(wa)-.15 G 1.566(y\232 pseudo-\215ag sets all \215ags e).1 F 1.565
+(xcept \231restrictmailq\232 and \231restric-)-.15 F 4.298(tqrun\232. If)189
+702.6 R 1.799(mailq is restricted, only people in the same group as the queue)
+4.298 F .947(directory can print the queue.)189 714.6 R .946
+(If queue runs are restricted, only root and the)5.946 F EP
+%%Page: 37 32
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-34 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 40.26
-(public Allo)229 96 R 2.5(wo)-.25 G(pen access)329.01 96 Q 11.38
-(needmailhelo Insist)229 108 R(on HELO or EHLO command before MAIL)2.5 E(neede)
-229 120 Q 9.87(xpnhelo Insist)-.15 F(on HELO or EHLO command before EXPN)2.5 E
-(noe)229 132 Q 35.97(xpn Disallo)-.15 F 2.5(wE)-.25 G(XPN entirely)341.23 132 Q
-12.5(needvrfyhelo Insist)229 144 R(on HELO or EHLO command before VRFY)2.5 E
-(no)229 156 Q 38.75(vrfy Disallo)-.15 F 2.5(wV)-.25 G(RFY entirely)342.34 156 Q
-14.71(restrictmailq Restrict)229 168 R(mailq command)2.5 E(goa)229 180 Q -.1
-(wa)-.15 G 36.91(yD).1 G(isallo)303.98 180 Q 2.5(we)-.25 G
-(ssentially all SMTP status queries)339.56 180 Q 1.768(The \231goa)189 196.2 R
--.1(wa)-.15 G 1.768(y\232 pseudo-\215ag sets all \215ags e).1 F 1.768
-(xcept \231restrictmailq\232.)-.15 F 1.768(If mailq is)6.768 F .688(restricted\
-, only people in the same group as the queue directory can print the)189 208.2
-R(queue.)189 220.2 Q(P)117 236.4 Q/F2 10/Times-Italic@0 SF(postmaster)A F1
-1.115(If set, copies of error messages will be sent to the named)189 236.4 R F2
-(postmaster)3.614 E F1 6.114(.O)C(nly)491.22 236.4 Q .397(the header of the f)
-189 248.4 R .398(ailed message is sent.)-.1 F .398
-(Since most errors are user problems,)5.398 F .564
-(this is probably not a good idea on lar)189 260.4 R .563(ge sites, and ar)-.18
-F .563(guably contains all sorts)-.18 F .05(of pri)189 272.4 R -.25(va)-.25 G
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-37)452.9 60 Q/F1 10/Times-Roman@0 SF -.25(ow)189 96 S
+(ner of the queue directory can run the queue.).25 E(P)117 112.2 Q/F2 10
+/Times-Italic@0 SF(postmaster)A F1 1.115
+(If set, copies of error messages will be sent to the named)189 112.2 R F2
+(postmaster)3.615 E F1 6.115(.O)C(nly)491.22 112.2 Q .398(the header of the f)
+189 124.2 R .398(ailed message is sent.)-.1 F .397
+(Since most errors are user problems,)5.398 F .563
+(this is probably not a good idea on lar)189 136.2 R .564(ge sites, and ar)-.18
+F .564(guably contains all sorts)-.18 F .05(of pri)189 148.2 R -.25(va)-.25 G
 .35 -.15(cy v).25 H .05(iolations, b).15 F .05
 (ut it seems to be popular with certain operating systems)-.2 F -.15(ve)189
 .35 -.15(cy v).25 H .05(iolations, b).15 F .05
 (ut it seems to be popular with certain operating systems)-.2 F -.15(ve)189
-284.4 S(ndors.).15 E(q)117 300.6 Q F2(factor)A F1(Use)189 300.6 Q F2(factor)
-3.098 E F1 .597
-(as the multiplier in the map function to decide when to just queue)3.098 F
-.425(up jobs rather than run them.)189 312.6 R .425(This v)5.425 F .425
-(alue is di)-.25 F .426(vided by the dif)-.25 F .426(ference between)-.25 F
-1.064(the current load a)189 324.6 R -.15(ve)-.2 G 1.064(rage and the load a)
-.15 F -.15(ve)-.2 G 1.064(rage limit \().15 F F0(x)A F1 1.063
+160.2 S(ndors.).15 E(q)117 176.4 Q F2(factor)A F1(Use)189 176.4 Q F2(factor)
+3.097 E F1 .597
+(as the multiplier in the map function to decide when to just queue)3.097 F
+.426(up jobs rather than run them.)189 188.4 R .425(This v)5.425 F .425
+(alue is di)-.25 F .425(vided by the dif)-.25 F .425(ference between)-.25 F
+1.063(the current load a)189 200.4 R -.15(ve)-.2 G 1.064(rage and the load a)
+.15 F -.15(ve)-.2 G 1.064(rage limit \().15 F F0(x)A F1 1.064
 (\215ag\) to determine the)3.564 F(maximum message priority that will be sent.)
 (\215ag\) to determine the)3.564 F(maximum message priority that will be sent.)
-189 336.6 Q(Def)5 E(aults to 600000.)-.1 E(Q)117 352.8 Q F2(dir)A F1
-(Use the named)189 352.8 Q F2(dir)2.5 E F1(as the queue directory)2.5 E(.)-.65
-E(r)117 369 Q F2(timeouts)1.666 E F1 -.35(Ti)189 369 S 3.938(meout reads after)
-.35 F F2(time)6.438 E F1(interv)6.438 E 6.438(al. The)-.25 F F2(timeouts)6.438
-E F1(ar)6.438 E 3.938(gument is a list of)-.18 F F2 -.1(ke)189 381 S(ywor)-.2 E
-(d=value)-.37 E F1 3.61(pairs. The)3.61 F 1.11
+189 212.4 Q(Def)5 E(aults to 600000.)-.1 E(Q)117 228.6 Q F2(dir)A F1
+(Use the named)189 228.6 Q F2(dir)2.5 E F1(as the queue directory)2.5 E(.)-.65
+E(r)117 244.8 Q F2(timeouts)1.666 E F1 -.35(Ti)189 244.8 S 3.939
+(meout reads after).35 F F2(time)6.438 E F1(interv)6.438 E 6.438(al. The)-.25 F
+F2(timeouts)6.438 E F1(ar)6.438 E 3.938(gument is a list of)-.18 F F2 -.1(ke)
+189 256.8 S(ywor)-.2 E(d=value)-.37 E F1 3.61(pairs. The)3.61 F 1.11
 (recognized timeouts and their def)3.61 F 1.11(ault v)-.1 F 1.11(alues, and)
 (recognized timeouts and their def)3.61 F 1.11(ault v)-.1 F 1.11(alues, and)
--.25 F(their minimum v)189 393 Q
-(alues speci\214ed in RFC 1123 section 5.3.2 are:)-.25 E 23.6(initial w)229
-409.2 R(ait for initial greeting message [5m, 5m])-.1 E 29.72(helo reply)229
-421.2 R(to HELO or EHLO command [5m, none])2.5 E 29.16(mail reply)229 433.2 R
-(to MAIL command [10m, 5m])2.5 E 31.39(rcpt reply)229 445.2 R
-(to RCPT command [1h, 5m])2.5 E 16.94(datainit reply)229 457.2 R(to D)2.5 E
--1.21 -1.11(AT A)-.4 H(command [5m, 2m])3.61 E 8.06(datablock data)229 469.2 R
-(block read [1h, 3m])2.5 E 12.5(data\214nal reply)229 481.2 R(to \214nal `)2.5
-E(`.)-.74 E 1.48 -.74('' i)-.7 H 2.5(nd).74 G(ata [1h, 10m])363.47 481.2 Q 32.5
-(rset reply)229 493.2 R(to RSET command [5m, none])2.5 E 31.38(quit reply)229
-505.2 R(to Q)2.5 E(UIT command [2m, none])-.1 E 28.05(misc reply)229 517.2 R
-(to NOOP and VERB commands [2m, none])2.5 E 7.5(command command)229 529.2 R
-(read [1h, 5m])2.5 E .798(All b)189 545.4 R .798
-(ut \231command\232 apply to client SMTP)-.2 F 5.798(.F)-1.11 G .798
-(or back compatibility)373.406 545.4 R 3.299(,at)-.65 G(imeout)476.22 545.4 Q
-(with no `)189 557.4 Q(`k)-.74 E -.15(ey)-.1 G -.1(wo).15 G(rd=').1 E 2.5('p)
--.74 G(art will set all of the longer v)281.4 557.4 Q(alues.)-.25 E 65.33(RN)
-117 573.6 S(ormally)196.22 573.6 Q(,)-.65 E F2(sendmail)4.154 E F1 1.653
-(tries to eliminate an)4.154 F 4.153(yu)-.15 G 1.653(nnecessary e)371.721 573.6
-R 1.653(xplicit routes when)-.15 F .931
-(sending an error message \(as discussed in RFC 1123 \247 5.2.6\).)189 585.6 R
--.15(Fo)5.931 G 3.431(re).15 G(xample,)472.06 585.6 Q
-(when sending an error message to)189 597.6 Q(<@kno)229 613.8 Q(wn1,@kno)-.25 E
-(wn2,@unkno)-.25 E(wn:user@kno)-.25 E(wn3>)-.25 E F2(sendmail)189 630 Q F1 .46
-(will strip of)2.96 F 2.96(ft)-.25 G .46(he \231@kno)284.48 630 R .46
+-.25 F(their minimum v)189 268.8 Q
+(alues speci\214ed in RFC 1123 section 5.3.2 are:)-.25 E 23.6(initial w)229 285
+R(ait for initial greeting message [5m, 5m])-.1 E 29.72(helo reply)229 297 R
+(to HELO or EHLO command [5m, none])2.5 E 29.16(mail reply)229 309 R
+(to MAIL command [10m, 5m])2.5 E 31.39(rcpt reply)229 321 R
+(to RCPT command [1h, 5m])2.5 E 16.94(datainit reply)229 333 R(to D)2.5 E -1.21
+-1.11(AT A)-.4 H(command [5m, 2m])3.61 E 8.06(datablock data)229 345 R
+(block read [1h, 3m])2.5 E 12.5(data\214nal reply)229 357 R(to \214nal `)2.5 E
+(`.)-.74 E 1.48 -.74('' i)-.7 H 2.5(nd).74 G(ata [1h, 10m])363.47 357 Q 32.5
+(rset reply)229 369 R(to RSET command [5m, none])2.5 E 31.38(quit reply)229 381
+R(to Q)2.5 E(UIT command [2m, none])-.1 E 28.05(misc reply)229 393 R
+(to NOOP and VERB commands [2m, none])2.5 E 7.5(command command)229 405 R
+(read [1h, 5m])2.5 E 26.94(ident IDENT)229 417 R(protocol timeout [30s, none])
+2.5 E .799(All b)189 433.2 R .798(ut \231command\232 apply to client SMTP)-.2 F
+5.798(.F)-1.11 G .798(or back compatibility)373.408 433.2 R 3.298(,at)-.65 G
+(imeout)476.22 433.2 Q(with no `)189 445.2 Q(`k)-.74 E -.15(ey)-.1 G -.1(wo).15
+G(rd=').1 E 2.5('p)-.74 G(art will set all of the longer v)281.4 445.2 Q
+(alues.)-.25 E 65.33(RN)117 461.4 S(ormally)196.22 461.4 Q(,)-.65 E F2
+(sendmail)4.153 E F1 1.653(tries to eliminate an)4.153 F 4.153(yu)-.15 G 1.654
+(nnecessary e)371.718 461.4 R 1.654(xplicit routes when)-.15 F .931
+(sending an error message \(as discussed in RFC 1123 \247 5.2.6\).)189 473.4 R
+-.15(Fo)5.93 G 3.43(re).15 G(xample,)472.06 473.4 Q
+(when sending an error message to)189 485.4 Q(<@kno)229 501.6 Q(wn1,@kno)-.25 E
+(wn2,@unkno)-.25 E(wn:user@kno)-.25 E(wn3>)-.25 E F2(sendmail)189 517.8 Q F1
+.46(will strip of)2.96 F 2.96(ft)-.25 G .46(he \231@kno)284.48 517.8 R .46
 (wn1\232 in order to mak)-.25 F 2.96(et)-.1 G .46(he route as direct as)422.74
 (wn1\232 in order to mak)-.25 F 2.96(et)-.1 G .46(he route as direct as)422.74
-630 R 3.429(possible. Ho)189 642 R(we)-.25 E -.15(ve)-.25 G 1.729 -.4(r, i).15
-H 3.429(ft).4 G(he)284.057 642 Q F0(R)3.429 E F1 .929
+517.8 R 3.43(possible. Ho)189 529.8 R(we)-.25 E -.15(ve)-.25 G 1.73 -.4(r, i)
+.15 H 3.43(ft).4 G(he)284.06 529.8 Q F0(R)3.43 E F1 .929
 (option is set, this will be disabled, and the mail)3.429 F .362
 (option is set, this will be disabled, and the mail)3.429 F .362
-(will be sent to the \214rst address in the route, e)189 654 R -.15(ve)-.25 G
-2.862(ni).15 G 2.862(fl)391.452 654 S .362(ater addresses are kno)400.424 654 R
-(wn.)-.25 E(This may be useful if you are caught behind a \214re)189 666 Q -.1
-(wa)-.25 G(ll.).1 E 68.11(sB)117 682.2 S 2.729(es)195.67 682.2 S(uper)206.729
-682.2 Q .229(-safe when running things, i.e., al)-.2 F -.1(wa)-.1 G .229
+(will be sent to the \214rst address in the route, e)189 541.8 R -.15(ve)-.25 G
+2.862(ni).15 G 2.862(fl)391.452 541.8 S .362(ater addresses are kno)400.424
+541.8 R(wn.)-.25 E(This may be useful if you are caught behind a \214re)189
+553.8 Q -.1(wa)-.25 G(ll.).1 E 68.11(sB)117 570 S 2.73(es)195.67 570 S(uper)
+206.73 570 Q .229(-safe when running things, i.e., al)-.2 F -.1(wa)-.1 G .229
 (ys instantiate the queue \214le, e).1 F -.15(ve)-.25 G(n).15 E .739
 (ys instantiate the queue \214le, e).1 F -.15(ve)-.25 G(n).15 E .739
-(if you are going to attempt immediate deli)189 694.2 R -.15(ve)-.25 G(ry).15 E
+(if you are going to attempt immediate deli)189 582 R -.15(ve)-.25 G(ry).15 E
 (.)-.65 E F2(Sendmail)5.739 E F1(al)3.239 E -.1(wa)-.1 G .739(ys instantiates)
 (.)-.65 E F2(Sendmail)5.739 E F1(al)3.239 E -.1(wa)-.1 G .739(ys instantiates)
-.1 F(the queue \214le before returning control the the client under an)189
-706.2 Q 2.5(yc)-.15 G(ircumstances.)444.07 706.2 Q EP
-%%Page: 35 32
+.1 F(the queue \214le before returning control the the client under an)189 594
+Q 2.5(yc)-.15 G(ircumstances.)444.07 594 Q(S)117 610.2 Q F2(\214le)A F1
+(Log statistics in the named)189 610.2 Q F2(\214le)2.5 E F1(.)A(t)117 626.4 Q
+F2(tzinfo)A F1 .717(Set the local time zone info to)189 626.4 R F2(tzinfo)3.217
+E F1 3.216<8a66>3.217 G .716(or e)358.502 626.4 R .716
+(xample, \231PST8PDT\232.)-.15 F(Actually)5.716 E(,)-.65 E .314
+(if this is not set, the TZ en)189 638.4 R .314(vironment v)-.4 F .315
+(ariable is cleared \(so the system def)-.25 F(ault)-.1 E .551
+(is used\); if set b)189 650.4 R .551(ut null, the user')-.2 F 3.051(sT)-.55 G
+3.051(Zv)334.038 650.4 S .55(ariable is used, and if set and non-null)347.949
+650.4 R(the TZ v)189 662.4 Q(ariable is set to this v)-.25 E(alue.)-.25 E(T)117
+678.6 Q F2(rtime/wtime)A F1 1.603(Set the queue timeout to)189 678.6 R F2
+(rtime)4.103 E F1 6.603(.A)C 1.603(fter this interv)334.168 678.6 R 1.604
+(al, messages that ha)-.25 F 1.904 -.15(ve n)-.2 H(ot).15 E 1.252
+(been successfully sent will be returned to the sender)189 690.6 R 6.251(.D)
+-.55 G(ef)422.727 690.6 Q 1.251(aults to \214v)-.1 F 3.751(ed)-.15 G(ays.)
+488.17 690.6 Q .546(The optional)189 702.6 R F2(wtime)3.046 E F1 .546
+(is the time after which a w)3.046 F .546(arning message is sent.)-.1 F .546
+(If it is)5.546 F(missing or zero then no w)189 714.6 Q
+(arning messages are sent.)-.1 E EP
+%%Page: 38 33
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-35)452.9 60 Q/F1 10/Times-Roman@0 SF(S)117 96 Q/F2 10/Times-Italic@0 SF
-(\214le)A F1(Log statistics in the named)189 96 Q F2(\214le)2.5 E F1(.)A(t)117
-112.2 Q F2(S,D)A F1 .798(Set the local time zone name to)189 112.2 R F2(S)3.299
-E F1 .799(for standard time and)3.299 F F2(D)3.299 E F1 .799
-(for daylight time;)3.299 F(this is only used under v)189 124.2 Q(ersion six.)
--.15 E(T)117 140.4 Q F2(rtime/wtime)A F1 1.604(Set the queue timeout to)189
-140.4 R F2(rtime)4.103 E F1 6.603(.A)C 1.603(fter this interv)334.172 140.4 R
-1.603(al, messages that ha)-.25 F 1.903 -.15(ve n)-.2 H(ot).15 E 1.251
-(been successfully sent will be returned to the sender)189 152.4 R 6.252(.D)
--.55 G(ef)422.724 152.4 Q 1.252(aults to \214v)-.1 F 3.752(ed)-.15 G(ays.)
-488.17 152.4 Q .546(The optional)189 164.4 R F2(wtime)3.046 E F1 .546
-(is the time after which a w)3.046 F .546(arning message is sent.)-.1 F .546
-(If it is)5.546 F(missing or zero then no w)189 176.4 Q
-(arning messages are sent.)-.1 E(u)117 192.6 Q F2(n)A F1 .175(Set the def)189
-192.6 R .175(ault userid for mailers to)-.1 F F2(n)2.675 E F1 5.175(.M)C .175
-(ailers without the)355.28 192.6 R F2(S)2.676 E F1 .176(\215ag in the mailer)
-2.676 F(de\214nition will run as this user)189 204.6 Q 5(.D)-.55 G(ef)322.34
-204.6 Q(aults to 1.)-.1 E(U)117 220.8 Q F2(udbspec)A F1
-(The user database speci\214cation.)189 220.8 Q 67(vR)117 237 S .412(un in v)
-195.67 237 R .412(erbose mode.)-.15 F .412(If this is set,)5.412 F F2(sendmail)
-2.911 E F1 .411(adjusts options)2.911 F F0(c)2.911 E F1(\(don')2.911 E 2.911
-(tc)-.18 G(onnect)477.34 237 Q .427(to e)189 249 R(xpensi)-.15 E .727 -.15
-(ve m)-.25 H .427(ailers\) and).15 F F0(d)2.927 E F1(\(deli)2.928 E -.15(ve)
--.25 G .428(ry mode\) so that all mail is deli).15 F -.15(ve)-.25 G .428
-(red com-).15 F .048
-(pletely in a single job so that you can see the entire deli)189 261 R -.15(ve)
--.25 G .048(ry process.).15 F(Option)5.048 E F0(v)2.548 E F1(should)189 273 Q
-F2(ne)3.389 E(ver)-.15 E F1 .889
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-38 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(u)117 96 Q/F2 10
+/Times-Italic@0 SF(n)A F1 .176(Set the def)189 96 R .176
+(ault userid for mailers to)-.1 F F2(n)2.675 E F1 5.175(.M)C .175
+(ailers without the)355.285 96 R F2(S)2.675 E F1 .175(\215ag in the mailer)
+2.675 F .083(de\214nition will run as this user)189 108 R 5.084(.D)-.55 G(ef)
+322.84 108 Q .084(aults to 1.)-.1 F .084(The v)5.084 F .084
+(alue can also be gi)-.25 F -.15(ve)-.25 G 2.584(na).15 G 2.584(sa)493.086 108
+S(symbolic user name.)189 120 Q(U)117 136.2 Q F2(udbspec)A F1
+(The user database speci\214cation.)189 136.2 Q 67(vR)117 152.4 S .412(un in v)
+195.67 152.4 R .412(erbose mode.)-.15 F .412(If this is set,)5.412 F F2
+(sendmail)2.911 E F1 .411(adjusts options)2.911 F F0(c)2.911 E F1(\(don')2.911
+E 2.911(tc)-.18 G(onnect)477.34 152.4 Q .427(to e)189 164.4 R(xpensi)-.15 E
+.727 -.15(ve m)-.25 H .427(ailers\) and).15 F F0(d)2.927 E F1(\(deli)2.928 E
+-.15(ve)-.25 G .428(ry mode\) so that all mail is deli).15 F -.15(ve)-.25 G
+.428(red com-).15 F .048
+(pletely in a single job so that you can see the entire deli)189 176.4 R -.15
+(ve)-.25 G .048(ry process.).15 F(Option)5.048 E F0(v)2.548 E F1(should)189
+188.4 Q F2(ne)3.389 E(ver)-.15 E F1 .889
 (be set in the con\214guration \214le; it is intended for command line)3.389 F
 (be set in the con\214guration \214le; it is intended for command line)3.389 F
-(use only)189 285 Q(.)-.65 E(V)117 301.2 Q F2(fallbac)A(khost)-.2 E F1 .964
-(If speci\214ed, the)189 301.2 R F2(fallbac)3.464 E(khost)-.2 E F1 .964
-(acts lik)3.464 F 3.464(eav)-.1 G .964(ery lo)358.608 301.2 R 3.464(wp)-.25 G
-.964(riority MX on e)398.056 301.2 R -.15(ve)-.25 G .963(ry host.).15 F
-(This is intended to be used by sites with poor netw)189 313.2 Q(ork connecti)
--.1 E(vity)-.25 E(.)-.65 E(x)117 329.4 Q F2(LA)A F1 .108
-(When the system load a)189 329.4 R -.15(ve)-.2 G .108(rage e).15 F(xceeds)-.15
-E F2(LA)2.608 E F1 2.608(,j)C .109(ust queue messages \(i.e., don')367.546
-329.4 R 2.609(tt)-.18 G(ry)495.67 329.4 Q(to send them\).)189 341.4 Q(Def)5 E
-(aults to 8.)-.1 E(X)117 357.6 Q F2(LA)A F1 1.251(When the system load a)189
-357.6 R -.15(ve)-.2 G 1.251(rage e).15 F(xceeds)-.15 E F2(LA)3.751 E F1 3.751
-(,r)C 1.251(efuse incoming SMTP connec-)376.097 357.6 R 2.5(tions. Def)189
-369.6 R(aults to 12.)-.1 E(y)117 385.8 Q F2(fact)A F1 .621(The indicated)189
-385.8 R F2(fact)3.121 E F1 .621(or is added to the priority \(thus)B F2
-(lowering)3.122 E F1 .622(the priority of the)3.122 F 1.384
-(job\) for each recipient, i.e., this v)189 397.8 R 1.383
-(alue penalizes jobs with lar)-.25 F 1.383(ge numbers of)-.18 F 2.5
-(recipients. Def)189 409.8 R(aults to 30000.)-.1 E 64.78(YI)117 426 S 3.346(fs)
-192.33 426 S .846(et, deli)202.896 426 R -.15(ve)-.25 G 3.346(re).15 G .847
-(ach job that is run from the queue in a separate process.)251.118 426 R(Use)
-5.847 E .037(this option if you are short of memory)189 438 R 2.536(,s)-.65 G
-.036(ince the def)350.024 438 R .036(ault tends to consume con-)-.1 F
-(siderable amounts of memory while the queue is being processed.)189 450 Q(z)
-117 466.2 Q F2(fact)A F1 1.644(The indicated)189 466.2 R F2(fact)4.144 E F1
-1.645(or is multiplied by the message class \(determined by the)B .923
-(Precedence: \214eld in the user header and the)189 478.2 R F0(P)3.423 E F1
+(use only)189 200.4 Q(.)-.65 E(V)117 216.6 Q F2(fallbac)A(khost)-.2 E F1 .964
+(If speci\214ed, the)189 216.6 R F2(fallbac)3.464 E(khost)-.2 E F1 .964
+(acts lik)3.464 F 3.464(eav)-.1 G .964(ery lo)358.608 216.6 R 3.464(wp)-.25 G
+.964(riority MX on e)398.056 216.6 R -.15(ve)-.25 G .963(ry host.).15 F
+(This is intended to be used by sites with poor netw)189 228.6 Q(ork connecti)
+-.1 E(vity)-.25 E(.)-.65 E 64.78(wI)117 244.8 S 4.06(fy)192.33 244.8 S 1.56
+(ou are the \231best\232 \(that is, lo)204.72 244.8 R 1.56
+(west preference\) MX for a gi)-.25 F -.15(ve)-.25 G 4.06(nh).15 G 1.56
+(ost, you)470.77 244.8 R .433
+(should normally detect this situation and treat that condition specially)189
+256.8 R 2.932(,b)-.65 G 2.932(yf)481.278 256.8 S(or)492.54 256.8 Q(-)-.2 E -.1
+(wa)189 268.8 S .594
+(rding the mail to a UUCP feed, treating it as local, or whate).1 F -.15(ve)
+-.25 G 4.194 -.55(r. H).15 H -.25(ow).55 G -2.15 -.25(ev e).25 H -.4(r,).25 G
+1.898(in some cases \(such as Internet \214re)189 280.8 R -.1(wa)-.25 G 1.898
+(lls\) you may w).1 F 1.897(ant to try to connect)-.1 F .352
+(directly to that host as though it had no MX records at all.)189 292.8 R .352
+(Setting this option)5.352 F(causes)189 304.8 Q F2(sendmail)3.033 E F1 .533
+(to try this.)3.033 F .533(The do)5.533 F .532
+(wnside is that errors in your con\214guration)-.25 F .542(are lik)189 316.8 R
+.542(ely to be diagnosed as \231host unkno)-.1 F .543
+(wn\232 or \231message timed out\232 instead)-.25 F
+(of something more meaningful.)189 328.8 Q(This option is disrecommended.)5 E
+(x)117 345 Q F2(LA)A F1 .109(When the system load a)189 345 R -.15(ve)-.2 G
+.108(rage e).15 F(xceeds)-.15 E F2(LA)2.608 E F1 2.608(,j)C .108
+(ust queue messages \(i.e., don')367.55 345 R 2.608(tt)-.18 G(ry)495.67 345 Q
+(to send them\).)189 357 Q(Def)5 E(aults to 8.)-.1 E(X)117 373.2 Q F2(LA)A F1
+1.251(When the system load a)189 373.2 R -.15(ve)-.2 G 1.251(rage e).15 F
+(xceeds)-.15 E F2(LA)3.751 E F1 3.751(,r)C 1.251(efuse incoming SMTP connec-)
+376.097 373.2 R 2.5(tions. Def)189 385.2 R(aults to 12.)-.1 E(y)117 401.4 Q F2
+(fact)A F1 .622(The indicated)189 401.4 R F2(fact)3.122 E F1 .622
+(or is added to the priority \(thus)B F2(lowering)3.121 E F1 .621
+(the priority of the)3.121 F 1.383(job\) for each recipient, i.e., this v)189
+413.4 R 1.383(alue penalizes jobs with lar)-.25 F 1.384(ge numbers of)-.18 F
+2.5(recipients. Def)189 425.4 R(aults to 30000.)-.1 E 64.78(YI)117 441.6 S
+3.347(fs)192.33 441.6 S .847(et, deli)202.897 441.6 R -.15(ve)-.25 G 3.347(re)
+.15 G .847(ach job that is run from the queue in a separate process.)251.121
+441.6 R(Use)5.846 E .036(this option if you are short of memory)189 453.6 R
+2.536(,s)-.65 G .037(ince the def)350.018 453.6 R .037
+(ault tends to consume con-)-.1 F
+(siderable amounts of memory while the queue is being processed.)189 465.6 Q(z)
+117 481.8 Q F2(fact)A F1 1.645(The indicated)189 481.8 R F2(fact)4.145 E F1
+1.644(or is multiplied by the message class \(determined by the)B .923
+(Precedence: \214eld in the user header and the)189 493.8 R F0(P)3.423 E F1
 .923(lines in the con\214guration \214le\))3.423 F .819
 .923(lines in the con\214guration \214le\))3.423 F .819
-(and subtracted from the priority)189 490.2 R 5.819(.T)-.65 G .819
-(hus, messages with a higher Priority: will)333.255 490.2 R(be f)189 502.2 Q
--.2(avo)-.1 G 2.5(red. Def).2 F(aults to 1800.)-.1 E(Z)117 518.4 Q F2(fact)A F1
-(The)189 518.4 Q F2(fact)3.346 E F1 .846(or is added to the priority e)B -.15
-(ve)-.25 G .846(ry time a job is processed.).15 F .845(Thus, each)5.845 F .942
+(and subtracted from the priority)189 505.8 R 5.819(.T)-.65 G .819
+(hus, messages with a higher Priority: will)333.256 505.8 R(be f)189 517.8 Q
+-.2(avo)-.1 G 2.5(red. Def).2 F(aults to 1800.)-.1 E(Z)117 534 Q F2(fact)A F1
+(The)189 534 Q F2(fact)3.345 E F1 .845(or is added to the priority e)B -.15(ve)
+-.25 G .846(ry time a job is processed.).15 F .846(Thus, each)5.846 F .942
 (time a job is processed, its priority will be decreased by the indicated v)189
 (time a job is processed, its priority will be decreased by the indicated v)189
-530.4 R(alue.)-.25 E .297(In most en)189 542.4 R .296
+546 R(alue.)-.25 E .296(In most en)189 558 R .296
 (vironments this should be positi)-.4 F -.15(ve)-.25 G 2.796(,s).15 G .296
 (vironments this should be positi)-.4 F -.15(ve)-.25 G 2.796(,s).15 G .296
-(ince hosts that are do)378.614 542.4 R .296(wn are all)-.25 F(too often do)189
-554.4 Q(wn for a long time.)-.25 E(Def)5 E(aults to 90000.)-.1 E 67(7S)117
-570.6 S .278(trip input to se)194.56 570.6 R -.15(ve)-.25 G 2.778(nb).15 G .278
-(its for compatibility with old systems.)275.272 570.6 R .279(This shouldn')
-5.279 F 2.779(tb)-.18 G(e)499.56 570.6 Q(necessary)189 582.6 Q(.)-.65 E .78
+(ince hosts that are do)378.612 558 R .297(wn are all)-.25 F(too often do)189
+570 Q(wn for a long time.)-.25 E(Def)5 E(aults to 90000.)-.1 E 67(7S)117 586.2
+S .279(trip input to se)194.56 586.2 R -.15(ve)-.25 G 2.779(nb).15 G .278
+(its for compatibility with old systems.)275.276 586.2 R .278(This shouldn')
+5.278 F 2.778(tb)-.18 G(e)499.56 586.2 Q(necessary)189 598.2 Q(.)-.65 E .779
 (All options can be speci\214ed on the command line using the \255o \215ag, b)
 (All options can be speci\214ed on the command line using the \255o \215ag, b)
-117 598.8 R .779(ut most will cause)-.2 F F2(send-)3.279 E(mail)117 610.8 Q F1
-.324(to relinquish its setuid permissions.)2.824 F .325
-(The options that will not cause this are b, d, e, E, i, L,)5.325 F .217
-(m, o, p, r)117 622.8 R 2.717(,s)-.4 G 2.717(,v)162.468 622.8 S 2.717(,C)
-172.035 622.8 S 2.717(,a)183.922 622.8 S .217(nd 7.)193.579 622.8 R .216
+117 614.4 R .78(ut most will cause)-.2 F F2(send-)3.28 E(mail)117 626.4 Q F1
+.325(to relinquish its setuid permissions.)2.825 F .325
+(The options that will not cause this are b, d, e, E, i, L,)5.325 F .216
+(m, o, p, r)117 638.4 R 2.716(,s)-.4 G 2.716(,v)162.464 638.4 S 2.716(,C)172.03
+638.4 S 2.716(,a)183.916 638.4 S .216(nd 7.)193.572 638.4 R .217
 (Also, M \(de\214ne macro\) when de\214ning the r or s macros is also consid-)
 (Also, M \(de\214ne macro\) when de\214ning the r or s macros is also consid-)
-5.216 F(ered \231safe\232.)117 634.8 Q F0 2.5(5.1.7. P)102 658.8 R 2.5<8a70>2.5
-G -.18(re)156.17 658.8 S(cedence de\214nitions).18 E F1 -1.11(Va)142 675 S .304
-(lues for the \231Precedence:\232 \214eld may be de\214ned using the)1.11 F F0
-(P)2.805 E F1 .305(control line.)2.805 F .305(The syntax of)5.305 F
-(this \214eld is:)117 687 Q F0(P)157 703.2 Q F2(name)A F0(=)A F2(num)A F1 1.779
-(When the)117 719.4 R F2(name)4.279 E F1 1.779
-(is found in a \231Precedence:\232 \214eld, the message class is set to)4.279 F
-F2(num)4.278 E F1 6.778(.H)C(igher)483.45 719.4 Q EP
-%%Page: 36 33
+5.216 F(ered \231safe\232.)117 650.4 Q F0 2.5(5.1.7. P)102 674.4 R 2.5<8a70>2.5
+G -.18(re)156.17 674.4 S(cedence de\214nitions).18 E F1 -1.11(Va)142 690.6 S
+.305(lues for the \231Precedence:\232 \214eld may be de\214ned using the)1.11 F
+F0(P)2.805 E F1 .304(control line.)2.804 F .304(The syntax of)5.304 F
+(this \214eld is:)117 702.6 Q EP
+%%Page: 39 34
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-36 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .81
-(numbers mean higher precedence.)117 96 R .81(Numbers less than zero ha)5.81 F
-1.11 -.15(ve t)-.2 H .81(he special property that if an).15 F .486(error occur\
-s during processing the body of the message will not be returned; this is e)117
-108 R .485(xpected to)-.15 F 1.704(be used for \231b)117 120 R 1.705
-(ulk\232 mail such as through mailing lists.)-.2 F 1.705(The def)6.705 F 1.705
-(ault precedence is zero.)-.1 F -.15(Fo)6.705 G(r).15 E -.15(ex)117 132 S
-(ample, our list of precedences is:).15 E(P\214rst-class=0)157 148.2 Q
-(Pspecial-deli)157 160.2 Q -.15(ve)-.25 G(ry=100).15 E(Plist=\25530)157 172.2 Q
-(Pb)157 184.2 Q(ulk=\25560)-.2 E(Pjunk=\255100)157 196.2 Q .8
-(People writing mailing list e)117 212.4 R .799
-(xploders are encouraged to use \231Precedence: list\232.)-.15 F .799(Older v)
-5.799 F(ersions)-.15 E(of)117 224.4 Q/F2 10/Times-Italic@0 SF(sendmail)3.759 E
-F1 1.259(\(which discarded all error returns for ne)3.759 F -.05(ga)-.15 G(ti)
-.05 E 1.559 -.15(ve p)-.25 H 1.259(recedences\) didn').15 F 3.76(tr)-.18 G 1.26
-(ecognize this)450.25 224.4 R .255(name, gi)117 236.4 R .255(ving it a def)-.25
-F .255(ault precedence of zero.)-.1 F .254(This allo)5.254 F .254
-(ws list maintainers to see error returns on)-.25 F(both old and ne)117 248.4 Q
-2.5(wv)-.25 G(ersions of)193.26 248.4 Q F2(sendmail)2.5 E F1(.)A F0 2.5
-(5.1.8. V)102 272.4 R 2.5<8a63>2.5 G(on\214guration v)156.16 272.4 Q(ersion le)
--.1 E -.1(ve)-.15 G(l).1 E F1 2.11 -.8(To p)142 288.6 T(ro).8 E .51
-(vide compatibility with old con\214guration \214les, the)-.15 F F0(V)3.01 E F1
-.51(line has been added to de\214ne)3.01 F .173(some v)117 300.6 R .173
-(ery basic semantics of the con\214guration \214le.)-.15 F .172
-(These are not intended to be long term sup-)5.173 F 1.84(ports; rather)117
-312.6 R 4.34(,t)-.4 G(he)176.66 312.6 Q 4.34(yd)-.15 G 1.84
-(escribe compatibility features which will probably be remo)200.29 312.6 R -.15
-(ve)-.15 G 4.34(di).15 G 4.34(nf)470.78 312.6 S(uture)483.45 312.6 Q(releases.)
-117 324.6 Q .031(\231Old\232 con\214guration \214les are de\214ned as v)142
-340.8 R .031(ersion le)-.15 F -.15(ve)-.25 G 2.531(lo).15 G 2.531(ne. V)359.438
-340.8 R .031(ersion le)-1.11 F -.15(ve)-.25 G 2.53(lt).15 G .23 -.1(wo \214)
-433.84 340.8 T .03(les mak).1 F 2.53(et)-.1 G(he)494.56 340.8 Q(follo)117 352.8
-Q(wing changes:)-.25 E 12.5(\(1\) Host)122 369 R .757(name canoni\214cation \(\
-$[ ... $]\) appends a dot if the name is recognized; this gi)3.256 F -.15(ve)
--.25 G(s).15 E .903(the con\214g \214le a w)148.66 381 R .903
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-39)452.9 60 Q(P)157 96 Q/F1 10/Times-Italic@0 SF(name)A F0(=)A F1(num)A
+/F2 10/Times-Roman@0 SF .285(When the)117 112.2 R F1(name)2.785 E F2 .285
+(is found in a \231Precedence:\232 \214eld, the message class is set to)2.785 F
+F1(num)2.786 E F2 5.286(.H)C .286(igher num-)459.554 112.2 R .48
+(bers mean higher precedence.)117 124.2 R .479(Numbers less than zero ha)5.48 F
+.779 -.15(ve t)-.2 H .479(he special property that if an error).15 F 1.11(occu\
+rs during processing the body of the message will not be returned; this is e)
+117 136.2 R 1.11(xpected to be)-.15 F .678(used for \231b)117 148.2 R .678
+(ulk\232 mail such as through mailing lists.)-.2 F .678(The def)5.678 F .678
+(ault precedence is zero.)-.1 F -.15(Fo)5.678 G 3.178(re).15 G(xam-)483.45
+148.2 Q(ple, our list of precedences is:)117 160.2 Q(P\214rst-class=0)157 176.4
+Q(Pspecial-deli)157 188.4 Q -.15(ve)-.25 G(ry=100).15 E(Plist=\25530)157 200.4
+Q(Pb)157 212.4 Q(ulk=\25560)-.2 E(Pjunk=\255100)157 224.4 Q .799
+(People writing mailing list e)117 240.6 R .799
+(xploders are encouraged to use \231Precedence: list\232.)-.15 F .8(Older v)5.8
+F(ersions)-.15 E(of)117 252.6 Q F1(sendmail)3.76 E F2 1.259
+(\(which discarded all error returns for ne)3.76 F -.05(ga)-.15 G(ti).05 E
+1.559 -.15(ve p)-.25 H 1.259(recedences\) didn').15 F 3.759(tr)-.18 G 1.259
+(ecognize this)450.251 252.6 R .254(name, gi)117 264.6 R .254(ving it a def)
+-.25 F .254(ault precedence of zero.)-.1 F .254(This allo)5.254 F .255
+(ws list maintainers to see error returns on)-.25 F(both old and ne)117 276.6 Q
+2.5(wv)-.25 G(ersions of)193.26 276.6 Q F1(sendmail)2.5 E F2(.)A F0 2.5
+(5.1.8. V)102 300.6 R 2.5<8a63>2.5 G(on\214guration v)156.16 300.6 Q(ersion le)
+-.1 E -.1(ve)-.15 G(l).1 E F2 2.11 -.8(To p)142 316.8 T(ro).8 E .51
+(vide compatibility with old con\214guration \214les, the)-.15 F F0(V)3.01 E F2
+.51(line has been added to de\214ne)3.01 F .172(some v)117 328.8 R .172
+(ery basic semantics of the con\214guration \214le.)-.15 F .173
+(These are not intended to be long term sup-)5.172 F 1.84(ports; rather)117
+340.8 R 4.34(,t)-.4 G(he)176.66 340.8 Q 4.34(yd)-.15 G 1.84
+(escribe compatibility features which will probably be remo)200.29 340.8 R -.15
+(ve)-.15 G 4.34(di).15 G 4.34(nf)470.78 340.8 S(uture)483.45 340.8 Q(releases.)
+117 352.8 Q F0(N.B.:)142 369 Q F2 1.032(these v)3.532 F(ersion)-.15 E F1(le)
+3.532 E(vels)-.15 E F2(ha)3.532 E 1.332 -.15(ve n)-.2 H 1.032
+(othing to do with the v).15 F(ersion)-.15 E F1(number)3.532 E F2 1.032
+(on the \214les.)3.532 F -.15(Fo)6.032 G(r).15 E -.15(ex)117 381 S .384
+(ample, as of this writing v).15 F .384
+(ersion 8 con\214g \214les \(speci\214cally)-.15 F 2.884(,8)-.65 G .384
+(.6\) used v)373.76 381 R .384(ersion le)-.15 F -.15(ve)-.25 G 2.884(l5c).15 G
+(on\214gu-)475.11 381 Q(rations.)117 393 Q .03
+(\231Old\232 con\214guration \214les are de\214ned as v)142 409.2 R .031
+(ersion le)-.15 F -.15(ve)-.25 G 2.531(lo).15 G 2.531(ne. V)359.434 409.2 R
+.031(ersion le)-1.11 F -.15(ve)-.25 G 2.531(lt).15 G .231 -.1(wo \214)433.837
+409.2 T .031(les mak).1 F 2.531(et)-.1 G(he)494.56 409.2 Q(follo)117 421.2 Q
+(wing changes:)-.25 E 12.5(\(1\) Host)122 437.4 R .757(name canoni\214cation \
+\($[ ... $]\) appends a dot if the name is recognized; this gi)3.257 F -.15(ve)
+-.25 G(s).15 E .902(the con\214g \214le a w)148.66 449.4 R .903
 (ay of \214nding out if an)-.1 F .903(ything matched.)-.15 F(\(Actually)5.903 E
 (ay of \214nding out if an)-.1 F .903(ything matched.)-.15 F(\(Actually)5.903 E
-3.403(,t)-.65 G .902(his just initializes)432.186 381 R .424
-(the \231host\232 map with the \231\255a.)148.66 393 R 5.424<9a8d>-.7 G .424
-(ag \212 you can reset it to an)280.014 393 R .424(ything you prefer by declar)
--.15 F(-)-.2 E(ing the map e)148.66 405 Q(xplicitly)-.15 E(.\))-.65 E 12.5
-(\(2\) Def)122 421.2 R .436(ault host name e)-.1 F .435
-(xtension is consistent throughout processing; v)-.15 F .435(ersion le)-.15 F
--.15(ve)-.25 G 2.935(lo).15 G .435(ne con-)473.855 421.2 R .828
-(\214gurations turned of)148.66 433.2 R 3.328(fd)-.25 G .828(omain e)243.384
-433.2 R .828(xtension \(that is, adding the local domain name\) during)-.15 F
-.597(certain points in processing.)148.66 445.2 R -1.11(Ve)5.597 G .597
-(rsion le)1.11 F -.15(ve)-.25 G 3.097(lt).15 G .797 -.1(wo c)326.822 445.2 T
-.597(on\214gurations are e).1 F .596(xpected to include a)-.15 F
-(trailing dot to indicate that the name is already canonical.)148.66 457.2 Q
-12.5(\(3\) Local)122 473.4 R .176
-(names that are not aliases are passed through a ne)2.675 F 2.676(wd)-.25 G
-.176(istinguished ruleset \214v)388.892 473.4 R .176(e; this)-.15 F .797
-(can be used to append a local relay)148.66 485.4 R 5.797(.T)-.65 G .797
-(his beha)307.676 485.4 R .796(viour can be pre)-.2 F -.15(ve)-.25 G .796
-(nted by resolving the).15 F .62(local name with an initial `@'.)148.66 497.4 R
-.621(That is, something that resolv)5.62 F .621(es to a local mailer and a)-.15
-F .844(user name of \231vikki\232 will be passed through ruleset \214v)148.66
-509.4 R .843(e, b)-.15 F .843(ut a user name of \231@vikki\232)-.2 F .328
-(will ha)148.66 521.4 R .628 -.15(ve t)-.2 H .328
+3.403(,t)-.65 G .903(his just initializes)432.184 449.4 R .424
+(the \231host\232 map with the \231\255a.)148.66 461.4 R 5.424<9a8d>-.7 G .424
+(ag \212 you can reset it to an)280.016 461.4 R .424
+(ything you prefer by declar)-.15 F(-)-.2 E(ing the map e)148.66 473.4 Q
+(xplicitly)-.15 E(.\))-.65 E 12.5(\(2\) Def)122 489.6 R .435(ault host name e)
+-.1 F .435(xtension is consistent throughout processing; v)-.15 F .436
+(ersion le)-.15 F -.15(ve)-.25 G 2.936(lo).15 G .436(ne con-)473.854 489.6 R
+.829(\214gurations turned of)148.66 501.6 R 3.329(fd)-.25 G .829(omain e)
+243.387 501.6 R .828(xtension \(that is, adding the local domain name\) during)
+-.15 F .596(certain points in processing.)148.66 513.6 R -1.11(Ve)5.596 G .597
+(rsion le)1.11 F -.15(ve)-.25 G 3.097(lt).15 G .797 -.1(wo c)326.818 513.6 T
+.597(on\214gurations are e).1 F .597(xpected to include a)-.15 F
+(trailing dot to indicate that the name is already canonical.)148.66 525.6 Q
+12.5(\(3\) Local)122 541.8 R .176
+(names that are not aliases are passed through a ne)2.676 F 2.675(wd)-.25 G
+.175(istinguished ruleset \214v)388.895 541.8 R .175(e; this)-.15 F .796
+(can be used to append a local relay)148.66 553.8 R 5.797(.T)-.65 G .797
+(his beha)307.671 553.8 R .797(viour can be pre)-.2 F -.15(ve)-.25 G .797
+(nted by resolving the).15 F .621(local name with an initial `@'.)148.66 565.8
+R .621(That is, something that resolv)5.621 F .62(es to a local mailer and a)
+-.15 F .843(user name of \231vikki\232 will be passed through ruleset \214v)
+148.66 577.8 R .843(e, b)-.15 F .844(ut a user name of \231@vikki\232)-.2 F
+.328(will ha)148.66 589.8 R .628 -.15(ve t)-.2 H .328
 (he `@' stripped, will not be passed through ruleset \214v).15 F .328(e, b)-.15
 (he `@' stripped, will not be passed through ruleset \214v).15 F .328(e, b)-.15
-F .328(ut will otherwise be)-.2 F 1.509(treated the same as the prior e)148.66
-533.4 R 4.009(xample. The)-.15 F -.15(ex)4.009 G 1.508
-(pectation is that this might be used to).15 F .907(implement a polic)148.66
-545.4 R 3.407(yw)-.15 G .907(here mail sent to \231vikki\232 w)238.171 545.4 R
-.908(as handled by a central hub, b)-.1 F .908(ut mail)-.2 F
-(sent to \231vikki@localhost\232 w)148.66 557.4 Q(as deli)-.1 E -.15(ve)-.25 G
-(red directly).15 E(.)-.65 E -1.11(Ve)142 573.6 S .229(rsion le)1.11 F -.15(ve)
--.25 G 2.729(lt).15 G .229(hree \214les allo)199.828 573.6 R 2.729(w#i)-.25 G
-.228(nitiated comments on all lines.)274.374 573.6 R .228
-(Exceptions are backslash)5.228 F(escaped # marks and the $# syntax.)117 585.6
-Q F0 2.5(5.1.9. K)102 609.6 R 2.5<8a6b>2.5 G(ey \214le declaration)157.74 609.6
-Q F1(Special maps can be de\214ned using the line:)142 625.8 Q
-(Kmapname mapclass ar)157 642 Q(guments)-.18 E(The)117 658.2 Q F2(mapname)3.443
-E F1 .944(is the handle by which this map is referenced in the re)3.443 F .944
-(writing rules.)-.25 F(The)5.944 E F2(map-)3.444 E(class)117 670.2 Q F1 .301
-(is the name of a type of map; these are compiled in to sendmail.)2.801 F(The)
-5.3 E F2(ar)2.8 E(guments)-.37 E F1 .3(are inter)2.8 F(-)-.2 E .569
-(preted depending on the class; typically)117 682.2 R 3.069(,t)-.65 G .569
-(here w)286.134 682.2 R .569(ould be a single ar)-.1 F .57
-(gument naming the \214le con-)-.18 F(taining the map.)117 694.2 Q
-(Maps are referenced using the syntax:)142 710.4 Q EP
-%%Page: 37 34
+F .328(ut will otherwise be)-.2 F 1.508(treated the same as the prior e)148.66
+601.8 R 4.009(xample. The)-.15 F -.15(ex)4.009 G 1.509
+(pectation is that this might be used to).15 F .908(implement a polic)148.66
+613.8 R 3.408(yw)-.15 G .907(here mail sent to \231vikki\232 w)238.174 613.8 R
+.907(as handled by a central hub, b)-.1 F .907(ut mail)-.2 F
+(sent to \231vikki@localhost\232 w)148.66 625.8 Q(as deli)-.1 E -.15(ve)-.25 G
+(red directly).15 E(.)-.65 E -1.11(Ve)142 642 S .228(rsion le)1.11 F -.15(ve)
+-.25 G 2.728(lt).15 G .228(hree \214les allo)199.826 642 R 2.728(w#i)-.25 G
+.229(nitiated comments on all lines.)274.368 642 R .229
+(Exceptions are backslash)5.229 F(escaped # marks and the $# syntax.)117 654 Q
+-1.11(Ve)142 670.2 S 1.594(rsion le)1.11 F -.15(ve)-.25 G 4.094(lf).15 G 1.594
+(our con\214gurations are completely equi)203.108 670.2 R -.25(va)-.25 G 1.594
+(lent to le).25 F -.15(ve)-.25 G 4.093(lt).15 G 1.593(hree for historical)
+429.724 670.2 R(reasons.)117 682.2 Q -1.11(Ve)142 698.4 S .234(rsion le)1.11 F
+-.15(ve)-.25 G 2.734<6c8c>.15 G .534 -.15(ve c)202.618 698.4 T .234
+(on\214guration \214les change the def).15 F .234(ault de\214nition of)-.1 F F0
+($w)2.734 E F2 .234(to be just the \214rst)2.734 F(component of the hostname.)
+117 710.4 Q EP
+%%Page: 40 35
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-37)452.9 60 Q/F1 10/Times-Roman@0 SF($\()157 96 Q/F2 10/Times-Italic@0
-SF(map k)2.5 E -.3(ey)-.1 G F1($@)2.8 E F2(ar)2.5 E(guments)-.37 E F1($:)2.5 E
-F2(default)2.5 E F1($\))2.5 E .797(where either or both of the)117 112.2 R F2
-(ar)3.297 E(guments)-.37 E F1(or)3.297 E F2(default)3.297 E F1 .796
-(portion may be omitted.)3.297 F(The)5.796 E F2(ar)3.296 E(guments)-.37 E F1
-(may)3.296 E .205(appear more than once.)117 124.2 R .205(The indicated)5.205 F
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-40 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E 2.5(5.1.9. K)102 96 R 2.5<8a6b>2.5 G
+(ey \214le declaration)157.74 96 Q/F1 10/Times-Roman@0 SF
+(Special maps can be de\214ned using the line:)142 112.2 Q
+(Kmapname mapclass ar)157 128.4 Q(guments)-.18 E(The)117 144.6 Q/F2 10
+/Times-Italic@0 SF(mapname)3.444 E F1 .944
+(is the handle by which this map is referenced in the re)3.444 F .943
+(writing rules.)-.25 F(The)5.943 E F2(map-)3.443 E(class)117 156.6 Q F1 .3
+(is the name of a type of map; these are compiled in to)2.8 F F2(sendmail)2.801
+E F1 5.301(.T)C(he)410.637 156.6 Q F2(ar)2.801 E(guments)-.37 E F1 .301
+(are inter)2.801 F(-)-.2 E .57(preted depending on the class; typically)117
+168.6 R 3.069(,t)-.65 G .569(here w)286.139 168.6 R .569(ould be a single ar)
+-.1 F .569(gument naming the \214le con-)-.18 F(taining the map.)117 180.6 Q
+(Maps are referenced using the syntax:)142 196.8 Q($\()157 213 Q F2(map k)2.5 E
+-.3(ey)-.1 G F1($@)2.8 E F2(ar)2.5 E(guments)-.37 E F1($:)2.5 E F2(default)2.5
+E F1($\))2.5 E .796(where either or both of the)117 229.2 R F2(ar)3.297 E
+(guments)-.37 E F1(or)3.297 E F2(default)3.297 E F1 .797
+(portion may be omitted.)3.297 F(The)5.797 E F2(ar)3.297 E(guments)-.37 E F1
+(may)3.297 E .205(appear more than once.)117 241.2 R .205(The indicated)5.205 F
 F2 -.1(ke)2.705 G(y)-.2 E F1(and)2.705 E F2(ar)2.705 E(guments)-.37 E F1 .205
 F2 -.1(ke)2.705 G(y)-.2 E F1(and)2.705 E F2(ar)2.705 E(guments)-.37 E F1 .205
-(are passed to the appropriate mapping)2.705 F 2.503(function. If)117 136.2 R
+(are passed to the appropriate mapping)2.705 F 2.503(function. If)117 253.2 R
 .003(it returns a v)2.503 F .003(alue, it replaces the input.)-.25 F .003
 (If it does not return a v)5.003 F .003(alue and the)-.25 F F2(default)2.503 E
 .003(it returns a v)2.503 F .003(alue, it replaces the input.)-.25 F .003
 (If it does not return a v)5.003 F .003(alue and the)-.25 F F2(default)2.503 E
-F1(is)2.503 E(speci\214ed, the)117 148.2 Q F2(default)2.5 E F1
-(replaces the input.)2.5 E(Otherwise, the input is unchanged.)5 E .159
-(During replacement of either a map v)142 164.4 R .159(alue or def)-.25 F .159
-(ault the string \231%)-.1 F F2(n)A F1 2.66<9a28>C(where)421.82 164.4 Q F2(n)
-2.66 E F1 .16(is a digit\) is)2.66 F .204(replaced by the corresponding)117
-176.4 R F2(ar)2.704 E(gument)-.37 E F1 5.204(.A)C -.18(rg)294 176.4 S .204
+F1(is)2.503 E(speci\214ed, the)117 265.2 Q F2(default)2.5 E F1
+(replaces the input.)2.5 E(Otherwise, the input is unchanged.)5 E .16
+(During replacement of either a map v)142 281.4 R .16(alue or def)-.25 F .159
+(ault the string \231%)-.1 F F2(n)A F1 2.659<9a28>C(where)421.825 281.4 Q F2(n)
+2.659 E F1 .159(is a digit\) is)2.659 F .203(replaced by the corresponding)117
+293.4 R F2(ar)2.704 E(gument)-.37 E F1 5.204(.A)C -.18(rg)293.998 293.4 S .204
 (ument zero is al).18 F -.1(wa)-.1 G .204(ys the database k).1 F -.15(ey)-.1 G
 (ument zero is al).18 F -.1(wa)-.1 G .204(ys the database k).1 F -.15(ey)-.1 G
-5.203(.F)-.5 G .203(or e)468.127 176.4 R(xam-)-.15 E(ple, the rule)117 188.4 Q
-(R$- ! $+)157 204.6 Q($: $\(uucp $1 $@ $2 $: %1 @ %0 . UUCP $\))265 204.6 Q
+5.204(.F)-.5 G .204(or e)468.126 293.4 R(xam-)-.15 E(ple, the rule)117 305.4 Q
+(R$- ! $+)157 321.6 Q($: $\(uucp $1 $@ $2 $: %1 @ %0 . UUCP $\))265 321.6 Q
 .436(Looks up the UUCP name in a \(user de\214ned\) UUCP map; if not found it \
 .436(Looks up the UUCP name in a \(user de\214ned\) UUCP map; if not found it \
-turns it into \231.UUCP\232)117 220.8 R 2.5(form. The)117 232.8 R
-(database might contain records lik)2.5 E(e:)-.1 E(decv)157 249 Q 77.43
-(ax %1@%0.DEC.COM)-.25 F 72.19(research %1@%0.A)157 261 R(TT)-1.11 E(.COM)-.74
-E 2.065(The b)142 281.4 R 2.064(uilt in map with both name and class \231host\
-\232 is the host name canonicalization)-.2 F 2.5(lookup. Thus,)117 293.4 R
-(the syntax:)2.5 E($\(host)157 309.6 Q F2(hostname)2.5 E F1($\))A(is equi)117
-325.8 Q -.25(va)-.25 G(lent to:).25 E($[)157 342 Q F2(hostname)A F1($])A 1.783
+turns it into \231.UUCP\232)117 337.8 R 2.5(form. The)117 349.8 R
+(database might contain records lik)2.5 E(e:)-.1 E(decv)157 366 Q 77.43
+(ax %1@%0.DEC.COM)-.25 F 72.19(research %1@%0.A)157 378 R(TT)-1.11 E(.COM)-.74
+E 2.064(The b)142 398.4 R 2.064(uilt in map with both name and class \231host\
+\232 is the host name canonicalization)-.2 F 2.5(lookup. Thus,)117 410.4 R
+(the syntax:)2.5 E($\(host)157 426.6 Q F2(hostname)2.5 E F1($\))A(is equi)117
+442.8 Q -.25(va)-.25 G(lent to:).25 E($[)157 459 Q F2(hostname)A F1($])A 1.783
 (There are four prede\214ned database lookup classes: \231dbm\232, \231btree\
 (There are four prede\214ned database lookup classes: \231dbm\232, \231btree\
-\232, \231hash\232, and \231nis\232.)142 362.4 R .569
-(The \214rst requires that sendmail be compiled with the)117 374.4 R F0(ndbm)
-3.069 E F1 .568(library; the second tw)3.069 F 3.068(or)-.1 G .568(equire the)
-463.722 374.4 R F0(db)117 386.4 Q F1(library)3.198 E 3.198(,a)-.65 G .698
-(nd the third requires that sendmail be compiled with NIS support.)167.466
-386.4 R .698(All four accept)5.698 F(as ar)117 398.4 Q
-(guments the some optional \215ags and a \214lename \(or a mapname for NIS\).)
--.18 E(Kno)5 E(wn \215ags are:)-.25 E 58.86(\255o Indicates)117 414.6 R .21
+\232, \231hash\232, and \231nis\232.)142 479.4 R .568
+(The \214rst requires that)117 491.4 R F2(sendmail)3.068 E F1 .569
+(be compiled with the)3.068 F F0(ndbm)3.069 E F1 .569(library; the second tw)
+3.069 F 3.069(or)-.1 G .569(equire the)463.721 491.4 R F0(db)117 503.4 Q F1
+(library)3.198 E 3.198(,a)-.65 G .698(nd the third requires that)167.466 503.4
+R F2(sendmail)3.198 E F1 .698(be compiled with NIS support.)3.198 F .698
+(All four accept)5.698 F .311(as ar)117 515.4 R .311(guments the some optional\
+ \215ags and a \214lename \(or a mapname for NIS; the \214lename is the)-.18 F
+.105(root of the database path, so that \231.db\232 or some other e)117 527.4 R
+.105(xtension appropriate for the database type)-.15 F
+(will be added to get the actual database name\).)117 539.4 Q(Kno)5 E
+(wn \215ags are:)-.25 E 58.86(\255o Indicates)117 555.6 R .21
 (that this map is optional \212 that is, if it cannot be opened, no error is)
 (that this map is optional \212 that is, if it cannot be opened, no error is)
-2.71 F(produced, and sendmail will beha)189 426.6 Q .3 -.15(ve a)-.2 H 2.5(si)
-.15 G 2.5(ft)348.9 426.6 S(he map e)357.51 426.6 Q(xisted b)-.15 E(ut w)-.2 E
-(as empty)-.1 E(.)-.65 E 56.64(\255N Normally)117 442.8 R .515
-(when maps are written, the trailing null byte is not included as part)3.015 F
-.8(of the k)189 454.8 R -.15(ey)-.1 G 5.8(.I)-.5 G 3.3(ft)241.32 454.8 S .799
-(his \215ag is indicated it will be included.)250.73 454.8 R .799
-(During lookups, only)5.799 F(the null-byte-included form will be searched.)189
-466.8 Q(See also)5 E F0(\255O.)2.5 E F1 56.64(\255O If)117 483 R(neither)4.388
-E F0<ad4e>4.388 E F1(or)4.388 E F0<ad4f>4.388 E F1 1.888(are speci\214ed,)4.388
-F F2(sendmail)4.388 E F1 1.889(uses an adapti)4.388 F 2.189 -.15(ve a)-.25 H
-1.889(lgorithm to).15 F 1.025
-(decide whether or not to look for null bytes on the end of k)189 495 R -.15
+2.71 F(produced, and)189 567.6 Q F2(sendmail)2.5 E F1(will beha)2.5 E .3 -.15
+(ve a)-.2 H 2.5(si).15 G 2.5(ft)348.9 567.6 S(he map e)357.51 567.6 Q(xisted b)
+-.15 E(ut w)-.2 E(as empty)-.1 E(.)-.65 E 56.64(\255N Normally)117 583.8 R .515
+(when maps are written, the trailing null byte is not included as part)3.016 F
+.799(of the k)189 595.8 R -.15(ey)-.1 G 5.799(.I)-.5 G 3.299(ft)241.317 595.8 S
+.799(his \215ag is indicated it will be included.)250.726 595.8 R .8
+(During lookups, only)5.8 F(the null-byte-included form will be searched.)189
+607.8 Q(See also)5 E F0(\255O.)2.5 E F1 56.64(\255O If)117 624 R(neither)4.389
+E F0<ad4e>4.389 E F1(or)4.389 E F0<ad4f>4.389 E F1 1.888(are speci\214ed,)4.388
+F F2(sendmail)4.388 E F1 1.888(uses an adapti)4.388 F 2.188 -.15(ve a)-.25 H
+1.888(lgorithm to).15 F 1.025
+(decide whether or not to look for null bytes on the end of k)189 636 R -.15
 (ey)-.1 G 3.525(s. It).15 F 1.025(starts by)3.525 F .922
 (ey)-.1 G 3.525(s. It).15 F 1.025(starts by)3.525 F .922
-(trying both; if it \214nds an)189 507 R 3.422(yk)-.15 G 1.222 -.15(ey w)304.29
-507 T .922(ith a null byte it ne).15 F -.15(ve)-.25 G 3.422(rt).15 G .922
-(ries ag)422.684 507 R .922(ain without a)-.05 F .124(null byte and vice v)189
-519 R 2.623(ersa. If)-.15 F .123(this \215ag is speci\214ed, it ne)2.623 F -.15
-(ve)-.25 G 2.623(rt).15 G .123(ries with a null byte;)421.288 519 R .748
-(this can speed matches b)189 531 R .748(ut is ne)-.2 F -.15(ve)-.25 G 3.249
-(rn).15 G(ecessary)341.667 531 Q 5.749(.I)-.65 G 3.249(fb)386.466 531 S(oth)
-398.045 531 Q F0<ad4e>3.249 E F1(and)3.249 E F0<ad4f>3.249 E F1 .749
-(are speci-)3.249 F(\214ed,)189 543 Q F2(sendmail)4.349 E F1 1.849(will ne)
-4.349 F -.15(ve)-.25 G 4.349(rt).15 G 1.849(ry an)300.156 543 R 4.349(ym)-.15 G
-1.848(atches at all \212 that is, e)339.254 543 R -.15(ve)-.25 G 1.848
-(rything will).15 F(appear to f)189 555 Q(ail.)-.1 E<ad61>117 571.2 Q F2(x)A F1
-.649(Append the character)189 571.2 R F2(x)3.149 E F1 .649
-(on successful matches.)3.149 F -.15(Fo)5.649 G 3.149(re).15 G .649
-(xample, the def)406.052 571.2 R(ault)-.1 E F2(host)3.15 E F1
-(map appends a dot on successful matches.)189 583.2 Q 60.53(\255f F)117 599.4 R
-(old upper to lo)-.15 E(wer case before looking up the k)-.25 E -.15(ey)-.1 G
-(.)-.5 E 56.08(\255m Match)117 615.6 R .085(only \(without replacing the v)
-2.585 F 2.585(alue\). If)-.25 F .085(you only care about the e)2.585 F
-(xistence)-.15 E 2.618(of a k)189 627.6 R 2.918 -.15(ey a)-.1 H 2.618
-(nd not the v).15 F 2.619(alue \(as you might when searching the NIS map)-.25 F
-.447(\231hosts.byname\232 for e)189 639.6 R .447(xample\), this \215ag pre)-.15
-F -.15(ve)-.25 G .447(nts the map from substituting the).15 F -.25(va)189 651.6
-S 4.935(lue. Ho).25 F(we)-.25 E -.15(ve)-.25 G 3.235 -.4(r, T).15 H 2.436
-(he \255a ar).4 F 2.436(gument is still appended on a match, and the)-.18 F
-(def)189 663.6 Q(ault is still tak)-.1 E(en if the match f)-.1 E(ails.)-.1 E
-(The)142 679.8 Q F2(dbm)3.874 E F1 1.374
-(map appends the strings \231.pag\232 and \231.dir\232 to the gi)3.874 F -.15
-(ve)-.25 G 3.874<6e8c>.15 G 1.374(lename; the tw)420.268 679.8 R(o)-.1 E F2(db)
-3.874 E F1(-)A(based maps append \231.db\232.)117 691.8 Q .022(The program)142
-708 R F2(mak)2.522 E(emap)-.1 E F1 .023(\(8\) can be used to b)B .023(uild an)
--.2 F 2.523(yo)-.15 G 2.523(ft)353.095 708 S .023
-(he three database-oriented maps.)361.728 708 R(It)5.023 E(tak)117 720 Q
-(es the follo)-.1 E(wing \215ags:)-.25 E EP
-%%Page: 38 35
+(trying both; if it \214nds an)189 648 R 3.422(yk)-.15 G 1.222 -.15(ey w)
+304.292 648 T .922(ith a null byte it ne).15 F -.15(ve)-.25 G 3.422(rt).15 G
+.922(ries ag)422.686 648 R .921(ain without a)-.05 F .123(null byte and vice v)
+189 660 R 2.623(ersa. If)-.15 F .123(this \215ag is speci\214ed, it ne)2.623 F
+-.15(ve)-.25 G 2.623(rt).15 G .123(ries with a null byte;)421.286 660 R .749
+(this can speed matches b)189 672 R .749(ut is ne)-.2 F -.15(ve)-.25 G 3.249
+(rn).15 G(ecessary)341.673 672 Q 5.749(.I)-.65 G 3.248(fb)386.472 672 S(oth)
+398.05 672 Q F0<ad4e>3.248 E F1(and)3.248 E F0<ad4f>3.248 E F1 .748(are speci-)
+3.248 F(\214ed,)189 684 Q F2(sendmail)4.348 E F1 1.848(will ne)4.348 F -.15(ve)
+-.25 G 4.348(rt).15 G 1.848(ry an)300.152 684 R 4.348(ym)-.15 G 1.849
+(atches at all \212 that is, e)339.248 684 R -.15(ve)-.25 G 1.849(rything will)
+.15 F(appear to f)189 696 Q(ail.)-.1 E<ad61>117 712.2 Q F2(x)A F1 .107
+(Append the string)189 712.2 R F2(x)2.607 E F1 .107(on successful matches.)
+2.607 F -.15(Fo)5.107 G 2.607(re).15 G .106(xample, the def)387.856 712.2 R
+(ault)-.1 E F2(host)2.606 E F1(map)2.606 E
+(appends a dot on successful matches.)189 724.2 Q EP
+%%Page: 41 36
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-38 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 60.53(\255f Do)
-117 96 R(not fold upper to lo)2.5 E(wer case in the map.)-.25 E 56.64
-(\255N Include)117 112.2 R(null bytes in k)2.5 E -.15(ey)-.1 G(s.).15 E 58.86
-(\255o Append)117 128.4 R(to an e)2.5 E(xisting \(old\) \214le.)-.15 E 60.53
-(\255r Allo)117 144.6 R 3.479(wr)-.25 G .979(eplacement of e)220.559 144.6 R
-.979(xisting k)-.15 F -.15(ey)-.1 G .979(s; normally).15 F 3.479(,r)-.65 G .979
-(e-inserting an e)385.494 144.6 R .979(xisting k)-.15 F 1.279 -.15(ey i)-.1 H
-(s).15 E(an error)189 156.6 Q(.)-.55 E 58.86(\255v Print)117 172.8 R
-(what is happening.)2.5 E(There are also tw)142 189 Q 2.5(ob)-.1 G
-(uiltin maps that are, strictly speaking, not database lookups.)223.34 189 Q
-1.563(The \231host\232 map does host domain canoni\214cation; gi)142 205.2 R
--.15(ve)-.25 G 4.063(nah).15 G 1.563(ost name it calls the name)392.585 205.2 R
-(serv)117 217.2 Q(er to \214nd the canonical name for that host.)-.15 E .106
-(The \231dequote\232 map strips double quotes \("\) from a name.)142 233.4 R
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-41)452.9 60 Q/F1 10/Times-Roman@0 SF 60.53(\255f Do)117 96 R
+(not fold upper to lo)2.5 E(wer case before looking up the k)-.25 E -.15(ey)-.1
+G(.)-.5 E 56.08(\255m Match)117 112.2 R .085(only \(without replacing the v)
+2.585 F 2.585(alue\). If)-.25 F .085(you only care about the e)2.585 F
+(xistence)-.15 E 2.619(of a k)189 124.2 R 2.919 -.15(ey a)-.1 H 2.619
+(nd not the v).15 F 2.618(alue \(as you might when searching the NIS map)-.25 F
+.447(\231hosts.byname\232 for e)189 136.2 R .447(xample\), this \215ag pre)-.15
+F -.15(ve)-.25 G .447(nts the map from substituting the).15 F -.25(va)189 148.2
+S 4.936(lue. Ho).25 F(we)-.25 E -.15(ve)-.25 G 3.236 -.4(r, T).15 H 2.436
+(he \255a ar).4 F 2.436(gument is still appended on a match, and the)-.18 F
+(def)189 160.2 Q(ault is still tak)-.1 E(en if the match f)-.1 E(ails.)-.1 E
+(The)142 176.4 Q/F2 10/Times-Italic@0 SF(dbm)3.874 E F1 1.374
+(map appends the strings \231.pag\232 and \231.dir\232 to the gi)3.874 F -.15
+(ve)-.25 G 3.874<6e8c>.15 G 1.374(lename; the tw)420.268 176.4 R(o)-.1 E F2(db)
+3.874 E F1(-)A(based maps append \231.db\232.)117 188.4 Q -.15(Fo)5 G 2.5(re)
+.15 G(xample, the map speci\214cation)246.67 188.4 Q -.15(Ku)157 204.6 S
+(ucp dbm \255o \255N /usr/lib/uucpmap).15 E .77
+(speci\214es an optional map named \231uucp\232 of class \231dbm\232; it al)117
+220.8 R -.1(wa)-.1 G .77(ys has null bytes at the end of).1 F -2.15 -.25(ev e)
+117 232.8 T(ry string, and the data is located in /usr/lib/uucpmap.{dir).25 E
+(,pag}.)-.4 E .022(The program)142 249 R F2(mak)2.522 E(emap)-.1 E F1 .023
+(\(8\) can be used to b)B .023(uild an)-.2 F 2.523(yo)-.15 G 2.523(ft)353.095
+249 S .023(he three database-oriented maps.)361.728 249 R(It)5.023 E(tak)117
+261 Q(es the follo)-.1 E(wing \215ags:)-.25 E 60.53(\255f F)117 277.2 R
+(old upper to lo)-.15 E(wer case in the map.)-.25 E 56.64(\255N Include)117
+293.4 R(null bytes in k)2.5 E -.15(ey)-.1 G(s.).15 E 58.86(\255o Append)117
+309.6 R(to an e)2.5 E(xisting \(old\) \214le.)-.15 E 60.53(\255r Allo)117 325.8
+R 3.479(wr)-.25 G .979(eplacement of e)220.559 325.8 R .979(xisting k)-.15 F
+-.15(ey)-.1 G .979(s; normally).15 F 3.479(,r)-.65 G .979(e-inserting an e)
+385.494 325.8 R .979(xisting k)-.15 F 1.279 -.15(ey i)-.1 H(s).15 E(an error)
+189 337.8 Q(.)-.55 E 58.86(\255v Print)117 354 R(what is happening.)2.5 E(The)
+117 370.2 Q F2(sendmail)2.772 E F1 .272(daemon does not ha)2.772 F .572 -.15
+(ve t)-.2 H 2.772(ob).15 G 2.772(er)282.144 370.2 S .272
+(estarted to read the ne)292.686 370.2 R 2.772(wm)-.25 G .273
+(aps as long as you change)399.046 370.2 R .042
+(them in place; \214le locking is used so that the maps w)117 384.2 R(on')-.1 E
+2.542(tb)-.18 G 2.542(er)352.218 384.2 S .042(ead while the)362.53 384.2 R
+2.542(ya)-.15 G .042(re being updated.)427.766 384.2 R/F3 7/Times-Roman@0 SF
+(14)497 380.2 Q F1(There are also tw)142 400.4 Q 2.5(ob)-.1 G
+(uiltin maps that are, strictly speaking, not database lookups.)223.34 400.4 Q
+1.563(The \231host\232 map does host domain canoni\214cation; gi)142 416.6 R
+-.15(ve)-.25 G 4.063(nah).15 G 1.563(ost name it calls the name)392.587 416.6 R
+(serv)117 428.6 Q(er to \214nd the canonical name for that host.)-.15 E .106
+(The \231dequote\232 map strips double quotes \("\) from a name.)142 444.8 R
 .106(It does not strip backslashes.)5.106 F(It)5.106 E 1.838
 .106(It does not strip backslashes.)5.106 F(It)5.106 E 1.838
-(will not strip quotes if the resulting string w)117 245.4 R 1.838
-(ould contain unscannable syntax \(that is, basic)-.1 F .601(errors lik)117
-257.4 R 3.101(eu)-.1 G .601(nbalanced angle brack)166.422 257.4 R .601
-(ets; more sophisticated errors such as unkno)-.1 F .6(wn hosts are not)-.25 F
-(check)117 269.4 Q 3.398(ed\). The)-.1 F .899
+(will not strip quotes if the resulting string w)117 456.8 R 1.838
+(ould contain unscannable syntax \(that is, basic)-.1 F .6(errors lik)117 468.8
+R 3.1(eu)-.1 G .6(nbalanced angle brack)166.42 468.8 R .601
+(ets; more sophisticated errors such as unkno)-.1 F .601(wn hosts are not)-.25
+F(check)117 480.8 Q 3.399(ed\). The)-.1 F .899
 (intent is for use when trying to accept mail from systems such as DECnet that)
 (intent is for use when trying to accept mail from systems such as DECnet that)
-3.398 F(routinely quote odd syntax such as)117 281.4 Q("49ers::ubell")157 297.6
-Q 2.5(At)117 313.8 S(ypical usage is probably something lik)129.5 313.8 Q(e:)
--.1 E(Kdequote dequote)157 330 Q(...)157 354 Q 88.19(R$\255 $:)157 378 R
-($\(dequote $1 $\))2.5 E(R$\255 $+)157 390 Q($: $>3 $1 $2)265 390 Q
-(Care must be tak)117 406.2 Q(en to pre)-.1 E -.15(ve)-.25 G(nt une).15 E
+3.399 F(routinely quote odd syntax such as)117 492.8 Q("49ers::ubell")157 509 Q
+2.5(At)117 525.2 S(ypical usage is probably something lik)129.5 525.2 Q(e:)-.1
+E(Kdequote dequote)157 541.4 Q(...)157 565.4 Q 88.19(R$\255 $:)157 589.4 R
+($\(dequote $1 $\))2.5 E(R$\255 $+)157 601.4 Q($: $>3 $1 $2)265 601.4 Q
+(Care must be tak)117 617.6 Q(en to pre)-.1 E -.15(ve)-.25 G(nt une).15 E
 (xpected results; for e)-.15 E(xample,)-.15 E("|someprogram < input > output")
 (xpected results; for e)-.15 E(xample,)-.15 E("|someprogram < input > output")
-157 422.4 Q .084(will ha)117 438.6 R .384 -.15(ve q)-.2 H .083
-(uotes stripped, b).15 F .083
-(ut the result is probably not what you had in mind.)-.2 F -.15(Fo)5.083 G .083
-(rtunately these).15 F(cases are rare.)117 450.6 Q(Ne)142 466.8 Q 2.5(wc)-.25 G
-(lasses can be added in the routine)167.57 466.8 Q F0(setupmaps)2.5 E F1
-(in \214le)2.5 E F0(conf)2.5 E(.c)-.15 E F1(.)A F0 2.5(5.2. Building)87 490.8 R
-2.5(aC)2.5 G(on\214guration File Fr)160.91 490.8 Q(om Scratch)-.18 E F1 1.517
-(Building a con\214guration table from scratch is an e)127 507 R 1.518
-(xtremely dif)-.15 F 1.518(\214cult job)-.25 F 6.518(.F)-.4 G(ortunately)
-441.334 507 Q 4.018(,i)-.65 G 4.018(ti)490.532 507 S(s)500.11 507 Q 1.855
-(almost ne)102 519 R -.15(ve)-.25 G 4.355(rn).15 G 1.855
-(ecessary to do so; nearly e)164.19 519 R -.15(ve)-.25 G 1.855
-(ry situation that may come up may be resolv).15 F 1.855(ed by)-.15 F .416
-(changing an e)102 531 R .416(xisting table.)-.15 F .416(In an)5.416 F 2.916
+157 633.8 Q .083(will ha)117 650 R .383 -.15(ve q)-.2 H .083(uotes stripped, b)
+.15 F .083(ut the result is probably not what you had in mind.)-.2 F -.15(Fo)
+5.084 G .084(rtunately these).15 F(cases are rare.)117 662 Q .32 LW 76 671.6 72
+671.6 DL 80 671.6 76 671.6 DL 84 671.6 80 671.6 DL 88 671.6 84 671.6 DL 92
+671.6 88 671.6 DL 96 671.6 92 671.6 DL 100 671.6 96 671.6 DL 104 671.6 100
+671.6 DL 108 671.6 104 671.6 DL 112 671.6 108 671.6 DL 116 671.6 112 671.6 DL
+120 671.6 116 671.6 DL 124 671.6 120 671.6 DL 128 671.6 124 671.6 DL 132 671.6
+128 671.6 DL 136 671.6 132 671.6 DL 140 671.6 136 671.6 DL 144 671.6 140 671.6
+DL 148 671.6 144 671.6 DL 152 671.6 148 671.6 DL 156 671.6 152 671.6 DL 160
+671.6 156 671.6 DL 164 671.6 160 671.6 DL 168 671.6 164 671.6 DL 172 671.6 168
+671.6 DL 176 671.6 172 671.6 DL 180 671.6 176 671.6 DL 184 671.6 180 671.6 DL
+188 671.6 184 671.6 DL 192 671.6 188 671.6 DL 196 671.6 192 671.6 DL 200 671.6
+196 671.6 DL 204 671.6 200 671.6 DL 208 671.6 204 671.6 DL 212 671.6 208 671.6
+DL 216 671.6 212 671.6 DL/F4 5/Times-Roman@0 SF(14)93.6 682 Q/F5 8
+/Times-Roman@0 SF .128(That is, don')3.2 J 2.128(tc)-.144 G .128(reate ne)
+147.28 685.2 R 2.128(wm)-.2 G .128(aps and then use)186.432 685.2 R/F6 8
+/Times-Italic@0 SF(mv)2.129 E F5 .129(\(1\) to mo)B .369 -.12(ve t)-.12 H .129
+(hem into place.).12 F 2.129(Ic)4.129 G .129(onsider this a shortf)354.465
+685.2 R .129(all \(a.k.a. b)-.08 F .129(ug\) in)-.16 F F6(sendmail)2.129 E F5
+(which should be \214x)72 694.8 Q(ed in a future release.)-.12 E EP
+%%Page: 42 37
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-42 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(Ne)142 96 Q 2.5
+(wc)-.25 G(lasses can be added in the routine)167.57 96 Q F0(setupmaps)2.5 E F1
+(in \214le)2.5 E F0(conf)2.5 E(.c)-.15 E F1(.)A F0 2.5(5.2. Building)87 120 R
+2.5(aC)2.5 G(on\214guration File Fr)160.91 120 Q(om Scratch)-.18 E F1 1.518
+(Building a con\214guration table from scratch is an e)127 136.2 R 1.518
+(xtremely dif)-.15 F 1.517(\214cult job)-.25 F 6.517(.F)-.4 G(ortunately)
+441.336 136.2 Q 4.017(,i)-.65 G 4.017(ti)490.533 136.2 S(s)500.11 136.2 Q 1.855
+(almost ne)102 148.2 R -.15(ve)-.25 G 4.355(rn).15 G 1.855
+(ecessary to do so; nearly e)164.19 148.2 R -.15(ve)-.25 G 1.855
+(ry situation that may come up may be resolv).15 F 1.855(ed by)-.15 F .417
+(changing an e)102 160.2 R .417(xisting table.)-.15 F .417(In an)5.417 F 2.917
 (yc)-.15 G .416
 (yc)-.15 G .416
-(ase, it is critical that you understand what it is that you are try-)248.616
-531 R 1.151(ing to do and come up with a philosoph)102 543 R 3.651(yf)-.05 G
-1.151(or the con\214guration table.)281.472 543 R 1.151
-(This section is intended to)6.151 F -.15(ex)102 555 S .67
+(ase, it is critical that you understand what it is that you are try-)248.622
+160.2 R 1.151(ing to do and come up with a philosoph)102 172.2 R 3.651(yf)-.05
+G 1.151(or the con\214guration table.)281.469 172.2 R 1.152
+(This section is intended to)6.151 F -.15(ex)102 184.2 S .67
 (plain what the real purpose of a con\214guration table is and to gi).15 F .97
 (plain what the real purpose of a con\214guration table is and to gi).15 F .97
--.15(ve y)-.25 H .67(ou some ideas for what your).15 F(philosoph)102 567 Q 2.5
-(ym)-.05 G(ight be.)156.68 567 Q F0 1.32(Do not e)127 583.2 R -.1(ve)-.15 G
-3.82(nc).1 G(onsider)188.2 583.2 Q F1 1.32(writing your o)3.82 F 1.32
+-.15(ve y)-.25 H .67(ou some ideas for what your).15 F(philosoph)102 196.2 Q
+2.5(ym)-.05 G(ight be.)156.68 196.2 Q F0 1.32(Do not e)127 212.4 R -.1(ve)-.15
+G 3.82(nc).1 G(onsider)188.2 212.4 Q F1 1.32(writing your o)3.82 F 1.32
 (wn con\214guration \214le without carefully studying RFC)-.25 F
 (wn con\214guration \214le without carefully studying RFC)-.25 F
-(821, 822, and 1123.)102 595.2 Q -1.1(Yo)5 G 2.5(us)1.1 G
-(hould also read RFC 976 if you are doing UUCP e)208.95 595.2 Q(xchange.)-.15 E
-F0 2.5(5.2.1. What)102 619.2 R -.25(yo)2.5 G 2.5(ua).25 G .36 -.18(re t)178.7
-619.2 T(rying to do).18 E F1 .82
-(The con\214guration table has three major purposes.)142 635.4 R .821
-(The \214rst and simplest is to set up the)5.821 F(en)117 647.4 Q .35
+(821, 822, and 1123.)102 224.4 Q -1.1(Yo)5 G 2.5(us)1.1 G
+(hould also read RFC 976 if you are doing UUCP e)208.95 224.4 Q(xchange.)-.15 E
+F0 2.5(5.2.1. What)102 248.4 R -.25(yo)2.5 G 2.5(ua).25 G .36 -.18(re t)178.7
+248.4 T(rying to do).18 E F1 .821
+(The con\214guration table has three major purposes.)142 264.6 R .82
+(The \214rst and simplest is to set up the)5.821 F(en)117 276.6 Q .35
 (vironment for)-.4 F/F2 10/Times-Italic@0 SF(sendmail)2.85 E F1 5.35(.T)C .35
 (vironment for)-.4 F/F2 10/Times-Italic@0 SF(sendmail)2.85 E F1 5.35(.T)C .35
-(his in)234.58 647.4 R -.2(vo)-.4 G(lv).2 E .35
+(his in)234.58 276.6 R -.2(vo)-.4 G(lv).2 E .35
 (es setting the options, de\214ning a fe)-.15 F 2.85(wc)-.25 G .35
 (es setting the options, de\214ning a fe)-.15 F 2.85(wc)-.25 G .35
-(ritical macros, etc.)429.43 647.4 R(Since these are described in other places\
-, we will not go into more detail here.)117 659.4 Q .283
-(The second purpose is to re)142 675.6 R .284(write addresses in the message.)
--.25 F .284(This should typically be done)5.284 F .214(in tw)117 687.6 R 2.714
-(op)-.1 G 2.713(hases. The)150.108 687.6 R .213
+(ritical macros, etc.)429.43 276.6 R(Since these are described in other places\
+, we will not go into more detail here.)117 288.6 Q .284
+(The second purpose is to re)142 304.8 R .284(write addresses in the message.)
+-.25 F .283(This should typically be done)5.283 F .213(in tw)117 316.8 R 2.713
+(op)-.1 G 2.713(hases. The)150.106 316.8 R .213
 (\214rst phase maps addresses in an)2.713 F 2.713(yf)-.15 G .213
 (\214rst phase maps addresses in an)2.713 F 2.713(yf)-.15 G .213
-(ormat into a canonical form.)337.182 687.6 R .213(This should)5.213 F .156
-(be done in ruleset three.)117 699.6 R .157
-(The second phase maps this canonical form into the syntax appropriate)5.156 F
-1.998(for the recei)117 711.6 R 1.997(ving mailer)-.25 F(.)-.55 E F2(Sendmail)
+(ormat into a canonical form.)337.18 316.8 R .214(This should)5.214 F .157
+(be done in ruleset three.)117 328.8 R .157
+(The second phase maps this canonical form into the syntax appropriate)5.157 F
+1.997(for the recei)117 340.8 R 1.997(ving mailer)-.25 F(.)-.55 E F2(Sendmail)
 6.997 E F1 1.997(does this in three subphases.)4.497 F 1.997
 6.997 E F1 1.997(does this in three subphases.)4.497 F 1.997
-(Rulesets one and tw)6.997 F 4.497(oa)-.1 G(re)496.23 711.6 Q .043
-(applied to all sender and recipient addresses respecti)117 723.6 R -.15(ve)
--.25 G(ly).15 E 5.043(.A)-.65 G .043(fter this, you may specify per)357.904
-723.6 R(-mailer)-.2 E EP
-%%Page: 39 36
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-39)452.9 60 Q/F1 10/Times-Roman@0 SF 2.723
-(rulesets for both sender and recipient addresses; this allo)117 96 R 2.723
-(ws mailer)-.25 F 2.723(-speci\214c customization.)-.2 F(Finally)117 108 Q 2.5
-(,r)-.65 G(uleset four is applied to do an)153.02 108 Q 2.5(yd)-.15 G(ef)283.69
-108 Q(ault con)-.1 E -.15(ve)-.4 G(rsion to e).15 E(xternal form.)-.15 E .785(\
-The third purpose is to map addresses into the actual set of instructions nece\
-ssary to get)142 124.2 R .154(the message deli)117 136.2 R -.15(ve)-.25 G 2.654
-(red. Ruleset).15 F .154(zero must resolv)2.654 F 2.654(et)-.15 G 2.654(ot)
-321.658 136.2 S .153(he internal form, which is in turn used as a)332.092 136.2
-R .446(pointer to a mailer descriptor)117 148.2 R 5.446(.T)-.55 G .446
-(he mailer descriptor describes the interf)248.38 148.2 R .447
-(ace requirements of the)-.1 F(mailer)117 160.2 Q(.)-.55 E F0 2.5
-(5.2.2. Philosoph)102 184.2 R(y)-.15 E F1 1.481(The particular philosoph)142
-200.4 R 3.981(yy)-.05 G 1.481(ou choose will depend hea)257.213 200.4 R 1.481
-(vily on the size and structure of)-.2 F .55(your or)117 212.4 R -.05(ga)-.18 G
+(Rulesets one and tw)6.997 F 4.498(oa)-.1 G(re)496.23 340.8 Q .043
+(applied to all sender and recipient addresses respecti)117 352.8 R -.15(ve)
+-.25 G(ly).15 E 5.043(.A)-.65 G .043(fter this, you may specify per)357.905
+352.8 R(-mailer)-.2 E 2.723
+(rulesets for both sender and recipient addresses; this allo)117 364.8 R 2.723
+(ws mailer)-.25 F 2.723(-speci\214c customization.)-.2 F(Finally)117 376.8 Q
+2.5(,r)-.65 G(uleset four is applied to do an)153.02 376.8 Q 2.5(yd)-.15 G(ef)
+283.69 376.8 Q(ault con)-.1 E -.15(ve)-.4 G(rsion to e).15 E(xternal form.)-.15
+E .785(The third purpose is to map addresses into the actual set of instructio\
+ns necessary to get)142 393 R .153(the message deli)117 405 R -.15(ve)-.25 G
+2.653(red. Ruleset).15 F .153(zero must resolv)2.653 F 2.653(et)-.15 G 2.653
+(ot)321.651 405 S .154(he internal form, which is in turn used as a)332.084 405
+R .447(pointer to a mailer descriptor)117 417 R 5.446(.T)-.55 G .446
+(he mailer descriptor describes the interf)248.382 417 R .446
+(ace requirements of the)-.1 F(mailer)117 429 Q(.)-.55 E F0 2.5
+(5.2.2. Philosoph)102 453 R(y)-.15 E F1 1.48(The particular philosoph)142 469.2
+R 3.98(yy)-.05 G 1.481(ou choose will depend hea)257.21 469.2 R 1.481
+(vily on the size and structure of)-.2 F .55(your or)117 481.2 R -.05(ga)-.18 G
 3.05(nization. I).05 F .55(will present a fe)3.05 F 3.05(wp)-.25 G .55
 3.05(nization. I).05 F .55(will present a fe)3.05 F 3.05(wp)-.25 G .55
-(ossible philosophies here.)283.39 212.4 R .55(There are as man)5.55 F 3.05(yp)
--.15 G(hiloso-)476.22 212.4 Q
-(phies as there are con\214g designers; feel free to de)117 224.4 Q -.15(ve)
+(ossible philosophies here.)283.39 481.2 R .55(There are as man)5.55 F 3.05(yp)
+-.15 G(hiloso-)476.22 481.2 Q
+(phies as there are con\214g designers; feel free to de)117 493.2 Q -.15(ve)
 -.25 G(lop your o).15 E(wn.)-.25 E .388
 (One general point applies to all of these philosophies: it is almost al)142
 -.25 G(lop your o).15 E(wn.)-.25 E .388
 (One general point applies to all of these philosophies: it is almost al)142
-240.6 R -.1(wa)-.1 G .388(ys a mistak).1 F 2.888(et)-.1 G 2.888(ot)485.002
-240.6 S(ry)495.67 240.6 Q .176(to do full host route resolution.)117 252.6 R
+509.4 R -.1(wa)-.1 G .388(ys a mistak).1 F 2.889(et)-.1 G 2.889(ot)485.001
+509.4 S(ry)495.67 509.4 Q .176(to do full host route resolution.)117 521.4 R
 -.15(Fo)5.176 G 2.676(re).15 G .176
 -.15(Fo)5.176 G 2.676(re).15 G .176
-(xample, if you are on a UUCP-only site and you are trying)267.652 252.6 R
+(xample, if you are on a UUCP-only site and you are trying)267.654 521.4 R
 1.223(to get names of the form \231user@host\232 to the Internet, it does not \
 1.223(to get names of the form \231user@host\232 to the Internet, it does not \
-pay to route them to \231xyz-)117 264.6 R -.25(va)117 276.6 S(x!decv).25 E
-(ax!ucb)-.25 E -.25(va)-.15 G .304
-(x!c70!user@host\232 since you then depend on se).25 F -.15(ve)-.25 G .305
-(ral links not under your con-).15 F .996(trol, some of which are lik)117 288.6
+pay to route them to \231xyz-)117 533.4 R -.25(va)117 545.4 S(x!decv).25 E
+(ax!ucb)-.25 E -.25(va)-.15 G .305
+(x!c70!user@host\232 since you then depend on se).25 F -.15(ve)-.25 G .304
+(ral links not under your con-).15 F .996(trol, some of which are lik)117 557.4
 R .996(ely to misparse it an)-.1 F(yw)-.15 E(ay)-.1 E 5.996(.T)-.65 G .996
 R .996(ely to misparse it an)-.1 F(yw)-.15 E(ay)-.1 E 5.996(.T)-.65 G .996
-(he best approach to this problem is to)347.32 288.6 R 1.048(simply forw)117
-300.6 R 1.048(ard the message for \231user@host\232 to \231xyzv)-.1 F 1.049
-(ax\232 and let xyzv)-.25 F 1.049(ax w)-.25 F 1.049(orry about it from)-.1 F
-3.606(there. In)117 312.6 R(summary)3.606 E 3.606(,j)-.65 G 1.106
+(he best approach to this problem is to)347.318 557.4 R 1.049(simply forw)117
+569.4 R 1.049(ard the message for \231user@host\232 to \231xyzv)-.1 F 1.048
+(ax\232 and let xyzv)-.25 F 1.048(ax w)-.25 F 1.048(orry about it from)-.1 F
+3.605(there. In)117 581.4 R(summary)3.605 E 3.605(,j)-.65 G 1.106
 (ust get the message closer to the destination, rather than determining the)
 (ust get the message closer to the destination, rather than determining the)
-202.988 312.6 R(full path.)117 324.6 Q F0 2.5(5.2.2.1. Lar)117 348.6 R
-(ge site, many hosts \212 minimum inf)-.1 E(ormation)-.25 E F1(Berk)157 364.8 Q
-(ele)-.1 E 3.018(yi)-.15 G 3.018(sa)198.648 364.8 S 3.018(ne)209.996 364.8 S
-.518(xample of a lar)222.304 364.8 R .518(ge site, i.e., more than tw)-.18 F
-3.018(oo)-.1 G 3.018(rt)400.266 364.8 S .519(hree hosts and multiple)409.394
-364.8 R .444(mail connections.)132 376.8 R 2.044 -.8(We h)5.444 H -2.25 -.2
-(av e).8 H .443(decided that the only reasonable philosoph)3.144 F 2.943(yi)
--.05 G 2.943(no)429.634 376.8 S .443(ur en)442.577 376.8 R(vironment)-.4 E .312
-(is to designate one host as the guru for our site.)132 388.8 R .312
-(It must be able to resolv)5.312 F 2.812(ea)-.15 G .612 -.15(ny p)438.504 388.8
-T .312(iece of mail).15 F 1.083(it recei)132 400.8 R -.15(ve)-.25 G 3.583
+202.985 581.4 R(full path.)117 593.4 Q F0 2.5(5.2.2.1. Lar)117 617.4 R
+(ge site, many hosts \212 minimum inf)-.1 E(ormation)-.25 E F1(Berk)157 633.6 Q
+(ele)-.1 E 3.019(yi)-.15 G 3.019(sa)198.649 633.6 S 3.018(ne)209.998 633.6 S
+.518(xample of a lar)222.306 633.6 R .518(ge site, i.e., more than tw)-.18 F
+3.018(oo)-.1 G 3.018(rt)400.268 633.6 S .518(hree hosts and multiple)409.396
+633.6 R .443(mail connections.)132 645.6 R 2.043 -.8(We h)5.443 H -2.25 -.2
+(av e).8 H .443(decided that the only reasonable philosoph)3.143 F 2.944(yi)
+-.05 G 2.944(no)429.632 645.6 S .444(ur en)442.576 645.6 R(vironment)-.4 E .312
+(is to designate one host as the guru for our site.)132 657.6 R .312
+(It must be able to resolv)5.312 F 2.812(ea)-.15 G .612 -.15(ny p)438.504 657.6
+T .312(iece of mail).15 F 1.082(it recei)132 669.6 R -.15(ve)-.25 G 3.582
 (s. The).15 F 1.083(other sites should ha)3.583 F 1.383 -.15(ve t)-.2 H 1.083
 (s. The).15 F 1.083(other sites should ha)3.583 F 1.383 -.15(ve t)-.2 H 1.083
-(he minimum amount of information the).15 F 3.582(yc)-.15 G 1.082(an get)
-478.758 400.8 R -2.3 -.15(aw a)132 412.8 T 2.635(yw).15 G 2.635(ith. In)162.705
-412.8 R .135(addition, an)2.635 F 2.635(yi)-.15 G .135(nformation the)249.485
-412.8 R 2.635(yd)-.15 G 2.635(oh)321.265 412.8 S -2.25 -.2(av e)333.9 412.8 T
-.136(should be hints rather than solid infor)2.835 F(-)-.2 E(mation.)132 424.8
-Q -.15(Fo)157 441 S 6.71(re).15 G 4.209
-(xample, a typical site on our local ether netw)181.74 441 R 4.209
-(ork is \231monet\232 \(actually)-.1 F(\231monet.CS.Berk)132 453 Q(ele)-.1 E
+(he minimum amount of information the).15 F 3.583(yc)-.15 G 1.083(an get)
+478.757 669.6 R -2.3 -.15(aw a)132 681.6 T 2.636(yw).15 G 2.636(ith. In)162.706
+681.6 R .136(addition, an)2.636 F 2.636(yi)-.15 G .135(nformation the)249.49
+681.6 R 2.635(yd)-.15 G 2.635(oh)321.27 681.6 S -2.25 -.2(av e)333.905 681.6 T
+.135(should be hints rather than solid infor)2.835 F(-)-.2 E(mation.)132 693.6
+Q -.15(Fo)157 709.8 S 6.709(re).15 G 4.209
+(xample, a typical site on our local ether netw)181.739 709.8 R 4.21
+(ork is \231monet\232 \(actually)-.1 F(\231monet.CS.Berk)132 721.8 Q(ele)-.1 E
 -.65(y.)-.15 G 3.887(EDU\232\). When).65 F 1.387(monet recei)3.887 F -.15(ve)
 -.65(y.)-.15 G 3.887(EDU\232\). When).65 F 1.387(monet recei)3.887 F -.15(ve)
--.25 G 3.887(sm).15 G 1.387(ail for deli)354.258 453 R -.15(ve)-.25 G(ry).15 E
-3.887(,i)-.65 G 3.887(tc)424.579 453 S 1.387(hecks whether it)435.686 453 R
-(kno)132 465 Q 1.342(ws that the destination host is directly reachable; if so\
-, mail is sent to that host.)-.25 F 1.342(If it)6.342 F(recei)132 477 Q -.15
-(ve)-.25 G 2.915(sm).15 G .415(ail for an)175.055 477 R 2.915(yu)-.15 G(nkno)
-224.75 477 Q .415(wn host, it just passes it directly to \231ucb)-.25 F -.25
-(va)-.15 G(x.CS.Berk).25 E(ele)-.1 E -.65(y.)-.15 G(EDU\232,).65 E .178
-(our master host.)132 489 R(Ucb)5.178 E -.25(va)-.15 G 2.678(xm).25 G .177
-(ay determine that the host name is ille)242.852 489 R -.05(ga)-.15 G 2.677(la)
-.05 G .177(nd reject the message,)415.159 489 R .754(or may be able to do deli)
-132 501 R -.15(ve)-.25 G(ry).15 E 5.754(.H)-.65 G -.25(ow)268.146 501 S -2.15
--.25(ev e).25 H 1.554 -.4(r, i).25 H 3.254(ti).4 G 3.254(si)313.874 501 S .754
-(mportant to note that when a ne)323.798 501 R 3.254(wm)-.25 G .754(ail con-)
-472.976 501 R .164(nection is added, the only host that)132 513 R/F2 10
+-.25 G 3.887(sm).15 G 1.387(ail for deli)354.258 721.8 R -.15(ve)-.25 G(ry).15
+E 3.887(,i)-.65 G 3.887(tc)424.579 721.8 S 1.387(hecks whether it)435.686 721.8
+R EP
+%%Page: 43 38
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-43)452.9 60 Q/F1 10/Times-Roman@0 SF(kno)132 96 Q 1.342(ws that the de\
+stination host is directly reachable; if so, mail is sent to that host.)-.25 F
+1.343(If it)6.343 F(recei)132 108 Q -.15(ve)-.25 G 2.915(sm).15 G .415
+(ail for an)175.055 108 R 2.915(yu)-.15 G(nkno)224.75 108 Q .415
+(wn host, it just passes it directly to \231ucb)-.25 F -.25(va)-.15 G
+(x.CS.Berk).25 E(ele)-.1 E -.65(y.)-.15 G(EDU\232,).65 E .177(our master host.)
+132 120 R(Ucb)5.177 E -.25(va)-.15 G 2.677(xm).25 G .177
+(ay determine that the host name is ille)242.848 120 R -.05(ga)-.15 G 2.678(la)
+.05 G .178(nd reject the message,)415.156 120 R .754(or may be able to do deli)
+132 132 R -.15(ve)-.25 G(ry).15 E 5.754(.H)-.65 G -.25(ow)268.148 132 S -2.15
+-.25(ev e).25 H 1.554 -.4(r, i).25 H 3.254(ti).4 G 3.254(si)313.876 132 S .754
+(mportant to note that when a ne)323.8 132 R 3.253(wm)-.25 G .753(ail con-)
+472.977 132 R .164(nection is added, the only host that)132 144 R/F2 10
 /Times-Italic@0 SF(must)2.664 E F1(ha)2.664 E .464 -.15(ve i)-.2 H .164
 (ts tables updated is ucb).15 F -.25(va)-.15 G .164(x; the others).25 F F2(may)
 /Times-Italic@0 SF(must)2.664 E F1(ha)2.664 E .464 -.15(ve i)-.2 H .164
 (ts tables updated is ucb).15 F -.25(va)-.15 G .164(x; the others).25 F F2(may)
-2.664 E F1(be)2.664 E(updated if con)132 525 Q -.15(ve)-.4 G(nient, b).15 E
-(ut this is not critical.)-.2 E 2.121
-(This picture is slightly muddied due to netw)157 541.2 R 2.122
-(ork connections that are not actually)-.1 F 2.362(located on ucb)132 553.2 R
+2.665 E F1(be)2.665 E(updated if con)132 156 Q -.15(ve)-.4 G(nient, b).15 E
+(ut this is not critical.)-.2 E 2.122
+(This picture is slightly muddied due to netw)157 172.2 R 2.121
+(ork connections that are not actually)-.1 F 2.361(located on ucb)132 184.2 R
 -.25(va)-.15 G 4.862(x. F).25 F 2.362(or e)-.15 F 2.362
 (xample, some UUCP connections are currently on \231ucbarpa.)-.15 F<9a>-.7 E
 -.25(va)-.15 G 4.862(x. F).25 F 2.362(or e)-.15 F 2.362
 (xample, some UUCP connections are currently on \231ucbarpa.)-.15 F<9a>-.7 E
-(Ho)132 565.2 Q(we)-.25 E -.15(ve)-.25 G 1.044 -.4(r, m).15 H(onet).4 E F2 .244
-(does not)2.744 F F1(kno)2.744 E 2.744(wa)-.25 G .245
-(bout this; the information is hidden totally between ucb)266.34 565.2 R -.25
-(va)-.15 G(x).25 E 1.045(and ucbarpa.)132 577.2 R 1.045
+(Ho)132 196.2 Q(we)-.25 E -.15(ve)-.25 G 1.045 -.4(r, m).15 H(onet).4 E F2 .245
+(does not)2.745 F F1(kno)2.745 E 2.745(wa)-.25 G .244
+(bout this; the information is hidden totally between ucb)266.345 196.2 R -.25
+(va)-.15 G(x).25 E 1.044(and ucbarpa.)132 208.2 R 1.045
 (Mail going from monet to a UUCP host is transferred via the ethernet from)
 (Mail going from monet to a UUCP host is transferred via the ethernet from)
-6.045 F 1.43(monet to ucb)132 589.2 R -.25(va)-.15 G 1.43
+6.044 F 1.431(monet to ucb)132 220.2 R -.25(va)-.15 G 1.431
 (x, then via the ethernet from ucb).25 F -.25(va)-.15 G 3.931(xt).25 G 3.931
 (x, then via the ethernet from ucb).25 F -.25(va)-.15 G 3.931(xt).25 G 3.931
-(ou)355.704 589.2 S 1.431(cbarpa, and then is submitted to)369.635 589.2 R
-(UUCP)132 601.2 Q 5(.A)-1.11 G(lthough this in)172.28 601.2 Q -.2(vo)-.4 G(lv)
-.2 E(es some e)-.15 E(xtra hops, we feel this is an acceptable tradeof)-.15 E
-(f.)-.25 E .826(An interesting point is that it w)157 617.4 R .826
+(ou)355.709 220.2 S 1.43(cbarpa, and then is submitted to)369.64 220.2 R(UUCP)
+132 232.2 Q 5(.A)-1.11 G(lthough this in)172.28 232.2 Q -.2(vo)-.4 G(lv).2 E
+(es some e)-.15 E(xtra hops, we feel this is an acceptable tradeof)-.15 E(f.)
+-.25 E .825(An interesting point is that it w)157 248.4 R .826
 (ould be possible to update monet to send appropriate)-.1 F .127
 (ould be possible to update monet to send appropriate)-.1 F .127
-(UUCP mail directly to ucbarpa if the load got too high; if monet f)132 629.4 R
-.127(ailed to note a host as con-)-.1 F .353(nected to ucbarpa it w)132 641.4 R
-.353(ould go via ucb)-.1 F -.25(va)-.15 G 2.853(xa).25 G 2.852(sb)305.954 641.4
-S .352(efore, and if monet incorrectly sent a message)317.696 641.4 R .395
-(to ucbarpa it w)132 653.4 R .396(ould still be sent by ucbarpa to ucb)-.1 F
--.25(va)-.15 G 2.896(xa).25 G 2.896(sb)356.654 653.4 S 2.896(efore. The)368.44
-653.4 R .396(only problem that can)2.896 F .901(occur is loops, for e)132 665.4
-.901(xample, if ucbarpa thought that ucb)-.15 F -.25(va)-.15 G 3.401(xh).25 G
-.9(ad the UUCP connection and)383.75 665.4 R(vice v)132 677.4 Q 2.5(ersa. F)
+(UUCP mail directly to ucbarpa if the load got too high; if monet f)132 260.4 R
+.127(ailed to note a host as con-)-.1 F .352(nected to ucbarpa it w)132 272.4 R
+.352(ould go via ucb)-.1 F -.25(va)-.15 G 2.852(xa).25 G 2.853(sb)305.946 272.4
+S .353(efore, and if monet incorrectly sent a message)317.689 272.4 R .396
+(to ucbarpa it w)132 284.4 R .396(ould still be sent by ucbarpa to ucb)-.1 F
+-.25(va)-.15 G 2.896(xa).25 G 2.896(sb)356.656 284.4 S 2.896(efore. The)368.442
+284.4 R .395(only problem that can)2.896 F .9(occur is loops, for e)132 296.4 R
+.901(xample, if ucbarpa thought that ucb)-.15 F -.25(va)-.15 G 3.401(xh).25 G
+.901(ad the UUCP connection and)383.746 296.4 R(vice v)132 308.4 Q 2.5(ersa. F)
 -.15 F(or this reason, updates should)-.15 E F2(always)2.5 E F1
 -.15 F(or this reason, updates should)-.15 E F2(always)2.5 E F1
-(happen to the master host \214rst.)2.5 E .144(This philosoph)157 693.6 R 2.644
-(yr)-.05 G .145(esults as much from the need to ha)227.798 693.6 R .445 -.15
-(ve a s)-.2 H .145(ingle source for the con\214gu-).15 F .289
-(ration \214les \(typically b)132 705.6 R .289(uilt using)-.2 F F2(m4)2.789 E
-F1 .289(\(1\) or some similar tool\) as an)1.666 F 2.789(yl)-.15 G .288
-(ogical need.)410.664 705.6 R(Maintain-)5.288 E
+(happen to the master host \214rst.)2.5 E .145(This philosoph)157 324.6 R 2.645
+(yr)-.05 G .145(esults as much from the need to ha)227.8 324.6 R .445 -.15
+(ve a s)-.2 H .144(ingle source for the con\214gu-).15 F .288
+(ration \214les \(typically b)132 336.6 R .289(uilt using)-.2 F F2(m4)2.789 E
+F1 .289(\(1\) or some similar tool\) as an)1.666 F 2.789(yl)-.15 G .289
+(ogical need.)410.662 336.6 R(Maintain-)5.289 E
 (ing more than three separate tables by hand is essentially an impossible job)
 (ing more than three separate tables by hand is essentially an impossible job)
-132 717.6 Q(.)-.4 E EP
-%%Page: 40 37
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-40 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E 2.5(5.2.2.2. Small)117 96 R
-(site \212 complete inf)2.5 E(ormation)-.25 E/F1 10/Times-Roman@0 SF 3.356(As)
-157 112.2 S .856(mall site \(tw)171.466 112.2 R 3.356(oo)-.1 G 3.356(rt)236.434
-112.2 S .856(hree hosts and fe)245.9 112.2 R 3.356(we)-.25 G .856
-(xternal connections\) may \214nd it more rea-)330.564 112.2 R .435
-(sonable to ha)132 124.2 R .735 -.15(ve c)-.2 H .435
+132 348.6 Q(.)-.4 E F0 2.5(5.2.2.2. Small)117 372.6 R(site \212 complete inf)
+2.5 E(ormation)-.25 E F1 3.356(As)157 388.8 S .856(mall site \(tw)171.466 388.8
+R 3.356(oo)-.1 G 3.356(rt)236.434 388.8 S .856(hree hosts and fe)245.9 388.8 R
+3.356(we)-.25 G .856(xternal connections\) may \214nd it more rea-)330.564
+388.8 R .435(sonable to ha)132 400.8 R .735 -.15(ve c)-.2 H .435
 (omplete information at each host.).15 F .435(This w)5.435 F .435
 (omplete information at each host.).15 F .435(This w)5.435 F .435
-(ould require that each host kno)-.1 F(w)-.25 E -.15(ex)132 136.2 S .185
+(ould require that each host kno)-.1 F(w)-.25 E -.15(ex)132 412.8 S .185
 (actly where each netw).15 F .185
 (ork connection is, possibly including the names of each host on that)-.1 F
 (actly where each netw).15 F .185
 (ork connection is, possibly including the names of each host on that)-.1 F
-(netw)132 148.2 Q 4.341(ork. As)-.1 F 1.841
-(long as the site remains small and the the con\214guration remains relati)
-4.341 F -.15(ve)-.25 G(ly).15 E
-(static, the update problem will probably not be too great.)132 160.2 Q F0 2.5
-(5.2.2.3. Single)117 184.2 R(host)2.5 E F1 .117(This is in some sense the tri)
-157 200.4 R .117(vial case.)-.25 F .117
-(The only major issue is trying to insure that you)5.117 F(don')132 212.4 Q
-3.425(th)-.18 G -2.25 -.2(av e)161.355 212.4 T .925(to kno)3.625 F 3.425(wt)
--.25 G .925(oo much about your en)217.69 212.4 R 3.425(vironment. F)-.4 F .925
-(or e)-.15 F .924(xample, if you ha)-.15 F 1.224 -.15(ve a U)-.2 H(UCP).15 E
-.614(connection you might \214nd it useful to kno)132 224.4 R 3.115(wa)-.25 G
-.615(bout the names of hosts connected directly to)318.885 224.4 R(you, b)132
-236.4 Q
+(netw)132 424.8 Q 4.34(ork. As)-.1 F 1.841
+(long as the site remains small and the the con\214guration remains relati)4.34
+F -.15(ve)-.25 G(ly).15 E
+(static, the update problem will probably not be too great.)132 436.8 Q F0 2.5
+(5.2.2.3. Single)117 460.8 R(host)2.5 E F1 .117(This is in some sense the tri)
+157 477 R .117(vial case.)-.25 F .117
+(The only major issue is trying to insure that you)5.117 F(don')132 489 Q 3.424
+(th)-.18 G -2.25 -.2(av e)161.354 489 T .924(to kno)3.624 F 3.424(wt)-.25 G
+.925(oo much about your en)217.686 489 R 3.425(vironment. F)-.4 F .925(or e)
+-.15 F .925(xample, if you ha)-.15 F 1.225 -.15(ve a U)-.2 H(UCP).15 E .615
+(connection you might \214nd it useful to kno)132 501 R 3.115(wa)-.25 G .614
+(bout the names of hosts connected directly to)318.89 501 R(you, b)132 513 Q
 (ut this is really not necessary since this may be determined from the syntax.)
 (ut this is really not necessary since this may be determined from the syntax.)
--.2 E F0 2.5(5.2.2.4. A)117 260.4 R(completely differ)2.5 E(ent philosoph)-.18
-E(y)-.15 E F1(This is adapted from Bruce Lilly)157 276.6 Q 5(.A)-.65 G .3 -.15
-(ny e)301.89 276.6 T(rrors in interpretation are mine.).15 E .065
-(Do minimal changes in ruleset 3: \214x some common b)157 292.8 R .064
+-.2 E F0 2.5(5.2.2.4. A)117 537 R(completely differ)2.5 E(ent philosoph)-.18 E
+(y)-.15 E F1(This is adapted from Bruce Lilly)157 553.2 Q 5(.A)-.65 G .3 -.15
+(ny e)301.89 553.2 T(rrors in interpretation are mine.).15 E .064
+(Do minimal changes in ruleset 3: \214x some common b)157 569.4 R .065
 (ut unambiguous errors \(e.g. trail-)-.2 F 2.758
 (ut unambiguous errors \(e.g. trail-)-.2 F 2.758
-(ing dot on domains\) and hide bang paths foo!bar into bar@foo.UUCP)132 304.8 R
-7.759(.T)-1.11 G 2.759(he resulting)454.301 304.8 R("canonical" form is an)132
-316.8 Q 2.5(yv)-.15 G(alid RFC822/RFC1123/RFC976 address.)233.63 316.8 Q 1.388
-(Ruleset 0 does the b)157 333 R 1.387(ulk of the w)-.2 F 3.887(ork. It)-.1 F
+(ing dot on domains\) and hide bang paths foo!bar into bar@foo.UUCP)132 581.4 R
+7.758(.T)-1.11 G 2.758(he resulting)454.302 581.4 R("canonical" form is an)132
+593.4 Q 2.5(yv)-.15 G(alid RFC822/RFC1123/RFC976 address.)233.63 593.4 Q 1.387
+(Ruleset 0 does the b)157 609.6 R 1.387(ulk of the w)-.2 F 3.887(ork. It)-.1 F
 (remo)3.887 E -.15(ve)-.15 G 3.887(st).15 G 1.387
 (remo)3.887 E -.15(ve)-.15 G 3.887(st).15 G 1.387
-(he trailing "@.UUCP" that hides)367.472 333 R .66(bang paths, strips an)132
-345 R .661(ything not needed to resolv)-.15 F .661
-(e, e.g. the phrase from phrase <route-addr>)-.15 F .497
-(and from named groups, rejects unparseable addresses using $#error)132 357 R
-2.996(,a)-.4 G .496(nd \214nally resolv)419.052 357 R .496(es to)-.15 F 4.324
-(am)132 369 S 1.824(ailer/host/user triple.)148.544 369 R 1.824
-(Ruleset 0 is rather length)6.824 F 4.325(ya)-.05 G 4.325(si)360.965 369 S
-4.325(th)371.96 369 S 1.825(as to handle 3 basic address)384.065 369 R 5.373
-(forms: RFC976 bang paths, RFC1123 %-hacks \(including v)132 381 R 5.373
-(anilla RFC822 local-)-.25 F .136(part@domain\), and RFC822 source routes.)132
-393 R(It')5.137 E 2.637(sa)-.55 G .137(lso complicated by ha)329.508 393 R .137
-(ving to handle named)-.2 F(lists.)132 405 Q .617(The header re)157 421.2 R
-.616(writing rulesets 1 and 2 remo)-.25 F .916 -.15(ve t)-.15 H .616
-(he trailing "@.UUCP" that hides bang).15 F 2.5(paths. Ruleset)132 433.2 R 2.5
-(2a)2.5 G(lso strips the $# mailer $@ host \(for test mode\).)205.05 433.2 Q
-(Ruleset 4 does absolutely nothing.)157 449.4 Q 1.316(The per)157 465.6 R 1.316
-(-mailer re)-.2 F 1.316(writing rulesets conform the en)-.25 F -.15(ve)-.4 G
-1.317(lope and header addresses to the).15 F
-(requirements of the speci\214c mailer)132 477.6 Q(.)-.55 E
-(Lots of rulesets-as-subroutines are used.)157 493.8 Q .35(As a result, header\
- addresses are subject to minimal munging \(per RFC1123\), and the)157 510 R
-(general plan is per RFC822 sect. 3.4.10.)132 522 Q F0 2.5(5.2.3. Rele)102 546
-R -.1(va)-.15 G(nt issues).1 E F1 .584(The canonical form you use should almos\
-t certainly be as speci\214ed in the Internet proto-)142 562.2 R 2.604
-(cols RFC819 and RFC822.)117 574.2 R 2.604(Copies of these RFC')7.604 F 5.104
-(sa)-.55 G 2.603(re included on the)347.852 574.2 R/F2 10/Times-Italic@0 SF
-(sendmail)5.103 E F1 2.603(tape as)5.103 F F2(doc/rfc819.lpr)117 586.2 Q F1
-(and)2.5 E F2(doc/rfc822.lpr)2.5 E F1(.)A 2.04
-(RFC822 describes the format of the mail message itself.)142 602.4 R F2
-(Sendmail)7.04 E F1(follo)4.54 E 2.04(ws this RFC)-.25 F(closely)117 614.4 Q
-2.984(,t)-.65 G 2.984(ot)152.944 614.4 S .483(he e)163.708 614.4 R .483
-(xtent that man)-.15 F 2.983(yo)-.15 G 2.983(ft)251.44 614.4 S .483
-(he standards described in this document can not be changed)260.533 614.4 R
-(without changing the code.)117 626.4 Q(In particular)5 E 2.5(,t)-.4 G
-(he follo)286.85 626.4 Q(wing characters ha)-.25 E .3 -.15(ve s)-.2 H
-(pecial interpretations:).15 E 2.5(<>\(\)"\\)157 642.6 S(An)117 658.8 Q 3.036
-(ya)-.15 G .537(ttempt to use these characters for other than their RFC822 pur\
-pose in addresses is proba-)141.546 658.8 R(bly doomed to disaster)117 670.8 Q
-(.)-.55 E 1.327
-(RFC819 describes the speci\214cs of the domain-based addressing.)142 687 R
-1.326(This is touched on in)6.327 F 1.439(RFC822 as well.)117 699 R 1.439
-(Essentially each host is gi)6.439 F -.15(ve)-.25 G 3.939(nan).15 G 1.44
-(ame which is a right-to-left dot quali\214ed)333.711 699 R .232
-(pseudo-path from a distinguished root.)117 711 R .232
-(The elements of the path need not be ph)5.232 F .232(ysical hosts; the)-.05 F
-2.365(domain is logical rather than ph)117 723 R 4.866(ysical. F)-.05 F 2.366
-(or e)-.15 F 2.366(xample, at Berk)-.15 F(ele)-.1 E 4.866(yo)-.15 G 2.366
-(ne le)406.406 723 R -.05(ga)-.15 G 4.866(lh).05 G 2.366(ost might be)449.818
-723 R EP
-%%Page: 41 38
+(he trailing "@.UUCP" that hides)367.47 609.6 R .661(bang paths, strips an)132
+621.6 R .661(ything not needed to resolv)-.15 F .661
+(e, e.g. the phrase from phrase <route-addr>)-.15 F .496
+(and from named groups, rejects unparseable addresses using $#error)132 633.6 R
+2.997(,a)-.4 G .497(nd \214nally resolv)419.049 633.6 R .497(es to)-.15 F 4.325
+(am)132 645.6 S 1.825(ailer/host/user triple.)148.545 645.6 R 1.825
+(Ruleset 0 is rather length)6.825 F 4.325(ya)-.05 G 4.325(si)360.97 645.6 S
+4.325(th)371.965 645.6 S 1.824(as to handle 3 basic address)384.07 645.6 R
+5.373(forms: RFC976 bang paths, RFC1123 %-hacks \(including v)132 657.6 R 5.374
+(anilla RFC822 local-)-.25 F .137(part@domain\), and RFC822 source routes.)132
+669.6 R(It')5.137 E 2.637(sa)-.55 G .137(lso complicated by ha)329.512 669.6 R
+.136(ving to handle named)-.2 F(lists.)132 681.6 Q .616(The header re)157 697.8
+R .616(writing rulesets 1 and 2 remo)-.25 F .916 -.15(ve t)-.15 H .616
+(he trailing "@.UUCP" that hides bang).15 F 2.5(paths. Ruleset)132 709.8 R 2.5
+(2a)2.5 G(lso strips the $# mailer $@ host \(for test mode\).)205.05 709.8 Q EP
+%%Page: 44 39
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-41)452.9 60 Q/F1 10/Times-Roman@0 SF(\231a.CC.Berk)117 96 Q(ele)-.1 E
--.65(y.)-.15 G .366
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-44 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF
+(Ruleset 4 does absolutely nothing.)157 96 Q 1.317(The per)157 112.2 R 1.317
+(-mailer re)-.2 F 1.317(writing rulesets conform the en)-.25 F -.15(ve)-.4 G
+1.316(lope and header addresses to the).15 F
+(requirements of the speci\214c mailer)132 124.2 Q(.)-.55 E
+(Lots of rulesets-as-subroutines are used.)157 140.4 Q .35(As a result, header\
+ addresses are subject to minimal munging \(per RFC1123\), and the)157 156.6 R
+(general plan is per RFC822 sect. 3.4.10.)132 168.6 Q F0 2.5(5.2.3. Rele)102
+192.6 R -.1(va)-.15 G(nt issues).1 E F1 .584(The canonical form you use should\
+ almost certainly be as speci\214ed in the Internet proto-)142 208.8 R 2.603
+(cols RFC819 and RFC822.)117 220.8 R 2.603(Copies of these RFC')7.603 F 5.104
+(sa)-.55 G 2.604(re included on the)347.846 220.8 R/F2 10/Times-Italic@0 SF
+(sendmail)5.104 E F1 2.604(tape as)5.104 F F2(doc/rfc819.lpr)117 232.8 Q F1
+(and)2.5 E F2(doc/rfc822.lpr)2.5 E F1(.)A 2.04
+(RFC822 describes the format of the mail message itself.)142 249 R F2(Sendmail)
+7.04 E F1(follo)4.54 E 2.04(ws this RFC)-.25 F(closely)117 261 Q 2.983(,t)-.65
+G 2.983(ot)152.943 261 S .483(he e)163.706 261 R .483(xtent that man)-.15 F
+2.983(yo)-.15 G 2.983(ft)251.438 261 S .483
+(he standards described in this document can not be changed)260.531 261 R
+(without changing the code.)117 273 Q(In particular)5 E 2.5(,t)-.4 G(he follo)
+286.85 273 Q(wing characters ha)-.25 E .3 -.15(ve s)-.2 H
+(pecial interpretations:).15 E 2.5(<>\(\)"\\)157 289.2 S(An)117 305.4 Q 3.037
+(ya)-.15 G .537(ttempt to use these characters for other than their RFC822 pur\
+pose in addresses is proba-)141.547 305.4 R(bly doomed to disaster)117 317.4 Q
+(.)-.55 E 1.326
+(RFC819 describes the speci\214cs of the domain-based addressing.)142 333.6 R
+1.327(This is touched on in)6.327 F 1.44(RFC822 as well.)117 345.6 R 1.44
+(Essentially each host is gi)6.44 F -.15(ve)-.25 G 3.939(nan).15 G 1.439
+(ame which is a right-to-left dot quali\214ed)333.716 345.6 R .232
+(pseudo-path from a distinguished root.)117 357.6 R .232
+(The elements of the path need not be ph)5.232 F .232(ysical hosts; the)-.05 F
+2.366(domain is logical rather than ph)117 369.6 R 4.866(ysical. F)-.05 F 2.366
+(or e)-.15 F 2.366(xample, at Berk)-.15 F(ele)-.1 E 4.866(yo)-.15 G 2.365
+(ne le)406.41 369.6 R -.05(ga)-.15 G 4.865(lh).05 G 2.365(ost might be)449.82
+369.6 R(\231a.CC.Berk)117 381.6 Q(ele)-.1 E -.65(y.)-.15 G .365
 (EDU\232; reading from right to left, \231EDU\232 is a top le).65 F -.15(ve)
 (EDU\232; reading from right to left, \231EDU\232 is a top le).65 F -.15(ve)
--.25 G 2.865(ld).15 G .365(omain comprising edu-)410.5 96 R .561
-(cational institutions, \231Berk)117 108 R(ele)-.1 E .562
+-.25 G 2.866(ld).15 G .366(omain comprising edu-)410.498 381.6 R .562
+(cational institutions, \231Berk)117 393.6 R(ele)-.1 E .562
 (y\232 is a logical domain name, \231CC\232 represents the Computer Cen-)-.15 F
 (y\232 is a logical domain name, \231CC\232 represents the Computer Cen-)-.15 F
-(ter)117 120 Q 2.5(,\()-.4 G(in this case a strictly logical entity\), and \
-\231a\232 is a host in the Computer Center)135.48 120 Q(.)-.55 E(Be)142 136.2 Q
--.1(wa)-.25 G(re when reading RFC819 that there are a number of errors in it.)
-.1 E F0 2.5(5.2.4. Ho)102 160.2 R 2.5(wt)-.1 G 2.5(op)155.23 160.2 S -.18(ro)
-168.29 160.2 S(ceed).18 E F1 .335(Once you ha)142 176.4 R .635 -.15(ve d)-.2 H
-.335(ecided on a philosoph).15 F 1.635 -.65(y, i)-.05 H 2.835(ti).65 G 2.834
-(sw)319.44 176.4 S .334(orth e)333.284 176.4 R .334(xamining the a)-.15 F -.25
-(va)-.2 G .334(ilable con\214guration).25 F .174(tables to decide if an)117
-188.4 R 2.674(yo)-.15 G 2.674(ft)212.98 188.4 S .174
-(hem are close enough to steal major parts of.)221.764 188.4 R(Ev)5.174 E .175
-(en under the w)-.15 F .175(orst of)-.1 F(conditions, there is a f)117 200.4 Q
-(air amount of boiler plate that can be collected safely)-.1 E(.)-.65 E .33
-(The ne)142 216.6 R .33(xt step is to b)-.15 F .33(uild ruleset three.)-.2 F
-.329(This will be the hardest part of the job)5.33 F 5.329(.B)-.4 G -2.1 -.25
-(ew a)469.321 216.6 T .329(re of).25 F .781
-(doing too much to the address in this ruleset, since an)117 228.6 R .781
-(ything you do will re\215ect through to the)-.15 F 2.744(message. In)117 240.6
-R(particular)2.744 E 2.744(,s)-.4 G .243
-(tripping of local domains is best deferred, since this can lea)216.752 240.6 R
-.543 -.15(ve y)-.2 H .243(ou with).15 F 1.234
-(addresses with no domain spec at all.)117 252.6 R(Since)6.235 E/F2 10
-/Times-Italic@0 SF(sendmail)3.735 E F1(lik)3.735 E 1.235
-(es to append the sending domain to)-.1 F .83
+(ter)117 405.6 Q 2.5(,\()-.4 G(in this case a strictly logical entity\), and \
+\231a\232 is a host in the Computer Center)135.48 405.6 Q(.)-.55 E(Be)142 421.8
+Q -.1(wa)-.25 G
+(re when reading RFC819 that there are a number of errors in it.).1 E F0 2.5
+(5.2.4. Ho)102 445.8 R 2.5(wt)-.1 G 2.5(op)155.23 445.8 S -.18(ro)168.29 445.8
+S(ceed).18 E F1 .334(Once you ha)142 462 R .634 -.15(ve d)-.2 H .334
+(ecided on a philosoph).15 F 1.635 -.65(y, i)-.05 H 2.835(ti).65 G 2.835(sw)
+319.435 462 S .335(orth e)333.28 462 R .335(xamining the a)-.15 F -.25(va)-.2 G
+.335(ilable con\214guration).25 F .175(tables to decide if an)117 474 R 2.674
+(yo)-.15 G 2.674(ft)212.984 474 S .174
+(hem are close enough to steal major parts of.)221.768 474 R(Ev)5.174 E .174
+(en under the w)-.15 F .174(orst of)-.1 F(conditions, there is a f)117 486 Q
+(air amount of boiler plate that can be collected safely)-.1 E(.)-.65 E .329
+(The ne)142 502.2 R .329(xt step is to b)-.15 F .329(uild ruleset three.)-.2 F
+.33(This will be the hardest part of the job)5.329 F 5.33(.B)-.4 G -2.1 -.25
+(ew a)469.32 502.2 T .33(re of).25 F .781
+(doing too much to the address in this ruleset, since an)117 514.2 R .781
+(ything you do will re\215ect through to the)-.15 F 2.743(message. In)117 526.2
+R(particular)2.743 E 2.743(,s)-.4 G .243
+(tripping of local domains is best deferred, since this can lea)216.749 526.2 R
+.544 -.15(ve y)-.2 H .244(ou with).15 F 1.235
+(addresses with no domain spec at all.)117 538.2 R(Since)6.235 E F2(sendmail)
+3.735 E F1(lik)3.735 E 1.234(es to append the sending domain to)-.1 F .83
 (addresses with no domain, this can change the semantics of addresses.)117
 (addresses with no domain, this can change the semantics of addresses.)117
-264.6 R .83(Also try to a)5.83 F -.2(vo)-.2 G .83(id fully).2 F .342
-(qualifying domains in this ruleset.)117 276.6 R .342(Although technically le)
-5.342 F -.05(ga)-.15 G .343(l, this can lead to unpleasantly and).05 F 1.287
-(unnecessarily long addresses re\215ected into messages.)117 288.6 R 1.287
+550.2 R .83(Also try to a)5.83 F -.2(vo)-.2 G .83(id fully).2 F .343
+(qualifying domains in this ruleset.)117 562.2 R .342(Although technically le)
+5.342 F -.05(ga)-.15 G .342(l, this can lead to unpleasantly and).05 F 1.287
+(unnecessarily long addresses re\215ected into messages.)117 574.2 R 1.287
 (The Berk)6.287 F(ele)-.1 E 3.787(yc)-.15 G 1.287
 (The Berk)6.287 F(ele)-.1 E 3.787(yc)-.15 G 1.287
-(on\214guration \214les de\214ne)406.426 288.6 R .093
-(ruleset nine to qualify domain names and strip local domains.)117 300.6 R .093
+(on\214guration \214les de\214ne)406.426 574.2 R .093
+(ruleset nine to qualify domain names and strip local domains.)117 586.2 R .093
 (This is called from ruleset zero to)5.093 F
 (This is called from ruleset zero to)5.093 F
-(get all addresses into a cleaner form.)117 312.6 Q .318(Once you ha)142 328.8
+(get all addresses into a cleaner form.)117 598.2 Q .317(Once you ha)142 614.4
 R .618 -.15(ve r)-.2 H .318
 (uleset three \214nished, the other rulesets should be relati).15 F -.15(ve)
 R .618 -.15(ve r)-.2 H .318
 (uleset three \214nished, the other rulesets should be relati).15 F -.15(ve)
--.25 G .318(ly tri).15 F 2.817(vial. If)-.25 F(you)2.817 E(need hints, e)117
-340.8 Q(xamine the supplied con\214guration tables.)-.15 E F0 2.5(5.2.5. T)102
-364.8 R(esting the r)-.92 E(ewriting rules \212 the \255bt \215ag)-.18 E F1
-1.075(When you b)142 381 R 1.075(uild a con\214guration table, you can do a ce\
-rtain amount of testing using the)-.2 F(\231test mode\232 of)117 393 Q F2
-(sendmail)2.5 E F1 5(.F)C(or e)226.84 393 Q(xample, you could in)-.15 E -.2(vo)
--.4 G -.1(ke).2 G F2(sendmail)2.6 E F1(as:)2.5 E(sendmail \255bt \255Ctest.cf)
-157 409.2 Q .904(which w)117 425.4 R .903
+-.25 G .318(ly tri).15 F 2.818(vial. If)-.25 F(you)2.818 E(need hints, e)117
+626.4 Q(xamine the supplied con\214guration tables.)-.15 E F0 2.5(5.2.5. T)102
+650.4 R(esting the r)-.92 E(ewriting rules \212 the \255bt \215ag)-.18 E F1
+1.076(When you b)142 666.6 R 1.075(uild a con\214guration table, you can do a \
+certain amount of testing using the)-.2 F(\231test mode\232 of)117 678.6 Q F2
+(sendmail)2.5 E F1 5(.F)C(or e)226.84 678.6 Q(xample, you could in)-.15 E -.2
+(vo)-.4 G -.1(ke).2 G F2(sendmail)2.6 E F1(as:)2.5 E
+(sendmail \255bt \255Ctest.cf)157 694.8 Q .903(which w)117 711 R .903
 (ould read the con\214guration \214le \231test.cf\232 and enter test mode.)-.1
 (ould read the con\214guration \214le \231test.cf\232 and enter test mode.)-.1
-F .903(In this mode, you enter)5.903 F(lines of the form:)117 437.4 Q
-(rwset address)157 453.6 Q(where)117 469.8 Q F2(rwset)3.376 E F1 .876
-(is the re)3.376 F .876(writing set you w)-.25 F .876(ant to use and)-.1 F F2
-(addr)3.376 E(ess)-.37 E F1 .877(is an address to apply the set to.)3.376 F -.7
-(Te)117 481.8 S .17(st mode sho).7 F .17(ws you the steps it tak)-.25 F .169
-(es as it proceeds, \214nally sho)-.1 F .169(wing you the address it ends up)
--.25 F 3.635(with. Y)117 493.8 R 1.135(ou may use a comma separated list of rw\
-sets for sequential application of rules to an)-1.1 F 2.5(input. F)117 505.8 R
-(or e)-.15 E(xample:)-.15 E(3,1,21,4 monet:bollard)157 522 Q .386
-(\214rst applies ruleset three to the input \231monet:bollard.)117 538.2 R
-5.385<9a52>-.7 G .385(uleset one is then applied to the output)347.145 538.2 R
-(of ruleset three, follo)117 550.2 Q
-(wed similarly by rulesets twenty-one and four)-.25 E(.)-.55 E .202(If you nee\
-d more detail, you can also use the \231\255d21\232 \215ag to turn on more deb)
-142 566.4 R 2.702(ugging. F)-.2 F(or)-.15 E -.15(ex)117 578.4 S(ample,).15 E
-(sendmail \255bt \255d21.99)157 594.6 Q .754
-(turns on an incredible amount of information; a single w)117 610.8 R .753
-(ord address is probably going to print)-.1 F(out se)117 622.8 Q -.15(ve)-.25 G
-(ral pages w).15 E(orth of information.)-.1 E -1.1(Yo)142 639 S 3.075(us)1.1 G
-.575(hould be w)165.085 639 R .575(arned that internally)-.1 F(,)-.65 E F0
-(sendmail)3.075 E F1 .575(applies ruleset 3 to all addresses.)3.075 F .575
-(In this)5.575 F -.15(ve)117 651 S 1.23(rsion of sendmail, you will ha).15 F
-1.53 -.15(ve t)-.2 H 3.73(od).15 G 3.73(ot)281.21 651 S 1.23(hat manually)
-292.72 651 R 6.23(.F)-.65 G 1.23(or e)359.38 651 R 1.23(xample, older v)-.15 F
-1.23(ersions allo)-.15 F(wed)-.25 E(you to use)117 663 Q 2.5(0b)157 679.2 S
-(ruce@broadcast.son)169.5 679.2 Q -.65(y.)-.15 G(com).65 E(This v)117 695.4 Q
-(ersion requires that you use:)-.15 E(3,0 bruce@broadcast.son)157 711.6 Q -.65
-(y.)-.15 G(com).65 E EP
-%%Page: 42 39
+F .904(In this mode, you enter)5.904 F(lines of the form:)117 723 Q EP
+%%Page: 45 40
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-42 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E 2.5(5.2.6. Building)102 96 R
-(mailer descriptions)2.5 E/F1 10/Times-Roman@0 SF 1.886 -.8(To a)142 112.2 T
-.287(dd an outgoing mailer to your mail system, you will ha).8 F .587 -.15
-(ve t)-.2 H 2.787(od).15 G .287(e\214ne the characteristics)409.566 112.2 R
-(of the mailer)117 124.2 Q(.)-.55 E 1.481(Each mailer must ha)142 140.4 R 1.781
--.15(ve a)-.2 H 3.981(ni).15 G 1.481(nternal name.)257.645 140.4 R 1.481
-(This can be arbitrary)6.481 F 3.98(,e)-.65 G 1.48(xcept that the names)417.63
-140.4 R(\231local\232 and \231prog\232 must be de\214ned.)117 152.4 Q .127
-(The pathname of the mailer must be gi)142 168.6 R -.15(ve)-.25 G 2.628(ni).15
-G 2.628(nt)317.038 168.6 S .128(he P \214eld.)327.446 168.6 R .128
-(If this mailer should be accessed)5.128 F
-(via an IPC connection, use the string \231[IPC]\232 instead.)117 180.6 Q .021
-(The F \214eld de\214nes the mailer \215ags.)142 196.8 R -1.1(Yo)5.021 G 2.521
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-45)452.9 60 Q/F1 10/Times-Roman@0 SF(rwset address)157 96 Q(where)117
+112.2 Q/F2 10/Times-Italic@0 SF(rwset)3.377 E F1 .877(is the re)3.377 F .877
+(writing set you w)-.25 F .876(ant to use and)-.1 F F2(addr)3.376 E(ess)-.37 E
+F1 .876(is an address to apply the set to.)3.376 F -.7(Te)117 124.2 S .169
+(st mode sho).7 F .169(ws you the steps it tak)-.25 F .169
+(es as it proceeds, \214nally sho)-.1 F .17(wing you the address it ends up)
+-.25 F 3.635(with. Y)117 136.2 R 1.135(ou may use a comma separated list of rw\
+sets for sequential application of rules to an)-1.1 F 2.5(input. F)117 148.2 R
+(or e)-.15 E(xample:)-.15 E(3,1,21,4 monet:bollard)157 164.4 Q .385
+(\214rst applies ruleset three to the input \231monet:bollard.)117 180.6 R
+5.385<9a52>-.7 G .386(uleset one is then applied to the output)347.14 180.6 R
+(of ruleset three, follo)117 192.6 Q
+(wed similarly by rulesets twenty-one and four)-.25 E(.)-.55 E .202(If you nee\
+d more detail, you can also use the \231\255d21\232 \215ag to turn on more deb)
+142 208.8 R 2.701(ugging. F)-.2 F(or)-.15 E -.15(ex)117 220.8 S(ample,).15 E
+(sendmail \255bt \255d21.99)157 237 Q .753
+(turns on an incredible amount of information; a single w)117 253.2 R .754
+(ord address is probably going to print)-.1 F(out se)117 265.2 Q -.15(ve)-.25 G
+(ral pages w).15 E(orth of information.)-.1 E -1.1(Yo)142 281.4 S 3.235(us)1.1
+G .735(hould be w)165.245 281.4 R .735(arned that internally)-.1 F(,)-.65 E F2
+(sendmail)3.234 E F1 .734(applies ruleset 3 to all addresses.)3.234 F .734
+(In this)5.734 F -.15(ve)117 293.4 S 1.23(rsion of).15 F F2(sendmail)3.73 E F1
+3.73(,y)C 1.23(ou will ha)209.42 293.4 R 1.53 -.15(ve t)-.2 H 3.73(od).15 G
+3.73(ot)281.21 293.4 S 1.23(hat manually)292.72 293.4 R 6.23(.F)-.65 G 1.23
+(or e)359.38 293.4 R 1.23(xample, older v)-.15 F 1.23(ersions allo)-.15 F(wed)
+-.25 E(you to use)117 305.4 Q 2.5(0b)157 321.6 S(ruce@broadcast.son)169.5 321.6
+Q -.65(y.)-.15 G(com).65 E(This v)117 337.8 Q(ersion requires that you use:)
+-.15 E(3,0 bruce@broadcast.son)157 354 Q -.65(y.)-.15 G(com).65 E F0 2.5
+(5.2.6. Building)102 382.2 R(mailer descriptions)2.5 E F1 1.887 -.8(To a)142
+398.4 T .287(dd an outgoing mailer to your mail system, you will ha).8 F .586
+-.15(ve t)-.2 H 2.786(od).15 G .286(e\214ne the characteristics)409.568 398.4 R
+(of the mailer)117 410.4 Q(.)-.55 E 1.48(Each mailer must ha)142 426.6 R 1.78
+-.15(ve a)-.2 H 3.981(ni).15 G 1.481(nternal name.)257.641 426.6 R 1.481
+(This can be arbitrary)6.481 F 3.981(,e)-.65 G 1.481(xcept that the names)
+417.627 426.6 R(\231local\232 and \231prog\232 must be de\214ned.)117 438.6 Q
+.128(The pathname of the mailer must be gi)142 454.8 R -.15(ve)-.25 G 2.628(ni)
+.15 G 2.628(nt)317.044 454.8 S .128(he P \214eld.)327.452 454.8 R .127
+(If this mailer should be accessed)5.127 F
+(via an IPC connection, use the string \231[IPC]\232 instead.)117 466.8 Q .021
+(The F \214eld de\214nes the mailer \215ags.)142 483 R -1.1(Yo)5.021 G 2.521
 (us)1.1 G .021(hould specify an \231f\232 or \231r\232 \215ag to pass the name)
 (us)1.1 G .021(hould specify an \231f\232 or \231r\232 \215ag to pass the name)
-311.06 196.8 R .465(of the sender as a)117 208.8 R F0<ad66>2.965 E F1(or)2.965
-F0<ad72>2.965 E F1 .465(\215ag respecti)2.965 F -.15(ve)-.25 G(ly).15 E 5.465
-(.T)-.65 G .465(hese \215ags are only passed if the)306.95 208.8 R 2.966(yw)
--.15 G .466(ere passed to)451.418 208.8 R/F2 10/Times-Italic@0 SF(sendmail,)117
-220.8 Q F1 1.705(so that mailers that gi)4.205 F 2.005 -.15(ve e)-.25 H 1.705
-(rrors under some circumstances can be placated.).15 F 1.705(If the)6.705 F
-1.362(mailer is not pick)117 232.8 R 3.862(yy)-.15 G 1.362
-(ou can just specify \231\255f $g\232 in the ar)204.518 232.8 R 1.362
-(gv template.)-.18 F 1.363(If the mailer must be)6.362 F 1.708(called as)117
-244.8 R F0 -.18(ro)4.207 G(ot).18 E F1 1.707(the \231S\232 \215ag should be gi)
+311.058 483 R .466(of the sender as a)117 495 R F0<ad66>2.966 E F1(or)2.965 E
+F0<ad72>2.965 E F1 .465(\215ag respecti)2.965 F -.15(ve)-.25 G(ly).15 E 5.465
+(.T)-.65 G .465(hese \215ags are only passed if the)306.955 495 R 2.965(yw)-.15
+G .465(ere passed to)451.42 495 R F2(sendmail)117 507 Q F1 4.205(,s)C 4.205(ot)
+163.705 507 S 1.705(hat mailers that gi)175.69 507 R 2.005 -.15(ve e)-.25 H
+1.705(rrors under some circumstances can be placated.).15 F 1.705(If the)6.705
+F 1.363(mailer is not pick)117 519 R 3.863(yy)-.15 G 1.362
+(ou can just specify \231\255f $g\232 in the ar)204.522 519 R 1.362
+(gv template.)-.18 F 1.362(If the mailer must be)6.362 F 1.707(called as)117
+531 R F0 -.18(ro)4.207 G(ot).18 E F1 1.707(the \231S\232 \215ag should be gi)
 4.207 F -.15(ve)-.25 G 1.707
 4.207 F -.15(ve)-.25 G 1.707
-(n; this will not reset the userid before calling the).15 F(mailer)117 258.8 Q
-/F3 7/Times-Roman@0 SF(10)142.55 254.8 Q F1 5.112(.I)149.55 258.8 S 2.612(ft)
-160.492 258.8 S .112(his mailer is local \(i.e., will perform \214nal deli)
-169.214 258.8 R -.15(ve)-.25 G .112(ry rather than another netw).15 F .112
-(ork hop\))-.1 F .728(the \231l\232 \215ag should be gi)117 270.8 R -.15(ve)
--.25 G 3.227(n. Quote).15 F .727
-(characters \(backslashes and " marks\) can be stripped from)3.227 F .268
-(addresses if the \231s\232 \215ag is speci\214ed; if this is not gi)117 282.8
-R -.15(ve)-.25 G 2.769(nt).15 G(he)344.247 282.8 Q 2.769(ya)-.15 G .269
-(re passed through.)365.746 282.8 R .269(If the mailer is)5.269 F .67(capable \
-of sending to more than one user on the same host in a single transaction the \
-\231m\232 \215ag)117 294.8 R 1.176(should be stated.)117 306.8 R 1.176
-(If this \215ag is on, then the ar)6.176 F 1.177(gv template containing)-.18 F
-F0($u)3.677 E F1 1.177(will be repeated for)3.677 F .089
-(each unique user on a gi)117 318.8 R -.15(ve)-.25 G 2.589(nh).15 G 2.589
-(ost. The)235.994 318.8 R .089
+(n; this will not reset the userid before calling the).15 F(mailer)117 545 Q/F3
+7/Times-Roman@0 SF(15)142.55 541 Q F1 5.112(.I)149.55 545 S 2.612(ft)160.492
+545 S .112(his mailer is local \(i.e., will perform \214nal deli)169.214 545 R
+-.15(ve)-.25 G .112(ry rather than another netw).15 F .112(ork hop\))-.1 F .727
+(the \231l\232 \215ag should be gi)117 557 R -.15(ve)-.25 G 3.227(n. Quote).15
+F .728(characters \(backslashes and " marks\) can be stripped from)3.227 F .269
+(addresses if the \231s\232 \215ag is speci\214ed; if this is not gi)117 569 R
+-.15(ve)-.25 G 2.768(nt).15 G(he)344.254 569 Q 2.768(ya)-.15 G .268
+(re passed through.)365.752 569 R .268(If the mailer is)5.268 F .67(capable of\
+ sending to more than one user on the same host in a single transaction the \
+\231m\232 \215ag)117 581 R 1.177(should be stated.)117 593 R 1.177
+(If this \215ag is on, then the ar)6.177 F 1.176(gv template containing)-.18 F
+F0($u)3.676 E F1 1.176(will be repeated for)3.676 F .088
+(each unique user on a gi)117 605 R -.15(ve)-.25 G 2.589(nh).15 G 2.589
+(ost. The)235.991 605 R .089
 (\231e\232 \215ag will mark the mailer as being \231e)2.589 F(xpensi)-.15 E
 (\231e\232 \215ag will mark the mailer as being \231e)2.589 F(xpensi)-.15 E
--.15(ve)-.25 G 1.488 -.7(,\232 w).15 H(hich).7 E(will cause)117 332.8 Q F2
-(sendmail)2.5 E F1(to defer connection until a queue run)2.5 E F3(11)345.57
-328.8 Q F1(.)352.57 332.8 Q 2.037(An unusual case is the \231C\232 \215ag.)142
-349 R 2.037(This \215ag applies to the mailer that the message is)7.037 F
-(recei)117 361 Q -.15(ve)-.25 G 2.654(df).15 G .153(rom, rather than the maile\
-r being sent to; if set, the domain spec of the sender \(i.e., the)156.454 361
-R 1.519(\231@host.domain\232 part\) is sa)117 373 R -.15(ve)-.2 G 4.019(da).15
-G 1.519(nd is appended to an)252.746 373 R 4.019(ya)-.15 G 1.52
-(ddresses in the message that do not)354.341 373 R
-(already contain a domain spec.)117 385 Q -.15(Fo)5 G 2.5(re).15 G
-(xample, a message of the form:)266.11 385 Q(From: eric@v)157 401.2 Q
-(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E -.8(To)157 413.2 S
-2.5(:w).8 G(nj@monet.CS.Berk)179.81 413.2 Q(ele)-.1 E -.65(y.)-.15 G
-(EDU, mckusick).65 E(will be modi\214ed to:)117 429.4 Q(From: eric@v)157 445.6
-Q(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E -.8(To)157 457.6 S
-2.5(:w).8 G(nj@monet.CS.Berk)179.81 457.6 Q(ele)-.1 E -.65(y.)-.15 G
-(EDU, mckusick@v).65 E(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E
-F2 9.365(if and only if)117 473.8 R F1 9.364
-(the \231C\232 \215ag is de\214ned in the mailer corresponding to)207.8 473.8 R
-(\231eric@v)117 485.8 Q(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU.).65
-E<9a>-.7 E(Other \215ags are described in Appendix C.)142 502 Q .538
-(The S and R \214elds in the mailer description are per)142 518.2 R .538
-(-mailer re)-.2 F .538(writing sets to be applied to)-.25 F 2.253
-(sender and recipient addresses respecti)117 530.2 R -.15(ve)-.25 G(ly).15 E
-7.253(.T)-.65 G 2.252(hese are applied after the sending domain is)312.995
-530.2 R .546(appended and the general re)117 542.2 R .547
-(writing sets \(numbers one and tw)-.25 F .547(o\) are applied, b)-.1 F .547
-(ut before the out-)-.2 F .458(put re)117 554.2 R .458
-(write \(ruleset four\) is applied.)-.25 F 2.958(At)5.458 G .457
-(ypical use is to append the current domain to addresses)279.646 554.2 R
-(that do not already ha)117 566.2 Q .3 -.15(ve a d)-.2 H 2.5(omain. F).15 F
-(or e)-.15 E(xample, a header of the form:)-.15 E(From: eric)157 582.4 Q
-(might be changed to be:)117 598.6 Q(From: eric@v)157 614.8 Q(angogh.CS.Berk)
--.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(or)117 631 Q(From: ucb)157 647.2 Q
--.25(va)-.15 G(x!eric).25 E 1.312
-(depending on the domain it is being shipped into.)117 663.4 R 1.313
-(These sets can also be used to do special)6.312 F .32 LW 76 673 72 673 DL 80
-673 76 673 DL 84 673 80 673 DL 88 673 84 673 DL 92 673 88 673 DL 96 673 92 673
-DL 100 673 96 673 DL 104 673 100 673 DL 108 673 104 673 DL 112 673 108 673 DL
-116 673 112 673 DL 120 673 116 673 DL 124 673 120 673 DL 128 673 124 673 DL 132
-673 128 673 DL 136 673 132 673 DL 140 673 136 673 DL 144 673 140 673 DL 148 673
-144 673 DL 152 673 148 673 DL 156 673 152 673 DL 160 673 156 673 DL 164 673 160
-673 DL 168 673 164 673 DL 172 673 168 673 DL 176 673 172 673 DL 180 673 176 673
-DL 184 673 180 673 DL 188 673 184 673 DL 192 673 188 673 DL 196 673 192 673 DL
-200 673 196 673 DL 204 673 200 673 DL 208 673 204 673 DL 212 673 208 673 DL 216
-673 212 673 DL/F4 5/Times-Roman@0 SF(10)93.6 683.4 Q/F5 8/Times-Italic@0 SF
+-.15(ve)-.25 G 1.489 -.7(,\232 w).15 H(hich).7 E(will cause)117 619 Q F2
+(sendmail)2.5 E F1(to defer connection until a queue run)2.5 E F3(16)345.57 615
+Q F1(.)352.57 619 Q 2.037(An unusual case is the \231C\232 \215ag.)142 635.2 R
+2.037(This \215ag applies to the mailer that the message is)7.037 F(recei)117
+647.2 Q -.15(ve)-.25 G 2.653(df).15 G .153(rom, rather than the mailer being s\
+ent to; if set, the domain spec of the sender \(i.e., the)156.453 647.2 R 1.52
+(\231@host.domain\232 part\) is sa)117 659.2 R -.15(ve)-.2 G 4.02(da).15 G
+1.519(nd is appended to an)252.75 659.2 R 4.019(ya)-.15 G 1.519
+(ddresses in the message that do not)354.346 659.2 R .32 LW 76 668.8 72 668.8
+DL 80 668.8 76 668.8 DL 84 668.8 80 668.8 DL 88 668.8 84 668.8 DL 92 668.8 88
+668.8 DL 96 668.8 92 668.8 DL 100 668.8 96 668.8 DL 104 668.8 100 668.8 DL 108
+668.8 104 668.8 DL 112 668.8 108 668.8 DL 116 668.8 112 668.8 DL 120 668.8 116
+668.8 DL 124 668.8 120 668.8 DL 128 668.8 124 668.8 DL 132 668.8 128 668.8 DL
+136 668.8 132 668.8 DL 140 668.8 136 668.8 DL 144 668.8 140 668.8 DL 148 668.8
+144 668.8 DL 152 668.8 148 668.8 DL 156 668.8 152 668.8 DL 160 668.8 156 668.8
+DL 164 668.8 160 668.8 DL 168 668.8 164 668.8 DL 172 668.8 168 668.8 DL 176
+668.8 172 668.8 DL 180 668.8 176 668.8 DL 184 668.8 180 668.8 DL 188 668.8 184
+668.8 DL 192 668.8 188 668.8 DL 196 668.8 192 668.8 DL 200 668.8 196 668.8 DL
+204 668.8 200 668.8 DL 208 668.8 204 668.8 DL 212 668.8 208 668.8 DL 216 668.8
+212 668.8 DL/F4 5/Times-Roman@0 SF(15)93.6 679.2 Q/F5 8/Times-Italic@0 SF
 (Sendmail)3.2 I/F6 8/Times-Roman@0 SF
 (Sendmail)3.2 I/F6 8/Times-Roman@0 SF
-(must be running setuid to root for this to w)2 E(ork.)-.08 E F4(11)93.6 697 Q
-F6(The \231c\232 con\214guration option must be gi)3.2 I -.12(ve)-.2 G 2(nf).12
-G(or this to be ef)242.04 700.2 Q(fecti)-.2 E -.12(ve)-.2 G(.).12 E EP
-%%Page: 43 40
+(must be running setuid to root for this to w)2 E(ork.)-.08 E F4(16)93.6 692.8
+Q F6(The \231c\232 con\214guration option must be gi)3.2 I -.12(ve)-.2 G 2(nf)
+.12 G(or this to be ef)242.04 696 Q(fecti)-.2 E -.12(ve)-.2 G(.).12 E EP
+%%Page: 46 41
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-43)452.9 60 Q/F1 10/Times-Roman@0 SF(purpose output re)117 96 Q
-(writing in cooperation with ruleset four)-.25 E(.)-.55 E .228
-(The E \214eld de\214nes the string to use as an end-of-line indication.)142
-112.2 R 2.728(As)5.228 G .228(tring containing only)419.654 112.2 R(ne)117
-124.2 Q(wline is the def)-.25 E 2.5(ault. The)-.1 F
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-46 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF
+(already contain a domain spec.)117 96 Q -.15(Fo)5 G 2.5(re).15 G
+(xample, a message of the form:)266.11 96 Q(From: eric@v)157 112.2 Q
+(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E -.8(To)157 124.2 S
+2.5(:w).8 G(nj@monet.CS.Berk)179.81 124.2 Q(ele)-.1 E -.65(y.)-.15 G
+(EDU, mckusick).65 E(will be modi\214ed to:)117 140.4 Q(From: eric@v)157 156.6
+Q(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E -.8(To)157 168.6 S
+2.5(:w).8 G(nj@monet.CS.Berk)179.81 168.6 Q(ele)-.1 E -.65(y.)-.15 G
+(EDU, mckusick@v).65 E(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E
+/F2 10/Times-Italic@0 SF 9.364(if and only if)117 184.8 R F1 9.365
+(the \231C\232 \215ag is de\214ned in the mailer corresponding to)207.796 184.8
+R(\231eric@v)117 196.8 Q(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU.)
+.65 E<9a>-.7 E(Other \215ags are described in Appendix C.)142 213 Q .538
+(The S and R \214elds in the mailer description are per)142 229.2 R .538
+(-mailer re)-.2 F .538(writing sets to be applied to)-.25 F 2.252
+(sender and recipient addresses respecti)117 241.2 R -.15(ve)-.25 G(ly).15 E
+7.252(.T)-.65 G 2.253(hese are applied after the sending domain is)312.99 241.2
+R .547(appended and the general re)117 253.2 R .547
+(writing sets \(numbers one and tw)-.25 F .546(o\) are applied, b)-.1 F .546
+(ut before the out-)-.2 F .457(put re)117 265.2 R .457
+(write \(ruleset four\) is applied.)-.25 F 2.957(At)5.457 G .458
+(ypical use is to append the current domain to addresses)279.639 265.2 R
+(that do not already ha)117 277.2 Q .3 -.15(ve a d)-.2 H 2.5(omain. F).15 F
+(or e)-.15 E(xample, a header of the form:)-.15 E(From: eric)157 293.4 Q
+(might be changed to be:)117 309.6 Q(From: eric@v)157 325.8 Q(angogh.CS.Berk)
+-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(or)117 342 Q(From: ucb)157 358.2 Q
+-.25(va)-.15 G(x!eric).25 E .186
+(depending on the domain it is being shipped into.)117 374.4 R .186
+(These sets can also be used to do special pur)5.186 F(-)-.2 E(pose output re)
+117 386.4 Q(writing in cooperation with ruleset four)-.25 E(.)-.55 E .025
+(The S and R \214elds can be speci\214ed as tw)142 402.6 R 2.526(on)-.1 G .026
+(umbers separated by a slash \(e.g., \231S=10/11\232\),)318.244 402.6 R 2.916
+(meaning that all en)117 414.6 R -.15(ve)-.4 G 2.915
+(lope addresses will be processed through ruleset 10 and all header).15 F .402
+(addresses will be processed through ruleset 11.)117 426.6 R -.4(Wi)5.402 G
+.403(th only one number speci\214ed, both en).4 F -.15(ve)-.4 G(lope).15 E
+(and header re)117 438.6 Q(writing sets are set to the indicated ruleset.)-.25
+E .228(The E \214eld de\214nes the string to use as an end-of-line indication.)
+142 454.8 R 2.728(As)5.228 G .228(tring containing only)419.654 454.8 R(ne)117
+466.8 Q(wline is the def)-.25 E 2.5(ault. The)-.1 F
 (usual backslash escapes \(\\r)2.5 E 2.5(,\\)-.4 G(n, \\f, \\b\) may be used.)
 (usual backslash escapes \(\\r)2.5 E 2.5(,\\)-.4 G(n, \\f, \\b\) may be used.)
-342.87 124.2 Q(Finally)142 140.4 Q 2.648(,a)-.65 G 2.648(na)179.278 140.4 S
--.18(rg)191.366 140.4 S 2.648(vt).18 G .149(emplate is gi)209.944 140.4 R -.15
-(ve)-.25 G 2.649(na).15 G 2.649(st)282.481 140.4 S .149(he E \214eld.)291.8
-140.4 R .149(It may ha)5.149 F .449 -.15(ve e)-.2 H .149(mbedded spaces.).15 F
-.149(If there is)5.149 F .204(no ar)117 152.4 R .204(gv with a)-.18 F F0($u)
-2.704 E F1 .204(macro in it,)2.704 F/F2 10/Times-Italic@0 SF(sendmail)2.704 E
-F1 .204(will speak SMTP to the mailer)2.704 F 5.203(.I)-.55 G 2.703(ft)412.648
-152.4 S .203(he pathname for this)421.461 152.4 R(mailer is \231[IPC],)117
-164.4 Q 2.5<9a74>-.7 G(he ar)192.4 164.4 Q(gv should be)-.18 E(IPC $h [)157
-180.6 Q F2(port)2.5 E F1(])2.5 E(where)117 196.8 Q F2(port)2.5 E F1
-(is the optional port number to connect to.)2.5 E -.15(Fo)142 213 S 2.5(re).15
-G(xample, the speci\214cations:)162.53 213 Q(Mlocal, P=/bin/mail, F=rlsm)157
-229.2 Q(S=10, R=20, A=mail \255d $u)5 E(Mether)157 241.2 Q 2.35(,P)-.4 G 13.9
-(=[IPC], F=meC,)195.89 241.2 R(S=11, R=21, A=IPC $h, M=100000)1.39 E 1.643
-(speci\214es a mailer to do local deli)117 257.4 R -.15(ve)-.25 G 1.644
+342.87 466.8 Q(Finally)142 483 Q 2.648(,a)-.65 G 2.648(na)179.278 483 S -.18
+(rg)191.366 483 S 2.648(vt).18 G .149(emplate is gi)209.944 483 R -.15(ve)-.25
+G 2.649(na).15 G 2.649(st)282.481 483 S .149(he E \214eld.)291.8 483 R .149
+(It may ha)5.149 F .449 -.15(ve e)-.2 H .149(mbedded spaces.).15 F .149
+(If there is)5.149 F .204(no ar)117 495 R .204(gv with a)-.18 F F0($u)2.704 E
+F1 .204(macro in it,)2.704 F F2(sendmail)2.704 E F1 .204
+(will speak SMTP to the mailer)2.704 F 5.203(.I)-.55 G 2.703(ft)412.648 495 S
+.203(he pathname for this)421.461 495 R(mailer is \231[IPC],)117 507 Q 2.5
+<9a74>-.7 G(he ar)192.4 507 Q(gv should be)-.18 E(IPC $h [)157 523.2 Q F2(port)
+2.5 E F1(])2.5 E(where)117 539.4 Q F2(port)2.5 E F1
+(is the optional port number to connect to.)2.5 E -.15(Fo)142 555.6 S 2.5(re)
+.15 G(xample, the speci\214cations:)162.53 555.6 Q(Mlocal, P=/bin/mail, F=rlsm)
+157 571.8 Q(S=10, R=20, A=mail \255d $u)5 E(Mether)157 583.8 Q 2.35(,P)-.4 G
+13.9(=[IPC], F=meC,)195.89 583.8 R(S=11, R=21, A=IPC $h, M=100000)1.39 E 1.643
+(speci\214es a mailer to do local deli)117 600 R -.15(ve)-.25 G 1.644
 (ry and a mailer for ethernet deli).15 F -.15(ve)-.25 G(ry).15 E 6.644(.T)-.65
 (ry and a mailer for ethernet deli).15 F -.15(ve)-.25 G(ry).15 E 6.644(.T)-.65
-G 1.644(he \214rst is called)436.018 257.4 R(\231local,)117 269.4 Q 2.649<9a69>
--.7 G 2.649(sl)152.549 269.4 S .149(ocated in the \214le \231/bin/mail,)161.868
-269.4 R 2.649<9a74>-.7 G(ak)283.573 269.4 Q .149(es a pick)-.1 F(y)-.15 E F0
-<ad72>2.649 E F1 .148(\215ag, does local deli)2.649 F -.15(ve)-.25 G(ry).15 E
-2.648(,q)-.65 G .148(uotes should)453.572 269.4 R 1.016
-(be stripped from addresses, and multiple users can be deli)117 281.4 R -.15
-(ve)-.25 G 1.017(red at once; ruleset ten should be).15 F 1.417(applied to sen\
-der addresses in the message and ruleset twenty should be applied to recipient)
-117 293.4 R .122(addresses; the ar)117 305.4 R .123
+G 1.644(he \214rst is called)436.018 600 R(\231local,)117 612 Q 2.649<9a69>-.7
+G 2.649(sl)152.549 612 S .149(ocated in the \214le \231/bin/mail,)161.868 612 R
+2.649<9a74>-.7 G(ak)283.573 612 Q .149(es a pick)-.1 F(y)-.15 E F0<ad72>2.649 E
+F1 .148(\215ag, does local deli)2.649 F -.15(ve)-.25 G(ry).15 E 2.648(,q)-.65 G
+.148(uotes should)453.572 612 R 1.016
+(be stripped from addresses, and multiple users can be deli)117 624 R -.15(ve)
+-.25 G 1.017(red at once; ruleset ten should be).15 F 1.417(applied to sender \
+addresses in the message and ruleset twenty should be applied to recipient)117
+636 R .122(addresses; the ar)117 648 R .123
 (gv to send to a message will be the w)-.18 F .123(ord \231mail,)-.1 F 2.623
 (gv to send to a message will be the w)-.18 F .123(ord \231mail,)-.1 F 2.623
-<9a74>-.7 G .123(he w)383.125 305.4 R .123(ord \231\255d,)-.1 F 2.623<9a61>-.7
-G .123(nd w)446.644 305.4 R .123(ords con-)-.1 F 1.484
-(taining the name of the recei)117 317.4 R 1.484(ving user)-.25 F 6.484(.I)-.55
-G 3.984(fa)288.498 317.4 S F0<ad72>A F1 1.484
+<9a74>-.7 G .123(he w)383.125 648 R .123(ord \231\255d,)-.1 F 2.623<9a61>-.7 G
+.123(nd w)446.644 648 R .123(ords con-)-.1 F 1.484
+(taining the name of the recei)117 660 R 1.484(ving user)-.25 F 6.484(.I)-.55 G
+3.984(fa)288.498 660 S F0<ad72>A F1 1.484
 (\215ag is inserted it will be between the w)3.984 F(ords)-.1 E .288
 (\215ag is inserted it will be between the w)3.984 F(ords)-.1 E .288
-(\231mail\232 and \231\255d.)117 329.4 R 5.288<9a54>-.7 G .289
-(he second mailer is called \231ether)196.394 329.4 R 1.689 -.7(,\232 i)-.4 H
-2.789(ts).7 G .289(hould be connected to via an IPC con-)348.947 329.4 R .932(\
-nection, it can handle multiple users at once, connections should be deferred,\
- and an)117 341.4 R 3.432(yd)-.15 G(omain)479 341.4 Q 1.458
-(from the sender address should be appended to an)117 353.4 R 3.958(yr)-.15 G
-(ecei)340.2 353.4 Q -.15(ve)-.25 G 3.958(rn).15 G 1.458
-(ame without a domain; sender)377.628 353.4 R .74
-(addresses should be processed by ruleset ele)117 365.4 R -.15(ve)-.25 G 3.24
-(na).15 G .74(nd recipient addresses by ruleset twenty-one.)320.34 365.4 R
-(There is a 100,000 byte limit on messages passed through this mailer)117 377.4
-Q(.)-.55 E F0 2.5(5.3. The)87 401.4 R(User Database)2.5 E F1 .108(If you ha)127
-417.6 R .408 -.15(ve a ve)-.2 H .109
-(rsion of sendmail with the user database package compiled in, the handling of)
-.15 F(sender and recipient addresses is modi\214ed.)102 429.6 Q
-(The location of this database is controlled with the)127 445.8 Q F0(U)2.5 E F1
-(option.)2.5 E F0 2.5(5.3.1. Structur)102 469.8 R 2.5(eo)-.18 G 2.5(ft)177.92
-469.8 S(he user database)187.08 469.8 Q F1(The database is a sorted \(BT)142
-486 Q(ree-based\) structure.)-.35 E(User records are stored with the k)5 E -.15
-(ey)-.1 G(:).15 E F2(user)157 502.2 Q(-name)-.2 E F0(:)A F2(\214eld-name)A F1
-.128
+(\231mail\232 and \231\255d.)117 672 R 5.288<9a54>-.7 G .289
+(he second mailer is called \231ether)196.394 672 R 1.689 -.7(,\232 i)-.4 H
+2.789(ts).7 G .289(hould be connected to via an IPC con-)348.947 672 R .932(ne\
+ction, it can handle multiple users at once, connections should be deferred, a\
+nd an)117 684 R 3.432(yd)-.15 G(omain)479 684 Q 1.458
+(from the sender address should be appended to an)117 696 R 3.958(yr)-.15 G
+(ecei)340.2 696 Q -.15(ve)-.25 G 3.958(rn).15 G 1.458
+(ame without a domain; sender)377.628 696 R .74
+(addresses should be processed by ruleset ele)117 708 R -.15(ve)-.25 G 3.24(na)
+.15 G .74(nd recipient addresses by ruleset twenty-one.)320.34 708 R
+(There is a 100,000 byte limit on messages passed through this mailer)117 720 Q
+(.)-.55 E EP
+%%Page: 47 42
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-47)452.9 60 Q 2.5(5.3. The)87 96 R(User Database)2.5 E/F1 10
+/Times-Roman@0 SF .108(If you ha)127 112.2 R .408 -.15(ve a ve)-.2 H .109
+(rsion of).15 F/F2 10/Times-Italic@0 SF(sendmail)2.609 E F1 .109
+(with the user database package compiled in, the handling of)2.609 F
+(sender and recipient addresses is modi\214ed.)102 124.2 Q
+(The location of this database is controlled with the)127 140.4 Q F0(U)2.5 E F1
+(option.)2.5 E F0 2.5(5.3.1. Structur)102 164.4 R 2.5(eo)-.18 G 2.5(ft)177.92
+164.4 S(he user database)187.08 164.4 Q F1(The database is a sorted \(BT)142
+180.6 Q(ree-based\) structure.)-.35 E(User records are stored with the k)5 E
+-.15(ey)-.1 G(:).15 E F2(user)157 196.8 Q(-name)-.2 E F0(:)A F2(\214eld-name)A
+F1 .128
 (The sorted database format ensures that user records are clustered together)
 (The sorted database format ensures that user records are clustered together)
-117 518.4 R 5.128(.M)-.55 G .128(eta-information is)432.492 518.4 R(al)117
-530.4 Q -.1(wa)-.1 G(ys stored with a leading colon.).1 E
-(Field names de\214ne both the syntax and semantics of the v)142 546.6 Q 2.5
-(alue. De\214ned)-.25 F(\214elds include:)2.5 E 33.39(maildrop The)117 562.8 R
+117 213 R 5.128(.M)-.55 G .128(eta-information is)432.492 213 R(al)117 225 Q
+-.1(wa)-.1 G(ys stored with a leading colon.).1 E
+(Field names de\214ne both the syntax and semantics of the v)142 241.2 Q 2.5
+(alue. De\214ned)-.25 F(\214elds include:)2.5 E 33.39(maildrop The)117 257.4 R
 (deli)4.872 E -.15(ve)-.25 G 2.372(ry address for this user).15 F 7.372(.T)-.55
 (deli)4.872 E -.15(ve)-.25 G 2.372(ry address for this user).15 F 7.372(.T)-.55
-G 2.373(here may be multiple v)349.472 562.8 R 2.373(alues of this)-.25 F 2.675
-(record. In)189 574.8 R(particular)2.675 E 2.675(,m)-.4 G .175
-(ailing lists will ha)284.095 574.8 R .475 -.15(ve o)-.2 H(ne).15 E F2(maildr)
-2.675 E(op)-.45 E F1 .175(record for each user)2.675 F(on the list.)189 586.8 Q
-30.06(mailname The)117 603 R 1.026(outgoing mailname for this user)3.526 F
-6.026(.F)-.55 G 1.027(or each outgoing name, there should)353.336 603 R .08
-(be an appropriate)189 615 R F2(maildr)2.58 E(op)-.45 E F1 .08
-(record for that name to allo)2.58 F 2.58(wr)-.25 G .08(eturn mail.)422.38 615
-R .08(See also)5.08 F F2(:default:mailname)189 627 Q F1(.)A 25.62
-(mailsender Changes)117 643.2 R(an)3.447 E 3.447(ym)-.15 G .947
-(ail sent to this address to ha)252.404 643.2 R 1.248 -.15(ve t)-.2 H .948
+G 2.373(here may be multiple v)349.472 257.4 R 2.373(alues of this)-.25 F 2.675
+(record. In)189 269.4 R(particular)2.675 E 2.675(,m)-.4 G .175
+(ailing lists will ha)284.095 269.4 R .475 -.15(ve o)-.2 H(ne).15 E F2(maildr)
+2.675 E(op)-.45 E F1 .175(record for each user)2.675 F(on the list.)189 281.4 Q
+30.06(mailname The)117 297.6 R 1.026(outgoing mailname for this user)3.526 F
+6.026(.F)-.55 G 1.027(or each outgoing name, there should)353.336 297.6 R .08
+(be an appropriate)189 309.6 R F2(maildr)2.58 E(op)-.45 E F1 .08
+(record for that name to allo)2.58 F 2.58(wr)-.25 G .08(eturn mail.)422.38
+309.6 R .08(See also)5.08 F F2(:default:mailname)189 321.6 Q F1(.)A 25.62
+(mailsender Changes)117 337.8 R(an)3.447 E 3.447(ym)-.15 G .947
+(ail sent to this address to ha)252.404 337.8 R 1.248 -.15(ve t)-.2 H .948
 (he indicated en).15 F -.15(ve)-.4 G .948(lope sender).15 F(.)-.55 E .498(This\
  is intended for mailing lists, and will normally be the name of an appro-)189
 (he indicated en).15 F -.15(ve)-.4 G .948(lope sender).15 F(.)-.55 E .498(This\
  is intended for mailing lists, and will normally be the name of an appro-)189
-655.2 R .754(priate -request address.)189 667.2 R .754(It is v)5.754 F .755
+349.8 R .754(priate -request address.)189 361.8 R .754(It is v)5.754 F .755
 (ery similar to the o)-.15 F(wner)-.25 E(-)-.2 E F2(list)A F1 .755
 (ery similar to the o)-.15 F(wner)-.25 E(-)-.2 E F2(list)A F1 .755
-(syntax in the alias)3.255 F(\214le.)189 679.2 Q 33.95(fullname The)117 695.4 R
-(full name of the user)2.5 E(.)-.55 E(of)117 711.6 Q 13.66(\214ce-address The)
--.25 F(of)2.5 E(\214ce address for this user)-.25 E(.)-.55 E EP
-%%Page: 44 41
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-44 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(of)117 96 Q
+(syntax in the alias)3.255 F(\214le.)189 373.8 Q 33.95(fullname The)117 390 R
+(full name of the user)2.5 E(.)-.55 E(of)117 406.2 Q 13.66(\214ce-address The)
+-.25 F(of)2.5 E(\214ce address for this user)-.25 E(.)-.55 E(of)117 422.4 Q
 19.21(\214ce-phone The)-.25 F(of)2.5 E(\214ce phone number for this user)-.25 E
 19.21(\214ce-phone The)-.25 F(of)2.5 E(\214ce phone number for this user)-.25 E
-(.)-.55 E(of)117 112.2 Q(\214ce-f)-.25 E 30.98(ax The)-.1 F(of)2.5 E(\214ce F)
--.25 E(AX number for this user)-.74 E(.)-.55 E 13.96(home-address The)117 128.4
-R(home address for this user)2.5 E(.)-.55 E 19.51(home-phone The)117 144.6 R
-(home phone number for this user)2.5 E(.)-.55 E(home-f)117 160.8 Q 31.28
+(.)-.55 E(of)117 438.6 Q(\214ce-f)-.25 E 30.98(ax The)-.1 F(of)2.5 E(\214ce F)
+-.25 E(AX number for this user)-.74 E(.)-.55 E 13.96(home-address The)117 454.8
+R(home address for this user)2.5 E(.)-.55 E 19.51(home-phone The)117 471 R
+(home phone number for this user)2.5 E(.)-.55 E(home-f)117 487.2 Q 31.28
 (ax The)-.1 F(home F)2.5 E(AX number for this user)-.74 E(.)-.55 E 41.73
 (ax The)-.1 F(home F)2.5 E(AX number for this user)-.74 E(.)-.55 E 41.73
-(project A)117 177 R .856
+(project A)117 503.4 R .856
 (\(short\) description of the project this person is af)3.356 F .855
 (\(short\) description of the project this person is af)3.356 F .855
-(\214liated with.)-.25 F .855(In the Uni-)5.855 F -.15(ve)189 189 S
+(\214liated with.)-.25 F .855(In the Uni-)5.855 F -.15(ve)189 515.4 S
 (rsity this is often just the name of their graduate advisor).15 E(.)-.55 E
 (rsity this is often just the name of their graduate advisor).15 E(.)-.55 E
-52.28(plan A)117 205.2 R
+52.28(plan A)117 531.6 R
 (pointer to a \214le from which plan information can be g)2.5 E(athered.)-.05 E
 (pointer to a \214le from which plan information can be g)2.5 E(athered.)-.05 E
-.924(As of this writing, only a fe)142 221.4 R 3.424(wo)-.25 G 3.424(ft)273.208
-221.4 S .925(hese \214elds are actually being used by sendmail:)282.742 221.4 R
-/F2 10/Times-Italic@0 SF(mail-)3.425 E(dr)117 233.4 Q(op)-.45 E F1(and)2.5 E F2
-(mailname)2.5 E F1 5(.A)C F2(\214ng)211.54 233.4 Q(er)-.1 E F1
+.924(As of this writing, only a fe)142 547.8 R 3.424(wo)-.25 G 3.424(ft)273.208
+547.8 S .925(hese \214elds are actually being used by)282.742 547.8 R F2
+(sendmail)3.425 E F1(:)A F2(mail-)3.425 E(dr)117 559.8 Q(op)-.45 E F1(and)2.5 E
+F2(mailname)2.5 E F1 5(.A)C F2(\214ng)211.54 559.8 Q(er)-.1 E F1
 (program that uses the other \214elds is planned.)2.5 E F0 2.5(5.3.2. User)102
 (program that uses the other \214elds is planned.)2.5 E F0 2.5(5.3.2. User)102
-257.4 R(database semantics)2.5 E F1 .996(When the re)142 273.6 R .995
+583.8 R(database semantics)2.5 E F1 .996(When the re)142 600 R .995
 (writing rules submit an address to the local mailer)-.25 F 3.495(,t)-.4 G .995
 (writing rules submit an address to the local mailer)-.25 F 3.495(,t)-.4 G .995
-(he user name is passed)408.93 273.6 R .78(through the alias \214le.)117 285.6
-.781
+(he user name is passed)408.93 600 R .78(through the alias \214le.)117 612 R
+.781
 (If no alias is found \(or if the alias points back to the same address\), the)
 5.78 F 1.778(name \(with \231:maildrop\232 appended\) is then used as a k)117
 (If no alias is found \(or if the alias points back to the same address\), the)
 5.78 F 1.778(name \(with \231:maildrop\232 appended\) is then used as a k)117
-297.6 R 2.077 -.15(ey i)-.1 H 4.277(nt).15 G 1.777(he user database.)375.985
-297.6 R 1.777(If no match)6.777 F
-(occurs \(or if the maildrop points at the same address\), forw)117 309.6 Q
-(arding is tried.)-.1 E .55(If the \214rst tok)142 325.8 R .551(en of the user\
+624 R 2.077 -.15(ey i)-.1 H 4.277(nt).15 G 1.777(he user database.)375.985 624
+R 1.777(If no match)6.777 F
+(occurs \(or if the maildrop points at the same address\), forw)117 636 Q
+(arding is tried.)-.1 E .55(If the \214rst tok)142 652.2 R .551(en of the user\
  name returned by ruleset 0 is an \231@\232 sign, the user database)-.1 F .626
  name returned by ruleset 0 is an \231@\232 sign, the user database)-.1 F .626
-(lookup is skipped.)117 337.8 R .625
+(lookup is skipped.)117 664.2 R .625
 (The intent is that the user database will act as a set of def)5.626 F .625
 (aults for a cluster)-.1 F 1.533(\(in our case, the Computer Science Di)117
 (The intent is that the user database will act as a set of def)5.626 F .625
 (aults for a cluster)-.1 F 1.533(\(in our case, the Computer Science Di)117
-349.8 R 1.533(vision\); mail sent to a speci\214c machine should ignore)-.25 F
-(these def)117 361.8 Q(aults.)-.1 E .351
-(When mail is sent, the name of the sending user is look)142 378 R .351
+676.2 R 1.533(vision\); mail sent to a speci\214c machine should ignore)-.25 F
+(these def)117 688.2 Q(aults.)-.1 E .351
+(When mail is sent, the name of the sending user is look)142 704.4 R .351
 (ed up in the database.)-.1 F .351(If that user)5.351 F .04
 (ed up in the database.)-.1 F .351(If that user)5.351 F .04
-(has a \231mailname\232 record, the v)117 390 R .041
+(has a \231mailname\232 record, the v)117 716.4 R .041
 (alue of that record is used as their outgoing name.)-.25 F -.15(Fo)5.041 G
 (alue of that record is used as their outgoing name.)-.25 F -.15(Fo)5.041 G
-2.541(re).15 G .041(xample, I)466.189 390 R(might ha)117 402 Q .3 -.15(ve a r)
--.2 H(ecord:).15 E 25.94(eric:mailname Eric.Allman@CS.Berk)157 418.2 R(ele)-.1
-E -.65(y.)-.15 G(EDU).65 E(This w)117 434.4 Q
+2.541(re).15 G .041(xample, I)466.189 716.4 R EP
+%%Page: 48 43
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-48 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(might ha)117 96
+Q .3 -.15(ve a r)-.2 H(ecord:).15 E 25.94(eric:mailname Eric.Allman@CS.Berk)157
+112.2 R(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(This w)117 128.4 Q
 (ould cause my outgoing mail to be sent as Eric.Allman.)-.1 E .757
 (ould cause my outgoing mail to be sent as Eric.Allman.)-.1 E .757
-(If a \231maildrop\232 is found for the user)142 450.6 R 3.257(,b)-.4 G .757
-(ut no corresponding \231maildrop\232 record e)301.588 450.6 R .757(xists, the)
--.15 F 1.127(record \231:def)117 462.6 R 1.127(ault:mailname\232 is consulted.)
+(If a \231maildrop\232 is found for the user)142 144.6 R 3.257(,b)-.4 G .757
+(ut no corresponding \231maildrop\232 record e)301.588 144.6 R .757(xists, the)
+-.15 F 1.127(record \231:def)117 156.6 R 1.127(ault:mailname\232 is consulted.)
 -.1 F 1.127(If present, this is the name of a host to o)6.127 F -.15(ve)-.15 G
 -.1 F 1.127(If present, this is the name of a host to o)6.127 F -.15(ve)-.15 G
-1.128(rride the).15 F .625(local host.)117 474.6 R -.15(Fo)5.625 G 3.125(re).15
-G .625(xample, in our case we w)185.515 474.6 R .625
+1.128(rride the).15 F .625(local host.)117 168.6 R -.15(Fo)5.625 G 3.125(re).15
+G .625(xample, in our case we w)185.515 168.6 R .625
 (ould set it to \231CS.Berk)-.1 F(ele)-.1 E -.65(y.)-.15 G 3.125(EDU\232. The)
 (ould set it to \231CS.Berk)-.1 F(ele)-.1 E -.65(y.)-.15 G 3.125(EDU\232. The)
-.65 F(ef)3.125 E .625(fect is that)-.25 F(an)117 486.6 Q .881(yone kno)-.15 F
+.65 F(ef)3.125 E .625(fect is that)-.25 F(an)117 180.6 Q .881(yone kno)-.15 F
 .882(wn in the database gets their outgoing mail stamped as \231user@CS.Berk)
 .882(wn in the database gets their outgoing mail stamped as \231user@CS.Berk)
--.25 F(ele)-.1 E -.65(y.)-.15 G(EDU\232,).65 E -.2(bu)117 498.6 S 2.5(tp).2 G
-(eople not listed in the database use the local hostname.)137.08 498.6 Q F0 2.5
-(6. O)72 522.6 R(THER CONFIGURA)-.4 E(TION)-.95 E F1 .907
+-.25 F(ele)-.1 E -.65(y.)-.15 G(EDU\232,).65 E -.2(bu)117 192.6 S 2.5(tp).2 G
+(eople not listed in the database use the local hostname.)137.08 192.6 Q F0 2.5
+(5.3.3. Cr)102 218.6 R(eating the database)-.18 E/F2 7/Times-Bold@0 SF(17)223.2
+214.6 Q F1 .375(The user database is b)142 234.8 R .375(uilt from a te)-.2 F
+.375(xt \214le using the)-.15 F/F3 10/Times-Italic@0 SF(mak)2.875 E(emap)-.1 E
+F1 .375(utility \(in the distrib)2.875 F .375(ution in)-.2 F 1.039(the mak)117
+246.8 R 1.039(emap subdirectory\).)-.1 F 1.039(The te)6.039 F 1.038
+(xt \214le is a series of lines corresponding to userdb records;)-.15 F 1.588
+(each line has a k)117 258.8 R 1.889 -.15(ey a)-.1 H 1.589(nd a v).15 F 1.589
+(alue separated by white space.)-.25 F 1.589(The k)6.589 F 1.889 -.15(ey i)-.1
+H 4.089(sa).15 G -.1(lwa)421.943 258.8 S 1.589(ys in the format).1 F
+(described abo)117 270.8 Q .3 -.15(ve \212 f)-.15 H(or e).15 E(xample:)-.15 E
+(eric:maildrop)157 287 Q .448
+(This \214le is normally installed in a system directory; for e)117 303.2 R
+.447(xample, it might be called)-.15 F F3(/etc/user)2.947 E(db)-.37 E F1(.)A
+1.6 -.8(To m)117 315.2 T(ak).8 E 2.5(et)-.1 G(he database v)156.65 315.2 Q
+(ersion of the map, run the program:)-.15 E(mak)157 331.4 Q
+(emap btree /etc/userdb)-.1 E(.db < /etc/userdb)-.4 E .077
+(Then create a con\214g \214le that uses this.)117 347.6 R -.15(Fo)5.077 G
+2.577(re).15 G .077(xample, using the V8 M4 con\214guration, include the)
+296.531 347.6 R(follo)117 359.6 Q(wing line in your .mc \214le:)-.25 E
+(de\214ne\(\222confUSERDB_SPEC\264, /etc/userdb)157 375.8 Q(.db\))-.4 E F0 2.5
+(6. O)72 404 R(THER CONFIGURA)-.4 E(TION)-.95 E F1 .907
 (There are some con\214guration changes that can be made by recompiling)112
 (There are some con\214guration changes that can be made by recompiling)112
-538.8 R F2(sendmail)3.407 E F1 5.907(.T)C .906(his section)460.594 538.8 R
+420.2 R F3(sendmail)3.407 E F1 5.907(.T)C .906(his section)460.594 420.2 R
 (describes what changes can be made and what has to be modi\214ed to mak)87
 (describes what changes can be made and what has to be modi\214ed to mak)87
-550.8 Q 2.5(et)-.1 G(hem.)387.95 550.8 Q F0 2.5(6.1. P)87 574.8 R
+432.2 Q 2.5(et)-.1 G(hem.)387.95 432.2 Q F0 2.5(6.1. P)87 456.2 R
 (arameters in sr)-.1 E(c/Mak)-.18 E(e\214le)-.1 E F1 .92
 (arameters in sr)-.1 E(c/Mak)-.18 E(e\214le)-.1 E F1 .92
-(These parameters are intended to describe the compilation en)127 591 R .92
+(These parameters are intended to describe the compilation en)127 472.4 R .92
 (vironment, not site polic)-.4 F 2.22 -.65(y, a)-.15 H(nd).65 E
 (vironment, not site polic)-.4 F 2.22 -.65(y, a)-.15 H(nd).65 E
-(should normally be de\214ned in src/Mak)102 603 Q(e\214le.)-.1 E 39.5(NDBM If)
-102 619.2 R .665(set, the ne)3.165 F 3.165(wv)-.25 G .664
-(ersion of the DBM library that allo)240.41 619.2 R .664
-(ws multiple databases will be)-.25 F 2.542(used. If)174 631.2 R .042
+(should normally be de\214ned in src/Mak)102 484.4 Q(e\214le.)-.1 E 39.5
+(NDBM If)102 500.6 R .665(set, the ne)3.165 F 3.165(wv)-.25 G .664
+(ersion of the DBM library that allo)240.41 500.6 R .664
+(ws multiple databases will be)-.25 F 2.542(used. If)174 512.6 R .042
 (neither NDBM nor NEWDB are set, a much less ef)2.542 F .043
 (neither NDBM nor NEWDB are set, a much less ef)2.542 F .043
-(\214cient method of alias)-.25 F(lookup is used.)174 643.2 Q 32.84(NEWDB If)
-102 659.4 R .142(set, use the ne)2.642 F 2.642(wd)-.25 G .142
-(atabase package from Berk)254.44 659.4 R(ele)-.1 E 2.641(y\()-.15 G .141
-(from 4.4BSD\).)385.817 659.4 R .141(This package)5.141 F .266
-(is substantially f)174 671.4 R .267(aster than DBM or NDBM.)-.1 F .267
-(If NEWDB and NDBM are both set,)5.267 F(sendmail will read DBM \214les, b)174
-683.4 Q(ut will create and use NEWDB \214les.)-.2 E(YPCOMP)102 699.6 Q 19.3
--1.11(AT I)-.92 H 3.684(fs)1.11 G 1.184(et together with)188.234 699.6 R F2
-(both)3.684 E F1 1.183(NEWDB and NDBM,)3.683 F F2(sendmail)3.683 E F1 1.183
-(will create both DBM)3.683 F 1.067
-(and NEWDB \214les if and only if the \214le /v)174 711.6 R(ar/yp/Mak)-.25 E
-1.067(e\214le e)-.1 F 1.067(xists and is readable.)-.15 F .501
-(This is intended for compatibility with Sun Microsystems')174 723.6 R F2
-(mkalias)3.001 E F1 .501(program used)3.001 F EP
-%%Page: 45 42
+(\214cient method of alias)-.25 F(lookup is used.)174 524.6 Q 32.84(NEWDB If)
+102 540.8 R .142(set, use the ne)2.642 F 2.642(wd)-.25 G .142
+(atabase package from Berk)254.44 540.8 R(ele)-.1 E 2.641(y\()-.15 G .141
+(from 4.4BSD\).)385.817 540.8 R .141(This package)5.141 F .266
+(is substantially f)174 552.8 R .267(aster than DBM or NDBM.)-.1 F .267
+(If NEWDB and NDBM are both set,)5.267 F F3(sendmail)174 564.8 Q F1
+(will read DBM \214les, b)2.5 E(ut will create and use NEWDB \214les.)-.2 E
+53.39(NIS Include)102 581 R .12(support for NIS.)2.62 F .119
+(If set together with)5.119 F F3(both)2.619 E F1 .119(NEWDB and NDBM,)2.619 F
+F3(sendmail)2.619 E F1 1.076
+(will create both DBM and NEWDB \214les if and only if the \214le /v)174 593 R
+(ar/yp/Mak)-.25 E(e\214le)-.1 E -.15(ex)174 605 S .293(ists and is readable.)
+.15 F .293(This is intended for compatibility with Sun Microsystems')5.293 F F3
+(mkalias)174 617 Q F1(program used on YP masters.)2.5 E 25.05(SYSTEM5 Set)102
+633.2 R(all of the compilation parameters appropriate for System V)2.5 E(.)
+-1.29 E 36.72(LOCKF Use)102 649.4 R .299(System V)2.799 F F0(lockf)2.799 E F1
+.299(instead of Berk)2.799 F(ele)-.1 E(y)-.15 E F0(\215ock)2.799 E F1 5.299(.D)
+C .3(ue to the highly unusual seman-)375.012 649.4 R 1.572
+(tics of locks across forks in)174 661.4 R F0(lockf)4.072 E F1 4.072(,t)C 1.571
+(his should ne)325.544 661.4 R -.15(ve)-.25 G 4.071(rb).15 G 4.071(eu)402.907
+661.4 S 1.571(sed unless absolutely)416.418 661.4 R .32 LW 76 671 72 671 DL 80
+671 76 671 DL 84 671 80 671 DL 88 671 84 671 DL 92 671 88 671 DL 96 671 92 671
+DL 100 671 96 671 DL 104 671 100 671 DL 108 671 104 671 DL 112 671 108 671 DL
+116 671 112 671 DL 120 671 116 671 DL 124 671 120 671 DL 128 671 124 671 DL 132
+671 128 671 DL 136 671 132 671 DL 140 671 136 671 DL 144 671 140 671 DL 148 671
+144 671 DL 152 671 148 671 DL 156 671 152 671 DL 160 671 156 671 DL 164 671 160
+671 DL 168 671 164 671 DL 172 671 168 671 DL 176 671 172 671 DL 180 671 176 671
+DL 184 671 180 671 DL 188 671 184 671 DL 192 671 188 671 DL 196 671 192 671 DL
+200 671 196 671 DL 204 671 200 671 DL 208 671 204 671 DL 212 671 208 671 DL 216
+671 212 671 DL/F4 5/Times-Roman@0 SF(17)93.6 681.4 Q/F5 8/Times-Roman@0 SF .289
+(These instructions are kno)3.2 J .289(wn to be incomplete.)-.2 F 2.289(Af)
+4.289 G .289(uture v)266.464 684.6 R .289
+(ersion of the user database is planned including things such as \214n-)-.12 F
+(ger service \212 and good documentation.)72 694.2 Q EP
+%%Page: 49 44
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-45)452.9 60 Q/F1 10/Times-Roman@0 SF(on YP masters.)174 96 Q 41.73
-(_AIX3 Compile)102 112.2 R(for IBM AIX 3.x.)2.5 E
-(This has only been tested on 3.2.3.)5 E 25.05(SYSTEM5 Set)102 128.4 R
-(all of the compilation parameters appropriate for System V)2.5 E(.)-1.29 E
-36.72(LOCKF Use)102 144.6 R .299(System V)2.799 F F0(lockf)2.799 E F1 .299
-(instead of Berk)2.799 F(ele)-.1 E(y)-.15 E F0(\215ock)2.799 E F1 5.299(.D)C .3
-(ue to the highly unusual seman-)375.012 144.6 R .052
-(tics of locks across forks in)174 156.6 R F0(lockf)2.552 E F1 2.551(,t)C .051
-(his should ne)314.903 156.6 R -.15(ve)-.25 G 2.551(rb).15 G 2.551(eu)387.706
-156.6 S .051(sed unless absolutely nec-)399.697 156.6 R(essary)174 168.6 Q 5
-(.S)-.65 G(et by def)211.4 168.6 Q(ault if SYSTEM5 is set.)-.1 E 33.94
-(SYS5TZ Use)102 184.8 R(System V time zone semantics.)2.5 E(HASINITGR)102 201 Q
-(OUPS)-.4 E .812(Set this if your system has the)174 213 R/F2 10/Times-Italic@0
-SF(initgr)3.312 E(oups\(\))-.45 E F1 .812(call \(if you ha)3.312 F 1.112 -.15
-(ve m)-.2 H .813(ultiple group sup-).15 F 2.5(port\). This)174 225 R
-(is the def)2.5 E(ault if SYSTEM5 is)-.1 E F2(not)2.5 E F1
-(de\214ned or if you are on HPUX.)2.5 E(HASUN)102 241.2 Q 13.19(AME Set)-.35 F
-.89(this if you ha)3.39 F 1.19 -.15(ve t)-.2 H(he).15 E F2(uname)3.39 E F1 .89
-(\(2\) system call \(or corresponding library routine\).)B(Set by def)174 253.2
-Q(ault if SYSTEM5 is set.)-.1 E(HASST)102 269.4 Q -1.11(AT)-.93 G 15.42(FS Set)
+(SMM:08-49)452.9 60 Q/F1 10/Times-Roman@0 SF(necessary)174 96 Q 5(.S)-.65 G
+(et by def)225.28 96 Q(ault if SYSTEM5 is set.)-.1 E 33.94(SYS5TZ Use)102 112.2
+R(System V time zone semantics.)2.5 E(HASINITGR)102 128.4 Q(OUPS)-.4 E .812
+(Set this if your system has the)174 140.4 R/F2 10/Times-Italic@0 SF(initgr)
+3.312 E(oups\(\))-.45 E F1 .812(call \(if you ha)3.312 F 1.112 -.15(ve m)-.2 H
+.813(ultiple group sup-).15 F 2.5(port\). This)174 152.4 R(is the def)2.5 E
+(ault if SYSTEM5 is)-.1 E F2(not)2.5 E F1(de\214ned or if you are on HPUX.)2.5
+E(HASUN)102 168.6 Q 13.19(AME Set)-.35 F .89(this if you ha)3.39 F 1.19 -.15
+(ve t)-.2 H(he).15 E F2(uname)3.39 E F1 .89
+(\(2\) system call \(or corresponding library routine\).)B(Set by def)174 180.6
+Q(ault if SYSTEM5 is set.)-.1 E(HASST)102 196.8 Q -1.11(AT)-.93 G 15.42(FS Set)
 1.11 F .202(this if you ha)2.701 F .502 -.15(ve t)-.2 H(he).15 E F2(statfs)
 2.702 E F1 .202(\(2\) system call.)B .202(This will allo)5.202 F 2.702(wy)-.25
 1.11 F .202(this if you ha)2.701 F .502 -.15(ve t)-.2 H(he).15 E F2(statfs)
 2.702 E F1 .202(\(2\) system call.)B .202(This will allo)5.202 F 2.702(wy)-.25
-G .202(ou to gi)425.822 269.4 R .502 -.15(ve a t)-.25 H(empo-).15 E .108
-(rary f)174 281.4 R .108(ailure message to incoming SMTP email when you are lo)
--.1 F 2.608(wo)-.25 G 2.608(nd)441.188 281.4 S .107(isk space.)453.796 281.4 R
-(It)5.107 E(is set by def)174 293.4 Q(ault on 4.4BSD and OSF/1 systems.)-.1 E
-(HASUST)102 309.6 Q 21.54 -1.11(AT S)-.93 H .593(et if you ha)1.11 F .894 -.15
+G .202(ou to gi)425.822 196.8 R .502 -.15(ve a t)-.25 H(empo-).15 E .108
+(rary f)174 208.8 R .108(ailure message to incoming SMTP email when you are lo)
+-.1 F 2.608(wo)-.25 G 2.608(nd)441.188 208.8 S .107(isk space.)453.796 208.8 R
+(It)5.107 E(is set by def)174 220.8 Q(ault on 4.4BSD and OSF/1 systems.)-.1 E
+(HASUST)102 237 Q 21.54 -1.11(AT S)-.93 H .593(et if you ha)1.11 F .894 -.15
 (ve t)-.2 H(he).15 E F2(ustat)3.094 E F1 .594(\(2\) system call.)B .594
 (This is an alternati)5.594 F .894 -.15(ve i)-.25 H .594(mplementation of).15 F
 (ve t)-.2 H(he).15 E F2(ustat)3.094 E F1 .594(\(2\) system call.)B .594
 (This is an alternati)5.594 F .894 -.15(ve i)-.25 H .594(mplementation of).15 F
-.525(disk space control.)174 321.6 R -1.1(Yo)5.525 G 3.025(us)1.1 G .525
-(hould only set one of HASST)278.32 321.6 R -1.11(AT)-.93 G .525(FS or HASUST)
-1.11 F -.83 -1.11(AT ;)-.93 H(the)4.135 E(\214rst is preferred.)174 333.6 Q(_P)
-102 349.8 Q -1.11(AT)-.92 G(H_SENDMAILCF)1.11 E
-(The pathname of the sendmail.cf \214le.)174 361.8 Q(_P)102 378 Q -1.11(AT)-.92
-G(H_SENDMAILFC)1.11 E(The pathname of the sendmail.fc \214le.)174 390 Q(_P)102
-406.2 Q -1.11(AT)-.92 G(H_SENDMAILPID)1.11 E
-(The pathname of the sendmail.pid \214le.)174 418.2 Q 26.17(LA_TYPE The)102
-434.4 R(load a)2.5 E -.15(ve)-.2 G(rage type.).15 E(Details are described belo)
-5 E -.65(w.)-.25 G 1.146(The are four b)102 450.6 R 1.146(uilt-in w)-.2 F 1.146
-(ays of computing the load a)-.1 F -.15(ve)-.2 G(rage.).15 E F2(Sendmail)6.147
-E F1 1.147(tries to auto-con\214gure them)3.647 F .267
-(based on imperfect guesses; you can select one using the)102 462.6 R F2(cc)
-2.766 E F1(option)2.766 E F0(\255DLA_TYPE=)2.766 E F2(type)A F1 2.766(,w)C
-(here)467.364 462.6 Q F2(type)2.766 E F1(is:)102 474.6 Q 34.51(LA_INT The)102
-490.8 R -.1(ke)2.978 G .478(rnel stores the load a).1 F -.15(ve)-.2 G .479
+.525(disk space control.)174 249 R -1.1(Yo)5.525 G 3.025(us)1.1 G .525
+(hould only set one of HASST)278.32 249 R -1.11(AT)-.93 G .525(FS or HASUST)
+1.11 F -.83 -1.11(AT ;)-.93 H(the)4.135 E(\214rst is preferred.)174 261 Q(_P)
+102 277.2 Q -1.11(AT)-.92 G(H_SENDMAILCF)1.11 E
+(The pathname of the sendmail.cf \214le.)174 289.2 Q(_P)102 305.4 Q -1.11(AT)
+-.92 G(H_SENDMAILPID)1.11 E(The pathname of the sendmail.pid \214le.)174 317.4
+Q 26.17(LA_TYPE The)102 333.6 R(load a)2.5 E -.15(ve)-.2 G(rage type.).15 E
+(Details are described belo)5 E -.65(w.)-.25 G 1.146(The are four b)102 349.8 R
+1.146(uilt-in w)-.2 F 1.146(ays of computing the load a)-.1 F -.15(ve)-.2 G
+(rage.).15 E F2(Sendmail)6.147 E F1 1.147(tries to auto-con\214gure them)3.647
+F .267(based on imperfect guesses; you can select one using the)102 361.8 R F2
+(cc)2.766 E F1(option)2.766 E F0(\255DLA_TYPE=)2.766 E F2(type)A F1 2.766(,w)C
+(here)467.364 361.8 Q F2(type)2.766 E F1(is:)102 373.8 Q 34.51(LA_INT The)102
+390 R -.1(ke)2.978 G .478(rnel stores the load a).1 F -.15(ve)-.2 G .479
 (rage in the k).15 F .479(ernel as an array of long inte)-.1 F 2.979(gers. The)
 (rage in the k).15 F .479(ernel as an array of long inte)-.1 F 2.979(gers. The)
--.15 F(actual v)174 502.8 Q(alues are scaled by a f)-.25 E(actor FSCALE \(def)
--.1 E(ault 256\).)-.1 E(LA_FLO)102 519 Q 22.63 -1.11(AT T)-.35 H 1.118(he k)
-1.11 F 1.117(ernel stores the load a)-.1 F -.15(ve)-.2 G 1.117(rage in the k)
-.15 F 1.117(ernel as an array of double precision)-.1 F(\215oats.)174 531 Q
-25.05(LA_SUBR Call)102 547.2 R(the)2.5 E F2 -.1(ge)2.5 G(tloadavg).1 E F1
+-.15 F(actual v)174 402 Q(alues are scaled by a f)-.25 E(actor FSCALE \(def)-.1
+E(ault 256\).)-.1 E(LA_SHOR)102 418.2 Q 21.49(TT)-.6 G .331(he k)180.11 418.2 R
+.331(ernel stores the load a)-.1 F -.15(ve)-.2 G .331(rage in the k).15 F .33
+(ernel as an array of short inte)-.1 F 2.83(gers. The)-.15 F(actual v)174 430.2
+Q(alues are scaled by a f)-.25 E(actor FSCALE \(def)-.1 E(ault 256\).)-.1 E
+(LA_FLO)102 446.4 Q 22.63 -1.11(AT T)-.35 H 1.117(he k)1.11 F 1.117
+(ernel stores the load a)-.1 F -.15(ve)-.2 G 1.117(rage in the k).15 F 1.117
+(ernel as an array of double precision)-.1 F(\215oats.)174 458.4 Q 25.05
+(LA_SUBR Call)102 474.6 R(the)2.5 E F2 -.1(ge)2.5 G(tloadavg).1 E F1
 (routine to get the load a)2.5 E -.15(ve)-.2 G(rage as an array of doubles.).15
 (routine to get the load a)2.5 E -.15(ve)-.2 G(rage as an array of doubles.).15
-E(LA_ZER)102 563.4 Q 27.96(OA)-.4 G -.1(lwa)181.22 563.4 S
+E(LA_ZER)102 490.8 Q 27.96(OA)-.4 G -.1(lwa)181.22 490.8 S
 (ys return zero as the load a).1 E -.15(ve)-.2 G 2.5(rage. This).15 F(is the f)
 (ys return zero as the load a).1 E -.15(ve)-.2 G 2.5(rage. This).15 F(is the f)
-2.5 E(allback case.)-.1 E .738(If type)102 579.6 R/F3 9/Times-Roman@0 SF
-(LA_INT)3.238 E F1(or)3.238 E F3(LA_FLO)3.238 E -.999(AT)-.315 G F1 .738
-(is speci\214ed, you may also need to specify)4.237 F F3(_P)3.239 E -.999(AT)
--.828 G(H_UNIX).999 E F1 .739(\(the path to)3.239 F .269
-(your system binary\) and)102 591.6 R F3(LA_A)2.769 E(VENR)-1.215 E(UN)-.36 E
-F1 .269(\(the name of the v)2.769 F .269(ariable containing the load a)-.25 F
--.15(ve)-.2 G .269(rage in the).15 F -.1(ke)102 603.6 S(rnel; usually \231_a).1
-E -.15(ve)-.2 G(nrun\232 or \231a).15 E -.15(ve)-.2 G(nrun\232\).).15 E F0 2.5
-(6.2. P)87 627.6 R(arameters in sr)-.1 E(c/conf)-.18 E(.h)-.15 E F1 -.15(Pa)127
-643.8 S .895(rameters and compilation options are de\214ned in conf.h.).15 F
-.896(Most of these need not normally)5.895 F .193(be tweak)102 655.8 R .192
+2.5 E(allback case.)-.1 E .494(If type)102 507 R/F3 9/Times-Roman@0 SF(LA_INT)
+2.994 E F1(,)A F3(LA_SHOR)2.994 E(T)-.54 E F1 2.994(,o)C(r)224.806 507 Q F3
+(LA_FLO)2.993 E -.999(AT)-.315 G F1 .493
+(is speci\214ed, you may also need to specify)3.992 F F3(_P)2.993 E -.999(AT)
+-.828 G(H_UNIX).999 E F1 .948(\(the path to your system binary\) and)102 519 R
+F3(LA_A)3.448 E(VENR)-1.215 E(UN)-.36 E F1 .949(\(the name of the v)3.448 F
+.949(ariable containing the load)-.25 F -2.25 -.2(av e)102 531 T(rage in the k)
+.2 E(ernel; usually \231_a)-.1 E -.15(ve)-.2 G(nrun\232 or \231a).15 E -.15(ve)
+-.2 G(nrun\232\).).15 E 1.44(There are also se)127 547.2 R -.15(ve)-.25 G 1.439
+(ral compilation \215ags to indicate the en).15 F 1.439
+(vironment such as \231_AIX3\232 and)-.4 F 2.5(\231_SCO_unix_\232. See)102
+559.2 R(the READ_ME \214le for the latest scoop on these \215ags.)2.5 E F0 2.5
+(6.2. P)87 583.2 R(arameters in sr)-.1 E(c/conf)-.18 E(.h)-.15 E F1 -.15(Pa)127
+599.4 S .895(rameters and compilation options are de\214ned in conf.h.).15 F
+.896(Most of these need not normally)5.895 F .193(be tweak)102 611.4 R .192
 (ed; common parameters are all in sendmail.cf.)-.1 F(Ho)5.192 E(we)-.25 E -.15
 (ve)-.25 G .992 -.4(r, t).15 H .192(he sizes of certain primiti).4 F .492 -.15
 (ed; common parameters are all in sendmail.cf.)-.1 F(Ho)5.192 E(we)-.25 E -.15
 (ve)-.25 G .992 -.4(r, t).15 H .192(he sizes of certain primiti).4 F .492 -.15
-(ve ve)-.25 H(c-).15 E(tors, etc., are included in this \214le.)102 667.8 Q
+(ve ve)-.25 H(c-).15 E(tors, etc., are included in this \214le.)102 623.4 Q
 (The numbers follo)5 E(wing the parameters are their def)-.25 E(ault v)-.1 E
 (The numbers follo)5 E(wing the parameters are their def)-.25 E(ault v)-.1 E
-(alue.)-.25 E 1.909(MAXLINE [1024])102 684 R 1.909
-(The maximum line length of an)190.309 684 R 4.409(yi)-.15 G 1.909(nput line.)
-338.273 684 R 1.91(If message lines e)6.909 F 1.91(xceed this)-.15 F .575
-(length the)188.4 696 R 3.075(yw)-.15 G .575
-(ill still be processed correctly; ho)243.84 696 R(we)-.25 E -.15(ve)-.25 G
+(alue.)-.25 E 1.909(MAXLINE [1024])102 639.6 R 1.909
+(The maximum line length of an)190.309 639.6 R 4.409(yi)-.15 G 1.909
+(nput line.)338.273 639.6 R 1.91(If message lines e)6.909 F 1.91(xceed this)
+-.15 F .575(length the)188.4 651.6 R 3.075(yw)-.15 G .575
+(ill still be processed correctly; ho)243.84 651.6 R(we)-.25 E -.15(ve)-.25 G
 1.375 -.4(r, h).15 H .575(eader lines, con\214gura-).4 F
 1.375 -.4(r, h).15 H .575(eader lines, con\214gura-).4 F
-(tion \214le lines, alias lines, etc., must \214t within this limit.)188.4 708
-Q EP
-%%Page: 46 43
+(tion \214le lines, alias lines, etc., must \214t within this limit.)188.4
+663.6 Q(MAXN)102 679.8 Q(AME [256])-.35 E(The maximum length of an)9.82 E 2.5
+(yn)-.15 G(ame, such as a host or a user name.)309.63 679.8 Q .23(MAXPV [40])
+102 696 R .231(The maximum number of parameters to an)188.63 696 R 2.731(ym)
+-.15 G(ailer)376.455 696 Q 5.231(.T)-.55 G .231(his limits the number of)
+407.516 696 R .376(recipients that may be passed in one transaction.)188.4 708
+R .375(It can be set to an)5.376 F 2.875(ya)-.15 G(rbitrary)474.01 708 Q .875
+(number abo)188.4 720 R 1.175 -.15(ve a)-.15 H .876(bout 10, since).15 F F2
+(sendmail)3.376 E F1 .876(will break up a deli)3.376 F -.15(ve)-.25 G .876
+(ry into smaller).15 F EP
+%%Page: 50 45
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-46 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(MAXN)102 96 Q
-(AME [256])-.35 E(The maximum length of an)9.82 E 2.5(yn)-.15 G
-(ame, such as a host or a user name.)309.63 96 Q .23(MAXPV [40])102 112.2 R
-.231(The maximum number of parameters to an)188.63 112.2 R 2.731(ym)-.15 G
-(ailer)376.455 112.2 Q 5.231(.T)-.55 G .231(his limits the number of)407.516
-112.2 R .376(recipients that may be passed in one transaction.)188.4 124.2 R
-.375(It can be set to an)5.376 F 2.875(ya)-.15 G(rbitrary)474.01 124.2 Q .875
-(number abo)188.4 136.2 R 1.175 -.15(ve a)-.15 H .876(bout 10, since).15 F/F2
-10/Times-Italic@0 SF(sendmail)3.376 E F1 .876(will break up a deli)3.376 F -.15
-(ve)-.25 G .876(ry into smaller).15 F .887(batches as needed.)188.4 148.2 R
-3.387(Ah)5.887 G .887(igher number may reduce load on your system, ho)285.808
-148.2 R(w-)-.25 E -2.15 -.25(ev e)188.4 160.2 T -.55(r.).25 G(MAXA)102 176.4 Q
--.18(TO)-1.11 G 2.558(M[).18 G 8.26(100] The)159.368 176.4 R .058
-(maximum number of atoms \(tok)2.558 F .059(ens\) in a single address.)-.1 F
--.15(Fo)5.059 G 2.559(re).15 G .059(xample, the)457.281 176.4 R
-(address \231eric@CS.Berk)188.4 188.4 Q(ele)-.1 E -.65(y.)-.15 G(EDU\232 is se)
-.65 E -.15(ve)-.25 G 2.5(na).15 G(toms.)367.93 188.4 Q .113(MAXMAILERS [25])102
-204.6 R .112(The maximum number of mailers that may be de\214ned in the con\
-\214guration \214le.).02 F(MAXR)102 220.8 Q(WSETS [100])-.55 E
-(The maximum number of re).01 E(writing sets that may be de\214ned.)-.25 E
-(MAXPRIORITIES [25])102 237 Q 2.481(The maximum number of v)188.4 249 R 2.482
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-50 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .887
+(batches as needed.)188.4 96 R 3.387(Ah)5.887 G .887
+(igher number may reduce load on your system, ho)285.808 96 R(w-)-.25 E -2.15
+-.25(ev e)188.4 108 T -.55(r.).25 G(MAXA)102 124.2 Q -.18(TO)-1.11 G 2.558(M[)
+.18 G 8.26(100] The)159.368 124.2 R .058(maximum number of atoms \(tok)2.558 F
+.059(ens\) in a single address.)-.1 F -.15(Fo)5.059 G 2.559(re).15 G .059
+(xample, the)457.281 124.2 R(address \231eric@CS.Berk)188.4 136.2 Q(ele)-.1 E
+-.65(y.)-.15 G(EDU\232 is se).65 E -.15(ve)-.25 G 2.5(na).15 G(toms.)367.93
+136.2 Q .113(MAXMAILERS [25])102 152.4 R .112(The maximum number of mailers th\
+at may be de\214ned in the con\214guration \214le.).02 F(MAXR)102 168.6 Q
+(WSETS [100])-.55 E(The maximum number of re).01 E
+(writing sets that may be de\214ned.)-.25 E(MAXPRIORITIES [25])102 184.8 Q
+2.481(The maximum number of v)188.4 196.8 R 2.482
 (alues for the \231Precedence:\232 \214eld that may be)-.25 F
 (alues for the \231Precedence:\232 \214eld that may be)-.25 F
-(de\214ned \(using the)188.4 261 Q F0(P)2.5 E F1(line in sendmail.cf\).)2.5 E
-(MAXUSERENVIR)102 277.2 Q(ON [40])-.4 E .399
-(The maximum number of items in the user en)188.4 289.2 R .399
-(vironment that will be passed to)-.4 F(subordinate mailers.)188.4 301.2 Q -.1
-(QU)102 317.4 S(EUESIZE [1000]).1 E
+(de\214ned \(using the)188.4 208.8 Q F0(P)2.5 E F1(line in sendmail.cf\).)2.5 E
+(MAXUSERENVIR)102 225 Q(ON [40])-.4 E .399
+(The maximum number of items in the user en)188.4 237 R .399
+(vironment that will be passed to)-.4 F(subordinate mailers.)188.4 249 Q -.1
+(QU)102 265.2 S(EUESIZE [1000]).1 E
 (The maximum number of entries that will be processed in a single queue run.)
 (The maximum number of entries that will be processed in a single queue run.)
-2.35 E(MAXMXHOSTS [20])102 333.6 Q
-(The maximum number of MX records we will accept for an)188.4 345.6 Q 2.5(ys)
--.15 G(ingle host.)439.03 345.6 Q(MAXIP)102 361.8 Q .968(ADDR [16])-.92 F .968
-(The maximum number of numeric IP addresses we will accept for this host.)7.61
-F(This does not limit the number the number of addresses for other hosts.)188.4
-373.8 Q 2.851(An)102 390 S .351(umber of other compilation options e)117.071
-390 R 2.851(xist. These)-.15 F .35
-(specify whether or not speci\214c code should be)2.851 F(compiled in.)102 402
-Q(DEB)102 418.2 Q 49.56(UG If)-.1 F 1.226(set, deb)3.726 F 1.226
-(ugging information is compiled in.)-.2 F 2.827 -.8(To a)6.226 H 1.227
-(ctually get the deb).8 F(ugging)-.2 E .4(output, the)188.4 430.2 R F0<ad64>2.9
+2.35 E(MAXMXHOSTS [20])102 281.4 Q
+(The maximum number of MX records we will accept for an)188.4 293.4 Q 2.5(ys)
+-.15 G(ingle host.)439.03 293.4 Q 2.85(An)102 309.6 S .35
+(umber of other compilation options e)117.07 309.6 R 2.851(xist. These)-.15 F
+.351(specify whether or not speci\214c code should be)2.851 F(compiled in.)102
+321.6 Q(DEB)102 337.8 Q 49.56(UG If)-.1 F 1.227(set, deb)3.727 F 1.227
+(ugging information is compiled in.)-.2 F 2.826 -.8(To a)6.226 H 1.226
+(ctually get the deb).8 F(ugging)-.2 E .4(output, the)188.4 349.8 R F0<ad64>2.9
 E F1 .4(\215ag must be used.)2.9 F F0 .4(WE STR)5.4 F(ONGL)-.3 E 2.9(YR)-.92 G
 E F1 .4(\215ag must be used.)2.9 F F0 .4(WE STR)5.4 F(ONGL)-.3 E 2.9(YR)-.92 G
-.4(ECOMMEND THA)412.05 430.2 R(T)-.95 E .97(THIS BE LEFT ON.)188.4 442.2 R F1
+.4(ECOMMEND THA)412.05 349.8 R(T)-.95 E .97(THIS BE LEFT ON.)188.4 361.8 R F1
 .97(Some people, belie)5.97 F .97(ving that it w)-.25 F .97
 .97(Some people, belie)5.97 F .97(ving that it w)-.25 F .97
-(as a security hole \(it)-.1 F -.1(wa)188.4 454.2 S(s, once\) ha).1 E .3 -.15
-(ve t)-.2 H(urned it of).15 E 2.5(fa)-.25 G(nd thus crippled deb)309.05 454.2 Q
-(uggers.)-.2 E 41.69(NETINET If)102 470.4 R .829
-(set, support for Internet protocol netw)3.33 F .829(orking is compiled in.)-.1
-F(Pre)5.829 E .829(vious v)-.25 F(er)-.15 E(-)-.2 E .006(sions of)188.4 482.4 R
-F0(sendmail)2.506 E F1 .006(referred to this as)2.506 F/F3 9/Times-Roman@0 SF
--.36(DA)2.506 G(EMON).36 E F1 2.506(;t)C .006(his old usage is no)382.57 482.4
-R 2.506(wi)-.25 G(ncorrect.)468.74 482.4 Q 48.35(NETISO If)102 498.6 R .143
-(set, support for ISO protocol netw)2.643 F .142
+(as a security hole \(it)-.1 F -.1(wa)188.4 373.8 S(s, once\) ha).1 E .3 -.15
+(ve t)-.2 H(urned it of).15 E 2.5(fa)-.25 G(nd thus crippled deb)309.05 373.8 Q
+(uggers.)-.2 E 41.69(NETINET If)102 390 R .829
+(set, support for Internet protocol netw)3.329 F .829(orking is compiled in.)
+-.1 F(Pre)5.829 E .83(vious v)-.25 F(er)-.15 E(-)-.2 E .178(sions of)188.4 402
+R/F2 10/Times-Italic@0 SF(sendmail)2.678 E F1 .178(referred to this as)2.678 F
+/F3 9/Times-Roman@0 SF -.36(DA)2.678 G(EMON).36 E F1 2.677(;t)C .177
+(his old usage is no)381.715 402 R 2.677(wi)-.25 G(ncorrect.)468.74 402 Q 48.35
+(NETISO If)102 418.2 R .142(set, support for ISO protocol netw)2.642 F .143
 (orking is compiled in \(it may be appropri-)-.1 F
 (orking is compiled in \(it may be appropri-)-.1 F
-(ate to #de\214ne this in the Mak)188.4 510.6 Q(e\214le instead of conf.h\).)
--.1 E 63.35(LOG If)102 526.8 R .5(set, the)3 F F2(syslo)3 E(g)-.1 E F1 .5
+(ate to #de\214ne this in the Mak)188.4 430.2 Q(e\214le instead of conf.h\).)
+-.1 E 63.35(LOG If)102 446.4 R .5(set, the)3 F F2(syslo)3 E(g)-.1 E F1 .5
 (routine in use at some sites is used.)3 F .5(This mak)5.5 F .5(es an informa-)
 (routine in use at some sites is used.)3 F .5(This mak)5.5 F .5(es an informa-)
--.1 F .504(tional log record for each message processed, and mak)188.4 538.8 R
+-.1 F .504(tional log record for each message processed, and mak)188.4 458.4 R
 .504(es a higher priority log)-.1 F(record for internal system errors.)188.4
 .504(es a higher priority log)-.1 F(record for internal system errors.)188.4
-550.8 Q(MA)102 567 Q 16.12(TCHGECOS Compile)-1.11 F 3.555(in the code to do `)
-6.055 F 3.555(`fuzzy matching')-.74 F 6.055('o)-.74 G 6.055(nt)404.22 567 S
-3.555(he GECOS \214eld in)418.055 567 R 2.5(/etc/passwd. This)188.4 579 R
-(also requires that option G be turned on.)2.5 E -.35(NA)102 595.2 S 18.15
-(MED_BIND Compile).35 F .413(in code to use the Berk)2.913 F(ele)-.1 E 2.912
-(yI)-.15 G .412(nternet Name Domain \(BIND\) serv)342.41 595.2 R .412(er to)
--.15 F(resolv)188.4 607.2 Q 2.5(eT)-.15 G(CP/IP host names.)225.74 607.2 Q(NO)
-102 623.4 Q 38.76(TUNIX If)-.4 F .247
-(you are using a non-UNIX mail format, you can set this \215ag to turn of)2.747
-F 2.748(fs)-.25 G(pe-)491.23 623.4 Q
-(cial processing of UNIX-style \231From \232 lines.)188.4 635.4 Q -.1(QU)102
-651.6 S 50.12(EUE This).1 F 1.559
-(\215ag should be set to compile in the queueing code.)4.06 F 1.559
-(If this is not set,)6.559 F
+470.4 Q(MA)102 486.6 Q 16.12(TCHGECOS Compile)-1.11 F 3.555
+(in the code to do `)6.055 F 3.555(`fuzzy matching')-.74 F 6.055('o)-.74 G
+6.055(nt)404.22 486.6 S 3.555(he GECOS \214eld in)418.055 486.6 R 2.5
+(/etc/passwd. This)188.4 498.6 R(also requires that option G be turned on.)2.5
+E -.35(NA)102 514.8 S 18.15(MED_BIND Compile).35 F .412
+(in code to use the Berk)2.912 F(ele)-.1 E 2.913(yI)-.15 G .413
+(nternet Name Domain \(BIND\) serv)342.405 514.8 R .413(er to)-.15 F(resolv)
+188.4 526.8 Q 2.5(eT)-.15 G(CP/IP host names.)225.74 526.8 Q(NO)102 543 Q 38.76
+(TUNIX If)-.4 F .248
+(you are using a non-UNIX mail format, you can set this \215ag to turn of)2.748
+F 2.747(fs)-.25 G(pe-)491.23 543 Q
+(cial processing of UNIX-style \231From \232 lines.)188.4 555 Q -.1(QU)102
+571.2 S 50.12(EUE This).1 F 1.559
+(\215ag should be set to compile in the queueing code.)4.059 F 1.56
+(If this is not set,)6.56 F
 (mailers must accept the mail immediately or it will be returned to the sender)
 (mailers must accept the mail immediately or it will be returned to the sender)
-188.4 663.6 Q(.)-.55 E(SETPR)102 679.8 Q 12.63(OCTITLE If)-.4 F(de\214ned,)3.88
-E F2(sendmail)3.88 E F1 1.381(will change its)3.881 F F2(ar)3.881 E(gv)-.37 E
-F1 1.381(array to indicate its current status.)3.881 F .207
-(This can be used in conjunction with the)188.4 691.8 R F2(ps)2.707 E F1 .206
-(command to \214nd out just what it')2.707 F(s)-.55 E(up to.)188.4 703.8 Q EP
-%%Page: 47 44
+188.4 583.2 Q(.)-.55 E(SETPR)102 599.4 Q 12.63(OCTITLE If)-.4 F(de\214ned,)
+3.881 E F2(sendmail)3.881 E F1 1.381(will change its)3.881 F F2(ar)3.881 E(gv)
+-.37 E F1 1.381(array to indicate its current status.)3.881 F .206
+(This can be used in conjunction with the)188.4 611.4 R F2(ps)2.707 E F1 .207
+(command to \214nd out just what it')2.707 F(s)-.55 E(up to.)188.4 623.4 Q
+57.78(SMTP If)102 639.6 R .756(set, the code to handle user and serv)3.256 F
+.756(er SMTP will be compiled in.)-.15 F .756(This is)5.756 F 2.507
+(only necessary if your machine has some mailer that speaks SMTP \(this)188.4
+651.6 R(means most machines e)188.4 663.6 Q -.15(ve)-.25 G(rywhere\).).15 E
+(UGL)102 679.8 Q 30.46(YUUCP If)-1 F 1.024(you ha)3.524 F 1.324 -.15(ve a U)-.2
+H 1.023(UCP host adjacent to you which is not running a reasonable).15 F -.15
+(ve)188.4 691.8 S .112(rsion of).15 F F2(rmail)2.612 E F1 2.612(,y)C .112
+(ou will ha)263.026 691.8 R .412 -.15(ve t)-.2 H 2.612(os).15 G .112
+(et this \215ag to include the \231remote from sys-)329.234 691.8 R .032
+(name\232 info on the from line.)188.4 703.8 R .031
+(Otherwise, UUCP gets confused about where the)5.032 F(mail came from.)188.4
+715.8 Q EP
+%%Page: 51 46
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-47)452.9 60 Q/F1 10/Times-Roman@0 SF 57.78(SMTP If)102 96 R .756
-(set, the code to handle user and serv)3.256 F .756
-(er SMTP will be compiled in.)-.15 F .756(This is)5.756 F 2.507
-(only necessary if your machine has some mailer that speaks SMTP \(this)188.4
-108 R(means most machines e)188.4 120 Q -.15(ve)-.25 G(rywhere\).).15 E(UGL)102
-136.2 Q 30.46(YUUCP If)-1 F 1.023(you ha)3.523 F 1.323 -.15(ve a U)-.2 H 1.024
-(UCP host adjacent to you which is not running a reasonable).15 F -.15(ve)188.4
-148.2 S .112(rsion of).15 F/F2 10/Times-Italic@0 SF(rmail)2.612 E F1 2.612(,y)C
-.112(ou will ha)263.026 148.2 R .412 -.15(ve t)-.2 H 2.612(os).15 G .112
-(et this \215ag to include the \231remote from sys-)329.234 148.2 R .031
-(name\232 info on the from line.)188.4 160.2 R .032
-(Otherwise, UUCP gets confused about where the)5.032 F(mail came from.)188.4
-172.2 Q 44.45(USERDB Include)102 188.4 R(the)3.449 E F0(experimental)3.449 E F1
-(Berk)3.449 E(ele)-.1 E 3.449(yu)-.15 G .949(ser information database package.)
-341.356 188.4 R(This)5.948 E .27(adds a ne)188.4 200.4 R 2.77(wl)-.25 G -2.15
--.25(ev e)238.67 200.4 T 2.77(lo).25 G 2.77(fl)262.7 200.4 S .27(ocal name e)
-271.58 200.4 R .27(xpansion between aliasing and forw)-.15 F 2.77(arding. It)
--.1 F(also uses the NEWDB package.)188.4 212.4 Q
-(This may change in future releases.)5 E(IDENTPR)102 228.6 Q -1.88 -.4(OT O)-.4
-H .376(Compile in the IDENT protocol as de\214ned in RFC 1413.)188.4 228.6 R
-.375(This def)5.375 F .375(aults on for)-.1 F 1.053(all systems e)188.4 240.6 R
+(SMM:08-51)452.9 60 Q/F1 10/Times-Roman@0 SF 44.45(USERDB Include)102 96 R(the)
+3.448 E F0(experimental)3.448 E F1(Berk)3.449 E(ele)-.1 E 3.449(yu)-.15 G .949
+(ser information database package.)341.354 96 R(This)5.949 E .27(adds a ne)
+188.4 108 R 2.77(wl)-.25 G -2.15 -.25(ev e)238.67 108 T 2.77(lo).25 G 2.77(fl)
+262.7 108 S .27(ocal name e)271.58 108 R .27
+(xpansion between aliasing and forw)-.15 F 2.77(arding. It)-.1 F
+(also uses the NEWDB package.)188.4 120 Q(This may change in future releases.)5
+E(IDENTPR)102 136.2 Q -1.88 -.4(OT O)-.4 H .375
+(Compile in the IDENT protocol as de\214ned in RFC 1413.)188.4 136.2 R .376
+(This def)5.376 F .376(aults on for)-.1 F 1.053(all systems e)188.4 148.2 R
 1.053(xcept Ultrix, which apparently has the interesting \231feature\232 that)
 1.053(xcept Ultrix, which apparently has the interesting \231feature\232 that)
--.15 F .83(when it recei)188.4 252.6 R -.15(ve)-.25 G 3.33(sa\231).15 G .83
-(host unreachable\232 message it closes all open connections)270.18 252.6 R
-1.921(to that host.)188.4 264.6 R 1.921(Since some \214re)6.921 F -.1(wa)-.25 G
-1.922(ll g).1 F(ate)-.05 E -.1(wa)-.25 G 1.922
+-.15 F .83(when it recei)188.4 160.2 R -.15(ve)-.25 G 3.33(sa\231).15 G .83
+(host unreachable\232 message it closes all open connections)270.18 160.2 R
+1.922(to that host.)188.4 172.2 R 1.922(Since some \214re)6.922 F -.1(wa)-.25 G
+1.922(ll g).1 F(ate)-.05 E -.1(wa)-.25 G 1.921
 (ys send this error code when you).1 F 2.055
 (access an unauthorized port \(such as 113, used by IDENT\), Ultrix cannot)
 (ys send this error code when you).1 F 2.055
 (access an unauthorized port \(such as 113, used by IDENT\), Ultrix cannot)
-188.4 276.6 R(recei)188.4 288.6 Q .3 -.15(ve e)-.25 H(mail from such hosts.).15
-E F0 2.5(6.3. Con\214guration)87 312.6 R(in sr)2.5 E(c/conf)-.18 E(.c)-.15 E F1
-(The follo)127 328.8 Q(wing changes can be made in conf.c.)-.25 E F0 2.5
-(6.3.1. Built-in)102 352.8 R(Header Semantics)2.5 E F1 1.248
-(Not all header semantics are de\214ned in the con\214guration \214le.)142 369
-R 1.248(Header lines that should)6.248 F .305(only be included by certain mail\
-ers \(as well as other more obscure semantics\) must be speci\214ed)117 381 R
-.046(in the)117 393 R F2(HdrInfo)2.546 E F1 .046(table in)2.546 F F2(conf)2.546
-E(.c)-.15 E F1 5.046(.T)C .047
-(his table contains the header name \(which should be in all lo)246.836 393 R
-(wer)-.25 E(case\) and a set of header control \215ags \(described belo)117 405
-Q(w\), The \215ags are:)-.25 E(H_A)117 421.2 Q 30.97(CHECK Normally)-.4 F .007
-(when the check is made to see if a header line is compatible with)2.508 F 2.94
-(am)203.4 433.2 S(ailer)218.56 433.2 Q(,)-.4 E F2(sendmail)2.94 E F1 .441
-(will not delete an e)2.94 F .441(xisting line.)-.15 F .441
-(If this \215ag is set,)5.441 F F2(send-)2.941 E(mail)203.4 445.2 Q F1 .152
+188.4 184.2 R(recei)188.4 196.2 Q .3 -.15(ve e)-.25 H(mail from such hosts.).15
+E F0 2.5(6.3. Con\214guration)87 220.2 R(in sr)2.5 E(c/conf)-.18 E(.c)-.15 E F1
+(The follo)127 236.4 Q(wing changes can be made in conf.c.)-.25 E F0 2.5
+(6.3.1. Built-in)102 260.4 R(Header Semantics)2.5 E F1 1.248
+(Not all header semantics are de\214ned in the con\214guration \214le.)142
+276.6 R 1.247(Header lines that should)6.247 F .305(only be included by certai\
+n mailers \(as well as other more obscure semantics\) must be speci\214ed)117
+288.6 R .047(in the)117 300.6 R/F2 10/Times-Italic@0 SF(HdrInfo)2.547 E F1 .047
+(table in)2.547 F F2(conf)2.547 E(.c)-.15 E F1 5.047(.T)C .046
+(his table contains the header name \(which should be in all lo)246.842 300.6 R
+(wer)-.25 E(case\) and a set of header control \215ags \(described belo)117
+312.6 Q(w\), The \215ags are:)-.25 E(H_A)117 328.8 Q 30.97(CHECK Normally)-.4 F
+.007(when the check is made to see if a header line is compatible with)2.507 F
+2.941(am)203.4 340.8 S(ailer)218.561 340.8 Q(,)-.4 E F2(sendmail)2.941 E F1
+.441(will not delete an e)2.941 F .441(xisting line.)-.15 F .44
+(If this \215ag is set,)5.441 F F2(send-)2.94 E(mail)203.4 352.8 Q F1 .152
 (will delete e)2.652 F -.15(ve)-.25 G 2.652(ne).15 G .152
 (will delete e)2.652 F -.15(ve)-.25 G 2.652(ne).15 G .152
-(xisting header lines.)293.998 445.2 R .152
+(xisting header lines.)293.998 352.8 R .152
 (That is, if this bit is set and the)5.152 F 1.425(mailer does not ha)203.4
 (That is, if this bit is set and the)5.152 F 1.425(mailer does not ha)203.4
-457.2 R 1.725 -.15(ve \215)-.2 H 1.425
+364.8 R 1.725 -.15(ve \215)-.2 H 1.425
 (ag bits set that intersect with the required mailer).15 F 2.204
 (\215ags in the header de\214nition in sendmail.cf, the header line is)203.4
 (ag bits set that intersect with the required mailer).15 F 2.204
 (\215ags in the header de\214nition in sendmail.cf, the header line is)203.4
-469.2 R F2(always)4.703 E F1(deleted.)203.4 481.2 Q 51.13(H_EOH If)117 497.4 R
-.206(this header \214eld is set, treat it lik)2.705 F 2.706(eab)-.1 G .206
-(lank line, i.e., it will signal the end)363.948 497.4 R
-(of the header and the be)203.4 509.4 Q(ginning of the message te)-.15 E(xt.)
--.15 E 39.45(H_FORCE Add)117 525.6 R 2.039(this header entry e)4.539 F -.15(ve)
--.25 G 4.539(ni).15 G 4.539(fo)326.225 525.6 S 2.038(ne e)339.094 525.6 R 2.038
-(xisted in the message before.)-.15 F 2.038(If a)7.038 F 2.188
-(header entry does not ha)203.4 537.6 R 2.488 -.15(ve t)-.2 H 2.188
-(his bit set,).15 F F2(sendmail)4.688 E F1 2.189(will not add another)4.689 F
-.62(header line if a header line of this name already e)203.4 549.6 R 3.12
+376.8 R F2(always)4.704 E F1(deleted.)203.4 388.8 Q 51.13(H_EOH If)117 405 R
+.206(this header \214eld is set, treat it lik)2.706 F 2.706(eab)-.1 G .206
+(lank line, i.e., it will signal the end)363.95 405 R(of the header and the be)
+203.4 417 Q(ginning of the message te)-.15 E(xt.)-.15 E 39.45(H_FORCE Add)117
+433.2 R 2.038(this header entry e)4.538 F -.15(ve)-.25 G 4.538(ni).15 G 4.538
+(fo)326.22 433.2 S 2.038(ne e)339.088 433.2 R 2.039
+(xisted in the message before.)-.15 F 2.039(If a)7.039 F 2.189
+(header entry does not ha)203.4 445.2 R 2.488 -.15(ve t)-.2 H 2.188
+(his bit set,).15 F F2(sendmail)4.688 E F1 2.188(will not add another)4.688 F
+.62(header line if a header line of this name already e)203.4 457.2 R 3.12
 (xisted. This)-.15 F -.1(wo)3.12 G .62(uld nor).1 F(-)-.2 E
 (xisted. This)-.15 F -.1(wo)3.12 G .62(uld nor).1 F(-)-.2 E
-(mally be used to stamp the message by e)203.4 561.6 Q -.15(ve)-.25 G
-(ryone who handled it.).15 E(H_TRA)117 577.8 Q 39.3(CE If)-.4 F 1.043
-(set, this is a timestamp \(trace\) \214eld.)3.543 F 1.044
-(If the number of trace \214elds in a)6.043 F .706(message e)203.4 589.8 R .705
+(mally be used to stamp the message by e)203.4 469.2 Q -.15(ve)-.25 G
+(ryone who handled it.).15 E(H_TRA)117 485.4 Q 39.3(CE If)-.4 F 1.044
+(set, this is a timestamp \(trace\) \214eld.)3.544 F 1.043
+(If the number of trace \214elds in a)6.043 F .705(message e)203.4 497.4 R .705
 (xceeds a preset amount the message is returned on the assump-)-.15 F
 (xceeds a preset amount the message is returned on the assump-)-.15 F
-(tion that it has an aliasing loop.)203.4 601.8 Q 46.67(H_RCPT If)117 618 R
-.332(set, this \214eld contains recipient addresses.)2.832 F .332
-(This is used by the)5.332 F F0<ad74>2.832 E F1 .333(\215ag to)2.833 F 1.349
+(tion that it has an aliasing loop.)203.4 509.4 Q 46.67(H_RCPT If)117 525.6 R
+.332(set, this \214eld contains recipient addresses.)2.833 F .332
+(This is used by the)5.332 F F0<ad74>2.832 E F1 .332(\215ag to)2.832 F 1.349
 (determine who to send to when it is collecting recipients from the mes-)203.4
 (determine who to send to when it is collecting recipients from the mes-)203.4
-630 R(sage.)203.4 642 Q(H_FR)117 658.2 Q 43.74(OM This)-.4 F 1.673
-(\215ag indicates that this \214eld speci\214es a sender)4.173 F 6.674(.T)-.55
-G 1.674(he order of these)432.058 658.2 R .883(\214elds in the)203.4 670.2 R F2
-(HdrInfo)3.383 E F1 .883(table speci\214es)3.383 F F2(sendmail')3.383 E(s)-.4 E
-F1 .883(preference for which \214eld)3.383 F(to return error messages to.)203.4
-682.2 Q(Let')117 698.4 Q 2.5(sl)-.55 G(ook at a sample)142.28 698.4 Q F2
-(HdrInfo)2.5 E F1(speci\214cation:)2.5 E EP
-%%Page: 48 45
+537.6 R(sage.)203.4 549.6 Q(H_FR)117 565.8 Q 43.74(OM This)-.4 F 1.673
+(\215ag indicates that this \214eld speci\214es a sender)4.174 F 6.673(.T)-.55
+G 1.673(he order of these)432.061 565.8 R .898(\214elds in the)203.4 577.8 R F2
+(HdrInfo)3.398 E F1 .898(table speci\214es)3.398 F F2(sendmail)3.398 E F1 1.998
+-.55('s p)D .898(reference for which \214eld).55 F
+(to return error messages to.)203.4 589.8 Q(Let')117 606 Q 2.5(sl)-.55 G
+(ook at a sample)142.28 606 Q F2(HdrInfo)2.5 E F1(speci\214cation:)2.5 E EP
+%%Page: 52 47
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-48 Sendmail)72 60 R
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-52 Sendmail)72 60 R
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(struct hdrinfo)
 157 96 Q(HdrInfo[] =)258.19 96 Q({)157 108 Q
 (/* originator \214elds, most to least signi\214cant)189.5 120 Q(*/)5 E 14.72
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(struct hdrinfo)
 157 96 Q(HdrInfo[] =)258.19 96 Q({)157 108 Q
 (/* originator \214elds, most to least signi\214cant)189.5 120 Q(*/)5 E 14.72
@@ -3989,80 +4225,82 @@ R(OM,)-.4 E 29.15("full-name", H_A)177 180 R(CHECK,)-.4 E
 (d", H_TRA).15 F(CE|H_FORCE,)-.4 E 49.53(NULL, 0,)177 312 R(};)157 324 Q 2.435
 (This structure indicates that the \231T)117 340.2 R 2.435
 (o:\232, \231Resent-T)-.8 F 2.435
 (d", H_TRA).15 F(CE|H_FORCE,)-.4 E 49.53(NULL, 0,)177 312 R(};)157 324 Q 2.435
 (This structure indicates that the \231T)117 340.2 R 2.435
 (o:\232, \231Resent-T)-.8 F 2.435
-(o:\232, and \231Cc:\232 \214elds all specify recipient)-.8 F 3.162
-(addresses. An)117 352.2 R 3.162<7999>-.15 G .661(Full-Name:\232 \214eld will \
-be deleted unless the required mailer \215ag \(indicated in)188.154 352.2 R
-.245(the con\214guration \214le\) is speci\214ed.)117 364.2 R .245
-(The \231Message:\232 and \231T)5.245 F -.15(ex)-.7 G .246
+(o:\232, and \231Cc:\232 \214elds all specify recipient)-.8 F 3.161
+(addresses. An)117 352.2 R 3.161<7999>-.15 G .662(Full-Name:\232 \214eld will \
+be deleted unless the required mailer \215ag \(indicated in)188.152 352.2 R
+.246(the con\214guration \214le\) is speci\214ed.)117 364.2 R .245
+(The \231Message:\232 and \231T)5.246 F -.15(ex)-.7 G .245
 (t:\232 \214elds will terminate the header;).15 F 1.936
 (these are used by random dissenters around the netw)117 376.2 R 1.936(ork w)
 (t:\232 \214elds will terminate the header;).15 F 1.936
 (these are used by random dissenters around the netw)117 376.2 R 1.936(ork w)
--.1 F 4.436(orld. The)-.1 F(\231Recei)4.436 E -.15(ve)-.25 G 1.936
+-.1 F 4.436(orld. The)-.1 F(\231Recei)4.436 E -.15(ve)-.25 G 1.937
 (d:\232 \214eld will).15 F(al)117 388.2 Q -.1(wa)-.1 G
 (d:\232 \214eld will).15 F(al)117 388.2 Q -.1(wa)-.1 G
-(ys be added, and can be used to trace messages.).1 E .445
-(There are a number of important points here.)142 404.4 R .446
-(First, header \214elds are not added automati-)5.446 F .657
-(cally just because the)117 416.4 R 3.157(ya)-.15 G .657(re in the)216.678
+(ys be added, and can be used to trace messages.).1 E .446
+(There are a number of important points here.)142 404.4 R .445
+(First, header \214elds are not added automati-)5.446 F .656
+(cally just because the)117 416.4 R 3.156(ya)-.15 G .656(re in the)216.674
 416.4 R/F2 10/Times-Italic@0 SF(HdrInfo)3.157 E F1 .657(structure; the)3.157 F
 416.4 R/F2 10/Times-Italic@0 SF(HdrInfo)3.157 E F1 .657(structure; the)3.157 F
-3.157(ym)-.15 G .656(ust be speci\214ed in the con\214guration)358.23 416.4 R
-.727(\214le in order to be added to the message.)117 428.4 R(An)5.728 E 3.228
-(yh)-.15 G .728(eader \214elds mentioned in the con\214guration \214le)312.982
+3.157(ym)-.15 G .657(ust be speci\214ed in the con\214guration)358.225 416.4 R
+.728(\214le in order to be added to the message.)117 428.4 R(An)5.727 E 3.227
+(yh)-.15 G .727(eader \214elds mentioned in the con\214guration \214le)312.988
 428.4 R -.2(bu)117 440.4 S 3.24(tn).2 G .74(ot mentioned in the)137.82 440.4 R
 F2(HdrInfo)3.24 E F1 .74(structure ha)3.24 F 1.04 -.15(ve d)-.2 H(ef).15 E .74
 (ault processing performed; that is, the)-.1 F 3.24(ya)-.15 G(re)496.23 440.4 Q
 428.4 R -.2(bu)117 440.4 S 3.24(tn).2 G .74(ot mentioned in the)137.82 440.4 R
 F2(HdrInfo)3.24 E F1 .74(structure ha)3.24 F 1.04 -.15(ve d)-.2 H(ef).15 E .74
 (ault processing performed; that is, the)-.1 F 3.24(ya)-.15 G(re)496.23 440.4 Q
-1.374(added unless the)117 452.4 R 3.874(yw)-.15 G 1.374
-(ere in the message already)201.792 452.4 R 6.375(.S)-.65 G 1.375(econd, the)
-326.595 452.4 R F2(HdrInfo)3.875 E F1 1.375(structure only speci\214es)3.875 F
+1.375(added unless the)117 452.4 R 3.875(yw)-.15 G 1.375
+(ere in the message already)201.795 452.4 R 6.375(.S)-.65 G 1.374(econd, the)
+326.6 452.4 R F2(HdrInfo)3.874 E F1 1.374(structure only speci\214es)3.874 F
 .324
 (cliched processing; certain headers are processed specially by ad hoc code re)
 .324
 (cliched processing; certain headers are processed specially by ad hoc code re)
-117 464.4 R -.05(ga)-.15 G .324(rdless of the sta-).05 F .48
-(tus speci\214ed in)117 476.4 R F2(HdrInfo)2.98 E F1 5.48(.F)C .481(or e)226.55
-476.4 R .481(xample, the \231Sender:\232 and \231From:\232 \214elds are al)-.15
-F -.1(wa)-.1 G .481(ys scanned on).1 F(ARP)117 490.4 Q .75
-(ANET mail to determine the sender)-.92 F/F3 7/Times-Roman@0 SF(12)282.31 486.4
-Q F1 3.251(;t)289.31 490.4 S .751
-(his is used to perform the \231return to sender\232 func-)298.121 490.4 R
-2.977(tion. The)117 502.4 R .476(\231From:\232 and \231Full-Name:\232 \214elds\
- are used to determine the full name of the sender if)2.977 F
+117 464.4 R -.05(ga)-.15 G .325(rdless of the sta-).05 F .481
+(tus speci\214ed in)117 476.4 R F2(HdrInfo)2.981 E F1 5.481(.F)C .481(or e)
+226.554 476.4 R .481
+(xample, the \231Sender:\232 and \231From:\232 \214elds are al)-.15 F -.1(wa)
+-.1 G .48(ys scanned on).1 F(ARP)117 490.4 Q .751
+(ANET mail to determine the sender)-.92 F/F3 7/Times-Roman@0 SF(18)282.315
+486.4 Q F1 3.251(;t)289.315 490.4 S .75
+(his is used to perform the \231return to sender\232 func-)298.126 490.4 R
+2.976(tion. The)117 502.4 R .476(\231From:\232 and \231Full-Name:\232 \214elds\
+ are used to determine the full name of the sender if)2.976 F
 (possible; this is stored in the macro)117 514.4 Q F0($x)2.5 E F1
 (and used in a number of w)2.5 E(ays.)-.1 E F0 2.5(6.3.2. Restricting)102 538.4
 (possible; this is stored in the macro)117 514.4 Q F0($x)2.5 E F1
 (and used in a number of w)2.5 E(ays.)-.1 E F0 2.5(6.3.2. Restricting)102 538.4
-R(Use of Email)2.5 E F1 .149
+R(Use of Email)2.5 E F1 .15
 (If it is necessary to restrict mail through a relay)142 554.6 R 2.649(,t)-.65
 (If it is necessary to restrict mail through a relay)142 554.6 R 2.649(,t)-.65
-G(he)339.75 554.6 Q F2 -.15(ch)2.65 G(ec).15 E(kcompat)-.2 E F1 .15
-(routine can be modi\214ed.)2.65 F .163(This routine is called for e)117 566.6
+G(he)339.755 554.6 Q F2 -.15(ch)2.649 G(ec).15 E(kcompat)-.2 E F1 .149
+(routine can be modi\214ed.)2.649 F .163(This routine is called for e)117 566.6
 R -.15(ve)-.25 G .163(ry recipient address.).15 F .163(It returns an e)5.163 F
 .163(xit status indicating the status of)-.15 F .895(the message.)117 578.6 R
 .895(The status)5.895 F/F4 9/Times-Roman@0 SF(EX_OK)3.395 E F1 .895
 (accepts the address,)3.395 F F4(EX_TEMPF)3.395 E(AIL)-.666 E F1 .895
 R -.15(ve)-.25 G .163(ry recipient address.).15 F .163(It returns an e)5.163 F
 .163(xit status indicating the status of)-.15 F .895(the message.)117 578.6 R
 .895(The status)5.895 F/F4 9/Times-Roman@0 SF(EX_OK)3.395 E F1 .895
 (accepts the address,)3.395 F F4(EX_TEMPF)3.395 E(AIL)-.666 E F1 .895
-(queues the message for a)3.395 F .264(later try)117 590.6 R 2.764(,a)-.65 G
-.264(nd other v)157.698 590.6 R .264(alues \(commonly)-.25 F F4(EX_UN)2.764 E
+(queues the message for a)3.395 F .263(later try)117 590.6 R 2.763(,a)-.65 G
+.263(nd other v)157.696 590.6 R .264(alues \(commonly)-.25 F F4(EX_UN)2.764 E
 -1.215(AVA)-.315 G(ILABLE)1.215 E F1 2.764(\)r)C .264(eject the message.)
 -1.215(AVA)-.315 G(ILABLE)1.215 E F1 2.764(\)r)C .264(eject the message.)
-358.375 590.6 R .263(It is up to)5.264 F F2 -.15(ch)2.763 G(ec).15 E(k-)-.2 E
-(compat)117 602.6 Q F1 .429(to print an error message \(using)2.929 F F2(usr)
-2.929 E(err)-.37 E F1 2.929(\)i)C 2.929(ft)315.032 602.6 S .43
-(he message is rejected.)324.071 602.6 R -.15(Fo)5.43 G 2.93(re).15 G(xample,)
-443.39 602.6 Q F2 -.15(ch)2.93 G(ec).15 E(k-)-.2 E(compat)117 614.6 Q F1
-(could read:)2.5 E .32 LW 76 669.2 72 669.2 DL 80 669.2 76 669.2 DL 84 669.2 80
-669.2 DL 88 669.2 84 669.2 DL 92 669.2 88 669.2 DL 96 669.2 92 669.2 DL 100
-669.2 96 669.2 DL 104 669.2 100 669.2 DL 108 669.2 104 669.2 DL 112 669.2 108
-669.2 DL 116 669.2 112 669.2 DL 120 669.2 116 669.2 DL 124 669.2 120 669.2 DL
-128 669.2 124 669.2 DL 132 669.2 128 669.2 DL 136 669.2 132 669.2 DL 140 669.2
-136 669.2 DL 144 669.2 140 669.2 DL 148 669.2 144 669.2 DL 152 669.2 148 669.2
-DL 156 669.2 152 669.2 DL 160 669.2 156 669.2 DL 164 669.2 160 669.2 DL 168
-669.2 164 669.2 DL 172 669.2 168 669.2 DL 176 669.2 172 669.2 DL 180 669.2 176
-669.2 DL 184 669.2 180 669.2 DL 188 669.2 184 669.2 DL 192 669.2 188 669.2 DL
-196 669.2 192 669.2 DL 200 669.2 196 669.2 DL 204 669.2 200 669.2 DL 208 669.2
-204 669.2 DL 212 669.2 208 669.2 DL 216 669.2 212 669.2 DL/F5 5/Times-Roman@0
-SF(12)93.6 679.6 Q/F6 8/Times-Roman@0 SF(Actually)3.2 I 2.632(,t)-.52 G .632
-(his is no longer true in SMTP; this information is contained in the en)132.488
-682.8 R -.12(ve)-.32 G 2.631(lope. The).12 F .631(older ARP)2.631 F .631
+358.372 590.6 R .264(It is up to)5.264 F F2 -.15(ch)2.764 G(ec).15 E(k-)-.2 E
+(compat)117 602.6 Q F1 .43(to print an error message \(using)2.93 F F2(usr)
+2.929 E(err)-.37 E F1 2.929(\)i)C 2.929(ft)315.037 602.6 S .429
+(he message is rejected.)324.076 602.6 R -.15(Fo)5.429 G 2.929(re).15 G
+(xample,)443.391 602.6 Q F2 -.15(ch)2.929 G(ec).15 E(k-)-.2 E(compat)117 614.6
+Q F1(could read:)2.5 E .32 LW 76 669.2 72 669.2 DL 80 669.2 76 669.2 DL 84
+669.2 80 669.2 DL 88 669.2 84 669.2 DL 92 669.2 88 669.2 DL 96 669.2 92 669.2
+DL 100 669.2 96 669.2 DL 104 669.2 100 669.2 DL 108 669.2 104 669.2 DL 112
+669.2 108 669.2 DL 116 669.2 112 669.2 DL 120 669.2 116 669.2 DL 124 669.2 120
+669.2 DL 128 669.2 124 669.2 DL 132 669.2 128 669.2 DL 136 669.2 132 669.2 DL
+140 669.2 136 669.2 DL 144 669.2 140 669.2 DL 148 669.2 144 669.2 DL 152 669.2
+148 669.2 DL 156 669.2 152 669.2 DL 160 669.2 156 669.2 DL 164 669.2 160 669.2
+DL 168 669.2 164 669.2 DL 172 669.2 168 669.2 DL 176 669.2 172 669.2 DL 180
+669.2 176 669.2 DL 184 669.2 180 669.2 DL 188 669.2 184 669.2 DL 192 669.2 188
+669.2 DL 196 669.2 192 669.2 DL 200 669.2 196 669.2 DL 204 669.2 200 669.2 DL
+208 669.2 204 669.2 DL 212 669.2 208 669.2 DL 216 669.2 212 669.2 DL/F5 5
+/Times-Roman@0 SF(18)93.6 679.6 Q/F6 8/Times-Roman@0 SF(Actually)3.2 I 2.631
+(,t)-.52 G .631
+(his is no longer true in SMTP; this information is contained in the en)132.487
+682.8 R -.12(ve)-.32 G 2.632(lope. The).12 F .632(older ARP)2.632 F .632
 (ANET protocols did)-.736 F(not completely distinguish en)72 692.4 Q -.12(ve)
 -.32 G(lope from header).12 E(.)-.44 E EP
 (ANET protocols did)-.736 F(not completely distinguish en)72 692.4 Q -.12(ve)
 -.32 G(lope from header).12 E(.)-.44 E EP
-%%Page: 49 46
+%%Page: 53 48
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-49)452.9 60 Q/F1 9/Times-Roman@0 SF(int)157 94.8 Q
+(SMM:08-53)452.9 60 Q/F1 9/Times-Roman@0 SF(int)157 94.8 Q
 (checkcompat\(to, e\))157 105.6 Q(re)175 116.4 Q(gister ADDRESS *to;)-.135 E
 (re)175 127.2 Q(gister ENVELOPE *e;)-.135 E({)157 138 Q(re)175 148.8 Q
 (gister ST)-.135 E(AB *s;)-.837 E 2.25(s=s)175 170.4 S(tab\("pri)191.578 170.4
 (checkcompat\(to, e\))157 105.6 Q(re)175 116.4 Q(gister ADDRESS *to;)-.135 E
 (re)175 127.2 Q(gister ENVELOPE *e;)-.135 E({)157 138 Q(re)175 148.8 Q
 (gister ST)-.135 E(AB *s;)-.837 E 2.25(s=s)175 170.4 S(tab\("pri)191.578 170.4
@@ -4080,7 +4318,7 @@ Q -.225(va)-.225 G(te", ST_MAILER, ST_FIND\);).225 E
 (ould reject messages greater than 50000 bytes unless the)-.1 F 2.705(yw)-.15 G
 .205(ere local.)387.09 337.8 R(The)5.205 E/F3 10/Times-Italic@0 SF(NoReturn)
 2.705 E F2(\215ag)2.705 E 1.196(can be sent to suppress the return of the actu\
 (ould reject messages greater than 50000 bytes unless the)-.1 F 2.705(yw)-.15 G
 .205(ere local.)387.09 337.8 R(The)5.205 E/F3 10/Times-Italic@0 SF(NoReturn)
 2.705 E F2(\215ag)2.705 E 1.196(can be sent to suppress the return of the actu\
-al body of the message in the error return.)117 349.8 R(The)6.197 E(actual use\
+al body of the message in the error return.)117 349.8 R(The)6.196 E(actual use\
  of this routine is highly dependent on the implementation, and use should be \
 limited.)117 361.8 Q F0 2.5(6.3.3. Load)102 385.8 R -.6 -1(Av e)2.5 H
 (rage Computation)1 E F2 .18(The routine)142 402 R F3 -.1(ge)2.68 G(tla).1 E F2
  of this routine is highly dependent on the implementation, and use should be \
 limited.)117 361.8 Q F0 2.5(6.3.3. Load)102 385.8 R -.6 -1(Av e)2.5 H
 (rage Computation)1 E F2 .18(The routine)142 402 R F3 -.1(ge)2.68 G(tla).1 E F2
@@ -4089,75 +4327,75 @@ limited.)117 361.8 Q F0 2.5(6.3.3. Load)102 385.8 R -.6 -1(Av e)2.5 H
 (here are four v)157.68 414 Q
 (ersions included on compilation \215ags as described abo)-.15 E -.15(ve)-.15 G
 (.).15 E F0 2.5(6.3.4. New)102 438 R(Database Map Classes)2.5 E F2(Ne)142 454.2
 (here are four v)157.68 414 Q
 (ersions included on compilation \215ags as described abo)-.15 E -.15(ve)-.15 G
 (.).15 E F0 2.5(6.3.4. New)102 438 R(Database Map Classes)2.5 E F2(Ne)142 454.2
-Q 2.875(wk)-.25 G .675 -.15(ey m)168.405 454.2 T .375(aps can be added by crea\
+Q 2.876(wk)-.25 G .676 -.15(ey m)168.406 454.2 T .375(aps can be added by crea\
 ting a class initialization function and a lookup func-).15 F 2.5(tion. These)
 117 466.2 R(are then added to the routine)2.5 E F3(setupmaps.)2.5 E F2
 (The initialization function is called as)142 482.4 Q F3(xxx)157 498.6 Q F2
 (_map_init\(MAP *map, char *mapname, char *ar)A(gs\))-.18 E(The)117 514.8 Q F3
 ting a class initialization function and a lookup func-).15 F 2.5(tion. These)
 117 466.2 R(are then added to the routine)2.5 E F3(setupmaps.)2.5 E F2
 (The initialization function is called as)142 482.4 Q F3(xxx)157 498.6 Q F2
 (_map_init\(MAP *map, char *mapname, char *ar)A(gs\))-.18 E(The)117 514.8 Q F3
-(map)2.555 E F2 .055(is an internal data structure.)2.555 F(The)5.055 E F3
-(mapname)2.555 E F2 .054(is the name of the map \(used for error mes-)2.554 F
-2.819(sages\). The)117 526.8 R F3(ar)2.819 E(gs)-.37 E F2 .32(is a pointer to \
-the rest of the con\214guration \214le line; \215ags and \214lenames can be)
-2.819 F -.15(ex)117 538.8 S .675(tracted from this line.).15 F .675
-(The initialization function must return)5.675 F F1(TR)3.175 E(UE)-.36 E F2
-.674(if it successfully opened)3.174 F(the map,)117 550.8 Q F1 -.666(FA)2.5 G
+(map)2.554 E F2 .054(is an internal data structure.)2.554 F(The)5.054 E F3
+(mapname)2.554 E F2 .055(is the name of the map \(used for error mes-)2.554 F
+2.82(sages\). The)117 526.8 R F3(ar)2.82 E(gs)-.37 E F2 .319(is a pointer to t\
+he rest of the con\214guration \214le line; \215ags and \214lenames can be)2.82
+F -.15(ex)117 538.8 S .674(tracted from this line.).15 F .675
+(The initialization function must return)5.674 F F1(TR)3.175 E(UE)-.36 E F2
+.675(if it successfully opened)3.175 F(the map,)117 550.8 Q F1 -.666(FA)2.5 G
 (LSE).666 E F2(otherwise.)2.5 E(The lookup function is called as)142 567 Q F3
 (xxx)157 583.2 Q F2(_map_lookup\(MAP *map, char b)A(uf[], int b)-.2 E
 (ufsize, char **a)-.2 E 1.3 -.65(v, i)-.2 H(nt *statp\)).65 E(The)117 599.4 Q
 (LSE).666 E F2(otherwise.)2.5 E(The lookup function is called as)142 567 Q F3
 (xxx)157 583.2 Q F2(_map_lookup\(MAP *map, char b)A(uf[], int b)-.2 E
 (ufsize, char **a)-.2 E 1.3 -.65(v, i)-.2 H(nt *statp\)).65 E(The)117 599.4 Q
-F3(map)3.475 E F2 .975(de\214nes the map internally)3.475 F 5.975(.T)-.65 G
-.975(he parameters)277.18 599.4 R F3 -.2(bu)3.475 G(f).2 E F2(and)3.475 E F3
--.2(bu)3.475 G(fsize).2 E F2(ha)3.476 E 1.276 -.15(ve t)-.2 H .976(he input k)
-.15 F -.15(ey)-.1 G 5.976(.T)-.5 G(his)492.33 599.4 Q .043
+F3(map)3.476 E F2 .976(de\214nes the map internally)3.476 F 5.975(.T)-.65 G
+.975(he parameters)277.185 599.4 R F3 -.2(bu)3.475 G(f).2 E F2(and)3.475 E F3
+-.2(bu)3.475 G(fsize).2 E F2(ha)3.475 E 1.275 -.15(ve t)-.2 H .975(he input k)
+.15 F -.15(ey)-.1 G 5.975(.T)-.5 G(his)492.33 599.4 Q .042
 (may be \(and often is\) used destructi)117 611.4 R -.15(ve)-.25 G(ly).15 E
 (may be \(and often is\) used destructi)117 611.4 R -.15(ve)-.25 G(ly).15 E
-5.043(.T)-.65 G(he)289.831 611.4 Q F3(av)2.543 E F2 .043(is a list of ar)2.543
-F .042(guments passed in from the re)-.18 F(write)-.25 E 3.654(line. The)117
-623.4 R 1.154(lookup function should return a pointer to the ne)3.654 F 3.655
-(wv)-.25 G 3.655(alue. IF)378.335 623.4 R 1.155(the map lookup f)3.655 F(ails,)
--.1 E F3(*statp)117 635.4 Q F2 1.272(should be set to an e)3.772 F 1.272
-(xit status code; in particular)-.15 F 3.772(,i)-.4 G 3.771(ts)357.652 635.4 S
-1.271(hould be set to)368.093 635.4 R F1(EX_TEMPF)3.771 E(AIL)-.666 E F2(if)
-3.771 E(reco)117 647.4 Q -.15(ve)-.15 G(ry is to be attempted by the higher le)
+5.043(.T)-.65 G(he)289.827 611.4 Q F3(av)2.543 E F2 .043(is a list of ar)2.543
+F .043(guments passed in from the re)-.18 F(write)-.25 E 3.655(line. The)117
+623.4 R 1.155(lookup function should return a pointer to the ne)3.655 F 3.654
+(wv)-.25 G 3.654(alue. IF)378.34 623.4 R 1.154(the map lookup f)3.654 F(ails,)
+-.1 E F3(*statp)117 635.4 Q F2 1.271(should be set to an e)3.771 F 1.272
+(xit status code; in particular)-.15 F 3.772(,i)-.4 G 3.772(ts)357.646 635.4 S
+1.272(hould be set to)368.088 635.4 R F1(EX_TEMPF)3.772 E(AIL)-.666 E F2(if)
+3.772 E(reco)117 647.4 Q -.15(ve)-.15 G(ry is to be attempted by the higher le)
 .15 E -.15(ve)-.25 G 2.5(lc).15 G(ode.)308.76 647.4 Q F0 2.5(6.3.5. Queueing)
 .15 E -.15(ve)-.25 G 2.5(lc).15 G(ode.)308.76 647.4 Q F0 2.5(6.3.5. Queueing)
-102 671.4 R(Function)2.5 E F2 .782(The routine)142 687.6 R F3(shouldqueue)3.282
+102 671.4 R(Function)2.5 E F2 .783(The routine)142 687.6 R F3(shouldqueue)3.283
 E F2 .783(is called to decide if a message should be queued or processed)3.283
 E F2 .783(is called to decide if a message should be queued or processed)3.283
-F(immediately)117 699.6 Q 6.619(.T)-.65 G 1.618
-(ypically this compares the message priority to the current load a)180.779
-699.6 R -.15(ve)-.2 G 4.118(rage. The).15 F(def)117 711.6 Q
+F(immediately)117 699.6 Q 6.618(.T)-.65 G 1.618
+(ypically this compares the message priority to the current load a)180.778
+699.6 R -.15(ve)-.2 G 4.119(rage. The).15 F(def)117 711.6 Q
 (ault de\214nition is:)-.1 E EP
 (ault de\214nition is:)-.1 E EP
-%%Page: 50 47
+%%Page: 54 49
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-50 Sendmail)72 60 R
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-54 Sendmail)72 60 R
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(bool)157 96 Q
 (shouldqueue\(pri, ctime\))157 108 Q(long pri;)175 120 Q(time_t ctime;)175 132
 Q({)157 144 Q(if \(CurrentLA < QueueLA\))175 156 Q(return \(F)193 168 Q
 (ALSE\);)-.74 E(if \(CurrentLA >= RefuseLA\))175 180 Q(return \(TR)193 192 Q
 (UE\);)-.4 E(return \(pri > \(QueueF)175 204 Q
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(bool)157 96 Q
 (shouldqueue\(pri, ctime\))157 108 Q(long pri;)175 120 Q(time_t ctime;)175 132
 Q({)157 144 Q(if \(CurrentLA < QueueLA\))175 156 Q(return \(F)193 168 Q
 (ALSE\);)-.74 E(if \(CurrentLA >= RefuseLA\))175 180 Q(return \(TR)193 192 Q
 (UE\);)-.4 E(return \(pri > \(QueueF)175 204 Q
-(actor / \(CurrentLA \255 QueueLA + 1\)\)\);)-.15 E(})157 216 Q 2.062
+(actor / \(CurrentLA \255 QueueLA + 1\)\)\);)-.15 E(})157 216 Q 2.063
 (If the current load a)117 232.2 R -.15(ve)-.2 G 2.062(rage \(global v).15 F
 (ariable)-.25 E/F2 10/Times-Italic@0 SF(Curr)4.562 E(entLA)-.37 E F1 4.562(,w)C
 (If the current load a)117 232.2 R -.15(ve)-.2 G 2.062(rage \(global v).15 F
 (ariable)-.25 E/F2 10/Times-Italic@0 SF(Curr)4.562 E(entLA)-.37 E F1 4.562(,w)C
-2.062(hich is set before this function is)361.636 232.2 R 1.058
+2.062(hich is set before this function is)361.638 232.2 R 1.057
 (called\) is less than the lo)117 244.2 R 3.558(wt)-.25 G 1.058
 (called\) is less than the lo)117 244.2 R 3.558(wt)-.25 G 1.058
-(hreshold load a)234.198 244.2 R -.15(ve)-.2 G 1.058(rage \(option).15 F F0(x)
-3.557 E F1 3.557(,v)C(ariable)375.526 244.2 Q F2(QueueLA)3.557 E F1(\),)A F2
-(shouldqueue)3.557 E F1(returns)117 256.2 Q/F3 9/Times-Roman@0 SF -.666(FA)
-2.586 G(LSE).666 E F1 .086(immediately \(that is, it should)2.586 F F2(not)
+(hreshold load a)234.194 244.2 R -.15(ve)-.2 G 1.058(rage \(option).15 F F0(x)
+3.558 E F1 3.558(,v)C(ariable)375.524 244.2 Q F2(QueueLA)3.558 E F1(\),)A F2
+(shouldqueue)3.558 E F1(returns)117 256.2 Q/F3 9/Times-Roman@0 SF -.666(FA)
+2.587 G(LSE).666 E F1 .086(immediately \(that is, it should)2.587 F F2(not)
 2.586 E F1 2.586(queue\). If)2.586 F .086(the current load a)2.586 F -.15(ve)
 2.586 E F1 2.586(queue\). If)2.586 F .086(the current load a)2.586 F -.15(ve)
--.2 G .087(rage e).15 F .087(xceeds the)-.15 F .588(high threshold load a)117
-268.2 R -.15(ve)-.2 G .588(rage \(option).15 F F0(X)3.087 E F1 3.087(,v)C
-(ariable)281.846 268.2 Q F2(RefuseLA)3.087 E F1(\),)A F2(shouldqueue)3.087 E F1
-(returns)3.087 E F3(TR)3.087 E(UE)-.36 E F1(immedi-)3.087 E(ately)117 280.2 Q
-7.125(.O)-.65 G 2.125
-(therwise, it computes the function based on the message priority)152.635 280.2
-R 4.626(,t)-.65 G 2.126(he queue f)438.208 280.2 R(actor)-.1 E(\(option)117
+-.2 G .086(rage e).15 F .086(xceeds the)-.15 F .587(high threshold load a)117
+268.2 R -.15(ve)-.2 G .587(rage \(option).15 F F0(X)3.087 E F1 3.087(,v)C
+(ariable)281.842 268.2 Q F2(RefuseLA)3.087 E F1(\),)A F2(shouldqueue)3.088 E F1
+(returns)3.088 E F3(TR)3.088 E(UE)-.36 E F1(immedi-)3.088 E(ately)117 280.2 Q
+7.126(.O)-.65 G 2.125
+(therwise, it computes the function based on the message priority)152.636 280.2
+R 4.625(,t)-.65 G 2.125(he queue f)438.21 280.2 R(actor)-.1 E(\(option)117
 292.2 Q F0(q)2.5 E F1 2.5(,g)C(lobal v)163.95 292.2 Q(ariable)-.25 E F2(QueueF)
 2.5 E(actor)-.75 E F1(\), and the current and threshold load a)A -.15(ve)-.2 G
 292.2 Q F0(q)2.5 E F1 2.5(,g)C(lobal v)163.95 292.2 Q(ariable)-.25 E F2(QueueF)
 2.5 E(actor)-.75 E F1(\), and the current and threshold load a)A -.15(ve)-.2 G
-(rages.).15 E 1.067(An implementation wishing to tak)142 308.4 R 3.567(et)-.1 G
-1.066(he actual age of the message into account can also)293.625 308.4 R 1.41
+(rages.).15 E 1.066(An implementation wishing to tak)142 308.4 R 3.566(et)-.1 G
+1.067(he actual age of the message into account can also)293.62 308.4 R 1.41
 (use the)117 320.4 R F2(ctime)3.91 E F1(parameter)3.91 E 3.91(,w)-.4 G 1.41
 (hich is the time that the message w)229.15 320.4 R 1.41
 (use the)117 320.4 R F2(ctime)3.91 E F1(parameter)3.91 E 3.91(,w)-.4 G 1.41
 (hich is the time that the message w)229.15 320.4 R 1.41
-(as \214rst submitted to)-.1 F F2(sendmail)3.91 E F1(.)A .929(Note that the)117
+(as \214rst submitted to)-.1 F F2(sendmail)3.91 E F1(.)A .928(Note that the)117
 332.4 R F2(pri)3.428 E F1 .928
 (parameter is already weighted by the number of times the message has been)
 3.428 F .395(tried \(although this tends to lo)117 344.4 R .395
 332.4 R F2(pri)3.428 E F1 .928
 (parameter is already weighted by the number of times the message has been)
 3.428 F .395(tried \(although this tends to lo)117 344.4 R .395
@@ -4165,9 +4403,9 @@ R 4.626(,t)-.65 G 2.126(he queue f)438.208 280.2 R(actor)-.1 E(\(option)117
 (xpectation is that)-.15 F(the)117 356.4 Q F2(ctime)2.674 E F1 -.1(wo)2.674 G
 .174(uld be used as an \231escape clause\232 to ensure that messages are e).1 F
 -.15(ve)-.25 G .174(ntually processed.).15 F F0 2.5(6.3.6. Refusing)102 380.4 R
 (xpectation is that)-.15 F(the)117 356.4 Q F2(ctime)2.674 E F1 -.1(wo)2.674 G
 .174(uld be used as an \231escape clause\232 to ensure that messages are e).1 F
 -.15(ve)-.25 G .174(ntually processed.).15 F F0 2.5(6.3.6. Refusing)102 380.4 R
-(Incoming SMTP Connections)2.5 E F1 1.148(The function)142 396.6 R F2 -.37(re)
+(Incoming SMTP Connections)2.5 E F1 1.149(The function)142 396.6 R F2 -.37(re)
 3.648 G(fuseconnections).37 E F1(returns)3.648 E F3(TR)3.648 E(UE)-.36 E F1
 3.648 G(fuseconnections).37 E F1(returns)3.648 E F3(TR)3.648 E(UE)-.36 E F1
-1.148(if incoming SMTP connections should be)3.648 F 3.564(refused. The)117
+1.148(if incoming SMTP connections should be)3.648 F 3.563(refused. The)117
 408.6 R 1.063(current implementation is based e)3.563 F(xclusi)-.15 E -.15(ve)
 -.25 G 1.063(ly on the current load a).15 F -.15(ve)-.2 G 1.063(rage and the)
 .15 F(refuse load a)117 420.6 Q -.15(ve)-.2 G(rage option \(option).15 E F0(X)
 408.6 R 1.063(current implementation is based e)3.563 F(xclusi)-.15 E -.15(ve)
 -.25 G 1.063(ly on the current load a).15 F -.15(ve)-.2 G 1.063(rage and the)
 .15 F(refuse load a)117 420.6 Q -.15(ve)-.2 G(rage option \(option).15 E F0(X)
@@ -4176,10 +4414,10 @@ R 4.626(,t)-.65 G 2.126(he queue f)438.208 280.2 R(actor)-.1 E(\(option)117
 (return \(CurrentLA >= RefuseLA\);)175 472.8 Q(})157 484.8 Q 2.5(Am)117 501 S
 (ore cle)134.5 501 Q -.15(ve)-.25 G 2.5(ri).15 G
 (mplementation could look at more system resources.)179.08 501 Q F0 2.5
 (return \(CurrentLA >= RefuseLA\);)175 472.8 Q(})157 484.8 Q 2.5(Am)117 501 S
 (ore cle)134.5 501 Q -.15(ve)-.25 G 2.5(ri).15 G
 (mplementation could look at more system resources.)179.08 501 Q F0 2.5
-(6.3.7. Load)102 525 R -.6 -1(Av e)2.5 H(rage Computation)1 E F1 .243
+(6.3.7. Load)102 525 R -.6 -1(Av e)2.5 H(rage Computation)1 E F1 .244
 (The routine)142 541.2 R F2 -.1(ge)2.743 G(tla).1 E F1 .243
 (returns the current load a)2.743 F -.15(ve)-.2 G .243
 (The routine)142 541.2 R F2 -.1(ge)2.743 G(tla).1 E F1 .243
 (returns the current load a)2.743 F -.15(ve)-.2 G .243
-(rage \(as a rounded inte).15 F 2.743(ger\). The)-.15 F(distrib)2.744 E(ution)
+(rage \(as a rounded inte).15 F 2.743(ger\). The)-.15 F(distrib)2.743 E(ution)
 -.2 E(includes se)117 553.2 Q -.15(ve)-.25 G(ral possible implementations.).15
 E F0 2.5(6.4. Con\214guration)87 577.2 R(in sr)2.5 E(c/daemon.c)-.18 E F1 .4
 (The \214le)127 593.4 R F2(sr)2.9 E(c/daemon.c)-.37 E F1 .4
 -.2 E(includes se)117 553.2 Q -.15(ve)-.25 G(ral possible implementations.).15
 E F0 2.5(6.4. Con\214guration)87 577.2 R(in sr)2.5 E(c/daemon.c)-.18 E F1 .4
 (The \214le)127 593.4 R F2(sr)2.9 E(c/daemon.c)-.37 E F1 .4
@@ -4188,38 +4426,38 @@ E F0 2.5(6.4. Con\214guration)87 577.2 R(in sr)2.5 E(c/daemon.c)-.18 E F1 .4
 (rsion supplied assumes you ha).15 E .3 -.15(ve B)-.2 H(SD style sock).15 E
 (ets.)-.1 E 2.16(In pre)127 621.6 R 2.16
 (vious releases, we recommended that you modify the routine)-.25 F F2
 (rsion supplied assumes you ha).15 E .3 -.15(ve B)-.2 H(SD style sock).15 E
 (ets.)-.1 E 2.16(In pre)127 621.6 R 2.16
 (vious releases, we recommended that you modify the routine)-.25 F F2
-(maphostname)4.66 E F1 2.16(if you)4.66 F -.1(wa)102 633.6 S 1.919
+(maphostname)4.66 E F1 2.16(if you)4.66 F -.1(wa)102 633.6 S 1.918
 (nted to generalize).1 F F0($[)4.418 E F1(...)4.418 E F0($])4.418 E F1 4.418
 (nted to generalize).1 F F0($[)4.418 E F1(...)4.418 E F0($])4.418 E F1 4.418
-(lookups. W)4.418 F 4.418(en)-.8 G 2.418 -.25(ow r)293.906 633.6 T 1.918
-(ecommend that you create a ne).25 F 4.418(wk)-.25 G -.15(ey)463.632 633.6 S
-1.918(ed map).15 F(instead.)102 645.6 Q F0 2.5(7. CHANGES)72 669.6 R
-(IN VERSION 8)2.5 E F1 2.661(The follo)112 685.8 R 2.662
-(wing summarizes changes since the last commonly a)-.25 F -.25(va)-.2 G 2.662
-(ilable v).25 F 2.662(ersion of)-.15 F F0(sendmail)5.162 E F1(\(5.67\):)87
-697.8 Q EP
-%%Page: 51 48
+(lookups. W)4.418 F 4.418(en)-.8 G 2.418 -.25(ow r)293.904 633.6 T 1.918
+(ecommend that you create a ne).25 F 4.419(wk)-.25 G -.15(ey)463.631 633.6 S
+1.919(ed map).15 F(instead.)102 645.6 Q F0 2.5(7. CHANGES)72 669.6 R
+(IN VERSION 8)2.5 E F1 .173(The follo)112 685.8 R .173
+(wing summarizes changes since the last commonly a)-.25 F -.25(va)-.2 G .172
+(ilable v).25 F .172(ersion of)-.15 F F2(sendmail)2.672 E F1(\(5.67\):)2.672 E
+EP
+%%Page: 55 50
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-51)452.9 60 Q 2.5(7.1. Connection)87 96 R(Caching)2.5 E/F1 10
-/Times-Roman@0 SF .398(Instead of closing SMTP connections immediately)127
-112.2 R 2.897(,t)-.65 G .397(hose connections are cached for possible)339.005
-112.2 R .597(future use.)102 124.2 R .597(The adv)5.597 F .597
-(ent of MX records made this ef)-.15 F(fecti)-.25 E .897 -.15(ve f)-.25 H .598
+(SMM:08-55)452.9 60 Q 2.5(7.1. Connection)87 96 R(Caching)2.5 E/F1 10
+/Times-Roman@0 SF .397(Instead of closing SMTP connections immediately)127
+112.2 R 2.897(,t)-.65 G .398(hose connections are cached for possible)339.002
+112.2 R .598(future use.)102 124.2 R .598(The adv)5.598 F .597
+(ent of MX records made this ef)-.15 F(fecti)-.25 E .897 -.15(ve f)-.25 H .597
 (or mailing lists; in addition, substantial).15 F(performance impro)102 136.2 Q
 -.15(ve)-.15 G(ments can be e).15 E(xpected for queue processing.)-.15 E F0 2.5
 (or mailing lists; in addition, substantial).15 F(performance impro)102 136.2 Q
 -.15(ve)-.15 G(ments can be e).15 E(xpected for queue processing.)-.15 E F0 2.5
-(7.2. MX)87 160.2 R(Piggybacking)2.5 E F1 1.258(If tw)127 176.4 R 3.757(oh)-.1
-G 1.257(osts with dif)161.075 176.4 R 1.257
+(7.2. MX)87 160.2 R(Piggybacking)2.5 E F1 1.257(If tw)127 176.4 R 3.757(oh)-.1
+G 1.257(osts with dif)161.074 176.4 R 1.257
 (ferent names in a single message happen to ha)-.25 F 1.557 -.15(ve t)-.2 H
 1.257(he same set of MX).15 F .94(hosts, the)102 188.4 R 3.44(yc)-.15 G .94
 (an be sent in the same transaction.)153.45 188.4 R -1.11(Ve)5.94 G .94
 (rsion 8 notices this and tries to batch the mes-)1.11 F(sages.)102 200.4 Q F0
 (ferent names in a single message happen to ha)-.25 F 1.557 -.15(ve t)-.2 H
 1.257(he same set of MX).15 F .94(hosts, the)102 188.4 R 3.44(yc)-.15 G .94
 (an be sent in the same transaction.)153.45 188.4 R -1.11(Ve)5.94 G .94
 (rsion 8 notices this and tries to batch the mes-)1.11 F(sages.)102 200.4 Q F0
-2.5(7.3. RFC)87 224.4 R(1123 Compliance)2.5 E F1 3.463(An)127 240.6 S .963
-(umber of changes ha)142.683 240.6 R 1.262 -.15(ve b)-.2 H .962
-(een made to mak).15 F(e)-.1 E/F2 10/Times-Italic@0 SF(sendmail)3.462 E F1 .962
-(\231conditionally compliant\232 \(that is,)3.462 F F2(sendmail)102 252.6 Q F1
-.049(satis\214es all of the \231MUST\232 clauses and most b)2.549 F .05
+2.5(7.3. RFC)87 224.4 R(1123 Compliance)2.5 E F1 3.462(An)127 240.6 S .962
+(umber of changes ha)142.682 240.6 R 1.262 -.15(ve b)-.2 H .962
+(een made to mak).15 F(e)-.1 E/F2 10/Times-Italic@0 SF(sendmail)3.462 E F1 .963
+(\231conditionally compliant\232 \(that is,)3.463 F F2(sendmail)102 252.6 Q F1
+.05(satis\214es all of the \231MUST\232 clauses and most b)2.55 F .049
 (ut not all of the \231SHOULD\232 clauses in RFC)-.2 F(1123\).)102 264.6 Q
 (The major areas of change are \(numbers are RFC 1123 section numbers\):)127
 280.8 Q 15(5.2.7 Response)102 297 R(to RCPT command is f)2.5 E(ast.)-.1 E 15
 (ut not all of the \231SHOULD\232 clauses in RFC)-.2 F(1123\).)102 264.6 Q
 (The major areas of change are \(numbers are RFC 1123 section numbers\):)127
 280.8 Q 15(5.2.7 Response)102 297 R(to RCPT command is f)2.5 E(ast.)-.1 E 15
@@ -4241,53 +4479,55 @@ E(5.2.6)102 426.6 Q F2(Sendmail)139.5 426.6 Q F1(does do header munging.)2.5 E
 102 475.2 Q F2(Sendmail)139.5 475.2 Q F1(doesn')2.5 E 2.5(ta)-.18 G -.1(lwa)
 215.42 475.2 S(ys pro).1 E(vide adequate concurrenc)-.15 E 2.5(yl)-.15 G
 (imits.)366.54 475.2 Q F0 2.5(7.4. Extended)87 499.2 R(SMTP Support)2.5 E F1
 102 475.2 Q F2(Sendmail)139.5 475.2 Q F1(doesn')2.5 E 2.5(ta)-.18 G -.1(lwa)
 215.42 475.2 S(ys pro).1 E(vide adequate concurrenc)-.15 E 2.5(yl)-.15 G
 (imits.)366.54 475.2 Q F0 2.5(7.4. Extended)87 499.2 R(SMTP Support)2.5 E F1
--1.11(Ve)127 515.4 S .155(rsion 8 includes both sending and recei)1.11 F .154
+-1.11(Ve)127 515.4 S .154(rsion 8 includes both sending and recei)1.11 F .155
 (ving support for Extended SMTP support as de\214ned)-.25 F(by RFC 1425 \(basi\
 c\) and RFC 1427 \(SIZE\); and limited support for RFC 1426 \(BOD)102 527.4 Q
 (Y\).)-.55 E F0 2.5(7.5. Eight-Bit)87 551.4 R(Clean)2.5 E F1(Pre)127 567.6 Q
 (ving support for Extended SMTP support as de\214ned)-.25 F(by RFC 1425 \(basi\
 c\) and RFC 1427 \(SIZE\); and limited support for RFC 1426 \(BOD)102 527.4 Q
 (Y\).)-.55 E F0 2.5(7.5. Eight-Bit)87 551.4 R(Clean)2.5 E F1(Pre)127 567.6 Q
-1.104(vious v)-.25 F 1.104(ersions of)-.15 F F0(sendmail)3.604 E F1 1.104
-(used the 0200 bit for quoting.)3.604 F 1.105(This v)6.104 F 1.105(ersion a)
--.15 F -.2(vo)-.2 G 1.105(ids that use.).2 F(Ho)102 579.6 Q(we)-.25 E -.15(ve)
+1.264(vious v)-.25 F 1.264(ersions of)-.15 F F2(sendmail)3.764 E F1 1.264
+(used the 0200 bit for quoting.)3.764 F 1.263(This v)6.263 F 1.263(ersion a)
+-.15 F -.2(vo)-.2 G 1.263(ids that use.).2 F(Ho)102 579.6 Q(we)-.25 E -.15(ve)
 -.25 G .8 -.4(r, f).15 H
 (or compatibility with RFC 822, you can set option `7' to get se).4 E -.15(ve)
 -.25 G 2.5(nb).15 G(it stripping.)418.86 579.6 Q(Indi)127 595.8 Q
 (vidual mailers can still produce se)-.25 E -.15(ve)-.25 G 2.5(nb).15 G
 (it out put using the `7' mailer \215ag.)300.77 595.8 Q F0 2.5(7.6. User)87
 -.25 G .8 -.4(r, f).15 H
 (or compatibility with RFC 822, you can set option `7' to get se).4 E -.15(ve)
 -.25 G 2.5(nb).15 G(it stripping.)418.86 579.6 Q(Indi)127 595.8 Q
 (vidual mailers can still produce se)-.25 E -.15(ve)-.25 G 2.5(nb).15 G
 (it out put using the `7' mailer \215ag.)300.77 595.8 Q F0 2.5(7.6. User)87
-619.8 R(Database)2.5 E F1 1.073(The user database is an as-yet e)127 636 R
-1.072(xperimental attempt to pro)-.15 F 1.072(vide uni\214ed lar)-.15 F 1.072
+619.8 R(Database)2.5 E F1 1.072(The user database is an as-yet e)127 636 R
+1.072(xperimental attempt to pro)-.15 F 1.073(vide uni\214ed lar)-.15 F 1.073
 (ge-site name sup-)-.18 F 2.5(port. W)102 648 R 2.5(ea)-.8 G
 (re installing it at Berk)145.63 648 Q(ele)-.1 E(y; future v)-.15 E
 (ersions may sho)-.15 E 2.5(ws)-.25 G(igni\214cant modi\214cations.)363.57 648
 Q F0 2.5(7.7. Impr)87 672 R -.1(ove)-.18 G 2.5(dB).1 G(IND Support)158.01 672 Q
 F1 .489(The BIND support, particularly for MX records, had a number of anno)127
 (ge-site name sup-)-.18 F 2.5(port. W)102 648 R 2.5(ea)-.8 G
 (re installing it at Berk)145.63 648 Q(ele)-.1 E(y; future v)-.15 E
 (ersions may sho)-.15 E 2.5(ws)-.25 G(igni\214cant modi\214cations.)363.57 648
 Q F0 2.5(7.7. Impr)87 672 R -.1(ove)-.18 G 2.5(dB).1 G(IND Support)158.01 672 Q
 F1 .489(The BIND support, particularly for MX records, had a number of anno)127
-688.2 R .49(ying \231features\232 which)-.1 F(ha)102 700.2 Q 1.212 -.15(ve b)
+688.2 R .489(ying \231features\232 which)-.1 F(ha)102 700.2 Q 1.212 -.15(ve b)
 -.2 H .912(een remo).15 F -.15(ve)-.15 G 3.412(di).15 G 3.412(nt)187.116 700.2
 S .912(his release.)198.308 700.2 R .912(In particular)5.912 F 3.412(,t)-.4 G
 .912(hese more tightly bind \(pun intended\) the name)307.916 700.2 R(serv)102
 -.2 H .912(een remo).15 F -.15(ve)-.15 G 3.412(di).15 G 3.412(nt)187.116 700.2
 S .912(his release.)198.308 700.2 R .912(In particular)5.912 F 3.412(,t)-.4 G
 .912(hese more tightly bind \(pun intended\) the name)307.916 700.2 R(serv)102
-712.2 Q(er to sendmail, so that the name serv)-.15 E
+712.2 Q(er to)-.15 E F2(sendmail)2.5 E F1 2.5(,s)C 2.5(ot)184.06 712.2 S
+(hat the name serv)194.34 712.2 Q
 (er resolution rules are incorporated directly into)-.15 E F0(sendmail)2.5 E F1
 (.)A EP
 (er resolution rules are incorporated directly into)-.15 E F0(sendmail)2.5 E F1
 (.)A EP
-%%Page: 52 49
+%%Page: 56 51
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-52 Sendmail)72 60 R
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-56 Sendmail)72 60 R
 (Installation and Operation Guide)2.5 E 2.5(7.8. K)87 96 R(ey)-.25 E(ed Files)
 (Installation and Operation Guide)2.5 E 2.5(7.8. K)87 96 R(ey)-.25 E(ed Files)
--.1 E/F1 10/Times-Roman@0 SF .206(Generalized k)127 112.2 R -.15(ey)-.1 G .206
-(ed \214les is an idea tak).15 F .206(en directly from)-.1 F/F2 9/Times-Roman@0
-SF(ID)2.706 E(A)-.36 E F0(sendmail)2.706 E F1 .207(\(albeit with a completely)
-2.706 F(dif)102 124.2 Q(ferent implementation\).)-.25 E(The)5 E 2.5(yc)-.15 G
-(an be useful on lar)239.63 124.2 Q(ge sites.)-.18 E -1.11(Ve)127 140.4 S
-(rsion 8 also understands YP)1.11 E(.)-1.11 E F0 2.5(7.9. Multi-W)87 164.4 R
-(ord Classes)-.75 E F1(Classes can no)127 180.6 Q 2.5(wb)-.25 G 2.5(em)200.35
-180.6 S(ultiple w)215.07 180.6 Q 2.5(ords. F)-.1 F(or e)-.15 E(xample,)-.15 E
-(CShofmann.CS.Berk)142 196.8 Q(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(allo)102 213
-Q 2.664(ws you to match the entire string \231hofmann.CS.Berk)-.25 F(ele)-.1 E
--.65(y.)-.15 G 2.663(EDU\232 using the single construct).65 F(\231$=S\232.)102
-225 Q F0 2.5(7.10. Deferr)87 249 R(ed Macr)-.18 E 2.5(oE)-.18 G(xpansion)189.94
-249 Q F1(The)127 265.2 Q F0($&)2.5 E/F3 10/Times-Italic@0 SF(x)A F1
-(construct has been adopted from)2.5 E F2(ID)2.5 E(A)-.36 E F1(.)A F0 2.5
-(7.11. IDENT)87 289.2 R(Pr)2.5 E(otocol Support)-.18 E F1
+-.1 E/F1 10/Times-Roman@0 SF .366(Generalized k)127 112.2 R -.15(ey)-.1 G .366
+(ed \214les is an idea tak).15 F .366(en directly from)-.1 F/F2 9/Times-Roman@0
+SF(ID)2.865 E(A)-.36 E/F3 10/Times-Italic@0 SF(sendmail)2.865 E F1 .365
+(\(albeit with a completely)2.865 F(dif)102 124.2 Q(ferent implementation\).)
+-.25 E(The)5 E 2.5(yc)-.15 G(an be useful on lar)239.63 124.2 Q(ge sites.)-.18
+E -1.11(Ve)127 140.4 S(rsion 8 also understands YP)1.11 E(.)-1.11 E F0 2.5
+(7.9. Multi-W)87 164.4 R(ord Classes)-.75 E F1(Classes can no)127 180.6 Q 2.5
+(wb)-.25 G 2.5(em)200.35 180.6 S(ultiple w)215.07 180.6 Q 2.5(ords. F)-.1 F
+(or e)-.15 E(xample,)-.15 E(CShofmann.CS.Berk)142 196.8 Q(ele)-.1 E -.65(y.)
+-.15 G(EDU).65 E(allo)102 213 Q 2.663
+(ws you to match the entire string \231hofmann.CS.Berk)-.25 F(ele)-.1 E -.65
+(y.)-.15 G 2.664(EDU\232 using the single construct).65 F(\231$=S\232.)102 225
+Q F0 2.5(7.10. Deferr)87 249 R(ed Macr)-.18 E 2.5(oE)-.18 G(xpansion)189.94 249
+Q F1(The)127 265.2 Q F0($&)2.5 E F3(x)A F1(construct has been adopted from)2.5
+E F2(ID)2.5 E(A)-.36 E F1(.)A F0 2.5(7.11. IDENT)87 289.2 R(Pr)2.5 E
+(otocol Support)-.18 E F1
 (The IDENT protocol as de\214ned in RFC 1413 is supported.)127 305.4 Q F0 2.5
 (7.12. P)87 329.4 R(arsing Bug Fixes)-.1 E F1 4.03(An)127 345.6 S 1.53
 (umber of small b)143.25 345.6 R 1.53(ugs ha)-.2 F 1.53
 (The IDENT protocol as de\214ned in RFC 1413 is supported.)127 305.4 Q F0 2.5
 (7.12. P)87 329.4 R(arsing Bug Fixes)-.1 E F1 4.03(An)127 345.6 S 1.53
 (umber of small b)143.25 345.6 R 1.53(ugs ha)-.2 F 1.53
@@ -4297,19 +4537,19 @@ Q 2.664(ws you to match the entire string \231hofmann.CS.Berk)-.25 F(ele)-.1 E
 2.5 E -.1(ve)-.4 G(lope/Header Pr).1 E(ocessing)-.18 E F1 .854
 (Since the From: line is passed in separately from the en)127 397.8 R -.15(ve)
 -.4 G .854(lope sender).15 F 3.354(,t)-.4 G .854(hese ha)420.978 397.8 R 1.154
 2.5 E -.1(ve)-.4 G(lope/Header Pr).1 E(ocessing)-.18 E F1 .854
 (Since the From: line is passed in separately from the en)127 397.8 R -.15(ve)
 -.4 G .854(lope sender).15 F 3.354(,t)-.4 G .854(hese ha)420.978 397.8 R 1.154
--.15(ve b)-.2 H .854(oth been).15 F .427(made visible; the)102 409.8 R F0($g)
-2.927 E F1 .427(macro is set to the en)2.927 F -.15(ve)-.4 G .428
-(lope sender during processing of mailer ar).15 F .428(gument v)-.18 F(ec-)-.15
-E(tors and the header sender during processing of headers.)102 421.8 Q .085
+-.15(ve b)-.2 H .854(oth been).15 F .428(made visible; the)102 409.8 R F0($g)
+2.928 E F1 .428(macro is set to the en)2.928 F -.15(ve)-.4 G .427
+(lope sender during processing of mailer ar).15 F .427(gument v)-.18 F(ec-)-.15
+E(tors and the header sender during processing of headers.)102 421.8 Q .084
 (It is also possible to specify separate per)127 438 R .085(-mailer en)-.2 F
 (It is also possible to specify separate per)127 438 R .085(-mailer en)-.2 F
--.15(ve)-.4 G .084(lope and header processing.).15 F(The)5.084 E F0(S)2.584 E
-F1(ender)A(-)-.2 E -.55(RW)102 450 S .512(Set and).55 F F0(R)3.012 E F1
-(ecipientR)A .512(Wset ar)-.55 F .512
-(guments for mailers can be speci\214ed as)-.18 F F3(en)3.013 E(velope/header)
--.4 E F1 .513(to gi)3.013 F .813 -.15(ve d)-.25 H(if-).15 E(ferent re)102 462 Q
+-.15(ve)-.4 G .085(lope and header processing.).15 F(The)5.085 E F0(S)2.585 E
+F1(ender)A(-)-.2 E -.55(RW)102 450 S .513(Set and).55 F F0(R)3.013 E F1
+(ecipientR)A .513(Wset ar)-.55 F .512
+(guments for mailers can be speci\214ed as)-.18 F F3(en)3.012 E(velope/header)
+-.4 E F1 .512(to gi)3.012 F .812 -.15(ve d)-.25 H(if-).15 E(ferent re)102 462 Q
 (writings for en)-.25 E -.15(ve)-.4 G(lope v).15 E(ersus header addresses.)-.15
 E F0 2.5(7.14. Owner)87 486 R(-List Pr)-.37 E(opagates to En)-.18 E -.1(ve)-.4
 (writings for en)-.25 E -.15(ve)-.4 G(lope v).15 E(ersus header addresses.)-.15
 E F0 2.5(7.14. Owner)87 486 R(-List Pr)-.37 E(opagates to En)-.18 E -.1(ve)-.4
-G(lope).1 E F1 1.001(When an alias has an associated o)127 502.2 R 1
+G(lope).1 E F1 1(When an alias has an associated o)127 502.2 R 1.001
 (wner\255list name, that alias is used to change the en)-.25 F -.15(ve)-.4 G
 (lope).15 E(sender address.)102 514.2 Q(This will cause do)5 E
 (wnstream errors to be returned to that o)-.25 E(wner)-.25 E(.)-.55 E F0 2.5
 (wner\255list name, that alias is used to change the en)-.25 F -.15(ve)-.4 G
 (lope).15 E(sender address.)102 514.2 Q(This will cause do)5 E
 (wnstream errors to be returned to that o)-.25 E(wner)-.25 E(.)-.55 E F0 2.5
@@ -4321,33 +4561,33 @@ F0<ad70>2.5 E F1(\215ag has been added to pass in protocol information.)2.5 E
 (The)127 627 Q F0<ad58>2.6 E F1 .1(\215ag has been added to allo)2.6 F 2.6(wl)
 -.25 G .1(ogging of all protocol in and out of)279.89 627 R F3(sendmail)2.6 E
 F1 .1(for deb)2.6 F(ug-)-.2 E(ging.)102 639 Q F0 2.5(7.17. Enhanced)87 663 R
 (The)127 627 Q F0<ad58>2.6 E F1 .1(\215ag has been added to allo)2.6 F 2.6(wl)
 -.25 G .1(ogging of all protocol in and out of)279.89 627 R F3(sendmail)2.6 E
 F1 .1(for deb)2.6 F(ug-)-.2 E(ging.)102 639 Q F0 2.5(7.17. Enhanced)87 663 R
-(Command Line Flags)2.5 E F1(The)127 679.2 Q F0<ad71>4.007 E F1 1.507(\215ag c\
+(Command Line Flags)2.5 E F1(The)127 679.2 Q F0<ad71>4.006 E F1 1.507(\215ag c\
 an limit limit a queue run to speci\214c recipients, senders, or queue ids usi\
 an limit limit a queue run to speci\214c recipients, senders, or queue ids usi\
-ng)4.007 F F0(\255qR)102 691.2 Q F3(substring)A F0 2.5<2cad>C(qS)168.41 691.2 Q
+ng)4.006 F F0(\255qR)102 691.2 Q F3(substring)A F0 2.5<2cad>C(qS)168.41 691.2 Q
 F3(substring)A F0 2.5(,o)C 2.5<72ad>226.76 691.2 S(qI)239.4 691.2 Q F3
 (substring)A F0 -.18(re)2.5 G(specti).18 E -.1(ve)-.1 G(ly).1 E(.)-.7 E EP
 F3(substring)A F0 2.5(,o)C 2.5<72ad>226.76 691.2 S(qI)239.4 691.2 Q F3
 (substring)A F0 -.18(re)2.5 G(specti).18 E -.1(ve)-.1 G(ly).1 E(.)-.7 E EP
-%%Page: 53 50
+%%Page: 57 52
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-53)452.9 60 Q 2.5(7.18. New)87 96 R(and Old Con\214guration Line T)2.5
-E(ypes)-.74 E/F1 10/Times-Roman@0 SF(The)127 112.2 Q F0(T)2.766 E F1(\(T)2.766
+(SMM:08-57)452.9 60 Q 2.5(7.18. New)87 96 R(and Old Con\214guration Line T)2.5
+E(ypes)-.74 E/F1 10/Times-Roman@0 SF(The)127 112.2 Q F0(T)2.767 E F1(\(T)2.767
 E .267(rusted users\) con\214guration line has been deleted.)-.35 F .267
 E .267(rusted users\) con\214guration line has been deleted.)-.35 F .267
-(It will still be accepted b)5.267 F .267(ut will be)-.2 F(ignored.)102 124.2 Q
+(It will still be accepted b)5.267 F .266(ut will be)-.2 F(ignored.)102 124.2 Q
 (The)127 140.4 Q F0(K)2.5 E F1(line has been added to declare database maps.)
 2.5 E(The)127 156.6 Q F0(V)2.5 E F1
 (line has been added to declare the con\214guration v)2.5 E(ersion le)-.15 E
 (The)127 140.4 Q F0(K)2.5 E F1(line has been added to declare database maps.)
 2.5 E(The)127 156.6 Q F0(V)2.5 E F1
 (line has been added to declare the con\214guration v)2.5 E(ersion le)-.15 E
--.15(ve)-.25 G(l.).15 E(The)127 172.8 Q F0(M)2.797 E F1 .296(line has a \231D=\
+-.15(ve)-.25 G(l.).15 E(The)127 172.8 Q F0(M)2.796 E F1 .297(line has a \231D=\
 \232 \214eld that lets you change into a temporary directory while that mailer)
 \232 \214eld that lets you change into a temporary directory while that mailer)
-2.797 F(is running.)102 184.8 Q F0 2.5(7.19. New)87 208.8 R(Options)2.5 E F1
+2.796 F(is running.)102 184.8 Q F0 2.5(7.19. New)87 208.8 R(Options)2.5 E F1
 (Se)127 225 Q -.15(ve)-.25 G .9(ral ne).15 F 3.4(wo)-.25 G .9(ptions ha)184.8
 225 R 1.2 -.15(ve b)-.2 H .9(een added, man).15 F 3.4(yt)-.15 G 3.4(os)314.89
 225 S .9(upport ne)327.18 225 R 3.4(wf)-.25 G .9(eatures, others to allo)379.83
 (Se)127 225 Q -.15(ve)-.25 G .9(ral ne).15 F 3.4(wo)-.25 G .9(ptions ha)184.8
 225 R 1.2 -.15(ve b)-.2 H .9(een added, man).15 F 3.4(yt)-.15 G 3.4(os)314.89
 225 S .9(upport ne)327.18 225 R 3.4(wf)-.25 G .9(eatures, others to allo)379.83
-225 R 3.4(wt)-.25 G(uning)481.22 225 Q 1.187(that w)102 237 R 1.187(as pre)-.1
-F 1.187(viously a)-.25 F -.25(va)-.2 G 1.187(ilable only by recompiling.).25 F
-(The)6.186 E 3.686(ya)-.15 G 1.186(re described in detail in Section 5.1.5.)
-345.514 237 R(Brie\215y)102 249 Q(,)-.65 E 31(bI)102 265.2 S
+225 R 3.4(wt)-.25 G(uning)481.22 225 Q 1.186(that w)102 237 R 1.186(as pre)-.1
+F 1.186(viously a)-.25 F -.25(va)-.2 G 1.186(ilable only by recompiling.).25 F
+(The)6.186 E 3.686(ya)-.15 G 1.187(re described in detail in Section 5.1.5.)
+345.508 237 R(Brie\215y)102 249 Q(,)-.65 E 31(bI)102 265.2 S
 (nsist on a minimum number of disk blocks.)141.33 265.2 Q 29.33(CS)102 281.4 S
 (et checkpoint interv)143.56 281.4 Q(al.)-.25 E 29.89(ED)102 297.6 S(ef)145.22
 297.6 Q(ault error message.)-.1 E 28.78(GE)102 313.8 S(nable GECOS matching.)
 (nsist on a minimum number of disk blocks.)141.33 265.2 Q 29.33(CS)102 281.4 S
 (et checkpoint interv)143.56 281.4 Q(al.)-.25 E 29.89(ED)102 297.6 S(ef)145.22
 297.6 Q(ault error message.)-.1 E 28.78(GE)102 313.8 S(nable GECOS matching.)
@@ -4355,61 +4595,62 @@ F 1.187(viously a)-.25 F -.25(va)-.2 G 1.187(ilable only by recompiling.).25 F
 346.2 S(end errors in MIME-encapsulated format.)143.56 346.2 Q 32.11(JF)102
 362.4 S(orw)143.41 362.4 Q(ard \214le path.)-.1 E 31(kC)102 378.6 S
 (onnection cache size)144.67 378.6 Q 28.78(KC)102 394.8 S
 346.2 S(end errors in MIME-encapsulated format.)143.56 346.2 Q 32.11(JF)102
 362.4 S(orw)143.41 362.4 Q(ard \214le path.)-.1 E 31(kC)102 378.6 S
 (onnection cache size)144.67 378.6 Q 28.78(KC)102 394.8 S
-(onnection cache lifetime.)144.67 394.8 Q 33.22(lE)102 411 S .333
-(nable Errors-T)144.11 411 R .333(o: header)-.8 F 5.334(.T)-.55 G .334
-(hese headers violate RFC 1123; this option is included to pro-)252.89 411 R
-(vide back compatibility with old v)138 423 Q(ersions of sendmail.)-.15 E 28.78
-(OS)102 439.2 S
+(onnection cache lifetime.)144.67 394.8 Q 33.22(lE)102 411 S .334
+(nable Errors-T)144.11 411 R .334(o: header)-.8 F 5.334(.T)-.55 G .334
+(hese headers violate RFC 1123; this option is included to pro-)252.892 411 R
+(vide back compatibility with old v)138 423 Q(ersions of)-.15 E/F2 10
+/Times-Italic@0 SF(sendmail)2.5 E F1(.)A 28.78(OS)102 439.2 S
 (et incoming SMTP daemon options, such as an alternate SMTP port.)143.56 439.2
 Q 31(pP)102 455.4 S(ri)143.56 455.4 Q -.25(va)-.25 G .3 -.15(cy o).25 H
 (ptions.).15 E 29.33(RD)102 471.6 S(on')145.22 471.6 Q 2.5(tp)-.18 G
 (rune route-addrs.)168.65 471.6 Q 28.78(UU)102 487.8 S(ser database spec.)
 (et incoming SMTP daemon options, such as an alternate SMTP port.)143.56 439.2
 Q 31(pP)102 455.4 S(ri)143.56 455.4 Q -.25(va)-.25 G .3 -.15(cy o).25 H
 (ptions.).15 E 29.33(RD)102 471.6 S(on')145.22 471.6 Q 2.5(tp)-.18 G
 (rune route-addrs.)168.65 471.6 Q 28.78(UU)102 487.8 S(ser database spec.)
-145.22 487.8 Q 28.78(VF)102 504 S(allback \231MX\232 host.)143.41 504 Q 31(7D)
-102 520.2 S 2.5(on)145.22 520.2 S(ot run eight bit clean.)157.72 520.2 Q F0 2.5
-(7.20. Extended)87 544.2 R(Options)2.5 E F1(The)127 560.4 Q F0(r)3.764 E F1
+145.22 487.8 Q 28.78(VF)102 504 S(allback \231MX\232 host.)143.41 504 Q 28.78
+<7799>102 520.2 S(Best MX\232 handling technique.)142.44 520.2 Q 31(7D)102
+536.4 S 2.5(on)145.22 536.4 S(ot run eight bit clean.)157.72 536.4 Q F0 2.5
+(7.20. Extended)87 560.4 R(Options)2.5 E F1(The)127 576.6 Q F0(r)3.764 E F1
 1.264(\(read timeout\),)3.764 F F0(I)3.764 E F1 1.264(\(use BIND\), and)3.764 F
 F0(T)3.764 E F1 1.264(\(queue timeout\) options ha)3.764 F 1.564 -.15(ve b)-.2
 1.264(\(read timeout\),)3.764 F F0(I)3.764 E F1 1.264(\(use BIND\), and)3.764 F
 F0(T)3.764 E F1 1.264(\(queue timeout\) options ha)3.764 F 1.564 -.15(ve b)-.2
-H 1.264(een e).15 F 1.264(xtended to)-.15 F(pass in more information.)102 572.4
-Q F0 2.5(7.21. New)87 596.4 R(Mailer Flags)2.5 E F1(Se)127 612.6 Q -.15(ve)-.25
-G(ral ne).15 E 2.5(wm)-.25 G(ailer \215ags ha)185.78 612.6 Q .3 -.15(ve b)-.2 H
-(een added.).15 E 31.56(aT)102 628.8 S .636
-(ry to use ESMTP when creating a connection.)143.76 628.8 R .636
-(If this is not set,)5.636 F/F2 10/Times-Italic@0 SF(sendmail)3.136 E F1 .636
-(will still try if)3.136 F .221(the other end hints that it kno)138 640.8 R .22
+H 1.264(een e).15 F 1.264(xtended to)-.15 F(pass in more information.)102 588.6
+Q F0 2.5(7.21. New)87 612.6 R(Mailer Flags)2.5 E F1(Se)127 628.8 Q -.15(ve)-.25
+G(ral ne).15 E 2.5(wm)-.25 G(ailer \215ags ha)185.78 628.8 Q .3 -.15(ve b)-.2 H
+(een added.).15 E 31.56(aT)102 645 S .636
+(ry to use ESMTP when creating a connection.)143.76 645 R .636
+(If this is not set,)5.636 F F2(sendmail)3.136 E F1 .635(will still try if)
+3.136 F .22(the other end hints that it kno)138 657 R .221
 (ws about ESMTP in its greeting message; this \215ag says to try)-.25 F -2.15
 (ws about ESMTP in its greeting message; this \215ag says to try)-.25 F -2.15
--.25(ev e)138 652.8 T 2.595(ni).25 G 2.595(fi)161.855 652.8 S 2.595(td)170.56
-652.8 S(oesn')180.935 652.8 Q 2.595(th)-.18 G 2.595(int. If)212.79 652.8 R .095
+-.25(ev e)138 669 T 2.596(ni).25 G 2.596(fi)161.856 669 S 2.596(td)170.562 669
+S(oesn')180.938 669 Q 2.596(th)-.18 G 2.596(int. If)212.794 669 R .095
 (the EHLO \(e)2.595 F .095(xtended hello\) command f)-.15 F(ails,)-.1 E F2
 (the EHLO \(e)2.595 F .095(xtended hello\) command f)-.15 F(ails,)-.1 E F2
-(sendmail)2.596 E F1 -.1(fa)2.596 G .096(lls back to).1 F(old SMTP)138 664.8 Q
-(.)-1.11 E 31(bE)102 681 S
-(nsure that there is a blank line at the end of all messages.)144.11 681 Q
-31.56(cS)102 697.2 S .68(trip all comments from addresses; this should only be\
- used as a last resort when dealing)143.56 697.2 R(with crank)138 709.2 Q 2.5
-(ym)-.15 G(ailers.)195.62 709.2 Q EP
-%%Page: 54 51
+(sendmail)2.595 E F1 -.1(fa)2.595 G .095(lls back to).1 F(old SMTP)138 681 Q(.)
+-1.11 E 31(bE)102 697.2 S
+(nsure that there is a blank line at the end of all messages.)144.11 697.2 Q
+31.56(cS)102 713.4 S .68(trip all comments from addresses; this should only be\
+ used as a last resort when dealing)143.56 713.4 R(with crank)138 725.4 Q 2.5
+(ym)-.15 G(ailers.)195.62 725.4 Q EP
+%%Page: 58 53
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 193.36(SMM:08-54 Sendmail)72 60 R
+/F0 10/Times-Bold@0 SF 193.36(SMM:08-58 Sendmail)72 60 R
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 31(gN)102 96 S
 (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 31(gN)102 96 S
--2.15 -.25(ev e)145.22 96 T 2.64(ru).25 G .14(se the null sender as the en)
-169.67 96 R -.15(ve)-.4 G .141(lope sender).15 F 2.641(,e)-.4 G -.15(ve)341.495
-96 S 2.641(nw).15 G .141(hen running SMTP)365.646 96 R 5.141(.A)-1.11 G .141
-(lthough this)456.349 96 R 1.521(violates RFC 1123, it may be necessary when y\
-ou must deal with some obnoxious old)138 108 R(hosts.)138 120 Q 31(7S)102 136.2
-S(trip all output to 7 bits.)143.56 136.2 Q F0 2.5(7.22. New)87 160.2 R(Pr)2.5
-E(e-De\214ned Macr)-.18 E(os)-.18 E F1(The follo)127 176.4 Q
+-2.15 -.25(ev e)145.22 96 T 2.641(ru).25 G .141(se the null sender as the en)
+169.671 96 R -.15(ve)-.4 G .141(lope sender).15 F 2.641(,e)-.4 G -.15(ve)
+341.499 96 S 2.641(nw).15 G .14(hen running SMTP)365.65 96 R 5.14(.A)-1.11 G
+.14(lthough this)456.35 96 R 1.521(violates RFC 1123, it may be necessary when\
+ you must deal with some obnoxious old)138 108 R(hosts.)138 120 Q 31(7S)102
+136.2 S(trip all output to 7 bits.)143.56 136.2 Q F0 2.5(7.22. New)87 160.2 R
+(Pr)2.5 E(e-De\214ned Macr)-.18 E(os)-.18 E F1(The follo)127 176.4 Q
 (wing macros are pre-de\214ned:)-.25 E 23.5($k The)102 192.6 R
 (UUCP node name, nominally from)2.5 E/F2 10/Times-Italic@0 SF(uname)2.5 E F1
 (\(2\) call.)A 20.72($m The)102 208.8 R(domain part of our full hostname.)2.5 E
 23.5($_ The)102 225 R(RFC 1413-pro)2.5 E(vided sender address.)-.15 E F0 2.5
 (7.23. New)87 249 R(LHS T)2.5 E(ok)-.92 E(en)-.1 E F1 -1.11(Ve)127 265.2 S
 (wing macros are pre-de\214ned:)-.25 E 23.5($k The)102 192.6 R
 (UUCP node name, nominally from)2.5 E/F2 10/Times-Italic@0 SF(uname)2.5 E F1
 (\(2\) call.)A 20.72($m The)102 208.8 R(domain part of our full hostname.)2.5 E
 23.5($_ The)102 225 R(RFC 1413-pro)2.5 E(vided sender address.)-.15 E F0 2.5
 (7.23. New)87 249 R(LHS T)2.5 E(ok)-.92 E(en)-.1 E F1 -1.11(Ve)127 265.2 S
-1.375(rsion 8 allo)1.11 F(ws)-.25 E F0($@)3.875 E F1 1.376
-(on the Left Hand Side of an \231R\232 line to match zero tok)3.875 F 3.876
-(ens. This)-.1 F(is)3.876 E(intended to be used to match the null input.)102
+1.376(rsion 8 allo)1.11 F(ws)-.25 E F0($@)3.876 E F1 1.376
+(on the Left Hand Side of an \231R\232 line to match zero tok)3.876 F 3.875
+(ens. This)-.1 F(is)3.875 E(intended to be used to match the null input.)102
 277.2 Q F0 2.5(7.24. Bigger)87 301.2 R(Defaults)2.5 E F1 -1.11(Ve)127 317.4 S
 277.2 Q F0 2.5(7.24. Bigger)87 301.2 R(Defaults)2.5 E F1 -1.11(Ve)127 317.4 S
-1.284(rsion 8 allo)1.11 F 1.284(ws up to 100 rulesets instead of 30.)-.25 F
-1.283(It is recommended that rulesets 0\2559 be)6.284 F(reserv)102 329.4 Q
+1.283(rsion 8 allo)1.11 F 1.284(ws up to 100 rulesets instead of 30.)-.25 F
+1.284(It is recommended that rulesets 0\2559 be)6.284 F(reserv)102 329.4 Q
 (ed for)-.15 E F2(sendmail)2.5 E F1 1.1 -.55('s d)D
 (edicated use in future releases.).55 E
 (The total number of MX records that can be used has been raised to 20.)127
 (ed for)-.15 E F2(sendmail)2.5 E F1 1.1 -.55('s d)D
 (edicated use in future releases.).55 E
 (The total number of MX records that can be used has been raised to 20.)127
@@ -4422,41 +4663,44 @@ S .8(rsion 8 has changed the def)1.11 F .8
  message \(for small messages\).)102 426 R .712(This is reasonable if)5.712 F
 (you are connected with reasonably f)102 438 Q(ast links.)-.1 E F0 2.5(7.26. A)
 87 462 R(uto-Quoting in Addr)-.5 E(esses)-.18 E F1(Pre)127 478.2 Q(viously)-.25
  message \(for small messages\).)102 426 R .712(This is reasonable if)5.712 F
 (you are connected with reasonably f)102 438 Q(ast links.)-.1 E F0 2.5(7.26. A)
 87 462 R(uto-Quoting in Addr)-.5 E(esses)-.18 E F1(Pre)127 478.2 Q(viously)-.25
-E 2.611(,t)-.65 G .111(he \231Full Name <email address>\232 syntax w)176.771
+E 2.61(,t)-.65 G .111(he \231Full Name <email address>\232 syntax w)176.77
 478.2 R .111(ould generate incorrect protocol output)-.1 F
 (if \231Full Name\232 had special characters such as dot.)102 490.2 Q(This v)5
 E(ersion puts quotes around such names.)-.15 E F0 2.5(7.27. Symbolic)87 514.2 R
 (Names On Err)2.5 E(or Mailer)-.18 E F1(Se)127 530.4 Q -.15(ve)-.25 G
 (ral names ha).15 E .3 -.15(ve b)-.2 H(een b).15 E
 (uilt in to the $@ portion of the $#error mailer)-.2 E(.)-.55 E F0 2.5
 478.2 R .111(ould generate incorrect protocol output)-.1 F
 (if \231Full Name\232 had special characters such as dot.)102 490.2 Q(This v)5
 E(ersion puts quotes around such names.)-.15 E F0 2.5(7.27. Symbolic)87 514.2 R
 (Names On Err)2.5 E(or Mailer)-.18 E F1(Se)127 530.4 Q -.15(ve)-.25 G
 (ral names ha).15 E .3 -.15(ve b)-.2 H(een b).15 E
 (uilt in to the $@ portion of the $#error mailer)-.2 E(.)-.55 E F0 2.5
-(7.28. SMTP)87 554.4 R(VRFY Doesn't Expand)2.5 E F1(Pre)127 570.6 Q 1.437
-(vious v)-.25 F 1.437(ersions of)-.15 F F2(sendmail)3.937 E F1 1.438
-(treated VRFY and EXPN the same.)3.937 F 1.438(In this v)6.438 F 1.438
+(7.28. SMTP)87 554.4 R(VRFY Doesn't Expand)2.5 E F1(Pre)127 570.6 Q 1.438
+(vious v)-.25 F 1.438(ersions of)-.15 F F2(sendmail)3.938 E F1 1.438
+(treated VRFY and EXPN the same.)3.938 F 1.437(In this v)6.437 F 1.437
 (ersion, VRFY)-.15 F(doesn')102 582.6 Q 2.5(te)-.18 G(xpand aliases or follo)
 (ersion, VRFY)-.15 F(doesn')102 582.6 Q 2.5(te)-.18 G(xpand aliases or follo)
-138.05 582.6 Q 2.5(w.)-.25 G(forw)235.84 582.6 Q(ard \214les.)-.1 E .664
-(As an optimization, if you run with your def)127 598.8 R .663(ault deli)-.1 F
--.15(ve)-.25 G .663(ry mode being queue-only).15 F 3.163(,t)-.65 G .663
-(he RCPT)466.387 598.8 R 1.09(command will also not chase aliases and .forw)102
-610.8 R 1.09(ard \214les.)-.1 F 1.09(It will chase them when it processes the)
-6.09 F(queue.)102 622.8 Q F0 2.5(7.29. [IPC])87 646.8 R(Mailers Allo)2.5 E 2.5
-(wM)-.1 G(ultiple Hosts)210.49 646.8 Q F1 .448(When an address resolv)127 663 R
-.448(es to a mailer that has \231[IPC]\232 as its \231P)-.15 F .447
-(ath\232, the $@ part \(host name\))-.15 F .137
+138.05 582.6 Q 2.5(w.)-.25 G(forw)235.84 582.6 Q(ard \214les.)-.1 E
+(EXPN still does.)5 E .681(As an optimization, if you run with your def)127
+598.8 R .682(ault deli)-.1 F -.15(ve)-.25 G .682
+(ry mode being queue-only or deli).15 F -.15(ve)-.25 G -.2(r-).15 G 1.582
+(in-background, the RCPT command will also not chase aliases and .forw)102
+610.8 R 1.582(ard \214les.)-.1 F 1.582(It will chase)6.582 F
+(them when it processes the queue.)102 622.8 Q F0 2.5(7.29. [IPC])87 646.8 R
+(Mailers Allo)2.5 E 2.5(wM)-.1 G(ultiple Hosts)210.49 646.8 Q F1 .447
+(When an address resolv)127 663 R .448
+(es to a mailer that has \231[IPC]\232 as its \231P)-.15 F .448
+(ath\232, the $@ part \(host name\))-.15 F .138
 (can be a colon-separated list of hosts instead of a single hostname.)102 675 R
 (can be a colon-separated list of hosts instead of a single hostname.)102 675 R
-.138(This asks sendmail to search the)5.138 F .161
-(list for the \214rst entry that is a)102 687 R -.25(va)-.2 G .161(ilable e).25
-F .16(xactly as though it were an MX record.)-.15 F .16(The intent is to route)
-5.16 F .737(internal traf)102 699 R .738(\214c through internal netw)-.25 F
-.738(orks without publishing an MX record to the net.)-.1 F .738(MX e)5.738 F
+.137(This asks)5.137 F F2(sendmail)2.637 E F1 .137(to search the)2.637 F .16
+(list for the \214rst entry that is a)102 687 R -.25(va)-.2 G .16(ilable e).25
+F .161(xactly as though it were an MX record.)-.15 F .161
+(The intent is to route)5.161 F .738(internal traf)102 699 R .738
+(\214c through internal netw)-.25 F .738
+(orks without publishing an MX record to the net.)-.1 F .737(MX e)5.737 F
 (xpan-)-.15 E(sion is still done on the indi)102 711 Q(vidual items.)-.25 E EP
 (xpan-)-.15 E(sion is still done on the indi)102 711 Q(vidual items.)-.25 E EP
-%%Page: 55 52
+%%Page: 59 54
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-55)452.9 60 Q 2.5(7.30. Aliases)87 96 R(Extended)2.5 E/F1 10
-/Times-Roman@0 SF 1.457(The implementation has been mer)127 112.2 R 1.457
-(ged with maps.)-.18 F 1.456(Among other things, this supports NIS-)6.457 F
+(SMM:08-59)452.9 60 Q 2.5(7.30. Aliases)87 96 R(Extended)2.5 E/F1 10
+/Times-Roman@0 SF 1.456(The implementation has been mer)127 112.2 R 1.457
+(ged with maps.)-.18 F 1.457(Among other things, this supports NIS-)6.457 F
 (based aliases.)102 124.2 Q F0 2.5(7.31. P)87 148.2 R
 (ortability and Security Enhancements)-.2 E F1 2.5(An)127 164.4 S
 (umber of internal changes ha)141.72 164.4 Q .3 -.15(ve b)-.2 H
 (based aliases.)102 124.2 Q F0 2.5(7.31. P)87 148.2 R
 (ortability and Security Enhancements)-.2 E F1 2.5(An)127 164.4 S
 (umber of internal changes ha)141.72 164.4 Q .3 -.15(ve b)-.2 H
@@ -4466,64 +4710,70 @@ BP
 (7.32. Miscellaneous)87 204.6 R(Changes)2.5 E/F2 10/Times-Italic@0 SF(Sendmail)
 127 220.8 Q F1(writes a)2.5 E F2(/etc/sendmail.pid)2.5 E F1
 (\214le with the current process id of the SMTP daemon.)2.5 E -1 -.8(Tw o)127
 (7.32. Miscellaneous)87 204.6 R(Changes)2.5 E/F2 10/Times-Italic@0 SF(Sendmail)
 127 220.8 Q F1(writes a)2.5 E F2(/etc/sendmail.pid)2.5 E F1
 (\214le with the current process id of the SMTP daemon.)2.5 E -1 -.8(Tw o)127
-237 T 1.646(people using the same program in their .forw)4.946 F 1.647
-(ard \214le are considered dif)-.1 F 1.647(ferent so that)-.25 F
+237 T 1.647(people using the same program in their .forw)4.947 F 1.646
+(ard \214le are considered dif)-.1 F 1.646(ferent so that)-.25 F
 (duplicate elimination doesn')102 249 Q 2.5(td)-.18 G(elete one of them.)225.98
 (duplicate elimination doesn')102 249 Q 2.5(td)-.18 G(elete one of them.)225.98
-249 Q(The)127 265.2 Q F2(mailstats)3.181 E F1 .681
-(program prints mailer names and gets the location of the)3.181 F F2
-(sendmail.st)3.18 E F1 .68(\214le from)3.18 F F2(/etc/sendmail.cf)102 277.2 Q
-F1(.)A(Man)127 293.4 Q 2.5(ym)-.15 G(inor b)160.46 293.4 Q(ugs ha)-.2 E .3 -.15
-(ve b)-.2 H(een \214x).15 E
+249 Q(The)127 265.2 Q F2(mailstats)3.18 E F1 .681
+(program prints mailer names and gets the location of the)3.18 F F2
+(sendmail.st)3.181 E F1 .681(\214le from)3.181 F F2(/etc/sendmail.cf)102 277.2
+Q F1(.)A(Man)127 293.4 Q 2.5(ym)-.15 G(inor b)160.46 293.4 Q(ugs ha)-.2 E .3
+-.15(ve b)-.2 H(een \214x).15 E
 (ed, such as handling of backslashes inside of quotes.)-.15 E 2.5(Ah)127 309.6
 S(ook \(ruleset 5\) has been added to allo)141.72 309.6 Q 2.5(wr)-.25 G -.25
 (ew)304.21 309.6 S(riting of local addresses after aliasing.).25 E F0 2.5(8. A)
 (ed, such as handling of backslashes inside of quotes.)-.15 E 2.5(Ah)127 309.6
 S(ook \(ruleset 5\) has been added to allo)141.72 309.6 Q 2.5(wr)-.25 G -.25
 (ew)304.21 309.6 S(riting of local addresses after aliasing.).25 E F0 2.5(8. A)
-72 333.6 R(CKNO)-.55 E(WLEDGEMENTS)-.5 E F1(I')112 349.8 Q 2.036 -.15(ve w)-.5
+72 333.6 R(CKNO)-.55 E(WLEDGEMENTS)-.5 E F1(I')112 349.8 Q 2.037 -.15(ve w)-.5
 H(ork).05 E 1.737(ed on)-.1 F F2(sendmail)4.237 E F1 1.737(for man)4.237 F
 H(ork).05 E 1.737(ed on)-.1 F F2(sendmail)4.237 E F1 1.737(for man)4.237 F
-4.237(yy)-.15 G 1.737(ears, and man)267.501 349.8 R 4.237(ye)-.15 G(mplo)
-339.762 349.8 Q 1.737(yers ha)-.1 F 2.037 -.15(ve b)-.2 H 1.737
-(een remarkably patient).15 F .404(about letting me w)87 361.8 R .404
-(ork on a lar)-.1 F .404(ge project that w)-.18 F .403(as not part of my of)-.1
-F .403(\214cial job)-.25 F 5.403(.T)-.4 G .403(his includes time on the)407.388
+4.237(yy)-.15 G 1.737(ears, and man)267.502 349.8 R 4.237(ye)-.15 G(mplo)
+339.763 349.8 Q 1.737(yers ha)-.1 F 2.037 -.15(ve b)-.2 H 1.737
+(een remarkably patient).15 F .403(about letting me w)87 361.8 R .403
+(ork on a lar)-.1 F .403(ge project that w)-.18 F .404(as not part of my of)-.1
+F .404(\214cial job)-.25 F 5.404(.T)-.4 G .404(his includes time on the)407.384
 361.8 R(INGRES Project at Berk)87 373.8 Q(ele)-.1 E 1.3 -.65(y, a)-.15 H 2.5
 (tB).65 G(ritton Lee, and ag)222.75 373.8 Q(ain on the Mammoth Project at Berk)
 361.8 R(INGRES Project at Berk)87 373.8 Q(ele)-.1 E 1.3 -.65(y, a)-.15 H 2.5
 (tB).65 G(ritton Lee, and ag)222.75 373.8 Q(ain on the Mammoth Project at Berk)
--.05 E(ele)-.1 E -.65(y.)-.15 G .453(Much of the second w)112 390 R -2.25 -.2
+-.05 E(ele)-.1 E -.65(y.)-.15 G .454(Much of the second w)112 390 R -2.25 -.2
 (av e)-.1 H .453(of impro)3.153 F -.15(ve)-.15 G .453
 (av e)-.1 H .453(of impro)3.153 F -.15(ve)-.15 G .453
-(ments should be credited to Bryan Costales of ICSI.).15 F .454(As he)5.454 F
+(ments should be credited to Bryan Costales of ICSI.).15 F .453(As he)5.453 F
 .781(passed me drafts of his book on)87 402 R F2(sendmail)3.281 E F1 3.281(Iw)
 .781(passed me drafts of his book on)87 402 R F2(sendmail)3.281 E F1 3.281(Iw)
-3.281 G .781(as inspired to start w)274.741 402 R .781(orking on things ag)-.1
-F 3.281(ain. Bryan)-.05 F -.1(wa)3.281 G(s).1 E(also a)87 414 Q -.25(va)-.2 G
+3.281 G .781(as inspired to start w)274.739 402 R .781(orking on things ag)-.1
+F 3.282(ain. Bryan)-.05 F -.1(wa)3.282 G(s).1 E(also a)87 414 Q -.25(va)-.2 G
 (ilable to bounce ideas of).25 E 2.5(fo)-.25 G(f.)227.38 414 Q(Man)112 430.2 Q
 (ilable to bounce ideas of).25 E 2.5(fo)-.25 G(f.)227.38 414 Q(Man)112 430.2 Q
-2.856 -.65(y, m)-.15 H(an).65 E 4.056(yp)-.15 G 1.556(eople contrib)172.212
+2.857 -.65(y, m)-.15 H(an).65 E 4.057(yp)-.15 G 1.557(eople contrib)172.214
 430.2 R 1.556(uted chunks of code and ideas to)-.2 F F2(sendmail)4.056 E F1
 430.2 R 1.556(uted chunks of code and ideas to)-.2 F F2(sendmail)4.056 E F1
-6.556(.I)C 4.056(th)418.476 430.2 S 1.557(as pro)430.312 430.2 R -.15(ve)-.15 G
-4.057(nt).15 G 4.057(ob)477.006 430.2 S 4.057(ea)491.063 430.2 S .464
-(group netw)87 442.2 R .464(ork ef)-.1 F 2.964(fort. V)-.25 F .464
-(ersion 8 in particular w)-1.11 F .463(as a group project.)-.1 F .463
-(The follo)5.463 F .463(wing people made notable)-.25 F(contrib)87 454.2 Q
+6.556(.I)C 4.056(th)418.48 430.2 S 1.556(as pro)430.316 430.2 R -.15(ve)-.15 G
+4.056(nt).15 G 4.056(ob)477.008 430.2 S 4.056(ea)491.064 430.2 S .463
+(group netw)87 442.2 R .463(ork ef)-.1 F 2.963(fort. V)-.25 F .463
+(ersion 8 in particular w)-1.11 F .463(as a group project.)-.1 F .464
+(The follo)5.464 F .464(wing people made notable)-.25 F(contrib)87 454.2 Q
 (utions:)-.2 E -.25(Ke)127 470.4 S(ith Bostic, CSRG, Uni).25 E -.15(ve)-.25 G
 (rsity of California, Berk).15 E(ele)-.1 E(y)-.15 E(Michael J. Corrig)127 482.4
 Q(an, Uni)-.05 E -.15(ve)-.25 G(rsity of California, San Die).15 E(go)-.15 E
 (utions:)-.2 E -.25(Ke)127 470.4 S(ith Bostic, CSRG, Uni).25 E -.15(ve)-.25 G
 (rsity of California, Berk).15 E(ele)-.1 E(y)-.15 E(Michael J. Corrig)127 482.4
 Q(an, Uni)-.05 E -.15(ve)-.25 G(rsity of California, San Die).15 E(go)-.15 E
-(Bryan Costales, International Computer Science Institute)127 494.4 Q
-(P{r \(Pell\) Emanuelsson)127 506.4 Q(Craig Ev)127 518.4 Q(erhart, T)-.15 E
-(ransarc Corporation)-.35 E -.8(To)127 530.4 S 2.5(mI).8 G -.25(va)150.92 530.4
-S 2.5(rH).25 G(elbekkmo, Norwe)173.16 530.4 Q(gian School of Economics)-.15 E
-(Allan E. Johannesen, WPI)127 542.4 Q -.8(Ta)127 554.4 S
-(kahiro Kanbe, FujiXerox).8 E(Brian Kantor)127 566.4 Q 2.5(,U)-.4 G(ni)191.31
-566.4 Q -.15(ve)-.25 G(rsity of California, San Die).15 E(go)-.15 E
-(Bruce Lilly)127 578.4 Q 2.5(,S)-.65 G(on)182.74 578.4 Q 2.5(yU)-.15 G(.S.)
-207.31 578.4 Q(Nakamura Motonori, K)127 590.4 Q(yoto Uni)-.25 E -.15(ve)-.25 G
-(rsity).15 E(John Gardiner Myers, Carne)127 602.4 Q(gie Mellon Uni)-.15 E -.15
-(ve)-.25 G(rsity).15 E(Neil Rick)127 614.4 Q(ert, Northern Illinois Uni)-.1 E
--.15(ve)-.25 G(rsity).15 E(Eric W)127 626.4 Q(assenaar)-.8 E 2.5(,N)-.4 G
-(ational Institute for Nuclear and High Ener)200.49 626.4 Q(gy Ph)-.18 E
-(ysics, Amsterdam)-.05 E(Christophe W)127 638.4 Q(olfhugel, Herv)-.8 E 2.5(eS)
--.15 G(chauer Consultants \(P)252.7 638.4 Q(aris\))-.15 E 2.687(Ia)87 654.6 S
-.187(pologize for an)97.457 654.6 R .188(yone I ha)-.15 F .488 -.15(ve o)-.2 H
+(Bryan Costales, International Computer Science Institute)127 494.4 Q -.15(Pa)
+127 506.4 S -.5(..)132.298 500.4 S 2.5(r\()136.85 506.4 S(Pell\) Emanuelsson)
+146.01 506.4 Q(Craig Ev)127 518.4 Q(erhart, T)-.15 E(ransarc Corporation)-.35 E
+-.8(To)127 530.4 S 2.5(mI).8 G -.25(va)150.92 530.4 S 2.5(rH).25 G
+(elbekkmo, Norwe)173.16 530.4 Q(gian School of Economics)-.15 E
+(Allan E. Johannesen, WPI)127 542.4 Q(Jonathan Kamens, OpenV)127 554.4 Q
+(ision T)-.6 E(echnologies, Inc.)-.7 E -.8(Ta)127 566.4 S
+(kahiro Kanbe, Fuji Xerox Information Systems Co., Ltd.).8 E(Brian Kantor)127
+578.4 Q 2.5(,U)-.4 G(ni)191.31 578.4 Q -.15(ve)-.25 G
+(rsity of California, San Die).15 E(go)-.15 E(Murray S. K)127 590.4 Q(uchera)
+-.15 E(wy)-.15 E 2.5(,H)-.65 G(ookUp Communication Corp.)227.41 590.4 Q
+(Bruce Lilly)127 602.4 Q 2.5(,S)-.65 G(on)182.74 602.4 Q 2.5(yU)-.15 G(.S.)
+207.31 602.4 Q(Karl London)127 614.4 Q(Nakamura Motonori, K)127 626.4 Q
+(yoto Uni)-.25 E -.15(ve)-.25 G(rsity).15 E(John Gardiner Myers, Carne)127
+638.4 Q(gie Mellon Uni)-.15 E -.15(ve)-.25 G(rsity).15 E(Neil Rick)127 650.4 Q
+(ert, Northern Illinois Uni)-.1 E -.15(ve)-.25 G(rsity).15 E
+(Eric Schnoebelen, Con)127 662.4 Q .3 -.15(vex C)-.4 H(omputer Corp.).15 E
+(Eric W)127 674.4 Q(assenaar)-.8 E 2.5(,N)-.4 G
+(ational Institute for Nuclear and High Ener)200.49 674.4 Q(gy Ph)-.18 E
+(ysics, Amsterdam)-.05 E(Christophe W)127 686.4 Q(olfhugel, Herv)-.8 E 2.5(eS)
+-.15 G(chauer Consultants \(P)252.7 686.4 Q(aris\))-.15 E 2.688(Ia)87 702.6 S
+.188(pologize for an)97.458 702.6 R .188(yone I ha)-.15 F .488 -.15(ve o)-.2 H
 .188(mitted, misspelled, misattrib).15 F .188(uted, or otherwise missed.)-.2 F
 .188(mitted, misspelled, misattrib).15 F .188(uted, or otherwise missed.)-.2 F
-(Man)5.188 E 2.688(yo)-.15 G .188(ther peo-)467.992 654.6 R(ple ha)87 666.6 Q
+(Man)5.188 E 2.687(yo)-.15 G .187(ther peo-)467.993 702.6 R(ple ha)87 714.6 Q
 .3 -.15(ve c)-.2 H(ontrib).15 E(uted ideas, comments, and encouragement.)-.2 E
 .3 -.15(ve c)-.2 H(ontrib).15 E(uted ideas, comments, and encouragement.)-.2 E
-2.5(Ia)5 G(ppreciate their contrib)338.06 666.6 Q(ution as well.)-.2 E EP
-%%Page: 56 53
+2.5(Ia)5 G(ppreciate their contrib)338.06 714.6 Q(ution as well.)-.2 E EP
+%%Page: 60 55
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
 (ust v)207.89 281.4 Q(erify addresses, don')-.15 E 2.5(tc)-.18 G
 (ollect or deli)319.48 281.4 Q -.15(ve)-.25 G(r).15 E 17.22(iI)184 293.4 S
 (nitialize the alias database)207.33 293.4 Q 15(pP)184 305.4 S
 (ust v)207.89 281.4 Q(erify addresses, don')-.15 E 2.5(tc)-.18 G
 (ollect or deli)319.48 281.4 Q -.15(ve)-.25 G(r).15 E 17.22(iI)184 293.4 S
 (nitialize the alias database)207.33 293.4 Q 15(pP)184 305.4 S
-(rint the mail queue)209.56 305.4 Q 15.56(zF)184 317.4 S
-(reeze the con\214guration \214le)209.56 317.4 Q<ad42>72 337.8 Q F2(type)A F1
-(Indicate body type.)144 337.8 Q<ad43>72 354 Q F2(\214le)A F1 .947(Use a dif)
-144 354 R .946(ferent con\214guration \214le.)-.25 F F2(Sendmail)5.946 E F1
+(rint the mail queue)209.56 305.4 Q<ad42>72 325.8 Q F2(type)A F1
+(Indicate body type.)144 325.8 Q<ad43>72 342 Q F2(\214le)A F1 .946(Use a dif)
+144 342 R .946(ferent con\214guration \214le.)-.25 F F2(Sendmail)5.946 E F1
 .946(runs as the in)3.446 F -.2(vo)-.4 G .946(king user \(rather than root\)).2
 .946(runs as the in)3.446 F -.2(vo)-.4 G .946(king user \(rather than root\)).2
-F(when this \215ag is speci\214ed.)144 366 Q<ad64>72 382.2 Q F2(le)A(vel)-.15 E
-F1(Set deb)144 382.2 Q(ugging le)-.2 E -.15(ve)-.25 G(l.).15 E<ad66>72 398.4 Q
-F2(addr)2.5 E F1(The sender')144 398.4 Q 2.5(sm)-.55 G(achine address is)205.1
-398.4 Q F2(addr)2.5 E F1(.)A<ad46>72 414.6 Q F2(name)A F1
-(Sets the full name of this user to)144 414.6 Q F2(name)2.5 E F1(.)A<ad68>72
-430.8 Q F2(cnt)2.5 E F1 .725(Sets the \231hop count\232 to)144 430.8 R F2(cnt)
-3.225 E F1 5.725(.T)C .726
-(his represents the number of times this message has been)269.45 430.8 R .02
-(processed by)144 442.8 R F2(sendmail)2.52 E F1 .02(\(to the e)2.52 F .02
+F(when this \215ag is speci\214ed.)144 354 Q<ad64>72 370.2 Q F2(le)A(vel)-.15 E
+F1(Set deb)144 370.2 Q(ugging le)-.2 E -.15(ve)-.25 G(l.).15 E<ad66>72 386.4 Q
+F2(addr)2.5 E F1(The sender')144 386.4 Q 2.5(sm)-.55 G(achine address is)205.1
+386.4 Q F2(addr)2.5 E F1(.)A<ad46>72 402.6 Q F2(name)A F1
+(Sets the full name of this user to)144 402.6 Q F2(name)2.5 E F1(.)A<ad68>72
+418.8 Q F2(cnt)2.5 E F1 .726(Sets the \231hop count\232 to)144 418.8 R F2(cnt)
+3.226 E F1 5.725(.T)C .725
+(his represents the number of times this message has been)269.455 418.8 R .02
+(processed by)144 430.8 R F2(sendmail)2.52 E F1 .02(\(to the e)2.52 F .02
 (xtent that it is supported by the underlying netw)-.15 F(orks\).)-.1 E F2(Cnt)
 5.02 E F1 1.521
 (is incremented during processing, and if it reaches MAXHOP \(currently 30\))
 (xtent that it is supported by the underlying netw)-.15 F(orks\).)-.1 E F2(Cnt)
 5.02 E F1 1.521
 (is incremented during processing, and if it reaches MAXHOP \(currently 30\))
-144 454.8 R F2(sendmail)4.021 E F1(thro)144 466.8 Q(ws a)-.25 E -.1(wa)-.15 G
-2.5(yt).1 G(he message with an error)199.6 466.8 Q(.)-.55 E 58.86(\255n Don')72
-483 R 2.5(td)-.18 G 2.5(oa)174.65 483 S(liasing or forw)186.59 483 Q(arding.)
--.1 E<ad72>72 499.2 Q F2(addr)2.5 E F1(An obsolete form of)144 499.2 Q/F3 10
-/Times-Bold@0 SF<ad66>2.5 E F1(.)A<ad6f>72 515.4 Q F2 1.666(xv)C(alue)-1.666 E
-F1(Set option)144 515.4 Q F2(x)2.5 E F1(to the speci\214ed)2.5 E F2(value)2.5 E
-F1 5(.T)C(hese options are described in Appendix B.)292.6 515.4 Q<ad70>72 531.6
-Q F2(pr)A(otocol)-.45 E F1 .401(Set the sending protocol.)144 531.6 R .401
-(Programs are encouraged to set this.)5.401 F .4(The protocol \214eld can be)
-5.401 F .114(in the form)144 543.6 R F2(pr)2.614 E(otocol)-.45 E F3(:)A F2
-(host)A F1 .114(to set both the sending protocol and sending host.)2.614 F -.15
-(Fo)5.115 G 2.615(re).15 G(xample,)472.06 543.6 Q 2.147(\231\255pUUCP:uunet\
-\232 sets the sending protocol to UUCP and the sending host to uunet.)144 555.6
-R .973(\(Some e)144 567.6 R .974
+144 442.8 R F2(sendmail)4.02 E F1(thro)144 454.8 Q(ws a)-.25 E -.1(wa)-.15 G
+2.5(yt).1 G(he message with an error)199.6 454.8 Q(.)-.55 E 58.86(\255n Don')72
+471 R 2.5(td)-.18 G 2.5(oa)174.65 471 S(liasing or forw)186.59 471 Q(arding.)
+-.1 E<ad72>72 487.2 Q F2(addr)2.5 E F1(An obsolete form of)144 487.2 Q/F3 10
+/Times-Bold@0 SF<ad66>2.5 E F1(.)A<ad6f>72 503.4 Q F2 1.666(xv)C(alue)-1.666 E
+F1(Set option)144 503.4 Q F2(x)2.5 E F1(to the speci\214ed)2.5 E F2(value)2.5 E
+F1 5(.T)C(hese options are described in Appendix B.)292.6 503.4 Q<ad70>72 519.6
+Q F2(pr)A(otocol)-.45 E F1 .4(Set the sending protocol.)144 519.6 R .401
+(Programs are encouraged to set this.)5.4 F .401(The protocol \214eld can be)
+5.401 F .115(in the form)144 531.6 R F2(pr)2.615 E(otocol)-.45 E F3(:)A F2
+(host)A F1 .114(to set both the sending protocol and sending host.)2.615 F -.15
+(Fo)5.114 G 2.614(re).15 G(xample,)472.06 531.6 Q 2.147(\231\255pUUCP:uunet\
+\232 sets the sending protocol to UUCP and the sending host to uunet.)144 543.6
+R .974(\(Some e)144 555.6 R .974
 (xisting programs use \255oM to set the r and s macros; this is equi)-.15 F
 (xisting programs use \255oM to set the r and s macros; this is equi)-.15 F
--.25(va)-.25 G .974(lent to using).25 F(\255p.\))144 579.6 Q<ad71>72 595.8 Q F2
-(time)A F1 -.35(Tr)144 595.8 S 3.168(yt).35 G 3.167(op)164.038 595.8 S .667
-(rocess the queued up mail.)177.205 595.8 R .667(If the time is gi)5.667 F -.15
-(ve)-.25 G .667(n, a sendmail will run through the).15 F
-(queue at the speci\214ed interv)144 607.8 Q(al to deli)-.25 E -.15(ve)-.25 G
-2.5(rq).15 G(ueued mail; otherwise, it only runs once.)310.82 607.8 Q<ad71>72
-624 Q F2(Xstring)A F1 .312
-(Run the queue once, limiting the jobs to those matching)144 624 R F2(Xstring)
-2.813 E F1 5.313(.T)C .313(he k)416.325 624 R .613 -.15(ey l)-.1 H(etter).15 E
-F2(X)2.813 E F1 .313(can be)2.813 F F3(I)144 636 Q F1 .671
-(to limit based on queue identi\214er)3.171 F(,)-.4 E F3(R)3.171 E F1 .67
-(to limit based on recipient, or)3.171 F F3(S)3.17 E F1 .67(to limit based on)
-3.17 F(sender)144 648 Q 6.053(.A)-.55 G 1.054
+-.25(va)-.25 G .973(lent to using).25 F(\255p.\))144 567.6 Q<ad71>72 583.8 Q F2
+(time)A F1 -.35(Tr)144 583.8 S 3.167(yt).35 G 3.167(op)164.037 583.8 S .667
+(rocess the queued up mail.)177.204 583.8 R .667(If the time is gi)5.667 F -.15
+(ve)-.25 G .667(n, a).15 F F2(sendmail)3.167 E F1 .667(will run through the)
+3.167 F(queue at the speci\214ed interv)144 595.8 Q(al to deli)-.25 E -.15(ve)
+-.25 G 2.5(rq).15 G(ueued mail; otherwise, it only runs once.)310.82 595.8 Q
+<ad71>72 612 Q F2(Xstring)A F1 .313
+(Run the queue once, limiting the jobs to those matching)144 612 R F2(Xstring)
+2.812 E F1 5.312(.T)C .312(he k)416.33 612 R .612 -.15(ey l)-.1 H(etter).15 E
+F2(X)2.812 E F1 .312(can be)2.812 F F3(I)144 624 Q F1 .67
+(to limit based on queue identi\214er)3.17 F(,)-.4 E F3(R)3.17 E F1 .671
+(to limit based on recipient, or)3.17 F F3(S)3.171 E F1 .671(to limit based on)
+3.171 F(sender)144 636 Q 6.054(.A)-.55 G 1.054
 (particular queued job is accepted if one of the corresponding addresses con-)
 (particular queued job is accepted if one of the corresponding addresses con-)
-188.876 648 R(tains the indicated)144 660 Q F2(string)2.5 E F1(.)A 61.08
-(\255t Read)72 676.2 R .752(the header for \231T)3.252 F .752
+188.878 636 R(tains the indicated)144 648 Q F2(string)2.5 E F1(.)A 61.08
+(\255t Read)72 664.2 R .752(the header for \231T)3.252 F .752
 (o:\232, \231Cc:\232, and \231Bcc:\232 lines, and send to e)-.8 F -.15(ve)-.25
 (o:\232, \231Cc:\232, and \231Bcc:\232 lines, and send to e)-.8 F -.15(ve)-.25
-G .752(ryone listed in those).15 F 2.539(lists. The)144 688.2 R .039
-(\231Bcc:\232 line will be deleted before sending.)2.539 F(An)5.039 E 2.539(ya)
--.15 G .04(ddresses in the ar)385.31 688.2 R .04(gument v)-.18 F(ec-)-.15 E
-(tor will be deleted from the send list.)144 700.2 Q F3 193.36
-(SMM:08-56 Sendmail)72 756 R(Installation and Operation Guide)2.5 E EP
-%%Page: 57 54
+G .752(ryone listed in those).15 F 2.54(lists. The)144 676.2 R .039
+(\231Bcc:\232 line will be deleted before sending.)2.54 F(An)5.039 E 2.539(ya)
+-.15 G .039(ddresses in the ar)385.314 676.2 R .039(gument v)-.18 F(ec-)-.15 E
+(tor will be deleted from the send list.)144 688.2 Q<ad58>72 704.4 Q F2(lo)
+3.179 E(g\214le)-.1 E F1 .679(Log all traf)144.679 704.4 R .679
+(\214c in and out of)-.25 F F2(sendmail)3.179 E F1 .679(in the indicated)3.179
+F F2(lo)3.18 E(g\214le)-.1 E F1 .68(for deb)3.18 F .68(ugging mailer prob-)-.2
+F 2.5(lems. This)144 716.4 R(produces a lot of data v)2.5 E
+(ery quickly and should be used sparingly)-.15 E(.)-.65 E F3 193.36
+(SMM:08-60 Sendmail)72 756 R(Installation and Operation Guide)2.5 E EP
+%%Page: 61 56
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-57)452.9 60 Q/F1 10/Times-Roman@0 SF<ad58>72 96 Q/F2 10/Times-Italic@0
-SF(lo)3.18 E(g\214le)-.1 E F1 .68(Log all traf)144.68 96 R .679
-(\214c in and out of sendmail in the indicated)-.25 F F2(lo)3.179 E(g\214le)-.1
-E F1 .679(for deb)3.179 F .679(ugging mailer prob-)-.2 F 2.5(lems. This)144 108
-R(produces a lot of data v)2.5 E(ery quickly and should be used sparingly)-.15
-E(.)-.65 E 1.118
-(There are a number of options that may be speci\214ed as primiti)97 124.2 R
-1.418 -.15(ve \215)-.25 H 1.118(ags \(pro).15 F 1.118(vided for compatibility)
--.15 F(with)72 136.2 Q F2(delivermail)2.5 E F1 2.5(\). These)B
+(SMM:08-61)452.9 60 Q/F1 10/Times-Roman@0 SF 1.118
+(There are a number of options that may be speci\214ed as primiti)97 96 R 1.418
+-.15(ve \215)-.25 H 1.118(ags \(pro).15 F 1.118(vided for compatibility)-.15 F
+(with)72 108 Q/F2 10/Times-Italic@0 SF(delivermail)2.5 E F1 2.5(\). These)B
 (are the e, i, m, and v options.)2.5 E
 (Also, the f option may be speci\214ed as the)5 E F0<ad73>2.5 E F1(\215ag.)2.5
 E EP
 (are the e, i, m, and v options.)2.5 E
 (Also, the f option may be speci\214ed as the)5 E F0<ad73>2.5 E F1(\215ag.)2.5
 E EP
-%%Page: 58 55
+%%Page: 62 57
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 12/Times-Bold@0 SF 3(APPENDIX B)250.002 98.4 R -.12(QU)220.29 141.6 S
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 12/Times-Bold@0 SF 3(APPENDIX B)250.002 98.4 R -.12(QU)220.29 141.6 S
-(EUE FILE FORMA).12 E(TS)-1.14 E/F1 10/Times-Roman@0 SF .292
+(EUE FILE FORMA).12 E(TS)-1.14 E/F1 10/Times-Roman@0 SF .291
 (This appendix describes the format of the queue \214les.)97 201 R .292
 (This appendix describes the format of the queue \214les.)97 201 R .292
-(These \214les li)5.292 F .592 -.15(ve i)-.25 H 2.792(nt).15 G .291
-(he directory de\214ned by the)395.636 201 R/F2 10/Times-Bold@0 SF(Q)72 213 Q
+(These \214les li)5.292 F .592 -.15(ve i)-.25 H 2.792(nt).15 G .292
+(he directory de\214ned by the)395.632 201 R/F2 10/Times-Bold@0 SF(Q)72 213 Q
 F1(option in the)2.5 E/F3 10/Times-Italic@0 SF(sendmail.cf)2.5 E F1
 (\214le, usually)2.5 E F3(/var/spool/mqueue)2.5 E F1(or)2.5 E F3
 F1(option in the)2.5 E/F3 10/Times-Italic@0 SF(sendmail.cf)2.5 E F1
 (\214le, usually)2.5 E F3(/var/spool/mqueue)2.5 E F1(or)2.5 E F3
-(/usr/spool/mqueue)2.5 E F1(.)A .229(All queue \214les ha)97 229.2 R .529 -.15
-(ve t)-.2 H .229(he name).15 F F3(x)2.729 E F2(f)1.666 E F3(AAA99999)A F1
-(where)2.73 E F3(AAA99999)2.73 E F1 .23(is the)2.73 F F3(id)2.73 E F1 .23
-(for this message and the)2.73 F F3(x)2.73 E F1 .23(is a)2.73 F 3.601
+(/usr/spool/mqueue)2.5 E F1(.)A .23(All queue \214les ha)97 229.2 R .53 -.15
+(ve t)-.2 H .23(he name).15 F F3(x)2.73 E F2(f)1.666 E F3(AAA99999)A F1(where)
+2.73 E F3(AAA99999)2.73 E F1 .23(is the)2.73 F F3(id)2.73 E F1 .229
+(for this message and the)2.73 F F3(x)2.729 E F1 .229(is a)2.729 F 3.601
 (type. The)72 241.2 R 1.101
 (\214rst letter of the id encodes the hour of the day that the message w)3.601
 F 1.101(as recei)-.1 F -.15(ve)-.25 G 3.601(db).15 G 3.601(yt)451.798 241.2 S
 (type. The)72 241.2 R 1.101
 (\214rst letter of the id encodes the hour of the day that the message w)3.601
 F 1.101(as recei)-.1 F -.15(ve)-.25 G 3.601(db).15 G 3.601(yt)451.798 241.2 S
-1.101(he system)463.179 241.2 R .551
+1.101(he system)463.179 241.2 R .552
 (\(with A being the hour between midnight and 1:00AM\).)72 253.2 R .552
 (\(with A being the hour between midnight and 1:00AM\).)72 253.2 R .552
-(All \214les with the same id collecti)5.552 F -.15(ve)-.25 G .552
+(All \214les with the same id collecti)5.552 F -.15(ve)-.25 G .551
 (ly de\214ne one).15 F(message.)72 265.2 Q(The types are:)97 281.4 Q 31(dT)72
 297.6 S(he data \214le.)114.11 297.6 Q(The message body \(e)5 E
 (xcluding the header\) is k)-.15 E(ept in this \214le.)-.1 E 33.22(lT)72 313.8
 (ly de\214ne one).15 F(message.)72 265.2 Q(The types are:)97 281.4 Q 31(dT)72
 297.6 S(he data \214le.)114.11 297.6 Q(The message body \(e)5 E
 (xcluding the header\) is k)-.15 E(ept in this \214le.)-.1 E 33.22(lT)72 313.8
-S .312(he lock \214le.)114.11 313.8 R .312(If this \214le e)5.312 F .311
+S .311(he lock \214le.)114.11 313.8 R .311(If this \214le e)5.311 F .312
 (xists, the job is currently being processed, and a queue run will not pro-)
 (xists, the job is currently being processed, and a queue run will not pro-)
--.15 F .523(cess the \214le.)108 325.8 R -.15(Fo)5.524 G 3.024(rt).15 G .524
-(hat reason, an e)183.274 325.8 R(xtraneous)-.15 E F2(lf)3.024 E F1 .524
-(\214le can cause a job to apparently disappear \(it will)3.024 F .285(not e)
-108 337.8 R -.15(ve)-.25 G 2.785(nt).15 G .284(ime out!\).)147.61 337.8 R
+-.15 F .524(cess the \214le.)108 325.8 R -.15(Fo)5.524 G 3.024(rt).15 G .524
+(hat reason, an e)183.276 325.8 R(xtraneous)-.15 E F2(lf)3.024 E F1 .524
+(\214le can cause a job to apparently disappear \(it will)3.024 F .284(not e)
+108 337.8 R -.15(ve)-.25 G 2.784(nt).15 G .284(ime out!\).)147.608 337.8 R
 ([Actually)5.284 E 2.784(,t)-.65 G .284
 ([Actually)5.284 E 2.784(,t)-.65 G .284
-(his \214le is obsolete on most systems that support the)237.802 337.8 R F2
-(\215ock)2.784 E F1(or)2.784 E F2(lockf)2.784 E F1(system calls.])108 349.8 Q
+(his \214le is obsolete on most systems that support the)237.8 337.8 R F2
+(\215ock)2.784 E F1(or)2.785 E F2(lockf)2.785 E F1(system calls.])108 349.8 Q
 31(nT)72 366 S .348(his \214le is created when an id is being created.)114.11
 366 R .348(It is a separate \214le to insure that no mail can e)5.348 F -.15
 (ve)-.25 G(r).15 E .805(be destro)108 378 R .805(yed due to a race condition.)
 -.1 F .805(It should e)5.805 F .805(xist for no more than a fe)-.15 F 3.305(wm)
 -.25 G .805(illiseconds at an)433.1 378 R(y)-.15 E(gi)108 390 Q -.15(ve)-.25 G
 31(nT)72 366 S .348(his \214le is created when an id is being created.)114.11
 366 R .348(It is a separate \214le to insure that no mail can e)5.348 F -.15
 (ve)-.25 G(r).15 E .805(be destro)108 378 R .805(yed due to a race condition.)
 -.1 F .805(It should e)5.805 F .805(xist for no more than a fe)-.15 F 3.305(wm)
 -.25 G .805(illiseconds at an)433.1 378 R(y)-.15 E(gi)108 390 Q -.15(ve)-.25 G
-2.5(nt).15 G 2.5(ime. [This)135.1 390 R(is only used on old v)2.5 E
-(ersions of sendmail; it is not used on ne)-.15 E(wer v)-.25 E(ersions.])-.15 E
-31(qT)72 406.2 S(he queue control \214le.)114.11 406.2 Q
+2.5(nt).15 G 2.5(ime. [This)135.1 390 R(is only used on old v)2.5 E(ersions of)
+-.15 E F3(sendmail)2.5 E F1 2.5(;i)C 2.5(ti)349.95 390 S 2.5(sn)358.01 390 S
+(ot used on ne)369.4 390 Q(wer v)-.25 E(ersions.])-.15 E 31(qT)72 406.2 S
+(he queue control \214le.)114.11 406.2 Q
 (This \214le contains the information necessary to process the job)5 E(.)-.4 E
 (This \214le contains the information necessary to process the job)5 E(.)-.4 E
-33.22(tA)72 422.4 S .344(temporary \214le.)118.064 422.4 R .344
-(These are an image of the)5.344 F F2(qf)2.844 E F1 .344
-(\214le when it is being reb)2.844 F 2.845(uilt. It)-.2 F .345
-(should be renamed)2.845 F(to a)108 434.4 Q F2(qf)2.5 E F1(\214le v)2.5 E
-(ery quickly)-.15 E(.)-.65 E 31(xA)72 450.6 S .567(transcript \214le, e)118.287
-450.6 R .567(xisting during the life of a session sho)-.15 F .566(wing e)-.25 F
--.15(ve)-.25 G .566(rything that happens during that).15 F(session.)108 462.6 Q
-(The)97 478.8 Q F2(qf)3.333 E F1 .833
-(\214le is structured as a series of lines each be)3.333 F .834
-(ginning with a code letter)-.15 F 5.834(.T)-.55 G .834(he lines are as fol-)
-427.354 478.8 R(lo)72 490.8 Q(ws:)-.25 E 28.78(DT)72 507 S
+33.22(tA)72 422.4 S .345(temporary \214le.)118.065 422.4 R .344
+(These are an image of the)5.345 F F2(qf)2.844 E F1 .344
+(\214le when it is being reb)2.844 F 2.844(uilt. It)-.2 F .344
+(should be renamed)2.844 F(to a)108 434.4 Q F2(qf)2.5 E F1(\214le v)2.5 E
+(ery quickly)-.15 E(.)-.65 E 31(xA)72 450.6 S .566(transcript \214le, e)118.286
+450.6 R .567(xisting during the life of a session sho)-.15 F .567(wing e)-.25 F
+-.15(ve)-.25 G .567(rything that happens during that).15 F(session.)108 462.6 Q
+(The)97 478.8 Q F2(qf)3.334 E F1 .834
+(\214le is structured as a series of lines each be)3.334 F .833
+(ginning with a code letter)-.15 F 5.833(.T)-.55 G .833(he lines are as fol-)
+427.358 478.8 R(lo)72 490.8 Q(ws:)-.25 E 28.78(DT)72 507 S
 (he name of the data \214le.)114.11 507 Q
 (he name of the data \214le.)114.11 507 Q
-(There may only be one of these lines.)5 E 28.78(HA)72 523.2 S .33
-(header de\214nition.)118.05 523.2 R .33(There may be an)5.33 F 2.829(yn)-.15 G
-.329(umber of these lines.)274.289 523.2 R .329(The order is important: the)
-5.329 F 2.829(yr)-.15 G(epre-)483.46 523.2 Q .046
+(There may only be one of these lines.)5 E 28.78(HA)72 523.2 S .329
+(header de\214nition.)118.049 523.2 R .329(There may be an)5.329 F 2.829(yn)
+-.15 G .329(umber of these lines.)274.283 523.2 R .33
+(The order is important: the)5.33 F 2.83(yr)-.15 G(epre-)483.46 523.2 Q .046
 (sent the order in the \214nal message.)108 535.2 R .046
 (These use the same syntax as header de\214nitions in the con\214gu-)5.046 F
 (ration \214le.)108 547.2 Q 29.33(CT)72 563.4 S .575(he controlling address.)
 (sent the order in the \214nal message.)108 535.2 R .046
 (These use the same syntax as header de\214nitions in the con\214gu-)5.046 F
 (ration \214le.)108 547.2 Q 29.33(CT)72 563.4 S .575(he controlling address.)
@@ -4675,55 +4925,55 @@ S .312(he lock \214le.)114.11 313.8 R .312(If this \214le e)5.312 F .311
 (Recipient addresses follo)5.575 F .575(wing this)-.25 F 2.814
 (line will be \215agged so that deli)108 575.4 R -.15(ve)-.25 G 2.814
 (ries will be run as the).15 F F3(localuser)5.314 E F1 2.814
 (Recipient addresses follo)5.575 F .575(wing this)-.25 F 2.814
 (line will be \215agged so that deli)108 575.4 R -.15(ve)-.25 G 2.814
 (ries will be run as the).15 F F3(localuser)5.314 E F1 2.814
-(\(a user name from the)5.314 F .562(/etc/passwd \214le\);)108 587.4 R F3
-(aliasname)3.062 E F1 .561(is the name of the alias that e)3.062 F .561
+(\(a user name from the)5.314 F .561(/etc/passwd \214le\);)108 587.4 R F3
+(aliasname)3.061 E F1 .561(is the name of the alias that e)3.061 F .562
 (xpanded to this address \(used for print-)-.15 F(ing messages\).)108 599.4 Q
 29.33(RA)72 615.6 S .705(recipient address.)118.425 615.6 R .705
 (This will normally be completely aliased, b)5.705 F .705
 (ut is actually realiased when the)-.2 F(job is processed.)108 627.6 Q
 (There will be one line for each recipient.)5 E 30.44(ST)72 643.8 S
 (he sender address.)114.11 643.8 Q(There may only be one of these lines.)5 E
 (xpanded to this address \(used for print-)-.15 F(ing messages\).)108 599.4 Q
 29.33(RA)72 615.6 S .705(recipient address.)118.425 615.6 R .705
 (This will normally be completely aliased, b)5.705 F .705
 (ut is actually realiased when the)-.2 F(job is processed.)108 627.6 Q
 (There will be one line for each recipient.)5 E 30.44(ST)72 643.8 S
 (he sender address.)114.11 643.8 Q(There may only be one of these lines.)5 E
-29.89(EA)72 660 S 3.742(ne)115.22 660 S 1.242(rror address.)128.402 660 R 1.242
-(If an)6.242 F 3.742(ys)-.15 G 1.241(uch lines e)218.19 660 R 1.241(xist, the)
--.15 F 3.741(yr)-.15 G 1.241(epresent the addresses that should recei)308.124
-660 R 1.541 -.15(ve e)-.25 H(rror).15 E(messages.)108 672 Q 29.89(TT)72 688.2 S
+29.89(EA)72 660 S 3.741(ne)115.22 660 S 1.241(rror address.)128.401 660 R 1.241
+(If an)6.241 F 3.741(ys)-.15 G 1.241(uch lines e)218.185 660 R 1.241(xist, the)
+-.15 F 3.741(yr)-.15 G 1.242(epresent the addresses that should recei)308.119
+660 R 1.542 -.15(ve e)-.25 H(rror).15 E(messages.)108 672 Q 29.89(TT)72 688.2 S
 (he job creation time.)114.11 688.2 Q
 (This is used to compute when to time out the job)5 E(.)-.4 E 30.44(PT)72 704.4
 (he job creation time.)114.11 688.2 Q
 (This is used to compute when to time out the job)5 E(.)-.4 E 30.44(PT)72 704.4
-S .113(he current message priority)114.11 704.4 R 5.113(.T)-.65 G .113
-(his is used to order the queue.)236.662 704.4 R .114(Higher numbers mean lo)
-5.114 F .114(wer priori-)-.25 F 3.677(ties. The)108 716.4 R 1.176
-(priority changes as the message sits in the queue.)3.677 F 1.176
-(The initial priority depends on the)6.176 F F2 193.36(SMM:08-58 Sendmail)72
+S .114(he current message priority)114.11 704.4 R 5.114(.T)-.65 G .113
+(his is used to order the queue.)236.666 704.4 R .113(Higher numbers mean lo)
+5.113 F .113(wer priori-)-.25 F 3.676(ties. The)108 716.4 R 1.176
+(priority changes as the message sits in the queue.)3.676 F 1.177
+(The initial priority depends on the)6.176 F F2 193.36(SMM:08-62 Sendmail)72
 756 R(Installation and Operation Guide)2.5 E EP
 756 R(Installation and Operation Guide)2.5 E EP
-%%Page: 59 56
+%%Page: 63 58
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-59)452.9 60 Q/F1 10/Times-Roman@0 SF
-(message class and the size of the message.)108 96 Q 27.11(MA)72 112.2 S 2.703
-(message. This)117.923 112.2 R .203(line is printed by the)2.703 F/F2 10
-/Times-Italic@0 SF(mailq)2.703 E F1 .204
+(SMM:08-63)452.9 60 Q/F1 10/Times-Roman@0 SF
+(message class and the size of the message.)108 96 Q 27.11(MA)72 112.2 S 2.704
+(message. This)117.924 112.2 R .204(line is printed by the)2.704 F/F2 10
+/Times-Italic@0 SF(mailq)2.704 E F1 .203
 (command, and is generally used to store status infor)2.704 F(-)-.2 E 2.5
 (mation. It)108 124.2 R(can contain an)2.5 E 2.5(yt)-.15 G -.15(ex)219.78 124.2
 (command, and is generally used to store status infor)2.704 F(-)-.2 E 2.5
 (mation. It)108 124.2 R(can contain an)2.5 E 2.5(yt)-.15 G -.15(ex)219.78 124.2
-S(t.).15 E 30.44(FF)72 140.4 S .044
+S(t.).15 E 30.44(FF)72 140.4 S .043
 (lag bits, represented as one letter per \215ag.)113.56 140.4 R .043
 (lag bits, represented as one letter per \215ag.)113.56 140.4 R .043
-(De\214ned \215ag bits are)5.043 F F0(r)2.543 E F1 .043
-(indicating that this is a response)2.543 F .142(message and)108 152.4 R F0(w)
-2.642 E F1 .142(indicating that a w)2.642 F .143
+(De\214ned \215ag bits are)5.043 F F0(r)2.543 E F1 .044
+(indicating that this is a response)2.544 F .143(message and)108 152.4 R F0(w)
+2.643 E F1 .143(indicating that a w)2.643 F .142
 (arning message has been sent announcing that the mail has been)-.1 F(delayed.)
 (arning message has been sent announcing that the mail has been)-.1 F(delayed.)
-108 164.4 Q 31($A)72 180.6 S .83(macro de\214nition.)118.55 180.6 R .83(The v)
-5.83 F .829(alues of certain macros \(as of this writing, only)-.25 F F0($r)
-3.329 E F1(and)3.329 E F0($s)3.329 E F1 3.329(\)a)C .829(re passed)466.241
-180.6 R(through to the queue run phase.)108 192.6 Q 29.33(BT)72 208.8 S .924
-(he body type.)114.11 208.8 R .925(The remainder of the line is a te)5.924 F
-.925(xt string de\214ning the body type.)-.15 F .925(If this \214eld is)5.925 F
+108 164.4 Q 31($A)72 180.6 S .829(macro de\214nition.)118.549 180.6 R .829
+(The v)5.829 F .829(alues of certain macros \(as of this writing, only)-.25 F
+F0($r)3.33 E F1(and)3.33 E F0($s)3.33 E F1 3.33(\)a)C .83(re passed)466.24
+180.6 R(through to the queue run phase.)108 192.6 Q 29.33(BT)72 208.8 S .925
+(he body type.)114.11 208.8 R .925(The remainder of the line is a te)5.925 F
+.925(xt string de\214ning the body type.)-.15 F .924(If this \214eld is)5.924 F
 .009(missing, the body type is assumed to be \231unde\214ned\232 and no specia\
 .009(missing, the body type is assumed to be \231unde\214ned\232 and no specia\
-l processing is attempted.)108 220.8 R(Le)5.008 E -.05(ga)-.15 G(l).05 E -.25
-(va)108 232.8 S(lues are \2317BIT\232 and \2318BITMIME\232.).25 E 4.072
-(As an e)97 249 R 4.072(xample, the follo)-.15 F 4.073
+l processing is attempted.)108 220.8 R(Le)5.009 E -.05(ga)-.15 G(l).05 E -.25
+(va)108 232.8 S(lues are \2317BIT\232 and \2318BITMIME\232.).25 E 4.073
+(As an e)97 249 R 4.073(xample, the follo)-.15 F 4.072
 (wing is a queue \214le sent to \231eric@mammoth.Berk)-.25 F(ele)-.1 E -.65(y.)
 (wing is a queue \214le sent to \231eric@mammoth.Berk)-.25 F(ele)-.1 E -.65(y.)
--.15 G 4.073(EDU\232 and).65 F(\231bostic@ok)72 263 Q(eef)-.1 E(fe.CS.Berk)-.25
+-.15 G 4.072(EDU\232 and).65 F(\231bostic@ok)72 263 Q(eef)-.1 E(fe.CS.Berk)-.25
 E(ele)-.1 E -.65(y.)-.15 G(EDU\232).65 E/F3 7/Times-Roman@0 SF(1)219.09 259 Q
 F1(:)222.59 263 Q(P835771)112 279.2 Q(T404261372)112 291.2 Q(DdfAAA13557)112
 303.2 Q(Seric)112 315.2 Q(Eo)112 327.2 Q(wner)-.25 E(-sendmail@v)-.2 E
 E(ele)-.1 E -.65(y.)-.15 G(EDU\232).65 E/F3 7/Times-Roman@0 SF(1)219.09 259 Q
 F1(:)222.59 263 Q(P835771)112 279.2 Q(T404261372)112 291.2 Q(DdfAAA13557)112
 303.2 Q(Seric)112 315.2 Q(Eo)112 327.2 Q(wner)-.25 E(-sendmail@v)-.2 E
@@ -4746,11 +4996,11 @@ F1(:)222.59 263 Q(P835771)112 279.2 Q(T404261372)112 291.2 Q(DdfAAA13557)112
 483.2 Q(.baz.de \(Eric Allman\))-.55 E(H?x?full-name: Eric Allman)112 495.2 Q
 (Hmessage-id: <9207170931.AA22757@foo.bar)112 507.2 Q(.baz.de>)-.55 E(HT)112
 519.2 Q(o: sendmail@v)-.8 E(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU)
 483.2 Q(.baz.de \(Eric Allman\))-.55 E(H?x?full-name: Eric Allman)112 495.2 Q
 (Hmessage-id: <9207170931.AA22757@foo.bar)112 507.2 Q(.baz.de>)-.55 E(HT)112
 519.2 Q(o: sendmail@v)-.8 E(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU)
-.65 E(Hsubject: this is an e)112 531.2 Q(xample message)-.15 E 1.083(This sho)
+.65 E(Hsubject: this is an e)112 531.2 Q(xample message)-.15 E 1.084(This sho)
 72 547.4 R 1.084(ws the name of the data \214le, the person who sent the messa\
 72 547.4 R 1.084(ws the name of the data \214le, the person who sent the messa\
-ge, the submission time \(in seconds)-.25 F .26
-(since January 1, 1970\), the message priority)72 559.4 R 2.76(,t)-.65 G .259
-(he message class, the recipients, and the headers for the mes-)257.03 559.4 R
+ge, the submission time \(in seconds)-.25 F .259
+(since January 1, 1970\), the message priority)72 559.4 R 2.759(,t)-.65 G .26
+(he message class, the recipients, and the headers for the mes-)257.023 559.4 R
 (sage.)72 571.4 Q .32 LW 76 669.2 72 669.2 DL 80 669.2 76 669.2 DL 84 669.2 80
 669.2 DL 88 669.2 84 669.2 DL 92 669.2 88 669.2 DL 96 669.2 92 669.2 DL 100
 669.2 96 669.2 DL 104 669.2 100 669.2 DL 108 669.2 104 669.2 DL 112 669.2 108
 (sage.)72 571.4 Q .32 LW 76 669.2 72 669.2 DL 80 669.2 76 669.2 DL 84 669.2 80
 669.2 DL 88 669.2 84 669.2 DL 92 669.2 88 669.2 DL 96 669.2 92 669.2 DL 100
 669.2 96 669.2 DL 104 669.2 100 669.2 DL 108 669.2 104 669.2 DL 112 669.2 108
@@ -4762,412 +5012,419 @@ DL 156 669.2 152 669.2 DL 160 669.2 156 669.2 DL 164 669.2 160 669.2 DL 168
 669.2 DL 184 669.2 180 669.2 DL 188 669.2 184 669.2 DL 192 669.2 188 669.2 DL
 196 669.2 192 669.2 DL 200 669.2 196 669.2 DL 204 669.2 200 669.2 DL 208 669.2
 204 669.2 DL 212 669.2 208 669.2 DL 216 669.2 212 669.2 DL/F4 5/Times-Roman@0
 669.2 DL 184 669.2 180 669.2 DL 188 669.2 184 669.2 DL 192 669.2 188 669.2 DL
 196 669.2 192 669.2 DL 200 669.2 196 669.2 DL 204 669.2 200 669.2 DL 208 669.2
 204 669.2 DL 212 669.2 208 669.2 DL 216 669.2 212 669.2 DL/F4 5/Times-Roman@0
-SF(1)93.6 679.6 Q/F5 8/Times-Roman@0 SF .719(This e)3.2 J .719
-(xample is contri)-.12 F -.12(ve)-.2 G 2.719(da).12 G .719
-(nd probably inaccurate for your en)186.968 682.8 R 2.719(vironment. Glance)
--.32 F -.12(ove)2.718 G 2.718(ri).12 G 2.718(tt)384.998 682.8 S 2.718(og)
-392.164 682.8 S .718(et an idea; nothing can replace)402.882 682.8 R
+SF(1)93.6 679.6 Q/F5 8/Times-Roman@0 SF .718(This e)3.2 J .718
+(xample is contri)-.12 F -.12(ve)-.2 G 2.718(da).12 G .718
+(nd probably inaccurate for your en)186.964 682.8 R 2.719(vironment. Glance)
+-.32 F -.12(ove)2.719 G 2.719(ri).12 G 2.719(tt)384.991 682.8 S 2.719(og)
+392.158 682.8 S .719(et an idea; nothing can replace)402.877 682.8 R
 (looking at what your o)72 692.4 Q(wn system generates.)-.2 E EP
 (looking at what your o)72 692.4 Q(wn system generates.)-.2 E EP
-%%Page: 60 57
+%%Page: 64 59
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 12/Times-Bold@0 SF 3(APPENDIX C)249.672 98.4 R(SUMMAR)198.282 141.6 Q 3(YO)
 -.42 G 3(FS)274.182 141.6 S(UPPOR)291.186 141.6 Q 3(TF)-.48 G(ILES)350.37 141.6
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 12/Times-Bold@0 SF 3(APPENDIX C)249.672 98.4 R(SUMMAR)198.282 141.6 Q 3(YO)
 -.42 G 3(FS)274.182 141.6 S(UPPOR)291.186 141.6 Q 3(TF)-.48 G(ILES)350.37 141.6
-Q/F1 10/Times-Roman@0 SF 1.519(This is a summary of the support \214les that)97
-201 R/F2 10/Times-Italic@0 SF(sendmail)4.019 E F1 1.52(creates or generates.)
-4.019 F(Man)6.52 E 4.02(yo)-.15 G 4.02(ft)444.74 201 S 1.52(hese can be)454.87
-201 R(changed by editing the sendmail.cf \214le; check there to \214nd the act\
-ual pathnames.)72 213 Q(/usr/sbin/sendmail)72 229.2 Q(The binary of)144 241.2 Q
-F2(sendmail)2.5 E F1(.)A(/usr/bin/ne)72 257.4 Q -.1(wa)-.25 G(liases).1 E 3.735
-(Al)144 269.4 S 1.235
-(ink to /usr/sbin/sendmail; causes the alias database to be reb)157.735 269.4 R
-3.734(uilt. Running)-.2 F 1.234(this pro-)3.734 F(gram is completely equi)144
+Q/F1 10/Times-Roman@0 SF 1.52(This is a summary of the support \214les that)97
+201 R/F2 10/Times-Italic@0 SF(sendmail)4.019 E F1 1.519(creates or generates.)
+4.019 F(Man)6.519 E 4.019(yo)-.15 G 4.019(ft)444.743 201 S 1.519(hese can be)
+454.872 201 R(changed by editing the sendmail.cf \214le; check there to \214nd\
+ the actual pathnames.)72 213 Q(/usr/sbin/sendmail)72 229.2 Q(The binary of)144
+241.2 Q F2(sendmail)2.5 E F1(.)A(/usr/bin/ne)72 257.4 Q -.1(wa)-.25 G(liases).1
+E 3.734(Al)144 269.4 S 1.235
+(ink to /usr/sbin/sendmail; causes the alias database to be reb)157.734 269.4 R
+3.735(uilt. Running)-.2 F 1.235(this pro-)3.735 F(gram is completely equi)144
 281.4 Q -.25(va)-.25 G(lent to gi).25 E(ving)-.25 E F2(sendmail)2.5 E F1(the)
 2.5 E/F3 10/Times-Bold@0 SF(\255bi)2.5 E F1(\215ag.)2.5 E 13.38
 281.4 Q -.25(va)-.25 G(lent to gi).25 E(ving)-.25 E F2(sendmail)2.5 E F1(the)
 2.5 E/F3 10/Times-Bold@0 SF(\255bi)2.5 E F1(\215ag.)2.5 E 13.38
-(/usr/bin/mailq Prints)72 297.6 R 3.702(al)3.702 G 1.202
-(isting of the mail queue.)181.964 297.6 R 1.203(This program is equi)6.202 F
--.25(va)-.25 G 1.203(lent to using the).25 F F3(\255bp)3.703 E F1 1.203
-(\215ag to)3.703 F F2(sendmail)144 309.6 Q F1(.)A 5.9(/etc/sendmail.cf The)72
-325.8 R(con\214guration \214le, in te)2.5 E(xtual form.)-.15 E 5.9
-(/etc/sendmail.fc The)72 342 R
-(con\214guration \214le represented as a memory image.)2.5 E
-(/usr/lib/sendmail.hf)72 358.2 Q(The SMTP help \214le.)144 370.2 Q 7
-(/etc/sendmail.st A)72 386.4 R(statistics \214le; need not be present.)2.5 E
-.89(/etc/sendmail.pid Created)72 402.6 R .318
+(/usr/bin/mailq Prints)72 297.6 R 3.703(al)3.703 G 1.203
+(isting of the mail queue.)181.966 297.6 R 1.202(This program is equi)6.203 F
+-.25(va)-.25 G 1.202(lent to using the).25 F F3(\255bp)3.702 E F1 1.202
+(\215ag to)3.702 F F2(sendmail)144 309.6 Q F1(.)A 5.9(/etc/sendmail.cf The)72
+325.8 R(con\214guration \214le, in te)2.5 E(xtual form.)-.15 E
+(/usr/lib/sendmail.hf)72 342 Q(The SMTP help \214le.)144 354 Q 7
+(/etc/sendmail.st A)72 370.2 R(statistics \214le; need not be present.)2.5 E
+.89(/etc/sendmail.pid Created)72 386.4 R .318
 (in daemon mode; it contains the process id of the current SMTP daemon.)2.818 F
 (in daemon mode; it contains the process id of the current SMTP daemon.)2.818 F
-.318(If you)5.318 F .337(use this in scripts; use `)144 414.6 R .337
-(`head \2551')-.74 F 2.838('t)-.74 G 2.838(og)285.78 414.6 S .338
-(et just the \214rst line; later v)298.618 414.6 R .338(ersions of)-.15 F F2
-(sendmail)2.838 E F1(may)2.838 E(add information to subsequent lines.)144 426.6
-Q 25.62(/etc/aliases The)72 442.8 R(te)2.5 E(xtual v)-.15 E
-(ersion of the alias \214le.)-.15 E(/etc/aliases.{pag,dir})72 459 Q
-(The alias \214le in)144 471 Q F2(dbm)2.5 E F1(\(3\) format.)1.666 E(/v)72
-487.2 Q(ar/spool/mqueue)-.25 E
-(The directory in which the mail queue and temporary \214les reside.)144 499.2
-Q(/v)72 515.4 Q(ar/spool/mqueue/qf*)-.25 E
-(Control \(queue\) \214les for messages.)144 527.4 Q(/v)72 543.6 Q
-(ar/spool/mqueue/df*)-.25 E(Data \214les.)144 555.6 Q(/v)72 571.8 Q
-(ar/spool/mqueue/tf*)-.25 E -.7(Te)144 583.8 S(mporary v).7 E
+.318(If you)5.318 F .338(use this in scripts; use `)144 398.4 R .338
+(`head \2551')-.74 F 2.838('t)-.74 G 2.838(og)285.786 398.4 S .338
+(et just the \214rst line; later v)298.624 398.4 R .337(ersions of)-.15 F F2
+(sendmail)2.837 E F1(may)2.837 E(add information to subsequent lines.)144 410.4
+Q 25.62(/etc/aliases The)72 426.6 R(te)2.5 E(xtual v)-.15 E
+(ersion of the alias \214le.)-.15 E(/etc/aliases.{pag,dir})72 442.8 Q
+(The alias \214le in)144 454.8 Q F2(dbm)2.5 E F1(\(3\) format.)1.666 E(/v)72
+471 Q(ar/spool/mqueue)-.25 E
+(The directory in which the mail queue and temporary \214les reside.)144 483 Q
+(/v)72 499.2 Q(ar/spool/mqueue/qf*)-.25 E
+(Control \(queue\) \214les for messages.)144 511.2 Q(/v)72 527.4 Q
+(ar/spool/mqueue/df*)-.25 E(Data \214les.)144 539.4 Q(/v)72 555.6 Q
+(ar/spool/mqueue/tf*)-.25 E -.7(Te)144 567.6 S(mporary v).7 E
 (ersions of the qf \214les, used during queue \214le reb)-.15 E(uild.)-.2 E(/v)
 (ersions of the qf \214les, used during queue \214le reb)-.15 E(uild.)-.2 E(/v)
-72 600 Q(ar/spool/mqueue/xf*)-.25 E 2.5(At)144 612 S
-(ranscript of the current session.)156.5 612 Q F3 193.36(SMM:08-60 Sendmail)72
-756 R(Installation and Operation Guide)2.5 E EP
-%%Page: 2 58
+72 583.8 Q(ar/spool/mqueue/xf*)-.25 E 2.5(At)144 595.8 S
+(ranscript of the current session.)156.5 595.8 Q F3 193.36(SMM:08-64 Sendmail)
+72 756 R(Installation and Operation Guide)2.5 E EP
+%%Page: 2 60
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF 198.36(SMM:08-2 Sendmail)72 60 R
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Bold@0 SF 198.36(SMM:08-2 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 12/Times-Roman@0 SF -1.116(TA)
-263.226 98.4 S(BLE OF CONTENTS)1.116 E/F2 10/Times-Roman@0 SF 2.5(1. B)72 124.8
-R(ASIC INST)-.35 E(ALLA)-.93 E 1.18(TION .....................................\
-..........................................................................)
--1.11 F(5)499 124.8 Q 2.5(1.1. Compiling)87 139.2 R .43(Sendmail .............\
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF
+(This page intentionally left blank;)256.225 300 Q
+(replace it with a blank sheet for double-sided output.)218.6 312 Q EP
+%%Page: 3 61
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-3)457.9 60 Q/F1 12/Times-Roman@0 SF -1.116(TA)263.226 98.4 S
+(BLE OF CONTENTS)1.116 E/F2 10/Times-Roman@0 SF 2.5(1. B)72 124.8 R(ASIC INST)
+-.35 E(ALLA)-.93 E 1.18(TION .................................................\
+..............................................................)-1.11 F(7)499
+124.8 Q 2.5(1.1. Compiling)87 139.2 R .43(Sendmail ...........................\
 ..............................................................................\
 ..............................................................................\
-...................)2.5 F(5)499 139.2 Q 2.5(1.1.1. Old)102 153.6 R -.15(ve)2.5
-G(rsions of mak).15 E 2.93(e.)-.1 G 28.5(.....................................\
-.............................................................. 5)220.5 153.6 R
+.....)2.5 F(7)499 139.2 Q 2.5(1.1.1. Old)102 153.6 R -.15(ve)2.5 G
+(rsions of mak).15 E 2.93(e.)-.1 G 28.5(......................................\
+............................................................. 7)220.5 153.6 R
 2.5(1.1.2. Compilation)102 168 R 2.1(\215ags .................................\
 ........................................................................)2.5 F
 2.5(1.1.2. Compilation)102 168 R 2.1(\215ags .................................\
 ........................................................................)2.5 F
-(5)499 168 Q 2.5(1.1.3. Compilation)102 182.4 R(and installation)2.5 E 28.5(..\
+(7)499 168 Q 2.5(1.1.3. Compilation)102 182.4 R(and installation)2.5 E 28.5(..\
 ..............................................................................\
 ..............................................................................\
-........ 6)4.6 F 2.5(1.2. Con\214guration)87 196.8 R .99(Files ...............\
+........ 8)4.6 F 2.5(1.2. Con\214guration)87 196.8 R .99(Files ...............\
 ..............................................................................\
 ..............................................................................\
-...................)2.5 F(6)499 196.8 Q 2.5(1.3. Details)87 211.2 R
+...................)2.5 F(8)499 196.8 Q 2.5(1.3. Details)87 211.2 R
 (of Installation Files)2.5 E 28.5(............................................\
 (of Installation Files)2.5 E 28.5(............................................\
-....................................................... 7)4.89 F 2.5
+....................................................... 9)4.89 F 2.5
 (1.3.1. /usr/sbin/sendmail)102 225.6 R 28.5(..................................\
 (1.3.1. /usr/sbin/sendmail)102 225.6 R 28.5(..................................\
-....................................................................... 7)2.66
-F 2.5(1.3.2. /etc/sendmail.cf)102 240 R 28.5(.................................\
-........................................................................... 8)
-4.9 F 2.5(1.3.3. /usr/ucb/ne)102 254.4 R -.1(wa)-.25 G .53(liases ............\
+....................................................................... 9)2.66
+F 2.5(1.3.2. /etc/sendmail.cf)102 240 R 23.5(.................................\
+........................................................................... 10)
+4.9 F 2.5(1.3.3. /usr/bin/ne)102 254.4 R -.1(wa)-.25 G 2.19(liases ...........\
 ..............................................................................\
 ..............................................................................\
-.............).1 F(8)499 254.4 Q 2.5(1.3.4. /v)102 268.8 R 1.81(ar/spool/mqueu\
-e ............................................................................\
-............................)-.25 F(8)499 268.8 Q 2.5(1.3.5. /etc/aliases*)102
-283.2 R 28.5(.................................................................\
-................................................. 8)4.62 F 2.5
-(1.3.6. /etc/sendmail.fc)102 297.6 R 28.5(....................................\
-........................................................................ 8)4.9
-F 2.5(1.3.7. /etc/rc)102 312 R 28.5(..........................................\
+..............).1 F(10)494 254.4 Q 2.5(1.3.4. /v)102 268.8 R 1.81(ar/spool/mqu\
+eue ..........................................................................\
+..............................)-.25 F(10)494 268.8 Q 2.5(1.3.5. /etc/aliases*)
+102 283.2 R 23.5(.............................................................\
+..................................................... 10)4.62 F 2.5
+(1.3.6. /etc/rc)102 297.6 R 23.5(.............................................\
 ..............................................................................\
 ..............................................................................\
-.... 9)3.51 F 2.5(1.3.8. /usr/lib/sendmail.hf)102 326.4 R 23.5(...............\
+. 10)3.51 F 2.5(1.3.7. /usr/lib/sendmail.hf)102 312 R 23.5(...................\
 ..............................................................................\
 ..............................................................................\
-.......... 10)2.94 F 2.5(1.3.9. /etc/sendmail.st)102 340.8 R 23.5(............\
+...... 12)2.94 F 2.5(1.3.8. /etc/sendmail.st)102 326.4 R 23.5(................\
 ..............................................................................\
 ..............................................................................\
-................... 10)3.5 F 2.5(1.3.10. /usr/ucb/ne)102 355.2 R -.1(wa)-.25 G
-.53(liases ...................................................................\
-..................................).1 F(11)494 355.2 Q 2.5
-(1.3.11. /usr/ucb/mailq)102 369.6 R 23.5(.....................................\
-........................................................................ 11)
-3.22 F 2.5(2. NORMAL)72 384 R(OPERA)2.5 E 1.56(TIONS .........................\
+............... 13)3.5 F 2.5(1.3.9. /usr/bin/ne)102 340.8 R -.1(wa)-.25 G 2.19
+(liases ......................................................................\
+.................................).1 F(13)494 340.8 Q 2.5
+(1.3.10. /usr/bin/mailq)102 355.2 R 23.5(.....................................\
+........................................................................ 13)
+4.88 F 2.5(2. NORMAL)72 369.6 R(OPERA)2.5 E 1.56(TIONS .......................\
 ..............................................................................\
 ..............................................................................\
-......)-1.11 F(11)494 384 Q 2.5(2.1. `)87 398.4 R(`Quick')-.74 E 2.5('C)-.74 G
-(on\214guration Startup)152.45 398.4 Q 23.5(..................................\
-........................................................... 11)2.77 F 2.5
-(2.2. The)87 412.8 R(System Log)2.5 E 23.5(...................................\
+........)-1.11 F(13)494 369.6 Q 2.5(2.1. The)87 384 R(System Log)2.5 E 23.5(..\
 ..............................................................................\
 ..............................................................................\
-... 11)4.89 F 2.5(2.2.1. F)102 427.2 R 2.26(ormat ............................\
+.................................... 13)4.89 F 2.5(2.1.1. F)102 398.4 R 2.26(o\
+rmat .........................................................................\
+.................................................)-.15 F(13)494 398.4 Q 2.5
+(2.1.2. Le)102 412.8 R -.15(ve)-.25 G 2.24(ls ................................\
 ..............................................................................\
 ..............................................................................\
-................)-.15 F(11)494 427.2 Q 2.5(2.2.2. Le)102 441.6 R -.15(ve)-.25 G
-2.24(ls ......................................................................\
-.....................................................).15 F(11)494 441.6 Q 2.5
-(2.3. The)87 456 R(Mail Queue)2.5 E 23.5(.....................................\
+.............).15 F(13)494 412.8 Q 2.5(2.2. The)87 427.2 R(Mail Queue)2.5 E
+23.5(.........................................................................\
+............................................ 13)2.96 F 2.5(2.2.1. Printing)102
+441.6 R(the queue)2.5 E 23.5(.................................................\
+........................................................ 13)2.67 F 2.5
+(2.2.2. F)102 456 R(orcing the queue)-.15 E 23.5(.............................\
+............................................................................ 1\
+4)3.94 F 2.5(2.3. The)87 470.4 R(Alias Database)2.5 E 23.5(...................\
 ..............................................................................\
 ..............................................................................\
-.. 11)2.96 F 2.5(2.3.1. Printing)102 470.4 R(the queue)2.5 E 23.5(............\
+............... 14)2.69 F 2.5(2.3.1. Reb)102 484.8 R
+(uilding the alias database)-.2 E 23.5(.......................................\
+................................................ 15)4.27 F 2.5
+(2.3.2. Potential)102 499.2 R .72(problems ...................................\
+.....................................................................)2.5 F(15)
+494 499.2 Q 2.5(2.3.3. List)102 513.6 R -.25(ow)2.5 G 1.81(ners ..............\
 ..............................................................................\
 ..............................................................................\
-............... 12)2.67 F 2.5(2.3.2. F)102 484.8 R(orcing the queue)-.15 E 23.5
-(.............................................................................\
-............................ 12)3.94 F 2.5(2.4. The)87 499.2 R(Alias Database)
-2.5 E 23.5(...................................................................\
-............................................. 12)2.69 F 2.5(2.4.1. Reb)102
-513.6 R(uilding the alias database)-.2 E 23.5(................................\
-....................................................... 13)4.27 F 2.5
-(2.4.2. Potential)102 528 R .72(problems .....................................\
-...................................................................)2.5 F(13)
-494 528 Q 2.5(2.4.3. List)102 542.4 R -.25(ow)2.5 G 1.81(ners ................\
-..............................................................................\
-.....................).25 F(13)494 542.4 Q 2.5(2.5. User)87 556.8 R
+.......................).25 F(15)494 513.6 Q 2.5(2.4. User)87 528 R
 (Information Database)2.5 E 23.5(.............................................\
 (Information Database)2.5 E 23.5(.............................................\
-....................................................... 14)2.7 F 2.5(2.6. Per)
-87 571.2 R(-User F)-.2 E(orw)-.15 E(arding \(.forw)-.1 E(ard Files\))-.1 E 23.5
+....................................................... 16)2.7 F 2.5(2.5. Per)
+87 542.4 R(-User F)-.2 E(orw)-.15 E(arding \(.forw)-.1 E(ard Files\))-.1 E 23.5
 (.............................................................................\
 (.............................................................................\
-...... 14)4.09 F 2.5(2.7. Special)87 585.6 R(Header Lines)2.5 E 23.5(.........\
-..............................................................................\
-...................... 14)2.97 F 2.5(2.7.1. Return-Receipt-T)102 600 R .98(o: \
+...... 16)4.09 F 2.5(2.6. Special)87 556.8 R(Header Lines)2.5 E 23.5(.........\
 ..............................................................................\
 ..............................................................................\
-.........................)-.8 F(14)494 600 Q 2.5(2.7.2. Errors-T)102 614.4 R
-2.09(o: ......................................................................\
-...............................................)-.8 F(14)494 614.4 Q 2.5
-(2.7.3. Apparently-T)102 628.8 R 2.09(o: .....................................\
-........................................................................)-.8 F
-(15)494 628.8 Q 2.5(2.8. IDENT)87 643.2 R(Protocol Support)2.5 E 23.5(........\
+...................... 16)2.97 F 2.5(2.6.1. Return-Receipt-T)102 571.2 R .98(o\
+: ............................................................................\
+...........................)-.8 F(16)494 571.2 Q 2.5(2.6.2. Errors-T)102 585.6
+R 2.09(o: ....................................................................\
+.................................................)-.8 F(16)494 585.6 Q 2.5
+(2.6.3. Apparently-T)102 600 R 2.09(o: .......................................\
+......................................................................)-.8 F
+(17)494 600 Q 2.5(2.7. IDENT)87 614.4 R(Protocol Support)2.5 E 23.5(..........\
 ..............................................................................\
 ..............................................................................\
-................. 15)2.95 F 2.5(3. ARGUMENTS)72 657.6 R 23.5(.................\
+............... 17)2.95 F 2.5(3. ARGUMENTS)72 628.8 R 23.5(...................\
 ..............................................................................\
 ..............................................................................\
-................................ 15)3.78 F 2.5(3.1. Queue)87 672 R(Interv)2.5 E
+.............................. 17)3.78 F 2.5(3.1. Queue)87 643.2 R(Interv)2.5 E
 1.55(al ......................................................................\
 1.55(al ......................................................................\
-.................................................)-.25 F(15)494 672 Q 2.5
-(3.2. Daemon)87 686.4 R 1.29(Mode ............................................\
+.................................................)-.25 F(17)494 643.2 Q 2.5
+(3.2. Daemon)87 657.6 R 1.29(Mode ............................................\
 ...........................................................................)2.5
 ...........................................................................)2.5
-F(15)494 686.4 Q 2.5(3.3. F)87 700.8 R(orcing the Queue)-.15 E 23.5(..........\
+F(17)494 657.6 Q 2.5(3.3. F)87 672 R(orcing the Queue)-.15 E 23.5(............\
+..............................................................................\
+....................... 18)4.22 F 2.5(3.4. Deb)87 686.4 R 1.76(ugging ........\
 ..............................................................................\
 ..............................................................................\
-......................... 16)4.22 F 2.5(3.4. Deb)87 715.2 R 1.76(ugging ......\
+.......................................)-.2 F(18)494 686.4 Q 2.5(3.5. T)87
+700.8 R(rying a Dif)-.35 E(ferent Con\214guration File)-.25 E 23.5(...........\
+........................................................................ 18)
+4.67 F 2.5(3.6. Changing)87 715.2 R(the V)2.5 E(alues of Options)-1.11 E 23.5(\
 ..............................................................................\
 ..............................................................................\
-.........................................)-.2 F(16)494 715.2 Q EP
-%%Page: 3 59
+.............. 18)3.23 F EP
+%%Page: 4 62
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-3)457.9 60 Q/F1 10/Times-Roman@0 SF 2.5(3.5. T)87 96 R(rying a Dif)-.35
-E(ferent Con\214guration File)-.25 E 23.5(....................................\
-............................................... 16)4.67 F 2.5(3.6. Changing)87
-110.4 R(the V)2.5 E(alues of Options)-1.11 E 23.5(............................\
-................................................................ 16)3.23 F 2.5
-(3.7. Logging)87 124.8 R -.35(Tr)2.5 G(af).35 E .5(\214c .....................\
+/F0 10/Times-Bold@0 SF 198.36(SMM:08-4 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5
+(3.7. Logging)87 96 R -.35(Tr)2.5 G(af).35 E .5(\214c ........................\
 ..............................................................................\
 ..............................................................................\
-...................)-.25 F(16)494 124.8 Q 2.5(4. TUNING)72 139.2 R 23.5(......\
+................)-.25 F(18)494 96 Q 2.5(4. TUNING)72 110.4 R 23.5(............\
 ..............................................................................\
 ..............................................................................\
-..................................................... 17)2.68 F 2.5(4.1. T)87
-153.6 R 1.07(imeouts .........................................................\
-.......................................................................)-.35 F
-(17)494 153.6 Q 2.5(4.1.1. Queue)102 168 R(interv)2.5 E 2.1(al ...............\
+............................................... 19)2.68 F 2.5(4.1. T)87 124.8 R
+1.07(imeouts .................................................................\
+...............................................................)-.35 F(19)494
+124.8 Q 2.5(4.1.1. Queue)102 139.2 R(interv)2.5 E 2.1(al .....................\
 ..............................................................................\
 ..............................................................................\
-.................)-.25 F(17)494 168 Q 2.5(4.1.2. Read)102 182.4 R 1(timeouts .\
+...........)-.25 F(19)494 139.2 Q 2.5(4.1.2. Read)102 153.6 R 1(timeouts .....\
 ..............................................................................\
 ..............................................................................\
-................................)2.5 F(17)494 182.4 Q 2.5(4.1.3. Message)102
-196.8 R 1.56(timeouts ........................................................\
-.................................................)2.5 F(18)494 196.8 Q 2.5
-(4.2. F)87 211.2 R(orking During Queue Runs)-.15 E 23.5(......................\
-........................................................................... 19)
-4.49 F 2.5(4.3. Queue)87 225.6 R .73(Priorities ..............................\
+............................)2.5 F(19)494 153.6 Q 2.5(4.1.3. Message)102 168 R
+1.56(timeouts ................................................................\
+.........................................)2.5 F(20)494 168 Q 2.5(4.2. F)87
+182.4 R(orking During Queue Runs)-.15 E 23.5(.................................\
+................................................................ 21)4.49 F 2.5
+(4.3. Queue)87 196.8 R .73(Priorities ........................................\
+.............................................................................)
+2.5 F(21)494 196.8 Q 2.5(4.4. Load)87 211.2 R .44(Limiting ...................\
 ..............................................................................\
 ..............................................................................\
-.........)2.5 F(19)494 225.6 Q 2.5(4.4. Load)87 240 R .44(Limiting ...........\
+.......................)2.5 F(21)494 211.2 Q 2.5(4.5. Deli)87 225.6 R -.15(ve)
+-.25 G(ry Mode).15 E 23.5(....................................................\
+................................................................... 21)3.08 F
+2.5(4.6. Log)87 240 R(Le)2.5 E -.15(ve)-.25 G 2.52(l.).15 G 23.5(.............\
 ..............................................................................\
 ..............................................................................\
-...............................)2.5 F(19)494 240 Q 2.5(4.5. Deli)87 254.4 R
--.15(ve)-.25 G(ry Mode).15 E 23.5(............................................\
-........................................................................... 19)
-3.08 F 2.5(4.6. Log)87 268.8 R(Le)2.5 E -.15(ve)-.25 G 2.52(l.).15 G 23.5(....\
+................................... 22)153 240 R 2.5(4.7. File)87 254.4 R .72(\
+Modes ........................................................................\
+.....................................................)2.5 F(22)494 254.4 Q 2.5
+(4.7.1. T)102 268.8 R 2.5(os)-.8 G(uid or not to suid?)146.2 268.8 Q 23.5(....\
 ..............................................................................\
 ..............................................................................\
-............................................ 20)153 268.8 R 2.5(4.7. File)87
-283.2 R .72(Modes ............................................................\
-.................................................................)2.5 F(20)494
-283.2 Q 2.5(4.7.1. T)102 297.6 R 2.5(os)-.8 G(uid or not to suid?)146.2 297.6 Q
-23.5(.........................................................................\
-........................ 20)6.52 F 2.5(4.7.2. Should)102 312 R
+............... 22)6.52 F 2.5(4.7.2. Should)102 283.2 R
 (my alias database be writable?)2.5 E 23.5
 (my alias database be writable?)2.5 E 23.5
-(........................................................................ 20)
-5.47 F 2.5(4.8. Connection)87 326.4 R 1.56(Caching ...........................\
+(........................................................................ 22)
+5.47 F 2.5(4.8. Connection)87 297.6 R 1.56(Caching ...........................\
 ..............................................................................\
 ..............................................................................\
-.....)2.5 F(21)494 326.4 Q 2.5(4.9. Name)87 340.8 R(Serv)2.5 E(er Access)-.15 E
+.....)2.5 F(23)494 297.6 Q 2.5(4.9. Name)87 312 R(Serv)2.5 E(er Access)-.15 E
 23.5(.........................................................................\
 23.5(.........................................................................\
-..................................... 21)2.85 F 2.5(4.10. Mo)87 355.2 R
+..................................... 23)2.85 F 2.5(4.10. Mo)87 326.4 R
 (ving the Per)-.15 E(-User F)-.2 E(orw)-.15 E(ard Files)-.1 E 23.5(...........\
 (ving the Per)-.15 E(-User F)-.2 E(orw)-.15 E(ard Files)-.1 E 23.5(...........\
-......................................................................... 22)
-3.84 F 2.5(4.11. Free)87 369.6 R 1.85(Space ..................................\
+......................................................................... 24)
+3.84 F 2.5(4.11. Free)87 340.8 R 1.85(Space ..................................\
 ..............................................................................\
 ..............................................................................\
-...........)2.5 F(22)494 369.6 Q 2.5(4.12. Pri)87 384 R -.25(va)-.25 G .3 -.15
-(cy F).25 H 1.93(lags ........................................................\
-...............................................................).15 F(22)494
-384 Q 2.5(4.13. Send)87 398.4 R(to Me T)2.5 E 2.08(oo ........................\
+...........)2.5 F(24)494 340.8 Q 2.5(4.12. Pri)87 355.2 R -.25(va)-.25 G .3
+-.15(cy F).25 H 1.93(lags ....................................................\
+...................................................................).15 F(24)
+494 355.2 Q 2.5(4.13. Send)87 369.6 R(to Me T)2.5 E 2.08(oo ..................\
 ..............................................................................\
 ..............................................................................\
-.............)-.8 F(22)494 398.4 Q 2.5(5. THE)72 412.8 R
+...................)-.8 F(25)494 369.6 Q 2.5(5. THE)72 384 R
 (WHOLE SCOOP ON THE CONFIGURA)2.5 E(TION FILE)-1.11 E 23.5
 (WHOLE SCOOP ON THE CONFIGURA)2.5 E(TION FILE)-1.11 E 23.5
-(........................................................ 23)4.64 F 2.5
-(5.1. Con\214guration)87 427.2 R(File Lines)2.5 E 23.5(.......................\
+(........................................................ 25)4.64 F 2.5
+(5.1. Con\214guration)87 398.4 R(File Lines)2.5 E 23.5(.......................\
 ..............................................................................\
 ..............................................................................\
-... 23)2.66 F 2.5(5.1.1. R)102 441.6 R(and S \212 re)2.5 E(writing rules)-.25 E
+... 25)2.66 F 2.5(5.1.1. R)102 412.8 R(and S \212 re)2.5 E(writing rules)-.25 E
 23.5(.........................................................................\
 23.5(.........................................................................\
-................... 23)3.48 F 2.5(5.1.1.1. The)117 456 R(left hand side)2.5 E
+................... 25)3.48 F 2.5(5.1.1.1. The)117 427.2 R(left hand side)2.5 E
 23.5(.........................................................................\
 23.5(.........................................................................\
-....................... 23)4.07 F 2.5(5.1.1.2. The)117 470.4 R(right hand side)
+....................... 25)4.07 F 2.5(5.1.1.2. The)117 441.6 R(right hand side)
 2.5 E 23.5(...................................................................\
 2.5 E 23.5(...................................................................\
-........................... 24)3.51 F 2.5(5.1.1.3. Semantics)117 484.8 R(of re)
+........................... 26)3.51 F 2.5(5.1.1.3. Semantics)117 456 R(of re)
 2.5 E(writing rule sets)-.25 E 23.5
 2.5 E(writing rule sets)-.25 E 23.5
-(.......................................................................... 25)
-4.6 F 2.5(5.1.1.4. IPC)117 499.2 R 1(mailers .................................\
+(.......................................................................... 27)
+4.6 F 2.5(5.1.1.4. IPC)117 470.4 R 1(mailers .................................\
 .........................................................................)2.5 F
 .........................................................................)2.5 F
-(26)494 499.2 Q 2.5(5.1.2. D)102 513.6 R 2.5<8a64>2.5 G(e\214ne macro)156.72
-513.6 Q 23.5(.................................................................\
-....................................... 26)4.35 F 2.5(5.1.3. C)102 528 R
+(28)494 470.4 Q 2.5(5.1.2. D)102 484.8 R 2.5<8a64>2.5 G(e\214ne macro)156.72
+484.8 Q 23.5(.................................................................\
+....................................... 28)4.35 F 2.5(5.1.3. C)102 499.2 R
 (and F \212 de\214ne classes)2.5 E 23.5(......................................\
 (and F \212 de\214ne classes)2.5 E 23.5(......................................\
-....................................................... 28)4.62 F 2.5(5.1.4. M)
-102 542.4 R 2.5<8a64>2.5 G(e\214ne mailer)158.39 542.4 Q 23.5(................\
-..............................................................................\
-......... 29)4.62 F 2.5(5.1.5. H)102 556.8 R 2.5<8a64>2.5 G(e\214ne header)
-156.72 556.8 Q 23.5(..........................................................\
-.............................................. 31)2.69 F 2.5(5.1.6. O)102 571.2
-R 2.5<8a73>2.5 G(et option)155.61 571.2 Q 23.5(...............................\
+....................................................... 31)4.62 F 2.5(5.1.4. M)
+102 513.6 R 2.5<8a64>2.5 G(e\214ne mailer)158.39 513.6 Q 23.5(................\
 ..............................................................................\
 ..............................................................................\
- 31)4.61 F 2.5(5.1.7. P)102 585.6 R 2.5<8a70>2.5 G(recedence de\214nitions)
-155.06 585.6 Q 23.5(..........................................................\
-................................ 35)3.24 F 2.5(5.1.8. V)102 600 R 2.5<8a63>2.5
-G(on\214guration v)156.16 600 Q(ersion le)-.15 E -.15(ve)-.25 G 4.62(l.).15 G
+......... 31)4.62 F 2.5(5.1.5. H)102 528 R 2.5<8a64>2.5 G(e\214ne header)156.72
+528 Q 23.5(...................................................................\
+..................................... 34)2.69 F 2.5(5.1.6. O)102 542.4 R 2.5
+<8a73>2.5 G(et option)155.61 542.4 Q 23.5(....................................\
+......................................................................... 34)
+4.61 F 2.5(5.1.7. P)102 556.8 R 2.5<8a70>2.5 G(recedence de\214nitions)155.06
+556.8 Q 23.5(.................................................................\
+......................... 38)3.24 F 2.5(5.1.8. V)102 571.2 R 2.5<8a63>2.5 G
+(on\214guration v)156.16 571.2 Q(ersion le)-.15 E -.15(ve)-.25 G 4.62(l.).15 G
 23.5(.........................................................................\
 23.5(.........................................................................\
-........ 36)265.5 600 R 2.5(5.1.9. K)102 614.4 R 2.5<8a6b>2.5 G .3 -.15
-(ey \214)156.62 614.4 T(le declaration).15 E 23.5(............................\
-.................................................................. 36)4.88 F
-2.5(5.2. Building)87 628.8 R 2.5(aC)2.5 G(on\214guration File From Scratch)
-158.12 628.8 Q 23.5
-(......................................................................... 38)
-3.77 F 2.5(5.2.1. What)102 643.2 R(you are trying to do)2.5 E 23.5(...........\
+........ 39)265.5 571.2 R 2.5(5.1.9. K)102 585.6 R 2.5<8a6b>2.5 G .3 -.15
+(ey \214)156.62 585.6 T(le declaration).15 E 23.5(............................\
+.................................................................. 40)4.88 F
+2.5(5.2. Building)87 600 R 2.5(aC)2.5 G(on\214guration File From Scratch)158.12
+600 Q 23.5
+(......................................................................... 42)
+3.77 F 2.5(5.2.1. What)102 614.4 R(you are trying to do)2.5 E 23.5(...........\
 ..............................................................................\
 ..............................................................................\
-.... 38)2.96 F 2.5(5.2.2. Philosoph)102 657.6 R 3.54(y.)-.05 G 23.5(..........\
+.... 42)2.96 F 2.5(5.2.2. Philosoph)102 628.8 R 3.54(y.)-.05 G 23.5(..........\
 ..............................................................................\
 ..............................................................................\
-........................... 39)180.5 657.6 R 2.5(5.2.2.1. Lar)117 672 R
-(ge site, man)-.18 E 2.5(yh)-.15 G(osts \212 minimum information)226.1 672 Q
-23.5(................................................ 39)2.72 F 2.5
-(5.2.2.2. Small)117 686.4 R(site \212 complete information)2.5 E 23.5
-(.................................................................... 40)4.89 F
-2.5(5.2.2.3. Single)117 700.8 R 1.27(host ....................................\
-.......................................................................)2.5 F
-(40)494 700.8 Q 2.5(5.2.2.4. A)117 715.2 R(completely dif)2.5 E
-(ferent philosoph)-.25 E 3.26(y.)-.05 G 23.5
-(..................................................................... 40)295.5
-715.2 R EP
-%%Page: 4 60
+........................... 42)180.5 628.8 R 2.5(5.2.2.1. Lar)117 643.2 R
+(ge site, man)-.18 E 2.5(yh)-.15 G(osts \212 minimum information)226.1 643.2 Q
+23.5(................................................ 42)2.72 F 2.5
+(5.2.2.2. Small)117 657.6 R(site \212 complete information)2.5 E 23.5
+(.................................................................... 43)4.89 F
+2.5(5.2.2.3. Single)117 672 R 1.27(host ......................................\
+.....................................................................)2.5 F(43)
+494 672 Q 2.5(5.2.2.4. A)117 686.4 R(completely dif)2.5 E(ferent philosoph)-.25
+E 3.26(y.)-.05 G 23.5
+(..................................................................... 43)295.5
+686.4 R 2.5(5.2.3. Rele)102 700.8 R -.25(va)-.25 G(nt issues).25 E 23.5(......\
+..............................................................................\
+......................... 44)4.56 F 2.5(5.2.4. Ho)102 715.2 R 2.5(wt)-.25 G 2.5
+(op)153.97 715.2 S 2.38(roceed ...............................................\
+.............................................................)166.47 715.2 R
+(44)494 715.2 Q EP
+%%Page: 5 63
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF 198.36(SMM:08-4 Sendmail)72 60 R
-(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5(5.2.3. Rele)
-102 96 R -.25(va)-.25 G(nt issues).25 E 23.5(.................................\
-............................................................................ 4\
-0)4.56 F 2.5(5.2.4. Ho)102 110.4 R 2.5(wt)-.25 G 2.5(op)153.97 110.4 S 2.38(ro\
-ceed .........................................................................\
-...................................)166.47 110.4 R(41)494 110.4 Q 2.5(5.2.5. T)
-102 124.8 R(esting the re)-.7 E(writing rules \212 the \255bt \215ag)-.25 E
-23.5(.................................................................... 41)
-2.99 F 2.5(5.2.6. Building)102 139.2 R(mailer descriptions)2.5 E 23.5(........\
-..............................................................................\
-.. 42)4.61 F 2.5(5.3. The)87 153.6 R(User Database)2.5 E 23.5(................\
+/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
+(SMM:08-5)457.9 60 Q/F1 10/Times-Roman@0 SF 2.5(5.2.5. T)102 96 R
+(esting the re)-.7 E(writing rules \212 the \255bt \215ag)-.25 E 23.5
+(.................................................................... 44)2.99 F
+2.5(5.2.6. Building)102 110.4 R(mailer descriptions)2.5 E 23.5(...............\
+......................................................................... 45)
+4.61 F 2.5(5.3. The)87 124.8 R(User Database)2.5 E 23.5(......................\
 ..............................................................................\
 ..............................................................................\
-.................. 43)4.92 F 2.5(5.3.1. Structure)102 168 R
-(of the user database)2.5 E 23.5(.............................................\
-.......................................... 43)2.7 F 2.5(5.3.2. User)102 182.4 R
-(database semantics)2.5 E 23.5(...............................................\
-................................................ 44)3.25 F 2.5(6. O)72 196.8 R
-(THER CONFIGURA)-.4 E 1.97(TION ..............................................\
-...........................................................)-1.11 F(44)494
-196.8 Q 2.5(6.1. P)87 211.2 R(arameters in src/Mak)-.15 E 1.55(e\214le .......\
+............ 47)4.92 F 2.5(5.3.1. Structure)102 139.2 R(of the user database)
+2.5 E 23.5(...................................................................\
+.................... 47)2.7 F 2.5(5.3.2. User)102 153.6 R(database semantics)
+2.5 E 23.5(...................................................................\
+............................ 47)3.25 F 2.5(5.3.3. Creating)102 170 R
+(the database)2.5 E/F2 7/Times-Roman@0 SF(17)215.59 166 Q F1 23.5(............\
 ..............................................................................\
 ..............................................................................\
-...............)-.1 F(44)494 211.2 Q 2.5(6.2. P)87 225.6 R
-(arameters in src/conf.h)-.15 E 23.5(.........................................\
-............................................................... 45)4.23 F 2.5
-(6.3. Con\214guration)87 240 R(in src/conf.c)2.5 E 23.5(......................\
+....... 48)225.5 170 R 2.5(6. O)72 184.4 R(THER CONFIGURA)-.4 E 1.97(TION ....\
 ..............................................................................\
 ..............................................................................\
- 47)3.51 F 2.5(6.3.1. Built-in)102 254.4 R(Header Semantics)2.5 E 23.5(.......\
+.......................)-1.11 F(48)494 184.4 Q 2.5(6.1. P)87 198.8 R
+(arameters in src/Mak)-.15 E 1.55(e\214le ....................................\
+................................................................)-.1 F(48)494
+198.8 Q 2.5(6.2. P)87 213.2 R(arameters in src/conf.h)-.15 E 23.5(............\
 ..............................................................................\
 ..............................................................................\
-...... 47)4.9 F 2.5(6.3.2. Restricting)102 268.8 R(Use of Email)2.5 E 23.5(...\
+.............. 49)4.23 F 2.5(6.3. Con\214guration)87 227.6 R(in src/conf.c)2.5
+E 23.5(.......................................................................\
+............................. 51)3.51 F 2.5(6.3.1. Built-in)102 242 R
+(Header Semantics)2.5 E 23.5(.................................................\
+.......................................... 51)4.9 F 2.5(6.3.2. Restricting)102
+256.4 R(Use of Email)2.5 E 23.5(..............................................\
+................................................ 52)4.34 F 2.5(6.3.3. Load)102
+270.8 R -1.17 -.74(Av e)2.5 H(rage Computation).74 E 23.5(....................\
+...................................................................... 53)2.74
+F 2.5(6.3.4. Ne)102 285.2 R 2.5(wD)-.25 G(atabase Map Classes)157.85 285.2 Q
+23.5(.........................................................................\
+................ 53)4.89 F 2.5(6.3.5. Queueing)102 299.6 R 1.56(Function .....\
 ..............................................................................\
 ..............................................................................\
-............. 48)4.34 F 2.5(6.3.3. Load)102 283.2 R -1.17 -.74(Av e)2.5 H
-(rage Computation).74 E 23.5(.................................................\
-......................................... 49)2.74 F 2.5(6.3.4. Ne)102 297.6 R
-2.5(wD)-.25 G(atabase Map Classes)157.85 297.6 Q 23.5(........................\
-................................................................. 49)4.89 F 2.5
-(6.3.5. Queueing)102 312 R 1.56(Function .....................................\
-..................................................................)2.5 F(49)494
-312 Q 2.5(6.3.6. Refusing)102 326.4 R(Incoming SMTP Connections)2.5 E 23.5
-(....................................................................... 50)
-2.94 F 2.5(6.3.7. Load)102 340.8 R -1.17 -.74(Av e)2.5 H(rage Computation).74 E
+....................)2.5 F(53)494 299.6 Q 2.5(6.3.6. Refusing)102 314 R
+(Incoming SMTP Connections)2.5 E 23.5
+(....................................................................... 54)
+2.94 F 2.5(6.3.7. Load)102 328.4 R -1.17 -.74(Av e)2.5 H(rage Computation).74 E
 23.5(.........................................................................\
 23.5(.........................................................................\
-................. 50)2.74 F 2.5(6.4. Con\214guration)87 355.2 R
+................. 54)2.74 F 2.5(6.4. Con\214guration)87 342.8 R
 (in src/daemon.c)2.5 E 23.5(..................................................\
 (in src/daemon.c)2.5 E 23.5(..................................................\
-............................................ 50)4.62 F 2.5(7. CHANGES)72 369.6
+............................................ 54)4.62 F 2.5(7. CHANGES)72 357.2
 R(IN VERSION 8)2.5 E 23.5(....................................................\
 R(IN VERSION 8)2.5 E 23.5(....................................................\
-...................................................... 50)4.9 F 2.5
-(7.1. Connection)87 384 R 1.56(Caching .......................................\
-.......................................................................)2.5 F
-(51)494 384 Q 2.5(7.2. MX)87 398.4 R 2.39(Piggybacking .......................\
+...................................................... 54)4.9 F 2.5
+(7.1. Connection)87 371.6 R 1.56(Caching .....................................\
+.........................................................................)2.5 F
+(55)494 371.6 Q 2.5(7.2. MX)87 386 R 2.39(Piggybacking .......................\
 ..............................................................................\
 ..............................................................................\
-............)2.5 F(51)494 398.4 Q 2.5(7.3. RFC)87 412.8 R(1123 Compliance)2.5 E
+............)2.5 F(55)494 386 Q 2.5(7.3. RFC)87 400.4 R(1123 Compliance)2.5 E
 23.5(.........................................................................\
 23.5(.........................................................................\
-................................. 51)3.77 F 2.5(7.4. Extended)87 427.2 R
+................................. 55)3.77 F 2.5(7.4. Extended)87 414.8 R
 (SMTP Support)2.5 E 23.5(.....................................................\
 (SMTP Support)2.5 E 23.5(.....................................................\
-.................................................. 51)2.94 F 2.5
-(7.5. Eight-Bit)87 441.6 R .44(Clean .........................................\
+.................................................. 55)2.94 F 2.5
+(7.5. Eight-Bit)87 429.2 R .44(Clean .........................................\
 .............................................................................)
 .............................................................................)
-2.5 F(51)494 441.6 Q 2.5(7.6. User)87 456 R .47(Database .....................\
+2.5 F(55)494 429.2 Q 2.5(7.6. User)87 443.6 R .47(Database ...................\
 ..............................................................................\
 ..............................................................................\
-.....................)2.5 F(51)494 456 Q 2.5(7.7. Impro)87 470.4 R -.15(ve)-.15
-G 2.5(dB).15 G(IND Support)154.75 470.4 Q 23.5(...............................\
-........................................................................ 51)
-3.81 F 2.5(7.8. K)87 484.8 R -.15(ey)-.25 G(ed Files).15 E 23.5(..............\
+.......................)2.5 F(55)494 443.6 Q 2.5(7.7. Impro)87 458 R -.15(ve)
+-.15 G 2.5(dB).15 G(IND Support)154.75 458 Q 23.5(............................\
+........................................................................... 55)
+3.81 F 2.5(7.8. K)87 472.4 R -.15(ey)-.25 G(ed Files).15 E 23.5(..............\
 ..............................................................................\
 ..............................................................................\
-................................ 52)3.35 F 2.5(7.9. Multi-W)87 499.2 R
+................................ 56)3.35 F 2.5(7.9. Multi-W)87 486.8 R
 (ord Classes)-.8 E 23.5(......................................................\
 (ord Classes)-.8 E 23.5(......................................................\
-......................................................... 52)3.47 F 2.5
-(7.10. Deferred)87 513.6 R(Macro Expansion)2.5 E 23.5(........................\
-......................................................................... 52)
-4.65 F 2.5(7.11. IDENT)87 528 R(Protocol Support)2.5 E 23.5(..................\
+......................................................... 56)3.47 F 2.5
+(7.10. Deferred)87 501.2 R(Macro Expansion)2.5 E 23.5(........................\
+......................................................................... 56)
+4.65 F 2.5(7.11. IDENT)87 515.6 R(Protocol Support)2.5 E 23.5(................\
 ..............................................................................\
 ..............................................................................\
-..... 52)2.95 F 2.5(7.12. P)87 542.4 R(arsing Bug Fix)-.15 E .46(es ..........\
+....... 56)2.95 F 2.5(7.12. P)87 530 R(arsing Bug Fix)-.15 E .46(es ..........\
 ..............................................................................\
 ..............................................................................\
-........................)-.15 F(52)494 542.4 Q 2.5(7.13. Separate)87 556.8 R
-(En)2.5 E -.15(ve)-.4 G(lope/Header Processing).15 E 23.5(....................\
-............................................................ 52)4.37 F 2.5
-(7.14. Owner)87 571.2 R(-List Propag)-.2 E(ates to En)-.05 E -.15(ve)-.4 G 1.27
+........................)-.15 F(56)494 530 Q 2.5(7.13. Separate)87 544.4 R(En)
+2.5 E -.15(ve)-.4 G(lope/Header Processing).15 E 23.5(........................\
+........................................................ 56)4.37 F 2.5
+(7.14. Owner)87 558.8 R(-List Propag)-.2 E(ates to En)-.05 E -.15(ve)-.4 G 1.27
 (lope ........................................................................\
 (lope ........................................................................\
-............).15 F(52)494 571.2 Q 2.5(7.15. Dynamic)87 585.6 R
+............).15 F(56)494 558.8 Q 2.5(7.15. Dynamic)87 573.2 R
 (Header Allocation)2.5 E 23.5(................................................\
 (Header Allocation)2.5 E 23.5(................................................\
-................................................ 52)3.25 F 2.5(7.16. Ne)87 600
-R 2.5(wC)-.25 G(ommand Line Flags)139.8 600 Q 23.5(...........................\
-....................................................................... 52)3.2
-F 2.5(7.17. Enhanced)87 614.4 R(Command Line Flags)2.5 E 23.5(................\
-......................................................................... 52)
-4.9 F 2.5(7.18. Ne)87 628.8 R 2.5(wa)-.25 G(nd Old Con\214guration Line T)
-137.57 628.8 Q .4(ypes .......................................................\
-.......................)-.8 F(53)494 628.8 Q 2.5(7.19. Ne)87 643.2 R 2.5(wO)
--.25 G .7(ptions .............................................................\
-...........................................................)140.35 643.2 R(53)
-494 643.2 Q 2.5(7.20. Extended)87 657.6 R 1.56(Options .......................\
+................................................ 56)3.25 F 2.5(7.16. Ne)87
+587.6 R 2.5(wC)-.25 G(ommand Line Flags)139.8 587.6 Q 23.5(...................\
+..............................................................................\
+. 56)3.2 F 2.5(7.17. Enhanced)87 602 R(Command Line Flags)2.5 E 23.5(.........\
+..............................................................................\
+.. 56)4.9 F 2.5(7.18. Ne)87 616.4 R 2.5(wa)-.25 G
+(nd Old Con\214guration Line T)137.57 616.4 Q .4(ypes ........................\
+......................................................)-.8 F(57)494 616.4 Q 2.5
+(7.19. Ne)87 630.8 R 2.5(wO)-.25 G .7(ptions .................................\
 ..............................................................................\
 ..............................................................................\
-...........)2.5 F(53)494 657.6 Q 2.5(7.21. Ne)87 672 R 2.5(wM)-.25 G
-(ailer Flags)142.02 672 Q 23.5(...............................................\
-................................................................. 53)4.04 F 2.5
-(7.22. Ne)87 686.4 R 2.5(wP)-.25 G(re-De\214ned Macros)138.69 686.4 Q 23.5(...\
+.........)140.35 630.8 R(57)494 630.8 Q 2.5(7.20. Extended)87 645.2 R 1.56(Opt\
+ions .........................................................................\
+.......................................)2.5 F(57)494 645.2 Q 2.5(7.21. Ne)87
+659.6 R 2.5(wM)-.25 G(ailer Flags)142.02 659.6 Q 23.5(........................\
 ..............................................................................\
 ..............................................................................\
-................... 54)4.06 F 2.5(7.23. Ne)87 700.8 R 2.5(wL)-.25 G(HS T)139.24
-700.8 Q(ok)-.8 E 1.33(en .....................................................\
-.............................................................)-.1 F(54)494
-700.8 Q 2.5(7.24. Bigger)87 715.2 R(Def)2.5 E(aults ..........................\
+.......... 57)4.04 F 2.5(7.22. Ne)87 674 R 2.5(wP)-.25 G(re-De\214ned Macros)
+138.69 674 Q 23.5(............................................................\
+........................................ 58)4.06 F 2.5(7.23. Ne)87 688.4 R 2.5
+(wL)-.25 G(HS T)139.24 688.4 Q(ok)-.8 E 1.33(en ..............................\
 ..............................................................................\
 ..............................................................................\
-............)-.1 E(54)494 715.2 Q EP
-%%Page: 5 61
+......)-.1 F(58)494 688.4 Q 2.5(7.24. Bigger)87 702.8 R(Def)2.5 E(aults ......\
+..............................................................................\
+................................)-.1 E(58)494 702.8 Q 2.5(7.25. Dif)87 717.2 R
+(ferent Def)-.25 E(ault T)-.1 E(uning P)-.45 E 1.99(arameters ................\
+..................................................................)-.15 F(58)
+494 717.2 Q EP
+%%Page: 6 64
 %%BeginPageSetup
 BP
 %%EndPageSetup
 %%BeginPageSetup
 BP
 %%EndPageSetup
-/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q
-(SMM:08-5)457.9 60 Q/F1 10/Times-Roman@0 SF 2.5(7.25. Dif)87 96 R(ferent Def)
--.25 E(ault T)-.1 E(uning P)-.45 E 1.99(arameters ............................\
-......................................................)-.15 F(54)494 96 Q 2.5
-(7.26. Auto-Quoting)87 110.4 R(in Addresses)2.5 E 23.5(.......................\
-.......................................................................... 54)
-3.51 F 2.5(7.27. Symbolic)87 124.8 R(Names On Error Mailer)2.5 E 23.5(........\
+/F0 10/Times-Bold@0 SF 198.36(SMM:08-6 Sendmail)72 60 R
+(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5
+(7.26. Auto-Quoting)87 96 R(in Addresses)2.5 E 23.5(..........................\
+....................................................................... 58)3.51
+F 2.5(7.27. Symbolic)87 110.4 R(Names On Error Mailer)2.5 E 23.5(.............\
+......................................................................... 58)
+4.91 F 2.5(7.28. SMTP)87 124.8 R(VRFY Doesn')2.5 E 2.5(tE)-.18 G 1.18(xpand ..\
 ..............................................................................\
 ..............................................................................\
- 54)4.91 F 2.5(7.28. SMTP)87 139.2 R(VRFY Doesn')2.5 E 2.5(tE)-.18 G 1.18(xpan\
-d ............................................................................\
-................)209.88 139.2 R(54)494 139.2 Q 2.5(7.29. [IPC])87 153.6 R
-(Mailers Allo)2.5 E 2.5(wM)-.25 G(ultiple Hosts)205.91 153.6 Q 23.5(..........\
-......................................................................... 54)
-3.75 F 2.5(7.30. Aliases)87 168 R 1.29(Extended ..............................\
+............)209.88 124.8 R(58)494 124.8 Q 2.5(7.29. [IPC])87 139.2 R
+(Mailers Allo)2.5 E 2.5(wM)-.25 G(ultiple Hosts)205.91 139.2 Q 23.5(..........\
+......................................................................... 58)
+3.75 F 2.5(7.30. Aliases)87 153.6 R 1.29(Extended ............................\
 ..............................................................................\
 ..............................................................................\
-.....)2.5 F(55)494 168 Q 2.5(7.31. Portability)87 182.4 R
+.......)2.5 F(59)494 153.6 Q 2.5(7.31. Portability)87 168 R
 (and Security Enhancements)2.5 E 23.5(........................................\
 (and Security Enhancements)2.5 E 23.5(........................................\
-....................................... 55)2.68 F 2.5(7.32. Miscellaneous)87
-196.8 R 1.29(Changes .........................................................\
-..............................................)2.5 F(55)494 196.8 Q 2.5(8. A)72
-211.2 R(CKNO)-.4 E .1(WLEDGEMENTS ............................................\
-................................................................)-.35 F(55)494
-211.2 Q(Appendix A.)72 225.6 Q(COMMAND LINE FLA)5 E 1.97(GS ..................\
+....................................... 59)2.68 F 2.5(7.32. Miscellaneous)87
+182.4 R 1.29(Changes .........................................................\
+..............................................)2.5 F(59)494 182.4 Q 2.5(8. A)72
+196.8 R(CKNO)-.4 E .1(WLEDGEMENTS ............................................\
+................................................................)-.35 F(59)494
+196.8 Q(Appendix A.)72 211.2 Q(COMMAND LINE FLA)5 E 1.97(GS ..................\
 .......................................................................)-.4 F
 .......................................................................)-.4 F
-(56)494 225.6 Q(Appendix B.)72 240 Q -.1(QU)5 G(EUE FILE FORMA).1 E 1.38(TS ..\
+(60)494 211.2 Q(Appendix B.)72 225.6 Q -.1(QU)5 G(EUE FILE FORMA).1 E 1.38(TS \
 ..............................................................................\
 ..............................................................................\
-............)-1.11 F(58)494 240 Q(Appendix C.)72 254.4 Q(SUMMAR)5 E 2.5(YO)-.65
-G 2.5(FS)188.85 254.4 S(UPPOR)202.47 254.4 Q 2.5(TF)-.6 G 1.12(ILES ..........\
-....................................................................)248.27
-254.4 R(60)494 254.4 Q EP
+..............)-1.11 F(62)494 225.6 Q(Appendix C.)72 240 Q(SUMMAR)5 E 2.5(YO)
+-.65 G 2.5(FS)188.85 240 S(UPPOR)202.47 240 Q 2.5(TF)-.6 G 1.12(ILES .........\
+.....................................................................)248.27
+240 R(64)494 240 Q EP
 %%Trailer
 end
 %%EOF
 %%Trailer
 end
 %%EOF
index 648f1c6..2a9070f 100644 (file)
@@ -40,10 +40,9 @@ static char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)mailstats.c        8.1 (Berkeley) 6/7/93";
+static char sccsid[] = "@(#)mailstats.c        8.2 (Berkeley) 7/27/93";
 #endif /* not lint */
 
 #endif /* not lint */
 
-#include <sys/file.h>
 #include <sendmail.h>
 #include <mailstats.h>
 #include <pathnames.h>
 #include <sendmail.h>
 #include <mailstats.h>
 #include <pathnames.h>
index 1cc9b59..c4ac74e 100644 (file)
@@ -2,7 +2,7 @@
 
 PROG=  makemap
 MAN8=  makemap.8
 
 PROG=  makemap
 MAN8=  makemap.8
-CFLAGS+=-I${.CURDIR}/../src -DNEWDB
+CFLAGS+=-I${.CURDIR}/../src -DNDBM -DNEWDB
 
 .include "../../Makefile.inc"
 .include <bsd.prog.mk>
 
 .include "../../Makefile.inc"
 .include <bsd.prog.mk>
index 70ee446..2ee45c2 100644 (file)
@@ -29,7 +29,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"     @(#)makemap.8  8.1 (Berkeley) 6/17/93
+.\"     @(#)makemap.8  8.2 (Berkeley) 9/22/93
 .\"
 .Dd November 16, 1992
 .Dt MAKEMAP 8
 .\"
 .Dd November 16, 1992
 .Dt MAKEMAP 8
@@ -99,13 +99,14 @@ in the map.
 This must match the \-N flag in the sendmail.cf
 ``K'' line.
 .It Fl f
 This must match the \-N flag in the sendmail.cf
 ``K'' line.
 .It Fl f
-Fold all upper case letters in the key
-to lower case;
-this is intended to mesh with the
+Normally all upper case letters in the key
+are folded to lower case.
+This flag disables that behaviour.
+This is intended to mesh with the
 \-f flag in the
 \fBK\fP
 line in sendmail.cf.
 \-f flag in the
 \fBK\fP
 line in sendmail.cf.
-The value is not case folded.
+The value is never case folded.
 .It Fl o
 Append to an old file.
 This allows you to augment an existing file.
 .It Fl o
 Append to an old file.
 This allows you to augment an existing file.
index 7996c1a..2f008fb 100644 (file)
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)makemap.c  8.1 (Berkeley) 6/7/93";
+static char sccsid[] = "@(#)makemap.c  8.5 (Berkeley) 9/22/93";
 #endif /* not lint */
 
 #include <stdio.h>
 #include <sysexits.h>
 #endif /* not lint */
 
 #include <stdio.h>
 #include <sysexits.h>
+#include <sys/types.h>
 #include <sys/file.h>
 #include <ctype.h>
 #include <string.h>
 #include <sys/file.h>
 #include <ctype.h>
 #include <string.h>
@@ -80,11 +81,12 @@ main(argc, argv)
        bool notrunc = FALSE;
        bool allowreplace = FALSE;
        bool verbose = FALSE;
        bool notrunc = FALSE;
        bool allowreplace = FALSE;
        bool verbose = FALSE;
-       bool foldcase = FALSE;
+       bool foldcase = TRUE;
        int exitstat;
        int opt;
        char *typename;
        char *mapname;
        int exitstat;
        int opt;
        char *typename;
        char *mapname;
+       char *ext;
        int lineno;
        int st;
        int mode;
        int lineno;
        int st;
        int mode;
@@ -101,6 +103,7 @@ main(argc, argv)
        } dbp;
        union dbent key, val;
        char ibuf[BUFSIZE];
        } dbp;
        union dbent key, val;
        char ibuf[BUFSIZE];
+       char fbuf[MAXNAME];
        extern char *optarg;
        extern int optind;
 
        extern char *optarg;
        extern int optind;
 
@@ -115,7 +118,7 @@ main(argc, argv)
                        break;
 
                  case 'f':
                        break;
 
                  case 'f':
-                       foldcase = TRUE;
+                       foldcase = FALSE;
                        break;
 
                  case 'o':
                        break;
 
                  case 'o':
@@ -144,13 +147,22 @@ main(argc, argv)
        {
                typename = argv[0];
                mapname = argv[1];
        {
                typename = argv[0];
                mapname = argv[1];
+               ext = NULL;
 
                if (strcmp(typename, "dbm") == 0)
 
                if (strcmp(typename, "dbm") == 0)
+               {
                        type = T_DBM;
                        type = T_DBM;
+               }
                else if (strcmp(typename, "btree") == 0)
                else if (strcmp(typename, "btree") == 0)
+               {
                        type = T_BTREE;
                        type = T_BTREE;
+                       ext = ".db";
+               }
                else if (strcmp(typename, "hash") == 0)
                else if (strcmp(typename, "hash") == 0)
+               {
                        type = T_HASH;
                        type = T_HASH;
+                       ext = ".db";
+               }
                else
                        type = T_UNKNOWN;
        }
                else
                        type = T_UNKNOWN;
        }
@@ -178,6 +190,24 @@ main(argc, argv)
                exit(EX_UNAVAILABLE);
        }
 
                exit(EX_UNAVAILABLE);
        }
 
+       /*
+       **  Adjust file names.
+       */
+
+       if (ext != NULL)
+       {
+               int el, fl;
+
+               el = strlen(ext);
+               fl = strlen(mapname);
+               if (fl < el || strcmp(&mapname[fl - el], ext) != 0)
+               {
+                       strcpy(fbuf, mapname);
+                       strcat(fbuf, ext);
+                       mapname = fbuf;
+               }
+       }
+
        /*
        **  Create the database.
        */
        /*
        **  Create the database.
        */
index 498e171..9aab581 100644 (file)
@@ -1,8 +1,16 @@
+<<<<<<< 1.2
+#      @(#)Makefile    5.1 (Berkeley) 5/11/90
+=======
 #      @(#)Makefile    8.1 (Berkeley) 6/7/93
 #      @(#)Makefile    8.1 (Berkeley) 6/7/93
+>>>>>>> /tmp/T4010775
 
 PROG=  praliases
 CFLAGS+=-I${.CURDIR}/../src
 DPADD= ${LIBDBM}
 
 PROG=  praliases
 CFLAGS+=-I${.CURDIR}/../src
 DPADD= ${LIBDBM}
+<<<<<<< 1.2
+LDADD= -ldbm
+=======
+>>>>>>> /tmp/T4010775
 NOMAN= noman
 
 .include "../../Makefile.inc"
 NOMAN= noman
 
 .include "../../Makefile.inc"
index b637cda..7a8fc46 100644 (file)
@@ -1,7 +1,12 @@
 /*
  * Copyright (c) 1983 Eric P. Allman
 /*
  * Copyright (c) 1983 Eric P. Allman
+<<<<<<< 1.2
+ * Copyright (c) 1988 Regents of the University of California.
+ * All rights reserved.
+=======
  * Copyright (c) 1988, 1993
  *     The Regents of the University of California.  All rights reserved.
  * Copyright (c) 1988, 1993
  *     The Regents of the University of California.  All rights reserved.
+>>>>>>> /tmp/T4010782
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  */
 
 #ifndef lint
  */
 
 #ifndef lint
+<<<<<<< 1.2
+char copyright[] =
+"@(#) Copyright (c) 1988 Regents of the University of California.\n\
+ All rights reserved.\n";
+=======
 static char copyright[] =
 "@(#) Copyright (c) 1988, 1993\n\
        The Regents of the University of California.  All rights reserved.\n";
 static char copyright[] =
 "@(#) Copyright (c) 1988, 1993\n\
        The Regents of the University of California.  All rights reserved.\n";
+>>>>>>> /tmp/T4010782
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
+<<<<<<< 1.2
+static char sccsid[] = "@(#)praliases.c        5.5 (Berkeley) 6/1/90";
+=======
 static char sccsid[] = "@(#)praliases.c        8.1 (Berkeley) 6/7/93";
 static char sccsid[] = "@(#)praliases.c        8.1 (Berkeley) 6/7/93";
+>>>>>>> /tmp/T4010782
 #endif /* not lint */
 
 #endif /* not lint */
 
+<<<<<<< 1.2
+=======
 #include <ndbm.h>
 #include <ndbm.h>
+>>>>>>> /tmp/T4010782
 #include <sendmail.h>
 #include <sendmail.h>
+<<<<<<< 1.2
+=======
 #ifdef NEWDB
 #include <db.h>
 #endif
 #ifdef NEWDB
 #include <db.h>
 #endif
+>>>>>>> /tmp/T4010782
 
 
+<<<<<<< 1.2
+typedef struct {
+       char *dptr;
+       int dsize;
+} datum;
+
+
+=======
 int
 int
+>>>>>>> /tmp/T4010782
 main(argc, argv)
 main(argc, argv)
+<<<<<<< 1.2
+=======
        int argc;
        int argc;
+>>>>>>> /tmp/T4010782
        char **argv;
 {
        extern char *optarg;
        extern int optind;
        char **argv;
 {
        extern char *optarg;
        extern int optind;
+<<<<<<< 1.2
+       static char *filename = "/usr/lib/aliases";
+       datum content, key, firstkey(), nextkey(), fetch();
+=======
        DBM *dbp;
        datum content, key;
        char *filename;
        DBM *dbp;
        datum content, key;
        char *filename;
+>>>>>>> /tmp/T4010782
        int ch;
        int ch;
+<<<<<<< 1.2
+=======
 #ifdef NEWDB
        const DB *db;
        DBT newdbkey, newdbcontent;
        char buf[MAXNAME];
 #endif
 #ifdef NEWDB
        const DB *db;
        DBT newdbkey, newdbcontent;
        char buf[MAXNAME];
 #endif
+>>>>>>> /tmp/T4010782
 
 
+<<<<<<< 1.2
+=======
        filename = "/etc/aliases";
        filename = "/etc/aliases";
+>>>>>>> /tmp/T4010782
        while ((ch = getopt(argc, argv, "f:")) != EOF)
                switch((char)ch) {
                case 'f':
        while ((ch = getopt(argc, argv, "f:")) != EOF)
                switch((char)ch) {
                case 'f':
@@ -73,12 +117,24 @@ main(argc, argv)
                        break;
                case '?':
                default:
                        break;
                case '?':
                default:
+<<<<<<< 1.2
+                       fputs("usage: praliases [-f file]\n", stderr);
+=======
                        (void)fprintf(stderr, "usage: praliases [-f file]\n");
                        (void)fprintf(stderr, "usage: praliases [-f file]\n");
+>>>>>>> /tmp/T4010782
                        exit(EX_USAGE);
                }
        argc -= optind;
        argv += optind;
 
                        exit(EX_USAGE);
                }
        argc -= optind;
        argv += optind;
 
+<<<<<<< 1.2
+       if (dbminit(filename) < 0)
+               exit(EX_OSFILE);
+       if (!argc)
+               for (key = firstkey(); key.dptr; key = nextkey(key)) {
+                       content = fetch(key);
+                       printf("%s:%s\n", key.dptr, content.dptr);
+=======
 #ifdef NEWDB
        (void) strcpy(buf, filename);
        (void) strcat(buf, ".db");
 #ifdef NEWDB
        (void) strcpy(buf, filename);
        (void) strcat(buf, ".db");
@@ -120,9 +176,24 @@ main(argc, argv)
                                (void)printf("%s: No such key\n", key.dptr);
                        else
                                (void)printf("%s:%s\n", key.dptr, content.dptr);
                                (void)printf("%s: No such key\n", key.dptr);
                        else
                                (void)printf("%s:%s\n", key.dptr, content.dptr);
+>>>>>>> /tmp/T4010782
                }
                }
+<<<<<<< 1.2
+       else for (; *argv; ++argv) {
+               key.dptr = *argv;
+               key.dsize = strlen(*argv) + 1;
+               content = fetch(key);
+               if (!content.dptr)
+                       printf("%s: No such key\n", key.dptr);
+               else
+                       printf("%s:%s\n", key.dptr, content.dptr);
+=======
 #ifdef NEWDB
 #ifdef NEWDB
+>>>>>>> /tmp/T4010782
        }
        }
+<<<<<<< 1.2
+=======
 #endif
 #endif
+>>>>>>> /tmp/T4010782
        exit(EX_OK);
 }
        exit(EX_OK);
 }
index f49a5b3..9129fba 100644 (file)
@@ -1,4 +1,4 @@
-#      @(#)Makefile    8.1 (Berkeley) 6/7/93
+#      @(#)Makefile    8.2 (Berkeley) 8/15/93
 
 PROG=  sendmail
 
 
 PROG=  sendmail
 
@@ -12,15 +12,15 @@ PROG=       sendmail
 # spiral snail, but it will work.
 DBMDEF=        -DNEWDB
 
 # spiral snail, but it will work.
 DBMDEF=        -DNEWDB
 
-CFLAGS+=-I${.CURDIR} ${DBMDEF} -DNETISO -DNO_SYSCONF
+CFLAGS+=-I${.CURDIR} ${DBMDEF} -DMIME
 
 SRCS=  alias.c arpadate.c clock.c collect.c conf.c convtime.c daemon.c \
        deliver.c domain.c envelope.c err.c headers.c macro.c main.c map.c \
        mci.c parseaddr.c queue.c readcf.c recipient.c savemail.c srvrsmtp.c \
        stab.c stats.c sysexits.c trace.c udb.c usersmtp.c \
        util.c version.c
 
 SRCS=  alias.c arpadate.c clock.c collect.c conf.c convtime.c daemon.c \
        deliver.c domain.c envelope.c err.c headers.c macro.c main.c map.c \
        mci.c parseaddr.c queue.c readcf.c recipient.c savemail.c srvrsmtp.c \
        stab.c stats.c sysexits.c trace.c udb.c usersmtp.c \
        util.c version.c
-DPADD= ${LIBDBM} ${LIBCOMPAT} ${LIBUTIL}
-LDADD= ${LIBUTIL}
+DPADD= 
+LDADD= $(LIBUTIL)
 MAN1=  newaliases.1
 MAN5=  aliases.5
 MAN8=  sendmail.8 
 MAN1=  newaliases.1
 MAN5=  aliases.5
 MAN8=  sendmail.8 
index f85dfeb..e289a7d 100644 (file)
@@ -5,9 +5,7 @@
 #  old make program (I recommend that you get and port the new make if you
 #  are going to be doing any signficant work on sendmail).
 #
 #  old make program (I recommend that you get and port the new make if you
 #  are going to be doing any signficant work on sendmail).
 #
-#  This has been tested on Ultrix.
-#
-#      @(#)Makefile.dist       8.1 (Berkeley) 6/7/93
+#      @(#)Makefile.dist       8.7 (Berkeley) 9/3/93
 #
 
 # use O=-O (usual) or O=-g (debugging)
 #
 
 # use O=-O (usual) or O=-g (debugging)
@@ -16,27 +14,23 @@ O=  -O
 # define the database mechanisms available for map & alias lookups:
 #      -DNDBM -- use new DBM
 #      -DNEWDB -- use new Berkeley DB
 # define the database mechanisms available for map & alias lookups:
 #      -DNDBM -- use new DBM
 #      -DNEWDB -- use new Berkeley DB
-#      -DNDBM -DNEWDB -DYPCOMPAT -- use both plus YP compatility
-#      -DNIS -- include client NIS support
+#      -DNIS -- include NIS support
 # The really old (V7) DBM library is no longer supported.
 # The really old (V7) DBM library is no longer supported.
-# If YPCOMPAT is defined and /var/yp/Makefile exists, sendmail will build
-#   both the NEWDB and DBM libraries (the DBM just for YP).
+# See READ_ME for a description of how these flags interact.
 #
 #
-DBMDEF=        -DNEWDB
-
-# define the load average calculation on your system: -DLA_TYPE=LA_INT,
-#   -DLA_TYPE=LA_FLOAT, -DLA_TYPE=LA_SUBR, or -DLA_TYPE=LA_ZERO
-# leave undefined to use internal guess
-#LADEF=        -DLA_TYPE=LA_SUBR
+DBMDEF=        -DNDBM -DNEWDB
 
 
-# define UNSETENV if you need to compile in a local version of setenv
-#ENVDEF=       -DUNSETENV
+# environment definitions (e.g., -D_AIX3)
+ENVDEF=
 
 # see also conf.h for additional compilation flags
 
 # include directories
 INCDIRS=-I/usr/sww/include/db
 
 
 # see also conf.h for additional compilation flags
 
 # include directories
 INCDIRS=-I/usr/sww/include/db
 
+# loader options
+LDOPTS=
+
 # library directories
 LIBDIRS=-L/usr/sww/lib
 
 # library directories
 LIBDIRS=-L/usr/sww/lib
 
@@ -52,23 +46,30 @@ STDIR=      ${DESTDIR}/var/log
 # location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
 HFDIR= ${DESTDIR}/usr/share/misc
 
 # location of sendmail.hf file (usually /usr/share/misc or /usr/lib)
 HFDIR= ${DESTDIR}/usr/share/misc
 
+# additional .o files needed
+OBJADD=
+
 ###################  end of user configuration flags  ######################
 
 ###################  end of user configuration flags  ######################
 
-CFLAGS=        -I. $O ${INCDIRS} ${DBMDEF} ${LADEF} ${ENVDEF}
+CFLAGS=        -I. $O ${INCDIRS} ${DBMDEF} ${ENVDEF}
 
 OBJS=  alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \
        deliver.o domain.o envelope.o err.o headers.o macro.o main.o \
        map.o mci.o parseaddr.o queue.o readcf.o recipient.o \
        savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
 
 OBJS=  alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \
        deliver.o domain.o envelope.o err.o headers.o macro.o main.o \
        map.o mci.o parseaddr.o queue.o readcf.o recipient.o \
        savemail.o srvrsmtp.o stab.o stats.o sysexits.o \
-       trace.o udb.o usersmtp.o util.o version.o
+       trace.o udb.o usersmtp.o util.o version.o ${OBJADD}
 
 LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
 BINOWN=        root
 BINGRP=        kmem
 BINMODE=6555
 
 
 LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq
 BINOWN=        root
 BINGRP=        kmem
 BINMODE=6555
 
-sendmail: ${OBJS}
-       ${CC} -o sendmail ${OBJS} ${LIBDIRS} ${LIBS}
+ALL=   sendmail aliases.0 newaliases.0 sendmail.0
+
+all: ${ALL}
+
+sendmail: ${BEFORE} ${OBJS}
+       ${CC} -o sendmail ${LDOPTS} ${OBJS} ${LIBDIRS} ${LIBS}
 
 aliases.0: aliases.5
        nroff -h -mandoc aliases.5 > aliases.0
 
 aliases.0: aliases.5
        nroff -h -mandoc aliases.5 > aliases.0
@@ -83,7 +84,7 @@ install: install-sendmail install-docs
 
 install-sendmail: sendmail
        install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
 
 install-sendmail: sendmail
        install -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR}
-       for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
+       for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done
        install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
            ${STDIR}/sendmail.st
        install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
        install -c -o ${BINOWN} -g ${BINGRP} -m 666 /dev/null \
            ${STDIR}/sendmail.st
        install -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR}
index b1a0f80..ab0544b 100644 (file)
@@ -30,7 +30,7 @@
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
-#      @(#)READ_ME     8.3 (Berkeley) 7/13/93
+#      @(#)READ_ME     8.30 (Berkeley) 10/24/93
 #
 
 This directory contains the source files for sendmail.
 #
 
 This directory contains the source files for sendmail.
@@ -39,19 +39,78 @@ For detailed instructions, please read the document ../doc/op.me:
 
        eqn ../doc/op.me | pic | ditroff -me
 
 
        eqn ../doc/op.me | pic | ditroff -me
 
-The Makefile is for the new Berkeley make, available from ftp.uu.net
-in the directory /systems/unix/bsd-sources/usr.bin/make.  There is
-also a Makefile.dist which is much less clever, but works on the old
-traditional make.  You can use this using:
+The Makefile is for the new (4.4BSD) Berkeley make, available from
+ftp.uu.net in the directory /systems/unix/bsd-sources/usr.bin/make.
+(Paul Southworth <pauls@umich.edu> published a description of porting
+this make in comp.unix.bsd.)  This Makefile has assumptions about the
+4.4 file system layout built in.
+
+There is also a Makefile.dist which is much less clever, but works on
+the old traditional make.  You can use this using:
 
        make -f Makefile.dist
 
 
        make -f Makefile.dist
 
-There are a couple of other Makefiles for other systems -- these are
+There are a bunch of other Makefiles for other systems -- these are
 the ones that I use, they have "Berkeley quirks" in them, and I don't
 the ones that I use, they have "Berkeley quirks" in them, and I don't
-guarantee that they will work in your environment.  To make it worse,
-some are for the new Berkeley make, and some are for the old make.
-I provide them for information only.  Still, they may help you get
-started.  They have names like "Makefile.HPUX".
+guarantee that they will work unmodified in your environment.  However,
+they are all designed for the old make and can be used to help you get
+started.  They have names like "Makefile.HPUX".  Many of them include
+-I/usr/sww/include/db and -L/usr/sww/lib -- this is Berkeley's
+location for the new database libraries, described below.
+
+There is also a shell script (makesendmail) that tries to be clever
+about using object subdirectories.  It's pretty straightforward, and
+may help if you share a source tree among different architectures.
+
+IMPORTANT:  DO NOT USE OPTIMIZATION (``-O'') IF YOU ARE RUNNING GCC
+2.4.x.  THERE IS A BUG IN THE GCC OPTIMIZER THAT CAUSES SENDMAIL TO
+FAIL MISERABLY.
+
+IMPORTANT:  Read the appropriate paragraphs in the section on
+``Operating System and Compile Quirks''.
+
+
++----------------------+
+| DATABASE DEFINITIONS |
++----------------------+
+
+There are several database formats that can be used for the alias files
+and for general maps.  When used for alias files they interact in an
+attempt to be back compatible.
+
+The three options are NEWDB (the new Berkeley DB package), NDBM (the
+older DBM implementation -- the very old V7 implementation is no
+longer supported), and NIS (Network Information Services).  Used alone
+these just include the support they indicate.  [If you are using NEWDB,
+get the latest version from FTP.CS.Berkeley.EDU in /ucb/4bsd.  DO NOT
+use the version from the Net2 distribution!]
+
+If NEWDB and NDBM are defined (but not NIS), then sendmail will read
+NDBM format alias files, but the next time a newaliases is run the
+format will be converted to NEWDB; that format will be used forever
+more.  This is intended as a transition feature.  [Note however that
+the NEWDB library also catches and maps NDBM calls; you will have to
+back out this feature to get this to work.  See ``Quirks'' section
+below for details.]
+
+If all three are defined, sendmail operates as described above, and also
+looks for the file /var/yp/Makefile.  If it exists, newaliases will
+build BOTH the NEWDB and NDBM format alias files.  However, it will
+only use the NEWDB file; the NDBM format file is used only by the
+NIS subsystem.
+
+If NDBM and NIS are defined (regardless of the definition of NEWDB
+or the existance of /var/yp/Makefile), sendmail adds the special
+tokens "YP_LAST_MODIFIED" and "YP_MASTER_NAME", both of which are
+required if the NDBM file is to be used as an NIS map.
+
+All of -DNEWDB, -DNDBM, and -DNIS are normally defined in the DBMDEF
+line in the Makefile.
+
+
++---------------+
+| COMPILE FLAGS |
++---------------+
 
 Whereever possible, I try to make sendmail pull in the correct
 compilation options needed to compile on various environments based on
 
 Whereever possible, I try to make sendmail pull in the correct
 compilation options needed to compile on various environments based on
@@ -60,26 +119,35 @@ symbols availble, requiring the following compilation flags in the
 Makefile:
 
 SOLARIS                Define this if you are running Solaris 2.0 or higher.
 Makefile:
 
 SOLARIS                Define this if you are running Solaris 2.0 or higher.
-__NeXT__       Define this if you are on a NeXT box.  (This one may
-               be pre-defined for you.)
+NeXT           Define this if you are on a NeXT box.  (This one may
+               be pre-defined for you.)  There are other hacks you
+               have to make -- see below.
 _AIX3          Define this if you are IBM AIX 3.x.
 _AIX3          Define this if you are IBM AIX 3.x.
+RISCOS         Define this if you are running RISC/os from MIPS.
+_SCO_unix_     Define this if you are on SCO UNIX.
 
 If you are a system that sendmail has already been ported to, you
 probably won't have to touch these.  But if you are porting, you may
 
 If you are a system that sendmail has already been ported to, you
 probably won't have to touch these.  But if you are porting, you may
-have to tweak the following compilation flags in order to get
-it to compile and link properly:
+have to tweak the following compilation flags in conf.h in order to
+get it to compile and link properly:
 
 
-UNSETENV       Define this if your system library does NOT include the
-               "unsetenv" subroutine.
 SYSTEM5                Adjust for System V.
 SYSTEM5                Adjust for System V.
-LOCKF          Set this if you do not have the flock system call -- it
-               will revert to System V file locking.  There are some
-               semantic gotchas, so flock is preferred.  Implied by
-               SYSTEM5.
-SYS5TZ         Use System V-style time zones.  If not set, the TZ
-               environment variable is ignored.  Implied by SYSTEM5.
+SYS5SIGNALS    Use System V signal semantics -- the signal handler
+               is automatically dropped when the signal is caught.
+               If this is not set, use POSIX/BSD semantics, where the
+               signal handler stays in force until an exec or an
+               explicit delete.  Implied by SYSTEM5.
+SYS5SETPGRP    Use System V setpgrp() semantics.  Implied by SYSTEM5.
+HASFLOCK       Set this if you prefer to use the flock(2) system call
+               rather than using fcntl-based locking.  Fcntl locking
+               has some semantic gotchas, but many vendor systems
+               also interface it to lockd(8) to do NFS-style locking.
+               For this reason, this should not be set unless you
+               don't have an alternative.
 HASUNAME       Set if you have the "uname" system call.  Implied by
                SYSTEM5.
 HASUNAME       Set if you have the "uname" system call.  Implied by
                SYSTEM5.
+HASUNSETENV    Define this if your system library has the "unsetenv"
+               subroutine.
 HASSTATFS      Define this if you have the statfs(2) system call.  It's
                not a disaster to get this wrong -- but you do lose the
                queue free space code.
 HASSTATFS      Define this if you have the statfs(2) system call.  It's
                not a disaster to get this wrong -- but you do lose the
                queue free space code.
@@ -92,28 +160,57 @@ HASINITGROUPS      Define this if you have the initgroups(3) routine.
 HASSETVBUF     Define this if you have the setvbuf(3) library call.
                If you don't, setlinebuf will be used instead.  This
                defaults on if your compiler defines __STDC__.
 HASSETVBUF     Define this if you have the setvbuf(3) library call.
                If you don't, setlinebuf will be used instead.  This
                defaults on if your compiler defines __STDC__.
-HASSETEUID     Define this if you have seteuid(2) ***AND*** root can use
-               it to change to an arbitrary user.  This second condition
-               is not satisfied on AIX 3.x.  You may find that
-               your system has setreuid(2) or setresuid(2), in which
-               case you will also have to #define seteuid(uid) to be
-               the appropriate call.  The important thing is that you
-               have a call that will set the effective uid and NOT
-               set the real or saved uid.  Setting this improves the
-               security somewhat, since sendmail doesn't have to read
-               .forward and :include: files as root.
+HASSETREUID    Define this if you have setreuid(2) ***AND*** root can
+               use setreuid to change to an arbitrary user.  This second
+               condition is not satisfied on AIX 3.x.  You may find that
+               your system has setresuid(2), (for example, on HP-UX) in
+               which case you will also have to #define setreuid(r, e)
+               to be the appropriate call.  Some systems (such as Solaris)
+               have a compatibility routine that doesn't work properly.
+               The important thing is that you have a call that will set
+               the effective uid independently of the real or saved uid.
+               Setting this improves the security somewhat, since
+               sendmail doesn't have to read .forward and :include: files
+               as root.
+GIDSET_T       The type of entries in a gidset passed as the second
+               argument to getgroups(2).  Historically this has been an
+               int, so this is the default, but some systems (such as
+               IRIX) pass it as a gid_t, which is an unsigned short.
+               This will make a difference, so it is important to get
+               this right!  However, it is only an issue if you have
+               group sets.
+SLEEP_T                The type returned by the system sleep() function.
+               Defaults to "unsigned int".  Don't worry about this
+               if you don't have compilation problems.
+ARBPTR_T       The type of an arbitrary pointer -- defaults to "void *".
+               If you are an very old compiler you may need to define
+               this to be "char *".
 LA_TYPE                The type of load average your kernel supports.  These
                can be LA_SUBR (4) if you have the getloadavg(3) routine,
 LA_TYPE                The type of load average your kernel supports.  These
                can be LA_SUBR (4) if you have the getloadavg(3) routine,
-               LA_FLOAT (3) if you read kmem and interpret the value
-               as a floating point number, LA_INT (2) to interpret as
-               an integer.  These last two have several other parameters
-               that they try to divine: the name of your kernel, the name
-               of the variable in the kernel to examine, the number of
-               bits of precision in a fixed point load average, and so
-               forth.  In desparation, use LA_ZERO -- it always returns
-               the load average as "zero" (and does so on all architectures).
-               The actual code is in conf.c -- it can be tweaked if you
-               are brave.
+               LA_MACH (5) to use MACH-style load averages (calls
+               processor_set_info()), LA_FLOAT (3) if you read kmem and
+               interpret the value as a floating point number, LA_INT (2)
+               to interpret as a long integer, or LA_SHORT (6) to
+               interpret as a short integer.  These last three have
+               several other parameters that they try to divine: the
+               name of your kernel, the name of the variable in the
+               kernel to examine, the number of bits of precision in
+               a fixed point load average, and so forth.  In desparation,
+               use LA_ZERO (1) -- it always returns the load average as
+               "zero" (and does so on all architectures).  The actual
+               code is in conf.c -- it can be tweaked if you are brave.
+ERRLIST_PREDEFINED
+               If set, assumes that some header file defines sys_errlist.
+               This may be needed if you get type conflicts on this
+               variable -- otherwise don't worry about it.
+WAITUNION      The wait(2) routine takes a "union wait" argument instead
+               of an integer argument.  This is for compatibility with
+               old versions of BSD.
+
+
++-----------------------+
+| COMPILE-TIME FEATURES |
++-----------------------+
 
 There are a bunch of features that you can decide to compile in, such
 as selecting various database packages and special protocol support.
 
 There are a bunch of features that you can decide to compile in, such
 as selecting various database packages and special protocol support.
@@ -122,23 +219,18 @@ Several are assumed based on other compilation flags -- if you want to
 flags that add support for special features include:
 
 NDBM           Include support for "new" DBM library for aliases and maps.
 flags that add support for special features include:
 
 NDBM           Include support for "new" DBM library for aliases and maps.
+               Normally defined in the Makefile.
 NEWDB          Include support for Berkeley "db" package (hash & btree)
 NEWDB          Include support for Berkeley "db" package (hash & btree)
-               for aliases and maps.
+               for aliases and maps.  Normally defined in the Makefile.
 NIS            Define this to get NIS (YP) support for aliases and maps.
 NIS            Define this to get NIS (YP) support for aliases and maps.
-YPCOMPAT       Define this to force building of DBM versions of alias
-               files even if you have NEWDB defined; this will only
-               occur on NIS master machines.  It is independent of NIS.
+               Normally defined in the Makefile.
 USERDB         Include support for the User Information Database.  Implied
 USERDB         Include support for the User Information Database.  Implied
-               by NEWDB conf.h.
+               by NEWDB in conf.h.
 IDENTPROTO     Define this to get IDENT (RFC 1413) protocol support.
                This is assumed unless you are running on Ultrix or
                HP-UX, both of which have a problem in the UDP
                implementation.
 MIME           Include support for MIME-encapsulated error messages.
 IDENTPROTO     Define this to get IDENT (RFC 1413) protocol support.
                This is assumed unless you are running on Ultrix or
                HP-UX, both of which have a problem in the UDP
                implementation.
 MIME           Include support for MIME-encapsulated error messages.
-FROZENCONFIG   Define this to get support for frozen configuration
-               files.  Frozen configurations make sense if your I/O system
-               is fast relative to your processor.  At this point this
-               is NOT recommended.
 LOG            Set this to get syslog(3) support.  Defined by default
                in conf.h.  You want this if at all possible.
 NETINET                Set this to get TCP/IP support.  Defined by default
 LOG            Set this to get syslog(3) support.  Defined by default
                in conf.h.  You want this if at all possible.
 NETINET                Set this to get TCP/IP support.  Defined by default
@@ -163,23 +255,174 @@ SETPROCTITLE     Try to set the string printed by "ps" to something
                informative about what sendmail is doing.  Defined by
                default in conf.h.
 
                informative about what sendmail is doing.  Defined by
                default in conf.h.
 
-If you are compiling on SunOS and want to use frozen configuration
-files, you must use -Bstatic -- if you do not, frozen configuration
-files fail in bizarre ways and you will open up several security holes.
 
 
-If you are compiling on OSF/1 (DEC Alpha), you must use -lmld.
++-------------------------------------+
+| OPERATING SYSTEM AND COMPILE QUIRKS |
++-------------------------------------+
+
+SunOS 4.x (Solaris 1.x)
+       You may have to use -lresolv on SunOS.  However, beware that
+       this links in a new version of gethostbyname that does not
+       understand NIS, so you must have all of your hosts in DNS.
+
+       There is substantial disagreement about whether you can make
+       this work with resolv+, which allows you to specify a search-path
+       of services.  Some people report that it works fine, others
+       claim it doesn't work at all (including causing sendmail to
+       drop core when it tries to do multiple resolv+ lookups for a
+       single job).  I haven't tried resolv+, as we use DNS exclusively.
+
+       Should you want to try resolv+, it is on ftp.uu.net in
+       /networking/ip/dns.
+
+Solaris 2.x (SunOS 5.x)
+       To compile for Solaris, be sure you use -DSOLARIS.
+
+       From a correspondent:
+
+          For solaris 2.2, I have 
+
+               hosts:      files dns
+
+          in /etc/nsswitch.conf and /etc/hosts has to have the fully
+          qualified host name. I think "files" has to be before "dns"
+          in /etc/nsswitch.conf during bootup.
+
+       To the best of my knowledge, Solaris does not have the
+       gethostbyname problem described above.
+
+       The Solaris "syslog" function is apparently limited to something
+       about 90 characters because of a kernel limitation.  If you have
+       source code, you can probably up this number.  Bill Wisner
+       <wisner@well.sf.ca.us> was able to get an unofficial, unsupported
+       patch.
+
+OSF/1
+       If you are compiling on OSF/1 (DEC Alpha), you must use -lmld
+       and -non_shared (otherwise it core dumps on startup).  Also,
+       the enclosed makefile removed /usr/sbin/smtpd; if you need it,
+       just create the link to the sendmail binary.
+
+NeXT
+       If you are compiling on NeXT, you will have to create an empty
+       file "unistd.h" and create a file "dirent.h" containing:
+
+               #include <sys/dir.h>
+               #define dirent  direct
+
+       (The Makefile.NeXT should try to do both of these for you.)
+
+       Apparently, there is a bug in getservbyname on Nextstep 3.0
+       that causes it to fail under some circumstances with the
+       message "SYSERR: service "smtp" unknown" logged.  You should
+       be able to work around this by including the line:
+
+               OOPort=25
+
+       in your .cf file.
+
+       You may have to use -DNeXT.
+
+BSDI (BSD/386)
+       I have reports that the "m4" from BSDI won't handle the config
+       files properly.  I haven't had a chance to test this myself.
+
+4.3BSD
+       If you are running a "virgin" version of 4.3BSD, you'll have
+       a very old resolver and be missing some header files.  The
+       header files are simple -- create empty versions and everything
+       will work fine.  For the resolver you should really port a new
+       version (4.8.3 or later) of the resolver; 4.9 is available on
+       gatekeeper.DEC.COM in pub/BSD/bind/4.9.  If you are really
+       determined to continue to use your old, buggy version (or as
+       a shortcut to get sendmail working -- I'm sure you have the
+       best intentions to port a modern version of BIND), you can
+       copy ../contrib/oldbind.compat.c into src and add
+       oldbind.compat.o to OBJADD in the Makefile.
+
+Linux
+       From: Karl London <karl@borg.demon.co.uk>
+       Subject: Little bit to add to a readme for Linux for 8.6
+       Date: Fri, 10 Sep 1993 20:16:05 +0100 (BST)
+
+       Below is a copy of a section of the /usr/include/unistd.h from
+       linux libc-4.4.1 which needs changing because of a bug in the
+       header files. Should be fixed for future releases..
+
+       Karl
+
+       The #if 0 and #endif are new!!
+
+       -------
+
+          If OPTS begins with `--', then non-option arguments
+          are treated as arguments to the option '\0'.
+          This behavior is specific to the GNU `getopt'.  */
+       #if 0
+       extern int getopt __P ((int __argc, char *__const * __argv,
+                               __const char *__opts));
+       #endif
+       extern int opterr;
+       extern int optind;
+
+A/UX
+       Date: Tue, 12 Oct 1993 18:28:28 -0400 (EDT)
+       From: "Eric C. Hagberg" <hagberg@med.cornell.edu>
+       Subject: Fix for A/UX ndbm
+
+       I guess this isn't really a sendmail bug, however, it is something
+       that A/UX users should be aware of when compiling sendmail 8.6.
+
+       Apparently, the calls that sendmail is using to the ndbm routines
+       in A/UX 3.0.x contain calls to "broken" routines, in that the
+       aliases database will break when it gets "just a little big"
+       (sorry I don't have exact numbers here, but it broke somewhere
+       around 20-25 aliases for me.), making all aliases non-functional
+       after exceeding this point.
+
+       What I did was to get the gnu-dbm-1.6 package, compile it, and
+       then re-compile sendmail with "-lgdbm", "-DNDBM", and using the
+       ndbm.h header file that comes with the gnu-package. This makes
+       things behave properly.
+
+       I suppose porting the New Berkeley db package is another route,
+       however, I made a quick attempt at it, and found it difficult
+       (not easy at least); the gnu-dbm package "configured" and
+       compiled easily.
+
+DG/UX
+       Apparently, /bin/mail doesn't work properly for delivery on
+       DG/UX -- the person who has this working, Douglas Anderson
+       <dlander@afterlife.ncsc.mil>, used procmail instead.
+
+Non-DNS based sites
+       This version of sendmail always tries to connect to the Domain
+       Name System (DNS) to resolve names, regardless of the setting
+       of the `I' option.  On most systems that are not running DNS,
+       this will fail quickly and sendmail will continue, but on some
+       systems it has a long timeout.  If you have this problem, you
+       will have to recompile without NAMED_BIND.  Some people have
+       claimed that they have successfully used "OI+USEVC" to force
+       sendmail to use a virtual circuit -- this will always time out
+       quickly, but also tells sendmail that a failed connection
+       should requeue the message (probably not what you intended).
+       A future release of sendmail will correct this problem.
+
+Both NEWDB and NDBM
+       If you use both -DNDBM and -DNEWDB, you must delete the module
+       ndbm.o from libdb.a and delete the file "ndbm.h" from the files
+       that get installed (that is, use the OLD ndbm.h, not the new
+       ndbm.h).  This compatibility module maps ndbm calls into DB
+       calls, and breaks things rather badly.
 
 
-If you are compiling on NeXT, you will have to create an empty file
-"unistd.h".
+GNU getopt
+       I'm told that GNU getopt has a problem in that it gets confused
+       by the double call.  Use the version in conf.c instead.
 
 
-If you use both -DNDBM and -DNEWDB, you must delete the module ndbm.o
-from libdb.a and delete the file "ndbm.h" from the files that get
-installed (that is, use the OLD ndbm.h, not the new ndbm.h).  This
-compatibility module maps ndbm calls into DB calls, and breaks things
-rather badly.
 
 
-You probably want to look over the compilation options in conf.h
-before you compile.  These are intended to be per-site information.
++-----------------------------+
+| DESCRIPTION OF SOURCE FILES |
++-----------------------------+
 
 The following list describes the files in this directory:
 
 
 The following list describes the files in this directory:
 
@@ -240,4 +483,4 @@ version.c   The version number and information about this
 
 Eric Allman
 
 
 Eric Allman
 
-(Version 8.3, last update 7/13/93 12:57:56)
+(Version 8.30, last update 10/24/93 10:39:02)
index 3fd00b7..f05c219 100644 (file)
 41     queue.c         orderq
 42     mci.c           mci_get
 45     envelope.c      setsender
 41     queue.c         orderq
 42     mci.c           mci_get
 45     envelope.c      setsender
+46     envelope.c      openxscript
+49     conf.c          checkcompat
 50     envelope.c      dropenvelope
 51     queue.c         unlockqueue
 52     main.c          disconnect
 53     util.c          xfclose
 50     envelope.c      dropenvelope
 51     queue.c         unlockqueue
 52     main.c          disconnect
 53     util.c          xfclose
+54     err.c           putoutmsg
+55     conf.c          lockfile
 59     Extended Load Average implementation from Christophe Wolfhugel
 60     map.c
 59     Extended Load Average implementation from Christophe Wolfhugel
 60     map.c
+91     mci.c           syslogging of MCI cache information
index eb579b2..cc93df7 100644 (file)
  */
 
 # include "sendmail.h"
  */
 
 # include "sendmail.h"
-# include <signal.h>
 # include <pwd.h>
 
 #ifndef lint
 # include <pwd.h>
 
 #ifndef lint
-static char sccsid[] = "@(#)alias.c    8.3 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)alias.c    8.17 (Berkeley) 10/15/93";
 #endif /* not lint */
 
 
 #endif /* not lint */
 
 
@@ -121,7 +120,7 @@ alias(a, sendq, e)
        AliasLevel++;
        naliases = sendtolist(p, a, sendq, e);
        AliasLevel--;
        AliasLevel++;
        naliases = sendtolist(p, a, sendq, e);
        AliasLevel--;
-       if (naliases > 0 && !bitset(QSELFREF, a->q_flags))
+       if (!bitset(QSELFREF, a->q_flags))
        {
                if (tTd(27, 5))
                {
        {
                if (tTd(27, 5))
                {
@@ -280,11 +279,25 @@ setalias(spec)
 **  ALIASWAIT -- wait for distinguished @:@ token to appear.
 **
 **     This can decide to reopen or rebuild the alias file
 **  ALIASWAIT -- wait for distinguished @:@ token to appear.
 **
 **     This can decide to reopen or rebuild the alias file
+**
+**     Parameters:
+**             map -- a pointer to the map descriptor for this alias file.
+**             ext -- the filename extension (e.g., ".db") for the
+**                     database file.
+**             isopen -- if set, the database is already open, and we
+**                     should check for validity; otherwise, we are
+**                     just checking to see if it should be created.
+**
+**     Returns:
+**             TRUE -- if the database is open when we return.
+**             FALSE -- if the database is closed when we return.
 */
 
 */
 
-aliaswait(map, ext)
+bool
+aliaswait(map, ext, isopen)
        MAP *map;
        char *ext;
        MAP *map;
        char *ext;
+       int isopen;
 {
        int atcnt;
        time_t mtime;
 {
        int atcnt;
        time_t mtime;
@@ -294,13 +307,16 @@ aliaswait(map, ext)
        if (tTd(27, 3))
                printf("aliaswait(%s:%s)\n",
                        map->map_class->map_cname, map->map_file);
        if (tTd(27, 3))
                printf("aliaswait(%s:%s)\n",
                        map->map_class->map_cname, map->map_file);
+       if (bitset(MF_ALIASWAIT, map->map_mflags))
+               return;
+       map->map_mflags |= MF_ALIASWAIT;
 
        atcnt = SafeAlias * 2;
        if (atcnt > 0)
        {
                auto int st;
 
 
        atcnt = SafeAlias * 2;
        if (atcnt > 0)
        {
                auto int st;
 
-               while (atcnt-- >= 0 &&
+               while (isopen && atcnt-- >= 0 &&
                       map->map_class->map_lookup(map, "@", NULL, &st) == NULL)
                {
                        /*
                       map->map_class->map_lookup(map, "@", NULL, &st) == NULL)
                {
                        /*
@@ -313,7 +329,7 @@ aliaswait(map, ext)
 
                        map->map_class->map_close(map);
                        sleep(30);
 
                        map->map_class->map_close(map);
                        sleep(30);
-                       map->map_class->map_open(map, O_RDONLY);
+                       isopen = map->map_class->map_open(map, O_RDONLY);
                }
        }
 
                }
        }
 
@@ -322,13 +338,15 @@ aliaswait(map, ext)
        {
                if (tTd(27, 3))
                        printf("aliaswait: not rebuildable\n");
        {
                if (tTd(27, 3))
                        printf("aliaswait: not rebuildable\n");
-               return;
+               map->map_mflags &= ~MF_ALIASWAIT;
+               return isopen;
        }
        if (stat(map->map_file, &stb) < 0)
        {
                if (tTd(27, 3))
                        printf("aliaswait: no source file\n");
        }
        if (stat(map->map_file, &stb) < 0)
        {
                if (tTd(27, 3))
                        printf("aliaswait: no source file\n");
-               return;
+               map->map_mflags &= ~MF_ALIASWAIT;
+               return isopen;
        }
        mtime = stb.st_mtime;
        (void) strcpy(buf, map->map_file);
        }
        mtime = stb.st_mtime;
        (void) strcpy(buf, map->map_file);
@@ -340,7 +358,10 @@ aliaswait(map, ext)
                if (AutoRebuild && stb.st_ino != 0 && stb.st_uid == geteuid())
                {
                        message("auto-rebuilding alias database %s", buf);
                if (AutoRebuild && stb.st_ino != 0 && stb.st_uid == geteuid())
                {
                        message("auto-rebuilding alias database %s", buf);
+                       if (isopen)
+                               map->map_class->map_close(map);
                        rebuildaliases(map, TRUE);
                        rebuildaliases(map, TRUE);
+                       isopen = map->map_class->map_open(map, O_RDONLY);
                }
                else
                {
                }
                else
                {
@@ -352,6 +373,8 @@ aliaswait(map, ext)
                        message("Warning: alias database %s out of date", buf);
                }
        }
                        message("Warning: alias database %s out of date", buf);
                }
        }
+       map->map_mflags &= ~MF_ALIASWAIT;
+       return isopen;
 }
 \f/*
 **  REBUILDALIASES -- rebuild the alias database.
 }
 \f/*
 **  REBUILDALIASES -- rebuild the alias database.
@@ -373,31 +396,37 @@ rebuildaliases(map, automatic)
        bool automatic;
 {
        FILE *af;
        bool automatic;
 {
        FILE *af;
-       void (*oldsigint)();
+       bool nolock = FALSE;
+       sigfunc_t oldsigint;
 
        if (!bitset(MCF_REBUILDABLE, map->map_class->map_cflags))
                return;
 
 
        if (!bitset(MCF_REBUILDABLE, map->map_class->map_cflags))
                return;
 
-#ifdef LOG
-       if (LogLevel > 7)
-       {
-               syslog(LOG_NOTICE, "alias database %s %srebuilt by %s",
-                       map->map_file, automatic ? "auto" : "", username());
-       }
-#endif /* LOG */
-
        /* try to lock the source file */
        if ((af = fopen(map->map_file, "r+")) == NULL)
        {
        /* try to lock the source file */
        if ((af = fopen(map->map_file, "r+")) == NULL)
        {
-               if (tTd(27, 1))
-                       printf("Can't open %s: %s\n",
-                               map->map_file, errstring(errno));
-               errno = 0;
-               return;
+               if (errno != EACCES || automatic ||
+                   (af = fopen(map->map_file, "r")) == NULL)
+               {
+                       int saveerr = errno;
+
+                       if (tTd(27, 1))
+                               printf("Can't open %s: %s\n",
+                                       map->map_file, errstring(saveerr));
+                       if (!automatic)
+                               message("newaliases: cannot open %s: %s",
+                                       map->map_file, errstring(saveerr));
+                       errno = 0;
+                       return;
+               }
+               nolock = TRUE;
+               message("warning: cannot lock %s: %s",
+                       map->map_file, errstring(errno));
        }
 
        /* see if someone else is rebuilding the alias file */
        }
 
        /* see if someone else is rebuilding the alias file */
-       if (!lockfile(fileno(af), map->map_file, LOCK_EX|LOCK_NB))
+       if (!nolock &&
+           !lockfile(fileno(af), map->map_file, NULL, LOCK_EX|LOCK_NB))
        {
                /* yes, they are -- wait until done */
                message("Alias file %s is already being rebuilt",
        {
                /* yes, they are -- wait until done */
                message("Alias file %s is already being rebuilt",
@@ -405,7 +434,7 @@ rebuildaliases(map, automatic)
                if (OpMode != MD_INITALIAS)
                {
                        /* wait for other rebuild to complete */
                if (OpMode != MD_INITALIAS)
                {
                        /* wait for other rebuild to complete */
-                       (void) lockfile(fileno(af), map->map_file,
+                       (void) lockfile(fileno(af), map->map_file, NULL,
                                        LOCK_EX);
                }
                (void) fclose(af);
                                        LOCK_EX);
                }
                (void) fclose(af);
@@ -413,10 +442,18 @@ rebuildaliases(map, automatic)
                return;
        }
 
                return;
        }
 
-       oldsigint = signal(SIGINT, SIG_IGN);
+       oldsigint = setsignal(SIGINT, SIG_IGN);
 
        if (map->map_class->map_open(map, O_RDWR))
        {
 
        if (map->map_class->map_open(map, O_RDWR))
        {
+#ifdef LOG
+               if (LogLevel > 7)
+               {
+                       syslog(LOG_NOTICE, "alias database %s %srebuilt by %s",
+                               map->map_file, automatic ? "auto" : "",
+                               username());
+               }
+#endif /* LOG */
                map->map_mflags |= MF_OPEN|MF_WRITABLE;
                readaliases(map, af, automatic);
        }
                map->map_mflags |= MF_OPEN|MF_WRITABLE;
                readaliases(map, af, automatic);
        }
@@ -438,7 +475,7 @@ rebuildaliases(map, automatic)
                map->map_class->map_close(map);
 
        /* restore the old signal */
                map->map_class->map_close(map);
 
        /* restore the old signal */
-       (void) signal(SIGINT, oldsigint);
+       (void) setsignal(SIGINT, oldsigint);
 }
 \f/*
 **  READALIASES -- read and process the alias file.
 }
 \f/*
 **  READALIASES -- read and process the alias file.
@@ -519,9 +556,9 @@ readaliases(map, af, automatic)
                        syserr("554 missing colon");
                        continue;
                }
                        syserr("554 missing colon");
                        continue;
                }
-               if (parseaddr(line, &al, 1, ':', NULL, CurEnv) == NULL)
+               if (parseaddr(line, &al, RF_COPYALL, ':', NULL, CurEnv) == NULL)
                {
                {
-                       syserr("554 illegal alias name");
+                       syserr("554 %s... illegal alias name", al.q_paddr);
                        continue;
                }
 
                        continue;
                }
 
@@ -555,7 +592,8 @@ readaliases(map, af, automatic)
                                                p++;
                                        if (*p == '\0')
                                                break;
                                                p++;
                                        if (*p == '\0')
                                                break;
-                                       if (parseaddr(p, &bl, -1, ',', &delimptr, CurEnv) == NULL)
+                                       if (parseaddr(p, &bl, RF_COPYNONE, ',',
+                                                     &delimptr, CurEnv) == NULL)
                                                usrerr("553 %s... bad address", p);
                                        p = delimptr;
                                }
                                                usrerr("553 %s... bad address", p);
                                        p = delimptr;
                                }
@@ -586,7 +624,8 @@ readaliases(map, af, automatic)
                }
                if (al.q_mailer != LocalMailer)
                {
                }
                if (al.q_mailer != LocalMailer)
                {
-                       syserr("554 cannot alias non-local names");
+                       syserr("554 %s... cannot alias non-local names",
+                               al.q_paddr);
                        continue;
                }
 
                        continue;
                }
 
@@ -653,10 +692,6 @@ forward(user, sendq, e)
 {
        char *pp;
        char *ep;
 {
        char *pp;
        char *ep;
-#ifdef HASSETEUID
-       register ADDRESS *ca;
-       uid_t saveduid, uid;
-#endif
 
        if (tTd(27, 1))
                printf("forward(%s)\n", user->q_paddr);
 
        if (tTd(27, 1))
                printf("forward(%s)\n", user->q_paddr);
@@ -676,14 +711,6 @@ forward(user, sendq, e)
        if (ForwardPath == NULL)
                ForwardPath = newstr("\201z/.forward");
 
        if (ForwardPath == NULL)
                ForwardPath = newstr("\201z/.forward");
 
-#ifdef HASSETEUID
-       ca = getctladdr(user);
-       if (ca != NULL)
-               uid = ca->q_uid;
-       else
-               uid = DefUid;
-#endif
-
        for (pp = ForwardPath; pp != NULL; pp = ep)
        {
                int err;
        for (pp = ForwardPath; pp != NULL; pp = ep)
        {
                int err;
@@ -698,33 +725,10 @@ forward(user, sendq, e)
                if (tTd(27, 3))
                        printf("forward: trying %s\n", buf);
 
                if (tTd(27, 3))
                        printf("forward: trying %s\n", buf);
 
-               if (tTd(27, 9))
-                       printf("forward: old uid = %d/%d\n", getuid(), geteuid());
-
-#ifdef HASSETEUID
-               saveduid = geteuid();
-               if (saveduid == 0 && uid != 0)
-                       (void) seteuid(uid);
-#endif                   
-
-               if (tTd(27, 9))
-                       printf("forward: new uid = %d/%d\n", getuid(), geteuid());
-
                err = include(buf, TRUE, user, sendq, e);
                err = include(buf, TRUE, user, sendq, e);
-
-#ifdef HASSETEUID
-               if (saveduid == 0 && uid != 0)
-                       if (seteuid(saveduid) < 0)
-                               syserr("seteuid(%d) failure (real=%d, eff=%d)",
-                                       saveduid, getuid(), geteuid());
-#endif
-
-               if (tTd(27, 9))
-                       printf("forward: reset uid = %d/%d\n", getuid(), geteuid());
-
                if (err == 0)
                        break;
                if (err == 0)
                        break;
-               if (transienterror(err))
+               else if (transienterror(err))
                {
                        /* we have to suspend this message */
                        if (tTd(27, 2))
                {
                        /* we have to suspend this message */
                        if (tTd(27, 2))
@@ -735,7 +739,7 @@ forward(user, sendq, e)
                                        e->e_id, buf, errstring(err));
 #endif
                        message("%s: %s: message queued", buf, errstring(err));
                                        e->e_id, buf, errstring(err));
 #endif
                        message("%s: %s: message queued", buf, errstring(err));
-                       user->q_flags |= QQUEUEUP|QDONTSEND;
+                       user->q_flags |= QQUEUEUP;
                        return;
                }
        }
                        return;
                }
        }
index a04665e..c4157bc 100644 (file)
@@ -30,7 +30,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)cdefs.h     8.1 (Berkeley) 6/2/93
+ *     @(#)cdefs.h     8.2 (Berkeley) 10/4/93
  */
 
 #ifndef        _CDEFS_H_
  */
 
 #ifndef        _CDEFS_H_
 #define        __CONCAT(x,y)   x ## y
 #define        __STRING(x)     #x
 
 #define        __CONCAT(x,y)   x ## y
 #define        __STRING(x)     #x
 
+#if !defined(__GNUC__) && !defined(__cplusplus)
+#define        inline
+#endif
+
 #else  /* !(__STDC__ || __cplusplus) */
 #define        __P(protos)     ()              /* traditional C preprocessor */
 #define        __CONCAT(x,y)   x/**/y
 #else  /* !(__STDC__ || __cplusplus) */
 #define        __P(protos)     ()              /* traditional C preprocessor */
 #define        __CONCAT(x,y)   x/**/y
index 96675c0..8c78bc1 100644 (file)
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)clock.c    8.2 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)clock.c    8.7 (Berkeley) 10/21/93";
 #endif /* not lint */
 
 # include "sendmail.h"
 #endif /* not lint */
 
 # include "sendmail.h"
-# include <signal.h>
 
 # ifndef sigmask
 #  define sigmask(s)   (1 << ((s) - 1))
 
 # ifndef sigmask
 #  define sigmask(s)   (1 << ((s) - 1))
@@ -79,6 +78,7 @@ setevent(intvl, func, arg)
                return (NULL);
        }
 
                return (NULL);
        }
 
+       (void) setsignal(SIGALRM, SIG_IGN);
        (void) time(&now);
 
        /* search event queue for correct position */
        (void) time(&now);
 
        /* search event queue for correct position */
@@ -128,7 +128,7 @@ clrevent(ev)
                return;
 
        /* find the parent event */
                return;
 
        /* find the parent event */
-       (void) signal(SIGALRM, SIG_IGN);
+       (void) setsignal(SIGALRM, SIG_IGN);
        for (evp = &EventQueue; *evp != NULL; evp = &(*evp)->ev_link)
        {
                if (*evp == ev)
        for (evp = &EventQueue; *evp != NULL; evp = &(*evp)->ev_link)
        {
                if (*evp == ev)
@@ -166,11 +166,12 @@ tick()
        register time_t now;
        register EVENT *ev;
        int mypid = getpid();
        register time_t now;
        register EVENT *ev;
        int mypid = getpid();
+       int olderrno = errno;
 #ifdef SIG_UNBLOCK
        sigset_t ss;
 #endif
 
 #ifdef SIG_UNBLOCK
        sigset_t ss;
 #endif
 
-       (void) signal(SIGALRM, SIG_IGN);
+       (void) setsignal(SIGALRM, SIG_IGN);
        (void) alarm(0);
        now = curtime();
 
        (void) alarm(0);
        now = curtime();
 
@@ -192,19 +193,6 @@ tick()
                                ev->ev_func, ev->ev_arg, ev->ev_pid);
 
                /* we must be careful in here because ev_func may not return */
                                ev->ev_func, ev->ev_arg, ev->ev_pid);
 
                /* we must be careful in here because ev_func may not return */
-               (void) signal(SIGALRM, tick);
-#ifdef SIG_UNBLOCK
-               /* unblock SIGALRM signal */
-               sigemptyset(&ss);
-               sigaddset(&ss, SIGALRM);
-               sigprocmask(SIG_UNBLOCK, &ss, NULL);
-#else
-#ifdef SIGVTALRM
-               /* reset 4.2bsd signal mask to allow future alarms */
-               (void) sigsetmask(sigblock(0) & ~sigmask(SIGALRM));
-#endif /* SIGVTALRM */
-#endif /* SIG_UNBLOCK */
-
                f = ev->ev_func;
                arg = ev->ev_arg;
                pid = ev->ev_pid;
                f = ev->ev_func;
                arg = ev->ev_arg;
                pid = ev->ev_pid;
@@ -218,13 +206,31 @@ tick()
                        else
                                (void) alarm(3);
                }
                        else
                                (void) alarm(3);
                }
+
+               /* restore signals so that we can take ticks while in ev_func */
+               (void) setsignal(SIGALRM, tick);
+#ifdef SIG_UNBLOCK
+               /* unblock SIGALRM signal */
+               sigemptyset(&ss);
+               sigaddset(&ss, SIGALRM);
+               sigprocmask(SIG_UNBLOCK, &ss, NULL);
+#else
+#ifdef SIGVTALRM
+               /* reset 4.2bsd signal mask to allow future alarms */
+               (void) sigsetmask(sigblock(0) & ~sigmask(SIGALRM));
+#endif /* SIGVTALRM */
+#endif /* SIG_UNBLOCK */
+
+               /* call ev_func */
+               errno = olderrno;
                (*f)(arg);
                (void) alarm(0);
                now = curtime();
        }
                (*f)(arg);
                (void) alarm(0);
                now = curtime();
        }
-       (void) signal(SIGALRM, tick);
+       (void) setsignal(SIGALRM, tick);
        if (EventQueue != NULL)
                (void) alarm((unsigned) (EventQueue->ev_time - now));
        if (EventQueue != NULL)
                (void) alarm((unsigned) (EventQueue->ev_time - now));
+       errno = olderrno;
 }
 \f/*
 **  SLEEP -- a version of sleep that works with this stuff
 }
 \f/*
 **  SLEEP -- a version of sleep that works with this stuff
@@ -244,13 +250,16 @@ tick()
 */
 
 static bool    SleepDone;
 */
 
 static bool    SleepDone;
+static int     endsleep();
 
 
-unsigned int
+#ifndef SLEEP_T
+# define SLEEP_T       unsigned int
+#endif
+
+SLEEP_T
 sleep(intvl)
        unsigned int intvl;
 {
 sleep(intvl)
        unsigned int intvl;
 {
-       static int endsleep();
-
        if (intvl == 0)
                return;
        SleepDone = FALSE;
        if (intvl == 0)
                return;
        SleepDone = FALSE;
index 4398b85..1b9ff1e 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)collect.c  8.1 (Berkeley) 6/7/93";
+static char sccsid[] = "@(#)collect.c  8.5 (Berkeley) 10/15/93";
 #endif /* not lint */
 
 # include <errno.h>
 #endif /* not lint */
 
 # include <errno.h>
@@ -72,6 +72,7 @@ collect(smtpmode, requeueflag, e)
        bool ignrdot = smtpmode ? FALSE : IgnrDot;
        char buf[MAXLINE], buf2[MAXLINE];
        register char *workbuf, *freebuf;
        bool ignrdot = smtpmode ? FALSE : IgnrDot;
        char buf[MAXLINE], buf2[MAXLINE];
        register char *workbuf, *freebuf;
+       bool inputerr = FALSE;
        extern char *hvalue();
        extern bool isheader(), flusheol();
 
        extern char *hvalue();
        extern bool isheader(), flusheol();
 
@@ -79,7 +80,8 @@ collect(smtpmode, requeueflag, e)
        **  Create the temp file name and create the file.
        */
 
        **  Create the temp file name and create the file.
        */
 
-       e->e_df = newstr(queuename(e, 'd'));
+       e->e_df = queuename(e, 'd');
+       e->e_df = newstr(e->e_df);
        if ((tf = dfopen(e->e_df, O_WRONLY|O_CREAT, FileMode)) == NULL)
        {
                syserr("Cannot create %s", e->e_df);
        if ((tf = dfopen(e->e_df, O_WRONLY|O_CREAT, FileMode)) == NULL)
        {
                syserr("Cannot create %s", e->e_df);
@@ -244,7 +246,7 @@ collect(smtpmode, requeueflag, e)
        **  Collect the body of the message.
        */
 
        **  Collect the body of the message.
        */
 
-       do
+       for (;;)
        {
                register char *bp = buf;
 
        {
                register char *bp = buf;
 
@@ -268,39 +270,56 @@ collect(smtpmode, requeueflag, e)
                fputs("\n", tf);
                if (ferror(tf))
                        tferror(tf, e);
                fputs("\n", tf);
                if (ferror(tf))
                        tferror(tf, e);
-       } while (sfgets(buf, MAXLINE, InChannel, TimeOuts.to_datablock,
-                       "message body read") != NULL);
+               if (sfgets(buf, MAXLINE, InChannel, TimeOuts.to_datablock,
+                               "message body read") == NULL)
+                       goto readerr;
+       }
 
 
+       if (feof(InChannel) || ferror(InChannel))
+       {
 readerr:
 readerr:
+               inputerr = TRUE;
+       }
+
        if (fflush(tf) != 0)
                tferror(tf, e);
        (void) fsync(fileno(tf));
        (void) fclose(tf);
 
        /* An EOF when running SMTP is an error */
        if (fflush(tf) != 0)
                tferror(tf, e);
        (void) fsync(fileno(tf));
        (void) fclose(tf);
 
        /* An EOF when running SMTP is an error */
-       if ((feof(InChannel) || ferror(InChannel)) && OpMode == MD_SMTP)
+       if (inputerr && OpMode == MD_SMTP)
        {
                char *host;
        {
                char *host;
+               char *problem;
 
                host = RealHostName;
                if (host == NULL)
                        host = "localhost";
 
 
                host = RealHostName;
                if (host == NULL)
                        host = "localhost";
 
+               if (feof(InChannel))
+                       problem = "unexpected close";
+               else if (ferror(InChannel))
+                       problem = "I/O error";
+               else
+                       problem = "read timeout";
 # ifdef LOG
                if (LogLevel > 0 && feof(InChannel))
                        syslog(LOG_NOTICE,
 # ifdef LOG
                if (LogLevel > 0 && feof(InChannel))
                        syslog(LOG_NOTICE,
-                           "collect: unexpected close on connection from %s, sender=%s: %m\n",
-                           host, e->e_from.q_paddr);
+                           "collect: %s on connection from %s, sender=%s: %m\n",
+                           problem, host, e->e_from.q_paddr);
 # endif
                (feof(InChannel) ? usrerr : syserr)
 # endif
                (feof(InChannel) ? usrerr : syserr)
-                       ("451 collect: unexpected close on connection from %s, from=%s",
-                               host, e->e_from.q_paddr);
+                       ("451 collect: %s on connection from %s, from=%s",
+                               problem, host, e->e_from.q_paddr);
 
                /* don't return an error indication */
                e->e_to = NULL;
                e->e_flags &= ~EF_FATALERRS;
 
                /* don't return an error indication */
                e->e_to = NULL;
                e->e_flags &= ~EF_FATALERRS;
+               e->e_flags |= EF_CLRQUEUE;
 
                /* and don't try to deliver the partial message either */
 
                /* and don't try to deliver the partial message either */
+               if (InChild)
+                       ExitStat = EX_QUIT;
                finis();
        }
 
                finis();
        }
 
@@ -311,6 +330,10 @@ readerr:
 
        eatheader(e, !requeueflag);
 
 
        eatheader(e, !requeueflag);
 
+       /* collect statistics */
+       if (OpMode != MD_VERIFY)
+               markstats(e, (ADDRESS *) NULL);
+
        /*
        **  Add an Apparently-To: line if we have no recipient lines.
        */
        /*
        **  Add an Apparently-To: line if we have no recipient lines.
        */
index f875348..4ae6d84 100644 (file)
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)conf.c     8.3 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)conf.c     8.42 (Berkeley) 10/21/93";
 #endif /* not lint */
 
 #endif /* not lint */
 
+# include "sendmail.h"
+# include "pathnames.h"
 # include <sys/ioctl.h>
 # include <sys/param.h>
 # include <sys/ioctl.h>
 # include <sys/param.h>
-# include <signal.h>
 # include <pwd.h>
 # include <pwd.h>
-# include "sendmail.h"
-# include "pathnames.h"
 
 /*
 **  CONF.C -- Sendmail Configuration Tables.
 
 /*
 **  CONF.C -- Sendmail Configuration Tables.
@@ -87,7 +86,7 @@ struct hdrinfo        HdrInfo[] =
        "from",                 H_FROM,
        "reply-to",             H_FROM,
        "full-name",            H_ACHECK,
        "from",                 H_FROM,
        "reply-to",             H_FROM,
        "full-name",            H_ACHECK,
-       "return-receipt-to",    H_FROM /* |H_RECEIPTTO */,
+       "return-receipt-to",    H_FROM|H_RECEIPTTO,
        "errors-to",            H_FROM|H_ERRORSTO,
 
                /* destination fields */
        "errors-to",            H_FROM|H_ERRORSTO,
 
                /* destination fields */
@@ -128,8 +127,6 @@ struct hdrinfo      HdrInfo[] =
 **  Location of system files/databases/etc.
 */
 
 **  Location of system files/databases/etc.
 */
 
-char   *ConfFile =     _PATH_SENDMAILCF;       /* runtime configuration */
-char   *FreezeFile =   _PATH_SENDMAILFC;       /* frozen version of above */
 char   *PidFile =      _PATH_SENDMAILPID;      /* stores daemon proc id */
 
 
 char   *PidFile =      _PATH_SENDMAILPID;      /* stores daemon proc id */
 
 
@@ -146,7 +143,8 @@ struct prival PrivacyValues[] =
        "needvrfyhelo",         PRIV_NEEDVRFYHELO,
        "noexpn",               PRIV_NOEXPN,
        "novrfy",               PRIV_NOVRFY,
        "needvrfyhelo",         PRIV_NEEDVRFYHELO,
        "noexpn",               PRIV_NOEXPN,
        "novrfy",               PRIV_NOVRFY,
-       "restrictmailq",        PRIV_RESTRMAILQ,
+       "restrictmailq",        PRIV_RESTRICTMAILQ,
+       "restrictqrun",         PRIV_RESTRICTQRUN,
        "authwarnings",         PRIV_AUTHWARNINGS,
        "goaway",               PRIV_GOAWAY,
        NULL,                   0,
        "authwarnings",         PRIV_AUTHWARNINGS,
        "goaway",               PRIV_GOAWAY,
        NULL,                   0,
@@ -159,6 +157,25 @@ struct prival PrivacyValues[] =
 */
 
 int    DtableSize =    50;             /* max open files; reset in 4.2bsd */
 */
 
 int    DtableSize =    50;             /* max open files; reset in 4.2bsd */
+
+
+/*
+**  Following should be config parameters (and probably will be in
+**  future releases).  In the meantime, setting these is considered
+**  unsupported, and is intentionally undocumented.
+*/
+
+#ifdef BROKENSMTPPEERS
+bool   BrokenSmtpPeers = TRUE;         /* set if you have broken SMTP peers */
+#else
+bool   BrokenSmtpPeers = FALSE;        /* set if you have broken SMTP peers */
+#endif
+#ifdef NOLOOPBACKCHECK
+bool   CheckLoopBack = FALSE;          /* set to check HELO loopback */
+#else
+bool   CheckLoopBack = TRUE;           /* set to check HELO loopback */
+#endif
+
 \f/*
 **  SETDEFAULTS -- set default values
 **
 \f/*
 **  SETDEFAULTS -- set default values
 **
@@ -491,7 +508,12 @@ checkcompat(to, e)
 # ifdef lint
        if (to == NULL)
                to++;
 # ifdef lint
        if (to == NULL)
                to++;
-# endif lint
+# endif /* lint */
+
+       if (tTd(49, 1))
+               printf("checkcompat(to=%s, from=%s)\n",
+                       to->q_paddr, e->e_from.q_paddr);
+
 # ifdef EXAMPLE_CODE
        /* this code is intended as an example only */
        register STAB *s;
 # ifdef EXAMPLE_CODE
        /* this code is intended as an example only */
        register STAB *s;
@@ -508,6 +530,29 @@ checkcompat(to, e)
        return (EX_OK);
 }
 \f/*
        return (EX_OK);
 }
 \f/*
+**  SETSIGNAL -- set a signal handler
+**
+**     This is essentially old BSD "signal(3)".
+*/
+
+sigfunc_t
+setsignal(sig, handler)
+       int sig;
+       sigfunc_t handler;
+{
+#if defined(SYS5SIGNALS) || defined(BSD4_3) || defined(_AUX_SOURCE)
+       return signal(sig, handler);
+#else
+       struct sigaction n, o;
+
+       bzero(&n, sizeof n);
+       n.sa_handler = handler;
+       if (sigaction(sig, &n, &o) < 0)
+               return SIG_ERR;
+       return o.sa_handler;
+#endif
+}
+\f/*
 **  HOLDSIGS -- arrange to hold all signals
 **
 **     Parameters:
 **  HOLDSIGS -- arrange to hold all signals
 **
 **     Parameters:
@@ -542,6 +587,23 @@ rlsesigs()
 {
 }
 \f/*
 {
 }
 \f/*
+**  INIT_MD -- do machine dependent initializations
+**
+**     Systems that have global modes that should be set should do
+**     them here rather than in main.
+*/
+
+#ifdef _AUX_SOURCE
+# include      <compat.h>
+#endif
+
+init_md()
+{
+#ifdef _AUX_SOURCE
+       setcompat(getcompat() | COMPAT_BSDPROT);
+#endif
+}
+\f/*
 **  GETLA -- get the current load average
 **
 **     This code stolen from la.c.
 **  GETLA -- get the current load average
 **
 **     This code stolen from la.c.
@@ -558,71 +620,36 @@ rlsesigs()
 
 /* try to guess what style of load average we have */
 #define LA_ZERO                1       /* always return load average as zero */
 
 /* try to guess what style of load average we have */
 #define LA_ZERO                1       /* always return load average as zero */
-#define LA_INT         2       /* read kmem for avenrun; interpret as int */
+#define LA_INT         2       /* read kmem for avenrun; interpret as long */
 #define LA_FLOAT       3       /* read kmem for avenrun; interpret as float */
 #define LA_SUBR                4       /* call getloadavg */
 #define LA_FLOAT       3       /* read kmem for avenrun; interpret as float */
 #define LA_SUBR                4       /* call getloadavg */
+#define LA_MACH                5       /* MACH load averages (as on NeXT boxes) */
+#define LA_SHORT       6       /* read kmem for avenrun; interpret as short */
 
 
+/* do guesses based on general OS type */
 #ifndef LA_TYPE
 #ifndef LA_TYPE
-#  if defined(sun) && !defined(BSD)
-#    define LA_TYPE            LA_INT
-#  endif
-#  if defined(mips) || defined(__alpha)
-     /* Ultrix or OSF/1 or RISC/os */
-#    define LA_TYPE            LA_INT
-#    define LA_AVENRUN         "avenrun"
-#  endif
-#  if defined(__hpux)
-#    define LA_TYPE            LA_FLOAT
-#    define LA_AVENRUN         "avenrun"
-#  endif
-#  if defined(__NeXT__)
-#    define LA_TYPE            LA_ZERO
-#  endif
-
-/* now do the guesses based on general OS type */
-#  ifndef LA_TYPE
-#   if defined(SYSTEM5)
-#    define LA_TYPE            LA_INT
-#    define LA_AVENRUN         "avenrun"
-#   else
-#    if defined(BSD)
-#     define LA_TYPE           LA_SUBR
-#    else
-#     define LA_TYPE           LA_ZERO
-#    endif
-#   endif
-#  endif
+# define LA_TYPE       LA_ZERO
 #endif
 
 #endif
 
-#if (LA_TYPE == LA_INT) || (LA_TYPE == LA_FLOAT)
+#if (LA_TYPE == LA_INT) || (LA_TYPE == LA_FLOAT) || (LA_TYPE == LA_SHORT)
 
 #include <nlist.h>
 
 #ifndef LA_AVENRUN
 
 #include <nlist.h>
 
 #ifndef LA_AVENRUN
-#define LA_AVENRUN     "_avenrun"
+# ifdef SYSTEM5
+#  define LA_AVENRUN   "avenrun"
+# else
+#  define LA_AVENRUN   "_avenrun"
+# endif
 #endif
 
 /* _PATH_UNIX should be defined in <paths.h> */
 #ifndef _PATH_UNIX
 #endif
 
 /* _PATH_UNIX should be defined in <paths.h> */
 #ifndef _PATH_UNIX
-#  if defined(__hpux)
-#    define _PATH_UNIX         "/hp-ux"
-#  endif
-#  if defined(mips) && !defined(ultrix)
-     /* powerful RISC/os */
-#    define _PATH_UNIX         "/unix"
-#  endif
-#  if defined(Solaris2)
-     /* Solaris 2 */
-#    define _PATH_UNIX         "/kernel/unix"
-#  endif
-#  if defined(SYSTEM5)
-#    ifndef _PATH_UNIX
-#      define _PATH_UNIX       "/unix"
-#    endif
-#  endif
-#  ifndef _PATH_UNIX
-#    define _PATH_UNIX         "/vmunix"
-#  endif
+# if defined(SYSTEM5)
+#  define _PATH_UNIX   "/unix"
+# else
+#  define _PATH_UNIX   "/vmunix"
+# endif
 #endif
 
 struct nlist Nl[] =
 #endif
 
 struct nlist Nl[] =
@@ -641,12 +668,12 @@ struct    nlist Nl[] =
 #  define FSHIFT       10
 # endif
 
 #  define FSHIFT       10
 # endif
 
-# if (LA_TYPE == LA_INT)
+# if (LA_TYPE == LA_INT) || (LA_TYPE == LA_SHORT)
 #  define FSHIFT       8
 # endif
 #endif
 
 #  define FSHIFT       8
 # endif
 #endif
 
-#if (LA_TYPE == LA_INT) && !defined(FSCALE)
+#if ((LA_TYPE == LA_INT) || (LA_TYPE == LA_SHORT)) && !defined(FSCALE)
 #  define FSCALE       (1 << FSHIFT)
 #endif
 
 #  define FSCALE       (1 << FSHIFT)
 #endif
 
@@ -656,7 +683,11 @@ getla()
 #if LA_TYPE == LA_INT
        long avenrun[3];
 #else
 #if LA_TYPE == LA_INT
        long avenrun[3];
 #else
+# if LA_TYPE == LA_SHORT
+       short avenrun[3];
+# else
        double avenrun[3];
        double avenrun[3];
+# endif
 #endif
        extern off_t lseek();
        extern int errno;
 #endif
        extern off_t lseek();
        extern int errno;
@@ -697,7 +728,7 @@ getla()
                        printf("getla: lseek or read: %s\n", errstring(errno));
                return (-1);
        }
                        printf("getla: lseek or read: %s\n", errstring(errno));
                return (-1);
        }
-#if LA_TYPE == LA_INT
+#if (LA_TYPE == LA_INT) || (LA_TYPE == LA_SHORT)
        if (tTd(3, 5))
        {
                printf("getla: avenrun = %d", avenrun[0]);
        if (tTd(3, 5))
        {
                printf("getla: avenrun = %d", avenrun[0]);
@@ -725,6 +756,22 @@ getla()
 #else
 #if LA_TYPE == LA_SUBR
 
 #else
 #if LA_TYPE == LA_SUBR
 
+#ifdef DGUX
+
+#include <sys/dg_sys_info.h>
+
+int getla()
+{
+       struct dg_sys_info_load_info load_info;
+
+       dg_sys_info((long *)&load_info,
+               DG_SYS_INFO_LOAD_INFO_TYPE, DG_SYS_INFO_LOAD_VERSION_0);
+
+       return((int) (load_info.one_minute + 0.5));
+}
+
+#else
+
 getla()
 {
        double avenrun[3];
 getla()
 {
        double avenrun[3];
@@ -740,6 +787,38 @@ getla()
        return ((int) (avenrun[0] + 0.5));
 }
 
        return ((int) (avenrun[0] + 0.5));
 }
 
+#endif /* DGUX */
+#else
+#if LA_TYPE == LA_MACH
+
+/*
+**  This has been tested on NeXT release 2.1.
+*/
+
+#include <mach.h>
+
+getla()
+{
+       processor_set_t default_set;
+       kern_return_t error;
+       unsigned int info_count;
+       struct processor_set_basic_info info;
+       host_t host;
+
+       error = processor_set_default(host_self(), &default_set);
+       if (error != KERN_SUCCESS)
+               return -1;
+       info_count = PROCESSOR_SET_BASIC_INFO_COUNT;
+       if (processor_set_info(default_set, PROCESSOR_SET_BASIC_INFO,
+                              &host, (processor_set_info_t)&info,
+                              &info_count) != KERN_SUCCESS)
+       {
+               return -1;
+       }
+       return (int) (info.load_average + (LOAD_SCALE / 2)) / LOAD_SCALE;
+}
+
+
 #else
 
 getla()
 #else
 
 getla()
@@ -749,6 +828,7 @@ getla()
        return (0);
 }
 
        return (0);
 }
 
+#endif
 #endif
 #endif
 \f/*
 #endif
 #endif
 \f/*
@@ -828,6 +908,9 @@ refuseconnections()
 # ifdef BSD4_4
 #  include <machine/vmparam.h>
 #  include <sys/exec.h>
 # ifdef BSD4_4
 #  include <machine/vmparam.h>
 #  include <sys/exec.h>
+#  ifdef __bsdi__
+#   undef PS_STRINGS   /* BSDI 1.0 doesn't do PS_STRINGS as we expect */
+#  endif
 #  ifdef PS_STRINGS
 #   define SETPROC_STATIC static
 #  endif
 #  ifdef PS_STRINGS
 #   define SETPROC_STATIC static
 #  endif
@@ -904,12 +987,11 @@ setproctitle(fmt, va_alist)
 **             Picks up extant zombies.
 */
 
 **             Picks up extant zombies.
 */
 
-# include <sys/wait.h>
-
 void
 reapchild()
 {
 void
 reapchild()
 {
-# if defined(WIFEXITED) && !defined(__NeXT__)
+       int olderrno = errno;
+# ifdef HASWAITPID
        auto int status;
        int count;
        int pid;
        auto int status;
        int count;
        int pid;
@@ -937,9 +1019,10 @@ reapchild()
                continue;
 # endif /* WNOHANG */
 # endif
                continue;
 # endif /* WNOHANG */
 # endif
-# ifdef SYSTEM5
-       (void) signal(SIGCHLD, reapchild);
+# ifdef SYS5SIGNALS
+       (void) setsignal(SIGCHLD, reapchild);
 # endif
 # endif
+       errno = olderrno;
 }
 \f/*
 **  UNSETENV -- remove a variable from the environment
 }
 \f/*
 **  UNSETENV -- remove a variable from the environment
@@ -960,7 +1043,7 @@ reapchild()
 **             Modifies environ.
 */
 
 **             Modifies environ.
 */
 
-#ifdef UNSETENV
+#ifndef HASUNSETENV
 
 void
 unsetenv(name)
 
 void
 unsetenv(name)
@@ -981,7 +1064,7 @@ unsetenv(name)
                *pp = pp[1];
 }
 
                *pp = pp[1];
 }
 
-#endif /* UNSETENV */
+#endif
 \f/*
 **  GETDTABLESIZE -- return number of file descriptors
 **
 \f/*
 **  GETDTABLESIZE -- return number of file descriptors
 **
@@ -1011,11 +1094,11 @@ getdtsize()
                return rl.rlim_cur;
 #endif
 
                return rl.rlim_cur;
 #endif
 
-# if defined(_SC_OPEN_MAX) && !defined(NO_SYSCONF)
-       return sysconf(_SC_OPEN_MAX);
-# else
-#  ifdef HASGETDTABLESIZE
+# ifdef HASGETDTABLESIZE
        return getdtablesize();
        return getdtablesize();
+# else
+#  ifdef _SC_OPEN_MAX
+       return sysconf(_SC_OPEN_MAX);
 #  else
        return NOFILE;
 #  endif
 #  else
        return NOFILE;
 #  endif
@@ -1089,12 +1172,6 @@ uname(name)
 **     Stub implementation for System V style systems
 */
 
 **     Stub implementation for System V style systems
 */
 
-#ifndef HASINITGROUPS
-# if !defined(SYSTEM5) || defined(__hpux)
-#  define HASINITGROUPS
-# endif
-#endif
-
 #ifndef HASINITGROUPS
 
 initgroups(name, basegid)
 #ifndef HASINITGROUPS
 
 initgroups(name, basegid)
@@ -1114,35 +1191,188 @@ initgroups(name, basegid)
 pid_t
 setsid __P ((void))
 {
 pid_t
 setsid __P ((void))
 {
-# ifdef SYSTEM5
+#ifdef TIOCNOTTY
+       int fd;
+
+       fd = open("/dev/tty", 2);
+       if (fd >= 0)
+       {
+               (void) ioctl(fd, (int) TIOCNOTTY, (char *) 0);
+               (void) close(fd);
+       }
+#endif /* TIOCNOTTY */
+# ifdef SYS5SETPGRP
        return setpgrp();
 # else
        return setpgrp();
 # else
-       return 0;
+       return setpgid(0, getpid());
 # endif
 }
 
 #endif
 \f/*
 # endif
 }
 
 #endif
 \f/*
-**  ENOUGHSPACE -- check to see if there is enough free space on the queue fs
+**  DGUX_INET_ADDR -- inet_addr for DG/UX
+**
+**     Data General DG/UX version of inet_addr returns a struct in_addr
+**     instead of a long.  This patches things.
+*/
+
+#ifdef DGUX
+
+#undef inet_addr
+
+long
+dgux_inet_addr(host)
+       char *host;
+{
+       struct in_addr haddr;
+
+       haddr = inet_addr(host);
+       return haddr.s_addr;
+}
+
+#endif
+\f/*
+**  GETOPT -- for old systems or systems with bogus implementations
+*/
+
+#ifdef NEEDGETOPT
+
+/*
+ * Copyright (c) 1985 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
+
+
+/*
+** this version hacked to add `atend' flag to allow state machine
+** to reset if invoked by the program to scan args for a 2nd time
+*/
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)getopt.c   4.3 (Berkeley) 3/9/86";
+#endif /* LIBC_SCCS and not lint */
+
+#include <stdio.h>
+
+/*
+ * get option letter from argument vector
+ */
+int    opterr = 1,             /* if error message should be printed */
+       optind = 1,             /* index into parent argv vector */
+       optopt;                 /* character checked for validity */
+char   *optarg;                /* argument associated with option */
+
+#define BADCH  (int)'?'
+#define EMSG   ""
+#define tell(s)        if (opterr) {fputs(*nargv,stderr);fputs(s,stderr); \
+               fputc(optopt,stderr);fputc('\n',stderr);return(BADCH);}
+
+getopt(nargc,nargv,ostr)
+int    nargc;
+char   **nargv,
+       *ostr;
+{
+       static char     *place = EMSG;  /* option letter processing */
+       static char     atend = 0;
+       register char   *oli;           /* option letter list index */
+
+       if (atend) {
+               atend = 0;
+               place = EMSG;
+       }
+       if(!*place) {                   /* update scanning pointer */
+               if (optind >= nargc || *(place = nargv[optind]) != '-' || !*++place) {
+                       atend++;
+                       return(EOF);
+               }
+               if (*place == '-') {    /* found "--" */
+                       ++optind;
+                       atend++;
+                       return(EOF);
+               }
+       }                               /* option letter okay? */
+       if ((optopt = (int)*place++) == (int)':' || !(oli = strchr(ostr,optopt))) {
+               if (!*place) ++optind;
+               tell(": illegal option -- ");
+       }
+       if (*++oli != ':') {            /* don't need argument */
+               optarg = NULL;
+               if (!*place) ++optind;
+       }
+       else {                          /* need an argument */
+               if (*place) optarg = place;     /* no white space */
+               else if (nargc <= ++optind) {   /* no arg */
+                       place = EMSG;
+                       tell(": option requires an argument -- ");
+               }
+               else optarg = nargv[optind];    /* white space */
+               place = EMSG;
+               ++optind;
+       }
+       return(optopt);                 /* dump back option letter */
+}
+
+#endif
+\f/*
+**  VFPRINTF, VSPRINTF -- for old 4.3 BSD systems missing a real version
+*/
+
+#ifdef NEEDVPRINTF
+
+#define MAXARG 16
+
+vfprintf(fp, fmt, ap)
+       FILE *  fp;
+       char *  fmt;
+       char ** ap;
+{
+       char *  bp[MAXARG];
+       int     i = 0;
+
+       while (*ap && i < MAXARG)
+               bp[i++] = *ap++;
+       fprintf(fp, fmt, bp[0], bp[1], bp[2], bp[3],
+                        bp[4], bp[5], bp[6], bp[7],
+                        bp[8], bp[9], bp[10], bp[11],
+                        bp[12], bp[13], bp[14], bp[15]);
+}
+
+vsprintf(s, fmt, ap)
+       char *  s;
+       char *  fmt;
+       char ** ap;
+{
+       char *  bp[MAXARG];
+       int     i = 0;
+
+       while (*ap && i < MAXARG)
+               bp[i++] = *ap++;
+       sprintf(s, fmt, bp[0], bp[1], bp[2], bp[3],
+                       bp[4], bp[5], bp[6], bp[7],
+                       bp[8], bp[9], bp[10], bp[11],
+                       bp[12], bp[13], bp[14], bp[15]);
+}
+
+#endif
+\f/*
+**  FREESPACE -- see how much free space is on the queue filesystem
 **
 **     Only implemented if you have statfs.
 **
 **     Parameters:
 **
 **     Only implemented if you have statfs.
 **
 **     Parameters:
-**             msize -- the size to check against.  If zero, we don't yet
-**                     know how big the message will be, so just check for
-**                     a "reasonable" amount.
+**             dir -- the directory in question.
+**             bsize -- a variable into which the filesystem
+**                     block size is stored.
 **
 **     Returns:
 **
 **     Returns:
-**             TRUE if there is enough space.
-**             FALSE otherwise.
+**             The number of bytes free on the queue filesystem.
+**             -1 if the statfs call fails.
+**
+**     Side effects:
+**             Puts the filesystem block size into bsize.
 */
 
 */
 
-#ifndef HASSTATFS
-# if defined(BSD4_4) || defined(__osf__)
-#  define HASSTATFS
-# endif
-#endif
-
 #ifdef HASSTATFS
 # undef HASUSTAT
 #endif
 #ifdef HASSTATFS
 # undef HASUSTAT
 #endif
@@ -1152,10 +1382,10 @@ setsid __P ((void))
 #endif
 
 #ifdef HASSTATFS
 #endif
 
 #ifdef HASSTATFS
-# if defined(sgi) || defined(apollo)
+# if defined(IRIX) || defined(apollo) || defined(_SCO_unix_) || defined(UMAXV) || defined(DGUX)
 #  include <sys/statfs.h>
 # else
 #  include <sys/statfs.h>
 # else
-#  if (defined(sun) && !defined(BSD)) || defined(__hpux)
+#  if (defined(sun) && !defined(BSD)) || defined(__hpux) || defined(_CONVEX_SOURCE) || defined(NeXT) || defined(_AUX_SOURCE)
 #   include <sys/vfs.h>
 #  else
 #   include <sys/mount.h>
 #   include <sys/vfs.h>
 #  else
 #   include <sys/mount.h>
@@ -1163,9 +1393,10 @@ setsid __P ((void))
 # endif
 #endif
 
 # endif
 #endif
 
-bool
-enoughspace(msize)
-       long msize;
+long
+freespace(dir, bsize)
+       char *dir;
+       long *bsize;
 {
 #if defined(HASSTATFS) || defined(HASUSTAT)
 # if defined(HASUSTAT)
 {
 #if defined(HASSTATFS) || defined(HASUSTAT)
 # if defined(HASUSTAT)
@@ -1181,46 +1412,81 @@ enoughspace(msize)
 #  else
        struct statfs fs;
 #   define FSBLOCKSIZE fs.f_bsize
 #  else
        struct statfs fs;
 #   define FSBLOCKSIZE fs.f_bsize
+#   if defined(_SCO_unix_) || defined(IRIX)
+#    define f_bavail f_bfree
+#   endif
 #  endif
 # endif
        extern int errno;
 
 #  endif
 # endif
        extern int errno;
 
-       if (MinBlocksFree <= 0 && msize <= 0)
-       {
-               if (tTd(4, 80))
-                       printf("enoughspace: no threshold\n");
-               return TRUE;
-       }
-
 # if defined(HASUSTAT)
 # if defined(HASUSTAT)
-       if (stat(QueueDir, &statbuf) == 0 && ustat(statbuf.st_dev, &fs) == 0)
+       if (stat(dir, &statbuf) == 0 && ustat(statbuf.st_dev, &fs) == 0)
 # else
 # else
-#  if defined(sgi) || defined(apollo)
-       if (statfs(QueueDir, &fs, sizeof fs, 0) == 0)
+#  if defined(IRIX) || defined(apollo) || defined(UMAXV) || defined(DGUX)
+       if (statfs(dir, &fs, sizeof fs, 0) == 0)
 #  else
 #   if defined(ultrix)
 #  else
 #   if defined(ultrix)
-       if (statfs(QueueDir, &fs) > 0)
+       if (statfs(dir, &fs) > 0)
 #   else
 #   else
-       if (statfs(QueueDir, &fs) == 0)
+       if (statfs(dir, &fs) == 0)
 #   endif
 #  endif
 # endif
 #   endif
 #  endif
 # endif
+       {
+               if (bsize != NULL)
+                       *bsize = FSBLOCKSIZE;
+               return (fs.f_bavail);
+       }
+#endif
+       return (-1);
+}
+\f/*
+**  ENOUGHSPACE -- check to see if there is enough free space on the queue fs
+**
+**     Only implemented if you have statfs.
+**
+**     Parameters:
+**             msize -- the size to check against.  If zero, we don't yet
+**             know how big the message will be, so just check for
+**             a "reasonable" amount.
+**
+**     Returns:
+**             TRUE if there is enough space.
+**             FALSE otherwise.
+*/
+
+bool
+enoughspace(msize)
+       long msize;
+{
+       long bfree, bsize;
+
+       if (MinBlocksFree <= 0 && msize <= 0)
+       {
+               if (tTd(4, 80))
+                       printf("enoughspace: no threshold\n");
+               return TRUE;
+       }
+
+       if ((bfree = freespace(QueueDir, &bsize)) >= 0)
        {
                if (tTd(4, 80))
                        printf("enoughspace: bavail=%ld, need=%ld\n",
        {
                if (tTd(4, 80))
                        printf("enoughspace: bavail=%ld, need=%ld\n",
-                               fs.f_bavail, msize);
+                               bfree, msize);
 
                /* convert msize to block count */
 
                /* convert msize to block count */
-               msize = msize / FSBLOCKSIZE + 1;
+               msize = msize / bsize + 1;
                if (MinBlocksFree >= 0)
                        msize += MinBlocksFree;
 
                if (MinBlocksFree >= 0)
                        msize += MinBlocksFree;
 
-               if (fs.f_bavail < msize)
+               if (bfree < msize)
                {
 #ifdef LOG
                        if (LogLevel > 0)
                {
 #ifdef LOG
                        if (LogLevel > 0)
-                               syslog(LOG_ALERT, "%s: low on space (have %ld, need %ld)",
-                                       QueueDir, fs.f_bavail, msize);
+                               syslog(LOG_ALERT,
+                                       "%s: low on space (have %ld, %s needs %ld in %s)",
+                                       CurEnv->e_id, bfree,
+                                       CurHostName, msize, QueueDir);
 #endif
                        return FALSE;
                }
 #endif
                        return FALSE;
                }
@@ -1228,7 +1494,6 @@ enoughspace(msize)
        else if (tTd(4, 80))
                printf("enoughspace failure: min=%ld, need=%ld: %s\n",
                        MinBlocksFree, msize, errstring(errno));
        else if (tTd(4, 80))
                printf("enoughspace failure: min=%ld, need=%ld: %s\n",
                        MinBlocksFree, msize, errstring(errno));
-#endif
        return TRUE;
 }
 \f/*
        return TRUE;
 }
 \f/*
@@ -1322,7 +1587,7 @@ transienterror(err)
 #ifdef EADDRNOTAVAIL
          case EADDRNOTAVAIL:           /* Can't assign requested address */
 #endif
 #ifdef EADDRNOTAVAIL
          case EADDRNOTAVAIL:           /* Can't assign requested address */
 #endif
-#ifdef ENOSR
+#if defined(ENOSR) && (!defined(ENOBUFS) || (ENOBUFS != ENOSR))
          case ENOSR:                   /* Out of streams resources */
 #endif
                return TRUE;
          case ENOSR:                   /* Out of streams resources */
 #endif
                return TRUE;
@@ -1332,11 +1597,12 @@ transienterror(err)
        return FALSE;
 }
 \f/*
        return FALSE;
 }
 \f/*
-**  LOCKFILE -- lock a file using flock or (shudder) lockf
+**  LOCKFILE -- lock a file using flock or (shudder) fcntl locking
 **
 **     Parameters:
 **             fd -- the file descriptor of the file.
 **             filename -- the file name (for error messages).
 **
 **     Parameters:
 **             fd -- the file descriptor of the file.
 **             filename -- the file name (for error messages).
+**             ext -- the filename extension.
 **             type -- type of the lock.  Bits can be:
 **                     LOCK_EX -- exclusive lock.
 **                     LOCK_NB -- non-blocking.
 **             type -- type of the lock.  Bits can be:
 **                     LOCK_EX -- exclusive lock.
 **                     LOCK_NB -- non-blocking.
@@ -1347,15 +1613,20 @@ transienterror(err)
 */
 
 bool
 */
 
 bool
-lockfile(fd, filename, type)
+lockfile(fd, filename, ext, type)
        int fd;
        char *filename;
        int fd;
        char *filename;
+       char *ext;
        int type;
 {
        int type;
 {
-# ifdef LOCKF
+# ifndef HASFLOCK
        int action;
        struct flock lfd;
 
        int action;
        struct flock lfd;
 
+       if (ext == NULL)
+               ext = "";
+               
+       bzero(&lfd, sizeof lfd);
        if (bitset(LOCK_UN, type))
                lfd.l_type = F_UNLCK;
        else if (bitset(LOCK_EX, type))
        if (bitset(LOCK_UN, type))
                lfd.l_type = F_UNLCK;
        else if (bitset(LOCK_EX, type))
@@ -1368,19 +1639,109 @@ lockfile(fd, filename, type)
        else
                action = F_SETLKW;
 
        else
                action = F_SETLKW;
 
-       lfd.l_whence = lfd.l_start = lfd.l_len = 0;
+       if (tTd(55, 60))
+               printf("lockfile(%s%s, action=%d, type=%d): ",
+                       filename, ext, action, lfd.l_type);
 
        if (fcntl(fd, action, &lfd) >= 0)
 
        if (fcntl(fd, action, &lfd) >= 0)
+       {
+               if (tTd(55, 60))
+                       printf("SUCCESS\n");
                return TRUE;
                return TRUE;
+       }
+
+       if (tTd(55, 60))
+               printf("(%s) ", errstring(errno));
+
+       /*
+       **  On SunOS, if you are testing using -oQ/tmp/mqueue or
+       **  -oA/tmp/aliases or anything like that, and /tmp is mounted
+       **  as type "tmp" (that is, served from swap space), the
+       **  previous fcntl will fail with "Invalid argument" errors.
+       **  Since this is fairly common during testing, we will assume
+       **  that this indicates that the lock is successfully grabbed.
+       */
+
+       if (errno == EINVAL)
+       {
+               if (tTd(55, 60))
+                       printf("SUCCESS\n");
+               return TRUE;
+       }
 
        if (!bitset(LOCK_NB, type) || (errno != EACCES && errno != EAGAIN))
 
        if (!bitset(LOCK_NB, type) || (errno != EACCES && errno != EAGAIN))
-               syserr("cannot lockf(%s, %o)", filename, type);
+       {
+               int omode = -1;
+#  ifdef F_GETFL
+               int oerrno = errno;
+
+               (void) fcntl(fd, F_GETFL, &omode);
+               errno = oerrno;
+#  endif
+               syserr("cannot lockf(%s%s, fd=%d, type=%o, omode=%o, euid=%d)",
+                       filename, ext, fd, type, omode, geteuid());
+       }
 # else
 # else
+       if (ext == NULL)
+               ext = "";
+
+       if (tTd(55, 60))
+               printf("lockfile(%s%s, type=%o): ", filename, ext, type);
+
        if (flock(fd, type) >= 0)
        if (flock(fd, type) >= 0)
+       {
+               if (tTd(55, 60))
+                       printf("SUCCESS\n");
                return TRUE;
                return TRUE;
+       }
+
+       if (tTd(55, 60))
+               printf("(%s) ", errstring(errno));
 
        if (!bitset(LOCK_NB, type) || errno != EWOULDBLOCK)
 
        if (!bitset(LOCK_NB, type) || errno != EWOULDBLOCK)
-               syserr("cannot flock(%s, %o)", filename, type);
+       {
+               int omode = -1;
+#  ifdef F_GETFL
+               int oerrno = errno;
+
+               (void) fcntl(fd, F_GETFL, &omode);
+               errno = oerrno;
+#  endif
+               syserr("cannot flock(%s%s, fd=%d, type=%o, omode=%o, euid=%d)",
+                       filename, ext, fd, type, omode, geteuid());
+       }
 # endif
 # endif
+       if (tTd(55, 60))
+               printf("FAIL\n");
        return FALSE;
 }
        return FALSE;
 }
+\f/*
+**  GETCFNAME -- return the name of the .cf file.
+**
+**     Some systems (e.g., NeXT) determine this dynamically.
+*/
+
+char *
+getcfname()
+{
+       if (ConfFile != NULL)
+               return ConfFile;
+       return _PATH_SENDMAILCF;
+}
+\f/*
+**  SETVENDOR -- process vendor code from V configuration line
+**
+**     Parameters:
+**             vendor -- string representation of vendor.
+**
+**     Returns:
+**             TRUE -- if ok.
+**             FALSE -- if vendor code could not be processed.
+*/
+
+bool
+setvendor(vendor)
+       char *vendor;
+{
+       return (strcasecmp(vendor, "Berkeley") == 0);
+}
index e3ea487..2580c41 100644 (file)
@@ -31,7 +31,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)conf.h      8.3 (Berkeley) 7/13/93
+ *     @(#)conf.h      8.42 (Berkeley) 10/21/93
  */
 
 /*
  */
 
 /*
 */
 
 # include <sys/param.h>
 */
 
 # include <sys/param.h>
+# include <sys/types.h>
 # include <sys/stat.h>
 # include <sys/stat.h>
+# include <sys/file.h>
+# include <sys/wait.h>
 # include <fcntl.h>
 # include <fcntl.h>
+# include <signal.h>
 
 
-/*
+/**********************************************************************
 **  Table sizes, etc....
 **     There shouldn't be much need to change these....
 **  Table sizes, etc....
 **     There shouldn't be much need to change these....
-*/
+**********************************************************************/
 
 # define MAXLINE       2048            /* max line length */
 # define MAXNAME       256             /* max length of a name */
 
 # define MAXLINE       2048            /* max line length */
 # define MAXNAME       256             /* max length of a name */
@@ -59,7 +63,6 @@
 # define MAXKEY                128             /* maximum size of a database key */
 # define MEMCHUNKSIZE  1024            /* chunk size for memory allocation */
 # define MAXUSERENVIRON        100             /* max envars saved, must be >= 3 */
 # define MAXKEY                128             /* maximum size of a database key */
 # define MEMCHUNKSIZE  1024            /* chunk size for memory allocation */
 # define MAXUSERENVIRON        100             /* max envars saved, must be >= 3 */
-# define MAXIPADDR     16              /* max # of IP addrs for this host */
 # define MAXALIASDB    12              /* max # of alias databases */
 # define PSBUFSIZE     (MAXLINE + MAXATOM)     /* size of prescan buffer */
 
 # define MAXALIASDB    12              /* max # of alias databases */
 # define PSBUFSIZE     (MAXLINE + MAXATOM)     /* size of prescan buffer */
 
 # define QUEUESIZE     1000            /* max # of jobs per queue run */
 # endif
 
 # define QUEUESIZE     1000            /* max # of jobs per queue run */
 # endif
 
-/*
+/**********************************************************************
 **  Compilation options.
 **
 **     #define these if they are available; comment them out otherwise.
 **  Compilation options.
 **
 **     #define these if they are available; comment them out otherwise.
-*/
+**********************************************************************/
 
 # define LOG           1       /* enable logging */
 # define UGLYUUCP      1       /* output ugly UUCP From lines */
 
 # define LOG           1       /* enable logging */
 # define UGLYUUCP      1       /* output ugly UUCP From lines */
 # endif
 
 /*
 # endif
 
 /*
+**  Due to a "feature" in some operating systems such as Ultrix 4.3 and
+**  HPUX 8.0, if you receive a "No route to host" message (ICMP message
+**  ICMP_UNREACH_HOST) on _any_ connection, all connections to that host
+**  are closed.  Some firewalls return this error if you try to connect
+**  to the IDENT port (113), so you can't receive email from these hosts
+**  on these systems.  The firewall really should use a more specific
+**  message such as ICMP_UNREACH_PROTOCOL or _PORT or _NET_PROHIB.  This
+**  will get #undefed below as needed.
+*/
+
+# define IDENTPROTO    1       /* use IDENT proto (RFC 1413) */
+
+/**********************************************************************
 **  Operating system configuration.
 **
 **     Unless you are porting to a new OS, you shouldn't have to
 **     change these.
 **  Operating system configuration.
 **
 **     Unless you are porting to a new OS, you shouldn't have to
 **     change these.
-*/
+**********************************************************************/
 
 
-/* general "standard C" defines */
-#ifdef __STDC__
-# define HASSETVBUF    1       /* yes, we have setvbuf in libc */
-#endif
+/*
+**  Per-Operating System defines
+*/
 
 
-/* general POSIX defines */
-#ifdef _POSIX_VERSION
-# define HASSETSID     1       /* has setsid(2) call */
-#endif
 
 /*
 
 /*
-**  Per-Operating System defines
+**  HP-UX -- tested for 8.07
 */
 
 */
 
-/* HP-UX -- tested for 8.07 */
 # ifdef __hpux
 # ifdef __hpux
+/* avoid m_flags conflict between db.h & sys/sysmacros.h on HP 300 */
+# undef m_flags
 # define SYSTEM5       1       /* include all the System V defines */
 # define SYSTEM5       1       /* include all the System V defines */
-# define UNSETENV      1       /* need unsetenv(3) support */
-# define HASSETEUID    1       /* we have seteuid call */
-# define seteuid(uid)  setresuid(-1, uid, -1)  
-# ifndef __STDC__
-#  define HASSETVBUF   1       /* we have setvbuf in libc (but not __STDC__) */
-# endif
+# define HASINITGROUPS 1       /* has initgroups(3) call */
+# define HASSTATFS     1       /* has the statfs(2) syscall */
+# define HASSETREUID   1       /* has setreuid(2) call */
+# define setreuid(r, e)                setresuid(r, e, -1)     
+# define LA_TYPE       LA_FLOAT
+# define _PATH_UNIX    "/hp-ux"
+# undef IDENTPROTO             /* TCP/IP implementation is broken */
 # endif
 
 # endif
 
-/* IBM AIX 3.x -- actually tested for 3.2.3 */
+
+/*
+**  IBM AIX 3.x -- actually tested for 3.2.3
+*/
+
 # ifdef _AIX3
 # ifdef _AIX3
-# define LOCKF         1       /* use System V lockf instead of flock */
+# define HASINITGROUPS 1       /* has initgroups(3) call */
 # define FORK          fork    /* no vfork primitive available */
 # define FORK          fork    /* no vfork primitive available */
-# define UNSETENV      1       /* need unsetenv(3) support */
-# define SYS5TZ                1       /* use System V style timezones */
+# undef  SETPROCTITLE          /* setproctitle confuses AIX */
 # endif
 
 # endif
 
-/* Silicon Graphics IRIX */
+
+/*
+**  Silicon Graphics IRIX
+**
+**     Compiles on 4.0.1.
+*/
+
 # ifdef IRIX
 # ifdef IRIX
+# include <sys/sysmacros.h>
+# define HASSETREUID   1       /* has setreuid(2) call */
+# define HASINITGROUPS 1       /* has initgroups(3) call */
+# define HASSTATFS     1       /* has the statfs(2) syscall */
 # define FORK          fork    /* no vfork primitive available */
 # define FORK          fork    /* no vfork primitive available */
-# define UNSETENV      1       /* need unsetenv(3) support */
-# define setpgrp       BSDsetpgrp
+# define WAITUNION     1       /* use "union wait" as wait argument type */
+# define setpgid       BSDsetpgrp
+# define GIDSET_T      gid_t
 # endif
 
 # endif
 
-/* various systems from Sun Microsystems */
+
+/*
+**  SunOS
+*/
+
 #if defined(sun) && !defined(BSD)
 
 #if defined(sun) && !defined(BSD)
 
-# define UNSETENV      1       /* need unsetenv(3) support */
+# define LA_TYPE       LA_INT
+# define HASSETREUID   1       /* has setreuid(2) call */
+# define HASINITGROUPS 1       /* has initgroups(3) call */
 
 # ifdef SOLARIS
 
 # ifdef SOLARIS
-                       /* Solaris 2.x */
-#  define LOCKF                1       /* use System V lockf instead of flock */
-#  define HASUSTAT     1       /* has the ustat(2) syscall */
-#  define bcopy(s, d, l)       (memmove((d), (s), (l)))
-#  define bzero(d, l)          (memset((d), '\0', (l)))
-#  define bcmp(s, d, l)                (memcmp((s), (d), (l)))
+                       /* Solaris 2.x (a.k.a. SunOS 5.x) */
+#  define SYSTEM5      1       /* use System V definitions */
+#  define setreuid(r, e)       seteuid(e)
+#  include <sys/sysmacros.h>
 #  include <sys/time.h>
 #  include <sys/time.h>
+#  define gethostbyname        __switch_gethostbyname  /* get working version */
+#  define gethostbyaddr        __switch_gethostbyaddr  /* get working version */
+#  define _PATH_UNIX   "/kernel/unix"
+#  ifndef _PATH_SENDMAILCF
+#   define _PATH_SENDMAILCF    "/etc/mail/sendmail.cf"
+#  endif
+#  ifndef _PATH_SENDMAILPID
+#   define _PATH_SENDMAILPID   "/etc/mail/sendmail.pid"
+#  endif
 
 # else
                        /* SunOS 4.1.x */
 #  define HASSTATFS    1       /* has the statfs(2) syscall */
 
 # else
                        /* SunOS 4.1.x */
 #  define HASSTATFS    1       /* has the statfs(2) syscall */
-#  define HASSETEUID   1       /* we have seteuid call */
+/* #  define HASFLOCK  1       /* has flock(2) call */
 #  include <vfork.h>
 
 # endif
 #endif
 
 #  include <vfork.h>
 
 # endif
 #endif
 
-/* Digital Ultrix 4.2A or 4.3 */
+/*
+** DG/UX 5.4.2
+*/
+
+#ifdef DGUX
+# define SYSTEM5       1
+# define LA_TYPE       LA_SUBR
+# define HASSTATFS     1       /* has the statfs(2) syscall */
+# define HASSETREUID   1       /* has setreuid(2) call */
+# define HASUNAME      1       /* use System V uname(2) system call */
+# define HASSETSID     1       /* has Posix setsid(2) call */
+# define HASINITGROUPS 1       /* has initgroups(3) call */
+# define HASSETVBUF    1       /* we have setvbuf(3) in libc */
+# undef IDENTPROTO             /* TCP/IP implementation is broken */
+# undef SETPROCTITLE
+# define inet_addr     dgux_inet_addr
+extern long    dgux_inet_addr();
+#endif
+
+
+/*
+**  Digital Ultrix 4.2A or 4.3
+**
+**     Apparently, fcntl locking is broken on 4.2A, in that locks are
+**     not dropped when the process exits.  This causes major problems,
+**     so flock is the only alternative.
+*/
+
 #ifdef ultrix
 # define HASSTATFS     1       /* has the statfs(2) syscall */
 #ifdef ultrix
 # define HASSTATFS     1       /* has the statfs(2) syscall */
-# define HASSETEUID    1       /* we have seteuid call */
+# define HASSETREUID   1       /* has setreuid(2) call */
+# define HASUNSETENV   1       /* has unsetenv(3) call */
+# define HASINITGROUPS 1       /* has initgroups(3) call */
+# define HASFLOCK      1       /* has flock(2) call */
+# define LA_TYPE       LA_INT
+# define LA_AVENRUN    "avenrun"
+# undef IDENTPROTO             /* TCP/IP implementation is broken */
 #endif
 
 #endif
 
-/* OSF/1 (tested on Alpha) */
+
+/*
+**  OSF/1 (tested on Alpha)
+*/
+
 #ifdef __osf__
 #ifdef __osf__
-# define HASSETEUID    1       /* we have seteuid call */
-# define seteuid(uid)  setreuid(-1, uid)
+# define HASSTATFS     1       /* has the statfs(2) syscall */
+# define HASUNSETENV   1       /* has unsetenv(3) call */
+# define HASSETREUID   1       /* has setreuid(2) call */
+# define HASINITGROUPS 1       /* has initgroups(3) call */
+/* # define HASFLOCK   1       /* has flock(2) call */
+# define LA_TYPE       LA_INT
 #endif
 
 #endif
 
-/* NeXTstep */
-#ifdef __NeXT__
+
+/*
+**  NeXTstep
+*/
+
+#ifdef NeXT
+# define HASINITGROUPS 1       /* has initgroups(3) call */
+# define HASFLOCK      1       /* has flock(2) call */
+# define NEEDGETOPT    1       /* need a replacement for getopt(3) */
+# define HASSTATFS     1       /* has the statfs(2) syscall */
+# define WAITUNION     1       /* use "union wait" as wait argument type */
 # define sleep         sleepX
 # define sleep         sleepX
-# define UNSETENV      1       /* need unsetenv(3) support */
+# define setpgid       setpgrp
+# ifndef LA_TYPE
+#  define LA_TYPE      LA_MACH
+# endif
+# ifndef _POSIX_SOURCE
+typedef int            pid_t;
+#  undef WEXITSTATUS
+#  undef WIFEXITED
+# endif
+# ifndef _PATH_SENDMAILCF
+#  define _PATH_SENDMAILCF     "/etc/sendmail/sendmail.cf"
+# endif
+# ifndef _PATH_SENDMAILPID
+#  define _PATH_SENDMAILPID    "/etc/sendmail/sendmail.pid"
+# endif
 #endif
 
 #endif
 
-/* various flavors of BSD */
-#ifdef BSD
-# define HASGETDTABLESIZE 1    /* we have getdtablesize(2) call */
-#endif
 
 
-#if defined(NetBSD)
-#define NO_SYSCONF
-#endif
+/*
+**  4.4 BSD
+*/
 
 
-/* 4.4BSD */
 #ifdef BSD4_4
 #ifdef BSD4_4
+# define HASUNSETENV   1       /* has unsetenv(3) call */
+# define HASSTATFS     1       /* has the statfs(2) syscall */
 # include <sys/cdefs.h>
 # include <sys/cdefs.h>
-# define HASSETEUID    1       /* we have seteuid(2) call */
+# define ERRLIST_PREDEFINED    /* don't declare sys_errlist */
+# ifndef LA_TYPE
+#  define LA_TYPE      LA_SUBR
+# endif
 #endif
 
 #endif
 
+
 /*
 /*
-**  End of Per-Operating System defines
+**  386BSD / FreeBSD 1.0E (works) / NetBSD (not tested)
+**
+**  4.3BSD clone, closer to 4.4BSD
+*/
+
+#ifdef __386BSD__
+# define HASUNSETENV   1       /* has unsetenv(3) call */
+# define HASSETSID     1       /* has the setsid(2) POSIX syscall */
+# define HASSTATFS     1       /* has the statfs(2) syscall */
+# include <sys/cdefs.h>
+# define ERRLIST_PREDEFINED    /* don't declare sys_errlist */
+# ifndef LA_TYPE
+#  define LA_TYPE      LA_SUBR
+# endif
+#endif
+
+
+/*
+**  4.3 BSD -- this is for very old systems
+**
+**     You'll also have to install a new resolver library.
+**     I don't guarantee that support for this environment is complete.
+*/
+
+#ifdef oldBSD43
+# define NEEDVPRINTF   1       /* need a replacement for vprintf(3) */
+# define NEEDGETOPT    1       /* need a replacement for getopt(3) */
+# define ARBPTR_T      char *
+# define setpgid       setpgrp
+# ifndef LA_TYPE
+#  define LA_TYPE      LA_FLOAT
+# endif
+# ifndef _PATH_SENDMAILCF
+#  define _PATH_SENDMAILCF     "/usr/lib/sendmail.cf"
+# endif
+# undef IDENTPROTO             /* TCP/IP implementation is broken */
+#endif
+
+
+/*
+**  SCO Unix
+*/
+
+#ifdef _SCO_unix_
+# define SYSTEM5       1       /* include all the System V defines */
+# define SYS5SIGNALS   1       /* SysV signal semantics -- reset on each sig */
+# define HASSTATFS     1       /* has the statfs(2) syscall */
+# define FORK          fork
+# define MAXPATHLEN    PATHSIZE
+# define LA_TYPE       LA_SHORT
+#endif
+
+
+/*
+**  ConvexOS 11.0 and later
+*/
+
+#ifdef _CONVEX_SOURCE
+# define BSD           1       /* include all the BSD defines */
+# define HASUNAME      1       /* use System V uname(2) system call */
+# define HASSTATFS     1       /* has the statfs(2) syscall */
+# define HASSETSID     1       /* has POSIX setsid(2) call */
+# define NEEDGETOPT    1       /* need replacement for getopt(3) */
+# define LA_TYPE       LA_FLOAT
+# undef IDENTPROTO
+#endif
+
+
+/*
+**  RISC/os 4.51
+**
+**     Untested...
+*/
+
+#ifdef RISCOS
+# define HASUNSETENV   1       /* has unsetenv(3) call */
+/* # define HASFLOCK   1       /* has flock(2) call */
+# define LA_TYPE       LA_INT
+# define LA_AVENRUN    "avenrun"
+# define _PATH_UNIX    "/unix"
+#endif
+
+
+/*
+**  Linux 0.99pl10 and above...
+**     From Karl London <karl@borg.demon.co.uk>.
 */
 
 */
 
+#ifdef linux
+# define BSD           1       /* pretend to be BSD based today */
+# undef  NEEDVPRINTF   1       /* need a replacement for vprintf(3) */
+# define NEEDGETOPT    1       /* need a replacement for getopt(3) */
+# define HASUNSETENV   1       /* has unsetenv(3) call */
+# ifndef LA_TYPE
+#  define LA_TYPE      LA_FLOAT
+# endif
+#endif
+
+
+/*
+**  DELL SVR4 Issue 2.2, and others
+**     From Kimmo Suominen <kim@grendel.lut.fi>
+**
+**     It's on #ifdef DELL_SVR4 because Solaris also gets __svr4__
+**     defined, and the definitions conflict.
+*/
+
+#ifdef DELL_SVR4
+# define SYSTEM5       1
+/* # define setreuid(r, e)     seteuid(e) */
+/* # include <sys/time.h> */
+# define _PATH_UNIX    "/unix"
+# ifndef _PATH_SENDMAILCF
+#  define _PATH_SENDMAILCF     "/usr/ucblib/sendmail.cf"
+# endif
+# ifndef _PATH_SENDMAILPID
+#  define _PATH_SENDMAILPID    "/usr/ucblib/sendmail.pid"
+# endif
+#endif
+
+
+/*
+**  Apple A/UX 3.0
+*/
+
+#ifdef _AUX_SOURCE
+# include <sys/sysmacros.h>
+# define BSD                   /* has BSD routines */
+# define HASSTATFS     1       /* has the statfs(2) syscall */
+# define HASUNAME      1       /* use System V uname(2) system call */
+# define HASUSTAT      1       /* use System V ustat(2) syscall */
+# define HASSETVBUF    1       /* we have setvbuf(3) in libc */
+# define SIGFUNC_DEFINED       /* sigfunc_t already defined */
+# undef IDENTPROTO             /* TCP/IP implementation is broken */
+# define FORK          fork
+# ifndef _PATH_SENDMAILCF
+#  define _PATH_SENDMAILCF     "/usr/lib/sendmail.cf"
+# endif
+# ifndef LA_TYPE
+#  define LA_TYPE      LA_ZERO
+# endif
+# undef WIFEXITED
+# undef WEXITSTATUS
+#endif
+
+
+/*
+**  Encore UMAX V
+**
+**     Not extensively tested.
+*/
+
+#ifdef UMAXV
+# include <limits.h>
+# define HASUNAME      1       /* use System V uname(2) system call */
+# define HASSTATFS     1       /* has the statfs(2) syscall */
+# define HASSETVBUF    1       /* we have setvbuf(3) in libc */
+# define HASINITGROUPS 1       /* has initgroups(3) call */
+# define SYS5SIGNALS   1       /* SysV signal semantics -- reset on each sig */
+# define SYS5SETPGRP   1       /* use System V setpgrp(2) syscall */
+# define FORK          fork    /* no vfork(2) primitive available */
+# define MAXPATHLEN    PATH_MAX
+extern struct passwd   *getpwent(), *getpwnam(), *getpwuid();
+extern struct group    *getgrent(), *getgrnam(), *getgrgid();
+# undef WIFEXITED
+# undef WEXITSTATUS
+#endif
+
+
+
+/**********************************************************************
+**  End of Per-Operating System defines
+**********************************************************************/
+
+/**********************************************************************
+**  More general defines
+**********************************************************************/
+
+/* general BSD defines */
+#ifdef BSD
+# define HASGETDTABLESIZE 1    /* has getdtablesize(2) call */
+# define HASSETREUID   1       /* has setreuid(2) call */
+# define HASINITGROUPS 1       /* has initgroups(2) call */
+# define HASFLOCK      1       /* has flock(2) call */
+#endif
+
 /* general System V defines */
 # ifdef SYSTEM5
 /* general System V defines */
 # ifdef SYSTEM5
-# define LOCKF         1       /* use System V lockf instead of flock */
-# define SYS5TZ                1       /* use System V style timezones */
-# define HASUNAME      1       /* use System V uname system call */
-# define NEEDGETDTABLESIZE 1   /* needs a replacement getdtablesize */
+# define HASUNAME      1       /* use System V uname(2) system call */
+# define HASUSTAT      1       /* use System V ustat(2) syscall */
+# define SYS5SETPGRP   1       /* use System V setpgrp(2) syscall */
+# ifndef LA_TYPE
+#  define LA_TYPE      LA_INT
+# endif
+# define bcopy(s, d, l)                (memmove((d), (s), (l)))
+# define bzero(d, l)           (memset((d), '\0', (l)))
+# define bcmp(s, d, l)         (memcmp((s), (d), (l)))
 # endif
 
 # endif
 
+/* general "standard C" defines */
+#if defined(__STDC__) || defined(SYSTEM5)
+# define HASSETVBUF    1       /* we have setvbuf(3) in libc */
+#endif
+
+/* general POSIX defines */
+#ifdef _POSIX_VERSION
+# define HASSETSID     1       /* has Posix setsid(2) call */
+# define HASWAITPID    1       /* has Posix waitpid(2) call */
+#endif
+
 /*
 /*
-**  Due to a "feature" in some operating systems such as Ultrix 4.3 and
-**  HPUX 8.0, if you receive a "No route to host" message (ICMP message
-**  ICMP_UNREACH_HOST) on _any_ connection, all connections to that host
-**  are closed.  Some firewalls return this error if you try to connect
-**  to the IDENT port (113), so you can't receive email from these hosts
-**  on these systems.  The firewall really should use a more specific
-**  message such as ICMP_UNREACH_PROTOCOL or _PORT or _NET_PROHIB.
+**  If no type for argument two of getgroups call is defined, assume
+**  it's an integer -- unfortunately, there seem to be several choices
+**  here.
 */
 
 */
 
-#if !defined(ultrix) && !defined(__hpux)
-# define IDENTPROTO    1       /* use IDENT proto (RFC 1413) */
+#ifndef GIDSET_T
+# define GIDSET_T      int
 #endif
 
 #endif
 
-/*
+
+/**********************************************************************
 **  Remaining definitions should never have to be changed.  They are
 **  primarily to provide back compatibility for older systems -- for
 **  example, it includes some POSIX compatibility definitions
 **  Remaining definitions should never have to be changed.  They are
 **  primarily to provide back compatibility for older systems -- for
 **  example, it includes some POSIX compatibility definitions
-*/
+**********************************************************************/
 
 /* System 5 compatibility */
 #ifndef S_ISREG
 
 /* System 5 compatibility */
 #ifndef S_ISREG
 # define EX_CONFIG     78      /* configuration error */
 # endif
 
 # define EX_CONFIG     78      /* configuration error */
 # endif
 
+/* pseudo-code used in server SMTP */
+# define EX_QUIT       22      /* drop out of server immediately */
+
+
+/*
+**  These are used in a few cases where we need some special
+**  error codes, but where the system doesn't provide something
+**  reasonable.  They are printed in errstring.
+*/
+
+#ifndef E_PSEUDOBASE
+# define E_PSEUDOBASE  256
+#endif
+
+#define EOPENTIMEOUT   (E_PSEUDOBASE + 0)      /* timeout on open */
+#define E_DNSBASE      (E_PSEUDOBASE + 20)     /* base for DNS h_errno */
+
+/* type of arbitrary pointer */
+#ifndef ARBPTR_T
+# define ARBPTR_T      void *
+#endif
+
 #ifndef __P
 # include "cdefs.h"
 #endif
 #ifndef __P
 # include "cdefs.h"
 #endif
@@ -290,8 +613,8 @@ struct utsname
 };
 #endif /* HASUNAME */
 
 };
 #endif /* HASUNAME */
 
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 256
+#if !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_)
+# define MAXHOSTNAMELEN        256
 #endif
 
 #if !defined(SIGCHLD) && defined(SIGCLD)
 #endif
 
 #if !defined(SIGCHLD) && defined(SIGCLD)
@@ -310,16 +633,26 @@ struct utsname
 #define STDERR_FILENO  2
 #endif
 
 #define STDERR_FILENO  2
 #endif
 
-#ifdef LOCKF
-#define LOCK_SH                0x01    /* shared lock */
-#define LOCK_EX                0x02    /* exclusive lock */
-#define LOCK_NB                0x04    /* non-blocking lock */
-#define LOCK_UN                0x08    /* unlock */
+#ifndef LOCK_SH
+# define LOCK_SH       0x01    /* shared lock */
+# define LOCK_EX       0x02    /* exclusive lock */
+# define LOCK_NB       0x04    /* non-blocking lock */
+# define LOCK_UN       0x08    /* unlock */
+#endif
 
 
-#else
+#ifndef SIG_ERR
+# define SIG_ERR       ((void (*)()) -1)
+#endif
 
 
-# include <sys/file.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(st)       (((st) >> 8) & 0377)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(st)         (((st) & 0377) == 0)
+#endif
 
 
+#ifndef SIGFUNC_DEFINED
+typedef void           (*sigfunc_t) __P((int));
 #endif
 
 /*
 #endif
 
 /*
index cfbfec6..86be5d7 100644 (file)
  */
 
 #include <errno.h>
  */
 
 #include <errno.h>
-#include <signal.h>
 #include "sendmail.h"
 
 #ifndef lint
 #ifdef DAEMON
 #include "sendmail.h"
 
 #ifndef lint
 #ifdef DAEMON
-static char sccsid[] = "@(#)daemon.c   8.2 (Berkeley) 7/13/93 (with daemon mode)";
+static char sccsid[] = "@(#)daemon.c   8.19 (Berkeley) 10/23/93 (with daemon mode)";
 #else
 #else
-static char sccsid[] = "@(#)daemon.c   8.2 (Berkeley) 7/13/93 (without daemon mode)";
+static char sccsid[] = "@(#)daemon.c   8.19 (Berkeley) 10/23/93 (without daemon mode)";
 #endif
 #endif /* not lint */
 
 #ifdef DAEMON
 
 # include <netdb.h>
 #endif
 #endif /* not lint */
 
 #ifdef DAEMON
 
 # include <netdb.h>
-# include <sys/wait.h>
 # include <sys/time.h>
 # include <sys/time.h>
+# include <arpa/inet.h>
 
 #ifdef NAMED_BIND
 # include <arpa/nameser.h>
 
 #ifdef NAMED_BIND
 # include <arpa/nameser.h>
@@ -105,6 +104,8 @@ static char sccsid[] = "@(#)daemon.c        8.2 (Berkeley) 7/13/93 (without daemon mode
 int            DaemonSocket    = -1;           /* fd describing socket */
 SOCKADDR       DaemonAddr;                     /* socket for incoming */
 int            ListenQueueSize = 10;           /* size of listen queue */
 int            DaemonSocket    = -1;           /* fd describing socket */
 SOCKADDR       DaemonAddr;                     /* socket for incoming */
 int            ListenQueueSize = 10;           /* size of listen queue */
+int            TcpRcvBufferSize = 0;           /* size of TCP receive buffer */
+int            TcpSndBufferSize = 0;           /* size of TCP send buffer */
 
 getrequests()
 {
 
 getrequests()
 {
@@ -131,11 +132,7 @@ getrequests()
                        syserr("554 service \"smtp\" unknown");
                        goto severe;
                }
                        syserr("554 service \"smtp\" unknown");
                        goto severe;
                }
-#ifdef _SCO_unix_
-               DaemonAddr.sin.sin_port = htons(sp->s_port);
-#else
                DaemonAddr.sin.sin_port = sp->s_port;
                DaemonAddr.sin.sin_port = sp->s_port;
-#endif
        }
 
        /*
        }
 
        /*
@@ -166,6 +163,16 @@ getrequests()
        (void) setsockopt(DaemonSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof on);
        (void) setsockopt(DaemonSocket, SOL_SOCKET, SO_KEEPALIVE, (char *)&on, sizeof on);
 
        (void) setsockopt(DaemonSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof on);
        (void) setsockopt(DaemonSocket, SOL_SOCKET, SO_KEEPALIVE, (char *)&on, sizeof on);
 
+#ifdef SO_RCVBUF
+       if (TcpRcvBufferSize > 0)
+       {
+               if (setsockopt(DaemonSocket, SOL_SOCKET, SO_RCVBUF,
+                              (char *) &TcpRcvBufferSize,
+                              sizeof(TcpRcvBufferSize)) < 0)
+                       syserr("getrequests: setsockopt(SO_RCVBUF)");
+       }
+#endif
+
        switch (DaemonAddr.sa.sa_family)
        {
 # ifdef NETINET
        switch (DaemonAddr.sa.sa_family)
        {
 # ifdef NETINET
@@ -192,13 +199,21 @@ getrequests()
                goto severe;
        }
 
                goto severe;
        }
 
-       (void) signal(SIGCHLD, reapchild);
+       (void) setsignal(SIGCHLD, reapchild);
 
        /* write the pid to the log file for posterity */
        pidf = fopen(PidFile, "w");
        if (pidf != NULL)
        {
 
        /* write the pid to the log file for posterity */
        pidf = fopen(PidFile, "w");
        if (pidf != NULL)
        {
+               extern char *CommandLineArgs;
+
+               /* write the process id on line 1 */
                fprintf(pidf, "%d\n", getpid());
                fprintf(pidf, "%d\n", getpid());
+
+               /* line 2 contains all command line flags */
+               fprintf(pidf, "%s\n", CommandLineArgs);
+
+               /* flush and close */
                fclose(pidf);
        }
 
                fclose(pidf);
        }
 
@@ -274,6 +289,7 @@ getrequests()
 
                if (pid == 0)
                {
 
                if (pid == 0)
                {
+                       char *p;
                        extern char *hostnamebyanyaddr();
 
                        /*
                        extern char *hostnamebyanyaddr();
 
                        /*
@@ -282,14 +298,15 @@ getrequests()
                        **      Verify calling user id if possible here.
                        */
 
                        **      Verify calling user id if possible here.
                        */
 
-                       (void) signal(SIGCHLD, SIG_DFL);
+                       (void) setsignal(SIGCHLD, SIG_DFL);
                        OpMode = MD_SMTP;
 
                        /* determine host name */
                        OpMode = MD_SMTP;
 
                        /* determine host name */
-                       RealHostName = newstr(hostnamebyanyaddr(&RealHostAddr));
+                       p = hostnamebyanyaddr(&RealHostAddr);
+                       RealHostName = newstr(p);
 
 #ifdef LOG
 
 #ifdef LOG
-                       if (LogLevel > 10)
+                       if (LogLevel > 11)
                        {
                                /* log connection information */
                                syslog(LOG_INFO, "connect from %s (%s)",
                        {
                                /* log connection information */
                                syslog(LOG_INFO, "connect from %s (%s)",
@@ -298,8 +315,13 @@ getrequests()
 #endif
 
                        (void) close(DaemonSocket);
 #endif
 
                        (void) close(DaemonSocket);
-                       InChannel = fdopen(t, "r");
-                       OutChannel = fdopen(dup(t), "w");
+                       if ((InChannel = fdopen(t, "r")) == NULL ||
+                           (t = dup(t)) < 0 ||
+                           (OutChannel = fdopen(t, "w")) == NULL)
+                       {
+                               syserr("cannot open SMTP server channel, fd=%d", t);
+                               exit(0);
+                       }
 
                        /* should we check for illegal connection here? XXX */
 #ifdef XLA
 
                        /* should we check for illegal connection here? XXX */
 #ifdef XLA
@@ -434,7 +456,7 @@ setdaemonoptions(p)
 #ifdef NETINET
                          case AF_INET:
                                if (isascii(*v) && isdigit(*v))
 #ifdef NETINET
                          case AF_INET:
                                if (isascii(*v) && isdigit(*v))
-                                       DaemonAddr.sin.sin_port = atoi(v);
+                                       DaemonAddr.sin.sin_port = htons(atoi(v));
                                else
                                {
                                        register struct servent *sp;
                                else
                                {
                                        register struct servent *sp;
@@ -443,13 +465,7 @@ setdaemonoptions(p)
                                        if (sp == NULL)
                                                syserr("554 service \"%s\" unknown", v);
                                        else
                                        if (sp == NULL)
                                                syserr("554 service \"%s\" unknown", v);
                                        else
-                                       {
-#ifdef _SCO_unix_
-                                               DaemonAddr.sin.sin_port = htons(sp->s_port);
-#else
                                                DaemonAddr.sin.sin_port = sp->s_port;
                                                DaemonAddr.sin.sin_port = sp->s_port;
-#endif
-                                       }
                                }
                                break;
 #endif
                                }
                                break;
 #endif
@@ -458,7 +474,7 @@ setdaemonoptions(p)
                          case AF_ISO:
                                /* assume two byte transport selector */
                                if (isascii(*v) && isdigit(*v))
                          case AF_ISO:
                                /* assume two byte transport selector */
                                if (isascii(*v) && isdigit(*v))
-                                       port = atoi(v);
+                                       port = htons(atoi(v));
                                else
                                {
                                        register struct servent *sp;
                                else
                                {
                                        register struct servent *sp;
@@ -483,6 +499,14 @@ setdaemonoptions(p)
                  case 'L':             /* listen queue size */
                        ListenQueueSize = atoi(v);
                        break;
                  case 'L':             /* listen queue size */
                        ListenQueueSize = atoi(v);
                        break;
+
+                 case 'S':             /* send buffer size */
+                       TcpSndBufferSize = atoi(v);
+                       break;
+
+                 case 'R':             /* receive buffer size */
+                       TcpRcvBufferSize = atoi(v);
+                       break;
                }
        }
 }
                }
        }
 }
@@ -533,6 +557,7 @@ makeconnection(host, port, mci, usesecureport)
 #endif
        errno = 0;
        bzero(&CurHostAddr, sizeof CurHostAddr);
 #endif
        errno = 0;
        bzero(&CurHostAddr, sizeof CurHostAddr);
+       SmtpPhase = mci->mci_phase = "initial connection";
        CurHostName = host;
 
        if (host[0] == '[')
        CurHostName = host;
 
        if (host[0] == '[')
@@ -616,11 +641,7 @@ gothostent:
                        syserr("554 makeconnection: service \"smtp\" unknown");
                        return (EX_OSERR);
                }
                        syserr("554 makeconnection: service \"smtp\" unknown");
                        return (EX_OSERR);
                }
-#ifdef _SCO_unix_
-               port = htons(sp->s_port);
-#else
                port = sp->s_port;
                port = sp->s_port;
-#endif
        }
 
        switch (addr.sa.sa_family)
        }
 
        switch (addr.sa.sa_family)
@@ -681,6 +702,16 @@ gothostent:
                        goto failure;
                }
 
                        goto failure;
                }
 
+#ifdef SO_SNDBUF
+               if (TcpSndBufferSize > 0)
+               {
+                       if (setsockopt(s, SOL_SOCKET, SO_SNDBUF,
+                                      (char *) &TcpSndBufferSize,
+                                      sizeof(TcpSndBufferSize)) < 0)
+                               syserr("makeconnection: setsockopt(SO_SNDBUF)");
+               }
+#endif
+
                if (tTd(16, 1))
                        printf("makeconnection: fd=%d\n", s);
 
                if (tTd(16, 1))
                        printf("makeconnection: fd=%d\n", s);
 
@@ -739,8 +770,13 @@ gothostent:
        }
 
        /* connection ok, put it into canonical form */
        }
 
        /* connection ok, put it into canonical form */
-       mci->mci_out = fdopen(s, "w");
-       mci->mci_in = fdopen(dup(s), "r");
+       if ((mci->mci_out = fdopen(s, "w")) == NULL ||
+           (s = dup(s)) < 0 ||
+           (mci->mci_in = fdopen(s, "r")) == NULL)
+       {
+               syserr("cannot open SMTP client channel, fd=%d", s);
+               return EX_TEMPFAIL;
+       }
 
        return (EX_OK);
 }
 
        return (EX_OK);
 }
@@ -755,11 +791,9 @@ gothostent:
 **             A list of aliases for this host.
 **
 **     Side Effects:
 **             A list of aliases for this host.
 **
 **     Side Effects:
-**             Sets the MyIpAddrs buffer to a list of my IP addresses.
+**             Adds numeric codes to $=w.
 */
 
 */
 
-struct in_addr MyIpAddrs[MAXIPADDR + 1];
-
 char **
 myhostname(hostbuf, size)
        char hostbuf[];
 char **
 myhostname(hostbuf, size)
        char hostbuf[];
@@ -782,13 +816,14 @@ myhostname(hostbuf, size)
                {
                        register int i;
 
                {
                        register int i;
 
-                       for (i = 0; i < MAXIPADDR; i++)
+                       for (i = 0; hp->h_addr_list[i] != NULL; i++)
                        {
                        {
-                               if (hp->h_addr_list[i] == NULL)
-                                       break;
-                               MyIpAddrs[i].s_addr = *(u_long *) hp->h_addr_list[i];
+                               char ipbuf[100];
+
+                               sprintf(ipbuf, "[%s]",
+                                       inet_ntoa(*((struct in_addr *) hp->h_addr_list[i])));
+                               setclass('w', ipbuf);
                        }
                        }
-                       MyIpAddrs[i].s_addr = 0;
                }
 
                return (hp->h_aliases);
                }
 
                return (hp->h_aliases);
@@ -852,7 +887,8 @@ getauthinfo(fd)
                return hbuf;
        }
 
                return hbuf;
        }
 
-       RealHostName = newstr(hostnamebyanyaddr(&fa));
+       p = hostnamebyanyaddr(&fa);
+       RealHostName = newstr(p);
        RealHostAddr = fa;
 
 #ifdef IDENTPROTO
        RealHostAddr = fa;
 
 #ifdef IDENTPROTO
@@ -870,18 +906,12 @@ getauthinfo(fd)
                ntohs(fa.sin.sin_port), ntohs(la.sin.sin_port));
 
        /* create local address */
                ntohs(fa.sin.sin_port), ntohs(la.sin.sin_port));
 
        /* create local address */
-       bzero(&la, sizeof la);
+       la.sin.sin_port = 0;
 
        /* create foreign address */
        sp = getservbyname("auth", "tcp");
        if (sp != NULL)
 
        /* create foreign address */
        sp = getservbyname("auth", "tcp");
        if (sp != NULL)
-       {
-#ifdef _SCO_unix_
-               fa.sin.sin_port = htons(sp->s_port);
-#else
                fa.sin.sin_port = sp->s_port;
                fa.sin.sin_port = sp->s_port;
-#endif
-       }
        else
                fa.sin.sin_port = htons(113);
 
        else
                fa.sin.sin_port = htons(113);
 
@@ -894,16 +924,17 @@ getauthinfo(fd)
        }
 
        /* put a timeout around the whole thing */
        }
 
        /* put a timeout around the whole thing */
-       ev = setevent((time_t) 30, authtimeout, 0);
+       ev = setevent(TimeOuts.to_ident, authtimeout, 0);
 
 
-       /* connect to foreign IDENT server */
+       /* connect to foreign IDENT server using same address as SMTP socket */
        s = socket(AF_INET, SOCK_STREAM, 0);
        if (s < 0)
        {
                clrevent(ev);
                goto noident;
        }
        s = socket(AF_INET, SOCK_STREAM, 0);
        if (s < 0)
        {
                clrevent(ev);
                goto noident;
        }
-       if (connect(s, &fa.sa, sizeof fa.sin) < 0)
+       if (bind(s, &la.sa, sizeof la.sin) < 0 ||
+           connect(s, &fa.sa, sizeof fa.sin) < 0)
        {
 closeident:
                (void) close(s);
        {
 closeident:
                (void) close(s);
@@ -1054,7 +1085,7 @@ host_map_lookup(map, name, av, statp)
                        printf("host_map_lookup(%s) => ", name);
                s->s_namecanon.nc_flags |= NCF_VALID;           /* will be soon */
                (void) strcpy(hbuf, name);
                        printf("host_map_lookup(%s) => ", name);
                s->s_namecanon.nc_flags |= NCF_VALID;           /* will be soon */
                (void) strcpy(hbuf, name);
-               if (getcanonname(hbuf, sizeof hbuf - 1))
+               if (getcanonname(hbuf, sizeof hbuf - 1, TRUE))
                {
                        if (tTd(9, 1))
                                printf("%s\n", hbuf);
                {
                        if (tTd(9, 1))
                                printf("%s\n", hbuf);
@@ -1123,15 +1154,6 @@ host_map_lookup(map, name, av, statp)
        *cp = '\0';
        in_addr = inet_addr(&name[1]);
 
        *cp = '\0';
        in_addr = inet_addr(&name[1]);
 
-       /* check to see if this is one of our addresses */
-       for (i = 0; MyIpAddrs[i].s_addr != 0; i++)
-       {
-               if (MyIpAddrs[i].s_addr == in_addr)
-               {
-                       return map_rewrite(map, MyHostName, strlen(MyHostName), av);
-               }
-       }
-
        /* nope -- ask the name server */
        hp = gethostbyaddr((char *)&in_addr, sizeof(struct in_addr), AF_INET);
        s->s_namecanon.nc_errno = errno;
        /* nope -- ask the name server */
        hp = gethostbyaddr((char *)&in_addr, sizeof(struct in_addr), AF_INET);
        s->s_namecanon.nc_errno = errno;
@@ -1166,7 +1188,7 @@ anynet_ntoa(sap)
        register char *bp;
        register char *ap;
        int l;
        register char *bp;
        register char *ap;
        int l;
-       static char buf[80];
+       static char buf[100];
 
        /* check for null/zero family */
        if (sap == NULL)
 
        /* check for null/zero family */
        if (sap == NULL)
@@ -1174,15 +1196,27 @@ anynet_ntoa(sap)
        if (sap->sa.sa_family == 0)
                return "0";
 
        if (sap->sa.sa_family == 0)
                return "0";
 
-#ifdef NETINET
-       if (sap->sa.sa_family == AF_INET)
+       switch (sap->sa.sa_family)
        {
        {
-               extern char *inet_ntoa();
+#ifdef MAYBENEXTRELEASE                /*** UNTESTED *** UNTESTED *** UNTESTED ***/
+         case AF_UNIX:
+               if (sap->sun.sun_path[0] != '\0')
+                       sprintf(buf, "[UNIX: %.64s]", sap->sun.sun_path);
+               else
+                       sprintf(buf, "[UNIX: localhost]");
+               return buf;
+#endif
 
 
+#ifdef NETINET
+         case AF_INET:
                return inet_ntoa(((struct sockaddr_in *) sap)->sin_addr);
                return inet_ntoa(((struct sockaddr_in *) sap)->sin_addr);
-       }
 #endif
 
 #endif
 
+         default:
+               /* this case is only to ensure syntactic correctness */
+               break;
+       }
+
        /* unknown family -- just dump bytes */
        (void) sprintf(buf, "Family %d: ", sap->sa.sa_family);
        bp = &buf[strlen(buf)];
        /* unknown family -- just dump bytes */
        (void) sprintf(buf, "Family %d: ", sap->sa.sa_family);
        bp = &buf[strlen(buf)];
@@ -1213,10 +1247,9 @@ hostnamebyanyaddr(sap)
        register SOCKADDR *sap;
 {
        register struct hostent *hp;
        register SOCKADDR *sap;
 {
        register struct hostent *hp;
-
-#ifdef NAMED_BIND
        int saveretry;
 
        int saveretry;
 
+#ifdef NAMED_BIND
        /* shorten name server timeout to avoid higher level timeouts */
        saveretry = _res.retry;
        _res.retry = 3;
        /* shorten name server timeout to avoid higher level timeouts */
        saveretry = _res.retry;
        _res.retry = 3;
@@ -1240,6 +1273,12 @@ hostnamebyanyaddr(sap)
                break;
 #endif
 
                break;
 #endif
 
+#ifdef MAYBENEXTRELEASE                /*** UNTESTED *** UNTESTED *** UNTESTED ***/
+         case AF_UNIX:
+               hp = NULL;
+               break;
+#endif
+
          default:
                hp = gethostbyaddr(sap->sa.sa_data,
                           sizeof sap->sa.sa_data,
          default:
                hp = gethostbyaddr(sap->sa.sa_data,
                           sizeof sap->sa.sa_data,
index ef9fd82..eb47fd2 100644 (file)
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)deliver.c  8.3 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)deliver.c  8.36 (Berkeley) 10/23/93";
 #endif /* not lint */
 
 #include "sendmail.h"
 #endif /* not lint */
 
 #include "sendmail.h"
-#include <signal.h>
 #include <netdb.h>
 #include <errno.h>
 #ifdef NAMED_BIND
 #include <netdb.h>
 #include <errno.h>
 #ifdef NAMED_BIND
@@ -76,9 +75,15 @@ sendall(e, mode)
        ENVELOPE *splitenv = NULL;
        bool announcequeueup;
 
        ENVELOPE *splitenv = NULL;
        bool announcequeueup;
 
-       if (bitset(EF_FATALERRS, e->e_flags))
+       /*
+       **  If we have had global, fatal errors, don't bother sending
+       **  the message at all if we are in SMTP mode.  Local errors
+       **  (e.g., a single address failing) will still cause the other
+       **  addresses to be sent.
+       */
+
+       if (bitset(EF_FATALERRS, e->e_flags) && OpMode == MD_SMTP)
        {
        {
-               /* this will get a return message -- so don't send it */
                e->e_flags |= EF_CLRQUEUE;
                return;
        }
                e->e_flags |= EF_CLRQUEUE;
                return;
        }
@@ -97,7 +102,8 @@ sendall(e, mode)
 
        if (tTd(13, 1))
        {
 
        if (tTd(13, 1))
        {
-               printf("\nSENDALL: mode %c, e_from ", mode);
+               printf("\n===== SENDALL: mode %c, id %s, e_from ",
+                       mode, e->e_id);
                printaddr(&e->e_from, FALSE);
                printf("sendqueue:\n");
                printaddr(e->e_sendqueue, TRUE);
                printaddr(&e->e_from, FALSE);
                printf("sendqueue:\n");
                printaddr(e->e_sendqueue, TRUE);
@@ -114,9 +120,9 @@ sendall(e, mode)
        if (e->e_hopcount > MaxHopCount)
        {
                errno = 0;
        if (e->e_hopcount > MaxHopCount)
        {
                errno = 0;
-               syserr("554 too many hops %d (%d max): from %s, to %s",
+               syserr("554 too many hops %d (%d max): from %s via %s, to %s",
                        e->e_hopcount, MaxHopCount, e->e_from.q_paddr,
                        e->e_hopcount, MaxHopCount, e->e_from.q_paddr,
-                       e->e_sendqueue->q_paddr);
+                       RealHostName, e->e_sendqueue->q_paddr);
                return;
        }
 
                return;
        }
 
@@ -129,7 +135,8 @@ sendall(e, mode)
        **      is instantiated in the queue as a recipient.
        */
 
        **      is instantiated in the queue as a recipient.
        */
 
-       if (!MeToo && !bitset(QQUEUEUP, e->e_from.q_flags))
+       if (!bitset(EF_METOO, e->e_flags) &&
+           !bitset(QQUEUEUP, e->e_from.q_flags))
        {
                if (tTd(13, 5))
                {
        {
                if (tTd(13, 5))
                {
@@ -229,7 +236,6 @@ sendall(e, mode)
                        ee->e_from.q_flags |= QDONTSEND;
                        ee->e_dfp = NULL;
                        ee->e_xfp = NULL;
                        ee->e_from.q_flags |= QDONTSEND;
                        ee->e_dfp = NULL;
                        ee->e_xfp = NULL;
-                       ee->e_lockfp = NULL;
                        ee->e_df = NULL;
                        ee->e_errormode = EM_MAIL;
                        ee->e_sibling = splitenv;
                        ee->e_df = NULL;
                        ee->e_errormode = EM_MAIL;
                        ee->e_sibling = splitenv;
@@ -245,7 +251,8 @@ sendall(e, mode)
                        if (e->e_df != NULL && mode != SM_VERIFY)
                        {
                                ee->e_dfp = NULL;
                        if (e->e_df != NULL && mode != SM_VERIFY)
                        {
                                ee->e_dfp = NULL;
-                               ee->e_df = newstr(queuename(ee, 'd'));
+                               ee->e_df = queuename(ee, 'd');
+                               ee->e_df = newstr(ee->e_df);
                                if (link(e->e_df, ee->e_df) < 0)
                                {
                                        syserr("sendall: link(%s, %s)",
                                if (link(e->e_df, ee->e_df) < 0)
                                {
                                        syserr("sendall: link(%s, %s)",
@@ -316,9 +323,21 @@ sendenvelope(e, mode)
        bool oldverbose;
        int pid;
        register ADDRESS *q;
        bool oldverbose;
        int pid;
        register ADDRESS *q;
-#ifdef LOCKF
-       struct flock lfd;
-#endif
+       char *qf;
+       char *id;
+
+       /*
+       **  If we have had global, fatal errors, don't bother sending
+       **  the message at all if we are in SMTP mode.  Local errors
+       **  (e.g., a single address failing) will still cause the other
+       **  addresses to be sent.
+       */
+
+       if (bitset(EF_FATALERRS, e->e_flags) && OpMode == MD_SMTP)
+       {
+               e->e_flags |= EF_CLRQUEUE;
+               return;
+       }
 
        oldverbose = Verbose;
        switch (mode)
 
        oldverbose = Verbose;
        switch (mode)
@@ -336,20 +355,27 @@ sendenvelope(e, mode)
                if (e->e_xfp != NULL)
                        (void) fflush(e->e_xfp);
 
                if (e->e_xfp != NULL)
                        (void) fflush(e->e_xfp);
 
-# ifdef LOCKF
+# ifndef HASFLOCK
                /*
                /*
-               **  Since lockf has the interesting semantic that the
-               **  lock is lost when we fork, we have to risk losing
-               **  the lock here by closing before the fork, and then
-               **  trying to get it back in the child.
+               **  Since fcntl locking has the interesting semantic that
+               **  the lock is owned by a process, not by an open file
+               **  descriptor, we have to flush this to the queue, and
+               **  then restart from scratch in the child.
                */
 
                */
 
-               if (e->e_lockfp != NULL)
-               {
-                       (void) xfclose(e->e_lockfp, "sendenvelope", "lockfp");
-                       e->e_lockfp = NULL;
-               }
-# endif /* LOCKF */
+               /* save id for future use */
+               id = e->e_id;
+
+               /* now drop the envelope in the parent */
+               e->e_flags |= EF_INQUEUE|EF_KEEPQUEUE;
+               dropenvelope(e);
+
+               /* and reacquire in the child */
+               (void) dowork(id, TRUE, FALSE, e);
+
+               return;
+
+# else /* HASFLOCK */
 
                pid = fork();
                if (pid < 0)
 
                pid = fork();
                if (pid < 0)
@@ -359,26 +385,17 @@ sendenvelope(e, mode)
                else if (pid > 0)
                {
                        /* be sure we leave the temp files to our child */
                else if (pid > 0)
                {
                        /* be sure we leave the temp files to our child */
-                       e->e_id = e->e_df = NULL;
-# ifndef LOCKF
+                       /* can't call unlockqueue to avoid unlink of xfp */
                        if (e->e_lockfp != NULL)
                        if (e->e_lockfp != NULL)
-                       {
                                (void) xfclose(e->e_lockfp, "sendenvelope", "lockfp");
                                (void) xfclose(e->e_lockfp, "sendenvelope", "lockfp");
-                               e->e_lockfp = NULL;
-                       }
-# endif
+                       e->e_lockfp = NULL;
 
                        /* close any random open files in the envelope */
 
                        /* close any random open files in the envelope */
+                       closexscript(e);
                        if (e->e_dfp != NULL)
                        if (e->e_dfp != NULL)
-                       {
-                               (void) xfclose(e->e_dfp, "sendenvelope", "dfp");
-                               e->e_dfp = NULL;
-                       }
-                       if (e->e_xfp != NULL)
-                       {
-                               (void) xfclose(e->e_xfp, "sendenvelope", "xfp");
-                               e->e_xfp = NULL;
-                       }
+                               (void) xfclose(e->e_dfp, "sendenvelope", e->e_df);
+                       e->e_dfp = NULL;
+                       e->e_id = e->e_df = NULL;
                        return;
                }
 
                        return;
                }
 
@@ -387,32 +404,7 @@ sendenvelope(e, mode)
                        exit(EX_OK);
 
                /* be sure we are immune from the terminal */
                        exit(EX_OK);
 
                /* be sure we are immune from the terminal */
-               disconnect(FALSE, e);
-
-# ifdef LOCKF
-               /*
-               **  Now try to get our lock back.
-               */
-
-               lfd.l_type = F_WRLCK;
-               lfd.l_whence = lfd.l_start = lfd.l_len = 0;
-               e->e_lockfp = fopen(queuename(e, 'q'), "r+");
-               if (e->e_lockfp == NULL ||
-                   fcntl(fileno(e->e_lockfp), F_SETLK, &lfd) < 0)
-               {
-                       /* oops....  lost it */
-                       if (tTd(13, 1))
-                               printf("sendenvelope: %s lost lock: lockfp=%x, %s\n",
-                                       e->e_id, e->e_lockfp, errstring(errno));
-
-# ifdef LOG
-                       if (LogLevel > 29)
-                               syslog(LOG_NOTICE, "%s: lost lock: %m",
-                                       e->e_id);
-# endif /* LOG */
-                       exit(EX_OK);
-               }
-# endif /* LOCKF */
+               disconnect(1, e);
 
                /*
                **  Close any cached connections.
 
                /*
                **  Close any cached connections.
@@ -426,16 +418,30 @@ sendenvelope(e, mode)
 
                mci_flush(FALSE, NULL);
 
 
                mci_flush(FALSE, NULL);
 
+# endif /* HASFLOCK */
+
                break;
        }
 
        /*
        **  Run through the list and send everything.
                break;
        }
 
        /*
        **  Run through the list and send everything.
+       **
+       **      Set EF_GLOBALERRS so that error messages during delivery
+       **      result in returned mail.
        */
 
        e->e_nsent = 0;
        */
 
        e->e_nsent = 0;
+       e->e_flags |= EF_GLOBALERRS;
+
+       /* now run through the queue */
        for (q = e->e_sendqueue; q != NULL; q = q->q_next)
        {
        for (q = e->e_sendqueue; q != NULL; q = q->q_next)
        {
+#ifdef XDEBUG
+               char wbuf[MAXNAME + 20];
+
+               (void) sprintf(wbuf, "sendall(%s)", q->q_paddr);
+               checkfd012(wbuf);
+#endif
                if (mode == SM_VERIFY)
                {
                        e->e_to = q->q_paddr;
                if (mode == SM_VERIFY)
                {
                        e->e_to = q->q_paddr;
@@ -465,37 +471,9 @@ sendenvelope(e, mode)
        }
        Verbose = oldverbose;
 
        }
        Verbose = oldverbose;
 
-       /*
-       **  Now run through and check for errors.
-       */
-
-       if (mode == SM_VERIFY)
-       {
-               return;
-       }
-
-       for (q = e->e_sendqueue; q != NULL; q = q->q_next)
-       {
-               if (tTd(13, 3))
-               {
-                       printf("Checking ");
-                       printaddr(q, FALSE);
-               }
-
-               /* only send errors if the message failed */
-               if (!bitset(QBADADDR, q->q_flags) ||
-                   bitset(QDONTSEND, q->q_flags))
-                       continue;
-
-               if (tTd(13, 3))
-                       printf("FATAL ERRORS\n");
-
-               e->e_flags |= EF_FATALERRS;
-
-               if (q->q_owner == NULL && strcmp(e->e_from.q_paddr, "<>") != 0)
-                       (void) sendtolist(e->e_from.q_paddr, NULL,
-                                         &e->e_errorqueue, e);
-       }
+#ifdef XDEBUG
+       checkfd012("end of sendenvelope");
+#endif
 
        if (mode == SM_FORK)
                finis();
 
        if (mode == SM_FORK)
                finis();
@@ -611,7 +589,7 @@ deliver(e, firstto)
        char buf[MAXNAME];
        char rpathbuf[MAXNAME];         /* translated return path */
        extern int checkcompat();
        char buf[MAXNAME];
        char rpathbuf[MAXNAME];         /* translated return path */
        extern int checkcompat();
-       extern FILE *fdopen();
+       extern char SmtpError[];
 
        errno = 0;
        if (bitset(QDONTSEND|QBADADDR|QQUEUEUP, to->q_flags))
 
        errno = 0;
        if (bitset(QDONTSEND|QBADADDR|QQUEUEUP, to->q_flags))
@@ -629,10 +607,13 @@ deliver(e, firstto)
        host = to->q_host;
        CurEnv = e;                     /* just in case */
        e->e_statmsg = NULL;
        host = to->q_host;
        CurEnv = e;                     /* just in case */
        e->e_statmsg = NULL;
+       SmtpError[0] = '\0';
 
        if (tTd(10, 1))
                printf("\n--deliver, mailer=%d, host=`%s', first user=`%s'\n",
                        m->m_mno, host, to->q_user);
 
        if (tTd(10, 1))
                printf("\n--deliver, mailer=%d, host=`%s', first user=`%s'\n",
                        m->m_mno, host, to->q_user);
+       if (tTd(10, 100))
+               printopenfds(FALSE);
 
        /*
        **  If this mailer is expensive, and if we don't want to make
 
        /*
        **  If this mailer is expensive, and if we don't want to make
@@ -644,15 +625,14 @@ deliver(e, firstto)
        **              This should be on a per-mailer basis.
        */
 
        **              This should be on a per-mailer basis.
        */
 
-       if (NoConnect && !bitset(EF_QUEUERUN, e->e_flags) &&
-           bitnset(M_EXPENSIVE, m->m_flags) && !Verbose)
+       if (NoConnect && bitnset(M_EXPENSIVE, m->m_flags) && !Verbose)
        {
                for (; to != NULL; to = to->q_next)
                {
                        if (bitset(QDONTSEND|QBADADDR|QQUEUEUP, to->q_flags) ||
                            to->q_mailer != m)
                                continue;
        {
                for (; to != NULL; to = to->q_next)
                {
                        if (bitset(QDONTSEND|QBADADDR|QQUEUEUP, to->q_flags) ||
                            to->q_mailer != m)
                                continue;
-                       to->q_flags |= QQUEUEUP|QDONTSEND;
+                       to->q_flags |= QQUEUEUP;
                        e->e_to = to->q_paddr;
                        message("queued");
                        if (LogLevel > 8)
                        e->e_to = to->q_paddr;
                        message("queued");
                        if (LogLevel > 8)
@@ -740,7 +720,7 @@ deliver(e, firstto)
                *pvp = NULL;
 # else /* SMTP */
                /* oops!  we don't implement SMTP */
                *pvp = NULL;
 # else /* SMTP */
                /* oops!  we don't implement SMTP */
-               syserr("554 SMTP style mailer");
+               syserr("554 SMTP style mailer not implemented");
                return (EX_SOFTWARE);
 # endif /* SMTP */
        }
                return (EX_SOFTWARE);
 # endif /* SMTP */
        }
@@ -871,7 +851,10 @@ deliver(e, firstto)
                (void) strcat(tobuf, ",");
                (void) strcat(tobuf, to->q_paddr);
                define('u', user, e);           /* to user */
                (void) strcat(tobuf, ",");
                (void) strcat(tobuf, to->q_paddr);
                define('u', user, e);           /* to user */
-               define('z', to->q_home, e);     /* user's home */
+               p = to->q_home;
+               if (p == NULL && ctladdr != NULL)
+                       p = ctladdr->q_home;
+               define('z', p, e);      /* user's home */
 
                /*
                **  Expand out this user into argument list.
 
                /*
                **  Expand out this user into argument list.
@@ -946,6 +929,18 @@ deliver(e, firstto)
        */
 
        curhost = NULL;
        */
 
        curhost = NULL;
+       SmtpPhase = NULL;
+       mci = NULL;
+
+#ifdef XDEBUG
+       {
+               char wbuf[MAXLINE];
+
+               /* make absolutely certain 0, 1, and 2 are in use */
+               sprintf(wbuf, "%s... openmailer(%s)", e->e_to, m->m_name);
+               checkfd012(wbuf);
+       }
+#endif
 
        /* check for Local Person Communication -- not for mortals!!! */
        if (strcmp(m->m_mailer, "[LPC]") == 0)
 
        /* check for Local Person Communication -- not for mortals!!! */
        if (strcmp(m->m_mailer, "[LPC]") == 0)
@@ -977,7 +972,7 @@ deliver(e, firstto)
                if (!clever)
                {
                        syserr("554 non-clever IPC");
                if (!clever)
                {
                        syserr("554 non-clever IPC");
-                       rcode = EX_OSERR;
+                       rcode = EX_CONFIG;
                        goto give_up;
                }
                if (pv[2] != NULL)
                        goto give_up;
                }
                if (pv[2] != NULL)
@@ -985,18 +980,21 @@ deliver(e, firstto)
                else
                        port = 0;
 tryhost:
                else
                        port = 0;
 tryhost:
-               mci = NULL;
                while (*curhost != '\0')
                {
                        register char *p;
                        static char hostbuf[MAXNAME];
 
                while (*curhost != '\0')
                {
                        register char *p;
                        static char hostbuf[MAXNAME];
 
-                       mci = NULL;
-
                        /* pull the next host from the signature */
                        p = strchr(curhost, ':');
                        if (p == NULL)
                                p = &curhost[strlen(curhost)];
                        /* pull the next host from the signature */
                        p = strchr(curhost, ':');
                        if (p == NULL)
                                p = &curhost[strlen(curhost)];
+                       if (p == curhost)
+                       {
+                               syserr("deliver: null host name in signature");
+                               curhost++;
+                               continue;
+                       }
                        strncpy(hostbuf, curhost, p - curhost);
                        hostbuf[p - curhost] = '\0';
                        if (*p != '\0')
                        strncpy(hostbuf, curhost, p - curhost);
                        hostbuf[p - curhost] = '\0';
                        if (*p != '\0')
@@ -1011,7 +1009,7 @@ tryhost:
                                if (tTd(11, 1))
                                {
                                        printf("openmailer: ");
                                if (tTd(11, 1))
                                {
                                        printf("openmailer: ");
-                                       mci_dump(mci);
+                                       mci_dump(mci, FALSE);
                                }
                                CurHostName = mci->mci_host;
                                break;
                                }
                                CurHostName = mci->mci_host;
                                break;
@@ -1044,28 +1042,28 @@ tryhost:
                                printf("openmailer: makeconnection => stat=%d, errno=%d\n",
                                        i, errno);
 
                                printf("openmailer: makeconnection => stat=%d, errno=%d\n",
                                        i, errno);
 
-
                        /* enter status of this host */
                        setstat(i);
                        /* enter status of this host */
                        setstat(i);
+
+                       /* should print some message here for -v mode */
+               }
+               if (mci == NULL)
+               {
+                       syserr("deliver: no host name");
+                       rcode = EX_OSERR;
+                       goto give_up;
                }
                mci->mci_pid = 0;
 #else /* no DAEMON */
                syserr("554 openmailer: no IPC");
                if (tTd(11, 1))
                        printf("openmailer: NULL\n");
                }
                mci->mci_pid = 0;
 #else /* no DAEMON */
                syserr("554 openmailer: no IPC");
                if (tTd(11, 1))
                        printf("openmailer: NULL\n");
-               return NULL;
+               rcode = EX_UNAVAILABLE;
+               goto give_up;
 #endif /* DAEMON */
        }
        else
        {
 #endif /* DAEMON */
        }
        else
        {
-#ifdef XDEBUG
-               char wbuf[MAXLINE];
-
-               /* make absolutely certain 0, 1, and 2 are in use */
-               sprintf(wbuf, "%s... openmailer(%s)", e->e_to, m->m_name);
-               checkfd012(wbuf);
-#endif
-
                if (TrafficLogFile != NULL)
                {
                        char **av;
                if (TrafficLogFile != NULL)
                {
                        char **av;
@@ -1112,7 +1110,7 @@ tryhost:
                        (void) fflush(e->e_xfp);                /* for debugging */
                (void) fflush(stdout);
 # ifdef SIGCHLD
                        (void) fflush(e->e_xfp);                /* for debugging */
                (void) fflush(stdout);
 # ifdef SIGCHLD
-               (void) signal(SIGCHLD, SIG_DFL);
+               (void) setsignal(SIGCHLD, SIG_DFL);
 # endif /* SIGCHLD */
                DOFORK(FORK);
                /* pid is set by DOFORK */
 # endif /* SIGCHLD */
                DOFORK(FORK);
                /* pid is set by DOFORK */
@@ -1143,13 +1141,30 @@ tryhost:
                        extern int DtableSize;
 
                        /* child -- set up input & exec mailer */
                        extern int DtableSize;
 
                        /* child -- set up input & exec mailer */
-                       /* make diagnostic output be standard output */
-                       (void) signal(SIGINT, SIG_IGN);
-                       (void) signal(SIGHUP, SIG_IGN);
-                       (void) signal(SIGTERM, SIG_DFL);
+                       (void) setsignal(SIGINT, SIG_IGN);
+                       (void) setsignal(SIGHUP, SIG_IGN);
+                       (void) setsignal(SIGTERM, SIG_DFL);
+
+                       /* reset user and group */
+                       if (!bitnset(M_RESTR, m->m_flags))
+                       {
+                               if (ctladdr == NULL || ctladdr->q_uid == 0)
+                               {
+                                       (void) initgroups(DefUser, DefGid);
+                                       (void) setuid(DefUid);
+                               }
+                               else
+                               {
+                                       (void) initgroups(ctladdr->q_ruser?
+                                               ctladdr->q_ruser: ctladdr->q_user,
+                                               ctladdr->q_gid);
+                                       (void) setuid(ctladdr->q_uid);
+                               }
+                       }
 
 
-                       /* close any other cached connections */
-                       mci_flush(FALSE, mci);
+                       if (tTd(11, 2))
+                               printf("openmailer: running as r/euid=%d/%d\n",
+                                       getuid(), geteuid());
 
                        /* move into some "safe" directory */
                        if (m->m_execdir != NULL)
 
                        /* move into some "safe" directory */
                        if (m->m_execdir != NULL)
@@ -1212,30 +1227,14 @@ tryhost:
                                _exit(EX_OSERR);
                        }
                        (void) close(mpvect[0]);
                                _exit(EX_OSERR);
                        }
                        (void) close(mpvect[0]);
-                       if (!bitnset(M_RESTR, m->m_flags))
-                       {
-                               if (ctladdr == NULL || ctladdr->q_uid == 0)
-                               {
-                                       (void) setgid(DefGid);
-                                       (void) initgroups(DefUser, DefGid);
-                                       (void) setuid(DefUid);
-                               }
-                               else
-                               {
-                                       (void) setgid(ctladdr->q_gid);
-                                       (void) initgroups(ctladdr->q_ruser?
-                                               ctladdr->q_ruser: ctladdr->q_user,
-                                               ctladdr->q_gid);
-                                       (void) setuid(ctladdr->q_uid);
-                               }
-                       }
 
                        /* arrange for all the files to be closed */
                        for (i = 3; i < DtableSize; i++)
                        {
                                register int j;
 
                        /* arrange for all the files to be closed */
                        for (i = 3; i < DtableSize; i++)
                        {
                                register int j;
+
                                if ((j = fcntl(i, F_GETFD, 0)) != -1)
                                if ((j = fcntl(i, F_GETFD, 0)) != -1)
-                                       (void)fcntl(i, F_SETFD, j|1);
+                                       (void) fcntl(i, F_SETFD, j | 1);
                        }
 
                        /* set up the mailer environment */
                        }
 
                        /* set up the mailer environment */
@@ -1268,10 +1267,33 @@ tryhost:
                mci->mci_pid = pid;
                (void) close(mpvect[0]);
                mci->mci_out = fdopen(mpvect[1], "w");
                mci->mci_pid = pid;
                (void) close(mpvect[0]);
                mci->mci_out = fdopen(mpvect[1], "w");
+               if (mci->mci_out == NULL)
+               {
+                       syserr("deliver: cannot create mailer output channel, fd=%d",
+                               mpvect[1]);
+                       (void) close(mpvect[1]);
+                       if (clever)
+                       {
+                               (void) close(rpvect[0]);
+                               (void) close(rpvect[1]);
+                       }
+                       rcode = EX_OSERR;
+                       goto give_up;
+               }
                if (clever)
                {
                        (void) close(rpvect[1]);
                        mci->mci_in = fdopen(rpvect[0], "r");
                if (clever)
                {
                        (void) close(rpvect[1]);
                        mci->mci_in = fdopen(rpvect[0], "r");
+                       if (mci->mci_in == NULL)
+                       {
+                               syserr("deliver: cannot create mailer input channel, fd=%d",
+                                       mpvect[1]);
+                               (void) close(rpvect[0]);
+                               fclose(mci->mci_out);
+                               mci->mci_out = NULL;
+                               rcode = EX_OSERR;
+                               goto give_up;
+                       }
                }
                else
                {
                }
                else
                {
@@ -1291,7 +1313,7 @@ tryhost:
        if (tTd(11, 1))
        {
                printf("openmailer: ");
        if (tTd(11, 1))
        {
                printf("openmailer: ");
-               mci_dump(mci);
+               mci_dump(mci, FALSE);
        }
 
        if (mci->mci_state != MCIS_OPEN)
        }
 
        if (mci->mci_state != MCIS_OPEN)
@@ -1357,6 +1379,7 @@ tryhost:
                                        *t++ = ',';
                                        for (p = to->q_paddr; *p; *t++ = *p++)
                                                continue;
                                        *t++ = ',';
                                        for (p = to->q_paddr; *p; *t++ = *p++)
                                                continue;
+                                       *t = '\0';
                                }
                        }
 
                                }
                        }
 
@@ -1397,7 +1420,8 @@ tryhost:
 #endif
 
        /* arrange a return receipt if requested */
 #endif
 
        /* arrange a return receipt if requested */
-       if (e->e_receiptto != NULL && bitnset(M_LOCALMAILER, m->m_flags))
+       if (rcode == EX_OK && e->e_receiptto != NULL &&
+           bitnset(M_LOCALMAILER, m->m_flags))
        {
                e->e_flags |= EF_SENDRECEIPT;
                /* do we want to send back more info? */
        {
                e->e_flags |= EF_SENDRECEIPT;
                /* do we want to send back more info? */
@@ -1421,6 +1445,12 @@ tryhost:
                {
                        to->q_flags |= QSENT;
                        e->e_nsent++;
                {
                        to->q_flags |= QSENT;
                        e->e_nsent++;
+                       if (e->e_receiptto != NULL &&
+                           bitnset(M_LOCALMAILER, m->m_flags))
+                       {
+                               fprintf(e->e_xfp, "%s... Successfully delivered\n",
+                                       to->q_paddr);
+                       }
                }
        }
 
                }
        }
 
@@ -1428,6 +1458,18 @@ tryhost:
        **  Restore state and return.
        */
 
        **  Restore state and return.
        */
 
+#ifdef XDEBUG
+       {
+               char wbuf[MAXLINE];
+
+               /* make absolutely certain 0, 1, and 2 are in use */
+               sprintf(wbuf, "%s... end of deliver(%s)",
+                       e->e_to == NULL ? "NO-TO-LIST" : e->e_to,
+                       m->m_name);
+               checkfd012(wbuf);
+       }
+#endif
+
        errno = 0;
        define('g', (char *) NULL, e);
        return (rcode);
        errno = 0;
        define('g', (char *) NULL, e);
        return (rcode);
@@ -1511,29 +1553,28 @@ endmailer(mci, e, pv)
                return (EX_SOFTWARE);
        }
 
                return (EX_SOFTWARE);
        }
 
-       /* see if it died a horrid death */
-       if ((st & 0377) != 0)
+       if (WIFEXITED(st))
        {
        {
-               syserr("mailer %s died with signal %o", pv[0], st);
+               /* normal death -- return status */
+               return (WEXITSTATUS(st));
+       }
 
 
-               /* log the arguments */
-               if (e->e_xfp != NULL)
-               {
-                       register char **av;
+       /* it died a horrid death */
+       syserr("mailer %s died with signal %o", pv[0], st);
 
 
-                       fprintf(e->e_xfp, "Arguments:");
-                       for (av = pv; *av != NULL; av++)
-                               fprintf(e->e_xfp, " %s", *av);
-                       fprintf(e->e_xfp, "\n");
-               }
+       /* log the arguments */
+       if (e->e_xfp != NULL)
+       {
+               register char **av;
 
 
-               ExitStat = EX_TEMPFAIL;
-               return (EX_TEMPFAIL);
+               fprintf(e->e_xfp, "Arguments:");
+               for (av = pv; *av != NULL; av++)
+                       fprintf(e->e_xfp, " %s", *av);
+               fprintf(e->e_xfp, "\n");
        }
 
        }
 
-       /* normal death -- return status */
-       st = (st >> 8) & 0377;
-       return (st);
+       ExitStat = EX_TEMPFAIL;
+       return (EX_TEMPFAIL);
 }
 \f/*
 **  GIVERESPONSE -- Interpret an error response from a mailer
 }
 \f/*
 **  GIVERESPONSE -- Interpret an error response from a mailer
@@ -1592,7 +1633,7 @@ giveresponse(stat, m, mci, e)
                (void) strcpy(buf, SysExMsg[i] + 1);
 #ifdef NAMED_BIND
                if (h_errno == TRY_AGAIN)
                (void) strcpy(buf, SysExMsg[i] + 1);
 #ifdef NAMED_BIND
                if (h_errno == TRY_AGAIN)
-                       statmsg = errstring(h_errno+MAX_ERRNO);
+                       statmsg = errstring(h_errno+E_DNSBASE);
                else
 #endif
                {
                else
 #endif
                {
@@ -1619,7 +1660,7 @@ giveresponse(stat, m, mci, e)
 #ifdef NAMED_BIND
        else if (stat == EX_NOHOST && h_errno != 0)
        {
 #ifdef NAMED_BIND
        else if (stat == EX_NOHOST && h_errno != 0)
        {
-               statmsg = errstring(h_errno + MAX_ERRNO);
+               statmsg = errstring(h_errno + E_DNSBASE);
                (void) sprintf(buf, "%s (%s)", SysExMsg[i], statmsg);
                statmsg = buf;
        }
                (void) sprintf(buf, "%s (%s)", SysExMsg[i], statmsg);
                statmsg = buf;
        }
@@ -1639,7 +1680,13 @@ giveresponse(stat, m, mci, e)
        */
 
        if (stat == EX_OK || stat == EX_TEMPFAIL)
        */
 
        if (stat == EX_OK || stat == EX_TEMPFAIL)
+       {
+               extern char MsgBuf[];
+
                message(&statmsg[4], errstring(errno));
                message(&statmsg[4], errstring(errno));
+               if (stat == EX_TEMPFAIL && e->e_xfp != NULL)
+                       fprintf(e->e_xfp, "%s\n", &MsgBuf[4]);
+       }
        else
        {
                Errors++;
        else
        {
                Errors++;
@@ -1774,7 +1821,10 @@ putfromline(fp, m, e)
                expand("\201g", buf, &buf[sizeof buf - 1], e);
                bang = strchr(buf, '!');
                if (bang == NULL)
                expand("\201g", buf, &buf[sizeof buf - 1], e);
                bang = strchr(buf, '!');
                if (bang == NULL)
-                       syserr("554 No ! in UUCP! (%s)", buf);
+               {
+                       errno = 0;
+                       syserr("554 No ! in UUCP From address! (%s given)", buf);
+               }
                else
                {
                        *bang++ = '\0';
                else
                {
                        *bang++ = '\0';
@@ -1822,7 +1872,7 @@ putbody(fp, m, e, separator)
                        e->e_dfp = fopen(e->e_df, "r");
                        if (e->e_dfp == NULL)
                                syserr("putbody: Cannot open %s for %s from %s",
                        e->e_dfp = fopen(e->e_df, "r");
                        if (e->e_dfp == NULL)
                                syserr("putbody: Cannot open %s for %s from %s",
-                               e->e_df, e->e_to, e->e_from);
+                               e->e_df, e->e_to, e->e_from.q_paddr);
                }
                else
                        putline("<<< No Message Collected >>>", fp, m);
                }
                else
                        putline("<<< No Message Collected >>>", fp, m);
@@ -1848,7 +1898,7 @@ putbody(fp, m, e, separator)
 
                if (ferror(e->e_dfp))
                {
 
                if (ferror(e->e_dfp))
                {
-                       syserr("putbody: read error");
+                       syserr("putbody: %s: read error", e->e_df);
                        ExitStat = EX_IOERR;
                }
        }
                        ExitStat = EX_IOERR;
                }
        }
@@ -1924,9 +1974,9 @@ mailfile(filename, ctladdr, e)
                /* child -- actually write to file */
                struct stat stb;
 
                /* child -- actually write to file */
                struct stat stb;
 
-               (void) signal(SIGINT, SIG_DFL);
-               (void) signal(SIGHUP, SIG_DFL);
-               (void) signal(SIGTERM, SIG_DFL);
+               (void) setsignal(SIGINT, SIG_DFL);
+               (void) setsignal(SIGHUP, SIG_DFL);
+               (void) setsignal(SIGTERM, SIG_DFL);
                (void) umask(OldUmask);
 
                if (stat(filename, &stb) < 0)
                (void) umask(OldUmask);
 
                if (stat(filename, &stb) < 0)
@@ -1954,7 +2004,7 @@ mailfile(filename, ctladdr, e)
                        if (e->e_dfp == NULL)
                        {
                                syserr("mailfile: Cannot open %s for %s from %s",
                        if (e->e_dfp == NULL)
                        {
                                syserr("mailfile: Cannot open %s for %s from %s",
-                                       e->e_df, e->e_to, e->e_from);
+                                       e->e_df, e->e_to, e->e_from.q_paddr);
                        }
                }
 
                        }
                }
 
@@ -1962,12 +2012,10 @@ mailfile(filename, ctladdr, e)
                {
                        if (ctladdr->q_uid == 0)
                        {
                {
                        if (ctladdr->q_uid == 0)
                        {
-                               (void) setgid(DefGid);
                                (void) initgroups(DefUser, DefGid);
                        }
                        else
                        {
                                (void) initgroups(DefUser, DefGid);
                        }
                        else
                        {
-                               (void) setgid(ctladdr->q_gid);
                                (void) initgroups(ctladdr->q_ruser ?
                                        ctladdr->q_ruser : ctladdr->q_user,
                                        ctladdr->q_gid);
                                (void) initgroups(ctladdr->q_ruser ?
                                        ctladdr->q_ruser : ctladdr->q_user,
                                        ctladdr->q_gid);
@@ -1985,7 +2033,7 @@ mailfile(filename, ctladdr, e)
                f = dfopen(filename, O_WRONLY|O_CREAT|O_APPEND, FileMode);
                if (f == NULL)
                {
                f = dfopen(filename, O_WRONLY|O_CREAT|O_APPEND, FileMode);
                if (f == NULL)
                {
-                       message("554 cannot open");
+                       message("554 cannot open: %s", errstring(errno));
                        exit(EX_CANTCREAT);
                }
 
                        exit(EX_CANTCREAT);
                }
 
@@ -1996,7 +2044,7 @@ mailfile(filename, ctladdr, e)
                putline("\n", f, FileMailer);
                if (ferror(f))
                {
                putline("\n", f, FileMailer);
                if (ferror(f))
                {
-                       message("451 I/O error");
+                       message("451 I/O error: %s", errstring(errno));
                        setstat(EX_IOERR);
                }
                (void) xfclose(f, "mailfile", filename);
                        setstat(EX_IOERR);
                }
                (void) xfclose(f, "mailfile", filename);
@@ -2013,10 +2061,13 @@ mailfile(filename, ctladdr, e)
                int st;
 
                st = waitfor(pid);
                int st;
 
                st = waitfor(pid);
-               if ((st & 0377) != 0)
-                       return (EX_UNAVAILABLE);
+               if (WIFEXITED(st))
+                       return (WEXITSTATUS(st));
                else
                else
-                       return ((st >> 8) & 0377);
+               {
+                       syserr("child died on signal %d", st);
+                       return (EX_UNAVAILABLE);
+               }
                /*NOTREACHED*/
        }
 }
                /*NOTREACHED*/
        }
 }
@@ -2069,13 +2120,6 @@ hostsignature(m, host, e)
                return host;
        }
 
                return host;
        }
 
-       /*
-       **  If it is a numeric address, just return it.
-       */
-
-       if (host[0] == '[')
-               return host;
-
        /*
        **  Look it up in the symbol table.
        */
        /*
        **  Look it up in the symbol table.
        */
index fe977d2..496859a 100644 (file)
@@ -36,9 +36,9 @@
 
 #ifndef lint
 #ifdef NAMED_BIND
 
 #ifndef lint
 #ifdef NAMED_BIND
-static char sccsid[] = "@(#)domain.c   8.1 (Berkeley) 6/7/93 (with name server)";
+static char sccsid[] = "@(#)domain.c   8.8 (Berkeley) 9/29/93 (with name server)";
 #else
 #else
-static char sccsid[] = "@(#)domain.c   8.1 (Berkeley) 6/7/93 (without name server)";
+static char sccsid[] = "@(#)domain.c   8.8 (Berkeley) 9/29/93 (without name server)";
 #endif
 #endif /* not lint */
 
 #endif
 #endif /* not lint */
 
@@ -65,6 +65,10 @@ static char  MXHostBuf[MAXMXHOSTS*PACKETSZ];
 #define MAX(a, b)      ((a) > (b) ? (a) : (b))
 #endif
 
 #define MAX(a, b)      ((a) > (b) ? (a) : (b))
 #endif
 
+#ifndef NO_DATA
+# define NO_DATA       NO_ADDRESS
+#endif
+
 /* don't use sizeof because sizeof(long) is different on 64-bit machines */
 #define SHORTSIZE      2       /* size of a short (really, must be 2) */
 #define LONGSIZE       4       /* size of a long (really, must be 4) */
 /* don't use sizeof because sizeof(long) is different on 64-bit machines */
 #define SHORTSIZE      2       /* size of a short (really, must be 2) */
 #define LONGSIZE       4       /* size of a long (really, must be 4) */
@@ -96,18 +100,21 @@ getmxrr(host, mxhosts, droplocalhost, rcode)
 {
        extern int h_errno;
        register u_char *eom, *cp;
 {
        extern int h_errno;
        register u_char *eom, *cp;
-       register int i, j, n, nmx;
+       register int i, j, n;
+       int nmx = 0;
        register char *bp;
        HEADER *hp;
        querybuf answer;
        int ancount, qdcount, buflen;
        register char *bp;
        HEADER *hp;
        querybuf answer;
        int ancount, qdcount, buflen;
-       bool seenlocal;
+       bool seenlocal = FALSE;
        u_short pref, localpref, type;
        char *fallbackMX = FallBackMX;
        static bool firsttime = TRUE;
        STAB *st;
        u_short pref, localpref, type;
        char *fallbackMX = FallBackMX;
        static bool firsttime = TRUE;
        STAB *st;
+       bool trycanon = FALSE;
        u_short prefer[MAXMXHOSTS];
        int weight[MAXMXHOSTS];
        u_short prefer[MAXMXHOSTS];
        int weight[MAXMXHOSTS];
+       extern bool getcanonname();
 
        if (fallbackMX != NULL)
        {
 
        if (fallbackMX != NULL)
        {
@@ -127,6 +134,10 @@ getmxrr(host, mxhosts, droplocalhost, rcode)
                firsttime = FALSE;
        }
 
                firsttime = FALSE;
        }
 
+       /* efficiency hack -- numeric or non-MX lookups */
+       if (host[0] == '[')
+               goto punt;
+
        errno = 0;
        n = res_search(host, C_IN, T_MX, (char *)&answer, sizeof(answer));
        if (n < 0)
        errno = 0;
        n = res_search(host, C_IN, T_MX, (char *)&answer, sizeof(answer));
        if (n < 0)
@@ -137,6 +148,9 @@ getmxrr(host, mxhosts, droplocalhost, rcode)
                switch (h_errno)
                {
                  case NO_DATA:
                switch (h_errno)
                {
                  case NO_DATA:
+                       trycanon = TRUE;
+                       /* fall through */
+
                  case NO_RECOVERY:
                        /* no MX data on this host */
                        goto punt;
                  case NO_RECOVERY:
                        /* no MX data on this host */
                        goto punt;
@@ -167,8 +181,6 @@ getmxrr(host, mxhosts, droplocalhost, rcode)
        for (qdcount = ntohs(hp->qdcount); qdcount--; cp += n + QFIXEDSZ)
                if ((n = dn_skipname(cp, eom)) < 0)
                        goto punt;
        for (qdcount = ntohs(hp->qdcount); qdcount--; cp += n + QFIXEDSZ)
                if ((n = dn_skipname(cp, eom)) < 0)
                        goto punt;
-       nmx = 0;
-       seenlocal = FALSE;
        buflen = sizeof(MXHostBuf) - 1;
        bp = MXHostBuf;
        ancount = ntohs(hp->ancount);
        buflen = sizeof(MXHostBuf) - 1;
        bp = MXHostBuf;
        ancount = ntohs(hp->ancount);
@@ -216,63 +228,93 @@ getmxrr(host, mxhosts, droplocalhost, rcode)
                *bp++ = '\0';
                buflen -= n + 1;
        }
                *bp++ = '\0';
                buflen -= n + 1;
        }
-       if (nmx == 0)
+
+       /* sort the records */
+       for (i = 0; i < nmx; i++)
        {
        {
-punt:
-               mxhosts[0] = strcpy(MXHostBuf, host);
-               bp = &MXHostBuf[strlen(MXHostBuf)];
-               if (bp[-1] != '.')
+               for (j = i + 1; j < nmx; j++)
                {
                {
-                       *bp++ = '.';
-                       *bp = '\0';
+                       if (prefer[i] > prefer[j] ||
+                           (prefer[i] == prefer[j] && weight[i] > weight[j]))
+                       {
+                               register int temp;
+                               register char *temp1;
+
+                               temp = prefer[i];
+                               prefer[i] = prefer[j];
+                               prefer[j] = temp;
+                               temp1 = mxhosts[i];
+                               mxhosts[i] = mxhosts[j];
+                               mxhosts[j] = temp1;
+                               temp = weight[i];
+                               weight[i] = weight[j];
+                               weight[j] = temp;
+                       }
+               }
+               if (seenlocal && prefer[i] >= localpref)
+               {
+                       /* truncate higher preference part of list */
+                       nmx = i;
                }
                }
-               nmx = 1;
        }
        }
-       else
+
+       if (nmx == 0)
        {
        {
-               /* sort the records */
-               for (i = 0; i < nmx; i++)
+punt:
+               if (seenlocal &&
+                   (!TryNullMXList || gethostbyname(host) == NULL))
                {
                {
-                       for (j = i + 1; j < nmx; j++)
+                       /*
+                       **  If we have deleted all MX entries, this is
+                       **  an error -- we should NEVER send to a host that
+                       **  has an MX, and this should have been caught
+                       **  earlier in the config file.
+                       **
+                       **  Some sites prefer to go ahead and try the
+                       **  A record anyway; that case is handled by
+                       **  setting TryNullMXList.  I believe this is a
+                       **  bad idea, but it's up to you....
+                       */
+
+                       *rcode = EX_CONFIG;
+                       return -1;
+               }
+               strcpy(MXHostBuf, host);
+               mxhosts[0] = MXHostBuf;
+               if (host[0] == '[')
+               {
+                       register char *p;
+
+                       /* this may be an MX suppression-style address */
+                       p = strchr(MXHostBuf, ']');
+                       if (p != NULL)
                        {
                        {
-                               if (prefer[i] > prefer[j] ||
-                                   (prefer[i] == prefer[j] && weight[i] > weight[j]))
+                               *p = '\0';
+                               if (inet_addr(&MXHostBuf[1]) != -1)
+                                       *p = ']';
+                               else
                                {
                                {
-                                       register int temp;
-                                       register char *temp1;
-
-                                       temp = prefer[i];
-                                       prefer[i] = prefer[j];
-                                       prefer[j] = temp;
-                                       temp1 = mxhosts[i];
-                                       mxhosts[i] = mxhosts[j];
-                                       mxhosts[j] = temp1;
-                                       temp = weight[i];
-                                       weight[i] = weight[j];
-                                       weight[j] = temp;
+                                       trycanon = TRUE;
+                                       mxhosts[0]++;
                                }
                        }
                                }
                        }
-                       if (seenlocal && prefer[i] >= localpref)
+               }
+               if (trycanon &&
+                   getcanonname(mxhosts[0], sizeof MXHostBuf - 2, FALSE))
+               {
+                       bp = &MXHostBuf[strlen(MXHostBuf)];
+                       if (bp[-1] != '.')
                        {
                        {
-                               /*
-                                * truncate higher pref part of list; if we're
-                                * the best choice left, we should have realized
-                                * awhile ago that this was a local delivery.
-                                */
-                               if (i == 0)
-                               {
-                                       *rcode = EX_CONFIG;
-                                       return (-1);
-                               }
-                               nmx = i;
-                               break;
+                               *bp++ = '.';
+                               *bp = '\0';
                        }
                }
                        }
                }
+               nmx = 1;
        }
 
        /* if we have a default lowest preference, include that */
        }
 
        /* if we have a default lowest preference, include that */
-       if (FallBackMX != NULL && !seenlocal)
-               mxhosts[nmx++] = FallBackMX;
+       if (fallbackMX != NULL && !seenlocal)
+               mxhosts[nmx++] = fallbackMX;
 
        return (nmx);
 }
 
        return (nmx);
 }
@@ -348,6 +390,7 @@ mxrand(host)
 **             host -- a buffer containing the name of the host.
 **                     This is a value-result parameter.
 **             hbsize -- the size of the host buffer.
 **             host -- a buffer containing the name of the host.
 **                     This is a value-result parameter.
 **             hbsize -- the size of the host buffer.
+**             trymx -- if set, try MX records as well as A and CNAME.
 **
 **     Returns:
 **             TRUE -- if the host matched.
 **
 **     Returns:
 **             TRUE -- if the host matched.
@@ -355,9 +398,10 @@ mxrand(host)
 */
 
 bool
 */
 
 bool
-getcanonname(host, hbsize)
+getcanonname(host, hbsize, trymx)
        char *host;
        int hbsize;
        char *host;
        int hbsize;
+       bool trymx;
 {
        extern int h_errno;
        register u_char *eom, *ap;
 {
        extern int h_errno;
        register u_char *eom, *ap;
@@ -452,7 +496,7 @@ cnameloop:
                                        qtype = T_A;
                                        continue;
                                }
                                        qtype = T_A;
                                        continue;
                                }
-                               else if (qtype == T_A && !gotmx)
+                               else if (qtype == T_A && !gotmx && trymx)
                                {
                                        qtype = T_MX;
                                        continue;
                                {
                                        qtype = T_MX;
                                        continue;
@@ -513,7 +557,7 @@ cnameloop:
                                if (**dp != '\0')
                                {
                                        /* got a match -- save that info */
                                if (**dp != '\0')
                                {
                                        /* got a match -- save that info */
-                                       if (mxmatch == NULL)
+                                       if (trymx && mxmatch == NULL)
                                                mxmatch = *dp;
                                        continue;
                                }
                                                mxmatch = *dp;
                                        continue;
                                }
@@ -571,7 +615,7 @@ cnameloop:
 
                if (qtype == T_ANY)
                        qtype = T_A;
 
                if (qtype == T_ANY)
                        qtype = T_A;
-               else if (qtype == T_A && !gotmx)
+               else if (qtype == T_A && !gotmx && trymx)
                        qtype = T_MX;
                else
                {
                        qtype = T_MX;
                else
                {
@@ -598,9 +642,10 @@ cnameloop:
 #include <netdb.h>
 
 bool
 #include <netdb.h>
 
 bool
-getcanonname(host, hbsize)
+getcanonname(host, hbsize, trymx)
        char *host;
        int hbsize;
        char *host;
        int hbsize;
+       bool trymx;
 {
        struct hostent *hp;
 
 {
        struct hostent *hp;
 
index 6818d8a..9147802 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)envelope.c 8.3 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)envelope.c 8.13 (Berkeley) 10/23/93";
 #endif /* not lint */
 
 #include "sendmail.h"
 #endif /* not lint */
 
 #include "sendmail.h"
@@ -101,6 +101,7 @@ dropenvelope(e)
        register ENVELOPE *e;
 {
        bool queueit = FALSE;
        register ENVELOPE *e;
 {
        bool queueit = FALSE;
+       bool saveit = bitset(EF_FATALERRS, e->e_flags);
        register ADDRESS *q;
        char *id = e->e_id;
        char buf[MAXLINE];
        register ADDRESS *q;
        char *id = e->e_id;
        char buf[MAXLINE];
@@ -134,10 +135,19 @@ dropenvelope(e)
        **  Extract state information from dregs of send list.
        */
 
        **  Extract state information from dregs of send list.
        */
 
+       e->e_flags &= ~EF_QUEUERUN;
        for (q = e->e_sendqueue; q != NULL; q = q->q_next)
        {
                if (bitset(QQUEUEUP, q->q_flags))
                        queueit = TRUE;
        for (q = e->e_sendqueue; q != NULL; q = q->q_next)
        {
                if (bitset(QQUEUEUP, q->q_flags))
                        queueit = TRUE;
+               if (!bitset(QDONTSEND, q->q_flags) &&
+                   bitset(QBADADDR, q->q_flags))
+               {
+                       if (q->q_owner == NULL &&
+                           strcmp(e->e_from.q_paddr, "<>") != 0)
+                               (void) sendtolist(e->e_from.q_paddr, NULL,
+                                                 &e->e_errorqueue, e);
+               }
        }
 
        /*
        }
 
        /*
@@ -148,16 +158,14 @@ dropenvelope(e)
                /* nothing to do */ ;
        else if (curtime() > e->e_ctime + TimeOuts.to_q_return)
        {
                /* nothing to do */ ;
        else if (curtime() > e->e_ctime + TimeOuts.to_q_return)
        {
-               if (!bitset(EF_TIMEOUT, e->e_flags))
-               {
-                       (void) sprintf(buf, "Cannot send message for %s",
-                               pintvl(TimeOuts.to_q_return, FALSE));
-                       if (e->e_message != NULL)
-                               free(e->e_message);
-                       e->e_message = newstr(buf);
-                       message(buf);
-               }
-               e->e_flags |= EF_TIMEOUT|EF_CLRQUEUE;
+               (void) sprintf(buf, "Cannot send message for %s",
+                       pintvl(TimeOuts.to_q_return, FALSE));
+               if (e->e_message != NULL)
+                       free(e->e_message);
+               e->e_message = newstr(buf);
+               message(buf);
+               e->e_flags |= EF_CLRQUEUE;
+               saveit = TRUE;
                fprintf(e->e_xfp, "Message could not be delivered for %s\n",
                        pintvl(TimeOuts.to_q_return, FALSE));
                fprintf(e->e_xfp, "Message will be deleted from queue\n");
                fprintf(e->e_xfp, "Message could not be delivered for %s\n",
                        pintvl(TimeOuts.to_q_return, FALSE));
                fprintf(e->e_xfp, "Message will be deleted from queue\n");
@@ -181,7 +189,8 @@ dropenvelope(e)
                                free(e->e_message);
                        e->e_message = newstr(buf);
                        message(buf);
                                free(e->e_message);
                        e->e_message = newstr(buf);
                        message(buf);
-                       e->e_flags |= EF_WARNING|EF_TIMEOUT;
+                       e->e_flags |= EF_WARNING;
+                       saveit = TRUE;
                }
                fprintf(e->e_xfp,
                        "Warning: message still undelivered after %s\n",
                }
                fprintf(e->e_xfp,
                        "Warning: message still undelivered after %s\n",
@@ -203,7 +212,7 @@ dropenvelope(e)
        {
                auto ADDRESS *rlist = NULL;
 
        {
                auto ADDRESS *rlist = NULL;
 
-               (void) sendtolist(e->e_receiptto, (ADDRESS *) NULL, &rlist, e);
+               (void) sendtolist(e->e_receiptto, NULLADDR, &rlist, e);
                (void) returntosender("Return receipt", rlist, FALSE, e);
        }
 
                (void) returntosender("Return receipt", rlist, FALSE, e);
        }
 
@@ -211,10 +220,22 @@ dropenvelope(e)
        **  Arrange to send error messages if there are fatal errors.
        */
 
        **  Arrange to send error messages if there are fatal errors.
        */
 
-       if (bitset(EF_FATALERRS|EF_TIMEOUT, e->e_flags) &&
-           e->e_errormode != EM_QUIET)
+       if (saveit && e->e_errormode != EM_QUIET)
                savemail(e);
 
                savemail(e);
 
+       /*
+       **  Arrange to send warning messages to postmaster as requested.
+       */
+
+       if (bitset(EF_PM_NOTIFY, e->e_flags) && PostMasterCopy != NULL &&
+           !bitset(EF_RESPONSE, e->e_flags) && e->e_class >= 0)
+       {
+               auto ADDRESS *rlist = NULL;
+
+               (void) sendtolist(PostMasterCopy, NULLADDR, &rlist, e);
+               (void) returntosender(e->e_message, rlist, FALSE, e);
+       }
+
        /*
        **  Instantiate or deinstantiate the queue.
        */
        /*
        **  Instantiate or deinstantiate the queue.
        */
@@ -222,16 +243,21 @@ dropenvelope(e)
        if ((!queueit && !bitset(EF_KEEPQUEUE, e->e_flags)) ||
            bitset(EF_CLRQUEUE, e->e_flags))
        {
        if ((!queueit && !bitset(EF_KEEPQUEUE, e->e_flags)) ||
            bitset(EF_CLRQUEUE, e->e_flags))
        {
-               if (tTd(50, 2))
-                       printf("Dropping envelope\n");
+               if (tTd(50, 1))
+                       printf("\n===== Dropping [dq]f%s =====\n\n", e->e_id);
                if (e->e_df != NULL)
                        xunlink(e->e_df);
                xunlink(queuename(e, 'q'));
                if (e->e_df != NULL)
                        xunlink(e->e_df);
                xunlink(queuename(e, 'q'));
+
+#ifdef LOG
+               if (LogLevel > 10)
+                       syslog(LOG_INFO, "%s: done", id);
+#endif
        }
        else if (queueit || !bitset(EF_INQUEUE, e->e_flags))
        {
 #ifdef QUEUE
        }
        else if (queueit || !bitset(EF_INQUEUE, e->e_flags))
        {
 #ifdef QUEUE
-               queueup(e, FALSE, FALSE);
+               queueup(e, bitset(EF_KEEPQUEUE, e->e_flags), FALSE);
 #else /* QUEUE */
                syserr("554 dropenvelope: queueup");
 #endif /* QUEUE */
 #else /* QUEUE */
                syserr("554 dropenvelope: queueup");
 #endif /* QUEUE */
@@ -246,11 +272,9 @@ dropenvelope(e)
                (void) xfclose(e->e_dfp, "dropenvelope", e->e_df);
        e->e_dfp = NULL;
        e->e_id = e->e_df = NULL;
                (void) xfclose(e->e_dfp, "dropenvelope", e->e_df);
        e->e_dfp = NULL;
        e->e_id = e->e_df = NULL;
-
-#ifdef LOG
-       if (LogLevel > 74)
-               syslog(LOG_INFO, "%s: done", id);
-#endif /* LOG */
+#ifdef XDEBUG
+       checkfd012("dropenvelope");
+#endif
 }
 \f/*
 **  CLEARENVELOPE -- clear an envelope without unlocking
 }
 \f/*
 **  CLEARENVELOPE -- clear an envelope without unlocking
@@ -420,7 +444,8 @@ settime(e)
        if (p != NULL)
                *p = '\0';
        define('d', dbuf, e);
        if (p != NULL)
                *p = '\0';
        define('d', dbuf, e);
-       p = newstr(arpadate(dbuf));
+       p = arpadate(dbuf);
+       p = newstr(p);
        if (macvalue('a', e) == NULL)
                define('a', p, e);
        define('b', p, e);
        if (macvalue('a', e) == NULL)
                define('a', p, e);
        define('b', p, e);
@@ -464,6 +489,15 @@ openxscript(e)
                        syserr("!Can't open /dev/null");
        }
        e->e_xfp = fdopen(fd, "w");
                        syserr("!Can't open /dev/null");
        }
        e->e_xfp = fdopen(fd, "w");
+       if (e->e_xfp == NULL)
+       {
+               syserr("!Can't create transcript stream %s", p);
+       }
+       if (tTd(46, 9))
+       {
+               printf("openxscript(%s):\n  ", p);
+               dumpfd(fileno(e->e_xfp), TRUE, FALSE);
+       }
 }
 \f/*
 **  CLOSEXSCRIPT -- close the transcript file.
 }
 \f/*
 **  CLOSEXSCRIPT -- close the transcript file.
@@ -535,7 +569,8 @@ setsender(from, e, delimptr, internal)
        char *realname = NULL;
        register struct passwd *pw;
        char delimchar;
        char *realname = NULL;
        register struct passwd *pw;
        char delimchar;
-       char buf[MAXNAME];
+       char *bp;
+       char buf[MAXNAME + 2];
        char pvpbuf[PSBUFSIZE];
        extern struct passwd *getpwnam();
        extern char *FullName;
        char pvpbuf[PSBUFSIZE];
        extern struct passwd *getpwnam();
        extern char *FullName;
@@ -558,7 +593,8 @@ setsender(from, e, delimptr, internal)
 
        delimchar = internal ? '\0' : ' ';
        if (from == NULL ||
 
        delimchar = internal ? '\0' : ' ';
        if (from == NULL ||
-           parseaddr(from, &e->e_from, 1, delimchar, delimptr, e) == NULL)
+           parseaddr(from, &e->e_from, RF_COPYALL|RF_SENDERADDR,
+                     delimchar, delimptr, e) == NULL)
        {
                /* log garbage addresses for traceback */
 # ifdef LOG
        {
                /* log garbage addresses for traceback */
 # ifdef LOG
@@ -584,10 +620,12 @@ setsender(from, e, delimptr, internal)
                if (from != NULL)
                        SuprErrs = TRUE;
                if (from == realname ||
                if (from != NULL)
                        SuprErrs = TRUE;
                if (from == realname ||
-                   parseaddr(from = newstr(realname), &e->e_from, 1, ' ', NULL, e) == NULL)
+                   parseaddr(from = newstr(realname), &e->e_from,
+                             RF_COPYALL|RF_SENDERADDR, ' ', NULL, e) == NULL)
                {
                        SuprErrs = TRUE;
                {
                        SuprErrs = TRUE;
-                       if (parseaddr("postmaster", &e->e_from, 1, ' ', NULL, e) == NULL)
+                       if (parseaddr("postmaster", &e->e_from, RF_COPYALL,
+                                     ' ', NULL, e) == NULL)
                                syserr("553 setsender: can't even parse postmaster!");
                }
        }
                                syserr("553 setsender: can't even parse postmaster!");
                }
        }
@@ -618,7 +656,7 @@ setsender(from, e, delimptr, internal)
                                FullName = NULL;
 
 # ifdef USERDB
                                FullName = NULL;
 
 # ifdef USERDB
-                       p = udbsender(from);
+                       p = udbsender(e->e_from.q_user);
 
                        if (p != NULL)
                        {
 
                        if (p != NULL)
                        {
@@ -686,8 +724,15 @@ setsender(from, e, delimptr, internal)
        (void) rewrite(pvp, 3, e);
        (void) rewrite(pvp, 1, e);
        (void) rewrite(pvp, 4, e);
        (void) rewrite(pvp, 3, e);
        (void) rewrite(pvp, 1, e);
        (void) rewrite(pvp, 4, e);
-       cataddr(pvp, NULL, buf, sizeof buf, '\0');
-       e->e_sender = newstr(buf);
+       bp = buf + 1;
+       cataddr(pvp, NULL, bp, sizeof buf - 2, '\0');
+       if (*bp == '@')
+       {
+               /* heuristic: route-addr: add angle brackets */
+               strcat(bp, ">");
+               *--bp = '<';
+       }
+       e->e_sender = newstr(bp);
        define('f', e->e_sender, e);
 
        /* save the domain spec if this mailer wants it */
        define('f', e->e_sender, e);
 
        /* save the domain spec if this mailer wants it */
index 9ee17be..ccdc003 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)err.c      8.2 (Berkeley) 7/11/93";
+static char sccsid[] = "@(#)err.c      8.12 (Berkeley) 10/21/93";
 #endif /* not lint */
 
 # include "sendmail.h"
 #endif /* not lint */
 
 # include "sendmail.h"
@@ -64,13 +64,13 @@ static char sccsid[] = "@(#)err.c   8.2 (Berkeley) 7/11/93";
 **             sets ExitStat.
 */
 
 **             sets ExitStat.
 */
 
-# ifdef lint
-int    sys_nerr;
-char   *sys_errlist[];
-# endif lint
 char   MsgBuf[BUFSIZ*2];       /* text of most recent message */
 
 char   MsgBuf[BUFSIZ*2];       /* text of most recent message */
 
-static void fmtmsg();
+static void    fmtmsg();
+
+#if defined(NAMED_BIND) && !defined(NO_DATA)
+# define NO_DATA       NO_ADDRESS
+#endif
 
 void
 /*VARARGS1*/
 
 void
 /*VARARGS1*/
@@ -116,6 +116,11 @@ syserr(fmt, va_alist)
                        CurEnv->e_id == NULL ? "NOQUEUE" : CurEnv->e_id,
                        &MsgBuf[4]);
 # endif /* LOG */
                        CurEnv->e_id == NULL ? "NOQUEUE" : CurEnv->e_id,
                        &MsgBuf[4]);
 # endif /* LOG */
+       if (olderrno == EMFILE)
+       {
+               printopenfds(TRUE);
+               mci_dump_all(TRUE);
+       }
        if (panic)
        {
 #ifdef XLA
        if (panic)
        {
 #ifdef XLA
@@ -265,14 +270,22 @@ putoutmsg(msg, holdmsg)
        char *msg;
        bool holdmsg;
 {
        char *msg;
        bool holdmsg;
 {
+       /* display for debugging */
+       if (tTd(54, 8))
+               printf("--- %s%s\n", msg, holdmsg ? " (held)" : "");
+
        /* output to transcript if serious */
        /* output to transcript if serious */
-       if (CurEnv->e_xfp != NULL && (msg[0] == '4' || msg[0] == '5'))
+       if (CurEnv->e_xfp != NULL && strchr("456", msg[0]) != NULL)
                fprintf(CurEnv->e_xfp, "%s\n", msg);
 
        /* output to channel if appropriate */
        if (holdmsg || (!Verbose && msg[0] == '0'))
                return;
 
                fprintf(CurEnv->e_xfp, "%s\n", msg);
 
        /* output to channel if appropriate */
        if (holdmsg || (!Verbose && msg[0] == '0'))
                return;
 
+       /* map warnings to something SMTP can handle */
+       if (msg[0] == '6')
+               msg[0] = '5';
+
        (void) fflush(stdout);
        if (OpMode == MD_SMTP)
                fprintf(OutChannel, "%s\r\n", msg);
        (void) fflush(stdout);
        if (OpMode == MD_SMTP)
                fprintf(OutChannel, "%s\r\n", msg);
@@ -286,8 +299,13 @@ putoutmsg(msg, holdmsg)
        if (!ferror(OutChannel))
                return;
 
        if (!ferror(OutChannel))
                return;
 
-       /* error on output -- if reporting lost channel, just ignore it */
-       if (feof(InChannel) || ferror(InChannel))
+       /*
+       **  Error on output -- if reporting lost channel, just ignore it.
+       **  Also, ignore errors from QUIT response (221 message) -- some
+       **      rude servers don't read result.
+       */
+
+       if (feof(InChannel) || ferror(InChannel) || strncmp(msg, "221", 3) == 0)
                return;
 
        /* can't call syserr, 'cause we are using MsgBuf */
                return;
 
        /* can't call syserr, 'cause we are using MsgBuf */
@@ -295,9 +313,10 @@ putoutmsg(msg, holdmsg)
 #ifdef LOG
        if (LogLevel > 0)
                syslog(LOG_CRIT,
 #ifdef LOG
        if (LogLevel > 0)
                syslog(LOG_CRIT,
-                       "%s: SYSERR: putoutmsg (%s): error on output channel sending \"%s\"",
+                       "%s: SYSERR: putoutmsg (%s): error on output channel sending \"%s\": %m",
                        CurEnv->e_id == NULL ? "NOQUEUE" : CurEnv->e_id,
                        CurEnv->e_id == NULL ? "NOQUEUE" : CurEnv->e_id,
-                       CurHostName, msg);
+                       CurHostName == NULL ? "NO-HOST" : CurHostName,
+                       msg);
 #endif
 }
 \f/*
 #endif
 }
 \f/*
@@ -316,13 +335,23 @@ putoutmsg(msg, holdmsg)
 puterrmsg(msg)
        char *msg;
 {
 puterrmsg(msg)
        char *msg;
 {
+       char msgcode = msg[0];
+
        /* output the message as usual */
        putoutmsg(msg, HoldErrs);
 
        /* signal the error */
        /* output the message as usual */
        putoutmsg(msg, HoldErrs);
 
        /* signal the error */
-       Errors++;
-       if (msg[0] == '5')
-               CurEnv->e_flags |= EF_FATALERRS;
+       if (msgcode == '6')
+       {
+               /* notify the postmaster */
+               CurEnv->e_flags |= EF_PM_NOTIFY;
+       }
+       else
+       {
+               Errors++;
+               if (msgcode == '5' && bitset(EF_GLOBALERRS, CurEnv->e_flags))
+                       CurEnv->e_flags |= EF_FATALERRS;
+       }
 }
 \f/*
 **  FMTMSG -- format a message into buffer.
 }
 \f/*
 **  FMTMSG -- format a message into buffer.
@@ -396,8 +425,12 @@ fmtmsg(eb, to, num, eno, fmt, ap)
                eb += strlen(eb);
        }
 
                eb += strlen(eb);
        }
 
-       if (CurEnv->e_message == NULL && strchr("45", num[0]) != NULL)
+       if (num[0] == '5' || (CurEnv->e_message == NULL && num[0] == '4'))
+       {
+               if (CurEnv->e_message != NULL)
+                       free(CurEnv->e_message);
                CurEnv->e_message = newstr(meb);
                CurEnv->e_message = newstr(meb);
+       }
 }
 \f/*
 **  ERRSTRING -- return string description of error code
 }
 \f/*
 **  ERRSTRING -- return string description of error code
@@ -416,9 +449,11 @@ const char *
 errstring(errno)
        int errno;
 {
 errstring(errno)
        int errno;
 {
-       extern const char *const sys_errlist[];
-       extern int sys_nerr;
        static char buf[MAXLINE];
        static char buf[MAXLINE];
+# ifndef ERRLIST_PREDEFINED
+       extern char *sys_errlist[];
+       extern int sys_nerr;
+# endif
 # ifdef SMTP
        extern char *SmtpPhase;
 # endif /* SMTP */
 # ifdef SMTP
        extern char *SmtpPhase;
 # endif /* SMTP */
@@ -460,17 +495,20 @@ errstring(errno)
                (void) sprintf(buf, "Connection refused by %s", CurHostName);
                return (buf);
 
                (void) sprintf(buf, "Connection refused by %s", CurHostName);
                return (buf);
 
+         case EOPENTIMEOUT:
+               return "Timeout on file open";
+
 # ifdef NAMED_BIND
 # ifdef NAMED_BIND
-         case HOST_NOT_FOUND + MAX_ERRNO:
+         case HOST_NOT_FOUND + E_DNSBASE:
                return ("Name server: host not found");
 
                return ("Name server: host not found");
 
-         case TRY_AGAIN + MAX_ERRNO:
+         case TRY_AGAIN + E_DNSBASE:
                return ("Name server: host name lookup failure");
 
                return ("Name server: host name lookup failure");
 
-         case NO_RECOVERY + MAX_ERRNO:
+         case NO_RECOVERY + E_DNSBASE:
                return ("Name server: non-recoverable error");
 
                return ("Name server: non-recoverable error");
 
-         case NO_DATA + MAX_ERRNO:
+         case NO_DATA + E_DNSBASE:
                return ("Name server: no data known for name");
 # endif
        }
                return ("Name server: no data known for name");
 # endif
        }
index 6679b50..1fea639 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)headers.c  8.2 (Berkeley) 7/11/93";
+static char sccsid[] = "@(#)headers.c  8.13 (Berkeley) 10/24/93";
 #endif /* not lint */
 
 # include <errno.h>
 #endif /* not lint */
 
 # include <errno.h>
@@ -70,6 +70,7 @@ chompheader(line, def, e)
        struct hdrinfo *hi;
        bool cond = FALSE;
        BITMAP mopts;
        struct hdrinfo *hi;
        bool cond = FALSE;
        BITMAP mopts;
+       char buf[MAXNAME];
 
        if (tTd(31, 6))
                printf("chompheader: %s\n", line);
 
        if (tTd(31, 6))
                printf("chompheader: %s\n", line);
@@ -96,16 +97,18 @@ chompheader(line, def, e)
 
        /* find canonical name */
        fname = p;
 
        /* find canonical name */
        fname = p;
-       p = strchr(p, ':');
-       if (p == NULL)
+       while (isascii(*p) && isgraph(*p) && *p != ':')
+               p++;
+       fvalue = p;
+       while (isascii(*p) && isspace(*p))
+               p++;
+       if (*p++ != ':' || fname == fvalue)
        {
                syserr("553 header syntax error, line \"%s\"", line);
                return (0);
        }
        {
                syserr("553 header syntax error, line \"%s\"", line);
                return (0);
        }
-       fvalue = &p[1];
-       while (isascii(*--p) && isspace(*p))
-               continue;
-       *++p = '\0';
+       *fvalue = '\0';
+       fvalue = p;
 
        /* strip field value on front */
        if (*fvalue == ' ')
 
        /* strip field value on front */
        if (*fvalue == ' ')
@@ -118,6 +121,14 @@ chompheader(line, def, e)
                        break;
        }
 
                        break;
        }
 
+       if (tTd(31, 9))
+       {
+               if (hi->hi_field == NULL)
+                       printf("no header match\n");
+               else
+                       printf("header match, hi_flags=%o\n", hi->hi_flags);
+       }
+
        /* see if this is a resent message */
        if (!def && bitset(H_RESENT, hi->hi_flags))
                e->e_flags |= EF_RESENT;
        /* see if this is a resent message */
        if (!def && bitset(H_RESENT, hi->hi_flags))
                e->e_flags |= EF_RESENT;
@@ -126,7 +137,12 @@ chompheader(line, def, e)
        if (bitset(H_EOH, hi->hi_flags))
                return (hi->hi_flags);
 
        if (bitset(H_EOH, hi->hi_flags))
                return (hi->hi_flags);
 
-       /* drop explicit From: if same as what we would generate -- for MH */
+       /*
+       **  Drop explicit From: if same as what we would generate.
+       **  This is to make MH (which doesn't always give a full name)
+       **  insert the full name information in all circumstances.
+       */
+
        p = "resent-from";
        if (!bitset(EF_RESENT, e->e_flags))
                p += 7;
        p = "resent-from";
        if (!bitset(EF_RESENT, e->e_flags))
                p += 7;
@@ -141,6 +157,36 @@ chompheader(line, def, e)
                    (strcmp(fvalue, e->e_from.q_paddr) == 0 ||
                     strcmp(fvalue, e->e_from.q_user) == 0))
                        return (hi->hi_flags);
                    (strcmp(fvalue, e->e_from.q_paddr) == 0 ||
                     strcmp(fvalue, e->e_from.q_user) == 0))
                        return (hi->hi_flags);
+#ifdef MAYBENEXTRELEASE                /* XXX UNTESTED XXX UNTESTED XXX UNTESTED XXX */
+#ifdef USERDB
+               else
+               {
+                       auto ADDRESS a;
+                       char *fancy;
+                       extern char *crackaddr();
+                       extern char *udbsender();
+
+                       /*
+                       **  Try doing USERDB rewriting even on fully commented
+                       **  names; this saves the "comment" information (such
+                       **  as full name) and rewrites the electronic part.
+                       */
+
+                       fancy = crackaddr(fvalue);
+                       if (parseaddr(fvalue, &a, RF_COPYNONE, '\0', NULL, e) != NULL &&
+                           a.q_mailer == LocalMailer &&
+                           (p = udbsender(a.q_user)) != NULL)
+                       {
+                               char *oldg = macvalue('g', e);
+
+                               define('g', p, e);
+                               expand(fancy, buf, &buf[sizeof buf], e);
+                               define('g', oldg, e);
+                               fvalue = buf;
+                       }
+               }
+#endif
+#endif
        }
 
        /* delete default value for this header */
        }
 
        /* delete default value for this header */
@@ -155,7 +201,7 @@ chompheader(line, def, e)
        /* create a new node */
        h = (HDR *) xalloc(sizeof *h);
        h->h_field = newstr(fname);
        /* create a new node */
        h = (HDR *) xalloc(sizeof *h);
        h->h_field = newstr(fname);
-       h->h_value = NULL;
+       h->h_value = newstr(fvalue);
        h->h_link = NULL;
        bcopy((char *) mopts, (char *) h->h_mflags, sizeof mopts);
        *hp = h;
        h->h_link = NULL;
        bcopy((char *) mopts, (char *) h->h_mflags, sizeof mopts);
        *hp = h;
@@ -164,9 +210,6 @@ chompheader(line, def, e)
                h->h_flags |= H_DEFAULT;
        if (cond)
                h->h_flags |= H_CHECK;
                h->h_flags |= H_DEFAULT;
        if (cond)
                h->h_flags |= H_CHECK;
-       if (h->h_value != NULL)
-               free((char *) h->h_value);
-       h->h_value = newstr(fvalue);
 
        /* hack to see if this is a new format message */
        if (!def && bitset(H_RCPT|H_FROM, h->h_flags) &&
 
        /* hack to see if this is a new format message */
        if (!def && bitset(H_RCPT|H_FROM, h->h_flags) &&
@@ -323,14 +366,25 @@ eatheader(e, full)
 
        define('f', e->e_sender, e);
        define('g', e->e_sender, e);
 
        define('f', e->e_sender, e);
        define('g', e->e_sender, e);
+       if (e->e_origrcpt != NULL && *e->e_origrcpt != '\0')
+               define('u', e->e_origrcpt, e);
+       else
+               define('u', NULL, e);
 
        if (tTd(32, 1))
                printf("----- collected header -----\n");
        msgid = "<none>";
        for (h = e->e_header; h != NULL; h = h->h_link)
        {
 
        if (tTd(32, 1))
                printf("----- collected header -----\n");
        msgid = "<none>";
        for (h = e->e_header; h != NULL; h = h->h_link)
        {
+               if (h->h_value == NULL)
+               {
+                       if (tTd(32, 1))
+                               printf("%s: <NULL>\n", h->h_field);
+                       continue;
+               }
+
                /* do early binding */
                /* do early binding */
-               if (bitset(H_DEFAULT, h->h_flags) && h->h_value != NULL)
+               if (bitset(H_DEFAULT, h->h_flags))
                {
                        expand(h->h_value, buf, &buf[sizeof buf], e);
                        if (buf[0] != '\0')
                {
                        expand(h->h_value, buf, &buf[sizeof buf], e);
                        if (buf[0] != '\0')
@@ -352,13 +406,18 @@ eatheader(e, full)
                    !bitset(H_DEFAULT, h->h_flags) &&
                    (!bitset(EF_RESENT, e->e_flags) || bitset(H_RESENT, h->h_flags)))
                {
                    !bitset(H_DEFAULT, h->h_flags) &&
                    (!bitset(EF_RESENT, e->e_flags) || bitset(H_RESENT, h->h_flags)))
                {
-                       (void) sendtolist(h->h_value, (ADDRESS *) NULL,
+                       int saveflags = e->e_flags;
+
+                       (void) sendtolist(h->h_value, NULLADDR,
                                          &e->e_sendqueue, e);
                                          &e->e_sendqueue, e);
+
+                       /* delete fatal errors generated by this address */
+                       if (!GrabTo && !bitset(EF_FATALERRS, saveflags))
+                               e->e_flags &= ~EF_FATALERRS;
                }
 
                /* save the message-id for logging */
                }
 
                /* save the message-id for logging */
-               if (full && h->h_value != NULL &&
-                   strcasecmp(h->h_field, "message-id") == 0)
+               if (full && strcasecmp(h->h_field, "message-id") == 0)
                {
                        msgid = h->h_value;
                        while (isascii(*msgid) && isspace(*msgid))
                {
                        msgid = h->h_value;
                        while (isascii(*msgid) && isspace(*msgid))
@@ -371,7 +430,7 @@ eatheader(e, full)
 
                /* see if this is an errors-to header */
                if (UseErrorsTo && bitset(H_ERRORSTO, h->h_flags))
 
                /* see if this is an errors-to header */
                if (UseErrorsTo && bitset(H_ERRORSTO, h->h_flags))
-                       (void) sendtolist(h->h_value, (ADDRESS *) NULL,
+                       (void) sendtolist(h->h_value, NULLADDR,
                                          &e->e_errorqueue, e);
        }
        if (tTd(32, 1))
                                          &e->e_errorqueue, e);
        }
        if (tTd(32, 1))
@@ -525,6 +584,7 @@ crackaddr(addr)
        bool skipping;
        bool putgmac = FALSE;
        bool quoteit = FALSE;
        bool skipping;
        bool putgmac = FALSE;
        bool quoteit = FALSE;
+       bool gotangle = FALSE;
        register char *bp;
        char *buflim;
        static char buf[MAXNAME];
        register char *bp;
        char *buflim;
        static char buf[MAXNAME];
@@ -629,7 +689,7 @@ crackaddr(addr)
 
 
                /* check for characters that may have to be quoted */
 
 
                /* check for characters that may have to be quoted */
-               if (strchr(".'@,;:\\()", c) != NULL)
+               if (strchr(".'@,;:\\()[]", c) != NULL)
                {
                        /*
                        **  If these occur as the phrase part of a <>
                {
                        /*
                        **  If these occur as the phrase part of a <>
@@ -647,10 +707,15 @@ crackaddr(addr)
                {
                        register char *q;
 
                {
                        register char *q;
 
+                       /* assume first of two angles is bogus */
+                       if (gotangle)
+                               quoteit = TRUE;
+                       gotangle = TRUE;
+
                        /* oops -- have to change our mind */
                        /* oops -- have to change our mind */
-                       anglelev++;
+                       anglelev = 1;
                        if (!skipping)
                        if (!skipping)
-                               realanglelev++;
+                               realanglelev = 1;
 
                        bp = buf;
                        if (quoteit)
 
                        bp = buf;
                        if (quoteit)
@@ -675,7 +740,10 @@ crackaddr(addr)
                        }
                        if (quoteit)
                        {
                        }
                        if (quoteit)
                        {
-                               *bp++ = '"';
+                               if (bp == &buf[1])
+                                       bp--;
+                               else
+                                       *bp++ = '"';
                                while ((c = *p++) != '<')
                                {
                                        if (bp < buflim)
                                while ((c = *p++) != '<')
                                {
                                        if (bp < buflim)
@@ -704,6 +772,7 @@ crackaddr(addr)
                                /* syntax error: unmatched > */
                                if (copylev > 0)
                                        bp--;
                                /* syntax error: unmatched > */
                                if (copylev > 0)
                                        bp--;
+                               quoteit = TRUE;
                                continue;
                        }
                        if (copylev++ <= 0)
                                continue;
                        }
                        if (copylev++ <= 0)
index 877251d..8beb5a7 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)macro.c    8.1 (Berkeley) 6/7/93";
+static char sccsid[] = "@(#)macro.c    8.2 (Berkeley) 7/29/93";
 #endif /* not lint */
 
 # include "sendmail.h"
 #endif /* not lint */
 
 # include "sendmail.h"
@@ -83,7 +83,7 @@ expand(s, buf, buflim, e)
                s = "";
        for (xp = xbuf; *s != '\0'; s++)
        {
                s = "";
        for (xp = xbuf; *s != '\0'; s++)
        {
-               char c;
+               int c;
 
                /*
                **  Check for non-ordinary (special?) character.
 
                /*
                **  Check for non-ordinary (special?) character.
@@ -230,7 +230,7 @@ expand(s, buf, buflim, e)
 
 void
 define(n, v, e)
 
 void
 define(n, v, e)
-       char n;
+       int n;
        char *v;
        register ENVELOPE *e;
 {
        char *v;
        register ENVELOPE *e;
 {
@@ -257,7 +257,7 @@ define(n, v, e)
 
 char *
 macvalue(n, e)
 
 char *
 macvalue(n, e)
-       char n;
+       int n;
        register ENVELOPE *e;
 {
        n &= 0177;
        register ENVELOPE *e;
 {
        n &= 0177;
index f4191ba..5db6935 100644 (file)
@@ -39,13 +39,12 @@ static char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)main.c     8.3 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)main.c     8.33 (Berkeley) 10/24/93";
 #endif /* not lint */
 
 #define        _DEFINE
 
 #include "sendmail.h"
 #endif /* not lint */
 
 #define        _DEFINE
 
 #include "sendmail.h"
-#include <signal.h>
 #include <sgtty.h>
 #ifdef NAMED_BIND
 #include <arpa/nameser.h>
 #include <sgtty.h>
 #ifdef NAMED_BIND
 #include <arpa/nameser.h>
@@ -55,7 +54,7 @@ static char sccsid[] = "@(#)main.c    8.3 (Berkeley) 7/13/93";
 
 # ifdef lint
 char   edata, end;
 
 # ifdef lint
 char   edata, end;
-# endif lint
+# endif /* lint */
 
 /*
 **  SENDMAIL -- Post mail to a set of destinations.
 
 /*
 **  SENDMAIL -- Post mail to a set of destinations.
@@ -96,15 +95,15 @@ ENVELOPE    BlankEnvelope;  /* a "blank" envelope */
 ENVELOPE       MainEnvelope;   /* the envelope around the basic letter */
 ADDRESS                NullAddress =   /* a null address */
                { "", "", NULL, "" };
 ENVELOPE       MainEnvelope;   /* the envelope around the basic letter */
 ADDRESS                NullAddress =   /* a null address */
                { "", "", NULL, "" };
-char           *UserEnviron[MAXUSERENVIRON + 1];
+char           *UserEnviron[MAXUSERENVIRON + 2];
                                /* saved user environment */
 char           RealUserName[256];      /* the actual user id on this host */
                                /* saved user environment */
 char           RealUserName[256];      /* the actual user id on this host */
+char           *CommandLineArgs;       /* command line args for pid file */
+bool           Warn_Q_option = FALSE;  /* warn about Q option use */
 
 /*
 **  Pointers for setproctitle.
 **     This allows "ps" listings to give more useful information.
 
 /*
 **  Pointers for setproctitle.
 **     This allows "ps" listings to give more useful information.
-**     These must be kept out of BSS for frozen configuration files
-**             to work.
 */
 
 # ifdef SETPROCTITLE
 */
 
 # ifdef SETPROCTITLE
@@ -120,7 +119,7 @@ ERROR %%%%   Cannot have daemon mode without SMTP   %%%% ERROR
 #endif /* SMTP */
 #endif /* DAEMON */
 
 #endif /* SMTP */
 #endif /* DAEMON */
 
-#define MAXCONFIGLEVEL 4       /* highest config version level known */
+#define MAXCONFIGLEVEL 5       /* highest config version level known */
 
 main(argc, argv, envp)
        int argc;
 
 main(argc, argv, envp)
        int argc;
@@ -128,7 +127,6 @@ main(argc, argv, envp)
        char **envp;
 {
        register char *p;
        char **envp;
 {
        register char *p;
-       register char *q;
        char **av;
        extern int finis();
        extern char Version[];
        char **av;
        extern int finis();
        extern char Version[];
@@ -137,10 +135,10 @@ main(argc, argv, envp)
        STAB *st;
        register int i;
        int j;
        STAB *st;
        register int i;
        int j;
-       bool readconfig = TRUE;
        bool queuemode = FALSE;         /* process queue requests */
        bool queuemode = FALSE;         /* process queue requests */
-       bool nothaw;
        bool safecf = TRUE;
        bool safecf = TRUE;
+       bool warn_C_flag = FALSE;
+       char warn_f_flag = '\0';
        static bool reenter = FALSE;
        char *argv0 = argv[0];
        struct passwd *pw;
        static bool reenter = FALSE;
        char *argv0 = argv[0];
        struct passwd *pw;
@@ -154,6 +152,7 @@ main(argc, argv, envp)
        extern char **myhostname();
        extern char *arpadate();
        extern char *getauthinfo();
        extern char **myhostname();
        extern char *arpadate();
        extern char *getauthinfo();
+       extern char *getcfname();
        extern char *optarg;
        extern char **environ;
 
        extern char *optarg;
        extern char **environ;
 
@@ -170,10 +169,8 @@ main(argc, argv, envp)
        }
        reenter = TRUE;
 
        }
        reenter = TRUE;
 
-#ifndef SYS5TZ
-       /* enforce use of kernel-supplied time zone information */
-       unsetenv("TZ");
-#endif
+       /* do machine-dependent initializations */
+       init_md();
 
        /* in 4.4BSD, the table can be huge; impose a reasonable limit */
        DtableSize = getdtsize();
 
        /* in 4.4BSD, the table can be huge; impose a reasonable limit */
        DtableSize = getdtsize();
@@ -186,13 +183,14 @@ main(argc, argv, envp)
        */
 
        i = open("/dev/null", O_RDWR);
        */
 
        i = open("/dev/null", O_RDWR);
-       if (fstat(STDIN_FILENO, &stb) < 0)
+       if (fstat(STDIN_FILENO, &stb) < 0 && errno != EOPNOTSUPP)
                (void) dup2(i, STDIN_FILENO);
                (void) dup2(i, STDIN_FILENO);
-       if (fstat(STDOUT_FILENO, &stb) < 0)
+       if (fstat(STDOUT_FILENO, &stb) < 0 && errno != EOPNOTSUPP)
                (void) dup2(i, STDOUT_FILENO);
                (void) dup2(i, STDOUT_FILENO);
-       if (fstat(STDERR_FILENO, &stb) < 0)
+       if (fstat(STDERR_FILENO, &stb) < 0 && errno != EOPNOTSUPP)
                (void) dup2(i, STDERR_FILENO);
                (void) dup2(i, STDERR_FILENO);
-       (void) close(i);
+       if (i != STDIN_FILENO && i != STDOUT_FILENO && i != STDERR_FILENO)
+               (void) close(i);
 
        i = DtableSize;
        while (--i > 0)
 
        i = DtableSize;
        while (--i > 0)
@@ -232,42 +230,40 @@ main(argc, argv, envp)
        else
                (void) sprintf(RealUserName, "Unknown UID %d", RealUid);
 
        else
                (void) sprintf(RealUserName, "Unknown UID %d", RealUid);
 
-       /* our real uid will have to be root -- we will trash this later */
-       setuid((uid_t) 0);
+       /* save command line arguments */
+       i = 0;
+       for (av = argv; *av != NULL; )
+               i += strlen(*av++) + 1;
+       CommandLineArgs = xalloc(i);
+       p = CommandLineArgs;
+       for (av = argv; *av != NULL; )
+       {
+               if (av != argv)
+                       *p++ = ' ';
+               strcpy(p, *av++);
+               p += strlen(p);
+       }
 
        /* Handle any non-getoptable constructions. */
        obsolete(argv);
 
        /*
        **  Do a quick prescan of the argument list.
 
        /* Handle any non-getoptable constructions. */
        obsolete(argv);
 
        /*
        **  Do a quick prescan of the argument list.
-       **      We do this to find out if we can potentially thaw the
-       **      configuration file.  If not, we do the thaw now so that
-       **      the argument processing applies to this run rather than
-       **      to the run that froze the configuration.
        */
        */
-       nothaw = FALSE;
+
 #if defined(__osf__) || defined(_AIX3)
 #if defined(__osf__) || defined(_AIX3)
-#define OPTIONS                "B:b:C:cd:e:F:f:h:Iimno:p:q:r:sTtvX:x"
+# define OPTIONS       "B:b:C:cd:e:F:f:h:Iimno:p:q:r:sTtvX:x"
 #else
 #else
-#define OPTIONS                "B:b:C:cd:e:F:f:h:Iimno:p:q:r:sTtvX:"
+# if defined(ultrix)
+#  define OPTIONS      "B:b:C:cd:e:F:f:h:IiM:mno:p:q:r:sTtvX:"
+# else
+#  define OPTIONS      "B:b:C:cd:e:F:f:h:Iimno:p:q:r:sTtvX:"
+# endif
 #endif
        while ((j = getopt(argc, argv, OPTIONS)) != EOF)
        {
                switch (j)
                {
 #endif
        while ((j = getopt(argc, argv, OPTIONS)) != EOF)
        {
                switch (j)
                {
-                 case 'b':
-                       if (optarg[0] == 'z' && optarg[1] == '\0')
-                               nothaw = TRUE;
-                       break;
-
-                 case 'C':
-                       ConfFile = optarg;
-                       (void) setgid(RealGid);
-                       (void) setuid(RealUid);
-                       safecf = FALSE;
-                       nothaw = TRUE;
-                       break;
-
                  case 'd':
                        tTsetup(tTdvect, sizeof tTdvect, "0-99.1");
                        tTflag(optarg);
                  case 'd':
                        tTsetup(tTdvect, sizeof tTdvect, "0-99.1");
                        tTflag(optarg);
@@ -280,14 +276,6 @@ main(argc, argv, envp)
        InChannel = stdin;
        OutChannel = stdout;
 
        InChannel = stdin;
        OutChannel = stdout;
 
-# ifdef FROZENCONFIG
-       if (!nothaw)
-               readconfig = !thaw(FreezeFile, argv0);
-# else
-       readconfig = TRUE;
-# endif
-
-# ifdef SETPROCTITLE
        /*
        **  Move the environment so setproctitle can use the space at
        **  the top of memory.
        /*
        **  Move the environment so setproctitle can use the space at
        **  the top of memory.
@@ -302,6 +290,7 @@ main(argc, argv, envp)
        UserEnviron[j] = NULL;
        environ = UserEnviron;
 
        UserEnviron[j] = NULL;
        environ = UserEnviron;
 
+# ifdef SETPROCTITLE
        /*
        **  Save start and extent of argv for setproctitle.
        */
        /*
        **  Save start and extent of argv for setproctitle.
        */
@@ -313,12 +302,12 @@ main(argc, argv, envp)
                LastArgv = argv[argc - 1] + strlen(argv[argc - 1]);
 # endif /* SETPROCTITLE */
 
                LastArgv = argv[argc - 1] + strlen(argv[argc - 1]);
 # endif /* SETPROCTITLE */
 
-       if (signal(SIGINT, SIG_IGN) != SIG_IGN)
-               (void) signal(SIGINT, intsig);
-       if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
-               (void) signal(SIGHUP, intsig);
-       (void) signal(SIGTERM, intsig);
-       (void) signal(SIGPIPE, SIG_IGN);
+       if (setsignal(SIGINT, SIG_IGN) != SIG_IGN)
+               (void) setsignal(SIGINT, intsig);
+       if (setsignal(SIGHUP, SIG_IGN) != SIG_IGN)
+               (void) setsignal(SIGHUP, intsig);
+       (void) setsignal(SIGTERM, intsig);
+       (void) setsignal(SIGPIPE, SIG_IGN);
        OldUmask = umask(022);
        OpMode = MD_DELIVER;
        FullName = getenv("NAME");
        OldUmask = umask(022);
        OpMode = MD_DELIVER;
        FullName = getenv("NAME");
@@ -331,14 +320,11 @@ main(argc, argv, envp)
        errno = 0;
        from = NULL;
 
        errno = 0;
        from = NULL;
 
-       if (readconfig)
-       {
-               /* initialize some macros, etc. */
-               initmacros();
+       /* initialize some macros, etc. */
+       initmacros(CurEnv);
 
 
-               /* version */
-               define('v', Version, CurEnv);
-       }
+       /* version */
+       define('v', Version, CurEnv);
 
        /* hostname */
        av = myhostname(jbuf, sizeof jbuf);
 
        /* hostname */
        av = myhostname(jbuf, sizeof jbuf);
@@ -349,16 +335,25 @@ main(argc, argv, envp)
                if (tTd(0, 4))
                        printf("canonical name: %s\n", jbuf);
                p = newstr(jbuf);
                if (tTd(0, 4))
                        printf("canonical name: %s\n", jbuf);
                p = newstr(jbuf);
-               define('w', p, CurEnv);
+               define('w', newstr(jbuf), CurEnv);      /* must be new string */
+               define('j', p, CurEnv);
                setclass('w', p);
 
                setclass('w', p);
 
-               q = strchr(jbuf, '.');
-               if (q != NULL)
+               p = strchr(jbuf, '.');
+               if (p != NULL)
                {
                {
-                       *q++ = '\0';
-                       define('m', q, CurEnv);
-                       p = newstr(jbuf);
-                       setclass('w', p);
+                       if (p[1] != '\0')
+                       {
+                               define('m', newstr(&p[1]), CurEnv);
+                               setclass('m', &p[1]);
+                       }
+                       while (p != NULL && strchr(&p[1], '.') != NULL)
+                       {
+                               *p = '\0';
+                               setclass('w', jbuf);
+                               *p++ = '.';
+                               p = strchr(p, '.');
+                       }
                }
 
                if (uname(&utsname) >= 0)
                }
 
                if (uname(&utsname) >= 0)
@@ -437,18 +432,13 @@ main(argc, argv, envp)
                          case MD_TEST:
                          case MD_INITALIAS:
                          case MD_PRINT:
                          case MD_TEST:
                          case MD_INITALIAS:
                          case MD_PRINT:
-#ifdef FROZENCONFIG
-                         case MD_FREEZE:
-#endif
                                OpMode = j;
                                break;
 
                                OpMode = j;
                                break;
 
-#ifndef FROZENCONFIG
                          case MD_FREEZE:
                                usrerr("Frozen configurations unsupported");
                                ExitStat = EX_USAGE;
                                break;
                          case MD_FREEZE:
                                usrerr("Frozen configurations unsupported");
                                ExitStat = EX_USAGE;
                                break;
-#endif
 
                          default:
                                usrerr("Invalid operation mode %c", j);
 
                          default:
                                usrerr("Invalid operation mode %c", j);
@@ -463,15 +453,14 @@ main(argc, argv, envp)
 
                  case 'C':     /* select configuration file (already done) */
                        if (RealUid != 0)
 
                  case 'C':     /* select configuration file (already done) */
                        if (RealUid != 0)
-                               auth_warning(CurEnv,
-                                       "Processed by %s with -C %s",
-                                       RealUserName, optarg);
+                               warn_C_flag = TRUE;
+                       ConfFile = optarg;
+                       (void) setgid(RealGid);
+                       (void) setuid(RealUid);
+                       safecf = FALSE;
                        break;
 
                        break;
 
-                 case 'd':     /* debugging -- redo in case frozen */
-                       tTsetup(tTdvect, sizeof tTdvect, "0-99.1");
-                       tTflag(optarg);
-                       setbuf(stdout, (char *) NULL);
+                 case 'd':     /* debugging -- already done */
                        break;
 
                  case 'f':     /* from address */
                        break;
 
                  case 'f':     /* from address */
@@ -484,9 +473,7 @@ main(argc, argv, envp)
                        }
                        from = newstr(optarg);
                        if (strcmp(RealUserName, from) != 0)
                        }
                        from = newstr(optarg);
                        if (strcmp(RealUserName, from) != 0)
-                               auth_warning(CurEnv,
-                                       "%s set sender to %s using -%c",
-                                       RealUserName, from, j);
+                               warn_f_flag = j;
                        break;
 
                  case 'F':     /* set full name */
                        break;
 
                  case 'F':     /* set full name */
@@ -512,13 +499,13 @@ main(argc, argv, envp)
                        break;
 
                  case 'p':     /* set protocol */
                        break;
 
                  case 'p':     /* set protocol */
-                       q = strchr(optarg, ':');
-                       if (q != NULL)
-                               *q++ = '\0';
+                       p = strchr(optarg, ':');
+                       if (p != NULL)
+                               *p++ = '\0';
                        if (*optarg != '\0')
                                define('r', newstr(optarg), CurEnv);
                        if (*optarg != '\0')
                                define('r', newstr(optarg), CurEnv);
-                       if (q != NULL && *q != '\0')
-                               define('s', newstr(q), CurEnv);
+                       if (p != NULL && *p != '\0')
+                               define('s', newstr(p), CurEnv);
                        break;
 
                  case 'q':     /* run queue files at intervals */
                        break;
 
                  case 'q':     /* run queue files at intervals */
@@ -563,7 +550,7 @@ main(argc, argv, envp)
                                break;
                        }
 #ifdef HASSETVBUF
                                break;
                        }
 #ifdef HASSETVBUF
-                       setvbuf(TrafficLogFile, NULL, _IOLBF, BUFSIZ);
+                       setvbuf(TrafficLogFile, NULL, _IOLBF, 0);
 #else
                        setlinebuf(TrafficLogFile);
 #endif
 #else
                        setlinebuf(TrafficLogFile);
 #endif
@@ -579,6 +566,9 @@ main(argc, argv, envp)
                        break;
 
                  case 'e':     /* error message disposition */
                        break;
 
                  case 'e':     /* error message disposition */
+# if defined(ultrix)
+                 case 'M':     /* define macro */
+# endif
                        setoption(j, optarg, FALSE, TRUE, CurEnv);
                        break;
 
                        setoption(j, optarg, FALSE, TRUE, CurEnv);
                        break;
 
@@ -611,21 +601,58 @@ main(argc, argv, envp)
        **      Extract special fields for local use.
        */
 
        **      Extract special fields for local use.
        */
 
-       if (OpMode == MD_FREEZE || readconfig)
-               readcf(ConfFile, safecf, CurEnv);
+       readcf(getcfname(), safecf, CurEnv);
+
+       if (tTd(0, 1))
+       {
+               printf("SYSTEM IDENTITY (after readcf):");
+               printf("\n\t    (short domain name) $w = ");
+               xputs(macvalue('w', CurEnv));
+               printf("\n\t(canonical domain name) $j = ");
+               xputs(macvalue('j', CurEnv));
+               printf("\n\t       (subdomain name) $m = ");
+               xputs(macvalue('m', CurEnv));
+               printf("\n\t            (node name) $k = ");
+               xputs(macvalue('k', CurEnv));
+               printf("\n");
+       }
+
+       /*
+       **  Process authorization warnings from command line.
+       */
+
+       if (warn_C_flag)
+               auth_warning(CurEnv, "Processed by %s with -C %s",
+                       RealUserName, ConfFile);
+/*
+       if (warn_f_flag != '\0')
+               auth_warning(CurEnv, "%s set sender to %s using -%c",
+                       RealUserName, from, warn_f_flag);
+*/
+       if (Warn_Q_option)
+               auth_warning(CurEnv, "Processed from queue %s", QueueDir);
 
 
-#ifdef SYS5TZ
        /* Enforce use of local time (null string overrides this) */
        if (TimeZoneSpec == NULL)
                unsetenv("TZ");
        else if (TimeZoneSpec[0] != '\0')
        {
        /* Enforce use of local time (null string overrides this) */
        if (TimeZoneSpec == NULL)
                unsetenv("TZ");
        else if (TimeZoneSpec[0] != '\0')
        {
-               p = xalloc(strlen(TimeZoneSpec) + 4);
-               (void) strcpy(p, "TZ=");
-               (void) strcat(p, TimeZoneSpec);
-               putenv(p);
+               char **evp = UserEnviron;
+               char tzbuf[100];
+
+               strcpy(tzbuf, "TZ=");
+               strcpy(&tzbuf[3], TimeZoneSpec);
+
+               while (*evp != NULL && strncmp(*evp, "TZ=", 3) != 0)
+                       evp++;
+               if (*evp == NULL)
+               {
+                       *evp++ = newstr(tzbuf);
+                       *evp = NULL;
+               }
+               else
+                       *evp++ = newstr(tzbuf);
        }
        }
-#endif
 
        if (ConfigLevel > MAXCONFIGLEVEL)
        {
 
        if (ConfigLevel > MAXCONFIGLEVEL)
        {
@@ -633,9 +660,11 @@ main(argc, argv, envp)
                        ConfigLevel, MAXCONFIGLEVEL);
        }
 
                        ConfigLevel, MAXCONFIGLEVEL);
        }
 
+       if (MeToo)
+               BlankEnvelope.e_flags |= EF_METOO;
 
 # ifdef QUEUE
 
 # ifdef QUEUE
-       if (queuemode && RealUid != 0)
+       if (queuemode && RealUid != 0 && bitset(PRIV_RESTRICTQRUN, PrivacyFlags))
        {
                struct stat stbuf;
 
        {
                struct stat stbuf;
 
@@ -645,7 +674,7 @@ main(argc, argv, envp)
                if (stbuf.st_uid != RealUid)
                {
                        /* nope, really a botch */
                if (stbuf.st_uid != RealUid)
                {
                        /* nope, really a botch */
-                       usrerr("Permission denied");
+                       usrerr("You do not have permission to process the queue");
                        exit (EX_NOPERM);
                }
        }
                        exit (EX_NOPERM);
                }
        }
@@ -653,17 +682,6 @@ main(argc, argv, envp)
 
        switch (OpMode)
        {
 
        switch (OpMode)
        {
-# ifdef FROZENCONFIG
-         case MD_FREEZE:
-               /* this is critical to avoid forgeries of the frozen config */
-               (void) setgid(RealGid);
-               (void) setuid(RealUid);
-
-               /* freeze the configuration */
-               freeze(FreezeFile);
-               exit(EX_OK);
-# endif
-
          case MD_INITALIAS:
                Verbose = TRUE;
                break;
          case MD_INITALIAS:
                Verbose = TRUE;
                break;
@@ -700,6 +718,9 @@ main(argc, argv, envp)
        expand("\201j", jbuf, &jbuf[sizeof jbuf - 1], CurEnv);
        MyHostName = jbuf;
 
        expand("\201j", jbuf, &jbuf[sizeof jbuf - 1], CurEnv);
        MyHostName = jbuf;
 
+       /* make certain that this name is part of the $=w class */
+       setclass('w', MyHostName);
+
        /* the indices of built-in mailers */
        st = stab("local", ST_MAILER, ST_FIND);
        if (st == NULL)
        /* the indices of built-in mailers */
        st = stab("local", ST_MAILER, ST_FIND);
        if (st == NULL)
@@ -727,7 +748,7 @@ main(argc, argv, envp)
 
 
        /* operate in queue directory */
 
 
        /* operate in queue directory */
-       if (chdir(QueueDir) < 0)
+       if (OpMode != MD_TEST && chdir(QueueDir) < 0)
        {
                syserr("cannot chdir(%s)", QueueDir);
                ExitStat = EX_SOFTWARE;
        {
                syserr("cannot chdir(%s)", QueueDir);
                ExitStat = EX_SOFTWARE;
@@ -838,6 +859,7 @@ main(argc, argv, envp)
                        char *q;
                        auto char *delimptr;
                        extern bool invalidaddr();
                        char *q;
                        auto char *delimptr;
                        extern bool invalidaddr();
+                       extern char *crackaddr();
 
                        if (Verbose)
                                printf("> ");
 
                        if (Verbose)
                                printf("> ");
@@ -846,8 +868,20 @@ main(argc, argv, envp)
                                finis();
                        if (!Verbose)
                                printf("> %s", buf);
                                finis();
                        if (!Verbose)
                                printf("> %s", buf);
-                       if (buf[0] == '#')
+                       switch (buf[0])
+                       {
+                         case '#':
                                continue;
                                continue;
+
+#ifdef MAYBENEXTRELEASE
+                         case 'C':             /* try crackaddr */
+                               q = crackaddr(&buf[1]);
+                               xputs(q);
+                               printf("\n");
+                               continue;
+#endif
+                       }
+
                        for (p = buf; isascii(*p) && isspace(*p); p++)
                                continue;
                        q = p;
                        for (p = buf; isascii(*p) && isspace(*p); p++)
                                continue;
                        q = p;
@@ -859,7 +893,7 @@ main(argc, argv, envp)
                                continue;
                        }
                        *p = '\0';
                                continue;
                        }
                        *p = '\0';
-                       if (invalidaddr(p + 1))
+                       if (invalidaddr(p + 1, NULL))
                                continue;
                        do
                        {
                                continue;
                        do
                        {
@@ -919,7 +953,7 @@ main(argc, argv, envp)
                                exit(0);
 
                        /* disconnect from our controlling tty */
                                exit(0);
 
                        /* disconnect from our controlling tty */
-                       disconnect(TRUE, CurEnv);
+                       disconnect(2, CurEnv);
                }
 
                dtype[0] = '\0';
                }
 
                dtype[0] = '\0';
@@ -975,19 +1009,21 @@ main(argc, argv, envp)
                smtp(CurEnv);
 # endif /* SMTP */
 
                smtp(CurEnv);
 # endif /* SMTP */
 
+       if (OpMode == MD_VERIFY)
+       {
+               CurEnv->e_sendmode = SM_VERIFY;
+               CurEnv->e_errormode = EM_QUIET;
+       }
+       else
+       {
+               /* interactive -- all errors are global */
+               CurEnv->e_flags |= EF_GLOBALERRS;
+       }
+
        /*
        **  Do basic system initialization and set the sender
        */
 
        /*
        **  Do basic system initialization and set the sender
        */
 
-       /* make sendmail immune from process group signals */
-# ifdef _POSIX_JOB_CONTROL
-       (void) setpgid(0, getpid());
-# else
-#  ifndef SYSTEM5
-       (void) setpgrp(0, getpid());
-#  endif
-# endif
-
        initsys(CurEnv);
        setsender(from, CurEnv, NULL, FALSE);
        if (macvalue('s', CurEnv) == NULL)
        initsys(CurEnv);
        setsender(from, CurEnv, NULL, FALSE);
        if (macvalue('s', CurEnv) == NULL)
@@ -995,6 +1031,7 @@ main(argc, argv, envp)
 
        if (*av == NULL && !GrabTo)
        {
 
        if (*av == NULL && !GrabTo)
        {
+               CurEnv->e_flags |= EF_GLOBALERRS;
                usrerr("Recipient names must be specified");
 
                /* collect body for UUCP return */
                usrerr("Recipient names must be specified");
 
                /* collect body for UUCP return */
@@ -1002,11 +1039,6 @@ main(argc, argv, envp)
                        collect(FALSE, FALSE, CurEnv);
                finis();
        }
                        collect(FALSE, FALSE, CurEnv);
                finis();
        }
-       if (OpMode == MD_VERIFY)
-       {
-               CurEnv->e_sendmode = SM_VERIFY;
-               CurEnv->e_errormode = EM_QUIET;
-       }
 
        /*
        **  Scan argv and deliver the message to everyone.
 
        /*
        **  Scan argv and deliver the message to everyone.
@@ -1024,13 +1056,12 @@ main(argc, argv, envp)
 
        CurEnv->e_to = NULL;
        if (OpMode != MD_VERIFY || GrabTo)
 
        CurEnv->e_to = NULL;
        if (OpMode != MD_VERIFY || GrabTo)
+       {
+               CurEnv->e_flags |= EF_GLOBALERRS;
                collect(FALSE, FALSE, CurEnv);
                collect(FALSE, FALSE, CurEnv);
+       }
        errno = 0;
 
        errno = 0;
 
-       /* collect statistics */
-       if (OpMode != MD_VERIFY)
-               markstats(CurEnv, (ADDRESS *) NULL);
-
        if (tTd(1, 1))
                printf("From person = \"%s\"\n", CurEnv->e_from.q_paddr);
 
        if (tTd(1, 1))
                printf("From person = \"%s\"\n", CurEnv->e_from.q_paddr);
 
@@ -1071,7 +1102,11 @@ main(argc, argv, envp)
 finis()
 {
        if (tTd(2, 1))
 finis()
 {
        if (tTd(2, 1))
-               printf("\n====finis: stat %d e_flags %o\n", ExitStat, CurEnv->e_flags);
+               printf("\n====finis: stat %d e_flags %o, e_id=%s\n",
+                       ExitStat, CurEnv->e_flags,
+                       CurEnv->e_id == NULL ? "NOQUEUE" : CurEnv->e_id);
+       if (tTd(2, 9))
+               printopenfds(FALSE);
 
        /* clean up temp files */
        CurEnv->e_to = NULL;
 
        /* clean up temp files */
        CurEnv->e_to = NULL;
@@ -1167,7 +1202,8 @@ struct metamac    MetaMacros[] =
        '\0'
 };
 
        '\0'
 };
 
-initmacros()
+initmacros(e)
+       register ENVELOPE *e;
 {
        register struct metamac *m;
        char buf[5];
 {
        register struct metamac *m;
        char buf[5];
@@ -1177,208 +1213,34 @@ initmacros()
        {
                buf[0] = m->metaval;
                buf[1] = '\0';
        {
                buf[0] = m->metaval;
                buf[1] = '\0';
-               define(m->metaname, newstr(buf), CurEnv);
+               define(m->metaname, newstr(buf), e);
        }
        buf[0] = MATCHREPL;
        buf[2] = '\0';
        for (c = '0'; c <= '9'; c++)
        {
                buf[1] = c;
        }
        buf[0] = MATCHREPL;
        buf[2] = '\0';
        for (c = '0'; c <= '9'; c++)
        {
                buf[1] = c;
-               define(c, newstr(buf), CurEnv);
-       }
-}
-\f/*
-**  FREEZE -- freeze BSS & allocated memory
-**
-**     This will be used to efficiently load the configuration file.
-**
-**     Parameters:
-**             freezefile -- the name of the file to freeze to.
-**
-**     Returns:
-**             none.
-**
-**     Side Effects:
-**             Writes BSS and malloc'ed memory to freezefile
-*/
-
-# ifdef FROZENCONFIG
-
-union frz
-{
-       char            frzpad[BUFSIZ]; /* insure we are on a BUFSIZ boundary */
-       struct
-       {
-               time_t  frzstamp;       /* timestamp on this freeze */
-               char    *frzbrk;        /* the current break */
-               char    *frzedata;      /* address of edata */
-               char    *frzend;        /* address of end */
-               char    frzver[252];    /* sendmail version */
-       } frzinfo;
-};
-
-#if defined(__hpux) || defined(__alpha)
-#define BRK_TYPE        int
-#define SBRK_TYPE       void *
-#else
-#define BRK_TYPE        char *
-#define SBRK_TYPE       char *
-#endif
-
-freeze(freezefile)
-       char *freezefile;
-{
-       int f;
-       union frz fhdr;
-       extern SBRK_TYPE sbrk();
-       extern char edata, end;
-       extern char Version[];
-
-       if (freezefile == NULL)
-               return;
-
-       /* try to open the freeze file */
-       f = creat(freezefile, FileMode);
-       if (f < 0)
-       {
-               syserr("Cannot freeze %s", freezefile);
-               errno = 0;
-               return;
-       }
-
-       /* build the freeze header */
-       fhdr.frzinfo.frzstamp = curtime();
-       fhdr.frzinfo.frzbrk = sbrk(0);
-       fhdr.frzinfo.frzedata = &edata;
-       fhdr.frzinfo.frzend = &end;
-       (void) strcpy(fhdr.frzinfo.frzver, Version);
-
-       /* write out the freeze header */
-       if (write(f, (char *) &fhdr, sizeof fhdr) != sizeof fhdr ||
-           write(f, (char *) &edata, (int) (fhdr.frzinfo.frzbrk - &edata)) !=
-                                       (int) (fhdr.frzinfo.frzbrk - &edata))
-       {
-               syserr("Cannot freeze %s", freezefile);
-       }
-
-       /* fine, clean up */
-       (void) close(f);
-}
-\f/*
-**  THAW -- read in the frozen configuration file.
-**
-**     Parameters:
-**             freezefile -- the name of the file to thaw from.
-**             binfile -- the name of the sendmail binary (ok to guess).
-**
-**     Returns:
-**             TRUE if it successfully read the freeze file.
-**             FALSE otherwise.
-**
-**     Side Effects:
-**             reads freezefile in to BSS area.
-*/
-
-thaw(freezefile, binfile)
-       char *freezefile;
-       char *binfile;
-{
-       int f;
-       register char *p;
-       union frz fhdr;
-       char hbuf[60];
-       struct stat fst, sst;
-       extern char edata, end;
-       extern char Version[];
-       extern char **myhostname();
-       extern BRK_TYPE brk();
-
-       if (freezefile == NULL)
-               return (FALSE);
-
-       /* open the freeze file */
-       f = open(freezefile, 0);
-       if (f < 0)
-       {
-               errno = 0;
-               return (FALSE);
-       }
-
-       if (fstat(f, &fst) < 0 || stat(ConfFile, &sst) < 0 ||
-           fst.st_mtime < sst.st_mtime)
-       {
-               syslog(LOG_WARNING, "Freeze file older than config file");
-               (void) close(f);
-               return (FALSE);
-       }
-
-       if (strchr(binfile, '/') != NULL && stat(binfile, &sst) == 0 &&
-           fst.st_mtime < sst.st_mtime)
-       {
-               syslog(LOG_WARNING, "Freeze file older than binary file");
-               (void) close(f);
-               return (FALSE);
-       }
-
-       /* read in the header */
-       if (read(f, (char *) &fhdr, sizeof fhdr) < sizeof fhdr)
-       {
-               syslog(LOG_WARNING, "Cannot read frozen config file");
-               (void) close(f);
-               return (FALSE);
-       }
-       if (fhdr.frzinfo.frzedata != &edata ||
-           fhdr.frzinfo.frzend != &end ||
-           strcmp(fhdr.frzinfo.frzver, Version) != 0)
-       {
-               fprintf(stderr, "Wrong version of frozen config file\n");
-               syslog(LOG_WARNING, "Wrong version of frozen config file");
-               (void) close(f);
-               return (FALSE);
-       }
-
-       /* arrange to have enough space */
-       if (brk(fhdr.frzinfo.frzbrk) == (BRK_TYPE) -1)
-       {
-               syserr("Cannot break to %x", fhdr.frzinfo.frzbrk);
-               (void) close(f);
-               return (FALSE);
-       }
-
-       /* now read in the freeze file */
-       if (read(f, (char *) &edata, (int) (fhdr.frzinfo.frzbrk - &edata)) !=
-                                       (int) (fhdr.frzinfo.frzbrk - &edata))
-       {
-               syserr("Cannot read frozen config file");
-               /* oops!  we have trashed memory..... */
-               (void) write(2, "Cannot read freeze file\n", 24);
-               _exit(EX_SOFTWARE);
+               define(c, newstr(buf), e);
        }
 
        }
 
-       (void) close(f);
-
-       /* verify that the host name was correct on the freeze */
-       (void) myhostname(hbuf, sizeof hbuf);
-       p = macvalue('w', CurEnv);
-       if (p == NULL)
-               p = "";
-       if (strcmp(hbuf, macvalue('w', CurEnv)) == 0)
-               return (TRUE);
-       syslog(LOG_WARNING, "Hostname changed since freeze (%s => %s)",
-               p, hbuf);
-       return (FALSE);
+       /* set defaults for some macros sendmail will use later */
+       define('e', "\201j Sendmail \201v ready at \201b", e);
+       define('l', "From \201g  \201d", e);
+       define('n', "MAILER-DAEMON", e);
+       define('o', ".:@[]", e);
+       define('q', "<\201g>", e);
 }
 }
-
-# endif /* FROZENCONFIG */
 \f/*
 **  DISCONNECT -- remove our connection with any foreground process
 **
 **     Parameters:
 \f/*
 **  DISCONNECT -- remove our connection with any foreground process
 **
 **     Parameters:
-**             fulldrop -- if set, we should also drop the controlling
-**                     TTY if possible -- this should only be done when
-**                     setting up the daemon since otherwise UUCP can
-**                     leave us trying to open a dialin, and we will
-**                     wait for the carrier.
+**             droplev -- how "deeply" we should drop the line.
+**                     0 -- ignore signals, mail back errors, make sure
+**                          output goes to stdout.
+**                     1 -- also, make stdout go to transcript.
+**                     2 -- also, disconnect from controlling terminal
+**                          (only for daemon mode).
+**             e -- the current envelope.
 **
 **     Returns:
 **             none
 **
 **     Returns:
 **             none
@@ -1388,8 +1250,8 @@ thaw(freezefile, binfile)
 **             the controlling tty.
 */
 
 **             the controlling tty.
 */
 
-disconnect(fulldrop, e)
-       bool fulldrop;
+disconnect(droplev, e)
+       int droplev;
        register ENVELOPE *e;
 {
        int fd;
        register ENVELOPE *e;
 {
        int fd;
@@ -1404,9 +1266,9 @@ disconnect(fulldrop, e)
        }
 
        /* be sure we don't get nasty signals */
        }
 
        /* be sure we don't get nasty signals */
-       (void) signal(SIGHUP, SIG_IGN);
-       (void) signal(SIGINT, SIG_IGN);
-       (void) signal(SIGQUIT, SIG_IGN);
+       (void) setsignal(SIGHUP, SIG_IGN);
+       (void) setsignal(SIGINT, SIG_IGN);
+       (void) setsignal(SIGQUIT, SIG_IGN);
 
        /* we can't communicate with our caller, so.... */
        HoldErrs = TRUE;
 
        /* we can't communicate with our caller, so.... */
        HoldErrs = TRUE;
@@ -1427,32 +1289,30 @@ disconnect(fulldrop, e)
                (void) fclose(OutChannel);
                OutChannel = stdout;
        }
                (void) fclose(OutChannel);
                OutChannel = stdout;
        }
-       if (e->e_xfp == NULL)
-               fd = open("/dev/null", O_WRONLY, 0666);
-       else
-               fd = fileno(e->e_xfp);
-       (void) fflush(stdout);
-       dup2(fd, STDOUT_FILENO);
-       dup2(fd, STDERR_FILENO);
-       if (e->e_xfp == NULL)
-               close(fd);
+       if (droplev > 0)
+       {
+               if (e->e_xfp == NULL)
+                       fd = open("/dev/null", O_WRONLY, 0666);
+               else
+                       fd = fileno(e->e_xfp);
+               (void) fflush(stdout);
+               dup2(fd, STDOUT_FILENO);
+               dup2(fd, STDERR_FILENO);
+               if (e->e_xfp == NULL)
+                       close(fd);
+       }
 
        /* drop our controlling TTY completely if possible */
 
        /* drop our controlling TTY completely if possible */
-       if (fulldrop)
+       if (droplev > 1)
        {
                (void) setsid();
        {
                (void) setsid();
-#ifdef TIOCNOTTY
-               fd = open("/dev/tty", 2);
-               if (fd >= 0)
-               {
-                       (void) ioctl(fd, (int) TIOCNOTTY, (char *) 0);
-                       (void) close(fd);
-               }
-               (void) setpgrp(0, 0);
-#endif /* TIOCNOTTY */
                errno = 0;
        }
 
                errno = 0;
        }
 
+#ifdef XDEBUG
+       checkfd012("disconnect");
+#endif
+
 # ifdef LOG
        if (LogLevel > 71)
                syslog(LOG_DEBUG, "in background, pid=%d", getpid());
 # ifdef LOG
        if (LogLevel > 71)
                syslog(LOG_DEBUG, "in background, pid=%d", getpid());
index bfa2dc0..0ee24f8 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)map.c      8.2 (Berkeley) 7/11/93";
+static char sccsid[] = "@(#)map.c      8.17 (Berkeley) 10/15/93";
 #endif /* not lint */
 
 #include "sendmail.h"
 #endif /* not lint */
 
 #include "sendmail.h"
@@ -85,6 +85,8 @@ static char sccsid[] = "@(#)map.c     8.2 (Berkeley) 7/11/93";
 */
 
 #define DBMMODE                0644
 */
 
 #define DBMMODE                0644
+
+extern bool    aliaswait __P((MAP *, char *, int));
 \f/*
 **  MAP_PARSEARGS -- parse config line arguments for database lookup
 **
 \f/*
 **  MAP_PARSEARGS -- parse config line arguments for database lookup
 **
@@ -247,8 +249,7 @@ map_rewrite(map, s, slen, av)
                        c = *bp++;
                        if (!(isascii(c) && isdigit(c)))
                                continue;
                        c = *bp++;
                        if (!(isascii(c) && isdigit(c)))
                                continue;
-                       c -= 0;
-                       for (avp = av; --c >= 0 && *avp != NULL; avp++)
+                       for (avp = av; --c >= '0' && *avp != NULL; avp++)
                                continue;
                        if (*avp == NULL)
                                continue;
                                continue;
                        if (*avp == NULL)
                                continue;
@@ -291,8 +292,7 @@ map_rewrite(map, s, slen, av)
                                *bp++ = '%';
                                goto pushc;
                        }
                                *bp++ = '%';
                                goto pushc;
                        }
-                       c -= '0';
-                       for (avp = av; --c >= 0 && *avp != NULL; avp++)
+                       for (avp = av; --c >= '0' && *avp != NULL; avp++)
                                continue;
                        if (*avp == NULL)
                                continue;
                                continue;
                        if (*avp == NULL)
                                continue;
@@ -332,8 +332,14 @@ initmaps(rebuild, e)
 {
        extern void map_init();
 
 {
        extern void map_init();
 
+#ifdef XDEBUG
+       checkfd012("entering initmaps");
+#endif
        CurEnv = e;
        stabapply(map_init, rebuild);
        CurEnv = e;
        stabapply(map_init, rebuild);
+#ifdef XDEBUG
+       checkfd012("exiting initmaps");
+#endif
 }
 
 void
 }
 
 void
@@ -353,7 +359,9 @@ map_init(s, rebuild)
 
        if (tTd(38, 2))
                printf("map_init(%s:%s)\n",
 
        if (tTd(38, 2))
                printf("map_init(%s:%s)\n",
-                       map->map_class->map_cname, map->map_file);
+                       map->map_class->map_cname == NULL ? "NULL" :
+                               map->map_class->map_cname,
+                       map->map_file == NULL ? "NULL" : map->map_file);
 
        /* if already open, close it (for nested open) */
        if (bitset(MF_OPEN, map->map_mflags))
 
        /* if already open, close it (for nested open) */
        if (bitset(MF_OPEN, map->map_mflags))
@@ -374,14 +382,18 @@ map_init(s, rebuild)
                {
                        if (tTd(38, 4))
                                printf("%s:%s: valid\n",
                {
                        if (tTd(38, 4))
                                printf("%s:%s: valid\n",
-                                       map->map_class->map_cname,
-                                       map->map_file);
+                                       map->map_class->map_cname == NULL ? "NULL" :
+                                               map->map_class->map_cname,
+                                       map->map_file == NULL ? "NULL" :
+                                               map->map_file);
                        map->map_mflags |= MF_OPEN;
                }
                else if (tTd(38, 4))
                        printf("%s:%s: invalid: %s\n",
                        map->map_mflags |= MF_OPEN;
                }
                else if (tTd(38, 4))
                        printf("%s:%s: invalid: %s\n",
-                               map->map_class->map_cname,
-                               map->map_file,
+                               map->map_class->map_cname == NULL ? "NULL" :
+                                       map->map_class->map_cname,
+                               map->map_file == NULL ? "NULL" :
+                                       map->map_file,
                                errstring(errno));
        }
 }
                                errstring(errno));
        }
 }
@@ -400,7 +412,8 @@ ndbm_map_open(map, mode)
        MAP *map;
        int mode;
 {
        MAP *map;
        int mode;
 {
-       DBM *dbm;
+       register DBM *dbm;
+       struct stat st;
 
        if (tTd(38, 2))
                printf("ndbm_map_open(%s, %d)\n", map->map_file, mode);
 
        if (tTd(38, 2))
                printf("ndbm_map_open(%s, %d)\n", map->map_file, mode);
@@ -412,13 +425,20 @@ ndbm_map_open(map, mode)
        dbm = dbm_open(map->map_file, mode, DBMMODE);
        if (dbm == NULL)
        {
        dbm = dbm_open(map->map_file, mode, DBMMODE);
        if (dbm == NULL)
        {
+#ifdef MAYBENEXTRELEASE
+               if (aliaswait(map, ".pag", FALSE))
+                       return TRUE;
+#endif
                if (!bitset(MF_OPTIONAL, map->map_mflags))
                        syserr("Cannot open DBM database %s", map->map_file);
                return FALSE;
        }
        map->map_db1 = (void *) dbm;
        if (mode == O_RDONLY && bitset(MF_ALIAS, map->map_mflags))
                if (!bitset(MF_OPTIONAL, map->map_mflags))
                        syserr("Cannot open DBM database %s", map->map_file);
                return FALSE;
        }
        map->map_db1 = (void *) dbm;
        if (mode == O_RDONLY && bitset(MF_ALIAS, map->map_mflags))
-               aliaswait(map, ".pag");
+               if (!aliaswait(map, ".pag", TRUE))
+                       return FALSE;
+       if (fstat(dbm_dirfno((DBM *) map->map_db1), &st) >= 0)
+               map->map_mtime = st.st_mtime;
        return TRUE;
 }
 
        return TRUE;
 }
 
@@ -435,6 +455,7 @@ ndbm_map_lookup(map, name, av, statp)
        int *statp;
 {
        datum key, val;
        int *statp;
 {
        datum key, val;
+       int fd;
        char keybuf[MAXNAME + 1];
 
        if (tTd(38, 20))
        char keybuf[MAXNAME + 1];
 
        if (tTd(38, 20))
@@ -450,7 +471,9 @@ ndbm_map_lookup(map, name, av, statp)
                makelower(keybuf);
                key.dptr = keybuf;
        }
                makelower(keybuf);
                key.dptr = keybuf;
        }
-       (void) lockfile(dbm_dirfno((DBM *) map->map_db1), map->map_file, LOCK_SH);
+       fd = dbm_dirfno((DBM *) map->map_db1);
+       if (fd >= 0 && !bitset(MF_LOCKED, map->map_mflags))
+               (void) lockfile(fd, map->map_file, ".dir", LOCK_SH);
        val.dptr = NULL;
        if (bitset(MF_TRY0NULL, map->map_mflags))
        {
        val.dptr = NULL;
        if (bitset(MF_TRY0NULL, map->map_mflags))
        {
@@ -465,7 +488,8 @@ ndbm_map_lookup(map, name, av, statp)
                if (val.dptr != NULL)
                        map->map_mflags &= ~MF_TRY0NULL;
        }
                if (val.dptr != NULL)
                        map->map_mflags &= ~MF_TRY0NULL;
        }
-       (void) lockfile(dbm_dirfno((DBM *) map->map_db1), map->map_file, LOCK_UN);
+       if (fd >= 0 && !bitset(MF_LOCKED, map->map_mflags))
+               (void) lockfile(fd, map->map_file, ".dir", LOCK_UN);
        if (val.dptr == NULL)
                return NULL;
        if (bitset(MF_MATCHONLY, map->map_mflags))
        if (val.dptr == NULL)
                return NULL;
        if (bitset(MF_MATCHONLY, map->map_mflags))
@@ -525,14 +549,21 @@ ndbm_map_close(map)
 {
        if (bitset(MF_WRITABLE, map->map_mflags))
        {
 {
        if (bitset(MF_WRITABLE, map->map_mflags))
        {
-#ifdef YPCOMPAT
+#ifdef NIS
+               bool inclnull;
                char buf[200];
 
                char buf[200];
 
+               inclnull = bitset(MF_INCLNULL, map->map_mflags);
+               map->map_mflags &= ~MF_INCLNULL;
+
                (void) sprintf(buf, "%010ld", curtime());
                ndbm_map_store(map, "YP_LAST_MODIFIED", buf);
 
                (void) myhostname(buf, sizeof buf);
                ndbm_map_store(map, "YP_MASTER_NAME", buf);
                (void) sprintf(buf, "%010ld", curtime());
                ndbm_map_store(map, "YP_LAST_MODIFIED", buf);
 
                (void) myhostname(buf, sizeof buf);
                ndbm_map_store(map, "YP_MASTER_NAME", buf);
+
+               if (inclnull)
+                       map->map_mflags |= MF_INCLNULL;
 #endif
 
                /* write out the distinguished alias */
 #endif
 
                /* write out the distinguished alias */
@@ -568,6 +599,8 @@ bt_map_open(map, mode)
        DB *db;
        int i;
        int omode;
        DB *db;
        int i;
        int omode;
+       int fd;
+       struct stat st;
        char buf[MAXNAME];
 
        if (tTd(38, 2))
        char buf[MAXNAME];
 
        if (tTd(38, 2))
@@ -577,7 +610,7 @@ bt_map_open(map, mode)
        if (omode == O_RDWR)
        {
                omode |= O_CREAT|O_TRUNC;
        if (omode == O_RDWR)
        {
                omode |= O_CREAT|O_TRUNC;
-#if defined(O_EXLOCK) && !defined(LOCKF)
+#if defined(O_EXLOCK) && defined(HASFLOCK)
                omode |= O_EXLOCK;
 # if !defined(OLD_NEWDB)
        }
                omode |= O_EXLOCK;
 # if !defined(OLD_NEWDB)
        }
@@ -595,27 +628,45 @@ bt_map_open(map, mode)
        db = dbopen(buf, omode, DBMMODE, DB_BTREE, NULL);
        if (db == NULL)
        {
        db = dbopen(buf, omode, DBMMODE, DB_BTREE, NULL);
        if (db == NULL)
        {
+#ifdef MAYBENEXTRELEASE
+               if (aliaswait(map, ".db", FALSE))
+                       return TRUE;
+#endif
                if (!bitset(MF_OPTIONAL, map->map_mflags))
                        syserr("Cannot open BTREE database %s", map->map_file);
                return FALSE;
        }
                if (!bitset(MF_OPTIONAL, map->map_mflags))
                        syserr("Cannot open BTREE database %s", map->map_file);
                return FALSE;
        }
-#if !defined(OLD_NEWDB) && !defined(LOCKF)
+#if !defined(OLD_NEWDB) && defined(HASFLOCK)
+       fd = db->fd(db);
 # if !defined(O_EXLOCK)
 # if !defined(O_EXLOCK)
-       if (mode == O_RDWR)
-               (void) lockfile(db->fd(db), map->map_file, LOCK_EX);
+       if (mode == O_RDWR && fd >= 0)
+       {
+               if (lockfile(fd, map->map_file, ".db", LOCK_EX))
+                       map->map_mflags |= MF_LOCKED;
+       }
 # else
 # else
-       if (mode == O_RDONLY)
-               (void) lockfile(db->fd(db), map->map_file, LOCK_UN);
+       if (mode == O_RDONLY && fd >= 0)
+               (void) lockfile(fd, map->map_file, ".db", LOCK_UN);
+       else
+               map->map_mflags |= MF_LOCKED;
 # endif
 #endif
 
        /* try to make sure that at least the database header is on disk */
        if (mode == O_RDWR)
 # endif
 #endif
 
        /* try to make sure that at least the database header is on disk */
        if (mode == O_RDWR)
+#ifdef OLD_NEWDB
+               (void) db->sync(db);
+#else
                (void) db->sync(db, 0);
 
                (void) db->sync(db, 0);
 
+       if (fd >= 0 && fstat(fd, &st) >= 0)
+               map->map_mtime = st.st_mtime;
+#endif
+
        map->map_db2 = (void *) db;
        if (mode == O_RDONLY && bitset(MF_ALIAS, map->map_mflags))
        map->map_db2 = (void *) db;
        if (mode == O_RDONLY && bitset(MF_ALIAS, map->map_mflags))
-               aliaswait(map, ".db");
+               if (!aliaswait(map, ".db", TRUE))
+                       return FALSE;
        return TRUE;
 }
 
        return TRUE;
 }
 
@@ -632,6 +683,8 @@ hash_map_open(map, mode)
        DB *db;
        int i;
        int omode;
        DB *db;
        int i;
        int omode;
+       int fd;
+       struct stat st;
        char buf[MAXNAME];
 
        if (tTd(38, 2))
        char buf[MAXNAME];
 
        if (tTd(38, 2))
@@ -641,7 +694,7 @@ hash_map_open(map, mode)
        if (omode == O_RDWR)
        {
                omode |= O_CREAT|O_TRUNC;
        if (omode == O_RDWR)
        {
                omode |= O_CREAT|O_TRUNC;
-#if defined(O_EXLOCK) && !defined(LOCKF)
+#if defined(O_EXLOCK) && defined(HASFLOCK)
                omode |= O_EXLOCK;
 # if !defined(OLD_NEWDB)
        }
                omode |= O_EXLOCK;
 # if !defined(OLD_NEWDB)
        }
@@ -659,27 +712,45 @@ hash_map_open(map, mode)
        db = dbopen(buf, omode, DBMMODE, DB_HASH, NULL);
        if (db == NULL)
        {
        db = dbopen(buf, omode, DBMMODE, DB_HASH, NULL);
        if (db == NULL)
        {
+#ifdef MAYBENEXTRELEASE
+               if (aliaswait(map, ".db", FALSE))
+                       return TRUE;
+#endif
                if (!bitset(MF_OPTIONAL, map->map_mflags))
                        syserr("Cannot open HASH database %s", map->map_file);
                return FALSE;
        }
                if (!bitset(MF_OPTIONAL, map->map_mflags))
                        syserr("Cannot open HASH database %s", map->map_file);
                return FALSE;
        }
-#if !defined(OLD_NEWDB) && !defined(LOCKF)
+#if !defined(OLD_NEWDB) && defined(HASFLOCK)
+       fd = db->fd(db);
 # if !defined(O_EXLOCK)
 # if !defined(O_EXLOCK)
-       if (mode == O_RDWR)
-               (void) lockfile(db->fd(db), map->map_file, LOCK_EX);
+       if (mode == O_RDWR && fd >= 0)
+       {
+               if (lockfile(fd, map->map_file, ".db", LOCK_EX))
+                       map->map_mflags |= MF_LOCKED;
+       }
 # else
 # else
-       if (mode == O_RDONLY)
-               (void) lockfile(db->fd(db), map->map_file, LOCK_UN);
+       if (mode == O_RDONLY && fd >= 0)
+               (void) lockfile(fd, map->map_file, ".db", LOCK_UN);
+       else
+               map->map_mflags |= MF_LOCKED;
 # endif
 #endif
 
        /* try to make sure that at least the database header is on disk */
        if (mode == O_RDWR)
 # endif
 #endif
 
        /* try to make sure that at least the database header is on disk */
        if (mode == O_RDWR)
+#ifdef OLD_NEWDB
+               (void) db->sync(db);
+#else
                (void) db->sync(db, 0);
 
                (void) db->sync(db, 0);
 
+       if (fd >= 0 && fstat(fd, &st) >= 0)
+               map->map_mtime = st.st_mtime;
+#endif
+
        map->map_db2 = (void *) db;
        if (mode == O_RDONLY && bitset(MF_ALIAS, map->map_mflags))
        map->map_db2 = (void *) db;
        if (mode == O_RDONLY && bitset(MF_ALIAS, map->map_mflags))
-               aliaswait(map, ".db");
+               if (!aliaswait(map, ".db", TRUE))
+                       return FALSE;
        return TRUE;
 }
 
        return TRUE;
 }
 
@@ -699,6 +770,7 @@ db_map_lookup(map, name, av, statp)
        register DB *db = (DB *) map->map_db2;
        int st;
        int saveerrno;
        register DB *db = (DB *) map->map_db2;
        int st;
        int saveerrno;
+       int fd;
        char keybuf[MAXNAME + 1];
 
        if (tTd(38, 20))
        char keybuf[MAXNAME + 1];
 
        if (tTd(38, 20))
@@ -712,7 +784,9 @@ db_map_lookup(map, name, av, statp)
        if (!bitset(MF_NOFOLDCASE, map->map_mflags))
                makelower(keybuf);
 #ifndef OLD_NEWDB
        if (!bitset(MF_NOFOLDCASE, map->map_mflags))
                makelower(keybuf);
 #ifndef OLD_NEWDB
-       (void) lockfile(db->fd(db), map->map_file, LOCK_SH);
+       fd = db->fd(db);
+       if (fd >= 0 && !bitset(MF_LOCKED, map->map_mflags))
+               (void) lockfile(db->fd(db), map->map_file, ".db", LOCK_SH);
 #endif
        st = 1;
        if (bitset(MF_TRY0NULL, map->map_mflags))
 #endif
        st = 1;
        if (bitset(MF_TRY0NULL, map->map_mflags))
@@ -730,7 +804,8 @@ db_map_lookup(map, name, av, statp)
        }
        saveerrno = errno;
 #ifndef OLD_NEWDB
        }
        saveerrno = errno;
 #ifndef OLD_NEWDB
-       (void) lockfile(db->fd(db), map->map_file, LOCK_UN);
+       if (fd >= 0 && !bitset(MF_LOCKED, map->map_mflags))
+               (void) lockfile(fd, map->map_file, ".db", LOCK_UN);
 #endif
        if (st != 0)
        {
 #endif
        if (st != 0)
        {
@@ -817,6 +892,10 @@ db_map_close(map)
 
 # ifdef NIS
 
 
 # ifdef NIS
 
+# ifndef YPERR_BUSY
+#  define YPERR_BUSY   16
+# endif
+
 /*
 **  NIS_MAP_OPEN -- open DBM map
 */
 /*
 **  NIS_MAP_OPEN -- open DBM map
 */
@@ -837,7 +916,16 @@ nis_map_open(map, mode)
 
        if (mode != O_RDONLY)
        {
 
        if (mode != O_RDONLY)
        {
-               errno = ENODEV;
+               /* issue a pseudo-error message */
+#ifdef ENOSYS
+               errno = ENOSYS;
+#else
+# ifdef EFTYPE
+               errno = EFTYPE;
+# else
+               errno = ENXIO;
+# endif
+#endif
                return FALSE;
        }
 
                return FALSE;
        }
 
@@ -1012,6 +1100,9 @@ stab_map_open(map, mode)
        register MAP *map;
        int mode;
 {
        register MAP *map;
        int mode;
 {
+       FILE *af;
+       struct stat st;
+
        if (tTd(38, 2))
                printf("stab_map_open(%s)\n", map->map_file);
 
        if (tTd(38, 2))
                printf("stab_map_open(%s)\n", map->map_file);
 
@@ -1021,12 +1112,23 @@ stab_map_open(map, mode)
                return FALSE;
        }
 
                return FALSE;
        }
 
+       af = fopen(map->map_file, "r");
+       if (af == NULL)
+               return FALSE;
+       readaliases(map, af, TRUE);
+
+       if (fstat(fileno(af), &st) >= 0)
+               map->map_mtime = st.st_mtime;
+       fclose(af);
+
        return TRUE;
 }
 
 
 /*
        return TRUE;
 }
 
 
 /*
-**  STAB_MAP_CLOSE -- close symbol table (???)
+**  STAB_MAP_CLOSE -- close symbol table.
+**
+**     Since this is in memory, there is nothing to do.
 */
 
 void
 */
 
 void
@@ -1100,11 +1202,13 @@ impl_map_open(map, mode)
        struct stat stb;
 
        if (tTd(38, 2))
        struct stat stb;
 
        if (tTd(38, 2))
-               printf("impl_map_open(%s)\n", map->map_file);
+               printf("impl_map_open(%s, %d)\n", map->map_file, mode);
 
        if (stat(map->map_file, &stb) < 0)
        {
                /* no alias file at all */
 
        if (stat(map->map_file, &stb) < 0)
        {
                /* no alias file at all */
+               if (tTd(38, 3))
+                       printf("no map file\n");
                return FALSE;
        }
 
                return FALSE;
        }
 
@@ -1112,7 +1216,7 @@ impl_map_open(map, mode)
        map->map_mflags |= MF_IMPL_HASH;
        if (hash_map_open(map, mode))
        {
        map->map_mflags |= MF_IMPL_HASH;
        if (hash_map_open(map, mode))
        {
-#if defined(NDBM) && defined(YPCOMPAT)
+#if defined(NDBM) && defined(NIS)
                if (mode == O_RDONLY || access("/var/yp/Makefile", R_OK) != 0)
 #endif
                        return TRUE;
                if (mode == O_RDONLY || access("/var/yp/Makefile", R_OK) != 0)
 #endif
                        return TRUE;
@@ -1130,7 +1234,7 @@ impl_map_open(map, mode)
                map->map_mflags &= ~MF_IMPL_NDBM;
 #endif
 
                map->map_mflags &= ~MF_IMPL_NDBM;
 #endif
 
-#if !defined(NEWDB) && !defined(NDBM)
+#if defined(NEWDB) || defined(NDBM)
        if (Verbose)
                message("WARNING: cannot open alias database %s", map->map_file);
 #endif
        if (Verbose)
                message("WARNING: cannot open alias database %s", map->map_file);
 #endif
index 0d55a66..46f8c95 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)mci.c      8.2 (Berkeley) 7/11/93";
+static char sccsid[] = "@(#)mci.c      8.6 (Berkeley) 10/23/93";
 #endif /* not lint */
 
 #include "sendmail.h"
 #endif /* not lint */
 
 #include "sendmail.h"
@@ -104,6 +104,16 @@ mci_cache(mci)
        if (*mcislot != NULL)
                mci_uncache(mcislot, TRUE);
 
        if (*mcislot != NULL)
                mci_uncache(mcislot, TRUE);
 
+       if (tTd(42, 5))
+               printf("mci_cache: caching %x (%s) in slot %d\n",
+                       mci, mci->mci_host, mcislot - MciCache);
+#ifdef LOG
+       if (tTd(91, 100))
+               syslog(LOG_DEBUG, "%s: mci_cache: caching %x (%s) in slot %d",
+                       CurEnv->e_id ? CurEnv->e_id : "NOQUEUE",
+                       mci, mci->mci_host, mcislot - MciCache);
+#endif
+
        *mcislot = mci;
        mci->mci_flags |= MCIF_CACHED;
 }
        *mcislot = mci;
        mci->mci_flags |= MCIF_CACHED;
 }
@@ -185,6 +195,16 @@ mci_uncache(mcislot, doquit)
                return;
        *mcislot = NULL;
 
                return;
        *mcislot = NULL;
 
+       if (tTd(42, 5))
+               printf("mci_uncache: uncaching %x (%s) from slot %d (%d)\n",
+                       mci, mci->mci_host, mcislot - MciCache, doquit);
+#ifdef LOG
+       if (tTd(91, 100))
+               syslog(LOG_DEBUG, "%s: mci_uncache: uncaching %x (%s) from slot %d (%d)",
+                       CurEnv->e_id ? CurEnv->e_id : "NOQUEUE",
+                       mci, mci->mci_host, mcislot - MciCache, doquit);
+#endif
+
        if (doquit)
        {
                message("Closing connection to %s", mci->mci_host);
        if (doquit)
        {
                message("Closing connection to %s", mci->mci_host);
@@ -253,7 +273,7 @@ mci_get(host, m)
 
        /* clear CurHostAddr so we don't get a bogus address with this name */
        bzero(&CurHostAddr, sizeof CurHostAddr);
 
        /* clear CurHostAddr so we don't get a bogus address with this name */
        bzero(&CurHostAddr, sizeof CurHostAddr);
-#endif DAEMON
+#endif
 
        s = stab(host, ST_MCI + m->m_mno, ST_ENTER);
        mci = &s->s_mci;
 
        s = stab(host, ST_MCI + m->m_mno, ST_ENTER);
        mci = &s->s_mci;
@@ -295,25 +315,59 @@ mci_get(host, m)
 **             none.
 */
 
 **             none.
 */
 
-mci_dump(mci)
+mci_dump(mci, logit)
        register MCI *mci;
        register MCI *mci;
+       bool logit;
 {
 {
+       register char *p;
+       char *sep;
+       char buf[1000];
        extern char *ctime();
 
        extern char *ctime();
 
-       printf("MCI@%x: ", mci);
+       sep = logit ? " " : "\n\t";
+       p = buf;
+       sprintf(p, "MCI@%x: ", mci);
+       p += strlen(p);
        if (mci == NULL)
        {
        if (mci == NULL)
        {
-               printf("NULL\n");
-               return;
+               sprintf(p, "NULL");
+               goto printit;
        }
        }
-       printf("flags=%o, errno=%d, herrno=%d, exitstat=%d, state=%d, pid=%d,\n",
+       sprintf(p, "flags=%o, errno=%d, herrno=%d, exitstat=%d, state=%d, pid=%d,%s",
                mci->mci_flags, mci->mci_errno, mci->mci_herrno,
                mci->mci_flags, mci->mci_errno, mci->mci_herrno,
-               mci->mci_exitstat, mci->mci_state, mci->mci_pid);
-       printf("\tmaxsize=%ld, phase=%s, mailer=%s,\n",
+               mci->mci_exitstat, mci->mci_state, mci->mci_pid, sep);
+       p += strlen(p);
+       sprintf(p, "maxsize=%ld, phase=%s, mailer=%s,%s",
                mci->mci_maxsize,
                mci->mci_phase == NULL ? "NULL" : mci->mci_phase,
                mci->mci_maxsize,
                mci->mci_phase == NULL ? "NULL" : mci->mci_phase,
-               mci->mci_mailer == NULL ? "NULL" : mci->mci_mailer->m_name);
-       printf("\thost=%s, lastuse=%s\n",
+               mci->mci_mailer == NULL ? "NULL" : mci->mci_mailer->m_name,
+               sep);
+       p += strlen(p);
+       sprintf(p, "host=%s, lastuse=%s",
                mci->mci_host == NULL ? "NULL" : mci->mci_host,
                ctime(&mci->mci_lastuse));
                mci->mci_host == NULL ? "NULL" : mci->mci_host,
                ctime(&mci->mci_lastuse));
+printit:
+       if (logit)
+               syslog(LOG_INFO, "%s", buf);
+       else
+               printf("%s\n", buf);
+}
+\f/*
+**  MCI_DUMP_ALL -- print the entire MCI cache
+**
+**     Parameters:
+**             logit -- if set, log the result instead of printing
+**                     to stdout.
+**
+**     Returns:
+**             none.
+*/
+
+mci_dump_all(logit)
+       bool logit;
+{
+       register int i;
+
+       for (i = 0; i < MaxMciCache; i++)
+               mci_dump(MciCache[i], logit);
 }
 }
index 8951cac..414f7dd 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)parseaddr.c        8.3 (Berkeley) 7/11/93";
+static char sccsid[] = "@(#)parseaddr.c        8.14 (Berkeley) 10/22/93";
 #endif /* not lint */
 
 # include "sendmail.h"
 #endif /* not lint */
 
 # include "sendmail.h"
@@ -56,14 +56,8 @@ static char sccsid[] = "@(#)parseaddr.c      8.3 (Berkeley) 7/11/93";
 **             addr -- the address to parse.
 **             a -- a pointer to the address descriptor buffer.
 **                     If NULL, a header will be created.
 **             addr -- the address to parse.
 **             a -- a pointer to the address descriptor buffer.
 **                     If NULL, a header will be created.
-**             copyf -- determines what shall be copied:
-**                     -1 -- don't copy anything.  The printname
-**                             (q_paddr) is just addr, and the
-**                             user & host are allocated internally
-**                             to parse.
-**                     0 -- copy out the parsed user & host, but
-**                             don't copy the printname.
-**                     +1 -- copy everything.
+**             flags -- describe detail for parsing.  See RF_ definitions
+**                     in sendmail.h.
 **             delim -- the character to terminate the address, passed
 **                     to prescan.
 **             delimptr -- if non-NULL, set to the location of the
 **             delim -- the character to terminate the address, passed
 **                     to prescan.
 **             delimptr -- if non-NULL, set to the location of the
@@ -83,10 +77,10 @@ static char sccsid[] = "@(#)parseaddr.c     8.3 (Berkeley) 7/11/93";
 # define DELIMCHARS    "()<>,;\r\n"    /* default word delimiters */
 
 ADDRESS *
 # define DELIMCHARS    "()<>,;\r\n"    /* default word delimiters */
 
 ADDRESS *
-parseaddr(addr, a, copyf, delim, delimptr, e)
+parseaddr(addr, a, flags, delim, delimptr, e)
        char *addr;
        register ADDRESS *a;
        char *addr;
        register ADDRESS *a;
-       int copyf;
+       int flags;
        int delim;
        char **delimptr;
        register ENVELOPE *e;
        int delim;
        char **delimptr;
        register ENVELOPE *e;
@@ -106,13 +100,6 @@ parseaddr(addr, a, copyf, delim, delimptr, e)
        if (tTd(20, 1))
                printf("\n--parseaddr(%s)\n", addr);
 
        if (tTd(20, 1))
                printf("\n--parseaddr(%s)\n", addr);
 
-       if (invalidaddr(addr))
-       {
-               if (tTd(20, 1))
-                       printf("parseaddr-->bad address\n");
-               return NULL;
-       }
-
        if (delimptr == NULL)
                delimptr = &delimptrbuf;
 
        if (delimptr == NULL)
                delimptr = &delimptrbuf;
 
@@ -124,6 +111,32 @@ parseaddr(addr, a, copyf, delim, delimptr, e)
                return (NULL);
        }
 
                return (NULL);
        }
 
+       if (invalidaddr(addr, delim == '\0' ? NULL : *delimptr))
+       {
+               if (tTd(20, 1))
+                       printf("parseaddr-->bad address\n");
+               return NULL;
+       }
+
+       /*
+       **  Save addr if we are going to have to.
+       **
+       **      We have to do this early because there is a chance that
+       **      the map lookups in the rewriting rules could clobber
+       **      static memory somewhere.
+       */
+
+       if (bitset(RF_COPYPADDR, flags) && addr != NULL)
+       {
+               char savec = **delimptr;
+
+               if (savec != '\0')
+                       **delimptr = '\0';
+               addr = newstr(addr);
+               if (savec != '\0')
+                       **delimptr = savec;
+       }
+
        /*
        **  Apply rewriting rules.
        **      Ruleset 0 does basic parsing.  It must resolve.
        /*
        **  Apply rewriting rules.
        **      Ruleset 0 does basic parsing.  It must resolve.
@@ -135,31 +148,21 @@ parseaddr(addr, a, copyf, delim, delimptr, e)
        if (rewrite(pvp, 0, e) == EX_TEMPFAIL)
                queueup = TRUE;
 
        if (rewrite(pvp, 0, e) == EX_TEMPFAIL)
                queueup = TRUE;
 
-       /*
-       **  See if we resolved to a real mailer.
-       */
-
-       if (pvp[0] == NULL || (pvp[0][0] & 0377) != CANONNET)
-       {
-               setstat(EX_USAGE);
-               syserr("554 cannot resolve name %s", addr);
-               return (NULL);
-       }
 
        /*
        **  Build canonical address from pvp.
        */
 
 
        /*
        **  Build canonical address from pvp.
        */
 
-       a = buildaddr(pvp, a, e);
-       if (a == NULL)
-               return (NULL);
+       a = buildaddr(pvp, a, flags, e);
 
        /*
        **  Make local copies of the host & user and then
        **  transport them out.
        */
 
 
        /*
        **  Make local copies of the host & user and then
        **  transport them out.
        */
 
-       allocaddr(a, copyf, addr, *delimptr);
+       allocaddr(a, flags, addr);
+       if (bitset(QBADADDR, a->q_flags))
+               return a;
 
        /*
        **  If there was a parsing failure, mark it for queueing.
 
        /*
        **  If there was a parsing failure, mark it for queueing.
@@ -201,18 +204,36 @@ parseaddr(addr, a, copyf, delim, delimptr, e)
 */
 
 bool
 */
 
 bool
-invalidaddr(addr)
+invalidaddr(addr, delimptr)
        register char *addr;
        register char *addr;
+       char *delimptr;
 {
 {
-       for (; *addr != '\0'; addr++)
+       char savedelim;
+
+       if (delimptr != NULL)
+               savedelim = *delimptr;
+#if 0
+       /* for testing.... */
+       if (strcmp(addr, "INvalidADDR") == 0)
        {
        {
-               if ((*addr & 0340) != 0200)
-                       continue;
-               setstat(EX_USAGE);
-               usrerr("553 Address contained invalid control characters");
+               usrerr("553 INvalid ADDRess");
+               if (delimptr != NULL)
+                       *delimptr = savedelim;
                return TRUE;
        }
                return TRUE;
        }
-       return FALSE;
+#endif
+       for (; *addr != '\0'; addr++)
+       {
+               if ((*addr & 0340) == 0200)
+                       break;
+       }
+       if (delimptr != NULL)
+               *delimptr = savedelim;
+       if (*addr == '\0')
+               return FALSE;
+       setstat(EX_USAGE);
+       usrerr("553 Address contained invalid control characters");
+       return TRUE;
 }
 \f/*
 **  ALLOCADDR -- do local allocations of address on demand.
 }
 \f/*
 **  ALLOCADDR -- do local allocations of address on demand.
@@ -221,9 +242,9 @@ invalidaddr(addr)
 **
 **     Parameters:
 **             a -- the address to reallocate.
 **
 **     Parameters:
 **             a -- the address to reallocate.
-**             copyf -- the copy flag (see parseaddr for description).
+**             flags -- the copy flag (see RF_ definitions in sendmail.h
+**                     for a description).
 **             paddr -- the printname of the address.
 **             paddr -- the printname of the address.
-**             delimptr -- a pointer to the address delimiter.  Must be set.
 **
 **     Returns:
 **             none.
 **
 **     Returns:
 **             none.
@@ -232,34 +253,22 @@ invalidaddr(addr)
 **             Copies portions of a into local buffers as requested.
 */
 
 **             Copies portions of a into local buffers as requested.
 */
 
-allocaddr(a, copyf, paddr, delimptr)
+allocaddr(a, flags, paddr)
        register ADDRESS *a;
        register ADDRESS *a;
-       int copyf;
+       int flags;
        char *paddr;
        char *paddr;
-       char *delimptr;
 {
        if (tTd(24, 4))
 {
        if (tTd(24, 4))
-               printf("allocaddr(copyf=%d, paddr=%s)\n", copyf, paddr);
+               printf("allocaddr(flags=%o, paddr=%s)\n", flags, paddr);
 
 
-       if (copyf > 0 && paddr != NULL)
-       {
-               char savec = *delimptr;
-
-               if (savec != '\0')
-                       *delimptr = '\0';
-               a->q_paddr = newstr(paddr);
-               if (savec != '\0')
-                       *delimptr = savec;
-       }
-       else
-               a->q_paddr = paddr;
+       a->q_paddr = paddr;
 
        if (a->q_user == NULL)
                a->q_user = "";
        if (a->q_host == NULL)
                a->q_host = "";
 
 
        if (a->q_user == NULL)
                a->q_user = "";
        if (a->q_host == NULL)
                a->q_host = "";
 
-       if (copyf >= 0)
+       if (bitset(RF_COPYPARSE, flags))
        {
                a->q_host = newstr(a->q_host);
                if (a->q_user != a->q_paddr)
        {
                a->q_host = newstr(a->q_host);
                if (a->q_user != a->q_paddr)
@@ -397,18 +406,18 @@ prescan(addr, delim, pvpbuf, delimptr)
                                /* diagnose and patch up bad syntax */
                                if (state == QST)
                                {
                                /* diagnose and patch up bad syntax */
                                if (state == QST)
                                {
-                                       usrerr("553 Unbalanced '\"'");
+                                       usrerr("653 Unbalanced '\"' (fixed)");
                                        c = '"';
                                }
                                else if (cmntcnt > 0)
                                {
                                        c = '"';
                                }
                                else if (cmntcnt > 0)
                                {
-                                       usrerr("553 Unbalanced '('");
+                                       usrerr("653 Unbalanced '(' (fixed)");
                                        c = ')';
                                }
                                else if (anglecnt > 0)
                                {
                                        c = '>';
                                        c = ')';
                                }
                                else if (anglecnt > 0)
                                {
                                        c = '>';
-                                       usrerr("553 Unbalanced '<'");
+                                       usrerr("653 Unbalanced '<' (fixed)");
                                }
                                else
                                        break;
                                }
                                else
                                        break;
@@ -458,11 +467,8 @@ prescan(addr, delim, pvpbuf, delimptr)
                        {
                                if (cmntcnt <= 0)
                                {
                        {
                                if (cmntcnt <= 0)
                                {
-                                       usrerr("553 Unbalanced ')'");
-                                       if (delimptr != NULL)
-                                               *delimptr = p;
-                                       CurEnv->e_to = saveto;
-                                       return (NULL);
+                                       usrerr("653 Unbalanced ')' (fixed)");
+                                       c = NOCHAR;
                                }
                                else
                                        cmntcnt--;
                                }
                                else
                                        cmntcnt--;
@@ -475,13 +481,11 @@ prescan(addr, delim, pvpbuf, delimptr)
                        {
                                if (anglecnt <= 0)
                                {
                        {
                                if (anglecnt <= 0)
                                {
-                                       usrerr("553 Unbalanced '>'");
-                                       if (delimptr != NULL)
-                                               *delimptr = p;
-                                       CurEnv->e_to = saveto;
-                                       return (NULL);
+                                       usrerr("653 Unbalanced '>' (fixed)");
+                                       c = NOCHAR;
                                }
                                }
-                               anglecnt--;
+                               else
+                                       anglecnt--;
                        }
                        else if (delim == ' ' && isascii(c) && isspace(c))
                                c = ' ';
                        }
                        else if (delim == ' ' && isascii(c) && isspace(c))
                                c = ' ';
@@ -639,6 +643,7 @@ rewrite(pvp, ruleset, e)
        register struct rewrite *rwr;   /* pointer to current rewrite rule */
        int ruleno;                     /* current rule number */
        int rstat = EX_OK;              /* return status */
        register struct rewrite *rwr;   /* pointer to current rewrite rule */
        int ruleno;                     /* current rule number */
        int rstat = EX_OK;              /* return status */
+       int loopcount;
        struct match mlist[MAXMATCH];   /* stores match on LHS */
        char *npvp[MAXATOM+1];          /* temporary space for rebuild */
 
        struct match mlist[MAXMATCH];   /* stores match on LHS */
        char *npvp[MAXATOM+1];          /* temporary space for rebuild */
 
@@ -661,10 +666,9 @@ rewrite(pvp, ruleset, e)
        */
 
        ruleno = 1;
        */
 
        ruleno = 1;
+       loopcount = 0;
        for (rwr = RewriteRules[ruleset]; rwr != NULL; )
        {
        for (rwr = RewriteRules[ruleset]; rwr != NULL; )
        {
-               int loopcount = 0;
-
                if (tTd(21, 12))
                {
                        printf("-----trying rule:");
                if (tTd(21, 12))
                {
                        printf("-----trying rule:");
@@ -874,6 +878,7 @@ rewrite(pvp, ruleset, e)
                                printf("----- rule fails\n");
                        rwr = rwr->r_next;
                        ruleno++;
                                printf("----- rule fails\n");
                        rwr = rwr->r_next;
                        ruleno++;
+                       loopcount = 0;
                        continue;
                }
 
                        continue;
                }
 
@@ -890,6 +895,7 @@ rewrite(pvp, ruleset, e)
                        rvp++;
                        rwr = rwr->r_next;
                        ruleno++;
                        rvp++;
                        rwr = rwr->r_next;
                        ruleno++;
+                       loopcount = 0;
                }
                else if ((*rp & 0377) == CANONHOST)
                {
                }
                else if ((*rp & 0377) == CANONHOST)
                {
@@ -984,6 +990,7 @@ rewrite(pvp, ruleset, e)
                        char *pvpb1[MAXATOM + 1];
                        char *argvect[10];
                        char pvpbuf[PSBUFSIZE];
                        char *pvpb1[MAXATOM + 1];
                        char *argvect[10];
                        char pvpbuf[PSBUFSIZE];
+                       char *nullpvp[1];
 
                        if ((**rvp & 0377) != HOSTBEGIN &&
                            (**rvp & 0377) != LOOKUPBEGIN)
 
                        if ((**rvp & 0377) != HOSTBEGIN &&
                            (**rvp & 0377) != LOOKUPBEGIN)
@@ -1101,6 +1108,12 @@ rewrite(pvp, ruleset, e)
                        {
                                xpvp = key_rvp;
                        }
                        {
                                xpvp = key_rvp;
                        }
+                       else if (*replac == '\0')
+                       {
+                               /* null replacement */
+                               nullpvp[0] = NULL;
+                               xpvp = nullpvp;
+                       }
                        else
                        {
                                /* scan the new replacement */
                        else
                        {
                                /* scan the new replacement */
@@ -1173,6 +1186,8 @@ rewrite(pvp, ruleset, e)
 **             tv -- token vector.
 **             a -- pointer to address descriptor to fill.
 **                     If NULL, one will be allocated.
 **             tv -- token vector.
 **             a -- pointer to address descriptor to fill.
 **                     If NULL, one will be allocated.
+**             flags -- info regarding whether this is a sender or
+**                     a recipient.
 **             e -- the current envelope.
 **
 **     Returns:
 **             e -- the current envelope.
 **
 **     Returns:
@@ -1203,15 +1218,18 @@ struct errcodes
 };
 
 ADDRESS *
 };
 
 ADDRESS *
-buildaddr(tv, a, e)
+buildaddr(tv, a, flags, e)
        register char **tv;
        register ADDRESS *a;
        register char **tv;
        register ADDRESS *a;
+       int flags;
        register ENVELOPE *e;
 {
        struct mailer **mp;
        register struct mailer *m;
        char *bp;
        int spaceleft;
        register ENVELOPE *e;
 {
        struct mailer **mp;
        register struct mailer *m;
        char *bp;
        int spaceleft;
+       static MAILER errormailer;
+       static char *errorargv[] = { "ERROR", NULL };
        static char buf[MAXNAME];
 
        if (a == NULL)
        static char buf[MAXNAME];
 
        if (a == NULL)
@@ -1219,10 +1237,20 @@ buildaddr(tv, a, e)
        bzero((char *) a, sizeof *a);
 
        /* figure out what net/mailer to use */
        bzero((char *) a, sizeof *a);
 
        /* figure out what net/mailer to use */
-       if ((**tv & 0377) != CANONNET)
+       if (*tv == NULL || (**tv & 0377) != CANONNET)
        {
                syserr("554 buildaddr: no net");
        {
                syserr("554 buildaddr: no net");
-               return (NULL);
+badaddr:
+               a->q_flags |= QBADADDR;
+               a->q_mailer = &errormailer;
+               if (errormailer.m_name == NULL)
+               {
+                       /* initialize the bogus mailer */
+                       errormailer.m_name = "*error*";
+                       errormailer.m_mailer = "ERROR";
+                       errormailer.m_argv = errorargv;
+               }
+               return a;
        }
        tv++;
        if (strcasecmp(*tv, "error") == 0)
        }
        tv++;
        if (strcasecmp(*tv, "error") == 0)
@@ -1248,8 +1276,22 @@ buildaddr(tv, a, e)
                        syserr("554 buildaddr: error: no user");
                cataddr(++tv, NULL, buf, sizeof buf, ' ');
                stripquotes(buf);
                        syserr("554 buildaddr: error: no user");
                cataddr(++tv, NULL, buf, sizeof buf, ' ');
                stripquotes(buf);
-               usrerr(buf);
-               return (NULL);
+               if (isascii(buf[0]) && isdigit(buf[0]) &&
+                   isascii(buf[1]) && isdigit(buf[1]) &&
+                   isascii(buf[2]) && isdigit(buf[2]) &&
+                   buf[3] == ' ')
+               {
+                       char fmt[10];
+
+                       strncpy(fmt, buf, 3);
+                       strcpy(&fmt[3], " %s");
+                       usrerr(fmt, buf + 4);
+               }
+               else
+               {
+                       usrerr("%s", buf);
+               }
+               goto badaddr;
        }
 
        for (mp = Mailer; (m = *mp++) != NULL; )
        }
 
        for (mp = Mailer; (m = *mp++) != NULL; )
@@ -1260,7 +1302,7 @@ buildaddr(tv, a, e)
        if (m == NULL)
        {
                syserr("554 buildaddr: unknown mailer %s", *tv);
        if (m == NULL)
        {
                syserr("554 buildaddr: unknown mailer %s", *tv);
-               return (NULL);
+               goto badaddr;
        }
        a->q_mailer = m;
 
        }
        a->q_mailer = m;
 
@@ -1297,7 +1339,7 @@ buildaddr(tv, a, e)
                if (!bitnset(M_LOCALMAILER, m->m_flags))
                {
                        syserr("554 buildaddr: no host");
                if (!bitnset(M_LOCALMAILER, m->m_flags))
                {
                        syserr("554 buildaddr: no host");
-                       return (NULL);
+                       goto badaddr;
                }
                a->q_host = NULL;
        }
                }
                a->q_host = NULL;
        }
@@ -1306,7 +1348,7 @@ buildaddr(tv, a, e)
        if (*tv == NULL || (**tv & 0377) != CANONUSER)
        {
                syserr("554 buildaddr: no user");
        if (*tv == NULL || (**tv & 0377) != CANONUSER)
        {
                syserr("554 buildaddr: no user");
-               return (NULL);
+               goto badaddr;
        }
        tv++;
 
        }
        tv++;
 
@@ -1342,7 +1384,15 @@ buildaddr(tv, a, e)
                a->q_flags |= QNOTREMOTE;
        }
 
                a->q_flags |= QNOTREMOTE;
        }
 
-       /* do cleanup of final address */
+       /* rewrite according recipient mailer rewriting rules */
+       define('h', a->q_host, e);
+       if (!bitset(RF_SENDERADDR|RF_HEADERADDR, flags))
+       {
+               /* sender addresses done later */
+               (void) rewrite(tv, 2, e);
+               if (m->m_re_rwset > 0)
+                      (void) rewrite(tv, m->m_re_rwset, e);
+       }
        (void) rewrite(tv, 4, e);
 
        /* save the result for the command line/RCPT argument */
        (void) rewrite(tv, 4, e);
 
        /* save the result for the command line/RCPT argument */
@@ -1699,7 +1749,7 @@ maplocaluser(a, sendq, e)
                return;
 
        /* if non-null, mailer destination specified -- has it changed? */
                return;
 
        /* if non-null, mailer destination specified -- has it changed? */
-       a1 = buildaddr(pvp, NULL, e);
+       a1 = buildaddr(pvp, NULL, 0, e);
        if (a1 == NULL || sameaddr(a, a1))
                return;
 
        if (a1 == NULL || sameaddr(a, a1))
                return;
 
@@ -1711,7 +1761,7 @@ maplocaluser(a, sendq, e)
                printaddr(a, FALSE);
        }
        a1->q_alias = a;
                printaddr(a, FALSE);
        }
        a1->q_alias = a;
-       allocaddr(a1, 1, NULL, delimptr);
+       allocaddr(a1, RF_COPYALL, NULL);
        (void) recipient(a1, sendq, e);
 }
 \f/*
        (void) recipient(a1, sendq, e);
 }
 \f/*
index be9a072..a611c0b 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)pathnames.h 8.1 (Berkeley) 6/7/93
+ *     @(#)pathnames.h 8.2 (Berkeley) 8/20/93
  */
 
 #ifndef _PATH_SENDMAILCF
 # define _PATH_SENDMAILCF      "/etc/sendmail.cf"
 #endif
 
  */
 
 #ifndef _PATH_SENDMAILCF
 # define _PATH_SENDMAILCF      "/etc/sendmail.cf"
 #endif
 
-#ifndef _PATH_SENDMAILFC
-# define _PATH_SENDMAILFC      "/etc/sendmail.fc"
-#endif
-
 #ifndef _PATH_SENDMAILPID
 # ifdef BSD4_4
 #  define _PATH_SENDMAILPID    "/var/run/sendmail.pid"
 #ifndef _PATH_SENDMAILPID
 # ifdef BSD4_4
 #  define _PATH_SENDMAILPID    "/var/run/sendmail.pid"
index 5b55217..1605701 100644 (file)
 
 #ifndef lint
 #ifdef QUEUE
 
 #ifndef lint
 #ifdef QUEUE
-static char sccsid[] = "@(#)queue.c    8.3 (Berkeley) 7/13/93 (with queueing)";
+static char sccsid[] = "@(#)queue.c    8.24 (Berkeley) 10/23/93 (with queueing)";
 #else
 #else
-static char sccsid[] = "@(#)queue.c    8.3 (Berkeley) 7/13/93 (without queueing)";
+static char sccsid[] = "@(#)queue.c    8.24 (Berkeley) 10/23/93 (without queueing)";
 #endif
 #endif /* not lint */
 
 #endif
 #endif /* not lint */
 
-# include <signal.h>
 # include <errno.h>
 # include <pwd.h>
 # include <dirent.h>
 # include <errno.h>
 # include <pwd.h>
 # include <dirent.h>
@@ -101,43 +100,68 @@ queueup(e, queueall, announce)
        **  Create control file.
        */
 
        **  Create control file.
        */
 
-       newid = (e->e_id == NULL);
+       newid = (e->e_id == NULL) || !bitset(EF_INQUEUE, e->e_flags);
+
+       /* if newid, queuename will create a locked qf file in e->lockfp */
        strcpy(tf, queuename(e, 't'));
        tfp = e->e_lockfp;
        if (tfp == NULL)
                newid = FALSE;
        strcpy(tf, queuename(e, 't'));
        tfp = e->e_lockfp;
        if (tfp == NULL)
                newid = FALSE;
-       if (newid)
-       {
-               tfp = e->e_lockfp;
-       }
-       else
+
+       /* if newid, just write the qf file directly (instead of tf file) */
+       if (!newid)
        {
                /* get a locked tf file */
        {
                /* get a locked tf file */
-               for (i = 100; --i >= 0; )
+               for (i = 0; i < 128; i++)
                {
                        fd = open(tf, O_CREAT|O_WRONLY|O_EXCL, FileMode);
                        if (fd < 0)
                        {
                {
                        fd = open(tf, O_CREAT|O_WRONLY|O_EXCL, FileMode);
                        if (fd < 0)
                        {
-                               if (errno == EEXIST)
-                                       continue;
-notemp:
-                               syserr("!queueup: cannot create temp file %s", tf);
+                               if (errno != EEXIST)
+                                       break;
+#ifdef LOG
+                               if (LogLevel > 0 && (i % 32) == 0)
+                                       syslog(LOG_ALERT, "queueup: cannot create %s: %s",
+                                               tf, errstring(errno));
+#endif
+                               continue;
                        }
 
                        }
 
-                       if (lockfile(fd, tf, LOCK_EX|LOCK_NB))
+                       if (lockfile(fd, tf, NULL, LOCK_EX|LOCK_NB))
                                break;
                                break;
+#ifdef LOG
+                       else if (LogLevel > 0 && (i % 32) == 0)
+                               syslog(LOG_ALERT, "queueup: cannot lock %s: %s",
+                                       tf, errstring(errno));
+#endif
 
                        close(fd);
 
                        close(fd);
-                       sleep(i);
-               }
-               if (fd < 0)
-                       goto notemp;
 
 
-               tfp = fdopen(fd, "w");
+                       if ((i % 32) == 31)
+                       {
+                               /* save the old temp file away */
+                               (void) rename(tf, queuename(e, 'T'));
+                       }
+                       else
+                               sleep(i % 32);
+               }
+               if (fd < 0 || (tfp = fdopen(fd, "w")) == NULL)
+                       syserr("!queueup: cannot create queue temp file %s", tf);
        }
 
        if (tTd(40, 1))
        }
 
        if (tTd(40, 1))
-               printf("queueing %s\n", e->e_id);
+               printf("\n>>>>> queueing %s%s >>>>>\n", e->e_id,
+                       newid ? " (new id)" : "");
+       if (tTd(40, 9))
+       {
+               printf("  tfp=");
+               dumpfd(fileno(tfp), TRUE, FALSE);
+               printf("  lockfp=");
+               if (e->e_lockfp == NULL)
+                       printf("NULL\n");
+               else
+                       dumpfd(fileno(e->e_lockfp), TRUE, FALSE);
+       }
 
        /*
        **  If there is no data file yet, create one.
 
        /*
        **  If there is no data file yet, create one.
@@ -148,11 +172,12 @@ notemp:
                register FILE *dfp;
                extern putbody();
 
                register FILE *dfp;
                extern putbody();
 
-               e->e_df = newstr(queuename(e, 'd'));
+               e->e_df = queuename(e, 'd');
+               e->e_df = newstr(e->e_df);
                fd = open(e->e_df, O_WRONLY|O_CREAT, FileMode);
                fd = open(e->e_df, O_WRONLY|O_CREAT, FileMode);
-               if (fd < 0)
-                       syserr("!queueup: cannot create %s", e->e_df);
-               dfp = fdopen(fd, "w");
+               if (fd < 0 || (dfp = fdopen(fd, "w")) == NULL)
+                       syserr("!queueup: cannot create data temp file %s",
+                               e->e_df);
                (*e->e_putbody)(dfp, FileMailer, e, NULL);
                (void) xfclose(dfp, "queueup dfp", e->e_id);
                e->e_putbody = putbody;
                (*e->e_putbody)(dfp, FileMailer, e, NULL);
                (void) xfclose(dfp, "queueup dfp", e->e_id);
                e->e_putbody = putbody;
@@ -247,7 +272,7 @@ notemp:
 
        bzero((char *) &nullmailer, sizeof nullmailer);
        nullmailer.m_re_rwset = nullmailer.m_rh_rwset =
 
        bzero((char *) &nullmailer, sizeof nullmailer);
        nullmailer.m_re_rwset = nullmailer.m_rh_rwset =
-                       nullmailer.m_se_rwset = nullmailer.m_sh_rwset = -1;
+                       nullmailer.m_se_rwset = nullmailer.m_sh_rwset = 0;
        nullmailer.m_eol = "\n";
 
        define('g', "\201f", e);
        nullmailer.m_eol = "\n";
 
        define('g', "\201f", e);
@@ -319,9 +344,12 @@ notemp:
 
        if (!newid)
        {
 
        if (!newid)
        {
+               /* rename (locked) tf to be (locked) qf */
                qf = queuename(e, 'q');
                if (rename(tf, qf) < 0)
                        syserr("cannot rename(%s, %s), df=%s", tf, qf, e->e_df);
                qf = queuename(e, 'q');
                if (rename(tf, qf) < 0)
                        syserr("cannot rename(%s, %s), df=%s", tf, qf, e->e_df);
+
+               /* close and unlock old (locked) qf */
                if (e->e_lockfp != NULL)
                        (void) xfclose(e->e_lockfp, "queueup lockfp", e->e_id);
                e->e_lockfp = tfp;
                if (e->e_lockfp != NULL)
                        (void) xfclose(e->e_lockfp, "queueup lockfp", e->e_id);
                e->e_lockfp = tfp;
@@ -329,12 +357,16 @@ notemp:
        else
                qf = tf;
        errno = 0;
        else
                qf = tf;
        errno = 0;
+       e->e_flags |= EF_INQUEUE;
 
 # ifdef LOG
        /* save log info */
        if (LogLevel > 79)
                syslog(LOG_DEBUG, "%s: queueup, qf=%s, df=%s\n", e->e_id, qf, e->e_df);
 # endif /* LOG */
 
 # ifdef LOG
        /* save log info */
        if (LogLevel > 79)
                syslog(LOG_DEBUG, "%s: queueup, qf=%s, df=%s\n", e->e_id, qf, e->e_df);
 # endif /* LOG */
+
+       if (tTd(40, 1))
+               printf("<<<<< done queueing %s <<<<<\n\n", e->e_id);
        return;
 }
 
        return;
 }
 
@@ -350,7 +382,7 @@ printctladdr(a, tfp)
        static uid_t lastuid;
 
        /* initialization */
        static uid_t lastuid;
 
        /* initialization */
-       if (a == NULL || tfp == NULL)
+       if (a == NULL || a->q_alias == NULL || tfp == NULL)
        {
                if (lastctladdr != NULL && tfp != NULL)
                        fprintf(tfp, "C\n");
        {
                if (lastctladdr != NULL && tfp != NULL)
                        fprintf(tfp, "C\n");
@@ -365,10 +397,7 @@ printctladdr(a, tfp)
                uid = 0;
        else
                uid = q->q_uid;
                uid = 0;
        else
                uid = q->q_uid;
-
-       /* if a is an alias, use that for printing */
-       if (a->q_alias != NULL)
-               a = a->q_alias;
+       a = a->q_alias;
 
        /* check to see if this is the same as last time */
        if (lastctladdr != NULL && uid == lastuid &&
 
        /* check to see if this is the same as last time */
        if (lastctladdr != NULL && uid == lastuid &&
@@ -444,7 +473,7 @@ runqueue(forkflag)
 #ifndef SIGCHLD
                        (void) waitfor(pid);
 #else /* SIGCHLD */
 #ifndef SIGCHLD
                        (void) waitfor(pid);
 #else /* SIGCHLD */
-                       (void) signal(SIGCHLD, reapchild);
+                       (void) setsignal(SIGCHLD, reapchild);
 #endif /* SIGCHLD */
                        if (QueueIntvl != 0)
                                (void) setevent(QueueIntvl, runqueue, TRUE);
 #endif /* SIGCHLD */
                        if (QueueIntvl != 0)
                                (void) setevent(QueueIntvl, runqueue, TRUE);
@@ -455,7 +484,7 @@ runqueue(forkflag)
                if (fork() != 0)
                        exit(EX_OK);
 #else /* SIGCHLD */
                if (fork() != 0)
                        exit(EX_OK);
 #else /* SIGCHLD */
-               (void) signal(SIGCHLD, SIG_DFL);
+               (void) setsignal(SIGCHLD, SIG_DFL);
 #endif /* SIGCHLD */
        }
 
 #endif /* SIGCHLD */
        }
 
@@ -475,6 +504,9 @@ runqueue(forkflag)
        clrdaemon();
 # endif /* DAEMON */
 
        clrdaemon();
 # endif /* DAEMON */
 
+       /* force it to run expensive jobs */
+       NoConnect = FALSE;
+
        /*
        **  Create ourselves an envelope
        */
        /*
        **  Create ourselves an envelope
        */
@@ -517,7 +549,12 @@ runqueue(forkflag)
                }
                else
                {
                }
                else
                {
-                       dowork(w->w_name + 2, ForkQueueRuns, FALSE, e);
+                       pid_t pid;
+                       extern pid_t dowork();
+
+                       pid = dowork(w->w_name + 2, ForkQueueRuns, FALSE, e);
+                       errno = 0;
+                       (void) waitfor(pid);
                }
                free(w->w_name);
                free((char *) w);
                }
                free(w->w_name);
                free((char *) w);
@@ -597,6 +634,7 @@ orderq(doall)
        while ((d = readdir(f)) != NULL)
        {
                FILE *cf;
        while ((d = readdir(f)) != NULL)
        {
                FILE *cf;
+               register char *p;
                char lbuf[MAXNAME];
                extern bool strcontainedin();
 
                char lbuf[MAXNAME];
                extern bool strcontainedin();
 
@@ -613,8 +651,16 @@ orderq(doall)
                **  both old and new type ids.
                */
 
                **  both old and new type ids.
                */
 
-               i = strlen(d->d_name);
-               if (i != 9 && i != 10)
+               p = d->d_name + 2;
+               if (isupper(p[0]) && isupper(p[2]))
+                       p += 3;
+               else if (isupper(p[1]))
+                       p += 2;
+               else
+                       p = d->d_name;
+               for (i = 0; isdigit(*p); p++)
+                       i++;
+               if (i < 5 || *p != '\0')
                {
                        if (Verbose)
                                printf("orderq: bogus qf name %s\n", d->d_name);
                {
                        if (Verbose)
                                printf("orderq: bogus qf name %s\n", d->d_name);
@@ -775,19 +821,20 @@ workcmpf(a, b)
 **             e - the envelope in which to run it.
 **
 **     Returns:
 **             e - the envelope in which to run it.
 **
 **     Returns:
-**             none.
+**             process id of process that is running the queue job.
 **
 **     Side Effects:
 **             The work request is satisfied if possible.
 */
 
 **
 **     Side Effects:
 **             The work request is satisfied if possible.
 */
 
+pid_t
 dowork(id, forkflag, requeueflag, e)
        char *id;
        bool forkflag;
        bool requeueflag;
        register ENVELOPE *e;
 {
 dowork(id, forkflag, requeueflag, e)
        char *id;
        bool forkflag;
        bool requeueflag;
        register ENVELOPE *e;
 {
-       register int i;
+       register pid_t pid;
        extern bool readqf();
 
        if (tTd(40, 1))
        extern bool readqf();
 
        if (tTd(40, 1))
@@ -799,19 +846,19 @@ dowork(id, forkflag, requeueflag, e)
 
        if (forkflag)
        {
 
        if (forkflag)
        {
-               i = fork();
-               if (i < 0)
+               pid = fork();
+               if (pid < 0)
                {
                        syserr("dowork: cannot fork");
                {
                        syserr("dowork: cannot fork");
-                       return;
+                       return 0;
                }
        }
        else
        {
                }
        }
        else
        {
-               i = 0;
+               pid = 0;
        }
 
        }
 
-       if (i == 0)
+       if (pid == 0)
        {
                /*
                **  CHILD
        {
                /*
                **  CHILD
@@ -824,9 +871,15 @@ dowork(id, forkflag, requeueflag, e)
                /* set basic modes, etc. */
                (void) alarm(0);
                clearenvelope(e, FALSE);
                /* set basic modes, etc. */
                (void) alarm(0);
                clearenvelope(e, FALSE);
-               e->e_flags |= EF_QUEUERUN;
+               e->e_flags |= EF_QUEUERUN|EF_GLOBALERRS;
                e->e_errormode = EM_MAIL;
                e->e_id = id;
                e->e_errormode = EM_MAIL;
                e->e_id = id;
+               GrabTo = FALSE;
+               if (forkflag)
+               {
+                       disconnect(1, e);
+                       OpMode = MD_DELIVER;
+               }
 # ifdef LOG
                if (LogLevel > 76)
                        syslog(LOG_DEBUG, "%s: dowork, pid=%d", e->e_id,
 # ifdef LOG
                if (LogLevel > 76)
                        syslog(LOG_DEBUG, "%s: dowork, pid=%d", e->e_id,
@@ -837,7 +890,7 @@ dowork(id, forkflag, requeueflag, e)
                e->e_header = NULL;
 
                /* read the queue control file -- return if locked */
                e->e_header = NULL;
 
                /* read the queue control file -- return if locked */
-               if (!readqf(e))
+               if (!readqf(e, !requeueflag))
                {
                        if (tTd(40, 4))
                                printf("readqf(%s) failed\n", e->e_id);
                {
                        if (tTd(40, 4))
                                printf("readqf(%s) failed\n", e->e_id);
@@ -862,21 +915,16 @@ dowork(id, forkflag, requeueflag, e)
                else
                        dropenvelope(e);
        }
                else
                        dropenvelope(e);
        }
-       else if (!requeueflag)
-       {
-               /*
-               **  Parent -- pick up results.
-               */
-
-               errno = 0;
-               (void) waitfor(i);
-       }
+       e->e_id = NULL;
+       return pid;
 }
 \f/*
 **  READQF -- read queue file and set up environment.
 **
 **     Parameters:
 **             e -- the envelope of the job to run.
 }
 \f/*
 **  READQF -- read queue file and set up environment.
 **
 **     Parameters:
 **             e -- the envelope of the job to run.
+**             announcefile -- if set, announce the name of the queue
+**                     file in error messages.
 **
 **     Returns:
 **             TRUE if it successfully read the queue file.
 **
 **     Returns:
 **             TRUE if it successfully read the queue file.
@@ -887,8 +935,9 @@ dowork(id, forkflag, requeueflag, e)
 */
 
 bool
 */
 
 bool
-readqf(e)
+readqf(e, announcefile)
        register ENVELOPE *e;
        register ENVELOPE *e;
+       bool announcefile;
 {
        register FILE *qfp;
        ADDRESS *ctladdr;
 {
        register FILE *qfp;
        ADDRESS *ctladdr;
@@ -915,6 +964,21 @@ readqf(e)
                return FALSE;
        }
 
                return FALSE;
        }
 
+       if (!lockfile(fileno(qfp), qf, NULL, LOCK_EX|LOCK_NB))
+       {
+               /* being processed by another queuer */
+               if (tTd(40, 8))
+                       printf("readqf(%s): locked\n", qf);
+               if (Verbose)
+                       printf("%s: locked\n", e->e_id);
+# ifdef LOG
+               if (LogLevel > 19)
+                       syslog(LOG_DEBUG, "%s: locked", e->e_id);
+# endif /* LOG */
+               (void) fclose(qfp);
+               return FALSE;
+       }
+
        /*
        **  Check the queue file for plausibility to avoid attacks.
        */
        /*
        **  Check the queue file for plausibility to avoid attacks.
        */
@@ -929,7 +993,7 @@ readqf(e)
                return FALSE;
        }
 
                return FALSE;
        }
 
-       if (st.st_uid != geteuid() || (st.st_mode & 07777) != FileMode)
+       if (st.st_uid != geteuid())
        {
 # ifdef LOG
                if (LogLevel > 0)
        {
 # ifdef LOG
                if (LogLevel > 0)
@@ -940,42 +1004,41 @@ readqf(e)
 # endif /* LOG */
                if (tTd(40, 8))
                        printf("readqf(%s): bogus file\n", qf);
 # endif /* LOG */
                if (tTd(40, 8))
                        printf("readqf(%s): bogus file\n", qf);
-               fclose(qfp);
                rename(qf, queuename(e, 'Q'));
                rename(qf, queuename(e, 'Q'));
+               fclose(qfp);
                return FALSE;
        }
 
                return FALSE;
        }
 
-       if (!lockfile(fileno(qfp), qf, LOCK_EX|LOCK_NB))
+       if (st.st_size == 0)
        {
        {
-               /* being processed by another queuer */
-               if (tTd(40, 8))
-                       printf("readqf(%s): locked\n", qf);
-               if (Verbose)
-                       printf("%s: locked\n", e->e_id);
-# ifdef LOG
-               if (LogLevel > 19)
-                       syslog(LOG_DEBUG, "%s: locked", e->e_id);
-# endif /* LOG */
-               (void) fclose(qfp);
+               /* must be a bogus file -- just remove it */
+               (void) unlink(qf);
+               fclose(qfp);
                return FALSE;
        }
 
                return FALSE;
        }
 
-       if (st.st_size == 0)
+       if (st.st_nlink == 0)
        {
        {
-               /* must be a bogus file -- just remove it */
-               (void) unlink(qf);
+               /*
+               **  Race condition -- we got a file just as it was being
+               **  unlinked.  Just assume it is zero length.
+               */
+
                fclose(qfp);
                return FALSE;
        }
 
                fclose(qfp);
                return FALSE;
        }
 
-       /* save this lock */
+       /* good file -- save this lock */
        e->e_lockfp = qfp;
 
        /* do basic system initialization */
        initsys(e);
 
        e->e_lockfp = qfp;
 
        /* do basic system initialization */
        initsys(e);
 
-       FileName = qf;
+       if (announcefile)
+               FileName = qf;
        LineNumber = 0;
        LineNumber = 0;
+       e->e_flags |= EF_GLOBALERRS;
+       OpMode = MD_DELIVER;
        if (Verbose)
                printf("\nRunning %s\n", e->e_id);
        ctladdr = NULL;
        if (Verbose)
                printf("\nRunning %s\n", e->e_id);
        ctladdr = NULL;
@@ -1005,7 +1068,7 @@ readqf(e)
                        break;
 
                  case 'M':             /* message */
                        break;
 
                  case 'M':             /* message */
-                       e->e_message = newstr(&bp[1]);
+                       /* ignore this; we want a new message next time */
                        break;
 
                  case 'S':             /* sender */
                        break;
 
                  case 'S':             /* sender */
@@ -1109,12 +1172,12 @@ printqueue()
        **  Check for permission to print the queue
        */
 
        **  Check for permission to print the queue
        */
 
-       if (bitset(PRIV_RESTRMAILQ, PrivacyFlags) && RealUid != 0)
+       if (bitset(PRIV_RESTRICTMAILQ, PrivacyFlags) && RealUid != 0)
        {
                struct stat st;
 # ifdef NGROUPS
                int n;
        {
                struct stat st;
 # ifdef NGROUPS
                int n;
-               int gidset[NGROUPS];
+               GIDSET_T gidset[NGROUPS];
 # endif
 
                if (stat(QueueDir, &st) < 0)
 # endif
 
                if (stat(QueueDir, &st) < 0)
@@ -1175,14 +1238,15 @@ printqueue()
                char message[MAXLINE];
                char bodytype[MAXNAME];
 
                char message[MAXLINE];
                char bodytype[MAXNAME];
 
+               printf("%8s", w->w_name + 2);
                f = fopen(w->w_name, "r");
                if (f == NULL)
                {
                f = fopen(w->w_name, "r");
                if (f == NULL)
                {
+                       printf(" (job completed)\n");
                        errno = 0;
                        continue;
                }
                        errno = 0;
                        continue;
                }
-               printf("%8s", w->w_name + 2);
-               if (!lockfile(fileno(f), w->w_name, LOCK_SH|LOCK_NB))
+               if (!lockfile(fileno(f), w->w_name, NULL, LOCK_SH|LOCK_NB))
                        printf("*");
                else if (shouldqueue(w->w_pri, w->w_ctime))
                        printf("X");
                        printf("*");
                else if (shouldqueue(w->w_pri, w->w_ctime))
                        printf("X");
@@ -1344,11 +1408,11 @@ queuename(e, type)
                        {
                                if (errno == EEXIST)
                                        continue;
                        {
                                if (errno == EEXIST)
                                        continue;
-                               syserr("queuename: Cannot create \"%s\" in \"%s\"",
-                                       qf, QueueDir);
+                               syserr("queuename: Cannot create \"%s\" in \"%s\" (euid=%d)",
+                                       qf, QueueDir, geteuid());
                                exit(EX_UNAVAILABLE);
                        }
                                exit(EX_UNAVAILABLE);
                        }
-                       if (lockfile(i, qf, LOCK_EX|LOCK_NB))
+                       if (lockfile(i, qf, NULL, LOCK_EX|LOCK_NB))
                        {
                                e->e_lockfp = fdopen(i, "w");
                                break;
                        {
                                e->e_lockfp = fdopen(i, "w");
                                break;
@@ -1359,14 +1423,19 @@ queuename(e, type)
                }
                if (c1 >= '~' && c2 >= 'Z')
                {
                }
                if (c1 >= '~' && c2 >= 'Z')
                {
-                       syserr("queuename: Cannot create \"%s\" in \"%s\"",
-                               qf, QueueDir);
+                       syserr("queuename: Cannot create \"%s\" in \"%s\" (euid=%d)",
+                               qf, QueueDir, geteuid());
                        exit(EX_OSERR);
                }
                e->e_id = newstr(&qf[2]);
                define('i', e->e_id, e);
                if (tTd(7, 1))
                        printf("queuename: assigned id %s, env=%x\n", e->e_id, e);
                        exit(EX_OSERR);
                }
                e->e_id = newstr(&qf[2]);
                define('i', e->e_id, e);
                if (tTd(7, 1))
                        printf("queuename: assigned id %s, env=%x\n", e->e_id, e);
+               if (tTd(7, 9))
+               {
+                       printf("  lockfd=");
+                       dumpfd(fileno(e->e_lockfp), TRUE, FALSE);
+               }
 # ifdef LOG
                if (LogLevel > 93)
                        syslog(LOG_DEBUG, "%s: assigned id", e->e_id);
 # ifdef LOG
                if (LogLevel > 93)
                        syslog(LOG_DEBUG, "%s: assigned id", e->e_id);
@@ -1445,8 +1514,8 @@ setctluser(user)
        **  See if this clears our concept of controlling user.
        */
 
        **  See if this clears our concept of controlling user.
        */
 
-       if (user == NULL)
-               user = "";
+       if (user == NULL || *user == '\0')
+               return NULL;
 
        /*
        **  Set up addr fields for controlling user.
 
        /*
        **  Set up addr fields for controlling user.
index 7af9d5a..bba38f9 100644 (file)
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)readcf.c   8.2 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)readcf.c   8.13 (Berkeley) 10/15/93";
 #endif /* not lint */
 
 # include "sendmail.h"
 #endif /* not lint */
 
 # include "sendmail.h"
+# include <pwd.h>
+# include <grp.h>
 #ifdef NAMED_BIND
 # include <arpa/nameser.h>
 # include <resolv.h>
 #ifdef NAMED_BIND
 # include <arpa/nameser.h>
 # include <resolv.h>
@@ -68,7 +70,9 @@ static char sccsid[] = "@(#)readcf.c  8.2 (Berkeley) 7/13/93";
 **                             Args specify mailer parameters.
 **             Oxvalue         Set option x to value.
 **             Pname=value     Set precedence name to value.
 **                             Args specify mailer parameters.
 **             Oxvalue         Set option x to value.
 **             Pname=value     Set precedence name to value.
-**             Vversioncode    Version level of configuration syntax.
+**             Vversioncode[/vendorcode]
+**                             Version level/vendor name of
+**                             configuration syntax.
 **             Kmapname mapclass arguments....
 **                             Define keyed lookup of a given class.
 **                             Arguments are class dependent.
 **             Kmapname mapclass arguments....
 **                             Define keyed lookup of a given class.
 **                             Arguments are class dependent.
@@ -96,7 +100,10 @@ readcf(cfname, safe, e)
        char *q;
        struct rewrite *rwp = NULL;
        char *bp;
        char *q;
        struct rewrite *rwp = NULL;
        char *bp;
+       auto char *ep;
        int nfuzzy;
        int nfuzzy;
+       char *file;
+       bool optional;
        char buf[MAXLINE];
        register char *p;
        extern char **copyplist();
        char buf[MAXLINE];
        register char *p;
        extern char **copyplist();
@@ -201,6 +208,7 @@ readcf(cfname, safe, e)
                }
 
                /* interpret this line */
                }
 
                /* interpret this line */
+               errno = 0;
                switch (bp[0])
                {
                  case '\0':
                switch (bp[0])
                {
                  case '\0':
@@ -371,7 +379,15 @@ readcf(cfname, safe, e)
                        break;
 
                  case 'S':             /* select rewriting set */
                        break;
 
                  case 'S':             /* select rewriting set */
-                       ruleset = atoi(&bp[1]);
+                       for (p = &bp[1]; isascii(*p) && isspace(*p); p++)
+                               continue;
+                       if (!isascii(*p) || !isdigit(*p))
+                       {
+                               syserr("invalid argument to S line: \"%.20s\"", 
+                                       &bp[1]);
+                               break;
+                       }
+                       ruleset = atoi(p);
                        if (ruleset >= MAXRWSETS || ruleset < 0)
                        {
                                syserr("bad ruleset %d (%d max)", ruleset, MAXRWSETS);
                        if (ruleset >= MAXRWSETS || ruleset < 0)
                        {
                                syserr("bad ruleset %d (%d max)", ruleset, MAXRWSETS);
@@ -381,7 +397,8 @@ readcf(cfname, safe, e)
                        break;
 
                  case 'D':             /* macro definition */
                        break;
 
                  case 'D':             /* macro definition */
-                       define(bp[1], newstr(munchstring(&bp[2], NULL)), e);
+                       p = munchstring(&bp[2], NULL);
+                       define(bp[1], newstr(p), e);
                        break;
 
                  case 'H':             /* required header line */
                        break;
 
                  case 'H':             /* required header line */
@@ -390,7 +407,8 @@ readcf(cfname, safe, e)
 
                  case 'C':             /* word class */
                        /* scan the list of words and set class for all */
 
                  case 'C':             /* word class */
                        /* scan the list of words and set class for all */
-                       for (p = &bp[2]; *p != '\0'; )
+                       expand(&bp[2], exbuf, &exbuf[sizeof exbuf], e);
+                       for (p = exbuf; *p != '\0'; )
                        {
                                register char *wd;
                                char delim;
                        {
                                register char *wd;
                                char delim;
@@ -403,23 +421,27 @@ readcf(cfname, safe, e)
                                delim = *p;
                                *p = '\0';
                                if (wd[0] != '\0')
                                delim = *p;
                                *p = '\0';
                                if (wd[0] != '\0')
-                               {
-                                       if (tTd(37, 2))
-                                               printf("setclass(%c, %s)\n",
-                                                       bp[1], wd);
                                        setclass(bp[1], wd);
                                        setclass(bp[1], wd);
-                               }
                                *p = delim;
                        }
                        break;
 
                  case 'F':             /* word class from file */
                                *p = delim;
                        }
                        break;
 
                  case 'F':             /* word class from file */
-                       /* read list of words from argument or file */
-                       /* read from file */
-                       for (p = &bp[2];
-                            *p != '\0' && !(isascii(*p) && isspace(*p));
-                            p++)
-                               continue;
+                       for (p = &bp[2]; isascii(*p) && isspace(*p); )
+                               p++;
+                       if (p[0] == '-' && p[1] == 'o')
+                       {
+                               optional = TRUE;
+                               while (*p != '\0' && !(isascii(*p) && isspace(*p)))
+                                       p++;
+                               while (isascii(*p) && isspace(*p))
+                                       *p++;
+                       }
+                       else
+                               optional = FALSE;
+                       file = p;
+                       while (*p != '\0' && !(isascii(*p) && isspace(*p)))
+                               p++;
                        if (*p == '\0')
                                p = "%s";
                        else
                        if (*p == '\0')
                                p = "%s";
                        else
@@ -428,7 +450,7 @@ readcf(cfname, safe, e)
                                while (isascii(*++p) && isspace(*p))
                                        continue;
                        }
                                while (isascii(*++p) && isspace(*p))
                                        continue;
                        }
-                       fileclass(bp[1], &bp[2], p, safe);
+                       fileclass(bp[1], file, p, safe, optional);
                        break;
 
 #ifdef XLA
                        break;
 
 #ifdef XLA
@@ -466,7 +488,33 @@ readcf(cfname, safe, e)
                        break;
 
                  case 'V':             /* configuration syntax version */
                        break;
 
                  case 'V':             /* configuration syntax version */
-                       ConfigLevel = atoi(&bp[1]);
+                       for (p = &bp[1]; isascii(*p) && isspace(*p); p++)
+                               continue;
+                       if (!isascii(*p) || !isdigit(*p))
+                       {
+                               syserr("invalid argument to V line: \"%.20s\"", 
+                                       &bp[1]);
+                               break;
+                       }
+                       ConfigLevel = strtol(p, &ep, 10);
+                       if (ConfigLevel >= 5)
+                       {
+                               /* level 5 configs have short name in $w */
+                               p = macvalue('w', e);
+                               if (p != NULL && (p = strchr(p, '.')) != NULL)
+                                       *p = '\0';
+                       }
+                       if (*ep++ == '/')
+                       {
+                               /* extract vendor code */
+                               for (p = ep; isascii(*p) && isalpha(*p); )
+                                       p++;
+                               *p = '\0';
+
+                               if (!setvendor(ep))
+                                       syserr("invalid V line vendor code: \"%s\"",
+                                               ep);
+                       }
                        break;
 
                  case 'K':
                        break;
 
                  case 'K':
@@ -524,6 +572,9 @@ toomany(id, maxcnt)
 **             class -- class to define.
 **             filename -- name of file to read.
 **             fmt -- scanf string to use for match.
 **             class -- class to define.
 **             filename -- name of file to read.
 **             fmt -- scanf string to use for match.
+**             safe -- if set, this is a safe read.
+**             optional -- if set, it is not an error for the file to
+**                     not exist.
 **
 **     Returns:
 **             none
 **
 **     Returns:
 **             none
@@ -534,11 +585,12 @@ toomany(id, maxcnt)
 **                     the named class.
 */
 
 **                     the named class.
 */
 
-fileclass(class, filename, fmt, safe)
+fileclass(class, filename, fmt, safe, optional)
        int class;
        char *filename;
        char *fmt;
        bool safe;
        int class;
        char *filename;
        char *fmt;
        bool safe;
+       bool optional;
 {
        FILE *f;
        struct stat stbuf;
 {
        FILE *f;
        struct stat stbuf;
@@ -546,7 +598,8 @@ fileclass(class, filename, fmt, safe)
 
        if (stat(filename, &stbuf) < 0)
        {
 
        if (stat(filename, &stbuf) < 0)
        {
-               syserr("fileclass: cannot stat %s", filename);
+               if (!optional)
+                       syserr("fileclass: cannot stat %s", filename);
                return;
        }
        if (!S_ISREG(stbuf.st_mode))
                return;
        }
        if (!S_ISREG(stbuf.st_mode))
@@ -984,6 +1037,7 @@ setoption(opt, val, safe, sticky, e)
        extern time_t convtime();
        extern int QueueLA;
        extern int RefuseLA;
        extern time_t convtime();
        extern int QueueLA;
        extern int RefuseLA;
+       extern bool Warn_Q_option;
        extern bool trusteduser();
 
        if (tTd(37, 1))
        extern bool trusteduser();
 
        if (tTd(37, 1))
@@ -1006,7 +1060,7 @@ setoption(opt, val, safe, sticky, e)
 
        if (!safe && RealUid == 0)
                safe = TRUE;
 
        if (!safe && RealUid == 0)
                safe = TRUE;
-       if (!safe && strchr("bdeEijLmoprsvC7", opt) == NULL)
+       if (!safe && strchr("bCdeEijLmoprsvw7", opt) == NULL)
        {
                if (opt != 'M' || (val[0] != 'r' && val[0] != 's'))
                {
        {
                if (opt != 'M' || (val[0] != 'r' && val[0] != 's'))
                {
@@ -1130,7 +1184,19 @@ setoption(opt, val, safe, sticky, e)
                break;
 
          case 'g':             /* default gid */
                break;
 
          case 'g':             /* default gid */
-               DefGid = atoi(val);
+               if (isascii(*val) && isdigit(*val))
+                       DefGid = atoi(val);
+               else
+               {
+                       register struct group *gr;
+
+                       DefGid = -1;
+                       gr = getgrnam(val);
+                       if (gr == NULL)
+                               syserr("readcf: option g: unknown group %s", val);
+                       else
+                               DefGid = gr->gr_gid;
+               }
                break;
 
          case 'H':             /* help file */
                break;
 
          case 'H':             /* help file */
@@ -1212,7 +1278,8 @@ setoption(opt, val, safe, sticky, e)
                break;
 
          case 'L':             /* log level */
                break;
 
          case 'L':             /* log level */
-               LogLevel = atoi(val);
+               if (safe || LogLevel < atoi(val))
+                       LogLevel = atoi(val);
                break;
 
          case 'M':             /* define macro */
                break;
 
          case 'M':             /* define macro */
@@ -1283,7 +1350,7 @@ setoption(opt, val, safe, sticky, e)
                else
                        QueueDir = newstr(val);
                if (RealUid != 0 && !safe)
                else
                        QueueDir = newstr(val);
                if (RealUid != 0 && !safe)
-                       auth_warning(e, "Processed from queue %s", QueueDir);
+                       Warn_Q_option = TRUE;
                break;
 
          case 'R':             /* don't prune routes */
                break;
 
          case 'R':             /* don't prune routes */
@@ -1324,7 +1391,19 @@ setoption(opt, val, safe, sticky, e)
                break;
 
          case 'u':             /* set default uid */
                break;
 
          case 'u':             /* set default uid */
-               DefUid = atoi(val);
+               if (isascii(*val) && isdigit(*val))
+                       DefUid = atoi(val);
+               else
+               {
+                       register struct passwd *pw;
+
+                       DefUid = -1;
+                       pw = getpwnam(val);
+                       if (pw == NULL)
+                               syserr("readcf: option u: unknown user %s", val);
+                       else
+                               DefUid = pw->pw_uid;
+               }
                setdefuser();
                break;
 
                setdefuser();
                break;
 
@@ -1336,7 +1415,9 @@ setoption(opt, val, safe, sticky, e)
                Verbose = atobool(val);
                break;
 
                Verbose = atobool(val);
                break;
 
-           /* 'w' available -- was "no wildcard MX matching" */
+         case 'w':             /* if we are best MX, try host directly */
+               TryNullMXList = atobool(val);
+               break;
 
            /* 'W' available -- was wizard password */
 
 
            /* 'W' available -- was wizard password */
 
@@ -1392,7 +1473,7 @@ setclass(class, word)
        register STAB *s;
 
        if (tTd(37, 8))
        register STAB *s;
 
        if (tTd(37, 8))
-               printf("%s added to class %c\n", word, class);
+               printf("setclass(%c, %s)\n", class, word);
        s = stab(word, ST_CLASS, ST_ENTER);
        setbitn(class, s->s_class);
 }
        s = stab(word, ST_CLASS, ST_ENTER);
        setbitn(class, s->s_class);
 }
@@ -1417,7 +1498,7 @@ makemapentry(line)
        register char *p;
        char *mapname;
        char *classname;
        register char *p;
        char *mapname;
        char *classname;
-       register STAB *map;
+       register STAB *s;
        STAB *class;
 
        for (p = line; isascii(*p) && isspace(*p); p++)
        STAB *class;
 
        for (p = line; isascii(*p) && isspace(*p); p++)
@@ -1457,12 +1538,24 @@ makemapentry(line)
        }
 
        /* enter the map */
        }
 
        /* enter the map */
-       map = stab(mapname, ST_MAP, ST_ENTER);
-       map->s_map.map_class = &class->s_mapclass;
-       map->s_map.map_mname = newstr(mapname);
+       s = stab(mapname, ST_MAP, ST_ENTER);
+       s->s_map.map_class = &class->s_mapclass;
+       s->s_map.map_mname = newstr(mapname);
+
+       if (class->s_mapclass.map_parse(&s->s_map, p))
+               s->s_map.map_mflags |= MF_VALID;
 
 
-       if (class->s_mapclass.map_parse(&map->s_map, p))
-               map->s_map.map_mflags |= MF_VALID;
+       if (tTd(37, 5))
+       {
+               printf("map %s, class %s, flags %x, file %s,\n",
+                       s->s_map.map_mname, s->s_map.map_class->map_cname,
+                       s->s_map.map_mflags,
+                       s->s_map.map_file == NULL ? "(null)" : s->s_map.map_file);
+               printf("\tapp %s, domain %s, rebuild %s\n",
+                       s->s_map.map_app == NULL ? "(null)" : s->s_map.map_app,
+                       s->s_map.map_domain == NULL ? "(null)" : s->s_map.map_domain,
+                       s->s_map.map_rebuild == NULL ? "(null)" : s->s_map.map_rebuild);
+       }
 }
 \f/*
 **  SETTIMEOUTS -- parse and set timeout values
 }
 \f/*
 **  SETTIMEOUTS -- parse and set timeout values
@@ -1478,6 +1571,7 @@ makemapentry(line)
 **             Initializes the TimeOuts structure
 */
 
 **             Initializes the TimeOuts structure
 */
 
+#define SECONDS
 #define MINUTES        * 60
 #define HOUR   * 3600
 
 #define MINUTES        * 60
 #define HOUR   * 3600
 
@@ -1500,6 +1594,7 @@ settimeouts(val)
                TimeOuts.to_quit = (time_t) 2 MINUTES;
                TimeOuts.to_nextcommand = (time_t) 1 HOUR;
                TimeOuts.to_miscshort = (time_t) 2 MINUTES;
                TimeOuts.to_quit = (time_t) 2 MINUTES;
                TimeOuts.to_nextcommand = (time_t) 1 HOUR;
                TimeOuts.to_miscshort = (time_t) 2 MINUTES;
+               TimeOuts.to_ident = (time_t) 30 SECONDS;
                return;
        }
 
                return;
        }
 
@@ -1560,6 +1655,8 @@ settimeouts(val)
                                TimeOuts.to_quit = to;
                        else if (strcasecmp(val, "misc") == 0)
                                TimeOuts.to_miscshort = to;
                                TimeOuts.to_quit = to;
                        else if (strcasecmp(val, "misc") == 0)
                                TimeOuts.to_miscshort = to;
+                       else if (strcasecmp(val, "ident") == 0)
+                               TimeOuts.to_ident = to;
                        else
                                syserr("settimeouts: invalid timeout %s", val);
                }
                        else
                                syserr("settimeouts: invalid timeout %s", val);
                }
index bcdf5bf..375a8bf 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)recipient.c        8.3 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)recipient.c        8.19 (Berkeley) 9/29/93";
 #endif /* not lint */
 
 # include "sendmail.h"
 #endif /* not lint */
 
 # include "sendmail.h"
@@ -75,6 +75,13 @@ sendtolist(list, ctladdr, sendq, e)
        bool firstone;          /* set on first address sent */
        char delimiter;         /* the address delimiter */
        int naddrs;
        bool firstone;          /* set on first address sent */
        char delimiter;         /* the address delimiter */
        int naddrs;
+       char *oldto = e->e_to;
+
+       if (list == NULL)
+       {
+               syserr("sendtolist: null list");
+               return 0;
+       }
 
        if (tTd(25, 1))
        {
 
        if (tTd(25, 1))
        {
@@ -103,7 +110,7 @@ sendtolist(list, ctladdr, sendq, e)
                /* parse the address */
                while ((isascii(*p) && isspace(*p)) || *p == ',')
                        p++;
                /* parse the address */
                while ((isascii(*p) && isspace(*p)) || *p == ',')
                        p++;
-               a = parseaddr(p, (ADDRESS *) NULL, 1, delimiter, &delimptr, e);
+               a = parseaddr(p, NULLADDR, RF_COPYALL, delimiter, &delimptr, e);
                p = delimptr;
                if (a == NULL)
                        continue;
                p = delimptr;
                if (a == NULL)
                        continue;
@@ -135,7 +142,7 @@ sendtolist(list, ctladdr, sendq, e)
                naddrs++;
        }
 
                naddrs++;
        }
 
-       e->e_to = NULL;
+       e->e_to = oldto;
        return (naddrs);
 }
 \f/*
        return (naddrs);
 }
 \f/*
@@ -182,6 +189,15 @@ recipient(a, sendq, e)
                printaddr(a, FALSE);
        }
 
                printaddr(a, FALSE);
        }
 
+       /* if this is primary, add it to the original recipient list */
+       if (a->q_alias == NULL)
+       {
+               if (e->e_origrcpt == NULL)
+                       e->e_origrcpt = a->q_paddr;
+               else if (e->e_origrcpt != a->q_paddr)
+                       e->e_origrcpt = "";
+       }
+
        /* break aliasing loops */
        if (AliasLevel > MAXRCRSN)
        {
        /* break aliasing loops */
        if (AliasLevel > MAXRCRSN)
        {
@@ -210,7 +226,7 @@ recipient(a, sendq, e)
            !bitset(EF_QUEUERUN, e->e_flags))
        {
                a->q_flags |= QBADADDR;
            !bitset(EF_QUEUERUN, e->e_flags))
        {
                a->q_flags |= QBADADDR;
-               usrerr("550 Cannot mail directly to programs", m->m_name);
+               usrerr("550 Cannot mail directly to programs");
        }
 
        /*
        }
 
        /*
@@ -237,7 +253,8 @@ recipient(a, sendq, e)
                                        message("duplicate suppressed");
                                q->q_flags |= a->q_flags;
                        }
                                        message("duplicate suppressed");
                                q->q_flags |= a->q_flags;
                        }
-                       return (q);
+                       a = q;
+                       goto testselfdestruct;
                }
        }
 
                }
        }
 
@@ -254,7 +271,7 @@ recipient(a, sendq, e)
                printf("at trylocaluser %s\n", a->q_user);
 
        if (bitset(QDONTSEND|QBADADDR|QVERIFIED, a->q_flags))
                printf("at trylocaluser %s\n", a->q_user);
 
        if (bitset(QDONTSEND|QBADADDR|QVERIFIED, a->q_flags))
-               return (a);
+               goto testselfdestruct;
 
        if (m == InclMailer)
        {
 
        if (m == InclMailer)
        {
@@ -277,15 +294,15 @@ recipient(a, sendq, e)
                                        syslog(LOG_ERR, "%s: include %s: transient error: %e",
                                                e->e_id, a->q_user, errstring(ret));
 #endif
                                        syslog(LOG_ERR, "%s: include %s: transient error: %e",
                                                e->e_id, a->q_user, errstring(ret));
 #endif
-                               a->q_flags |= QQUEUEUP|QDONTSEND;
+                               a->q_flags |= QQUEUEUP;
                                usrerr("451 Cannot open %s: %s",
                                        a->q_user, errstring(ret));
                        }
                        else if (ret != 0)
                        {
                                usrerr("451 Cannot open %s: %s",
                                        a->q_user, errstring(ret));
                        }
                        else if (ret != 0)
                        {
+                               a->q_flags |= QBADADDR;
                                usrerr("550 Cannot open %s: %s",
                                        a->q_user, errstring(ret));
                                usrerr("550 Cannot open %s: %s",
                                        a->q_user, errstring(ret));
-                               a->q_flags |= QBADADDR;
                        }
                }
        }
                        }
                }
        }
@@ -302,7 +319,7 @@ recipient(a, sendq, e)
                        usrerr("550 Cannot mail directly to files");
                }
                else if ((stat(buf, &stb) >= 0) ? (!writable(&stb)) :
                        usrerr("550 Cannot mail directly to files");
                }
                else if ((stat(buf, &stb) >= 0) ? (!writable(&stb)) :
-                   (*p = '\0', safefile(buf, RealUid, TRUE, S_IWRITE|S_IEXEC) != 0))
+                   (*p = '\0', safefile(buf, RealUid, RealGid, NULL, TRUE, S_IWRITE|S_IEXEC) != 0))
                {
                        a->q_flags |= QBADADDR;
                        giveresponse(EX_CANTCREAT, m, NULL, e);
                {
                        a->q_flags |= QBADADDR;
                        giveresponse(EX_CANTCREAT, m, NULL, e);
@@ -313,7 +330,7 @@ recipient(a, sendq, e)
        {
                if (!bitset(QDONTSEND, a->q_flags))
                        e->e_nrcpts++;
        {
                if (!bitset(QDONTSEND, a->q_flags))
                        e->e_nrcpts++;
-               return (a);
+               goto testselfdestruct;
        }
 
        /* try aliasing */
        }
 
        /* try aliasing */
@@ -328,7 +345,7 @@ recipient(a, sendq, e)
 
                if (udbexpand(a, sendq, e) == EX_TEMPFAIL)
                {
 
                if (udbexpand(a, sendq, e) == EX_TEMPFAIL)
                {
-                       a->q_flags |= QQUEUEUP|QDONTSEND;
+                       a->q_flags |= QQUEUEUP;
                        if (e->e_message == NULL)
                                e->e_message = newstr("Deferred: user database error");
 # ifdef LOG
                        if (e->e_message == NULL)
                                e->e_message = newstr("Deferred: user database error");
 # ifdef LOG
@@ -339,14 +356,14 @@ recipient(a, sendq, e)
                        message("queued (user database error): %s",
                                errstring(errno));
                        e->e_nrcpts++;
                        message("queued (user database error): %s",
                                errstring(errno));
                        e->e_nrcpts++;
-                       return (a);
+                       goto testselfdestruct;
                }
        }
 # endif
 
        /* if it was an alias or a UDB expansion, just return now */
        if (bitset(QDONTSEND|QQUEUEUP|QVERIFIED, a->q_flags))
                }
        }
 # endif
 
        /* if it was an alias or a UDB expansion, just return now */
        if (bitset(QDONTSEND|QQUEUEUP|QVERIFIED, a->q_flags))
-               return (a);
+               goto testselfdestruct;
 
        /*
        **  If we have a level two config file, then pass the name through
 
        /*
        **  If we have a level two config file, then pass the name through
@@ -419,6 +436,25 @@ recipient(a, sendq, e)
        }
        if (!bitset(QDONTSEND, a->q_flags))
                e->e_nrcpts++;
        }
        if (!bitset(QDONTSEND, a->q_flags))
                e->e_nrcpts++;
+
+  testselfdestruct:
+       if (tTd(26, 8))
+       {
+               printf("testselfdestruct: ");
+               printaddr(a, TRUE);
+       }
+       if (a->q_alias == NULL && a != &e->e_from &&
+           bitset(QDONTSEND, a->q_flags))
+       {
+               q = *sendq;
+               while (q != NULL && bitset(QDONTSEND, q->q_flags))
+                       q = q->q_next;
+               if (q == NULL)
+               {
+                       a->q_flags |= QBADADDR;
+                       usrerr("554 aliasing/forwarding loop broken");
+               }
+       }
        return (a);
 }
 \f/*
        return (a);
 }
 \f/*
@@ -459,6 +495,17 @@ finduser(name, fuzzyp)
 
        *fuzzyp = FALSE;
 
 
        *fuzzyp = FALSE;
 
+       /* DEC Hesiod getpwnam accepts numeric strings -- short circuit it */
+       for (p = name; *p != '\0'; p++)
+               if (!isascii(*p) || !isdigit(*p))
+                       break;
+       if (*p == '\0')
+       {
+               if (tTd(29, 4))
+                       printf("failed (numeric input)\n");
+               return NULL;
+       }
+
        /* look up this login name using fast path */
        if ((pw = getpwnam(name)) != NULL)
        {
        /* look up this login name using fast path */
        if ((pw = getpwnam(name)) != NULL)
        {
@@ -580,6 +627,7 @@ writable(s)
 */
 
 static jmp_buf CtxIncludeTimeout;
 */
 
 static jmp_buf CtxIncludeTimeout;
+static int     includetimeout();
 
 int
 include(fname, forwarding, ctladdr, sendq, e)
 
 int
 include(fname, forwarding, ctladdr, sendq, e)
@@ -589,92 +637,141 @@ include(fname, forwarding, ctladdr, sendq, e)
        ADDRESS **sendq;
        ENVELOPE *e;
 {
        ADDRESS **sendq;
        ENVELOPE *e;
 {
-       register FILE *fp;
+       register FILE *fp = NULL;
        char *oldto = e->e_to;
        char *oldfilename = FileName;
        int oldlinenumber = LineNumber;
        register EVENT *ev = NULL;
        int nincludes;
        char *oldto = e->e_to;
        char *oldfilename = FileName;
        int oldlinenumber = LineNumber;
        register EVENT *ev = NULL;
        int nincludes;
-       int ret;
-       ADDRESS *ca;
-       uid_t uid;
+       register ADDRESS *ca;
+       uid_t saveduid, uid;
+       gid_t savedgid, gid;
+       char *uname;
+       int rval = 0;
        char buf[MAXLINE];
        char buf[MAXLINE];
-       static int includetimeout();
 
        if (tTd(27, 2))
                printf("include(%s)\n", fname);
 
        if (tTd(27, 2))
                printf("include(%s)\n", fname);
+       if (tTd(27, 4))
+               printf("   ruid=%d euid=%d\n", getuid(), geteuid());
        if (tTd(27, 14))
        {
                printf("ctladdr ");
                printaddr(ctladdr, FALSE);
        }
 
        if (tTd(27, 14))
        {
                printf("ctladdr ");
                printaddr(ctladdr, FALSE);
        }
 
-       /*
-       **  If home directory is remote mounted but server is down,
-       **  this can hang or give errors; use a timeout to avoid this
-       */
+       if (tTd(27, 9))
+               printf("include: old uid = %d/%d\n", getuid(), geteuid());
 
        ca = getctladdr(ctladdr);
        if (ca == NULL)
 
        ca = getctladdr(ctladdr);
        if (ca == NULL)
+       {
                uid = 0;
                uid = 0;
+               gid = 0;
+               uname = NULL;
+               saveduid = -1;
+       }
        else
        else
+       {
                uid = ca->q_uid;
                uid = ca->q_uid;
+               gid = ca->q_gid;
+               uname = ca->q_user;
+#ifdef HASSETREUID
+               saveduid = geteuid();
+               savedgid = getegid();
+               if (saveduid == 0)
+               {
+                       initgroups(uname, gid);
+                       if (uid != 0)
+                               (void) setreuid(0, uid);
+               }
+#endif                   
+       }
+
+       if (tTd(27, 9))
+               printf("include: new uid = %d/%d\n", getuid(), geteuid());
+
+       /*
+       **  If home directory is remote mounted but server is down,
+       **  this can hang or give errors; use a timeout to avoid this
+       */
 
        if (setjmp(CtxIncludeTimeout) != 0)
        {
 
        if (setjmp(CtxIncludeTimeout) != 0)
        {
-               ctladdr->q_flags |= QQUEUEUP|QDONTSEND;
+               ctladdr->q_flags |= QQUEUEUP;
                errno = 0;
                usrerr("451 open timeout on %s", fname);
                errno = 0;
                usrerr("451 open timeout on %s", fname);
-               return ETIMEDOUT;
+
+               /* return pseudo-error code */
+               rval = EOPENTIMEOUT;
+               goto resetuid;
        }
        ev = setevent((time_t) 60, includetimeout, 0);
 
        /* the input file must be marked safe */
        }
        ev = setevent((time_t) 60, includetimeout, 0);
 
        /* the input file must be marked safe */
-       if ((ret = safefile(fname, uid, forwarding, S_IREAD)) != 0)
+       rval = safefile(fname, uid, gid, uname, forwarding, S_IREAD);
+       if (rval != 0)
        {
        {
-               /* don't use this .forward file */
+               /* don't use this :include: file */
                clrevent(ev);
                if (tTd(27, 4))
                        printf("include: not safe (uid=%d): %s\n",
                clrevent(ev);
                if (tTd(27, 4))
                        printf("include: not safe (uid=%d): %s\n",
-                               uid, errstring(ret));
-               return ret;
+                               uid, errstring(rval));
+               goto resetuid;
        }
 
        fp = fopen(fname, "r");
        if (fp == NULL)
        {
        }
 
        fp = fopen(fname, "r");
        if (fp == NULL)
        {
-               int ret = errno;
-
-               clrevent(ev);
-               return ret;
+               rval = errno;
+               if (tTd(27, 4))
+                       printf("include: open: %s\n", errstring(rval));
        }
        }
-
-       if (ca == NULL)
+       else if (ca == NULL)
        {
                struct stat st;
 
                if (fstat(fileno(fp), &st) < 0)
                {
        {
                struct stat st;
 
                if (fstat(fileno(fp), &st) < 0)
                {
-                       int ret = errno;
-
-                       clrevent(ev);
+                       rval = errno;
                        syserr("Cannot fstat %s!", fname);
                        syserr("Cannot fstat %s!", fname);
-                       return ret;
                }
                }
-               ctladdr->q_uid = st.st_uid;
-               ctladdr->q_gid = st.st_gid;
-               ctladdr->q_flags |= QGOODUID;
+               else
+               {
+                       ctladdr->q_uid = st.st_uid;
+                       ctladdr->q_gid = st.st_gid;
+                       ctladdr->q_flags |= QGOODUID;
+               }
        }
 
        clrevent(ev);
 
        }
 
        clrevent(ev);
 
+resetuid:
+
+#ifdef HASSETREUID
+       if (saveduid == 0)
+       {
+               if (uid != 0)
+                       if (setreuid(-1, 0) < 0 || setreuid(RealUid, 0) < 0)
+                               syserr("setreuid(%d, 0) failure (real=%d, eff=%d)",
+                                       RealUid, getuid(), geteuid());
+               setgid(savedgid);
+       }
+#endif
+
+       if (tTd(27, 9))
+               printf("include: reset uid = %d/%d\n", getuid(), geteuid());
+
+       if (fp == NULL)
+               return rval;
+
        if (bitset(EF_VRFYONLY, e->e_flags))
        {
                /* don't do any more now */
                ctladdr->q_flags |= QVERIFIED;
                e->e_nrcpts++;
                xfclose(fp, "include", fname);
        if (bitset(EF_VRFYONLY, e->e_flags))
        {
                /* don't do any more now */
                ctladdr->q_flags |= QVERIFIED;
                e->e_nrcpts++;
                xfclose(fp, "include", fname);
-               return 0;
+               return rval;
        }
 
        /* read the file -- each line is a comma-separated list. */
        }
 
        /* read the file -- each line is a comma-separated list. */
@@ -704,6 +801,9 @@ include(fname, forwarding, ctladdr, sendq, e)
                nincludes += sendtolist(buf, ctladdr, sendq, e);
                AliasLevel--;
        }
                nincludes += sendtolist(buf, ctladdr, sendq, e);
                AliasLevel--;
        }
+
+       if (ferror(fp) && tTd(27, 3))
+               printf("include: read error: %s\n", errstring(errno));
        if (nincludes > 0 && !bitset(QSELFREF, ctladdr->q_flags))
        {
                if (tTd(27, 5))
        if (nincludes > 0 && !bitset(QSELFREF, ctladdr->q_flags))
        {
                if (tTd(27, 5))
@@ -717,7 +817,8 @@ include(fname, forwarding, ctladdr, sendq, e)
        (void) xfclose(fp, "include", fname);
        FileName = oldfilename;
        LineNumber = oldlinenumber;
        (void) xfclose(fp, "include", fname);
        FileName = oldfilename;
        LineNumber = oldlinenumber;
-       return 0;
+       e->e_to = oldto;
+       return rval;
 }
 
 static
 }
 
 static
@@ -748,7 +849,7 @@ sendtoargv(argv, e)
 
        while ((p = *argv++) != NULL)
        {
 
        while ((p = *argv++) != NULL)
        {
-               (void) sendtolist(p, (ADDRESS *) NULL, &e->e_sendqueue, e);
+               (void) sendtolist(p, NULLADDR, &e->e_sendqueue, e);
        }
 }
 \f/*
        }
 }
 \f/*
index f47fc4e..23b89d9 100644 (file)
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)savemail.c 8.3 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)savemail.c 8.16 (Berkeley) 10/21/93";
 #endif /* not lint */
 
 #endif /* not lint */
 
-# include <pwd.h>
 # include "sendmail.h"
 # include "sendmail.h"
+# include <pwd.h>
 
 /*
 **  SAVEMAIL -- Save mail on error
 
 /*
 **  SAVEMAIL -- Save mail on error
@@ -96,8 +96,6 @@ savemail(e)
                return;
        }
 
                return;
        }
 
-       e->e_flags &= ~EF_FATALERRS;
-
        /*
        **  In the unhappy event we don't know who to return the mail
        **  to, make someone up.
        /*
        **  In the unhappy event we don't know who to return the mail
        **  to, make someone up.
@@ -106,7 +104,8 @@ savemail(e)
        if (e->e_from.q_paddr == NULL)
        {
                e->e_sender = "Postmaster";
        if (e->e_from.q_paddr == NULL)
        {
                e->e_sender = "Postmaster";
-               if (parseaddr(e->e_sender, &e->e_from, 0, '\0', NULL, e) == NULL)
+               if (parseaddr(e->e_sender, &e->e_from,
+                             RF_COPYPARSE|RF_SENDERADDR, '\0', NULL, e) == NULL)
                {
                        syserr("553 Cannot parse Postmaster!");
                        ExitStat = EX_SOFTWARE;
                {
                        syserr("553 Cannot parse Postmaster!");
                        ExitStat = EX_SOFTWARE;
@@ -238,24 +237,36 @@ savemail(e)
                        **      joe@x, which gives a response, etc.  Also force
                        **      the mail to be delivered even if a version of
                        **      it has already been sent to the sender.
                        **      joe@x, which gives a response, etc.  Also force
                        **      the mail to be delivered even if a version of
                        **      it has already been sent to the sender.
+                       **
+                       **  If this is a configuration or local software
+                       **      error, send to the local postmaster as well,
+                       **      since the originator can't do anything
+                       **      about it anyway.  Note that this is a full
+                       **      copy of the message (intentionally) so that
+                       **      the Postmaster can forward things along.
                        */
 
                        */
 
+                       if (ExitStat == EX_CONFIG || ExitStat == EX_SOFTWARE)
+                       {
+                               (void) sendtolist("postmaster",
+                                         NULLADDR, &e->e_errorqueue, e);
+                       }
                        if (strcmp(e->e_from.q_paddr, "<>") != 0)
                        if (strcmp(e->e_from.q_paddr, "<>") != 0)
+                       {
                                (void) sendtolist(e->e_from.q_paddr,
                                (void) sendtolist(e->e_from.q_paddr,
-                                         (ADDRESS *) NULL,
-                                         &e->e_errorqueue, e);
+                                         NULLADDR, &e->e_errorqueue, e);
+                       }
 
 
-                       /* deliver a cc: to the postmaster if desired */
-                       if (PostMasterCopy != NULL)
-                       {
-                               auto ADDRESS *rlist = NULL;
+                       /*
+                       **  Deliver a non-delivery report to the
+                       **  Postmaster-designate (not necessarily
+                       **  Postmaster).  This does not include the
+                       **  body of the message, for privacy reasons.
+                       **  You really shouldn't need this.
+                       */
+
+                       e->e_flags |= EF_PM_NOTIFY;
 
 
-                               (void) sendtolist(PostMasterCopy,
-                                                 (ADDRESS *) NULL,
-                                                 &rlist, e);
-                               (void) returntosender(e->e_message,
-                                                     rlist, FALSE, e);
-                       }
                        q = e->e_errorqueue;
                        if (q == NULL)
                        {
                        q = e->e_errorqueue;
                        if (q == NULL)
                        {
@@ -335,7 +346,9 @@ savemail(e)
                                e->e_to = buf;
                                q = NULL;
                                (void) sendtolist(buf, &e->e_from, &q, e);
                                e->e_to = buf;
                                q = NULL;
                                (void) sendtolist(buf, &e->e_from, &q, e);
-                               if (deliver(e, q) == 0)
+                               if (q != NULL &&
+                                   !bitset(QBADADDR, q->q_flags) &&
+                                   deliver(e, q) == 0)
                                        state = ESM_DONE;
                                else
                                        state = ESM_MAIL;
                                        state = ESM_DONE;
                                else
                                        state = ESM_MAIL;
@@ -457,12 +470,14 @@ returntosender(msg, returnq, sendbody, e)
        define('_', "localhost", ee);
        ee->e_puthdr = putheader;
        ee->e_putbody = errbody;
        define('_', "localhost", ee);
        ee->e_puthdr = putheader;
        ee->e_putbody = errbody;
-       ee->e_flags |= EF_RESPONSE;
+       ee->e_flags |= EF_RESPONSE|EF_METOO;
        if (!bitset(EF_OLDSTYLE, e->e_flags))
                ee->e_flags &= ~EF_OLDSTYLE;
        ee->e_sendqueue = returnq;
        if (!bitset(EF_OLDSTYLE, e->e_flags))
                ee->e_flags &= ~EF_OLDSTYLE;
        ee->e_sendqueue = returnq;
-       ee->e_msgsize = e->e_msgsize + ERRORFUDGE;
-       openxscript(ee);
+       ee->e_msgsize = ERRORFUDGE;
+       if (!NoReturn)
+               ee->e_msgsize += e->e_msgsize;
+       initsys(ee);
        for (q = returnq; q != NULL; q = q->q_next)
        {
                if (bitset(QBADADDR, q->q_flags))
        for (q = returnq; q != NULL; q = q->q_next)
        {
                if (bitset(QBADADDR, q->q_flags))
@@ -472,7 +487,7 @@ returntosender(msg, returnq, sendbody, e)
                        ee->e_nrcpts++;
 
                if (!DontPruneRoutes && pruneroute(q->q_paddr))
                        ee->e_nrcpts++;
 
                if (!DontPruneRoutes && pruneroute(q->q_paddr))
-                       parseaddr(q->q_paddr, q, 0, '\0', NULL, e);
+                       parseaddr(q->q_paddr, q, RF_COPYPARSE, '\0', NULL, e);
 
                if (q->q_alias == NULL)
                        addheader("To", q->q_paddr, ee);
 
                if (q->q_alias == NULL)
                        addheader("To", q->q_paddr, ee);
@@ -499,7 +514,7 @@ returntosender(msg, returnq, sendbody, e)
 
        /* fake up an address header for the from person */
        expand("\201n", buf, &buf[sizeof buf - 1], e);
 
        /* fake up an address header for the from person */
        expand("\201n", buf, &buf[sizeof buf - 1], e);
-       if (parseaddr(buf, &ee->e_from, 1, '\0', NULL, e) == NULL)
+       if (parseaddr(buf, &ee->e_from, RF_COPYALL|RF_SENDERADDR, '\0', NULL, e) == NULL)
        {
                syserr("553 Can't parse myself!");
                ExitStat = EX_SOFTWARE;
        {
                syserr("553 Can't parse myself!");
                ExitStat = EX_SOFTWARE;
@@ -515,7 +530,7 @@ returntosender(msg, returnq, sendbody, e)
        eatheader(ee, TRUE);
 
        /* mark statistics */
        eatheader(ee, TRUE);
 
        /* mark statistics */
-       markstats(ee, (ADDRESS *) NULL);
+       markstats(ee, NULLADDR);
 
        /* actually deliver the error message */
        sendall(ee, SM_DEFAULT);
 
        /* actually deliver the error message */
        sendall(ee, SM_DEFAULT);
@@ -577,6 +592,32 @@ errbody(fp, m, e)
                putline("", fp, m);
        }
 
                putline("", fp, m);
        }
 
+       /*
+       **  Output introductory information.
+       */
+
+       for (q = e->e_parent->e_sendqueue; q != NULL; q = q->q_next)
+               if (bitset(QBADADDR, q->q_flags))
+                       break;
+       if (q == NULL && !bitset(EF_FATALERRS, e->e_parent->e_flags))
+       {
+               putline("    **********************************************",
+                       fp, m);
+               putline("    **      THIS IS A WARNING MESSAGE ONLY      **",
+                       fp, m);
+               putline("    **  YOU DO NOT NEED TO RESEND YOUR MESSAGE  **",
+                       fp, m);
+               putline("    **********************************************",
+                       fp, m);
+               putline("", fp, m);
+       }
+       sprintf(buf, "The original message was received at %s",
+               arpadate(ctime(&e->e_parent->e_ctime)));
+       putline(buf, fp, m);
+       expand("from \201_", buf, &buf[sizeof buf - 1], e->e_parent);
+       putline(buf, fp, m);
+       putline("", fp, m);
+
        /*
        **  Output error message header (if specified and available).
        */
        /*
        **  Output error message header (if specified and available).
        */
@@ -620,15 +661,19 @@ errbody(fp, m, e)
                                        fp, m);
                                printheader = FALSE;
                        }
                                        fp, m);
                                printheader = FALSE;
                        }
-                       if (q->q_alias != NULL)
-                               strcpy(buf, q->q_alias->q_paddr);
-                       else
-                               strcpy(buf, q->q_paddr);
+                       strcpy(buf, q->q_paddr);
                        if (bitset(QBADADDR, q->q_flags))
                        if (bitset(QBADADDR, q->q_flags))
-                               strcat(buf, "  (hard error -- address deleted)");
+                               strcat(buf, "  (unrecoverable error)");
                        else
                        else
-                               strcat(buf, "  (temporary failure -- will retry)");
+                               strcat(buf, "  (transient failure)");
                        putline(buf, fp, m);
                        putline(buf, fp, m);
+                       if (q->q_alias != NULL)
+                       {
+                               strcpy(buf, "    (expanded from: ");
+                               strcat(buf, q->q_alias->q_paddr);
+                               strcat(buf, ")");
+                               putline(buf, fp, m);
+                       }
                }
        }
        if (!printheader)
                }
        }
        if (!printheader)
@@ -666,7 +711,7 @@ errbody(fp, m, e)
        if (e->e_parent->e_df != NULL)
        {
                if (SendBody)
        if (e->e_parent->e_df != NULL)
        {
                if (SendBody)
-                       putline("   ----- Unsent message follows -----\n", fp, m);
+                       putline("   ----- Original message follows -----\n", fp, m);
                else
                        putline("   ----- Message header follows -----\n", fp, m);
                (void) fflush(fp);
                else
                        putline("   ----- Message header follows -----\n", fp, m);
                (void) fflush(fp);
index c2e0678..ee176f3 100644 (file)
@@ -29,9 +29,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"     @(#)sendmail.8 8.2 (Berkeley) 7/11/93
+.\"     @(#)sendmail.8 8.3 (Berkeley) 8/20/93
 .\"
 .\"
-.Dd July 11, 1993
+.Dd August 20, 1993
 .Dt SENDMAIL 8
 .Os BSD 4
 .Sh NAME
 .Dt SENDMAIL 8
 .Os BSD 4
 .Sh NAME
@@ -132,13 +132,10 @@ it is used for debugging configuration tables.
 Verify names only \- do not try to collect or deliver a message.
 Verify mode is normally used for validating
 users or mailing lists.
 Verify names only \- do not try to collect or deliver a message.
 Verify mode is normally used for validating
 users or mailing lists.
-.It Fl bz
-Create the configuration freeze file.
 .It Fl C Ns Ar file
 Use alternate configuration file.
 .Nm Sendmail
 refuses to run as root if an alternate configuration file is specified.
 .It Fl C Ns Ar file
 Use alternate configuration file.
 .Nm Sendmail
 refuses to run as root if an alternate configuration file is specified.
-The frozen configuration file is bypassed.
 .It Fl d Ns Ar X
 Set debugging value to
 .Ar X .
 .It Fl d Ns Ar X
 Set debugging value to
 .Ar X .
@@ -463,8 +460,6 @@ raw data for alias names
 data base of alias names
 .It Pa /etc/sendmail.cf
 configuration file
 data base of alias names
 .It Pa /etc/sendmail.cf
 configuration file
-.It Pa /etc/sendmail.fc
-frozen configuration
 .It Pa /etc/sendmail.hf
 help file
 .It Pa /var/log/sendmail.st
 .It Pa /etc/sendmail.hf
 help file
 .It Pa /var/log/sendmail.st
@@ -491,12 +486,12 @@ Internet Request For Comments
 .Rs
 .%T "Sendmail \- An Internetwork Mail Router"
 .%V SMM
 .Rs
 .%T "Sendmail \- An Internetwork Mail Router"
 .%V SMM
-.%N \&No. 16
+.%N \&No. 9
 .Re
 .Rs
 .%T "Sendmail Installation and Operation Guide"
 .%V SMM
 .Re
 .Rs
 .%T "Sendmail Installation and Operation Guide"
 .%V SMM
-.%N \&No. 7
+.%N \&No. 8
 .Re
 .Sh HISTORY
 The
 .Re
 .Sh HISTORY
 The
index ef9107e..469b871 100644 (file)
@@ -31,7 +31,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)sendmail.h  8.3 (Berkeley) 7/13/93
+ *     @(#)sendmail.h  8.24 (Berkeley) 10/15/93
  */
 
 /*
  */
 
 /*
@@ -41,7 +41,7 @@
 # ifdef _DEFINE
 # define EXTERN
 # ifndef lint
 # ifdef _DEFINE
 # define EXTERN
 # ifndef lint
-static char SmailSccsId[] =    "@(#)sendmail.h 8.3             7/13/93";
+static char SmailSccsId[] =    "@(#)sendmail.h 8.24            10/15/93";
 # endif
 # else /*  _DEFINE */
 # define EXTERN extern
 # endif
 # else /*  _DEFINE */
 # define EXTERN extern
@@ -147,6 +147,8 @@ typedef struct address ADDRESS;
 # define QSELFREF      000200  /* this address references itself */
 # define QVERIFIED     000400  /* verified, but not expanded */
 # define QREPORT       001000  /* report this address in return message */
 # define QSELFREF      000200  /* this address references itself */
 # define QVERIFIED     000400  /* verified, but not expanded */
 # define QREPORT       001000  /* report this address in return message */
+
+# define NULLADDR      ((ADDRESS *) NULL)
 \f/*
 **  Mailer definition structure.
 **     Every mailer known to the system is declared in this
 \f/*
 **  Mailer definition structure.
 **     Every mailer known to the system is declared in this
@@ -190,14 +192,14 @@ typedef struct mailer     MAILER;
                /*      'F'     /* CF: include From: or Resent-From: */
 # define M_NO_NULL_FROM        'g'     /* sender of errors should be $g */
 # define M_HST_UPPER   'h'     /* preserve host case distinction */
                /*      'F'     /* CF: include From: or Resent-From: */
 # define M_NO_NULL_FROM        'g'     /* sender of errors should be $g */
 # define M_HST_UPPER   'h'     /* preserve host case distinction */
-               /*      'H'     /* UIUC: MAIL11V3: preview headers */
+# define M_PREHEAD     'H'     /* MAIL11V3: preview headers */
 # define M_INTERNAL    'I'     /* SMTP to another sendmail site */
 # define M_LOCALMAILER 'l'     /* delivery is to this host */
 # define M_LIMITS      'L'     /* must enforce SMTP line limits */
 # define M_MUSER       'm'     /* can handle multiple users at once */
                /*      'M'     /* CF: include Message-Id: */
 # define M_NHDR                'n'     /* don't insert From line */
 # define M_INTERNAL    'I'     /* SMTP to another sendmail site */
 # define M_LOCALMAILER 'l'     /* delivery is to this host */
 # define M_LIMITS      'L'     /* must enforce SMTP line limits */
 # define M_MUSER       'm'     /* can handle multiple users at once */
                /*      'M'     /* CF: include Message-Id: */
 # define M_NHDR                'n'     /* don't insert From line */
-               /*      'N'     /* UIUC: MAIL11V3: DATA returns multi-status */
+# define M_MANYSTATUS  'N'     /* MAIL11V3: DATA returns multi-status */
 # define M_FROMPATH    'p'     /* use reverse-path in MAIL FROM: */
                /*      'P'     /* CF: include Return-Path: */
 # define M_ROPT                'r'     /* mailer takes picky -r flag */
 # define M_FROMPATH    'p'     /* use reverse-path in MAIL FROM: */
                /*      'P'     /* CF: include Return-Path: */
 # define M_ROPT                'r'     /* mailer takes picky -r flag */
@@ -306,13 +308,13 @@ ENVELOPE
        char            *e_message;     /* error message */
        char            *e_statmsg;     /* stat msg (changes per delivery) */
        char            *e_msgboundary; /* MIME-style message part boundary */
        char            *e_message;     /* error message */
        char            *e_statmsg;     /* stat msg (changes per delivery) */
        char            *e_msgboundary; /* MIME-style message part boundary */
+       char            *e_origrcpt;    /* original recipient (one only) */
        char            *e_macro[128];  /* macro definitions */
 };
 
 /* values for e_flags */
 #define EF_OLDSTYLE    000001          /* use spaces (not commas) in hdrs */
 #define EF_INQUEUE     000002          /* this message is fully queued */
        char            *e_macro[128];  /* macro definitions */
 };
 
 /* values for e_flags */
 #define EF_OLDSTYLE    000001          /* use spaces (not commas) in hdrs */
 #define EF_INQUEUE     000002          /* this message is fully queued */
-#define EF_TIMEOUT     000004          /* this message is too old */
 #define EF_CLRQUEUE    000010          /* disk copy is no longer needed */
 #define EF_SENDRECEIPT 000020          /* send a return receipt */
 #define EF_FATALERRS   000040          /* fatal errors occured */
 #define EF_CLRQUEUE    000010          /* disk copy is no longer needed */
 #define EF_SENDRECEIPT 000020          /* send a return receipt */
 #define EF_FATALERRS   000040          /* fatal errors occured */
@@ -322,6 +324,9 @@ ENVELOPE
 #define EF_VRFYONLY    001000          /* verify only (don't expand aliases) */
 #define EF_WARNING     002000          /* warning message has been sent */
 #define EF_QUEUERUN    004000          /* this envelope is from queue */
 #define EF_VRFYONLY    001000          /* verify only (don't expand aliases) */
 #define EF_WARNING     002000          /* warning message has been sent */
 #define EF_QUEUERUN    004000          /* this envelope is from queue */
+#define EF_GLOBALERRS  010000          /* treat errors as global */
+#define EF_PM_NOTIFY   020000          /* send return mail to postmaster */
+#define EF_METOO       040000          /* send to me too */
 
 EXTERN ENVELOPE        *CurEnv;        /* envelope currently being processed */
 \f/*
 
 EXTERN ENVELOPE        *CurEnv;        /* envelope currently being processed */
 \f/*
@@ -415,7 +420,7 @@ EXTERN struct rewrite       *RewriteRules[MAXRWSETS];
 struct metamac
 {
        char    metaname;       /* external code (after $) */
 struct metamac
 {
        char    metaname;       /* external code (after $) */
-       char    metaval;        /* internal code (as above) */
+       u_char  metaval;        /* internal code (as above) */
 };
 \f/*
 **  Information about currently open connections to mailers, or to
 };
 \f/*
 **  Information about currently open connections to mailers, or to
@@ -450,6 +455,7 @@ MCI
 #define MCIF_EXPN      000020          /* EXPN command supported */
 #define MCIF_SIZE      000040          /* SIZE option supported */
 #define MCIF_8BITMIME  000100          /* BODY=8BITMIME supported */
 #define MCIF_EXPN      000020          /* EXPN command supported */
 #define MCIF_SIZE      000040          /* SIZE option supported */
 #define MCIF_8BITMIME  000100          /* BODY=8BITMIME supported */
+#define MCIF_MULTSTAT  000200          /* MAIL11V3: handles MULT status */
 
 /* states */
 #define MCIS_CLOSED    0               /* no traffic on this connection */
 
 /* states */
 #define MCIS_CLOSED    0               /* no traffic on this connection */
@@ -503,11 +509,12 @@ MAP
        char            *map_mname;     /* name of this map */
        int             map_mflags;     /* flags, see below */
        char            *map_file;      /* the (nominal) filename */
        char            *map_mname;     /* name of this map */
        int             map_mflags;     /* flags, see below */
        char            *map_file;      /* the (nominal) filename */
-       void            *map_db1;       /* the open database ptr */
-       void            *map_db2;       /* an "extra" database pointer */
+       ARBPTR_T        map_db1;        /* the open database ptr */
+       ARBPTR_T        map_db2;        /* an "extra" database pointer */
        char            *map_app;       /* to append to successful matches */
        char            *map_domain;    /* the (nominal) NIS domain */
        char            *map_rebuild;   /* program to run to do auto-rebuild */
        char            *map_app;       /* to append to successful matches */
        char            *map_domain;    /* the (nominal) NIS domain */
        char            *map_rebuild;   /* program to run to do auto-rebuild */
+       time_t          map_mtime;      /* last database modification time */
 };
 
 /* bit values for map_flags */
 };
 
 /* bit values for map_flags */
@@ -521,6 +528,8 @@ MAP
 # define MF_ALIAS      0x0080          /* this is an alias file */
 # define MF_TRY0NULL   0x0100          /* try with no null byte */
 # define MF_TRY1NULL   0x0200          /* try with the null byte */
 # define MF_ALIAS      0x0080          /* this is an alias file */
 # define MF_TRY0NULL   0x0100          /* try with no null byte */
 # define MF_TRY1NULL   0x0200          /* try with the null byte */
+# define MF_LOCKED     0x0400          /* this map is currently locked */
+# define MF_ALIASWAIT  0x0800          /* alias map in aliaswait state */
 # define MF_IMPL_HASH  0x1000          /* implicit: underlying hash database */
 # define MF_IMPL_NDBM  0x2000          /* implicit: underlying NDBM database */
 
 # define MF_IMPL_HASH  0x1000          /* implicit: underlying hash database */
 # define MF_IMPL_NDBM  0x2000          /* implicit: underlying NDBM database */
 
@@ -675,10 +684,6 @@ EXTERN char        OpMode;         /* operation mode, see below */
 */
 
 
 */
 
 
-/* Offset used to ensure that name server error * codes are unique */
-#define        MAX_ERRNO       100
-
-
 /*
 **  Privacy flags
 **     These are bit values for the PrivacyFlags word.
 /*
 **  Privacy flags
 **     These are bit values for the PrivacyFlags word.
@@ -691,7 +696,8 @@ EXTERN char OpMode;         /* operation mode, see below */
 #define PRIV_NOEXPN            00010   /* disallow EXPN command entirely */
 #define PRIV_NOVRFY            00020   /* disallow VRFY command entirely */
 #define PRIV_AUTHWARNINGS      00040   /* flag possible authorization probs */
 #define PRIV_NOEXPN            00010   /* disallow EXPN command entirely */
 #define PRIV_NOVRFY            00020   /* disallow VRFY command entirely */
 #define PRIV_AUTHWARNINGS      00040   /* flag possible authorization probs */
-#define PRIV_RESTRMAILQ                01000   /* restrict mailq command */
+#define PRIV_RESTRICTMAILQ     01000   /* restrict mailq command */
+#define PRIV_RESTRICTQRUN      02000   /* restrict queue run */
 #define PRIV_GOAWAY            00777   /* don't give no info, anyway, anyhow */
 
 /* struct defining such things */
 #define PRIV_GOAWAY            00777   /* don't give no info, anyway, anyhow */
 
 /* struct defining such things */
@@ -703,14 +709,17 @@ struct prival
 
 
 /*
 
 
 /*
-**  Flags passed to remotename
+**  Flags passed to remotename, parseaddr, allocaddr, and buildaddr.
 */
 
 #define RF_SENDERADDR          0001    /* this is a sender address */
 #define RF_HEADERADDR          0002    /* this is a header address */
 #define RF_CANONICAL           0004    /* strip comment information */
 #define RF_ADDDOMAIN           0010    /* OK to do domain extension */
 */
 
 #define RF_SENDERADDR          0001    /* this is a sender address */
 #define RF_HEADERADDR          0002    /* this is a header address */
 #define RF_CANONICAL           0004    /* strip comment information */
 #define RF_ADDDOMAIN           0010    /* OK to do domain extension */
-
+#define RF_COPYPARSE           0020    /* copy parsed user & host */
+#define RF_COPYPADDR           0040    /* copy print address */
+#define RF_COPYALL             (RF_COPYPARSE|RF_COPYPADDR)
+#define RF_COPYNONE            0
 
 /*
 **  Regular UNIX sockaddrs are too small to handle ISO addresses, so
 
 /*
 **  Regular UNIX sockaddrs are too small to handle ISO addresses, so
@@ -735,7 +744,6 @@ union bigsockaddr
 };
 
 #define SOCKADDR       union bigsockaddr
 };
 
 #define SOCKADDR       union bigsockaddr
-
 \f/*
 **  Global variables.
 */
 \f/*
 **  Global variables.
 */
@@ -793,10 +801,12 @@ EXTERN bool       LogUsrErrs;     /* syslog user errors (e.g., SMTP RCPT cmd) */
 EXTERN bool    SendMIMEErrors; /* send error messages in MIME format */
 EXTERN bool    MatchGecos;     /* look for user names in gecos field */
 EXTERN bool    UseErrorsTo;    /* use Errors-To: header (back compat) */
 EXTERN bool    SendMIMEErrors; /* send error messages in MIME format */
 EXTERN bool    MatchGecos;     /* look for user names in gecos field */
 EXTERN bool    UseErrorsTo;    /* use Errors-To: header (back compat) */
+EXTERN bool    TryNullMXList;  /* if we are the best MX, try host directly */
+EXTERN bool    CheckLoopBack;  /* check for loopback on HELO packet */
+EXTERN bool    InChild;        /* true if running in an SMTP subprocess */
 EXTERN char    SpaceSub;       /* substitution for <lwsp> */
 EXTERN int     PrivacyFlags;   /* privacy flags */
 EXTERN char    SpaceSub;       /* substitution for <lwsp> */
 EXTERN int     PrivacyFlags;   /* privacy flags */
-extern char    *ConfFile;      /* location of configuration file [conf.c] */
-extern char    *FreezeFile;    /* location of frozen memory image [conf.c] */
+EXTERN char    *ConfFile;      /* location of configuration file [conf.c] */
 extern char    *PidFile;       /* location of proc id file [conf.c] */
 extern ADDRESS NullAddress;    /* a null (template) address [main.c] */
 EXTERN long    WkClassFact;    /* multiplier for message class -> priority */
 extern char    *PidFile;       /* location of proc id file [conf.c] */
 extern ADDRESS NullAddress;    /* a null (template) address [main.c] */
 EXTERN long    WkClassFact;    /* multiplier for message class -> priority */
@@ -813,6 +823,7 @@ EXTERN long MaxMessageSize; /* advertised max size we will accept */
 EXTERN char    *PostMasterCopy;        /* address to get errs cc's */
 EXTERN int     CheckpointInterval;     /* queue file checkpoint interval */
 EXTERN bool    DontPruneRoutes;        /* don't prune source routes */
 EXTERN char    *PostMasterCopy;        /* address to get errs cc's */
 EXTERN int     CheckpointInterval;     /* queue file checkpoint interval */
 EXTERN bool    DontPruneRoutes;        /* don't prune source routes */
+EXTERN bool    BrokenSmtpPeers;        /* peers can't handle 2-line greeting */
 EXTERN int     MaxMciCache;            /* maximum entries in MCI cache */
 EXTERN time_t  MciCacheTimeout;        /* maximum idle time on connections */
 EXTERN char    *QueueLimitRecipient;   /* limit queue runs to this recipient */
 EXTERN int     MaxMciCache;            /* maximum entries in MCI cache */
 EXTERN time_t  MciCacheTimeout;        /* maximum idle time on connections */
 EXTERN char    *QueueLimitRecipient;   /* limit queue runs to this recipient */
@@ -829,6 +840,7 @@ EXTERN FILE *TrafficLogFile;        /* file in which to log all traffic */
 
 EXTERN struct
 {
 
 EXTERN struct
 {
+                       /* RFC 1123-specified timeouts [minimum value] */
        time_t  to_initial;     /* initial greeting timeout [5m] */
        time_t  to_mail;        /* MAIL command [5m] */
        time_t  to_rcpt;        /* RCPT command [5m] */
        time_t  to_initial;     /* initial greeting timeout [5m] */
        time_t  to_mail;        /* MAIL command [5m] */
        time_t  to_rcpt;        /* RCPT command [5m] */
@@ -841,6 +853,7 @@ EXTERN struct
        time_t  to_helo;        /* HELO command */
        time_t  to_quit;        /* QUIT command */
        time_t  to_miscshort;   /* misc short commands (NOOP, VERB, etc) */
        time_t  to_helo;        /* HELO command */
        time_t  to_quit;        /* QUIT command */
        time_t  to_miscshort;   /* misc short commands (NOOP, VERB, etc) */
+       time_t  to_ident;       /* IDENT protocol requests */
                        /* following are per message */
        time_t  to_q_return;    /* queue return timeout */
        time_t  to_q_warning;   /* queue warning timeout */
                        /* following are per message */
        time_t  to_q_return;    /* queue return timeout */
        time_t  to_q_warning;   /* queue warning timeout */
@@ -908,10 +921,11 @@ extern ADDRESS            *getctladdr __P((ADDRESS *));
 extern char            *anynet_ntoa __P((SOCKADDR *));
 extern char            *remotename __P((char *, MAILER *, int, int *, ENVELOPE *));
 extern bool            shouldqueue __P((long, time_t));
 extern char            *anynet_ntoa __P((SOCKADDR *));
 extern char            *remotename __P((char *, MAILER *, int, int *, ENVELOPE *));
 extern bool            shouldqueue __P((long, time_t));
-extern bool            lockfile __P((int, char *, int));
+extern bool            lockfile __P((int, char *, char *, int));
 extern char            *hostsignature __P((MAILER *, char *, ENVELOPE *));
 extern void            openxscript __P((ENVELOPE *));
 extern void            closexscript __P((ENVELOPE *));
 extern char            *hostsignature __P((MAILER *, char *, ENVELOPE *));
 extern void            openxscript __P((ENVELOPE *));
 extern void            closexscript __P((ENVELOPE *));
+extern sigfunc_t       setsignal __P((int, sigfunc_t));
 
 /* ellipsis is a different case though */
 #ifdef __STDC__
 
 /* ellipsis is a different case though */
 #ifdef __STDC__
index ff208ba..142a7f5 100644 (file)
@@ -3,7 +3,7 @@ cpyr    Copyright (c) 1983  Eric P. Allman
 cpyr   Copyright (c) 1988, 1993
 cpyr       The Regents of the University of California.  All rights reserved.
 cpyr   
 cpyr   Copyright (c) 1988, 1993
 cpyr       The Regents of the University of California.  All rights reserved.
 cpyr   
-cpyr   @(#)sendmail.hf 8.1 (Berkeley) 6/7/93
+cpyr   @(#)sendmail.hf 8.2 (Berkeley) 7/16/93
 cpyr
 smtp   Commands:
 smtp           HELO    EHLO    MAIL    RCPT    DATA
 cpyr
 smtp   Commands:
 smtp           HELO    EHLO    MAIL    RCPT    DATA
@@ -16,8 +16,7 @@ smtp  For local information send email to Postmaster at your site.
 help   HELP [ <topic> ]
 help           The HELP command gives help info.
 helo   HELO <hostname>
 help   HELP [ <topic> ]
 help           The HELP command gives help info.
 helo   HELO <hostname>
-helo           Introduce yourself.  I am a boor, so I really don't
-helo           care if you do.
+helo           Introduce yourself.
 ehlo   EHLO <hostname>
 ehlo           Introduce yourself, and request extended SMTP mode.
 mail   MAIL FROM: <sender>
 ehlo   EHLO <hostname>
 ehlo           Introduce yourself, and request extended SMTP mode.
 mail   MAIL FROM: <sender>
index 39dabe0..85fa69c 100644 (file)
 
 #ifndef lint
 #ifdef SMTP
 
 #ifndef lint
 #ifdef SMTP
-static char sccsid[] = "@(#)srvrsmtp.c 8.3 (Berkeley) 7/13/93 (with SMTP)";
+static char sccsid[] = "@(#)srvrsmtp.c 8.17 (Berkeley) 10/15/93 (with SMTP)";
 #else
 #else
-static char sccsid[] = "@(#)srvrsmtp.c 8.3 (Berkeley) 7/13/93 (without SMTP)";
+static char sccsid[] = "@(#)srvrsmtp.c 8.17 (Berkeley) 10/15/93 (without SMTP)";
 #endif
 #endif /* not lint */
 
 # include <errno.h>
 #endif
 #endif /* not lint */
 
 # include <errno.h>
-# include <signal.h>
 
 # ifdef SMTP
 
 
 # ifdef SMTP
 
@@ -83,6 +82,8 @@ struct cmd
 /* non-standard commands */
 # define CMDONEX       16      /* onex -- sending one transaction only */
 # define CMDVERB       17      /* verb -- go into verbose mode */
 /* non-standard commands */
 # define CMDONEX       16      /* onex -- sending one transaction only */
 # define CMDVERB       17      /* verb -- go into verbose mode */
+/* use this to catch and log "door handle" attempts on your system */
+# define CMDLOGBOGUS   23      /* bogus command that should be logged */
 /* debugging-only commands, only enabled if SMTPDEBUG is defined */
 # define CMDDBGQSHOW   24      /* showq -- show send queue */
 # define CMDDBGDEBUG   25      /* debug -- set debug mode */
 /* debugging-only commands, only enabled if SMTPDEBUG is defined */
 # define CMDDBGQSHOW   24      /* showq -- show send queue */
 # define CMDDBGDEBUG   25      /* debug -- set debug mode */
@@ -108,13 +109,13 @@ static struct cmd CmdTab[] =
         */
        "showq",        CMDDBGQSHOW,
        "debug",        CMDDBGDEBUG,
         */
        "showq",        CMDDBGQSHOW,
        "debug",        CMDDBGDEBUG,
+       "wiz",          CMDLOGBOGUS,
        NULL,           CMDERROR,
 };
 
        NULL,           CMDERROR,
 };
 
-bool   InChild = FALSE;                /* true if running in a subprocess */
 bool   OneXact = FALSE;                /* one xaction only this run */
 
 bool   OneXact = FALSE;                /* one xaction only this run */
 
-#define EX_QUIT                22              /* special code for QUIT command */
+static char    *skipword();
 
 smtp(e)
        register ENVELOPE *e;
 
 smtp(e)
        register ENVELOPE *e;
@@ -122,7 +123,6 @@ smtp(e)
        register char *p;
        register struct cmd *c;
        char *cmd;
        register char *p;
        register struct cmd *c;
        char *cmd;
-       static char *skipword();
        auto ADDRESS *vrfyqueue;
        ADDRESS *a;
        bool gotmail;                   /* mail command received */
        auto ADDRESS *vrfyqueue;
        ADDRESS *a;
        bool gotmail;                   /* mail command received */
@@ -149,8 +149,15 @@ smtp(e)
        CurHostName = RealHostName;
        setproctitle("server %s startup", CurHostName);
        expand("\201e", inp, &inp[sizeof inp], e);
        CurHostName = RealHostName;
        setproctitle("server %s startup", CurHostName);
        expand("\201e", inp, &inp[sizeof inp], e);
-       message("220-%s", inp);
-       message("220 ESMTP spoken here");
+       if (BrokenSmtpPeers)
+       {
+               message("220 %s", inp);
+       }
+       else
+       {
+               message("220-%s", inp);
+               message("220 ESMTP spoken here");
+       }
        protocol = NULL;
        sendinghost = macvalue('s', e);
        gothello = FALSE;
        protocol = NULL;
        sendinghost = macvalue('s', e);
        gothello = FALSE;
@@ -167,7 +174,7 @@ smtp(e)
                QuickAbort = FALSE;
                HoldErrs = FALSE;
                LogUsrErrs = FALSE;
                QuickAbort = FALSE;
                HoldErrs = FALSE;
                LogUsrErrs = FALSE;
-               e->e_flags &= ~EF_VRFYONLY;
+               e->e_flags &= ~(EF_VRFYONLY|EF_GLOBALERRS);
 
                /* setup for the read */
                e->e_to = NULL;
 
                /* setup for the read */
                e->e_to = NULL;
@@ -187,7 +194,7 @@ smtp(e)
                        message("421 %s Lost input channel from %s",
                                MyHostName, CurHostName);
 #ifdef LOG
                        message("421 %s Lost input channel from %s",
                                MyHostName, CurHostName);
 #ifdef LOG
-                       if (LogLevel > 1)
+                       if (LogLevel > (gotmail ? 1 : 19))
                                syslog(LOG_NOTICE, "lost input channel from %s",
                                        CurHostName);
 #endif
                                syslog(LOG_NOTICE, "lost input channel from %s",
                                        CurHostName);
 #endif
@@ -248,7 +255,9 @@ smtp(e)
                                SmtpPhase = "server HELO";
                        }
                        sendinghost = newstr(p);
                                SmtpPhase = "server HELO";
                        }
                        sendinghost = newstr(p);
-                       if (strcasecmp(p, RealHostName) != 0)
+                       if (strcasecmp(p, RealHostName) != 0 &&
+                           (strcasecmp(RealHostName, "localhost") != 0 ||
+                            strcasecmp(p, MyHostName) != 0))
                        {
                                auth_warning(e, "Host %s claimed to be %s",
                                        RealHostName, p);
                        {
                                auth_warning(e, "Host %s claimed to be %s",
                                        RealHostName, p);
@@ -297,6 +306,8 @@ smtp(e)
                        if (gotmail)
                        {
                                message("503 Sender already specified");
                        if (gotmail)
                        {
                                message("503 Sender already specified");
+                               if (InChild)
+                                       finis();
                                break;
                        }
                        if (InChild)
                                break;
                        }
                        if (InChild)
@@ -462,7 +473,7 @@ smtp(e)
                        p = skipword(p, "to");
                        if (p == NULL)
                                break;
                        p = skipword(p, "to");
                        if (p == NULL)
                                break;
-                       a = parseaddr(p, (ADDRESS *) NULL, 1, ' ', NULL, e);
+                       a = parseaddr(p, NULLADDR, RF_COPYALL, ' ', NULL, e);
                        if (a == NULL)
                                break;
                        a->q_flags |= QPRIMARY;
                        if (a == NULL)
                                break;
                        a->q_flags |= QPRIMARY;
@@ -474,7 +485,9 @@ smtp(e)
                        e->e_to = p;
                        if (!bitset(QBADADDR, a->q_flags))
                        {
                        e->e_to = p;
                        if (!bitset(QBADADDR, a->q_flags))
                        {
-                               message("250 Recipient ok");
+                               message("250 Recipient ok%s",
+                                       bitset(QQUEUEUP, a->q_flags) ?
+                                               " (will queue)" : "");
                                nrcpts++;
                        }
                        else
                                nrcpts++;
                        }
                        else
@@ -492,7 +505,7 @@ smtp(e)
                                message("503 Need MAIL command");
                                break;
                        }
                                message("503 Need MAIL command");
                                break;
                        }
-                       else if (e->e_nrcpts <= 0)
+                       else if (nrcpts <= 0)
                        {
                                message("503 Need RCPT (recipient)");
                                break;
                        {
                                message("503 Need RCPT (recipient)");
                                break;
@@ -518,10 +531,8 @@ smtp(e)
 
                        /* collect the text of the message */
                        SmtpPhase = "collect";
 
                        /* collect the text of the message */
                        SmtpPhase = "collect";
+                       HoldErrs = TRUE;
                        collect(TRUE, doublequeue, e);
                        collect(TRUE, doublequeue, e);
-                       e->e_flags &= ~EF_FATALERRS;
-                       if (Errors != 0)
-                               goto abortmessage;
 
                        /*
                        **  Arrange to send to everyone.
 
                        /*
                        **  Arrange to send to everyone.
@@ -554,9 +565,6 @@ smtp(e)
                        sendall(e, doublequeue ? SM_QUEUE : SM_DEFAULT);
                        e->e_to = NULL;
 
                        sendall(e, doublequeue ? SM_QUEUE : SM_DEFAULT);
                        e->e_to = NULL;
 
-                       /* save statistics */
-                       markstats(e, (ADDRESS *) NULL);
-
                        /* issue success if appropriate and reset */
                        if (Errors == 0 || HoldErrs)
                                message("250 %s Message accepted for delivery", id);
                        /* issue success if appropriate and reset */
                        if (Errors == 0 || HoldErrs)
                                message("250 %s Message accepted for delivery", id);
@@ -576,9 +584,10 @@ smtp(e)
                                /* if we just queued, poke it */
                                if (doublequeue && e->e_sendmode != SM_QUEUE)
                                {
                                /* if we just queued, poke it */
                                if (doublequeue && e->e_sendmode != SM_QUEUE)
                                {
+                                       extern pid_t dowork();
+
                                        unlockqueue(e);
                                        unlockqueue(e);
-                                       dowork(id, TRUE, TRUE, e);
-                                       e->e_id = NULL;
+                                       (void) dowork(id, TRUE, TRUE, e);
                                }
                        }
 
                                }
                        }
 
@@ -596,6 +605,7 @@ smtp(e)
 
                  case CMDRSET:         /* rset -- reset state */
                        message("250 Reset state");
 
                  case CMDRSET:         /* rset -- reset state */
                        message("250 Reset state");
+                       e->e_flags |= EF_CLRQUEUE;
                        if (InChild)
                                finis();
 
                        if (InChild)
                                finis();
 
@@ -643,8 +653,7 @@ smtp(e)
                        }
                        else
                        {
                        }
                        else
                        {
-                               (void) sendtolist(p, (ADDRESS *) NULL,
-                                                 &vrfyqueue, e);
+                               (void) sendtolist(p, NULLADDR, &vrfyqueue, e);
                        }
                        if (Errors != 0)
                        {
                        }
                        if (Errors != 0)
                        {
@@ -658,16 +667,13 @@ smtp(e)
                        }
                        while (vrfyqueue != NULL)
                        {
                        }
                        while (vrfyqueue != NULL)
                        {
-                               register ADDRESS *a = vrfyqueue->q_next;
-
-                               while (a != NULL && bitset(QDONTSEND|QBADADDR, a->q_flags))
-                                       a = a->q_next;
-
+                               a = vrfyqueue;
+                               while ((a = a->q_next) != NULL &&
+                                      bitset(QDONTSEND|QBADADDR, a->q_flags))
+                                       continue;
                                if (!bitset(QDONTSEND|QBADADDR, vrfyqueue->q_flags))
                                        printvrfyaddr(vrfyqueue, a == NULL);
                                if (!bitset(QDONTSEND|QBADADDR, vrfyqueue->q_flags))
                                        printvrfyaddr(vrfyqueue, a == NULL);
-                               else if (a == NULL)
-                                       message("554 Self destructive alias loop");
-                               vrfyqueue = a;
+                               vrfyqueue = vrfyqueue->q_next;
                        }
                        if (InChild)
                                finis();
                        }
                        if (InChild)
                                finis();
@@ -678,7 +684,7 @@ smtp(e)
                        break;
 
                  case CMDNOOP:         /* noop -- do nothing */
                        break;
 
                  case CMDNOOP:         /* noop -- do nothing */
-                       message("200 OK");
+                       message("250 OK");
                        break;
 
                  case CMDQUIT:         /* quit -- leave mail */
                        break;
 
                  case CMDQUIT:         /* quit -- leave mail */
@@ -721,18 +727,18 @@ smtp(e)
                        break;
 
 # else /* not SMTPDEBUG */
                        break;
 
 # else /* not SMTPDEBUG */
-
                  case CMDDBGQSHOW:     /* show queues */
                  case CMDDBGDEBUG:     /* set debug mode */
                  case CMDDBGQSHOW:     /* show queues */
                  case CMDDBGDEBUG:     /* set debug mode */
+# endif /* SMTPDEBUG */
+                 case CMDLOGBOGUS:     /* bogus command */
 # ifdef LOG
                        if (LogLevel > 0)
 # ifdef LOG
                        if (LogLevel > 0)
-                               syslog(LOG_NOTICE,
+                               syslog(LOG_CRIT,
                                    "\"%s\" command from %s (%s)",
                                    c->cmdname, RealHostName,
                                    anynet_ntoa(&RealHostAddr));
 # endif
                        /* FALL THROUGH */
                                    "\"%s\" command from %s (%s)",
                                    c->cmdname, RealHostName,
                                    anynet_ntoa(&RealHostAddr));
 # endif
                        /* FALL THROUGH */
-# endif /* SMTPDEBUG */
 
                  case CMDERROR:        /* unknown command */
                        message("500 Command unrecognized");
 
                  case CMDERROR:        /* unknown command */
                        message("500 Command unrecognized");
index 94bead6..2dc6827 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)stats.c    8.2 (Berkeley) 7/11/93";
+static char sccsid[] = "@(#)stats.c    8.3 (Berkeley) 8/28/93";
 #endif /* not lint */
 
 # include "sendmail.h"
 #endif /* not lint */
 
 # include "sendmail.h"
@@ -95,12 +95,13 @@ poststats(sfile)
        (void) time(&Stat.stat_itime);
        Stat.stat_size = sizeof Stat;
 
        (void) time(&Stat.stat_itime);
        Stat.stat_size = sizeof Stat;
 
-       fd = open(sfile, 2);
+       fd = open(sfile, O_RDWR);
        if (fd < 0)
        {
                errno = 0;
                return;
        }
        if (fd < 0)
        {
                errno = 0;
                return;
        }
+       (void) lockfile(fd, sfile, NULL, LOCK_EX);
        if (read(fd, (char *) &stat, sizeof stat) == sizeof stat &&
            stat.stat_size == sizeof stat)
        {
        if (read(fd, (char *) &stat, sizeof stat) == sizeof stat &&
            stat.stat_size == sizeof stat)
        {
index d0987d4..f079b44 100644 (file)
@@ -36,9 +36,9 @@
 
 #ifndef lint
 #ifdef USERDB
 
 #ifndef lint
 #ifdef USERDB
-static char sccsid [] = "@(#)udb.c     8.1 (Berkeley) 6/7/93 (with USERDB)";
+static char sccsid [] = "@(#)udb.c     8.3 (Berkeley) 8/25/93 (with USERDB)";
 #else
 #else
-static char sccsid [] = "@(#)udb.c     8.1 (Berkeley) 6/7/93 (without USERDB)";
+static char sccsid [] = "@(#)udb.c     8.3 (Berkeley) 8/25/93 (without USERDB)";
 #endif
 #endif
 
 #endif
 #endif
 
@@ -197,12 +197,14 @@ udbexpand(a, sendq, e)
                        key.data = keybuf;
                        key.size = keylen;
                        if (tTd(28, 80))
                        key.data = keybuf;
                        key.size = keylen;
                        if (tTd(28, 80))
-                               printf("udbexpand: trying %s\n", keybuf);
+                               printf("udbexpand: trying %s (%d)\n",
+                                       keybuf, keylen);
                        i = (*up->udb_dbp->seq)(up->udb_dbp, &key, &info, R_CURSOR);
                        if (i > 0 || info.size <= 0)
                        {
                                if (tTd(28, 2))
                        i = (*up->udb_dbp->seq)(up->udb_dbp, &key, &info, R_CURSOR);
                        if (i > 0 || info.size <= 0)
                        {
                                if (tTd(28, 2))
-                                       printf("udbexpand: no match on %s\n", keybuf);
+                                       printf("udbexpand: no match on %s (%d)\n",
+                                               keybuf, keylen);
                                continue;
                        }
                        if (tTd(28, 80))
                                continue;
                        }
                        if (tTd(28, 80))
@@ -345,6 +347,17 @@ udbexpand(a, sendq, e)
 char *
 udbsender(sender)
        char *sender;
 char *
 udbsender(sender)
        char *sender;
+{
+       extern char *udbmatch();
+
+       return udbmatch(sender, "mailname");
+}
+
+
+char *
+udbmatch(user, field)
+       char *user;
+       char *field;
 {
        register char *p;
        register struct udbent *up;
 {
        register char *p;
        register struct udbent *up;
@@ -354,7 +367,7 @@ udbsender(sender)
        char keybuf[MAXKEY];
 
        if (tTd(28, 1))
        char keybuf[MAXKEY];
 
        if (tTd(28, 1))
-               printf("udbsender(%s)\n", sender);
+               printf("udbmatch(%s, %s)\n", user, field);
 
        if (!UdbInitialized)
        {
 
        if (!UdbInitialized)
        {
@@ -367,16 +380,17 @@ udbsender(sender)
                return NULL;
 
        /* long names can never match and are a pain to deal with */
                return NULL;
 
        /* long names can never match and are a pain to deal with */
-       if (strlen(sender) > sizeof keybuf - 12)
+       if ((strlen(user) + strlen(field)) > sizeof keybuf - 4)
                return NULL;
 
        /* names beginning with colons indicate metadata */
                return NULL;
 
        /* names beginning with colons indicate metadata */
-       if (sender[0] == ':')
+       if (user[0] == ':')
                return NULL;
 
        /* build database key */
                return NULL;
 
        /* build database key */
-       (void) strcpy(keybuf, sender);
-       (void) strcat(keybuf, ":mailname");
+       (void) strcpy(keybuf, user);
+       (void) strcat(keybuf, ":");
+       (void) strcat(keybuf, field);
        keylen = strlen(keybuf);
 
        for (up = UdbEnts; up->udb_type != UDB_EOLIST; up++)
        keylen = strlen(keybuf);
 
        for (up = UdbEnts; up->udb_type != UDB_EOLIST; up++)
@@ -394,8 +408,8 @@ udbsender(sender)
                        if (i != 0 || info.size <= 0)
                        {
                                if (tTd(28, 2))
                        if (i != 0 || info.size <= 0)
                        {
                                if (tTd(28, 2))
-                                       printf("udbsender: no match on %s\n",
-                                                       keybuf);
+                                       printf("udbmatch: no match on %s (%d)\n",
+                                                       keybuf, keylen);
                                continue;
                        }
 
                                continue;
                        }
 
@@ -403,11 +417,14 @@ udbsender(sender)
                        bcopy(info.data, p, info.size);
                        p[info.size] = '\0';
                        if (tTd(28, 1))
                        bcopy(info.data, p, info.size);
                        p[info.size] = '\0';
                        if (tTd(28, 1))
-                               printf("udbsender ==> %s\n", p);
+                               printf("udbmatch ==> %s\n", p);
                        return p;
                }
        }
 
                        return p;
                }
        }
 
+       if (strcmp(field, "mailname") != 0)
+               return NULL;
+
        /*
        **  Nothing yet.  Search again for a default case.  But only
        **  use it if we also have a forward (:maildrop) pointer already
        /*
        **  Nothing yet.  Search again for a default case.  But only
        **  use it if we also have a forward (:maildrop) pointer already
@@ -415,7 +432,7 @@ udbsender(sender)
        */
 
        /* build database key */
        */
 
        /* build database key */
-       (void) strcpy(keybuf, sender);
+       (void) strcpy(keybuf, user);
        (void) strcat(keybuf, ":maildrop");
        keylen = strlen(keybuf);
 
        (void) strcat(keybuf, ":maildrop");
        keylen = strlen(keybuf);
 
@@ -456,12 +473,12 @@ udbsender(sender)
                        }
 
                        /* they exist -- build the actual address */
                        }
 
                        /* they exist -- build the actual address */
-                       p = xalloc(strlen(sender) + strlen(up->udb_default) + 2);
-                       (void) strcpy(p, sender);
+                       p = xalloc(strlen(user) + strlen(up->udb_default) + 2);
+                       (void) strcpy(p, user);
                        (void) strcat(p, "@");
                        (void) strcat(p, up->udb_default);
                        if (tTd(28, 1))
                        (void) strcat(p, "@");
                        (void) strcat(p, up->udb_default);
                        if (tTd(28, 1))
-                               printf("udbsender ==> %s\n", p);
+                               printf("udbmatch ==> %s\n", p);
                        return p;
                }
        }
                        return p;
                }
        }
index 944eb5c..ba33a79 100644 (file)
@@ -30,7 +30,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)useful.h    8.1 (Berkeley) 6/7/93
+ *     @(#)useful.h    8.2 (Berkeley) 9/24/93
  */
 
 # include <sys/types.h>
  */
 
 # include <sys/types.h>
@@ -67,7 +67,11 @@ typedef char bool;
 
 /* sccs id's */
 # ifndef lint
 
 /* sccs id's */
 # ifndef lint
-# define SCCSID(arg)   static char SccsId[] = "arg";
+#  ifdef __STDC__
+#   define SCCSID(arg) static char SccsId[] = #arg;
+#  else
+#   define SCCSID(arg) static char SccsId[] = "arg";
+#  endif
 # else
 # else
-# define SCCSID(arg)
+#  define SCCSID(arg)
 # endif
 # endif
index eb62711..18510e4 100644 (file)
@@ -36,9 +36,9 @@
 
 #ifndef lint
 #ifdef SMTP
 
 #ifndef lint
 #ifdef SMTP
-static char sccsid[] = "@(#)usersmtp.c 8.4 (Berkeley) 7/13/93 (with SMTP)";
+static char sccsid[] = "@(#)usersmtp.c 8.13 (Berkeley) 10/24/93 (with SMTP)";
 #else
 #else
-static char sccsid[] = "@(#)usersmtp.c 8.4 (Berkeley) 7/13/93 (without SMTP)";
+static char sccsid[] = "@(#)usersmtp.c 8.13 (Berkeley) 10/24/93 (without SMTP)";
 #endif
 #endif /* not lint */
 
 #endif
 #endif /* not lint */
 
@@ -61,6 +61,7 @@ char  SmtpMsgBuffer[MAXLINE];         /* buffer for commands */
 char   SmtpReplyBuffer[MAXLINE];       /* buffer for replies */
 char   SmtpError[MAXLINE] = "";        /* save failure error messages */
 int    SmtpPid;                        /* pid of mailer */
 char   SmtpReplyBuffer[MAXLINE];       /* buffer for replies */
 char   SmtpError[MAXLINE] = "";        /* save failure error messages */
 int    SmtpPid;                        /* pid of mailer */
+bool   SmtpNeedIntro;                  /* need "while talking" in transcript */
 
 #ifdef __STDC__
 extern smtpmessage(char *f, MAILER *m, MCI *mci, ...);
 
 #ifdef __STDC__
 extern smtpmessage(char *f, MAILER *m, MCI *mci, ...);
@@ -95,7 +96,7 @@ smtpinit(m, mci, e)
        if (tTd(18, 1))
        {
                printf("smtpinit ");
        if (tTd(18, 1))
        {
                printf("smtpinit ");
-               mci_dump(mci);
+               mci_dump(mci, FALSE);
        }
 
        /*
        }
 
        /*
@@ -104,6 +105,7 @@ smtpinit(m, mci, e)
 
        SmtpError[0] = '\0';
        CurHostName = mci->mci_host;            /* XXX UGLY XXX */
 
        SmtpError[0] = '\0';
        CurHostName = mci->mci_host;            /* XXX UGLY XXX */
+       SmtpNeedIntro = TRUE;
        switch (mci->mci_state)
        {
          case MCIS_ACTIVE:
        switch (mci->mci_state)
        {
          case MCIS_ACTIVE:
@@ -139,8 +141,10 @@ smtpinit(m, mci, e)
        SmtpPhase = mci->mci_phase = "client greeting";
        setproctitle("%s %s: %s", e->e_id, CurHostName, mci->mci_phase);
        r = reply(m, mci, e, TimeOuts.to_initial, esmtp_check);
        SmtpPhase = mci->mci_phase = "client greeting";
        setproctitle("%s %s: %s", e->e_id, CurHostName, mci->mci_phase);
        r = reply(m, mci, e, TimeOuts.to_initial, esmtp_check);
-       if (r < 0 || REPLYTYPE(r) != 2)
+       if (r < 0 || REPLYTYPE(r) == 4)
                goto tempfail1;
                goto tempfail1;
+       if (REPLYTYPE(r) != 2)
+               goto unavailable;
 
        /*
        **  Send the HELO command.
 
        /*
        **  Send the HELO command.
@@ -182,12 +186,15 @@ tryhelo:
        **  Check to see if we actually ended up talking to ourself.
        **  This means we didn't know about an alias or MX, or we managed
        **  to connect to an echo server.
        **  Check to see if we actually ended up talking to ourself.
        **  This means we didn't know about an alias or MX, or we managed
        **  to connect to an echo server.
+       **
+       **      If this code remains at all, "CheckLoopBack" should be
+       **      a mailer flag.  This is a MAYBENEXTRELEASE feature.
        */
 
        p = strchr(&SmtpReplyBuffer[4], ' ');
        if (p != NULL)
                *p = '\0';
        */
 
        p = strchr(&SmtpReplyBuffer[4], ' ');
        if (p != NULL)
                *p = '\0';
-       if (strcasecmp(&SmtpReplyBuffer[4], MyHostName) == 0)
+       if (CheckLoopBack && strcasecmp(&SmtpReplyBuffer[4], MyHostName) == 0)
        {
                syserr("553 %s config error: mail loops back to myself",
                        MyHostName);
        {
                syserr("553 %s config error: mail loops back to myself",
                        MyHostName);
@@ -317,7 +324,7 @@ smtpmailfrom(m, mci, e)
                printf("smtpmailfrom: CurHost=%s\n", CurHostName);
 
        /* set up appropriate options to include */
                printf("smtpmailfrom: CurHost=%s\n", CurHostName);
 
        /* set up appropriate options to include */
-       if (bitset(MCIF_SIZE, mci->mci_flags))
+       if (bitset(MCIF_SIZE, mci->mci_flags) && e->e_msgsize > 0)
                sprintf(optbuf, " SIZE=%ld", e->e_msgsize);
        else
                strcpy(optbuf, "");
                sprintf(optbuf, " SIZE=%ld", e->e_msgsize);
        else
                strcpy(optbuf, "");
@@ -443,6 +450,7 @@ smtprcpt(to, m, mci, e)
 */
 
 static jmp_buf CtxDataTimeout;
 */
 
 static jmp_buf CtxDataTimeout;
+static int     datatimeout();
 
 smtpdata(m, mci, e)
        struct mailer *m;
 
 smtpdata(m, mci, e)
        struct mailer *m;
@@ -452,7 +460,6 @@ smtpdata(m, mci, e)
        register int r;
        register EVENT *ev;
        time_t timeout;
        register int r;
        register EVENT *ev;
        time_t timeout;
-       static int datatimeout();
 
        /*
        **  Send the data.
 
        /*
        **  Send the data.
@@ -519,6 +526,16 @@ smtpdata(m, mci, e)
 
        clrevent(ev);
 
 
        clrevent(ev);
 
+       if (ferror(mci->mci_out))
+       {
+               /* error during processing -- don't send the dot */
+               mci->mci_errno = EIO;
+               mci->mci_exitstat = EX_IOERR;
+               mci->mci_state = MCIS_ERROR;
+               smtpquit(m, mci, e);
+               return EX_IOERR;
+       }
+
        /* terminate the message */
        fprintf(mci->mci_out, ".%s", m->m_eol);
        if (TrafficLogFile != NULL)
        /* terminate the message */
        fprintf(mci->mci_out, ".%s", m->m_eol);
        if (TrafficLogFile != NULL)
@@ -724,8 +741,14 @@ reply(m, mci, e, timeout, pfunc)
 #ifdef XDEBUG
                        {
                                char wbuf[MAXLINE];
 #ifdef XDEBUG
                        {
                                char wbuf[MAXLINE];
-                               sprintf(wbuf, "%s... reply(%s) during %s",
-                                       e->e_to, mci->mci_host, SmtpPhase);
+                               char *p = wbuf;
+                               if (e->e_to != NULL)
+                               {
+                                       sprintf(p, "%s... ", e->e_to);
+                                       p += strlen(p);
+                               }
+                               sprintf(p, "reply(%s) during %s",
+                                       mci->mci_host, SmtpPhase);
                                checkfd012(wbuf);
                        }
 #endif
                                checkfd012(wbuf);
                        }
 #endif
@@ -739,6 +762,14 @@ reply(m, mci, e, timeout, pfunc)
                    (bufp[0] == '5' && strncmp(SmtpMsgBuffer, "EHLO", 4) != 0)))
                {
                        /* serious error -- log the previous command */
                    (bufp[0] == '5' && strncmp(SmtpMsgBuffer, "EHLO", 4) != 0)))
                {
                        /* serious error -- log the previous command */
+                       if (SmtpNeedIntro)
+                       {
+                               /* inform user who we are chatting with */
+                               fprintf(CurEnv->e_xfp,
+                                       "... while talking to %s:\n",
+                                       CurHostName);
+                               SmtpNeedIntro = FALSE;
+                       }
                        if (SmtpMsgBuffer[0] != '\0')
                                fprintf(e->e_xfp, ">>> %s\n", SmtpMsgBuffer);
                        SmtpMsgBuffer[0] = '\0';
                        if (SmtpMsgBuffer[0] != '\0')
                                fprintf(e->e_xfp, ">>> %s\n", SmtpMsgBuffer);
                        SmtpMsgBuffer[0] = '\0';
index 453a1ad..b07e00d 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)util.c     8.3 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)util.c     8.14 (Berkeley) 10/23/93";
 #endif /* not lint */
 
 # include "sendmail.h"
 #endif /* not lint */
 
 # include "sendmail.h"
@@ -403,7 +403,10 @@ buildfname(gecos, login, buf)
 **
 **     Parameters:
 **             fn -- filename to check.
 **
 **     Parameters:
 **             fn -- filename to check.
-**             uid -- uid to compare against.
+**             uid -- user id to compare against.
+**             gid -- group id to compare against.
+**             uname -- user name to compare against (used for group
+**                     sets).
 **             mustown -- to be safe, this uid must own the file.
 **             mode -- mode bits that must match.
 **
 **             mustown -- to be safe, this uid must own the file.
 **             mode -- mode bits that must match.
 **
@@ -415,44 +418,74 @@ buildfname(gecos, login, buf)
 **             none.
 */
 
 **             none.
 */
 
+#include <grp.h>
+
 #ifndef S_IXOTH
 # define S_IXOTH       (S_IEXEC >> 6)
 #endif
 
 #ifndef S_IXOTH
 # define S_IXOTH       (S_IEXEC >> 6)
 #endif
 
+#ifndef S_IXGRP
+# define S_IXGRP       (S_IEXEC >> 3)
+#endif
+
 #ifndef S_IXUSR
 # define S_IXUSR       (S_IEXEC)
 #endif
 
 int
 #ifndef S_IXUSR
 # define S_IXUSR       (S_IEXEC)
 #endif
 
 int
-safefile(fn, uid, mustown, mode)
+safefile(fn, uid, gid, uname, mustown, mode)
        char *fn;
        uid_t uid;
        char *fn;
        uid_t uid;
+       gid_t gid;
+       char *uname;
        bool mustown;
        int mode;
 {
        register char *p;
        bool mustown;
        int mode;
 {
        register char *p;
+       register struct group *gr = NULL;
        struct stat stbuf;
 
        if (tTd(54, 4))
        struct stat stbuf;
 
        if (tTd(54, 4))
-               printf("safefile(%s, %d, %d, %o): ", fn, uid, mustown, mode);
+               printf("safefile(%s, uid=%d, gid=%d, mustown=%d, mode=%o):\n",
+                       fn, uid, gid, mustown, mode);
        errno = 0;
 
        for (p = fn; (p = strchr(++p, '/')) != NULL; *p = '/')
        {
                *p = '\0';
        errno = 0;
 
        for (p = fn; (p = strchr(++p, '/')) != NULL; *p = '/')
        {
                *p = '\0';
-               if (stat(fn, &stbuf) < 0 ||
-                   !bitset(stbuf.st_uid == uid ? S_IXUSR : S_IXOTH,
-                           stbuf.st_mode))
+               if (stat(fn, &stbuf) < 0)
+                       break;
+               if (stbuf.st_uid == uid && bitset(S_IXUSR, stbuf.st_mode))
+                       continue;
+               if (stbuf.st_gid == gid && bitset(S_IXGRP, stbuf.st_mode))
+                       continue;
+#ifndef NO_GROUP_SET
+               if (uname != NULL &&
+                   ((gr != NULL && gr->gr_gid == stbuf.st_gid) ||
+                    (gr = getgrgid(stbuf.st_gid)) != NULL))
                {
                {
-                       int ret = errno;
-
-                       if (ret == 0)
-                               ret = EACCES;
-                       if (tTd(54, 4))
-                               printf("[dir %s] %s\n", fn, errstring(ret));
-                       *p = '/';
-                       return ret;
+                       register char **gp;
+
+                       for (gp = gr->gr_mem; *gp != NULL; gp++)
+                               if (strcmp(*gp, uname) == 0)
+                                       break;
+                       if (*gp != NULL && bitset(S_IXGRP, stbuf.st_mode))
+                               continue;
                }
                }
+#endif
+               if (!bitset(S_IXOTH, stbuf.st_mode))
+                       break;
+       }
+       if (p != NULL)
+       {
+               int ret = errno;
+
+               if (ret == 0)
+                       ret = EACCES;
+               if (tTd(54, 4))
+                       printf("\t[dir %s] %s\n", fn, errstring(ret));
+               *p = '/';
+               return ret;
        }
 
        if (stat(fn, &stbuf) < 0)
        }
 
        if (stat(fn, &stbuf) < 0)
@@ -460,24 +493,47 @@ safefile(fn, uid, mustown, mode)
                int ret = errno;
 
                if (tTd(54, 4))
                int ret = errno;
 
                if (tTd(54, 4))
-                       printf("%s\n", errstring(ret));
+                       printf("\t%s\n", errstring(ret));
 
                errno = 0;
                return ret;
        }
 
                errno = 0;
                return ret;
        }
-       if (stbuf.st_uid != uid || uid == 0 || !mustown)
+       if (uid == 0)
                mode >>= 6;
                mode >>= 6;
+       else if (stbuf.st_uid != uid)
+       {
+               mode >>= 3;
+               if (stbuf.st_gid == gid)
+                       ;
+#ifndef NO_GROUP_SET
+               else if (uname != NULL &&
+                        ((gr != NULL && gr->gr_gid == stbuf.st_gid) ||
+                         (gr = getgrgid(stbuf.st_gid)) != NULL))
+               {
+                       register char **gp;
+
+                       for (gp = gr->gr_mem; *gp != NULL; gp++)
+                               if (strcmp(*gp, uname) == 0)
+                                       break;
+                       if (*gp == NULL)
+                               mode >>= 3;
+               }
+#endif
+               else
+                       mode >>= 3;
+       }
        if (tTd(54, 4))
        if (tTd(54, 4))
-               printf("[uid %d, stat %o] ", stbuf.st_uid, stbuf.st_mode);
+               printf("\t[uid %d, stat %o, mode %o] ",
+                       stbuf.st_uid, stbuf.st_mode, mode);
        if ((stbuf.st_uid == uid || uid == 0 || !mustown) &&
            (stbuf.st_mode & mode) == mode)
        {
                if (tTd(54, 4))
        if ((stbuf.st_uid == uid || uid == 0 || !mustown) &&
            (stbuf.st_mode & mode) == mode)
        {
                if (tTd(54, 4))
-                       printf("OK\n");
+                       printf("\tOK\n");
                return 0;
        }
        if (tTd(54, 4))
                return 0;
        }
        if (tTd(54, 4))
-               printf("EACCES\n");
+               printf("\tEACCES\n");
        return EACCES;
 }
 \f/*
        return EACCES;
 }
 \f/*
@@ -576,7 +632,7 @@ dfopen(filename, omode, cmode)
                        locktype = LOCK_EX;
                else
                        locktype = LOCK_SH;
                        locktype = LOCK_EX;
                else
                        locktype = LOCK_SH;
-               (void) lockfile(fd, filename, locktype);
+               (void) lockfile(fd, filename, NULL, locktype);
                errno = 0;
        }
        if (fd < 0)
                errno = 0;
        }
        if (fd < 0)
@@ -716,6 +772,10 @@ xfclose(fp, a, b)
 {
        if (tTd(53, 99))
                printf("xfclose(%x) %s %s\n", fp, a, b);
 {
        if (tTd(53, 99))
                printf("xfclose(%x) %s %s\n", fp, a, b);
+#ifdef XDEBUG
+       if (fileno(fp) == 1)
+               syserr("xfclose(%s %s): fd = 1", a, b);
+#endif
        if (fclose(fp) < 0 && tTd(53, 99))
                printf("xfclose FAILURE: %s\n", errstring(errno));
 }
        if (fclose(fp) < 0 && tTd(53, 99))
                printf("xfclose FAILURE: %s\n", errstring(errno));
 }
@@ -739,6 +799,7 @@ xfclose(fp, a, b)
 */
 
 static jmp_buf CtxReadTimeout;
 */
 
 static jmp_buf CtxReadTimeout;
+static int     readtimeout();
 
 char *
 sfgets(buf, siz, fp, timeout, during)
 
 char *
 sfgets(buf, siz, fp, timeout, during)
@@ -750,7 +811,6 @@ sfgets(buf, siz, fp, timeout, during)
 {
        register EVENT *ev = NULL;
        register char *p;
 {
        register EVENT *ev = NULL;
        register char *p;
-       static int readtimeout();
 
        /* set the timeout */
        if (timeout != 0)
 
        /* set the timeout */
        if (timeout != 0)
@@ -927,7 +987,7 @@ bool
 atobool(s)
        register char *s;
 {
 atobool(s)
        register char *s;
 {
-       if (*s == '\0' || strchr("tTyY", *s) != NULL)
+       if (s == NULL || *s == '\0' || strchr("tTyY", *s) != NULL)
                return (TRUE);
        return (FALSE);
 }
                return (TRUE);
        return (FALSE);
 }
@@ -968,10 +1028,15 @@ atooct(s)
 **             none.
 */
 
 **             none.
 */
 
+int
 waitfor(pid)
        int pid;
 {
 waitfor(pid)
        int pid;
 {
+#ifdef WAITUNION
+       union wait st;
+#else
        auto int st;
        auto int st;
+#endif
        int i;
 
        do
        int i;
 
        do
@@ -980,8 +1045,12 @@ waitfor(pid)
                i = wait(&st);
        } while ((i >= 0 || errno == EINTR) && i != pid);
        if (i < 0)
                i = wait(&st);
        } while ((i >= 0 || errno == EINTR) && i != pid);
        if (i < 0)
-               st = -1;
-       return (st);
+               return -1;
+#ifdef WAITUNION
+       return st.w_status;
+#else
+       return st;
+#endif
 }
 \f/*
 **  BITINTERSECT -- tell if two bitmaps intersect
 }
 \f/*
 **  BITINTERSECT -- tell if two bitmaps intersect
@@ -1086,7 +1155,7 @@ checkfd012(where)
 
        for (i = 0; i < 3; i++)
        {
 
        for (i = 0; i < 3; i++)
        {
-               if (fstat(i, &stbuf) < 0)
+               if (fstat(i, &stbuf) < 0 && errno != EOPNOTSUPP)
                {
                        /* oops.... */
                        int fd;
                {
                        /* oops.... */
                        int fd;
@@ -1100,5 +1169,125 @@ checkfd012(where)
                        }
                }
        }
                        }
                }
        }
-#endif XDEBUG
+#endif /* XDEBUG */
+}
+\f/*
+**  PRINTOPENFDS -- print the open file descriptors (for debugging)
+**
+**     Parameters:
+**             logit -- if set, send output to syslog; otherwise
+**                     print for debugging.
+**
+**     Returns:
+**             none.
+*/
+
+#include <netdb.h>
+#include <arpa/inet.h>
+
+printopenfds(logit)
+       bool logit;
+{
+       register int fd;
+       extern int DtableSize;
+
+       for (fd = 0; fd < DtableSize; fd++)
+               dumpfd(fd, FALSE, logit);
+}
+\f/*
+**  DUMPFD -- dump a file descriptor
+**
+**     Parameters:
+**             fd -- the file descriptor to dump.
+**             printclosed -- if set, print a notification even if
+**                     it is closed; otherwise print nothing.
+**             logit -- if set, send output to syslog instead of stdout.
+*/
+
+dumpfd(fd, printclosed, logit)
+       int fd;
+       bool printclosed;
+       bool logit;
+{
+       register struct hostent *hp;
+       register char *p;
+       struct sockaddr_in sin;
+       auto int slen;
+       struct stat st;
+       char buf[200];
+
+       p = buf;
+       sprintf(p, "%3d: ", fd);
+       p += strlen(p);
+
+       if (fstat(fd, &st) < 0)
+       {
+               if (printclosed || errno != EBADF)
+               {
+                       sprintf(p, "CANNOT STAT (%s)", errstring(errno));
+                       goto printit;
+               }
+               return;
+       }
+
+       slen = fcntl(fd, F_GETFL, NULL);
+       if (slen != -1)
+       {
+               sprintf(p, "fl=0x%x, ", slen);
+               p += strlen(p);
+       }
+
+       sprintf(p, "mode=%o: ", st.st_mode);
+       p += strlen(p);
+       switch (st.st_mode & S_IFMT)
+       {
+         case S_IFSOCK:
+               sprintf(p, "SOCK ");
+               p += strlen(p);
+               slen = sizeof sin;
+               if (getsockname(fd, (struct sockaddr *) &sin, &slen) < 0)
+                       sprintf(p, "(badsock)");
+               else
+               {
+                       hp = gethostbyaddr((char *) &sin.sin_addr, slen, AF_INET);
+                       sprintf(p, "%s/%d", hp == NULL ? inet_ntoa(sin.sin_addr)
+                                                  : hp->h_name, ntohs(sin.sin_port));
+               }
+               p += strlen(p);
+               sprintf(p, "->");
+               p += strlen(p);
+               slen = sizeof sin;
+               if (getpeername(fd, (struct sockaddr *) &sin, &slen) < 0)
+                       sprintf(p, "(badsock)");
+               else
+               {
+                       hp = gethostbyaddr((char *) &sin.sin_addr, slen, AF_INET);
+                       sprintf(p, "%s/%d", hp == NULL ? inet_ntoa(sin.sin_addr)
+                                                  : hp->h_name, ntohs(sin.sin_port));
+               }
+               break;
+
+         case S_IFCHR:
+               sprintf(p, "CHR: ");
+               p += strlen(p);
+               goto defprint;
+
+         case S_IFBLK:
+               sprintf(p, "BLK: ");
+               p += strlen(p);
+               goto defprint;
+
+         default:
+defprint:
+               sprintf(p, "dev=%d/%d, ino=%d, nlink=%d, u/gid=%d/%d, size=%ld",
+                       major(st.st_dev), minor(st.st_dev), st.st_ino,
+                       st.st_nlink, st.st_uid, st.st_gid, st.st_size);
+               break;
+       }
+
+printit:
+       if (logit)
+               syslog(LOG_INFO, "%s", buf);
+       else
+               printf("%s\n", buf);
 }
 }
index b3cb8a5..d7992aa 100644 (file)
@@ -33,7 +33,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)version.c  8.3 (Berkeley) 7/13/93";
+static char sccsid[] = "@(#)version.c  8.6.1.3 (Berkeley) 10/24/93";
 #endif /* not lint */
 
 #endif /* not lint */
 
-char   Version[] = "8.3";
+char   Version[] = "8.6.3";