[comp.sources.unix] v16i079: IDA Sendmail kit, Part07/08

rsalz@uunet.uu.net (Rich Salz) (11/14/88)

Submitted-by: Lennart Lovstrand <lovstran@arisia.xerox.com>
Posting-number: Volume 16, Issue 79
Archive-name: ida2/part07

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 7 (of 8)."
# Contents:  ida/doc/part2.ms
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f ida/doc/part2.ms -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"ida/doc/part2.ms\"
else
echo shar: Extracting \"ida/doc/part2.ms\" \(43054 characters\)
sed "s/^X//" >ida/doc/part2.ms <<'END_OF_ida/doc/part2.ms'
X.NH
XMANAGING GENERIC MAIL ADDRESSES
X.LP
XWhile sending mail to people by specifying a mailbox on a named computer
Xmay fulfill the technical requirements of an electronic mail system, it
Xmay not always be very convenient.  With people having accounts on many
Xdifferent hosts and often moving between them, it is hard to keep track
Xof where a person presently will read his or her mail.  For external
Xsenders, remembering strange host names for lots of people is even
Xworse.  Just knowing that Person A, working in the same group as Person
XB, has a mailbox on Computer C does not mean that B also can be reached
Xon that machine.  It may very well be that Computer C is A's personal
Xworkstation with no other accounts than A's.
X.PP
XSimply setting up as many forwarding addresses as possible on all sorts
Xof machines does not solve the problem.  First of all, there might be
Xreasons for a user to want to actually receive mail on any of these
Xmachines\*-e.g. because this may be the easiest way of copying files
Xbetween remote machines.  Also, there is still no visible connection
Xbetween the person and his group, which makes it hard to remember his
Xaddress.
X.PP
XAnother solution would be to have a special machine for mail forwarding,
Xpreferably with a name corresponding to the local organization.  Since
Xall mail has to go through this node in order to reach its recipients,
Xit may prove to be an expensive solution if this means that the extra
Xload will restrain users from doing other useful work on the machine.
XAlso, if this node goes down, no mail will be delivered until it comes
Xup again.
X.PP
XOur proposed solution to the problem is to extend
X.I sendmail 's
Xnotion of aliases to include forwarding of non-local addresses as well
Xas those specific to the local host.  This way, several hosts may share
Xthe non-local part of a aliases table and any of them can do the
Xforwarding.  Users may change their preferred mailbox and computers may
Xbe renamed at any time with no change in the way their inbound addresses
Xlook like.  As an option, users'
X.DQ From:
Xline addresses may be rewritten to correspond to the organizational
Xaddress by using the same database.  For example, this author's mail
Xaddress:
X.QQ
Xlel@ida.liu.se  (\fIaka\fP lel@liuida.\s-1UUCP\s+1)
X.LP
Xis implemented by an entry in the aliases files on set of Sun systems
Xand a Gould.  All of them will forward messages for that address to my
Xpreferred mailbox on a
X.UC DEC system-20.
XAny message sent from either the Suns, the Gould, or the
X.UC DEC system-20
Xwill have 
X.DQ lel@ida.liu.se
Xas the
X.DQ From:
Xline return address.  The envelope sender, however, will at all times
Xpoint to the actual user and host that originated the message.
X.PP
XThis is implemented using an
X.I aliases
Xfile with extended syntax, called
X.I xaliases .
XEntries in this file are marked for either inbound or outbound aliasing.
XInbound is the normal function, and may be used for non-local addresses
Xas well as local ones.  Outbound aliasing is done on header sender lines
Xby rewriting them to the LHS value in the
X.I xaliases
Xentry.  The syntax for entries in this file is:
X.QQ
Xalias, alias, \|.\|.\|.\|: prefix address, prefix address, \|.\|.\|.\|
X.LP
Xwhere the first
X.I alias
Xis the generic address that should be substituted for those in the
Xheader sender lines matching the RHS outbound
X.I addresses .
XAll LHS
X.I aliases
Xare mailboxes that should be forwarded to the RHS
X.I addresses
Xmarked inbound.  The
X.I prefix
Xbefore each RHS
X.I address
Xmarks it as either inbound, outbound or both according to the following
Xtable:
X.QQ
X.TS
Xl l .
X(\fIno mark\fP)	Inbound
X<	Outbound
X>	Inbound
X<>	Both Inbound and Outbound
X.TE
X.LP
XThe
X.I xaliases
Xfile is then parsed by the
X.I xalparse (8)
Xprogram, producing a normal
X.I aliases (5)
Xfile as output together with a
X.I dbm (1)
Xinput file, consisting of the outbound aliases.  An example would
Xbe:
X.QQ
XFooey.Barbaz@dept, bar@dept, foo: <> fooey@besthost, < fobar@otherhost
X.LP
Xwhich means that mails to either
X.DQ Fooey.Barbaz@dept,
X.DQ bar@dept,
Xor
X.DQ foo@localhost
Xwill be forwarded to
X.DQ fooey@besthost
Xand that mail from either
X.DQ fooey@besthost
Xor
X.DQ fobar@otherhost
Xwill have their header sender lines substituted for
X.DQ Fooey.Barbaz@dept.
XSee the supplied
X.I xaliases
Xfile for more examples.
X.PP
XAn
X.I aliases
Xfile with non-local aliases should be processed by running
X.I sendmail
Xwith a configuration file having the
X.UC NEWALIASES
Xidentifier defined.  This makes it parse all addresses as local and
Xreturn them to the
X.UC LOCAL
Xmailer when building the dbm alias tables.  A delivering
X.I sendmail
Xwill then lookup all addresses in the
X.I aliases
Xfile and return any found to the
X.UC LOCAL
Xmailer [ruleset 26].  The normal aliasing mechanisms of
X.I sendmail
Xare then used to distribute the messages further.
X.PP
XThe substitution of
X.DQ physical
Xsenders with
X.DQ generic
Xaddresses, is as previously mentinioned done in the header/sender
Xspecific ruleset 5 by lookup in the
X.UC GENERICFROM
Xdatabase.
X.NH
XSENDMAIL SOURCE MODIFICATIONS
X.LP
X.I Sendmail
Xgives a lot of flexibility to the maintainer and developer of electronic
Xmail.  Still, it lacks certain functionality for which it was determined
Xthat our project's goals could not be fulfilled without.  Just [sic]
Xdeveloping a new configuration file was not adequate, but changes to the
Xsource code itself had to be done.  Still, we did this with the
Xphilosophy that it is best to avoid source code modifications whenever
Xit is possible to obtain the same results by merely changing parameters
Xin the configuration file.
X.LP
XThe following features have been implemented in our current version of
X.I sendmail (5.51++):
X.NH 2
XNameserver Default Argument
X.LP
XPreviously, there was no way of knowing whether a nameserver lookup
Xwas successful or not, thus making that feature of limited value.
XThis version will allow you to add a
X.I default
Xargument to the nameserver lookup function, which will be returned if
Xthe match fails.  A typical usage for this is to determine if a host is
Xaccessible using the
X.UC TCP/IP
Xprotocol family.
XThe extended syntax is as follows:
X.QQ
X.B $[
Xhostname
X.B $:
Xdefault
X.B $]
X.LP
Xwhere the 
X.B $: \fIdefault\fP
Xpart is optional.
X.NH 2
XDirect Access to Dbm(3) Files
X.LP
XThe configuration file syntax has been expanded to include the
Xdeclaration and usage of general
X.I ndbm (3)
Xdatabases.  The option
X.SQ K
X(for
X.I "Keyed database" )
Xhas been added.  It takes two arguments, a one character internal name
Xfor the database and the corresponding
X.I dbm (3)
Xfile(s), as in:
X.QQ
XOKP/usr/lib/mail/pathtable
X.LP
Xwhich defines the internal database
X.SQ P
Xto be associated with the dbm files /usr/lib/mail/pathtable.dir and
Xpathtable.pag (or pathtable.map and pathtable.dat if you are using
XMaryland's
X.I mdbm (3)
Xpackage).
X.PP
XThe
X.SQ P
Xdatabase may now be used to lookup arbitrary strings in the RHS of
Xrewriting rules.  The syntax is as follows:
X.QQ
X\fB$(\fPx key \fB$@\fP arg \fB$:\fP default \fB$)\fP
X.LP
Xwhere
X.I x
Xis corresponds to a previously declared database,
X.I key
Xis the string that should be searched for in the database.
XThe
X.I arg
Xand
X.I default
Xarguments are optional.  The 
X.I default
Xstring is returned is if the
X.I key
Xcould not be found in the database.  If neither
X.I default
Xstring, nor a matching
X.I key
Xis to be found, the whole expression expands to the value of
X.I key .
XHowever, if a result is found, it is used as the format string of a
X.I sprintf (3)
Xexpression, with the
X.I arg
Xas extra argument.  Thus, database values with
X.DQ %s
Xstrings embedded in them can be useful when rewriting expressions.  This
Xcould typically be used in cooperation with the
X.I pathalias (1)
Xprogram to expand routes without leaving
X.I sendmail .
X.PP
XThe
X.I aliases (5)
Xfile is automatically available using the
X.SQ @
Xdatabase and should
X.B not
Xbe declared with a option
X.SQ K
Xstatement.
X.NH 2
XBatched
X.UC SMTP
XSupport
X.LP
X.I Sendmail
Xalready speaks
X.UC SMTP
Xover interactive channels, but because it both will drop errors occurring
Xwhen acting as server as well as hang indefinitely when talking to a
Xnon-responding channel as client, this is not sufficient to process or
Xproduce
X.UC SMTP
Xbatches.
XStill, since the
X.UC SMTP
Xcode already is there,
Xit was considered easier to add batching support internally in
X.I sendmail
Xthan to write new front-end programs.
X.PP
XThe new code defines a new
X.UC MD_BSMTP
Xmode, which is activated by the
X.B \-bb
Xoption or by making a link to 
X.I sendmail
Xnamed
X.I bsmtp .
XThe normal way of digesting
X.UC SMTP
Xbatches is to execute
X.I bsmtp
Xwith no arguments.
X.PP
XTo produce
X.UC SMTP
Xscripts, the 
X.UC M_BSMTP
X(\fBB\fP) mailer flag 
Xhas been added.  It is used as in the following example:
X.QQ -1
XMUUCP-B, P=/usr/bin/uux, F=BDFMSXhmpu, S=0,  R=15/0,  A=uux \- \-z \-r 
X$h!bsmtp
X.LP
XThis defines the
X.UC UUCP-B
Xmailer to send
X.UC SMTP
Xscripts on the standard input to the
X.I uux (1)
Xprogram.
X.NH 2
XSeparate Envelope/Header Rewriting Rulesets
X.LP
XEnvelope and header addresses does not always look the same.  For
Xexample, it
Xis often desirable to have envelope return addresses formed using
X.UC RFC 822
Xroute syntax, while this format more rarely is understood by users'
Xfront-end mail programs.  Another case is when the envelope recipient
Xaddress is expanded to a system route, while the header recipient
Xshould be kept simple.
X.PP
XWith this package, the mail system administrator has the option of
Xseparating rewriting control for envelope/recipient addresses.
XNormally, all sender/recipient addresses are passed through rulesets 1
Xand 2, but if the \fISplitRewriting\fP option
X.SQ /
Xis set, only envelope addresses are handled that way; header addresses
Xare given to rulesets 5 and 6, which should be properly defined.
X.PP
XMailer dependant rewriting may also be controlled in an envelope/header
Xspecific way.  This is accomplished by extending the syntax for the 
X.SQ R
Xand
X.SQ S
Xattributes of the mailer definition statement:
X.QQ
XR=re/rh, S=se/sh
X.LP
Xwith the envelope and header rulesets divided by a slash.  If no slash
Xis found, it functions as before by using the same ruleset for both
Xtypes of rewriting.  A zero or missing ruleset indicates that no
Xrewriting should be done.  In the previous example of the
X.I "Batched \s-1SMTP\s+1 Support" ,
Xno mailer dependant sender rewriting is done, recipient envelope
Xaddresses are rewritten using ruleset 15, but recipient header addresses
Xare left untouched.
X.NH 2
XSeparate Local
X.UC UUCP
XHost Name
X.LP
XWith the extensive, structured world of domains on one side and the
Xflatspaced, shortnamed
X.UC UUCP
Xworld on the other, it may be desirable for a node to have a
X.UC UUCP
Xnode name separate from its normal host name.  For this purpose, the
X.B $k
Xmacro has been introduced to hold the local node's specific
X.UC UUCP
Xhost name.  It defaults to the node's
X.DQ normal
Xhost name (as returned by
X.I gethostname (3)),
Xif not explicitly defined in the
Xconfiguration file.  It is used when rewriting headers in the
X.I "\s-1UUCP\s+1 Relativization Routines"
Xas well as when producing
X.UC UUCP
X.DQ From_
Xlines with the
X.UC M_FROMPATH
X(\fBp\fP) turned on.
X.NH 2
XReturn Path for
X.UC UUCP
XMailers
X.LP
XThe
X.UC M_FROMPATH
X(\fBp\fP) mailer flag is used by the
X.UC SMTP
Xroutines to add the local
Xhost to the envelope sender in the
X.UC "MAIL FROM:"
Xcommand.  This is a useful option for producing trustworthy routes
Xback to the sender for receipts and error messages.  This capability
Xhas now been added the the code that produces
X.UC UUCP
X.DQ From_
Xlines.  The sender's address is simply prefixed using the local host's
X.UC UUCP
Xname and an exclamation mark\*-the canonical way of constructing
Xpaths in the
X.UC UUCP
Xworld.  (For mailers with the
X.UC M_UGLYUUCP
Xflag (\fBU\fP) set, the local host's name is added after the
X.DQ "remote from"
Xstring.)
X.NH 2
X.UC UUCP
XHeader Address Relativization
X.LP
XA new
X.UC M_RELATIVIZE
X(\fBV\fP) mailer flag has been added, which relativizes header lines
Xwith respect to the immediate recipient host.  This means that
X.I paths
Xthrough the remote host will have the remote node's name removed (local
Xrecipients at the remote host are untouched) and that other addresses
Xare rewritten to have paths through the local host.
X.PP
XSpecifically,
X.DQ \fB$h\fP!\|.\|.\|.\|!user
Xaddresses are stripped down to the
X.DQ \|.\|.\|.\|!user
Xpart,
X.DQ \fB$h\fP!user
Xare left untouched, and
X.DQ "others"
Xrewritten into
X.DQ \fB$k\fP!others
X(the initial value of \fB$w\fP is used if \fB$k\fP is undefined).
X.NH 2
XSupport for Multi-Token Class Matches
X.LP
XWhen
X.I sendmail
Xtried to match a LHS \fB$=\fPX class expression, it used to be the case
Xthat it only looked for matches with one token.  If the period is a
Xdelimiter and if
X.DQ foo.\s-1EDU\s+1
Xis a member of the
X.SQ X
Xclass, it would not find the string
X.DQ foo.\s-1EDU\s+1
Xin the class since it contained three tokens
X.DQ foo "" (
X.DQ .
Xand
X.UQ EDU ).
XThis was considered such a great inconvenience that the expression
Xmatching code was rewritten to allow multi-token class matches on the
Xexpense of being somewhat slower.  With the above example, the current
Xversion will first try to find a match for
X.DQ foo
Xthen
X.DQ foo.
Xthen
X.DQ foo.\s-1EDU\s+1
Xand so on, each time incorporating the next successive token of the
Xexpression in the class match.
X.NH 2
XSupport for Embedded Subruleset Calls
X.LP
XBeing a
X.UC LISP
Xhacker of heart, the author couldn't refrain from making
X.I sendmail
Xhandle embedded ruleset calls.  The previous version had the very
Xannoying restriction of only allowing one ruleset call per rule and only
Xallowing the
X.B $@
Xand
X.B $:
Xmacros to appear on its left side.  The current version handles both
Xembedded ruleset calls of the form
X.DQ "$>4$>10$>6 $1@.$2"
Xas well as arbitrarily positioned calls within the RHS expression
X(although the latter has not been fully tested).
X.NH 2
XElaborate Matching Algorithm for Unknown Local Recipients
X.LP
XBased on the idea that it always is a bad idea to throw mail back
Xwith a
X.DQ "User Unknown"
Xerror message if a human operator might be able to guess the actual
Xrecipients identity, we have added a more elaborate search algorithm
Xthat matches unknown recipients with the personal name field of the
X/etc/passwd file.  The previous version of
X.I sendmail
Xoffered a similar functionality, but would only find strings that were
Xexact copies of that field.  This version uses an algorithm that will
Xreturn a number corresponding to the degree of similarity between the
Xtwo strings.  Strings are considered match best if as many mutual
Xsubstrings as possible are found in sequence.  Substrings are delimited
Xby any non-alphabetic character and completely equal substrings are
Xbetter matches than just prefixes.
X.PP
XThe best match of such a search through the /etc/passwd file is returned
Xas the local recipient, provided that only one such match exists.  If no
Xbest match is found (i.e., if more than one
X.I passwd
Xentry have the same highest matching degree), the search fails and the
Xmail is returned with an error message.
X.NH 2
XSupport for Maryland's Mdbm Package
X.LP
XSites that do not yet have the new
X.I ndbm (3)
Xfunctions of
X.UC BSD
X4.3 may still use the
X.I "Database Access Functions"
Xdescribed above using the University of Maryland's public domain
Xmulti-dbm routines, which are available from your nearest
Xcomp.sources.unix archive.  Note that these use different extensions of
Xtheir database files (.map and \&.dat instead of \&.dir and \&.pag) as
Xwell as a different internal format than
X.I dbm (3),
Xso it is still recommended to use
X.I ndbm (3)
Xwhenever possible.
X.NH 2
XImproved Test Mode Output
X.LP
XIt is hard to remember what all these
X.DQ ^X s
Xand
X.DQ ^V s
Xstand for when debugging sendmail rewriting rules, using its address
Xrewriting test mode.  The changes in this version will make macros print
Xin their symbolic form, i.e.
X.DQ "\fB$:\fP"
Xfor
X.DQ "^X,"
Xetc.
X.PP
XIn addition, at least this
X.I sendmail.cf
Xdeveloper often wanted to send addresses directly into a specific
Xruleset without having them automatically rewritten by ruleset 3.
XThus, the initial call to ruleset 3 has been 
X.B deleted
Xin this version.  You will have to send your addresses manually through
Xruleset 3 henceforth if you adopt this change.
X.PP
XFinally, the ruleset rewriting output often became too wide to be easily
Xread due to the excess of quotation marks around the tokens.  These have
Xnow been removed from the test output, leaving just a space between each
Xtoken.  The author thinks this is much more convenient and hopes that
Xyou agree.
X.NH 2
XBetter To: and Cc: Headers of Returned Messages
X.LP
XThe original code would produce multiple To: header lines in returned
Xmessages if the message was sent to more than one recipient.  A typical
Xreason for this to happen was if you used the PostMasterCopy option in
Xyour
X.I sendmail.cf
Xfile.  This version will put the PostMasterCopy on a separate Cc: line
Xand all others together in a comma-separated list on the To: line.
X.NH 2
XQueue Bug Fixed
X.LP
XA nasty little queue bug bit us hard several times last year.  It
Xoccurred when, for whatever reason, the queue daemon ended up processing
Xa locked queue entry as its last.  It immediately discovered that it was
Xlocked and left it alone, but then exited and while doing general
Xcleanup in
X.I finis ,
Xremoved the locked queue file as well.  That way, we frequently started
Xending up with broken queue files and lost messages as a consequence.
XThe fix is to explicitly set the current envelope's id to
X.UC NULL
Xbefore leaving the current queue pass, since it should not exist
Xanyway.
X.NH 2
XShared Input
X.UC SMTP
XBug Tentatively Fixed
X.LP
XThe
X.UC SMTP
Xserver routines read delivery requests from stdin.  Each message is
Xhandled by a different process by forking after the
X.UC "MAIL FROM:"
Xcommand is read.  The parent then sleeps while the child delivers the
Xmessage and continues to process more
X.UC SMTP
Xcommands thereafter.  Now, both parent and child read from stdin and
Xshare the same file descriptor.  However, they do not share the same
X.I _iobuf
Xthat represents the stream, so when the parent starts reading
Xafter the child has died, it reads the very same input that the child
Xhas processed.\**
X.FS
XUnless stdin is connected to a terminal.
X.FE
X.PP
XThere are only two ways out of this.  Either, the parent process don't
Xfork and delivers all messages itself, or they all read unbuffered.  The
Xformer solution (or a variant thereof) is probably better, but the
Xlatter was easier to implement, so that is what presently have been
Xdone.  Since this causes unnecessary overhead as each character has to
Xbe read with a system call, someone ought to make a better fix for this
Xeventually.
X.NH 2
XOptional
X.UC BSD
X2.9 and 4.2 Compatibility Code
X.LP
XThe Kit includes a set of changes that optionally may be added to make
Xthe 5.51 version of
X.I sendmail
Xrun under the Berkeley 4.2 or 2.9 release of
X.UX .
XThe changes neccesary to make it run under 4.2 are very minor and mostly
Xdeal with adding undefined symbols.  The 2.9 changes are fewer than you
Xwould expect, although it still is necessary to drastically trim down
Xthe size of
X.I sendmail 's
Xbuffers if you intend to run it on a
X.UC PDP -11.
XThe 2.9 changes are all enclosed under the
X.UC BSD 29
Xdefine.
X.PP
X.NH 2
XMiscellaneous Changes
X.LP
XIn addition to what already has been mentioned, a set of changes has
Xbeen included that only add minor functionality or deal with less
Ximportant bugs in the original source.  They are further described in
X.I "Appendix A: List of Affected Files" .
X.NH
XCONCLUSION
X.LP
XThe development of the IDA Sendmail Enhancment Kit has been going on
Xmore or less continuously for over two years.  Many were the interim
Xversions and many were the nights spent testing the newly configured
Xsystem.  Still, it is our feeling that the current version is complete
Xenough to be considered generally useful, and it is our sincere hope
Xthat you have found your time spent reading this document worthwhile.
X.PP
XThe problems with complex hybrid addresses are parts of the growing
Xpains of a rapidly expanding world of interconnecting computer networks.
XIt is this author's opinion that it ultimately will be necessary to
Xagree on some common way of identifying message originators and
Xrecipients.  In the mean time, we will have to face the world as it is
Xand try to relieve users' pains as much as possible by letting the MTAs
Xworry about routing and foreign addressing format issues.
X.PP
XAn excellent source for further reading is John Quarterman's and Hosiah
XHoskins' article
X.I "Notable Computer Networks"
X\&
X.[[
X%A John Quarterman
X%A Hosiah Hoskins
X%T Notable Computer Networks
X%J Communications of the ACM
X%V 29
X%N 10
X%D 1986
X.]],
Xwhich gives a thorough overview of existing major computer networks and
Xsupplied services around the world, with an emphasis on electronic mail.
XTheir survey has been an invaluable source of information for this
Xauthor among others.
X.PP
XElectronic mail is truly an interesting medium.  It combines the speed
Xof the telephone with the asychronacity of the written letter.  In
Xaddition, it gives possibilities for developing all sorts of interesting
Xcomputerized communication services, such as electronic conferencing
Xsystems and database or expert systems consultation services.  But above
Xall, it communicates across all boundaries with no respect to operating
Xsystems or computer brands.  It may not always be painless, but that can
Xbe improved.  As long as we communicate, everything can be improved.
X.QQ
X.ad r
X.I
XThe Mail Connectivity Conspiracy Continues\|.\|.\|.\|\c
X.R
X\&
X.[[
X%A Mark Crispin
X%T (Private Communication)
X%D 1986
X.]]
X.br
X.ad b
X.AP A
XLIST OF AFFECTED FILES
X.LP
XThis is description of all changes made to the
X.I sendmail
Xsource files.
X.SH
X.UL "Nameserver Default Argument"
X.JB daemon.c
XChanged to return
X.UC TRUE
Xif
X.I gethostbyname (3)
Xsucceeds and
X.UC FALSE
Xif not.
X.JB parseaddr.c
XChanged to interpret the
X.B $:
X.I default
Xargument and to take care of the returned value of
X.I maphostname .
X.SH
X.UL "Direct Access to Dbm(3) Files"
X.JB alias.c
XChanged to allow access using the
X.SQ @
Xdatabase.
X.JB conf.c
XChanged to initialize all databases to
X.UC DB_NOTYETOPEN .
X.JB daemon.c
XThe lookup function
X.I mapkey
Xgoes here.  It takes four arguments:
X.I db ,
Xthe character denoting the database,
X.I key ,
Xthe lookup string and buffer in which a result is returned,
X.I keysiz ,
Xthe maximum size of the key buffer, and
X.I arg ,
Xwhich either should be a character string or
X.UC NULL .
XThe function returns
X.UC TRUE
Xif a match could be found and
X.UC FALSE
Xotherwise. The debugging flag 60 may be used to trace database lookups.
X.JB main.c
XAdded mappings of
X.B $(
Xand
X.B $)
Xto
X.UC KEYBEGIN
Xand
X.UC KEYEND .
X.JB parseaddr.c
XAdded code to interpret \fB$(\fP\|.\|.\|.\|\fB$)\fP
Xconstructs.
X.JB readcf.c
XAdded understanding of the
X.SQ K
Xoption.
X.JB sendmail.h
XAdded definitions for the macro characters 
X.UC KEYBEGIN
Xand 
X.UC KEYEND .
XAdded the declaration of the global database file table DbmTab.
X.SH
X.UL "Batched \s-1SMTP\s+1 Support"
X.JB main.c
XAdded the
X.UC MD_BSMTP
Xoption and the usage of
X.I bsmtp
Xas an alternate name of
X.I sendmail
Xthat automatically will turn on the
X.UC MD_BSMTP
Xmode.
X.JB sendmail.h
XAdded the
X.UC MD_BSMTP
Xdefine.
X.JB srvrsmtp.c
XAdded the
X.I batched
Xargument (boolean) to the
X.I smtp 
Xfunction and changes that will make it mail
Xback errors is
X.I batched
Xis set.
X.JB usersmtp.c
XChanged the code to automatically generate internal
X.UC SMTPGOODREPLY
X(\fB250\fP)
Xreply codes to all
X.UC SMTP
Xcommands if the
X.UC M_BSMTP
Xmailer flag is set.
X.SH
X.UL "Separate Envelope/Header Rewriting Rulesets"
X.JB headers.c
XChanged to propagate a flag telling if this is an envelope or header
Xaddress for
X.I remotename
Xto rewrite.
X.JB main.c
XTrace statement changed to display mailers' envelope and header specific
Xrulesets.
X.JB parseaddr.c
XAdded a boolean
X.I headeraddress
Xargument to
X.I remotename
Xand code to distinguish between envelope and header rewriting.
X.JB queue.c
XSet both envelope and header rewriting rulesets to -1 in
X.I nullmailer .
X.JB readcf.c
XMade it parse the
X.SQ /
Xoption and the extended mailer ruleset specification syntax.
X.JB sendmail.h
XExtended the mailer declaration to include both envelope and header
Xspecific rulesets.
X.SH
X.UL "Separate Local \s-1UUCP\s+1 Host Name"
X.JB deliver.c
XUsed when producing
X.DQ From_
Xlines.
X.JB main.c
XAdded the definition of
X.B $k
Xto the initial value of
X.B $w .
X.JB parseaddr.c
XUsed when making addresses
X.UC UUCP
Xrelative.
X.SH
X.UL "Return Path for \s-1UUCP\s+1 Mailers"
X.JB deliver.c
XChanged to look for the mailer flag
X.UC M_FROMPATH
Xwhen producing the
X.UC UUCP
X.DQ From_
Xlines.
X.SH
X.UL "\s-1UUCP\s+1 Header Address Relativization"
X.JB parseaddr.c
XChanged to
X.I uurelativize
Xaddresses after ruleset 4 has been applied if the
X.U M_RELATIVIZE
Xmailer flag is set.  The actual
X.I uurelativize
Xis here too.
X.JB sendmail.h
XDefined the
X.UC M_RELATIVIZE
Xflag to be 'V'.
X.SH
X.UL "Support for Multi-Token Class Matches"
X.JB parseaddr.c
XCrude code added to enable multi-token class matches.
X.SH
X.UL "Support for Embedded Subruleset Calls"
X.JB parseaddr.c
XWrote a separate
X.I callsubr
Xfunction to take care of subruleset calls.
X.SH
X.UL "Elaborate Matching Algorithm for Unknown Local Recipients"
X.JB recipient.c
XAdded the 
X.I partialstring
Xmatching routine and code that calls it for unknown local recipients.
X.SH
X.UL "Support for Maryland's mdbm Package"
X.JB alias.c
XChanged to be independent on which package is being used.
X.JB conf.h
XAdded the
X.UC MDBM
Xdefine, to be used if the mdbm routines should be used instead of the
Xndbm. 
XNote that
X.UC NDBM
Xstill should be defined.
X.JB mdbm_compat.h
XA mdbm compatibility file, used to define macros which map ndbm
Xfunctions to their mdbm equivalents.
X.JB sendmail.h
XAdded mdbm compatibility macros and generalized the dbm code in general.
X.SH
X.UL "Improved Test Mode Output"
X.JB main.c
XChanged it to export the macros' symbolic names.
X.JB parseaddr.c
XChanged it to call
X.I printcav
Xinstead of
X.I printav
Xwhen tracing the rewriting rules.
X.JB sendmail.h
XIncluded main.c's macro table among the global variables.
X.JB util.h
XChanged it to print macros using their symbolic names.  Added the
X.I printcav
Xfunction, which prints argument vectors without enclosing quotation
Xmarks.
X.SH
X.UL "Better To: and Cc: Headers of Returned Messages"
X.JB savemail.c
XChanged the code to produce the above result.
X.SH
X.UL "Queue Bug Fixed"
X.JB queue.c
XSet the current envelope's id to
X.UC NULL
Xbefore exiting.
X.SH
X.UL "Shared Input \s-1SMTP\s+1 Bug Tentatively Fixed"
X.JB main.c
XTurned off buffering from standard input before the call to
X.I smtp .
X.SH
X.UL "Optional \s-1BSD\s+1\&4.2 Compatibility Code"
X.JB conf.h
XAdded the definition of
X.I sigmask
Xif left undefined by <signal.h>.
XAdded mock definitions for
X.UC LOG_MAIL ,
X.UC TRY_AGAIN ,
Xand
X.I h_errno .
X.SH
X.UL "Optional \s-1BSD\s+1\&2.9 Compatibility Code"
X.JB conf.h
XAdded the definition of 
X.UC EPROCLIM
X(not really applicable under
X.UC BSD
X2.9) and the inclusion of ../lib/libndir/dir.h.
X.JB conf.c
XChanged to include <a.out.h> instead of <nlist.h>, and to search /unix
Xinstead of /vmunix for kernel symbols.
X.JB daemon.c
XChanged to use
X.I gethostname (3)
Xinstead of <whoami.h> to find out its local host name.
X.JB deliver.h
XChanged not to include <netdb.h>
X.JB err.c
XChanged not to include <netdb.h>
X.SH
X.UL "Miscellaneous Changes"
X.JB deliver.c
XAn array of verbose mailer error messages has been added together with
Xcode that prints out the error in text instead of just giving the code
Xin numeric form.  [Incorporated from
X.UC USENET ]
X.JB main.c
XA new
X.B \-Z
Xcommand line option has been added, which defines the name of the frozen
Xconfiguration file in analogy with
X.B \-C .
X.JB parseaddr.c
XHas been changed to compare aliased users with
X.I sameword
Xinstead of
X.I strcmp
Xto make up for differencing case.
X.JB sendmail.h
XThe reference to <sys/syslog.h> has been replaced by <syslog.h> unless
Xsendmail is compiling on a
X.UC VAX .
XI'm not sure that this is correct, but neither our Suns, nor the Gould
Xhad syslog.h in that directory.  Also,
X.I s_host ,
Xhas been forced undefined if compiling on a Sun.  This is because it is
Xdefined in one of the Sun's include files as well.
X.JB srvrsmtp.c
XThe
X.B $s
Xmacro was set to be the name of the remote host, but then cleared before
Xit could be used.  It is now being set
X.I after
Xthe relevant cleanup routines have been run.  An unnecessary additional
Xrewriting of envelope recipient addresses in the
X.UC SMTP
Xroutines has been removed.  It could even be harmful if it was to be
Xleft alone.
X.JB ../doc/op.me
XAdded text to describe our new, wonderful features.
X.AP C
XCUSTOMIZATION PARAMETERS
X.LP
XThe following is a list of all
X.I m4
Xidentifiers used in the configuration file.
XAll of them are optional.
X.JS ALIASES
XName of the aliases file, defaults to sendmail's default.
X.JS BSD29
X.br
XActivates various hacks for usage on
X.UC BSD
X2.9 systems.
X.JS BANGIMPLIESUUCP
X.br
XIf defined, will inhibit domaintable lookups for unqualified nodes first
Xin
X.SQ ! -paths
Xand always interpreting them to reside in the
X.UC UUCP
Xpseudo-domain.
X.JS DECNETNODES
XA file containing
X.UC DEC net
Xhost names.  Used in combination with
X.UC DECNETXTABLE
Xto determine delivery through the
X.UC DEC net
Xmailer and when to expand flatspaced
X.UC DEC net
Xhost names into domains.
X.JS DECNETXTABLE
XThe
X.UC DEC net
Xtranslation table.  Returns a node's
X.UC DEC net
Xhost name if given its domain name. 
X.I Dbm "" (
Xfile, see ruleset 24 for more info).
X.JS DEFAULT_HOST
XExplicit host name, replaces automatic definition of
X.B $w .
X[Not normally used]
X.JS DEFAULT_DOMAIN
XThe string that (+ 
X.SQ "." )
Xwill be attached to
X.B $w
Xto form
X.B $j ,
Xthis node's official domain name.  Should only be left undefined when
Xyour hostname (\fB$w\fP) already contains its domain.
X.JS DOMAINTABLE
X.I Dbm
Xdatabase used for hostname canonicalization, i.e.  to find the official
Xdomain name for local or otherwise unqualified hosts.
X.JS GENERICFROM
XA database mapping actual user names to generic user names.  Used
Xinstead of
X.UC HIDDENNET
Xin a heterogeneous environment.
X.JS HIDDENNET
XPoints to a file containing a list of host names, one per line.  Mail
Xfrom users on any of these hosts will have their host names substituted
Xfor our host,
X.B $w .
X.JS LIBDIR	
X.br
XThe directory that will hold most data files, including
Xsendmail.{hf,st}; defaults to /usr/lib/mail.
X.JS PATHTABLE
XThe heart & soul of this sendmail configuration\*-the pathalias routing
Xtable in
X.I dbm (3)
Xformat, as produced by the
X.I pathalias (1)
Xprogram.  If you want some kind of routing capabilities, you either
Xdefine this or rely on
X.UC RELAYHOST/RELAYMAILER .
X.JS MAILERTABLE
XA
X.I dbm
Xtable mapping node names to
X.DQ "mailer:host"
Xpairs.  It is used for special cases when the resolving heuristics of
Xruleset 26 aren't enough.
X.JS NEWALIASES
XIf defined, will make ruleset 26 return all addresses as local.  This
Xshould be used by the newaliases program only when parsing the aliases
Xfile if you want to handle non-local aliases as well as local.
X.JS PSEUDONYMS
XAdditional names that we are known under (in addition to the nicknames
Xreturned by
X.I gethostbyname (3)).
X.JS "RELAY_HOST & RELAY_MAILER"
XName of the host and mailer to ship unknown recipient addresses to.  Not
Xnecessary to define if you have a complete
X.UC PATHTABLE .
X.JS RSH_SERVER
XIf defined, do local deliveries by 
X.I rsh (1)'ing
X/bin/mail on the 
X.UC RSH_SERVER
Xhost.
X.JS SPOOLDIR
XDirectory for sendmail queue files; defaults to /usr/spool/mqueue.
X.JS UUCPNAME
XThis node's
X.UC UUCP
Xhost name, if different from
X.B $w .
X.JS UUCPNODES
XA file containing names of directly connectable 
X.UC UUCP
Xnodes, normally /usr/lib/uucp/L.sys.
X.JS UUCPPRECEDENCE
XIf defined, will change the interpretation of mixed
X.SQ ! -
X/
X.SQ @ -addresses
Xto use heuristics instead of always preferring
X.UC RFC 822
Xstyle.\**
X.FS
XNot fully tested.
X.FE
X.JS UUCPRELAYS
XName of file containing names of known 
X.UC UUCP ) (
Xrelays.  Header addresses containing paths through any of these will be
Xshortened by having the path to the relay removed.  (It is assumed that
Xpaths to each of these are known to everybody)
X.JS UUCPXTABLE
XA table mapping domain node names to 
X.UC UUCP
Xnode names. Used in envelope addresses sent using  
X.UC UUCP /rmail.
X.AP D
XLIST OF DOMAINS
X.LP
XThe following is a list of all top-level domains officially registered
Xwith the SRI Network Information Center as of May 13, 1987:
X.QQ
X.SH
XOrganizational Domains
X.LP
X.TS
Xbox;
XlI lI
Xlp-1 l .
XDomain	Organizations
X_
XCOM	Commercial
XEDU	Educational
XGOV	Government
XMIL	Military
XNET	Network Administrations
XORG	Other Organizations
X.TE
X.SH
XNational Domains
X.LP
X.TS
Xbox;
XlI lI
Xlp-1 l .
XDomain	Country
X_
XAU	Australia
XDE	Germany
XFI	Finland
XFR	France
XIL	Israel
XJP	Japan
XKR	Korea
XNO	Norway
XNL	The Netherlands
XNZ	New Zealand
XSE	Sweden
XUK	The United Kingdom
XUS	The United States of America
X.TE
X.SH
XNetwork Domains
X.LP
X.TS
Xbox;
XlI lI
Xlp-1 l .
XDomain	Network
X_
XARPA	The Advanced Research Projects Agency Network
X.TE
Xwhich is the only officially registered network domain, but others more
Xor less widely recognized are:
X.TS
Xbox;
Xlp-1 l .
XBITNET	IBM Network, includes \s-1NETNORTH\s+1 and \s-1EARN\s+1
XCSNET	The Computer Science Network
XJUNET	The Japanese University Network
XMAILNET	A now deceased(?) networking project centered around \s-1MIT-MULTICS\s+1
XOZ	The Australian Computer Science Network (ACSnet)
XSUNET	The Swedish University Network
XUNINETT	The Norwegian University Network
XUUCP	The \s-1UNIX\s+1-to-\s-1UNIX\s+1-Copy Network
X.TE
X.AP F
XLIST OF DATA FILES
X.LP
XThe following is a list of all data files used by the
X.I sendmail
Xprogram in conjunction with the supplied configuration file.  Not all of
Xthem are used in the sample setup.  Not all of them will probably be
Xneeded by your setup either.
X.JB aliases
X\&.\|.\|.is better described in
X.I aliases (5).
X.JB domaintable
X\&.\|.\|.is domain name table used when finding a node's canonical name.
XIt is written in
X.I dbm (1)
X.B parse
Xformat.
X.JB generics
X\&.\|.\|.is automatically produced by the
X.I xalparse (8)
Xprogram from the xaliases file.  It contains entries mapping sending
Xuser's real addresses to generic ones.
X.JB hiddennet
X\&.\|.\|.may contain a list of node (domain) names that should be hidden
Xby the local host's name on header sender addresses.
X.JB mailertable
X\&.\|.\|.defines the mapping from node (domain) names to
X.I "Special Mailers" .
XIt is written in
X.I dbm (1)
X.B parse
Xformat, with each value being a
X.DQ mailer:host
Xtuple.
X.JB newaliases.cf
X\&.\|.\|.is a configuration file produced by having defined the
X.UC NEWALIASES
Xidentifier in the master file.  This should only be used when producing
Xa new
X.I aliases (5)
Xdbm table, because it returns all addresses to the
X.UC LOCAL
Xmailer in order to accept non-local aliases.
X.JB pathtable
X\&.\|.\|.is the basis for all explicit routing decisions.  It is written
Xin
X.I pathalias (1)
Xformat and describes how systems connect to each other and where to
Xforward according to (parent) domains.
X.JB xaliases
X\&.\|.\|.is the extended aliases file that is used to produce the
X.I aliases (5)
Xfile together with the
X.I generics
Xfile.  It is further described in the section about
X.I "Managing Generic Mail Addresses" .
X.JB \\\\\\\\k:\fInetwork\fB/nodes\\\\\\\\h'|\\\\\\\\n:u'\\\\\\\\v'+1'\fInetwork\fB/xtable\fR\\\\\\\\v'-1'
X.\".JB \fInetwork\fB/nodes\fR
X.\"\&.\|.\|.and.\|.\|.
X.\".br
X.\".ti -\n(I\n(IRu
X.\".B \fInetwork\fB/xtable\fR\t\c
X\&.\|.\|.are used when translating node names from one network to
Xanother.  The
X.B nodes
Xfile contain all internally known node names for the network and
X.B xtable
Xis a translation table that maps official domain names to the network's
Xinternal node names.
X.JB uucp/relays
X\&.\|.\|.contains node names of well-known
X.UC UUCP
Xrelays.  It is used when compressing header paths in the header
Xrewriting rulesets.
X.AP I
XINSTALLATION INSTRUCTIONS
X.LP
XThese instructions will tell you step-by-step how to install and bring
Xthe Kit's
X.I sendmail
Xsystem up.  The source code modifications are given as context
X.I diff (1)'s,
Xbased on the
X.UC BSD
X4.3 release of
X.I sendmail
X(version 5.11), ready to be installed using Larry Wall's eminent
X.I patch
Xprogram.  You will also need Maryland's
X.I mdbm
Xlibrary if you intend to use this instead of
X.I ndbm .
XFinally, in order to automatically produce routing tables, you will need
XPeter Honeyman's
X.I pathalias
Xprogram.  All of these are available from your nearest
X.UC USENET
X.B comp.sources.unix
Xarchive.
X.PP
XNow, assuming that you have read this far and made up your mind to try
Xit all for yourself, do the following:
X.II 1
XUnpack the Kit in the
X.B sendmail
Xdirectory (preferably).  This should give you a new
X.B ida
Xsubdirectory with all the Kit's files.
X.II
XGoto
X.B sendmail/ida
Xand check that you agree with the Makefile's definitions.  If you change
Xanything, do a
X.DQ "make configure"
Xto propagate those changes to the subdirectories' Makefiles.
X.II
XGoto
X.B sendmail/ida/doc .
XDoing
X.DQ "make doc"
Xwill print out this paper but since you already are reading it, this
Xmight be unneccesary.  Anyway, do
X.DQ "make man"
Xto print the manual pages.  Do
X.DQ "make install"
Xto install them in your manuals directory.
X.II
XGoto
X.B sendmail/ida/patches
Xand do
X.DQ "make backup."
XThis will create a backup copy of
X.B sendmail/src/*.[hc]
Xand
X.B sendmail/doc/op.me
Xin
X.B Backup.tar .
XYou can restore them if necessary by performing
X.DQ "make restore,"
Xstill in the patches directory.
X.II
XDo one of
X.DQ "make bsd43,"
X.DQ "make bsd42,"
Xor
X.DQ "make bsd29"
Xto patch the
X.I sendmail
Xsource to the required compatibility level.  You will need
X.I patch (1),
Xfor this or else edit the files by hand.  Look out for rejected patches.
X.II
XGoto
X.B sendmail/src
Xand recompile
X.I sendmail .
XSee that it still works.  Your old configuration file
X.I should
Xstill work unless you depend on some obscure side effects.  Note that a
X.UC BSD
X4.2 configuration file might not work with
X.I sendmail
X5.11.
X.II
XGoto
X.B sendmail/ida/aux
Xand do
X.DQ "make"
Xto compile the auxiliary programs.  Try them out, guided with the newly
Xprinted manual pages.
X.II
XDo
X.DQ "make install"
Xto install the programs in
X.UC BINDIR
X(\fB/usr/local/bin\fP by default; but another choice would be
X.B /usr/lib/mail
Xif you only intend to use them with this kit).  It's also about time to
X(manually) do a (symbolic) link from
X.B /usr/ucb/bsmtp
Xto
X.B /usr/lib/sendmail
Xif you intend to receive batched
X.UC SMTP
Xmail.
X.II
XGoto
X.B sendmail/ida/cf
Xand inspect the supplied
X.I m4 (1)
Xconfiguration definitions.  Send
X.B Sendmail.mc
Xto your line printer and study it.  Do
X.DQ "make"
Xto see how the sample configurations look expanded.
X.II
XGoto
X.B sendmail/ida/lib
Xand inspect the supplied sample data files.  Try applying the
X.I xalparse
Xprogram on the
X.I xaliases
Xfile if you feel like it.
X.II
XDetermine your site's routing capabilities and create your corresponding
Xdata files in
X.UC LIBDIR .
XGo back to
X.B sendmail/ida/cf
Xand create your own
X.I m4 (1)
Xconfiguration file using the samples as templates.  Produce an actual,
Xpersonal
X.B sendmail.cf
Xfile.
X.II
XTry out your new
X.I sendmail
Xsystem.
X.br
XGood Luck!
X.FS [\\n+(II]
XMail problems or comments to lel@ida.liu.se.
X.FE
X.AP P
XLIST OF AUXILIARY PROGRAMS
X.LP
XAll programs but
X.I scanf
Xare further described by their manual pages.  What you find here is only
Xa short overview of their functionality.
X.JB dbm
XA general
X.I dbm (3)
Xdatabase management tool.  Clears, loads, and dumps complete databases.
XStores, fetches, and deletes individual keys.  Also includes a special
Xparser that produces key/value pairs from a compressed but easily
Xreadable format.
X.JB mkdomext
XMake the extended set of domain names.  This program acts as a filter
Xthat, when supplied with fully qualified domain names on stdin, will
Xgenerate all legal abbreviations of these on stdout with respect to the
Xparent domains given on the command line.  It is used to be able to
Xrecognize unqualified local subdomains and sibling domains from one or
Xmore positions in the domain hierarchy.  See
X.UC RFC 822,
Xsection 6.2.2 for a rationale.
X.JB rmail
XYet another implementation of the remote mail receiving program.  This
Xtime with raw header line logging together with
X.I dbm
Xlookup of remote node names and a more liberal parsing of
X.DQ "From_"
Xlines.  Needs to run
X.DQ "seteuid root"
Xto be able to use the macro setting options of
X.I sendmail .
XNo new manual supplied, your old one will have to do.  Actually, your
Xold rmail itself will probably do too.
X.JB scanf
XQuick hack to scan and extract substrings from input lines using the
X.I scanf (3)
Xfunction.  No manual page, the source code is self documenting.
X.JB xalparse
XA program that parses an extended aliases file and produceces an ordinary
Xaliases file together with a file with generic address translations.
XIt's all described in the manual page and in the section about
X.I "Managing Generic Mail Addresses" .
XQuod vide.
X.AP R
XREFERENCES
X.LP
X.[
X$LIST$
X.]
X.AP T
XTABLE OF CONTENTS
X.SH
XSections
X.LP
X.X1 "\(sc 1" "INTRODUCTION"
X.X1 "\(sc 2" "NAMES, ADDRESSES, AND ROUTES"
X.X1 "\(sc 3" "MAIL ADDRESS FORMATS"
X.X2 "\(sc 3.1" "Relative Addresses"
X.X2 "\(sc 3.2" "Absolute Addresses"
X.X2 "\(sc 3.3" "Attribute Addresses"
X.X2 "\(sc 3.4" "Hybrid Addresses"
X.X1 "\(sc 4" "A SHORT ANATOMY OF THE ELECTRONIC MESSAGE"
X.X2 "\(sc 4.1" "The Envelope"
X.X2 "\(sc 4.2" "The Headers"
X.X1 "\(sc 5" "ADDRESS REWRITING STRATEGIES"
X.X2 "\(sc 5.1" "Sneak-In Preview"
X.X2 "\(sc 5.2" "The Configuration File"
X.X2 "\(sc 5.3" "Canonicalizing the Address"
X.X2 "\(sc 5.4" "Finding Route and Mailer"
X.X2 "\(sc 5.5" "Externalizing the Address"
X.X1 "\(sc 6" "MANAGING GENERIC MAIL ADDRESSES"
X.X1 "\(sc 7" "SENDMAIL SOURCE MODIFICATIONS"
X.X2 "\(sc 7.1" "Nameserver Default Argument"
X.X2 "\(sc 7.2" "Direct Access to Dbm(3) Files"
X.X2 "\(sc 7.3" "Batched \s-1SMTP\s+1 Support"
X.X2 "\(sc 7.4" "Separate Envelope/Header Rewriting Rulesets"
X.X2 "\(sc 7.5" "Separate Local \s-1UUCP\s+1 Host Name"
X.X2 "\(sc 7.6" "Return Path for \s-1UUCP\s+1 Mailers"
X.X2 "\(sc 7.7" "\s-1UUCP\s+1 Header Address Relativization"
X.X2 "\(sc 7.8" "Support for Multi-Token Matches"
X.X2 "\(sc 7.9" "Support for Embedded Subruleset Calls"
X.X2 "\(sc 7.10" "Elaborate Matching Algorithm for Unknown Local Recipients"
X.X2 "\(sc 7.11" "Support for Maryland's Mdbm Package"
X.X2 "\(sc 7.12" "Improved Test Mode Output"
X.X2 "\(sc 7.13" "Better To: and Cc: Headers of Returned Messages"
X.X2 "\(sc 7.14" "Queue Bug Fixed"
X.X2 "\(sc 7.15" "Shared Input \s-1SMTP\s+1 Bug Tentatively Fixed"
X.X2 "\(sc 7.16" "Optional \s-1BSD\s+1 2.9 and 4.2 Compatibility Code"
X.X2 "\(sc 7.17" "Miscellaneous Changes"
X.X1 "\(sc 8" "CONCLUSION"
X.SH
XAppendices
X.LP
X.X1 "Appendix A" "LIST OF AFFECTED FILES" "Appendix M"
X.X1 "Appendix C" "CUSTOMIZATION PARAMETERS" "Appendix M"
X.X1 "Appendix D" "LIST OF DOMAIN NAMES" "Appendix M"
X.X1 "Appendix F" "LIST OF DATA FILES" "Appendix M"
X.X1 "Appendix I" "INSTALLATION INSTRUCTIONS" "Appendix M"
X.X1 "Appendix P" "LIST OF AUXILIARY PROGRAMS" "Appendix M"
X.X1 "Appendix R" "REFERENCES" "Appendix M"
X.X1 "Appendix T" "TABLE OF CONTENTS" "Appendix M"
END_OF_ida/doc/part2.ms
if test 43054 -ne `wc -c <ida/doc/part2.ms`; then
    echo shar: \"ida/doc/part2.ms\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 7 \(of 8\).
cp /dev/null ark7isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 8 archives.
    echo "See ida/README and ida/INSTALL for further directions."
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0

-- 
Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.