COHERENT manpages
This page displays the COHERENT manpage for directors [Describe how to resolve local mail addresses].
List of available manpages
Index
directors -- System Administration
Describe how to resolve local mail addresses
/usr/lib/mail/directors
The program smail reads file /usr/lib/mail/directors for the rules on how
to resolve addresses on your local host. Please note that under COHERENT,
the default configuration of smail does not use this file; however, if you
wish, you can create it to change smail's default rules for resolving local
addresses.
Structure of Configuration Files
smail can use five varieties of configuration files:
-> One or two configuration files, which perform global configuration of
smail-- including naming the other configuration files.
-> One directors file, which describes how to deliver mail on your local
system.
-> One routers file, which describes resolve the addresses of remote
systems.
-> One transports file, which describes how to move mail from your system
to selected remote systems.
-> One methods file, which matches hosts with methods of transporting mail.
smail permits you to name these files as you choose; under COHERENT, they
are named as follows:
/usr/lib/mail/config
/usr/lib/mail/directors
/usr/lib/mail/methods
/usr/lib/mail/routers
/usr/lib/mail/transports
Each is described in its own Lexicon entry. However, the directors,
routers, and transports file all have the same format; the following
describes it.
Each file consists of a set of entries; each entry, in turn, describes the
attributes of one director, router, or transport. The order of entries in
director and router is important, in that the directors and routers are
invoked in the order stated in the file. The order of entries in the
transport file is not important.
An entry in one of these files defines the following:
-> A name by which that entry is known.
-> A driver that implements the function for that entry.
-> A set of generic attributes from a set that can be applied to any entry
in the file.
-> A set of driver-specific attributes, from a set that can be applied only
to entries that use the specified driver.
For example, directorsu specifies the attributes for a director that reads
aliases from a file /private/usr/lib/aliases:
# read aliases from a file private to one machine on the network
private_aliases:
driver=aliasfile, owner=owner-$user ;
file=/private/usr/lib/aliases
This entry is named private_aliases, and depends upon the low-level
director driver routine named aliasfile. Errors found while processing
addresses found by this director are sent to an address formed by prefixing
the string owner- to the name of the alias; these aliases are stored in
file /private/usr/lib/aliases. The director-driver aliasfile implements a
general mechanism for looking up aliases stored in a data base. By
default, aliases are kept in a DBM-style data base that is built from the
text file /usr/lib/mail/aliases. For details on this file and its format,
see the Lexicon entry for aliases. For details on how DBM-style data bases,
see the Lexicon entry for libgdbm.
The separation between generic attributes and driver-specific attributes
mirrors the internal design of smail. Above the driver level, routines
exist that implement aspects of drivers, routers, and transports but do not
depend upon the specific means for performing the operation. These higher-
level functions can be manipulated through the generic attributes. On the
other hand, the drivers that actually perform these operations accept a
different set of attributes to control their behavior. In the case of a
driver thats read or writes to a file, a file attribute usually exists. In
the case of a driver that executes a program, a cmd attribute usually
exists to specify how that program is to be invoked.
Attributes of a Director
The following the generic attributes can be used in an entry in directors.
Each attribute is followed by its type (Boolean or string). To set a
string attribute, its name should be followed by an `=', then the value to
which you are setting it. To set a Boolean attribute, prefix it with a
`+'; to unset a Boolean attribute, prefix it with a `-'.
caution (Boolean)
If set, then be cautious of the addresses this director produces. If
the attribute nobody is not set, then reject file, shell-command, or
:include:filename-style mailing-list addresses.
default_group (string)
If the driver does not associate a group to an address returned by it,
then associate the group identifier for this group name. This will
override the group identifier set by the attribute default_user.
default_home (string)
If the driver does not associate a home directory with an address
returned by it, then use this directory as the default home directory.
smail expands the value of this attribute to form the directory path
name. At present, variable $user is not available for this expansion.
If the string expansion fails, smail ignores it.
default_user (string)
If the driver does not associate a user or group to an address
returned by it, then associate the user identifier and group
identifier of this user.
driver (string)
This attribute names the set of low-level functions that do the work
of directing local mail. This attribute is required.
nobody (Boolean)
If set, then smail accesses files or runs shell commands as the user
specified by its attribute nobody, for addresses flagged with caution
by either the caution generic attribute or by the driver. Association
of nobody with an address overrides the attributes default_user,
default_group, set_user, and set_group. This attribute is set by
default.
owner (string)
This names the address to be sent mail if an error occurs while smail
is processing the addresses produced by this director. This string is
expanded with the variable $user set to the local-form address passed
to the director. By deafault, the value owner-$user. If this string
expansion fails, smail ignores it.
sender_okay (Boolean)
If set, then it is always okay for this attribute to produce an
address equal to the sender. This effectively turns on the ``me too''
flag for this director. This should generally be set for forwarding
directors and should not be set for aliasing and mailing-list
directors.
set_group (string)
Associate this group's identifier with the addresses that the driver
returns. This overrides any group identifier set by the attribute
set_user.
set_home (string)
Associate this home directory with all addresses returned by the
driver. This will be expanded in the same manner as default_home.
set_user (string)
Associate the user and group identifiers for this user with addresses
that the driver returns. This overrides any values set by the driver.
smail requires that two addresses exist: Postmaster and Mailer-Daemon. To
avoid the necessity of an alias for these two users, smail contains two
implicit directors embedded into the directing code; it uses them as a last
resort. The first such director maps the address Mailer-Daemon onto the
address Postmaster; and the second maps Postmaster onto the address root.
The Preloaded Directors
If smail does not find a copy of file directors in directory /usr/lib/mail
(which is the case by default under COHERENT), it uses its the default
configuration. The default director configuration supports the following
directors:
Include Files
smail expands local addresses of the form :include:filename into a
list of addresses contained in the ASCII file filename. The files to
which these addresses refer are called mailing list files. This form
of local address can appear in any alias file, forward file, or
mailing-list file. A user cannot supply such an address himself.
Alias Files
This director scans for entries in an DBM-style data base that is
built from text file /usr/lib/mail/aliases. If this data base does not
exist, smail ignores it -- its absence does not trigger an error
condition. If smail encounters an error while it is resolving an
address produced by an alias, it mails an error message to an address
that has the string ``owner-'' prefixed to the name of the alias, if
such a local address is defined.
Forward Files
A user may have a file named .forward in his home directory. If such
a file exists, smail scans it for addresses. If a user has such a
file in his home directory, smail directs all mail sent to that user
to the address or addresses it contains. The file can contain
addresses that specify other files or shell commands as recipients.
If the .forward file is owned by root or by the user himself, then
deliveries to any shell commands or files are performed under the
user's user and group identifiers. If smail enters an error while it
is resolving this list of addresses, it mails an error message to your
system's postmaster.
In the .forward file for the user root, deliveries to shell commands
and file addresses are performed under an unprivileged user and group
identifier (by default, user nobody). The same is true for forward
files that were not owned by root or by the given user. Finally,
shell command and file addresses are not allowed at all in .forward
files that are directories that can accessed by remote systems.
Mailbox Forwarding
As an alternate way to forward mail, the mailbox file for a user may
contain a line of the form:
Forward to address, address ...
Onlyone line is read from this file, so addresses cannot be placed
across multiple lines. The comments that apply to a .forward file
also apply to this use of a mailbox file, except that smail assumes
that a mailbox is not accessible by users on other systems.
A user is matched by name, either in upper or lower case, with
delivery to that user being performed using a transport by the name of
local. A user can also be matched by name if the user name is prefixed
by real-. Delivery is performed by a transport named local.
Mailing Lists
Mailing list files can be created under a mailing-list directory -- by
default, directory /usr/lib/mail/lists. To create a new mailing list,
create a file in this directory that contains a list of addresses.
The basename of this file determines the local address that smail
expands into this list of addresses. For example, a file named info-
smail could be created, that contains a list of recipient addresses
for a mailing list named ``info-smail''. smail then forwards any mail
message mailed to address info-smail to every address in file
/usr/lib/mail/lists/info-smail.
If smail encounters an error as it is attempting to deliver a mail
message to an address within a list file, it mails an error message to
a local address comprised of the base name of the list file prefixed
with the string ``owner-'', if such an address is defined.
The Smart User
If smail cannot match a local address by any other means, it can
forward that mail to another system -- one that presumably has a more
complete data base -- via the director smartuser.
To declare another system to be a ``smart user,'' set the attribute
smart_user within file /usr/lib/mail/config. For example, attribute
forwards mail to the host mwc.com:
smart_user = $user@mwc.com
If you do not set this attribute, then smail ignores the smart-user
director.
Example Entries
The order of entries within directors determines the order in which
operations are attempted. If a director matches an address, then smail
calls no other director to expand or resolve that address. The following
gives a version of directors that is equivalent to the default
configuration:
# aliasinclude - expand ":include:filename" addresses
# produced by alias files
aliasinclude:
driver = aliasinclude, # use this special-case driver
nobody; # associate nobody user with addresses
# when mild permission violations
# are encountered
copysecure, # get permissions from alias director
copyowners # get owners from alias director
# forwardinclude - expand ":include:filename" addresses
# produced by forward files
forwardinclude:
driver = forwardinclude, # use this special-case driver
nobody;
copysecure, # get perms from forwarding director
copyowners # get owners from forwarding director
# aliases - search for alias expansions stored in a database
aliases:
driver = aliasfile, # general-purpose aliasing director
-nobody, # all addresses are associated
# with nobody by default, so setting
# this is not useful.
owner = owner-$user; # problems go to an owner address
file = /usr/lib/aliases,
modemask = 002,
optional, # ignore if file does not exist
proto = lsearch
# dotforward - expand .forward files in user home directories
dotforward:
driver = forwardfile, # general-purpose forwarding director
owner = Postmaster, # problems go to the user's mailbox
nobody,
sender_okay; # sender never removed from expansion
file = ~/.forward, # .forward file in home directories
checkowner, # the user can own this file
owners = root, # or root can own the file
modemask = 002, # it should not be globally writable
caution = daemon:root, # don't run things as root or daemon
# be extra careful of remotely
# accessible home directories
unsecure = "~ftp:~uucp:~nuucp:/tmp:/usr/tmp"
# forwardto - expand a "Forward to " in user mailbox files
#
# This emulates the V6/V7/System-V forwarding mechanism which uses a
# line of forward addresses stored at the beginning of user mailbox
# files prefixed with the string "Forward to "
forwardto:
driver = forwardfile,
owner = Postmaster, nobody, sender_okay;
file = /usr/mail/${lc:user}, # the mailbox file for System V
forwardto, # enable "Forward to " function
checkowner, # the user can own this file
owners = root, # or root can own the file
modemask = 0002, # under System V, group mail can write
caution = daemon:root # don't run things as root or daemon
# user - match users on the local host with delivery to their mailboxes
user: driver = user;# driver to match usernames
transport = local # local transport goes to mailboxes
# real_user - match usernames when prefixed with the string "real-"
#
# This is useful for allowing an address which explicitly delivers to
# a user's mailbox file. For example, errors in a .forward file
# expansion can be delivered here, or forwarding loops between
# multiple machines can be resolved by using a real-username address.
real_user:
driver = user;
transport = local,
prefix = "real-" # for example, match real-root
# lists - expand mailing lists stored in a list directory
#
# mailing lists can be created simply by creating a file in the
# /usr/lib/smail/lists directory.
lists: driver = forwardfile,
caution, # flag all addresses with caution
nobody, # and then associate the nobody user
owner = owner-$user; # system V sites may wish to use
# o-$user, as owner-$user may be
# too long for a 14-char filename.
# map the name of the mailing list to lower case
file = lists/${lc:user}
# smart_user - a partially specified smartuser director
#
# If the config file attribute smart_user is defined as a string such
# as "$user@domain-gateway" then users not matched otherwise will be
# sent off to the host "domain-gateway".
#
# If the smart_user attribute is not defined, this director is ignored.
smart_user:
driver = smartuser; # special-case driver
# do not match addresses which cannot be made into valid
# RFC822 local addresses without the use of double quotes.
well_formed_only
See Also
Administering COHERENT,
config [smail],
.forward,
mail [overview],
routers,
smail,
transports
Notes
Copyright © 1987, 1988 Ronald S. Karr and Landon Curt Noll. Copyright
© 1992 Ronald S. Karr.
For details on the distribution rights and restrictions associated with
this software, see file COPYING, which is included with the source code to
the smail system; or type the command: smail -bc.