home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


Previous Section Next Section

FEATURE(genericstable)

Transform sender addresses V8.8 and above

The User Database (userdb) allows recipient addresses to be changed so that they can be delivered to new hosts. For example, gw@wash.dc.gov can be transformed with the User Database into george@us.edu. The genericstable provides the same type of transformation on the sender's address.

To begin, create a file of the form:

user                newuser@new.host.domain
user@host.domain    newuser@new.host.domain

In it, each line begins with the old address, either the user part alone, or the full address. On the right is the new address for that sender. One example of a use for this table might be to make the user news always appear as though it was from the news machine:

news            news@news.our.domain
news@our.domain news@news.our.domain

Note that the bare user part (news in the first line) is looked up only if sendmail considers it to be in the local domain. If a domain is listed (as in the second line in the preceding example) that entry is looked up only if it is in a special class defined with the GENERICS_DOMAIN mc macro (Section 4.8.1). If you want subdomains to also match, you must declare the generics_entire_domain feature (FEATURE(generics_entire_domain)). Ways to list domains in that special class are outlined later in this chapter.

The makemap(1) program (Section 5.5) is then used to convert this file into a database:

makemap hash db_file <  text_file  

Here, db_file is the name you give to the created database, and text_file is the name of the source text file.

Note that local and nonlocal hosts can appear in the special class defined with the GENERICS_DOMAIN mc macro. Also note that the members of $=w are not automatically placed into this special class.

The genericstable feature enables this lookup by including a K configuration command:

Kgenerics hash /etc/mail/genericstable

The form of the genericstable feature's declaration is:

FEATURE(`genericstable')

The genericstable feature is one of those that can take an argument to specify a different form of, or a different name for, the database:

FEATURE(`genericstable',`dbm -o /etc/mail/genericstable')

The extra argument causes the earlier K command to be replaced with the following one:

Kgenerics dbm -o /etc/mail/genericstable

See -o for a description of the K command -o switch.

You can also provide an extra argument that is a literal LDAP:

FEATURE(`domaintable', `LDAP')

The default in this instance becomes the following (we have wrapped the lines to fit the page):

Kgenerics ldap -1 -v sendmailMTAMapValue -k (&(objectClass=sendmailMTAMapObject)
(|(sendmailMTACluster=${sendmailMTACluster})(sendmailMTAHost=$j))
(sendmailMTAMapName=generics)(sendmailMTAKey=%0))

See ldap (was ldapx) for a description of the ldap database type and its -1, -v, and -k switches.

The genericstable should be enabled only if you intend to use it. It causes every sender to be looked up in that database.

GENERICS_DOMAIN mc macro

Beginning with V8.8 sendmail, a new mc macro was introduced to make it easier to list domains for use with the genericstable feature. Called GENERICS_DOMAIN, it is used like this:

GENERICS_DOMAIN(`domain1 domain2 etc.')

Each domain that you intend to list should be listed individually and separated from the others by spaces. Multiple GENERICS_DOMAIN lists can be declared in your mc file:

GENERICS_DOMAIN(`domain1')
GENERICS_DOMAIN(`domain2')
GENERICS_DOMAIN(`etc.')

If you are currently declaring the $=G class directly under the LOCAL_CONFIG mc macro, you are encouraged to convert to this new mc macro. Use of it will insulate you from change in the future if a different sendmail class is ever used.

GENERICS_DOMAIN_FILE mc macro

Beginning with V8.8 sendmail, a new mc macro was introduced to make it easier to list domains with the genericstable feature. Called GENERICS_DOMAIN_FILE, it is used like this:

GENERICS_DOMAIN_FILE(`/etc/mail/genericdomains')

This declaration causes the list of domains to be read from the file /etc/mail/genericdomains. Because GENERICS_DOMAIN_FILE is implemented with an F configuration command (Section 22.1.2), you can add whatever F command arguments you desire. For example:

GENERICS_DOMAIN_FILE(`-o /etc/mail/genericdomains')

Here, the -o switch makes the presence of the /etc/mail/genericdomains file optional.

If you are currently reading a list of domains from a file declared with an FG configuration command, you are encouraged to convert to this new macro. Use of it will insulate you from change in the future if a different class is ever used.

    Previous Section Next Section