The makemap program is supplied in source form with V8 sendmail . It may be supplied in pre-compiled form by your vendor. It is used to create database files and is run from the command line like this:
%makemap
switches class file
We'll discuss the
switches
in the next section. The
class
can be either
dbm
(which uses the
ndbm
(3) library routines),
hash
, or
btree
(both of which use the
db
(3) library routines). The
file
is the location and name (full path or relative name) for the database file to create. For
dbm
files, the
.pag
and
.dir
suffixes are added automatically. For the
db
files, the
.db
suffix will be added automatically if it is not already included in the name.
The
makemap
program reads from its standard input. That input is line oriented and contains the text from which the database files will be created. Lines that begin with a
#
are interpreted as comments and ignored. Lines that contain no characters - pty lines) are also ignored. Whitespace (spaces or tabs) separates the
key
on the left from the
data
on the right. An example of such an input file is the following:
lady relaysite!lady my.host relaysite!lady bug bug.localuucp
The second line above shows that
keys
may be multitokened (
my.host
is three tokens). In reading from existing files, some conversion may be required to massage the input into a usable form. To make a database of the
/etc/hosts
file (for converting hostnames into IP addresses), for example, a command line like the following might be required:
%awk '/^[^#]/ {print $2, $1}' | makemap ...
Here,
awk
(1) needs to eliminate comment lines (the
/^[^#]/
). Otherwise, it will wrongly move them to the second column, where
makemap
will not recognize them as comments.
The command-line switches for
makemap
must precede the
class
and the
file
:
makemapswitches class file
Switches are single characters, prefixed with a
-
character. Switches may also be combined:
-N -o good -No also good
The complete list of switches is shown in Table 33.2 . (See getopt (3) for additional information about the way switches are handled.)
Switch | Description | |
---|---|---|
-d
|
Section 33.2.1.1, "-d allow duplicate keys" | Allow duplicate keys |
-f
|
Section 33.2.1.2, "-f don't fold uppercase to lowercase" | Don't fold uppercase to lowercase |
-N
|
Section 33.2.1.3, "-N append a null byte to all keys" | Append a null byte to all keys |
-o
|
Section 33.2.1.4, "-o append to, don't overwrite the file" | Append to, don't overwrite the file |
-r
|
Section 33.2.1.5, "-r replace (silently) duplicate keys" | Replace (silently) duplicate keys |
-v
|
Section 33.2.1.6, "-v watch keys and data being added" | Watch keys and data being added |
Ordinarily,
makemap
will complain if two entries have identical keys and refuse to insert the duplicate. But if it is desirable to allow the same key to appear multiple times in the database, you can use the
-d
switch to suppress those warnings and allow the duplicates to be inserted. But be aware that this switch is allowed only for the
btree
and
hash
forms of the
db
(3) library. Use of this switch with any other form of database will produce the following error:
makemap: Type class does not support -d (allow dups)
See the
-r
switch for a way to cause duplicates to replace originals.
Normally, the key is converted to lowercase before being stored in the database. When the key entries are case-sensitive, the
-f
switch may be used to prevent conversion to lowercase. When tokens in rule sets are later looked up in the database, you may choose (with the
K
command) to leave those tokens as is or convert them to lowercase before the comparison to keys. This switch and the
K
command should parallel each other.
The
-N
switch tells
makemap
to include a trailing zero byte with each key that it adds to the database. When V8
sendmail
looks up a key in the database, it uses a binary comparison. Some databases, such as
/etc/aliases
under SunOS, append a zero byte to each key. When a trailing zero byte is included with a key, it must also be included with the tokens being looked up, or the lookup will fail. The use of this switch
must
match the
K
command (see
Section 33.3.4.6, "-N append a null byte to all keys (V8.1 and above)"
).
The
-o
switch causes
sendmail
to append to a map, rather than overwrite it. Ordinarily,
makemap
overwrites any existing map with completely new information. The appended information must be all new information (no duplicate keys), unless the
-r
switch is also used.
Ordinarily, it is an error to specify a key that already exists in a map. That is,
john john@host1 john john@host2
Here, the second
john
line produces an error instead of replacing the first with the second. To allow replacement keys, use the
-r
switch with
makemap
. Generally, the
-r
and
-o
switches should be combined in updating a database with new information.
To watch your keys and data being added to a database, use the
-v
switch. This switch causes the following line of output to be produced for each key processed:
key=` key ', val=` data '
Note that the trailing zero added by the
-N
switch is not displayed with the
-v
output. Also note that verbose output is printed to the standard output, whereas error messages are printed to the standard error output.