# makemap

## NAME



           **makemap** — create database maps for smtpd
    


## SYNOPSIS



           **makemap**[**-U**] [**-d** _dbtype_] [**-o** _dbfile_] [**-t** _type_] _file_
    


## DESCRIPTION



           Maps provide a generic interface for associating a textual key to
           a value.  Such associations may be accessed through a plaintext
           file, database, or DNS.  The format of these file types is
           described below.  **makemap** itself creates the database maps used by
           keyed map lookups specified in _smtpd.conf_(5).
    
           **makemap** reads input from _file_ and writes data to a file which is
           named by adding a “.db” suffix to _file_.  The current line can be
           extended over multiple lines using a backslash (‘\’).  Comments
           can be put anywhere in the file using a hash mark (‘#’), and
           extend to the end of the current line.  Care should be taken when
           commenting out multi-line text: the comment is effective until the
           end of the entire block.  In all cases, **makemap** reads lines
           consisting of words separated by whitespace.  The first word of a
           line is the database key; the remainder represents the mapped
           value.  The database key and value may optionally be separated by
           the colon character.
    
           The options are as follows:
    
           **-d** _dbtype_
                   Specify the format of the database.  Available formats are
                   _hash_ and _btree_.  The default value is _hash_.
    
           **-o** _dbfile_
                   Write the generated database to _dbfile_.
    
           **-t** _type_
                   Specify the format of the resulting map file.  The default
                   map format is suitable for storing simple, unstructured,
                   key-to-value string associations.  However, if the mapped
                   value has special meaning, as in the case of a virtual
                   domains file, a suitable _type_ must be provided.  The
                   available output types are:
    
                   **aliases** The mapped value is a comma-separated list of
                            mail destinations.  This format can be used for
                            building user aliases and user mappings for
                            virtual domain files.
    
                   **set** There is no mapped value – a map of this type
                            will only allow for the lookup of keys.  This
                            format can be used for building primary domain
                            maps.
    
           **-U** Instead of generating a database map from text input, dump
                   the contents of a database map as text with the key and
                   value separated with a tab.
    


## PRIMARY DOMAINS



           Primary domains can be kept in tables.  To create a primary domain
           table, add each primary domain on a single line by itself.
    
           In addition to adding an entry to the primary domain map, one must
           add a filter rule that accepts mail for the domain map, for
           example:
    
                 table domains db:/etc/mail/domains.db
    
                 action "local" mbox
    
                 match for domain <domains> action "local"
    


## VIRTUAL DOMAINS



           Virtual domains may also be kept in tables.  To create a virtual
           domain table, add each virtual domain on a single line by itself.
    
           Virtual domains expect a mapping of virtual users to real users in
           order to determine if a recipient is accepted or not.  The mapping
           format is an extension to _aliases_(5), which allows the use of
           “user@domain.tld” to accept user only on the specified domain,
           “user” to accept the user for any of the virtual domains,
           “@domain.tld” to provide a catch-all for the specified domain and
           “@” to provide a global catch-all for all domains.  _smtpd_(8) will
           perform the lookups in that specific order.
    
           To create a single virtual address, add “user@example.com user” to
           the users map.  To handle all mail destined to any user at
           example.com, add “@example.com user” to the virtual map.
    
           In addition to adding an entry to the virtual map, one must add a
           filter rule that accepts mail for virtual domains, for example:
    
                 table vdomains db:/etc/mail/vdomains.db
                 table vusers db:/etc/mail/users.db
    
                 action "local" mbox virtual <vusers>
    
                 match for domain <vdomains> action "local"
                 match for domain "example.org" action "local"
    


## FILES



           _/etc/mail/aliases_     List of user mail aliases.
           _/etc/mail/secrets_     List of remote host credentials.
    


## EXIT STATUS



           The **makemap** utility exits 0 on success, and >0 if an error occurs.
    


* * *