# Home Directories for Virtual Users¶

Home directory is a per-user directory where Dovecot can save user-specific files.

• Dovecot’s home directories have nothing to do with system users’ home directories.
• It’s irrelevant if it’s under /home/ or /var/mail/ or wherever.
• If you have trouble understanding this, mentally replace all occurrences of home directory with mail user’s private state directory.

And in particular:

• Never configure your userdb to return the same home directory for multiple users!
• Home directory must be an absolute path, don’t even try to use relative paths!

Some uses for home directory are:

• By default Sieve scripts are in user’s home directory.
• Duplicate mail check database is in user’s home directory. Suppression of duplicate rejects/vacations won’t work if home directory isn’t specified.
• Debugging: If an imap or pop3 process crashes, the core file is written to the user’s home directory.

## Home vs. mail directory¶

Home directory shouldn’t be the same as mail directory with mbox or Maildir formats (but with dbox/obox it’s fine). It’s possible to do that, but you might run into trouble with it sooner or later. Some problems with this are:

• Non-mailbox files may show up as mailboxes.
• If you see this with Maildir, maildir_stat_dirs=yes hides them.
• Or user just might not be able to create mailbox with wanted name, because there already exists a conflicting file
• e.g. with Maildir if you have .dovecot.sieve file, user can’t create a mailbox called dovecot.sieve (i.e. dovecot mailbox that has a sieve child)
• And vice versa: If user creates dovecot.sieve mailbox, Dovecot will probably start logging all kinds of errors because the mailbox directory isn’t a valid Sieve script.
• If you ever intend to migrate to another mailbox format, it’s much easier to do if you can have both old and new mail directories under the user’s home directory.

## Ways to set up home directory¶

The directory layouts for home and mail directories could look like one of these (in the preferred order):

1. Mail directory under home, for example: home= /var/vmail/domain/user/ mail= /var/vmail/domain/user/mail/
2. Completely distinct home and mail directories: home= /home/virtual/domain/user/ mail= /var/vmail/domain/user/
3. Home directory under mail, for example:
• Maildir: home= /var/vmail/domain/user/home/ mail= /var/vmail/domain/user/
• mbox: There’s really no good and safe way to do it.
1. The home directory is the same as the mail directory.

If for example home= /var/vmail/domain/user/ mail= /var/vmail/domain/user/mail/ ,

set:

mail_home = /var/vmail/%d/%n
mail_location = maildir:~/mail


## Examples¶

### LDAP with relative directory paths¶

If your LDAP database uses e.g. mailDirectory=domain/user/, you can use it as a base for home directory:

user_attrs = .., mailDirectory=home=/var/vmail/%\$


Then just use mail_location=maildir:~/Maildir.