home *** CD-ROM | disk | FTP | other *** search
- Subject: v11i069: Smail, UUCP domain mailer, Part01/03
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rs@uunet.UU.NET
-
- Submitted-by: Larry Auton <clyde.ATT.COM!lda>
- Posting-number: Volume 11, Issue 69
- Archive-name: smail3/Part01
-
- [ Smail is the "official" mailer of the UUCP Project, the people who
- bring you the monthly UUCP maps and domain names to UUCP-only
- organizations. Putting it quite shortly, this turns any UUCP
- site into a "smart" mailer. The documentation is extensive. --r$ ]
-
-
- # This is a shell archive. Remove anything before this line, then
- # unpack it by saving it in a file and typing "sh file". (Files
- # unpacked will be owned by you and have default permissions.)
- #
- # This archive contains:
- # Contacts Domains Flow.Diagram Install Read.Me aliases.8 lcasep.8 mkfnames.8 nptx.8 pathproc.8 paths.8 smail.8
-
- echo x - Contacts
- cat > "Contacts" << '//E*O*F Contacts//'
- Contact Information
-
- We strongly encourage electronic mail for queries, updates, and
- applications. This cuts down on our costs, and we can pass those
- savings along to you. We currently do not have a telephone number
- for queries, although we hope to have one in the near future. If
- you are unable to send and receive electronic mail, you will have
- to wait until we are prepared for telephone calls or postal mail.
-
- For queries: uucp-query@Stargate.COM cbosgd!stargate!uucp-query
-
- For updates: uucpmap@Stargate.COM cbosgd!stargate!uucpmap
-
- For problems: uucp-problem@Stargate.COM cbosgd!stargate!uucp-problem
-
- To register: registry@Stargate.COM cbosgd!stargate!registry
- #
- #@(#)Contacts 2.5 (smail) 9/15/87
- #
- //E*O*F Contacts//
-
- echo x - Domains
- cat > "Domains" << '//E*O*F Domains//'
- WHAT YOU NEED TO KNOW ABOUT PATHALIAS
- AND WHAT PATHALIAS NEEDS TO KNOW ABOUT YOU
- or
- HOW PATHALIAS MAKES DOMAINS
-
- Christopher Seiwald
-
- This note describes the host connectivity data and domain data
- needed to effect UUCP domain-style address routing. This
- describes mostly the domain data, but also discusses how to
- distribute connectivity data. Look elsewhere for a discussion of
- domains.
-
- Briefly, the connectivity data (what's in mod.map) connects
- all hosts in the UUCP network into one big directed graph, and
- the domain data superimposes a domain tree onto that graph.
- Pathalias converts these two sets of data into a routing database
- which smail/rmail, a UUCP mail routing program, uses.
-
- 1. Domains and Gateways for UUCP
-
- For domains in the UUCP zone, the top of a subdomain is all
- gateway hosts for that domain; the top of the UUCP zone will
- probably be nearly a hundred hosts. As a transition aid, we
- also consider an individual host at the bottom of the domain tree a
- subdomain "host.UUCP", with one gateway and no further subdomains.
- (We expect to phase this out eventually.)
-
- A gateway host for a domain must do four things:
- I) Pass mail bound for that domain to the
- appropriate host.
- II) Pass mail bound for outside that domain to a
- gateway in the parent domain.
- III) Pass mail bound for a subdomain to a gateway of
- that subdomain.
- IV) Recognise the domain!user address syntax.
-
- smail/rmail already provides (IV). With the data described here,
- pushed through pathalias, smail/rmail can then provide (I)-(III).
-
- 2. The Zone Registry
-
- For any sizeable zone, one gateway host supports the zone registry.
- For other zones, such as BITNET, CSNET, DDN, etc., registries are
- supported, using conventions appropriate to those zones. Contact
- electronic mail addresses are supported for queries, and updates to
- configuration information may also be handled via mail. In the UUCP
- zone, the id's "uucpmap@cbosgd.ATT.COM" and "domains@cbosgd.ATT.COM"
- serve to collect the connectivity and domain data, respectively, for
- that zone.
-
- The registry for a zone speaks for that zone, communicating
- chiefly with its peers, the registry of the parent domain, and
- the registries of the subdomains.
-
- 3. Functions of Domain Data
-
- Each gateway for a domain must map the domain-style names into
- the UUCP host names for all hosts of the domain. This host name
- mapping provides (I) above.
-
- Each gateway for a domain knows a) at least one gateway for each
- immediate subdomain, and b) at least one gateway host of the
- parent domain. This provides (II) and (III) above.
-
- For consistency across the gateways of a domain, each gateway for
- the domain should know a) ALL gateways for each immediate
- subdomain; and b) ALL gateways for the parent domain. Pathalias
- will pick the closest. In this way, one single database can
- describe the domain structure for all gateways on a domain,
- without variations for each gateway.
-
- In order to aid routing and avoid overloading the parent gateway,
- gateways should also know most gateways for peer level domains.
- This information is also provided by the map and used by pathalias.
- When a new peer domain is created, traffic can be routed through the
- parent (which must be updated immediately) until information about
- the peer can be propagated.
-
- Additionally, a gateway could know about domains more than one
- level above or below it so that mail doesn't stop for address
- resolution at every gateway along its path.
-
- 4. Format of Domain Data
-
- 4.1 Host Name List
-
- The host name list aliases the domain style address of a host to
- the UUCP host name. The pathalias input format is:
-
- uucp-name .domain-name[, ...]
-
- The .UUCP suffix is implicit in the uucp-name (smail/rmail does
- this), and is not needed.
- Upper/lower case doesn't matter in a dotted domain name.
- Examples:
-
- ihnp4 = .ATT.COM
- ucbvax = .Berkeley.EDU
- cbosgd = .osgd.cb.att.com, .cbosgd.att.com
-
- Might produce from pathalias:
-
- ihnp4 mtxinu!ihnp4!%s
- .ihnp4.ATT.COM mtxinu!ihnp4!%s
- ucbvax ucbvax!%s
- .Berkeley.EDU ucbvax!%s
- cbosgd cbosgd!%s
- .osgd.cb.att.com cbosgd!%s
- .cbosgd.att.com cbosgd!%s
-
- A single host may have more than one domain style address; in
- fact, a host may be in several domains at once. However, each
- host must have a single primary location in the domain tree,
- and other addresses should be viewed as transition aids. For
- example, cbosgd might be known as cbosgd, cbosgd.UUCP,
- cbosgd.ATT.UUCP, cbosgd.btl.csnet, and cbosgd.ATT.COM, but
- the primary name is the one in the organizational domain (COM)
- which applies to all networks, and the others are temporary
- names for upward compatibility only.
-
- 4.2 Domain Gateway List
-
- The domain gateway list aliases the domain style address of a
- domain to the UUCP host name of the closest gateway of that
- domain. This involves a trick in pathalias, and employs a
- extra network name domain-gw. The pathalias input format is:
-
- domain-gw .domain-name
-
- Again, the .UUCP suffix is implicit in the uucp-name, and is
- not needed.
- Examples:
-
- decwrl .DEC.COM
- decuac .DEC.COM
-
- cbosgd .ATT.COM
- clyde .ATT.COM
-
- Might generate from pathalias:
-
- .DEC.COM seismo!decuac!%s
- .ATT.COM cbosgd!%s
-
- Note that pathalias chooses the closest host from inside the {}'s.
- The (DEAD)'s prevent pathalias from following along the mock network
- called "domain-gw".
-
- 5. Distribution of Domain Data
-
- A zone registry maintains a Host Name List (in the format of 4.1
- above) of all hosts within its domain and a Domain Gateway List
- (in the format of 4.2 above) of all gateways of the domain.
-
- Up: A registry collects the Domain Gateway List from the registry
- of each of its subdomains, and transmits to the registry of its
- parent domain its own Domain Gateway List and, if it chooses, the
- Domain Gateway Lists of some or all of its subdomains. Whether
- it includes lists from its subdomains depends on how important it
- considers them to the parent domain.
-
- Down: Similarly, a registry collects the Domain Gateway List from
- the registry of its parent domain, and transmits to the registry
- of each of its subdomains its Domain Gateway List and the Domain
- Gateway List of its parent domain. Note that the Domain Gateway
- List of the parent domain may include lists from the parent's
- other subdomains.
-
- A registry may decide not to use the parent domain's Domain
- Gateway List or not to transmit it to its subdomains' registries.
- (This should be done only with the consent of the subdomains.) In
- this case, the registry must introduce a domain gateway alias for
- all top level domains, to ensure that all the mail gets delivered.
-
- Across: a registry transmits to each of the gateways of its
- domain its Host Name List, its Domain Gateway List, and collected
- Domain Gateway Lists. The registry also transmits to each normal
- host (one gateway, no subdomains) of its domain its Domain
- Gateway List.
-
- Together, "up," "down," and "across" insure that each gateway has
- the Host Name List for its domain, and the Domain Gateway List of
- its own domain and at least its parent domain and subdomains.
- "Up" and "across" will probably take place on demand by mail.
- "Down" will probably be broadcast via netnews on a regular
- schedule. In particular, the second level information for the UUCP
- zone (one entry per organization) and the complete top level domain
- information make up the postings to mod.map.
-
- 6. Distribution of Connectivity Data
-
- The distribution of connectivity data will probably follow the
- path of domain data: registries passing connectivity data up,
- down, and across the domain tree, with the exception that the
- connectivity within a third (or lower) level domain will be
- discouraged from leaving the domain, so the data the UUCP zone
- registry distributes will include only the first and second
- level gateways. Local information about internal subdomains and
- machines of organizations should not be included in globally
- published information, but rather distributed locally as needed.
-
- 7. Various Notes
-
- The following are examples of data that should be joined together
- as input to pathalias.
-
- Parent Domain Gateway List
- Parent Connectivity Data
- This Level Domain Gateway List
- This Level Host Name List
- This Level Connectivity Data
- Collected Subdomains' Domain Gateway Lists
- Collected Subdomains' Connectivity Data
- Private Additions
- Alias for "this host"
-
- This note does not describe the inclusion of private additions to
- the domain or connectivity data.
-
- Because domain names intermix with host names (and the .UUCP
- suffix is implicit), you can address hosts known at your gateway
- as "uucp-host.UUCP". We discourage this, because the address is
- then particular to the sender's location.
-
-
- /+\
- 5/1/85 +\ chris@cbosgd.att.com
- \+/
-
- [Updated 5/9/86 by Mark Horton.]
- #
- #@(#)Domains 2.5 (smail) 9/15/87
- #
- //E*O*F Domains//
-
- echo x - Flow.Diagram
- cat > "Flow.Diagram" << '//E*O*F Flow.Diagram//'
- vanilla 4.2BSD mail flow
-
- LOCAL /bin/mail ---- -- /bin/mail -- LOCAL
- \ /
- ----------- sendmail --
- / / \
- LOCAL Mail --------- / -- uux -------- REMOTE
- /
- REMOTE /bin/rmail ------------
-
- ==========================
-
- smail 4.2BSD mail flow
-
- LOCAL /bin/mail -- /bin/mail -- LOCAL
- \ /
- ------------ sendmail --
- / / \
- LOCAL Mail --- / -- /bin/smail -
- / (non-bang) \
- REMOTE /bin/rmail ------ \
- \ (bang) \
- ------------------------------------- uux REMOTE
-
- ==========================
-
- vanilla SVR2 mail flow
-
- mail is "/usr/src/cmd/mail.c"
- rmail is linked to mail
-
- LOCAL mail ------------\ /--------------------- LOCAL
- \ /
- LOCAL mailx ----> mail ---+----------+
- / \
- REMOTE rmail ------------/ \-- uux -------------- REMOTE
-
- ==========================
-
- Modified SVR2 mail flow using SENDMAIL
-
- Definitions of changed/renamed programs
-
- mail is "svbinmail.c"
- lmail is "/usr/src/cmd/mail.c"
- rmail is linked to smail
-
- LOCAL mail ------------\ /-- lmail ---------- LOCAL
- \ /
- +--sendmail--+
- / \
- LOCAL mailx --- mail ---/ \-- smail -- uux --- REMOTE
-
-
- /-- lmail ------ LOCAL
- /
- /--sendmail--+
- / \
- / \- smail - uux - REMOTE
- / (domain | LOCAL)
- REMOTE rmail --------------+
- \ (bang)
- \
- \------------------ uux -------- REMOTE
-
- ==========================
-
- Modified SVR2 mail flow without SENDMAIL
-
- LOCAL mail ------------\ /-- lmail ---------- LOCAL
- \ /
- +-- rmail ---+
- / / \
- LOCAL mailx --- mail ---/ / \-- uux ----------- REMOTE
- /
- /
- REMOTE --------------------+
-
- #
- # @(#)Flow.Diagram 2.5 (smail) 9/15/87
- #
- //E*O*F Flow.Diagram//
-
- echo x - Install
- cat > "Install" << '//E*O*F Install//'
- There are three system types on which smail can be installed.
-
- (1) Berkeley with sendmail
- (2) System V with sendmail
- (3) System V without sendmail
-
- Note: if you have a System III or V7 derived system, you
- can probably treat it like (3). We have not tested smail
- on such a system.
-
- The installation will vary slightly for each system type.
-
- For all systems you first have to create a 'paths' database.
- See paths(8) for details on the file's format. Then
- copy it to /usr/lib/uucp/paths.
-
- Next, edit "defs.h" to configure smail to suit your situation.
-
- Here are step by step installation instructions for each system type.
-
- (1) For a berkeley system with sendmail, the steps are:
-
- $ make
-
- $ cp smail /bin/smail
-
- $ sh make.cf.sh
- <answer the questions it asks>
-
- $ mv /usr/lib/sendmail.cf /usr/lib/OLDsendmail.cf
-
- $ cp sendmail.cf /usr/lib/sendmail.cf
-
- $ /usr/lib/sendmail -bz
-
- $ mv /bin/rmail /bin/OLDrmail
-
- $ ln /bin/smail /bin/rmail
-
- (2) For a System V system with sendmail, the steps are:
-
- $ make
-
- $ cp smail /bin/smail
-
- $ ln /bin/mail /bin/lmail
-
- $ sh make.cf.sh
- <answer the questions it asks>
-
- $ mv /usr/lib/sendmail.cf /usr/lib/OLDsendmail.cf
-
- $ cp sendmail.cf /usr/lib/sendmail.cf
-
- $ /usr/lib/sendmail -bz
-
- $ rm /bin/mail # (Remember, you still have it in /bin/lmail.)
-
- $ mv svbinmail /bin/mail
-
- $ mv /bin/rmail /bin/OLDrmail
-
- $ ln /bin/smail /bin/rmail
-
- Note: some implementations of sendmail don't work when the 'U'
- flag is set in the definition of the local mailer (a line that
- begins with "Mlocal" in the generated sendmail.cf). If you try
- to send mail from a local user to a local user, a message comes
- out that says "No '!' in UUCP! (user)" - and the mail fails.
- If this happens take the 'U' flag out of the sendmail.cf.
-
- [ the >'s are secondary prompts from the shell,
- and ^M is 'carat' 'M', not 'control-M' ]
-
- $ ed sendmail.cf <<!
- > /^Mlocal/s/SU/S/
- > w
- > q
- > !
-
- (3) For a System V system without sendmail, the steps are:
-
- $ make
-
- $ cp smail /bin/smail
-
- $ mv /bin/mail /bin/lmail
-
- $ mv svbinmail /bin/mail
-
- $ mv /bin/rmail /bin/OLDrmail
-
- $ ln /bin/smail /bin/rmail
-
- You're done.
-
- #
- # @(#)Install 2.5 (smail) 9/15/87
- #
- //E*O*F Install//
-
- echo x - Read.Me
- cat > "Read.Me" << '//E*O*F Read.Me//'
- Read.Me - Updated 9/15/87
-
- What smail does:
-
- smail is capable of handling UUCP syntax (bang paths, bang
- domains, and at domains are supported) mail transportation
- over UUCP/uux/rmail channels. It will support machines that
- only have UUCP connections, and machines with UUCP links to
- the outside world plus a small number of local machines that
- are reached via SMTP. The domain intelligence is embedded
- in the smail database (e.g. the pathalias output), not the
- sendmail.cf file, so if you have a fancier domain structure
- that involves SMTP or anything other than uux in the domain
- structure, you'll want to modify the sendmail.cf file here or
- merge pieces of the enclosed sendmail.cf into your own.
-
- smail runs under 4.2BSD and System V, as a back end to sendmail;
- and under System V without sendmail. It also replaces rmail, which
- becomes a link to smail. In a sendmail environment, smail depends on
- sendmail to crack the headers, as smail just deals with the envelope.
- smail makes your host capable of using the INTERNET definition in the
- Usenet software.
-
- Features of smail include:
-
- (1) Using pathalias data to choose the best route to your destination.
- (2) Handling of user@domain, domain!user, and host!user syntax.
- (3) Generation of domain!user syntax to be forwarded by other systems.
- (4) Logging of traffic through your machine, by sender, recipient, and
- size of message, so you can, track use and detect abuse of your
- machine.
- (5) Mail being forwarded through your machine to another uux link is
- passed from rmail directly to uux, so there's less overhead on
- your machine (sendmail stays out of the loop.)
- (6) Sendmail-like alias capability for hosts without sendmail.
- (7) Generation of RFC822 required headers for locally generated mail.
- (8) Robust delivery scheme that reroutes only if stated path is inaccessible.
- (8) Mail that is undeliverable is returned to sender.
- (9) Simplicity.
-
- Prerequisites:
-
- A copy of a recent posting of pathalias. (The one posted
- by Peter Honeyman in January 1986 is recommended.)
-
- A current copy of the UUCP map, or at least a copy of the
- appropriate part of it that you're interested in.
-
- A properly registered domain name for your organization, such
- as ATT.COM. (It is possible to run smail using a domain name
- under .UUCP, but since this can't be officially registered,
- it is appropriate only for testing.)
-
- You can get pathalias from the mod.sources Usenet archive
- (contact rsalz@uunet.uu.net or uunet!rsalz)
-
- You can get a UUCP map each month from Usenet newsgroup mod.map.
- The UUCP map is quite large (currently about 2MB) so please don't ask
- to have a copy mailed to you - get a copy from a nearby Usenet site.
-
- You can get a domain name by joining the UUCP Zone. There are
- low membership dues for this, and a registration process that
- will take 2-8 weeks. This Read.Me file may be out of date by
- the time you read it, so we ask you to contact us for current
- dues rates and procedures. Contact uucp-query@Stargate.COM or
- cbosgd!stargate!uucp-query and ask for the UUCP Zone information
- packet. (If you already belong to a network such as CSNET, DDN,
- or BITNET, your organization may already have a domain name. If
- you are also on UUCP, it is recommended that you also join the
- UUCP Zone at the lower rate for organizations whose primary
- affiliation is with another network. See the file "Registry"
- for more information.
-
- Overall structure:
-
- smail is installed in /bin/smail with a link in /bin/rmail. Uuxqt
- calls rmail, which either forwards the message on to the next hop
- directly or, on a sysetm with sendmail, calls sendmail. sendmail
- may decide the message should be delivered by UUCP, and invoke smail,
- which will look up a route and invoke uux. (Note that the choice
- about when to invoke sendmail and when to process a message directly
- can be configured in smail.)
-
- smail uses a database which is generated from pathalias. You take the
- current UUCP map, add some local information and topology data (to tell
- it about the domain tree) and run pathalias. The result is sorted and
- installed in /usr/lib/uucp/paths. There is no hashing done on this
- file - when smail looks up a name it uses a binary search.
-
- Configuration considerations:
-
- You'll note two configuration options in defs.h: HANDLE and ROUTING.
- These control which sorts of addresses smail/rmail will handle, and
- which type of routing they will do. The HANDLE define only affects
- rmail, since smail sets it implicitly. In any case, we recommend
- that you leave HANDLE alone, unless you are making major changes.
-
- ROUTING has three choices: JUSTDOMAIN, ALWAYS, and REROUTE. rmail
- will run as JUSTDOMAIN, the defs.h default. This means rmail will
- only apply routing if it sees "rmail user@domain", and will just call
- uux if it sees "rmail host!user". (If the uux fails, it will call
- smail -r, which will apply ALWAYS routing to try to get the mail
- there anyway. If the ALWAYS routing fails, then REROUTE routing is
- applied. This has the advantage of being low overhead on your
- system, not second guessing a route someone else asked for, and still
- recovering nicely from the mistakes of another system. Your host
- becomes a "smart host" that can get mail anywhere.)
-
- Many people will note huge paths going through their machine. These
- paths are generated by replies to netnews messages, and tend to be 10
- or 20 hops long - far longer than necessary. If you are a bit aggressive,
- you can change -r to -R, which will cause such failed mail to be rerouted,
- thus, mail to a!b!c!d!e!f!g!user will look up a route to g, and send the
- mail to route!g!user. (If it can't find g, it will try f, then e, and
- so on until it finds someone it recognizes.) If you are REALLY aggressive,
- you can change ROUTING to REROUTE in defs.h, to get the same effect for
- ALL rmail being passed through your machine. This may help cut phone
- bills, but it has some disadvantages. It can lengthen a path sometimes,
- e.g. mail to tektronix!user might turn into ihnp4!tektronix!user if your
- routing database says mail to tektronix goes through ihnp4. It makes it
- hard to route around a dead host, or to redirect traffic from a mailing
- list to several different directions. It may also make mail go a different
- path than what your user thought it was, and it affects other hosts that
- route mail through you if you set ROUTING to REROUTE in defs.h. So only
- do this if you know what you are doing, and are willing to live with the
- disadvantages.
-
- #
- #@(#)Read.Me 2.5 (smail) 9/15/87
- #
- //E*O*F Read.Me//
-
- echo x - aliases.8
- cat > "aliases.8" << '//E*O*F aliases.8//'
- .TH ALIASES 8
- .tr ~
- .SH NAME
- aliases \- alias file for smail
- .SH DESCRIPTION
- This file is used by
- .I smail
- only if
- .I SENDMAIL
- is
- .I not defined.
- If
- .I SENDMAIL
- is defined, then
- .I sendmail
- does all of the aliasing for the host.
- .PP
- This file contains a list of aliases for
- local users or mailing lists.
- The format of each alias is
- .sp
- .ce
- alias_name~recip_name1~recip_name2~...
- .sp
- An attempt has been made to remain compatible with
- .I sendmail
- alias file format, though the syntax is much more format free than
- .I sendmail.
- As distributed,
- .I case differences are ignored
- when comparing names to aliases.
- Only alias names which resolve to the local host are recognized, and are
- stored in their local form.
- Lines which start with a white~space are continuation lines.
- Parenthesised strings are taken as comments (no nesting),
- as is anything after a '#' (as in
- .IR /bin/sh ).
- Here are some examples:
- .sp
- .nf
- # this whole line is a comment
- #
- # These are equivalent definitions
-
- alias_name recip1 recip2 recip3
-
- alias_name: recip1, recip2 , recip3
-
- alias_name recip1 recip2
- recip3
-
- alias_name recip1 # Recip1's name
- recip2 # Recip2's name
- recip3 # Recip3's name
-
- alias_name recip1 (Recp1's name) recip2 (Recp2's name)
- recip3 (Recp3's name)
-
- alias_name@thishost recip1 recip2 recip3
-
- alias_name@thisdomain recip1 recip2 recip3
-
- thishost!alias_name recip1 recip2 recip3
-
- thisdomain!alias_name recip1 recip2 recip3
- .fi
- .PP
- Mailing lists are easily handled by two forms of file inclusion.
- The first form is the same as is supported by
- .I sendmail
- .sp
- .ce
- mylist :include:/usr/lib/ml/mylist
- .sp
- In this example, each entry in
- .I /usr/lib/ml/mylist
- would be added to the alias for
- .I mylist.
- The second form is unique to
- .I smail.
- It allows the
- .I aliases
- file to include other
- .I aliases
- files.
- .sp
- .ce
- :include:/usr/lib/ml/more-aliases
- .sp
- This would include the file
- .I /usr/lib/ml/more-aliases
- as a regular alias file.
- This makes it easier to maintain groups of aliases that
- change frequently, such as the list of netnews moderators.
- .PP
- All aliases are recursive, so care
- must be taken in their definition.
- .I smail
- aliasing attempts to prevent infinite loops, and to
- do what was intended by the user. For example, the alias:
- .sp
- .ce
- mylogin~mypc!mylogin~mylogin
- .sp
- Expands to
- .sp
- .ce
- mypc!mylogin mylogin
- .sp
- even though the second occurrence of
- .I mylogin
- matches the alias name.
- .sp
- Both forms of file inclusion are recursive, too,
- so watch out for nesting include files. They
- may lead to infinite loops.
- .PP
- While the cost of parsing an alias file is usually negligible,
- it's wise to take savings anywhere savings
- can be found. Therefore, it's worth mentioning
- .IR smail 's
- parsing strategy.
- .I smail
- will try to get by with doing as little work
- as possible when aliasing. If on a particular
- invocation of
- .I smail,
- none of the recipent addresses are local,
- (i.e., not potential aliases)
- then the
- .I aliases
- file won't even be read. Similarly,
- when an
- .I aliases
- file is read, it does not expand any of the :include: files
- until they are referenced. Thus, in the alias (above) for
- .I mylist,
- the file
- .I :include:/usr/lib/ml/mylist
- would not be opened and read (parsed) unless
- mail was sent to
- .I mylist.
- Wise use of :include: files can greatly
- increase the efficiency of the alias utility.
- It's not clear exactly where the
- .I break-even
- point is when deciding to use an :include: file in an alias,
- versus having all of the recipents listed on the line;
- but if a mailing list is large (whatever that means)
- it is wise to use the :include: feature to save on
- parsing costs. Note that this discussion only applies to the
- first form of file inclusion, since reading an
- .I aliases
- file constitutes a reference to :include: files of the second form.
- .PP
- There is another form of aliasing which works with the alias capability.
- This is called
- .I per user forwarding.
- For a given user name, if there is no alias for the user
- then, if the file
- .I ~user/.forward
- exists, then its contents will be treated as an alias for
- the user. The syntax is the same as that of the
- recipient lists in the alias file described above.
- .PP
- One difference between
- .I smail
- and
- .I sendmail
- is that
- .I smail
- doesn't handle stuff like mail to files
- or command execution.
- .SH SEE ALSO
- smail(8), paths(8), pathproc(8)
- .SH VERSION
- @(#)aliases.8 2.5 (smail) 9/15/87
- //E*O*F aliases.8//
-
- echo x - lcasep.8
- cat > "lcasep.8" << '//E*O*F lcasep.8//'
- .TH LCASEP 8
- .tr ~
- .SH NAME
- lcasep \- convert first field to lower case
- .SH SYNOPSIS
- .B lcasep
- [ -f infile ] [ -o outfile ]
- .SH DESCRIPTION
- .I Lcasep
- converts all upper case characters
- in the first field of each input line to lower case
- and writes the line to its output. By default,
- .I lcasep
- reads from the standard input and writes to the standard output.
- Fields are delimited by a tab (ascii~0x9) character.
- It is used in preparation for sorting
- .IR smail "'s"
- .I paths
- database. There is a bug in
- .I sort -f
- that causes non-alphanumeric keys to be sorted incorrectly.
- Conversion before sorting avoids this bug.
- .SH SEE ALSO
- pathalias - by Peter Honeyman
- .br
- smail(8), paths(8), pathproc(8)
- .SH VERSION
- @(#)lcasep.8 2.5 (smail) 9/15/87
- //E*O*F lcasep.8//
-
- echo x - mkfnames.8
- cat > "mkfnames.8" << '//E*O*F mkfnames.8//'
- .TH MKFNAMES 8
- .tr ~
- .SH NAME
- mkfnames \- create full name database
- .SH SYNOPSIS
- .B mkfnames [ file ...]
- .SH DESCRIPTION
- .I mkfnames
- uses the named
- .I files
- as input and writes a sorted database suitable for
- use as the full name database for
- .IR smail (8)
- on the standard output.
- The format of an input line is defined by
- .IR nptx (8).
- If no
- .I files
- are specified, then the password file is
- used to parsed and an attempt is made to
- munge it into the format needed by
- .I nptx. No guarantees on this, since
- there are so many bizarre password file
- formats.
- .SH SEE ALSO
- smail(8), paths(8), nptx(8)
- .SH VERSION
- @(#)mkfnames.8 2.5 (smail) 9/15/87
- //E*O*F mkfnames.8//
-
- echo x - nptx.8
- cat > "nptx.8" << '//E*O*F nptx.8//'
- .TH NPTX 8
- .tr ~
- .SH NAME
- nptx \- full name permutations
- .SH SYNOPSIS
- .B nptx
- .SH DESCRIPTION
- .I nptx
- reads a list of address name pairs on the standard
- input and prints name permutations and the address
- pairs on the standard output.
- nptx is generally used in generation of a full name
- database for
- .IR smail (8).
- The format of an input line is
- .sp
- .ce
- address name
- .sp
- The address field can contain any address, it is terminated by
- a TAB char (ascii 0x9). No translation is done on the field.
- The name field consists of whitespace separated names or initials
- with an optional nickname given in parentheses, it is terminated
- by either a newline ascii (0xA) or a ',' (ascii 0x). All permutations
- of the names and initials are printed. The only restriction is
- that the last name will appear in each permutation. The permutations
- are not necesarily unique.
- .SH EXAMPLES
- .nf
- .in +5
- $ echo "gpb@ECH.gatech.edu\tWrecker Burdell(George P.)"|nptx
- Burdell gpb@ECH.gatech.edu
- W.Burdell gpb@ECH.gatech.edu
- Wrecker.Burdell gpb@ECH.gatech.edu
- Burdell gpb@ECH.gatech.edu
- G.Burdell gpb@ECH.gatech.edu
- George.Burdell gpb@ECH.gatech.edu
- P.Burdell gpb@ECH.gatech.edu
- P.Burdell gpb@ECH.gatech.edu
- G.P.Burdell gpb@ECH.gatech.edu
- George.P.Burdell gpb@ECH.gatech.edu
- G.P.Burdell gpb@ECH.gatech.edu
- George.P.Burdell gpb@ECH.gatech.edu
- $
- .in
- .SH SEE ALSO
- smail(8), paths(8), mkfnames(8)
- .SH VERSION
- @(#)nptx.8 2.5 (smail) 9/15/87
- //E*O*F nptx.8//
-
- echo x - pathproc.8
- cat > "pathproc.8" << '//E*O*F pathproc.8//'
- .TH PATHPROC 8
- .SH NAME
- pathproc \- pathalias post\-processor for smail routing database
- .SH DESCRIPTION
- .I Pathproc
- takes lines of the form
- .sp
- .ce
- \fIfirst_hop_cost key route\fP
- .sp
- as produced by
- .I pathalias -f
- and converts it to the form
- .sp
- .ce
- \fI key route cost\fP
- .sp
- as described in
- .IR paths (8).
- On the input, the
- .I route_cost
- is
- .IR pathalias "'s"
- total cost for the route.
- On the output, the
- .I cost
- is the cost for the
- .I first segment
- of the route.
- This represents the cost, to the local host,
- of passing the mail to its neighbor.
- .PP
- The output is sorted by
- .I key
- in ascending order.
- .SH EXAMPLE
- Here's an example of how you might use
- .I pathproc:
- .sp
- .in+3
- pathalias -f \fImap_files\fP | pathproc > newpaths
- .br
- mv newpaths /usr/lib/uucp/paths
- .in
- .sp
- .SH SEE ALSO
- pathalias - by Peter Honeyman
- .br
- smail(8), lcasep(8), paths(8)
- .SH VERSION
- @(#)pathproc.8 2.5 (smail) 9/15/87
- //E*O*F pathproc.8//
-
- echo x - paths.8
- cat > "paths.8" << '//E*O*F paths.8//'
- .TH PATHS 8
- .tr ~
- .SH NAME
- paths \- smail routing database
- .SH DESCRIPTION
- The
- .I paths
- file is the routing database for
- .IR smail .
- Each line of the file provides routing information
- to either a host or to a domain. Each line should
- have either two or three tab (ascii~0x9) separated fields.
- The format of each line in the paths file is:
- .tr ~
- .sp
- .ce
- \fIkey~~route~~~[cost]\fP
- .sp
- The
- .I key
- field is the key on which searches are performed.
- Typically this is either a UUCP host name or a domain name.
- .I smail
- uses a binary search algorithm when searching the database,
- so the keys must be sorted in ascending order.
- Case is ignored when searching, so the keys should be converted
- to lower case before sorting (see
- .IR lcase (8)
- and
- .IR pathproc (8)).
- .B Warning:
- There is a bug in
- .I sort -f,
- so don't use it. Convert the keys to lower case, and then sort.
- .PP
- The
- .I route
- field is a "printf" string that details the route that mail to the
- .I key
- should take.
- See
- .I pathalias
- documentation for details.
- .PP
- The optional
- .I cost
- field is used by
- .I smail
- to determine whether to simply queue outbound
- UUCP mail, or to attempt immediate delivery
- (usually by invoking
- .IR uucico ).
- If the cost field is present, and the value is at or below
- .IR smail "'s"
- .I queueing threshold
- then the mail will be queued and an attempt at immediate delivery
- will be made. This will speed mail delivery between hosts who
- enjoy a cheap uucp link, like a hardwired line or some other
- low cost transport medium, while allowing mail sent over more
- expensive media to accumulate before transmission.
- If the field is absent, the cost defaults to a value
- above the
- .I queueing threshold.
- The default value for the queueing threshold is equal to the pathalias
- cost DEDICATED+LOW. Thus, direct links with cost DEDICATED+LOW or less
- will see immediate delivery, while the others are queued for later delivery.
- .SH EXAMPLE
- Here's a sample paths file for a small host, like a pc, that doesn't
- want to maintain complete routing information. It illustrates
- most of the aspect of the
- .I paths
- file. Assme that the pc's name is
- .I mypc,
- and that it's in domain
- .I .mydomain.
- Also, assume that it has a dedicated link to
- a smart host named
- .I bighub,
- and that
- .IR bighub 's
- administrator has given
- .I mypc
- .B permission
- to use
- .I bighub
- as a mail relay.
- Lastly, assume that
- .I mypc
- has a dialed on demand link to another computer named
- .I friend.
- .nf
- .sp
- .in +5
- \fIpathalias\fP input
- .sp
- mypc = .mypc.mydomain
- mypc friend(DEMAND), bighub(DEDICATED)
- smart-host = bighub
- .sp
- \fIpaths\fP file produced by \fIpathalias -f inputfile|pathproc\fP
- .sp
- .mypc.mydomain %s 0
- bighub bighub!%s 95
- friend friend!%s 300
- mypc %s 0
- smart-host bighub!%s 95
- .in
- .sp
- .fi
- .SH SEE ALSO
- pathalias - by Peter Honeyman
- .br
- smail(8), lcasep(8), pathproc(8)
- .SH VERSION
- @(#)paths.8 2.5 (smail) 9/15/87
- //E*O*F paths.8//
-
- echo x - smail.8
- cat > "smail.8" << '//E*O*F smail.8//'
- .TH SMAIL 8
- .SH NAME
- smail, rmail \- UUCP mailer with routing
- .SH SYNOPSIS
- .B smail
- [ options ] address ...
- .br
- .B rmail
- [ options ] address ...
- .SH DESCRIPTION
- The
- .I smail/rmail
- program replaces
- .IR /bin/rmail (1)
- to become the UUCP mail transport mechanism.
- They are links to the same executable.
- .I rmail
- receives mail from UUCP,
- .I smail
- introduces mail into UUCP.
- .PP
- .I smail/rmail
- can work with or without
- .IR sendmail (8),
- or another intelligent mail system.
- For hosts with just
- .IR /bin/mail (1),
- .I smail/rmail
- subsumes some of the functions of
- .I sendmail,
- and hands only local mail to
- .I /bin/mail.
- For hosts with
- .I sendmail,
- .I smail/rmail
- can act as UUCP front and back ends to
- .I sendmail,
- allowing
- .I sendmail
- to process all mail through the host.
- As distributed, 'bang' mail that is not bound for a local
- recipient will be passed directly to
- .I uux
- without calling
- .I sendmail.
- .PP
- To varying degrees,
- .I smail/rmail
- automatically routes the addresses it processes.
- .I smail/rmail
- most often routes domain style addresses (i.e. user@domain), producing
- a UUCP path (i.e. host!address) or a local address (i.e. user), but it can
- also reroute explicit UUCP paths.
- .SH OPTIONS
- .TP
- .B \-A
- Print the resolved addresses. Don't collect a message or invoke a mailer.
- .TP
- .B \-d
- Be verbose and don't invoke other mailers.
- .TP
- .B \-v
- Be verbose, but still invoke other mailers.
- .TP
- .BI \-h " hostname"
- Set hostname. The default is configuration dependent, but usually provided
- by a system call such as
- .IR gethostname (2)
- or
- .IR uname (2).
- .TP
- .BI \-H " hostdomain"
- set hostdomain. The default is configuration dependent.
- .TP
- .BI \-F " address"
- use
- .I address
- on the From: line in locally generated mail.
- .TP
- .BI \-p " pathfile"
- Set path database file name if not /usr/lib/uucp/paths.
- .TP
- .BI \-a " aliasfile"
- For sites without sendmail, set alias database file name if not in
- the place defined at compile time (see ALIASES in defs.h).
- This is usually
- .I /usr/lib/aliases
- .TP
- .BI \-n " namelist"
- .I smail
- supports another type of aliasing intended for full name resolution
- using a sorted file,
- .I namelist,
- of name/address pairs.
- This allows mail to George.P.Burdell@gatech.edu to be delivered
- appropriately. These aliases are by their nature very simple
- since they are not composed of long lists of recipients for each alias.
- They are also numerous, since mail to George.P.Burdell may be addressed
- to Burdell, G.Burdell, George.Burdell, P.Burdell, G.P.Burdell, or
- George.P.Burdell. This simpler form of aliasing uses the same
- fast searching algorithm that is used for the paths file, so
- it keeps resolution time manageable.
- .TP
- .BI \-q " number"
- Take
- .I number
- as the queueing threshold.
- When routing mail (
- .I -r, -R,
- or domain addressed mail
- ) to a given host, if the cost listed in the
- .I paths
- file is less than the queueing threshold, then the mail
- will be sent immediately. This overrides the default threshold
- (see QUEUECOST in defs.h) of DEDICATED+LOW.
- .TP
- .BI \-m " number"
- At most
- .I number
- jobs will be handed to uux for immediate delivery
- by a single invocation of
- .I smail
- (see MAXNOQUEUE in defs.h).
- .TP
- .BI \-u " uuxflags"
- Use
- .I uuxflags
- as the flags passed to uux for remote mail.
- This overrides any of the default values and other queueing strategies.
- .TP
- .B -c
- Consult the paths file for the cost of the path even when not routing
- the mail. This makes it possible to use the cost information when
- sending pure UUCP path mail without rerouting it.
- .TP
- .B \-r
- Route the first component of a UUCP path (host!address) in addition to routing
- domain addresses (user@domain).
- .TP
- .B \-R
- Reroute UUCP paths, trying successively larger righthand substrings
- of a path until a component is recognized.
- .TP
- .B \-l
- Instead of routing a domain address, send it to the local mailer for
- processing. Normally, only local addresses go to the local mailer.
- .TP
- .B \-L
- Send all addresses to the local mailer for processing, including UUCP paths.
- .PP
- Most of the flags are also compile time options, since
- .I uux
- does not normally invoke
- .I rmail
- with the desired flags.
- .I smail
- resets any preset
- .B -l
- or
- .B -L
- flags.
- .B -l
- flag causes
- .B rmail
- to send all domain addresses through the local mailer,
- to process addresses for non UUCP domains.
- The
- .B -L
- flag causes
- .B rmail
- to send even explicit UUCP paths through the local mailer,
- presumably to make use of other transport mechanisms.
- In both cases, rmail defers any routing until smail gets hold it.
- .SH ADDRESSES
- .I smail/rmail
- understands "user@domain" to be a domain address, "host!address" to be a
- UUCP path, and anything else to be a local address.
- .PP
- Because hostile
- .I rmail's
- unpredictably interpret mixed UUCP/domain addresses,
- .I smail/rmail
- understands "domain!user" to be a domain address, and generates
- "path!domain!user" when mailing to a cognate
- .I smail/rmail
- host.
- To distinguish domain "domain!user" from UUCP "host!address", "domain"
- contains at least one (1) period.
- Unlike the old
- .I /bin/rmail,
- .I smail/rmail
- gives precedence to @ over ! when parsing mixed addresses,
- thus a!b@c is parsed as (a!b)@c, rather than a!(b@c).
- .SH ROUTING
- Because
- .I smail/rmail
- is the UUCP transport mechanism, it can only effect delivery on UUCP paths
- and local addresses; domain addresses require resolution into UUCP paths or
- local addresses.
- To resolve a domain address,
- .I smail/rmail
- finds a route to the most specific part of the domain specification listed
- in the routing table.
- Two degrees of resolution can occur:
- .RS
- .PP
- Full resolution:
- .I smail/rmail
- finds a route for the entire domain specification, and tacks the user
- specification onto the end of the UUCP path.
- The address can also fully resolve to a local address (the UUCP path is null).
- .PP
- Partial resolution:
- .I smail/rmail
- finds a route for only righthand part of the domain specification, so it
- tacks the complete address (in the form domain!user) onto the end of the
- UUCP path.
- Since this syntax is not widely understood, UUCP gateways listed in
- the path database must install new UUCP software, either
- .I smail/rmail
- or new
- .I sendmail
- configuration files (or both).
- .RE
- .PP
- It is an error if a partially resolved address routes to the local host
- (a null UUCP path), since according to the routing table, the local
- host is responsible for resolving the address more fully.
- .PP
- The
- .B -r
- flag causes
- .I smail/rmail
- to attempt to route the first component of a UUCP path, probably so it
- can impress people with how many UUCP hosts it knows.
- If this fails, it passes the unrouted address to
- .I uux,
- in case the path database is not complete.
- The
- .B -R
- flag causes
- .I smail/rmail
- to take a UUCP path and route the rightmost component of the path (save
- the user name) possible.
- This is mostly for hosts that have very up-to-date routing tables.
- .PP
- If a route cannot be discerned from the available routing database,
- then one more attempt to route the mail is made by searching for an
- entry in the database for a route to a
- .I smart-host.
- If this entry exists, then the mail will be forwarded along that route
- to be delivered. This allows a host to depend on another, presumably
- better informed, host for delivering its mail.
- This kind of arrangement should be worked out,
- .I in advance,
- with the
- .IR smart-host 's
- administrator.
- .PP
- After
- .I smail/rmail
- resolves an address, it reparses it to see if it is now a UUCP path or
- local address. If the new address turns out to be another
- domain address, smail complains because we don't like to resolve more than once.
- This error occurs when an address partially resolves the local host.
- .PP
- By default,
- .I smail
- will not alter the explicit bang path routing of any mail message.
- If the stated path is unuseable, (i.e., the next hop host is unknown)
- then smail will apply ALWAYS routing, and attempt to deliver the mail
- to the potentially new address. If this fails too, then REROUTE routing
- will be applied to the address, and another attempt to deliver is made.
- Lastly, an attempt to find a path to a better informed host
- .I smart-host
- will be made and the mail passed to that host.
- .SH FROMMING
- .I smail/rmail
- collapses From_ and >From_ lines to generate a simple from argument, which
- it can pass to
- .I sendmail
- or use to create its own "From" line.
- The rule for fromming is: concatenate each "remote from" host (separating
- them by !'s), and tack on the address on the last From_ line; if that address
- is in user@domain format, rewrite it as domain!user; ignore host or
- domain if either is simply the local hostname. It also removes redundant
- information from the From_ line. For instance:
- .sp
- .ce
- ...!myhost!myhost.mydomain!...
- .sp
- becomes
- .sp
- .ce
- ...!myhost!...
- .sp
- Leading occurrences of the local host name are elided as well.
- .PP
- .I smail/rmail
- generates it own From_ line, unless it is feeding
- .I sendmail,
- which is happy with the
- .BI -f from
- argument.
- For UUCP bound mail,
- .I smail/rmail
- generates a "remote from hostname", where hostname is the UUCP hostname
- (not the domain name), so that From_ can indicate a valid UUCP path, leaving
- the sender's domain address in From:.
- .SH HEADERS
- Certain headers, To:, From:, Date, etc., are required by RFC822.
- If these headers are absent in locally generated mail, they will
- be inserted by smail. Also, a line of trace information, called
- a Received: line, will be inserted at the top of each message.
- .SH UNDELIVERABLE MAIL"
- Although nobody likes to have a mail message fail to reach its
- intended destination, it somtimes happens that way.
- Mail that is found to be undeliverable
- (i.e., unknown user or unknown host)
- will be returned to the sender.
- .SH FILES
- /usr/lib/uucp/paths ascii path database
- .br
- /usr/lib/aliases ascii alias database
- .br
- /usr/spool/uucp/mail.log log of mail
- .br
- /tmp/mail.log record of mail
- .SH SUPPORT
- Enhancements, enhancement requests, trouble reports, etc.,
- should be sent to
- .sp
- .ce
- uucp-problem@Stargate.COM.
- .sp
- .SH "SEE ALSO"
- .IR uux (1),
- .IR paths (8),
- .IR aliases (8)
- .br
- .IR sendmail (8)
- .br
- .IR binmail (1)
- on BSD systems only
- .br
- .IR mail (1)
- on System V systems
- .SH VERSION
- @(#)smail.8 2.5 (smail) 9/15/87
- //E*O*F smail.8//
-
- exit 0
-