In Chapter 10, we saw that local deliveries all look up the mailbox in qmail’s users database to determine both where to deliver a message, and what user and group ID and home directory to use when making the delivery. Although the most common setup of users is to deliver to the users in /etc/passwd, the users database is considerably more flexible than a mere mirror of the password file.
The users database maps each local address to a set of user data including:
Numeric user ID
Numeric group ID
Character to separate parts of a subaddress, usually a dash
Extension, used to find an appropriate qmail file
The qmail-lspawn program changes to the user and group ID and home directory before starting a delivery, then uses the separator character and extension to locate a .qmail file to control the delivery, as covered in Chapter 10.
If you don’t create a users database, qmail calls qmail-getpw , which implements a default mapping from login users to qmail users for each local delivery. It takes the local part, passed as its argument, and looks that up using the standard getpwnam( ) routine. If the user exists and meets some safety criteria (discussed in a moment), it returns user information for the user, uid, gid, and home directory from the password file, and null dash and extension. If the name is of the form user-extension and the username exists, it returns the user information with the dash being a literal ...