+INTRODUCTION:
+-------------
+
+This document describes (in some detail, though undoubtedly not enough!)
+the sendmail configuration files currently in use at Berkeley as distributed
+with version 5.61 of sendmail. It discusses the configuration file
+directory hierarchy, how the files are processed by m4(1), what functionality
+the files provide, what m4(1) options can be used to produce specific
+results, and goes through an example or two. It concludes with a list
+of things that will change in the next release of the configuration files.
+
+This is a working draft; your comments are appreciated. Please send your
+suggestions to Phil Lapsley, phil@ucbvax.berkeley.edu, ...!ucbvax!phil.
+
+
+HIERARCHY:
+----------
+
+The "cf" subdirectory is organized as follows:
+
+ cf
+ |
+ +---------------+---------------+
+ | | |
+ sitedep m4 cf
+ | | / \
+ *.m4 *.m4 *.mc *.cf
+
+where the directories contain the following:
+
+ sitedep Site dependent parts of configuration files
+ in m4(1) include files.
+
+ m4 Site independent parts of configuration files
+ in m4(1) include files.
+
+ cf Includes "master configuration" (.mc) files
+ that include m4 files from ../m4 and ../sitedep.
+ .mc files are processed by m4(1) and result in
+ configuration files (.cf).
+
+In the remainder of this document, all path names are referenced
+relative to the top level "cf" directory. Hence, the m4 subdirectory
+is called "cf/m4".
+
+
+WHERE m4(1) FITS INTO ALL OF THIS:
+----------------------------------
+
+Configuration files are built by typing "make" in cf/cf. This
+runs m4(1) on the .mc files in cf/cf and produces .cf files.
+
+The philosophy at Berkeley is to place as much information into
+one .mc file as possible, and then use m4 conditional substitution
+(ifdef, for example) to produce other configuration files from it.
+This results in a substantial reduction of duplicated code that must
+be maintained separately.
+
+The main master configuration file that contains all this information
+is "cf/proto.mc". This file has a number of m4 conditional substitutions
+that can be controlled by other .mc files that include "cf/proto.mc".
+
+For example, most hosts at Berkeley have only SMTP (TCP) connections
+to other hosts. A file called "ucbproto.cf" takes care of these
+machines by defining the m4 flags needed to produce only SMTP mailer
+definitions from "cf/proto.mc". Since this is default behavior, very
+little needs to be defined.
+
+But some hosts at Berkeley (e.g., cad.Berkeley.EDU) have both SMTP
+connections and UUCP connections as well. Thus, they need to
+produce a configuration file that contains both SMTP and UUCP mailer
+definitions, and they need to include a list of directly connected
+UUCP neighbors. The file "cf/cad.mc" does this by setting the m4
+flags for "cf/proto.mc" that say "(1) I am a UUCP host with hostname "ucbcad",
+(2) a list of my UUCP neighbors can be found in ../sitedep/uucp.cad.m4".
+
+Thus, there are many .mc files in cf/cf that simply define m4 flags and
+then include "cf/proto.mc" to produce a specific configuration file.
+
+Note:
+
+ IT IS STRONGLY SUGGESTED THAT YOU, THE SYSTEM MANAGER,
+ CONTINUE TO MAINTAIN CONFIGURATION FILES BY USING THIS
+ m4(1) METHOD. TRYING TO MAINTAIN MULTIPLE .CF FILES
+ ON SEPARATE MACHINES WILL LEAD TO INSANITY.
+
+
+With that out of the way, we should now examine the functionality
+provided by the supplied sendmail configuration files, and then
+talk in detail about the m4(1) options that control this.
+
+FUNCTIONALITY PROVIDED BY THE SUPPLIED SENDMAIL CONFIGURATIONS:
+---------------------------------------------------------------
+
+Mailers:
+--------
+
+The sendmail configuration files come with the following mailers:
+
+ local For delivery of messages to users on the
+ local machine.
+
+ tcp For SMTP delivery of messages across the
+ the Internet.
+
+ tcpld For SMTP delivery of messages within the
+ local domain.
+
+ uucp For delivery of messages to a UUCP neighbor.
+
+ smtpuucp For delivery of messages to a UUCP neighbor
+ with whom we also share Internet connectivity.
+
+The tcp/tcpld mailers and the smtpuucp mailers deserve a little more
+explanation.
+
+The "tcp" and "tcpld" mailers:
+------------------------------
+
+As regards tcp and tcpld: in theory, there should be only one mailer
+here, called "smtp", that deals with addresses in the form "user@host.domain".
+Everyone on the Internet would use this, regardless of what domain
+they were in. Host name lookups would be performed via the domain naming
+system (DNS), and no central registry of machine names would be necessary.
+
+Unfortunately, this is not the case. The MILNET community is still
+in transition towards the DNS, and until this transition is complete,
+they do not have to use the nameserver. Rather, they can "legally"
+still use the host table supplied by SRI-NIC to translate names to
+addresses. This means that to be strictly legal, we must send out
+messages in the form "user@host.domain" ONLY FOR machines that are
+registered with SRI NIC. Machines that are not registered with the
+NIC must be "hidden" behind a relay machine, e.g.,
+user%unregistered_host@registered_host.domain. This, when MILNET folks
+reply to this, the mail passes through "registered_host.domain" first.
+
+Currently this "hiding" behind NIC registered hosts is performed by
+the "tcp" mailer.
+
+Since you don't want to register all the hosts at your site with
+the NIC (and they don't want you to!), the "tcpld" mailer was created.
+The idea here is that you KNOW all the hosts in your local domain
+use the nameserver, so there is no need to hide mail behind a NIC
+registered relay -- that would only slow things down. So the "tcpld"
+does not do any hiding of unregistered hosts behind a registered relay.
+
+Eventually the "tcpld" mailer will become the "smtp" mailer mentioned above.
+
+The "smtpuucp" mailer:
+----------------------
+
+The "smtpuucp" mailer is another fun one. As time progresses, many
+hosts with whom one has UUCP connections join the Internet. Unfortunately,
+if the UUCP connection existed for any length of time, people are
+probably used to using it, complete with the bangist syntax that comes
+with UUCP. As a result, many sites elect to keep their
+UUCP connections even though they have TCP/IP connectivity to the sites
+in question. This turns out not be such a good idea because of the
+double-queuing incurred by UUCP, explained in the following example.
+
+For concreteness, consider the following scenario: ucbvax.Berkeley.EDU
+(UUCP host "ucbvax") and decvax.dec.com (UUCP host "decvax") have shared
+a cross county UUCP link that is heavily used by many people. Let's say
+that a piece of mail is routed through the ucbvax-decvax link via UUCP.
+The queueing process is:
+
+
+step host action
+----- ----- ------
+1 ucbvax incoming mail is accepted via UUCP
+2 ucbvax uuxqt is queued to invoke sendmail.
+3 ucbvax sendmail parses the message.
+4 ucbvax sendmail passes the message to the UUCP
+ mailer for delivery to decvax.
+5 ucbvax message is placed in the outgoing UUCP queue for decvax
+
+6 decvax uucico takes the message from ucbvax
+7 decvax uuxqt is queued to invoke sendmail
+8 decvax sendmail parses the message
+9 decvax sendmail passes the message to someplace else.
+
+Note that the message transited the inbound UUCP queue on ucbvax, the sendmail
+queue on ucbvax, the outbound UUCP queue on ucbvax, the inbound UUCP queue
+on decvax, etc.
+
+Now, if decvax and ucbvax have SMTP connectivity, the session is more
+manageable:
+
+step host action
+----- ----- ------
+1 ucbvax incoming mail is accepted via UUCP
+2 ucbvax uuxqt is queued to invoke sendmail.
+3 ucbvax sendmail parses the message
+4a ucbvax sendmail delivers it to decvax.dec.com via SMTP.
+
+a decvax sendmail accepts the message from ucbvax via SMTP.
+8 decvax sendmail parses the message.
+9 decvax sendmail passes it to someplace else.
+
+Note that old steps (5) and (7), the UUCP queueing, are avoided entirely.
+
+The only trick to the "smtpuucp" mailer is that even though it uses
+SMTP to communicate with its neighbors, it must use the UUCP syntax
+and rewriting rulesets so that the operation is transparent to the
+outside world. This is easy enough to do.
+
+Other functionality:
+-------------------
+
+Aside from the mailers supplied, the basic configuration files
+support the following features:
+
+ * Domains. Addresses of the form "user@host.domain" are
+ considered to be the basic type of address we deal with.
+
+ * Fake domains. Addresses of the form:
+
+ user@host.BITNET
+ and
+ user@host.CSNET
+
+ are forwarded to a CSNET relay host and a BITNET relay host,
+ respectively.
+
+ Note: this feature exists for convenience. As CSNET and
+ BITNET convert to domains, it will go away. In particular,
+ "user@host.CSNET" is slated to get the axe in the next release.
+
+m4(1) OPTIONS USED IN THE .MC FILES:
+------------------------------------
+
+The following options, from "most important" to "trivial", can be
+used to control what configuration file you get from running m4(1)
+on "cf/proto.mc". As explained earlier, the standard practice is to
+create an ".mc" file for a particular configuration that contains
+all the m4(1) macro definitions/flags you want, and then have
+that .mc file include "mc/proto.mc".
+
+Macro name Example (you must include the ` and ')!
+---------- ---------------------------------------
+
+DOMAIN `DDBerkeley.EDU'
+
+ This MUST be defined to be your Internet domain.
+
+INTERNET_RELAY `DAcad.Berkeley.EDU'
+
+ If defined, this will be the machine behind which non-NIC registered
+hosts are hidden, resulting in addresses of the form
+
+ user%host@internet_relay.domain
+
+e.g.,
+
+ moore%prefect@cad.Berkeley.EDU
+
+ If not defined, outgoing addresses will always be of the form
+
+ user@host.domain
+
+regardless of whether "host.domain" is registered with the NIC.
+
+UUCP_NAME `DUucbcad'
+
+ If defined, includes the UUCP mailer and assumes you have local
+UUCP connections. The UUCP_NAME macro is used to define your
+canonical UUCP hostname. See also: UUCP_ALIASES and UUCP_HOSTS_FILE.
+
+UUCP_ALIASES `CUucbcad cad'
+
+ Used only if UUCP_NAME is defined, this macro lists any UUCP
+aliases for your machine. See also: UUCP_NAME and UUCP_HOSTS_FILE.
+
+UUCP_HOSTS_FILE `../sitedep/uucp.cad.m4'
+
+ Used only if UUCP_NAME is defined. Defines class V of
+local UUCP hosts by including the appropriate m4 file. See also:
+UUCP_NAME and UUCP_ALIASES.
+
+UUCP_RELAY `DRcad.Berkeley.EDU'
+
+ If defined, this will be the machine to which non-local UUCP traffic
+is forwarded. That is, any address that ends in ".UUCP" that is
+not listed in the V class (as defined by UUCP_HOSTS_FILE) will be
+forwarded to the UUCP_RELAY host via the "tcpld" mailer.
+
+UUCP_ONLY 1
+
+ If defined, makes sure that no TCP/IP based mailers will be
+put in the resulting configuration file. Normally undefined.
+
+SMTPUUCP `../sitedep/smtpuucp.cad.m4'
+
+ If defined, use SMTP to resolve certain UUCP connections (while
+keeping UUCP syntax). Should be defined to be a file that
+contains the list of pairs of UUCP names and their corresponding
+Internet names. See "machdep/smtpuucp.ucbvax.m4" for an example
+of what this should look like.
+
+BITNET_RELAY `DBjade.Berkeley.EDU'
+
+ If defined, this will be the machine to which BITNET traffic
+(i.e., mail to user@host.bitnet) is forwarded. If not defined,
+addresses of the form "user@host.bitnet" will bounce.
+
+CSNET_RELAY `DCrelay.cs.net'
+
+ If defined, this will be the machine to which CSNET traffic
+(i.e., mail to user@host.csnet) is forwarded. If not defined, addresses
+of that form will bounce.
+
+ARPAKLUDGE `1'
+
+ If defined, this turns on a kludge to reduce mail load on your
+INTERNET_GATEWAY. What is done is the following: if mail is outgoing
+to a machine in the ".arpa" domain and we're not registered with the
+NIC, we hide ourselves behind our INTERNET_GATEWAY. If the machine
+to which mail is being delivered is NOT in the ".arpa" domain, we
+assume they use the domain name system and can reply to our address --
+hence, we don't hide anywhere.
+
+AN EXAMPLE OR TWO:
+------------------
+
+Let's consider a hypothetical system at Foo, Inc. Foo, Inc. is on the
+ARPA Internet and is the proud owner of the domain "foo.com". Machines
+in "foo.com" exchange mail with other hosts on the Internet via SMTP.
+Foo, Inc. also has customers with whom they have UUCP links -- these
+links are all on the machine "uucp-gw.foo.com". Mail to any address
+that ends in ".UUCP" should be forwarded to "uucp-gw.foo.com". They
+also have a gateway to the bitnet through their local machine
+"bitnet-gw.foo.com"; mail to any address ending in ".bitnet" should go
+there. They intend to take advantage of the kind folks at CSNET by
+forwarding mail to "host.csnet" to the machine "relay.cs.net".
+
+The master configuration file for a generic machine on the corporate
+ethernet might look like this:
+
+define(DOMAIN, `DDfoo.com')
+define(UUCP_RELAY, `DRuucp-gw.foo.com')
+define(BITNET_RELAY, `DBbitnet-gw.foo.com')
+define(CSNET_RELAY, `DCrelay.cs.net')
+include(proto.mc)
+
+And that's it! The system manager at "foo.com" would simply install
+this in the "cf" subdirectory, add a production to the make file,
+and type "make foo.cf". This would run m4(1) on the .mc file and
+we're done.
+
+Now let's turn to the machine "uucp-gw.foo.com". It obviously needs
+to have the UUCP mailer compiled in, and it needs a list of UUCP
+neighbors with whom it is connected. Of course, it also needs a TCP/IP
+(SMTP) based mailer so it can talk to the rest of the company.
+On the UUCP network, "uucp-gw.foo.com" is known as "foo".
+The master configuration file might be:
+
+define(DOMAIN, `DDfoo.com')
+define(UUCP_NAME, `DUfoo')
+define(UUCP_ALIASES, `CUfoo')
+define(UUCP_HOSTS_FILE, `../sitedep/uucp.foo.m4')
+define(BITNET_RELAY, `DBbitnet-gw.foo.com')
+define(CSNET_RELAY, `DCrelay.cs.net')
+include(proto.mc)
+
+Note that we didn't define UUCP_RELAY here, since we ARE the UUCP relay.
+
+The file "../sitedep/uucp.foo.m4" contains a list of our UUCP neighbors:
+
+CV oink
+CV bletch
+CV spam
+
+indicating that "uucp-gw.foo.com" is directly connected to three other
+machines via UUCP: "oink", "bletch", and "spam."
+
+
+WHAT WILL BE CHANGING IN THE NEXT RELEASE:
+------------------------------------------
+
+In the next release, the following things should change:
+
+1. The MILNET should have gotten its act together. This means
+ that the "tcp" mailer goes away. The "tcpld" mailer will
+ be renamed "smtp". The "N" class (NIC registered hosts)
+ gets axed. The ARPAKLUDGE and INTERNET_RELAY m4(1) options
+ will disappear as well.
+
+2. The CSNET "fake domain" (i.e., user@host.csnet) will cease
+ to be supported.
+
+3. The "smtp" mailer rulesets (currently 17/27) will be rewritten,
+ along with much of rulesets 0 and 3.