The K configuration command is used to associate a symbolic name with a database-map type. The symbolic name will later be used in the RHS of rules. The form of the K command looks like this:
Kname type args
The name is the symbolic name, the type is the kind of database map to use, and the args specifies its location and properties. We describe each in turn.
The name portion of the K configuration command immediately follows the K. Whitespace between the K and the name is optional:
K name type argsoptional whitespace
The name must begin with a letter or digit and can contain only letters, digits, and the underscore character:
K local_hostsgood K $andcents
bad
The case of the letters in name does not matter. All names are converted to lowercase before they are stored:
K LOCAL_Hosts K local_hoststhe same
If you begin a name with a bad character, the following error will be printed and that K line will be ignored:
configfile: line num: readcf: config K line: no map name
If a bad character appears in the middle of a name, the part preceding the bad character will be taken as the name, and the part following the bad character will be taken as the type. For example, the name me@home will produce this error:
configfile: line num: readcf: map me: class home not available
Recall that the type[2] portion of the K configuration command follows the name:
[2] The sendmail source calls this class, but we chose type to make it clear that this is different from class macros.
Kname type args
Note that whitespace between the name and the type can be a joined indented line, which allows commenting and improves readability:
Kname # Why this name type # Why this type args # and so on
The type declares which sort of database map to use. It must be one of the types listed in Table 23-2.
Type |
§ |
Version |
Description |
---|---|---|---|
arith |
arith |
V8.10 and above |
Perform arithmetic computations |
btree |
btree |
V8.1 and above |
A db(3) form of database |
bestmx |
bestmx |
V8.7 and above |
Look up the best MX record for a host |
dbm |
dbm |
V8.1 and above |
Really ndbm supplied with most versions of Unix |
dequote |
dequote |
V8.6 and above |
Remove quotation marks |
dns |
dns |
V8.12 and above |
Look up information using DNS |
hash |
hash |
V8.1 and above |
A db(3) form of database |
hesiod |
hesiod |
V8.7 and above |
MIT network user authentication services |
host |
host |
V8.1 and above |
Internal table to store and look up hostnames |
implicit |
implicit |
V8.1 and above |
Search for an aliases database entry |
ldap |
ldap (was ldapx) |
V8.8 and above |
The Lightweight Directory Access Protocol (LDAP) |
ldapx |
ldap (was ldapx) |
V8.9 and earlier |
Replaced by ldap |
macro |
macro |
V8.10 and above |
Store a value into a macro via a rule |
netinfo |
netinfo |
V8.7 and above |
NeXT, Darwin, and Mac OS X network information services |
nis |
nis |
V8.1 and above |
Sun's Network Information Services (NIS) |
nisplus |
nisplus |
V8.7 and above |
Sun's newer version of NIS (NIS+) |
nsd |
nsd |
V8.10 and above |
Irix nsd database maps |
null |
null |
V8.7 and above |
Provide a never-found service |
ph |
ph |
V8.10 and above |
CCSO Nameserver (ph) lookups |
program |
program |
V8.7 and above |
Run an external program to look up the key |
regex |
regex |
V8.9 and above |
Use regular expressions |
sequence |
sequence |
V8.7 and above |
Search a series of database maps |
stab |
stab |
V8.10 and above |
Internally load aliases into the symbol table |
switch |
switch |
V8.7 and above |
Build sequences based on service switch |
syslog |
syslog |
V8.10 and above |
Log information using syslog(3) via rule sets |
text |
text |
V8.7 and above |
Look up in flat text files |
userdb |
userdb |
V8.7 and above |
Look up in the User Database |
user |
user |
V8.7 and above |
Look up local passwd information |
All of these database-map types are described in Section 23.7 at the end of this chapter. If the type is not one of those listed, or if support for the type was not compiled in, the following error is printed and the K command is ignored:
configfile: line num: readcf: map name: class type not available
The args of the K configuration command follow the symbolic name and type:
Kname type args
The args specify (among other things) the location of the database file or the name of a network database map. The args is like a miniature command line, and its general form looks like this:
switches file_or_map
The switches are letters prefixed with a - character that modify the use of the database. (We'll discuss them in the next section.) The file_or_map is the location of the database file or the name of a network database map. The file_or_map should exclude the .pag and .dir suffixes for dbm-type files and exclude the .db suffix for hash or btree-type files.
A database map is opened for reading when the configuration file is processed. If the file cannot be opened (and the -o is omitted, -o), an appropriate error is printed. The file_or_map should be an absolute pathname of a file (such as /etc/mail/uuhosts) or a literal network database-map name (such as hosts.byname). An nis database-map specification can include a domain:
map@domain
Relative filenames (names that omit a leading /) are interpreted as relative to the queue directory and should never be used.
The database files must live in a safe directory (one whose every component is writable only by root or the user defined by the TrustedUser option, TrustedUser). If the file itself is unsafe or its directory is unsafe, one of several errors will be printed or logged, depending on how you run sendmail. (See the description of the DontBlameSendmail option (DontBlameSendmail) for more information about this safety check.)