Hierarchy separator and LAYOUT=FS change

Simeon Ott simeon.ott at onnet.ch
Mon Oct 10 22:06:52 UTC 2016


Hello,

I stumbled across a 5-year-old post on the dovecot list about changing the dovecot hierarchy separator to enable shared mailboxes (http://www.dovecot.org/list/dovecot/2011-January/056201.html <http://www.dovecot.org/list/dovecot/2011-January/056201.html>).
At the moment I’m stuck in a pretty similar situation. Migrated from courier to dovecot 2 years ago and preserved the dot-separator. 
Because I’m using the e-mail adress as a username, the dots for folder separation and the dots in the email adresses getting messed up -

I do have a pretty small mailserver with about 150 accounts. The Maildir filestructur of a typical mail account looks like this:
drwx------  2 vmail vmail  4096 Oct 10 20:02 cur
drwx------  5 vmail vmail  4096 Oct  3 07:48 .Daten.Administration
drwx------  5 vmail vmail  4096 Oct  3 09:51 .Daten.Anfragen, Werbung
drwx------  5 vmail vmail  4096 Oct  3 08:02 .Daten
drwx------  5 vmail vmail  4096 Oct  6 09:57 .Daten.Intern
drwx------  5 vmail vmail  4096 Oct  3 08:03 .Daten.Intern.Fahrzeuge
drwx------  5 vmail vmail  4096 Oct  6 12:57 .Daten.Intern.Infos, FileMaker etc
drwx------  5 vmail vmail  4096 Oct  3 09:19 .Daten.Intern.Sonstiges
drwx------  5 vmail vmail  4096 Oct  3 07:47 .Daten.Kunden
drwx------  5 vmail vmail  4096 Sep 16 08:29 .Daten.Lieferanten
drwx------  5 vmail vmail  4096 Oct  3 08:28 .Daten.Marketing
drwx------  2 vmail vmail  4096 Oct 10 20:02 new
drwx------  5 vmail vmail  4096 Oct 10 18:00 .Sent
drwx------  5 vmail vmail  4096 Oct 10 18:00 .Spam
drwx------  5 vmail vmail  4096 Oct 10 18:00 .Trash

When changing the separator in my inbox namespace the documentation mentions that the filestructur doesn’t change. This means I will get the same problems when using shared boxes with email adresses as usernames. I definitly need to change to maildir:~/Maildir:LAYOUT=fs
When changing to LAYOUT=fs i need to convert all the mailboxes manually, is that correct? Is dsync is the way to go? 
Or is it better to leave the separator and change to a different username schema (without dots in it) and advise the clients to change their credentials? 

I know there are people out there who successfully converted this - but I can’f find that many information about this subject.

doveconf -n:
# 2.1.7: /etc/dovecot/dovecot.conf
# OS: Linux 3.2.0-4-amd64 x86_64 Debian 7.11 
auth_mechanisms = plain login
auth_verbose = yes
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
listen = *
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c
mail_gid = 5000
mail_location = maildir:~/Maildir
mail_plugins = zlib quota acl
mail_uid = 5000
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Spam {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  prefix = INBOX.
  separator = .
}
passdb {
  args = /etc/dovecot/dovecot-ldap.conf
  driver = ldap
}
plugin {
  acl = vfile
  acl_shared_dict = file:/var/spool/postfix/virtual/shared-mailboxes
  quota = maildir:User quota
  quota_exceeded_message = 4.2.2 Mailbox full
  quota_rule = *:storage=1G
  quota_rule2 = INBOX.Trash:storage=+100M
  quota_rule3 = INBOX.Spam:ignore
  quota_warning = storage=95%% quota-warning 95 %u
  sieve = ~/.dovecot.sieve
  sieve_before = /var/lib/dovecot/sieve/default.sieve
  sieve_dir = ~/sieve
  sieve_max_actions = 32
  sieve_max_redirects = 4
  sieve_max_script_size = 1M
  sieve_quota_max_scripts = 0
  sieve_quota_max_storage = 0
}
protocols = " imap lmtp sieve pop3"
service auth {
  group = dovecot
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
  unix_listener auth-master {
    group = vmail
    mode = 0660
    user = vmail
  }
  user = dovecot
}
service lmtp {
  unix_listener lmtp {
    mode = 0666
  }
}
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
  inet_listener sieve_deprecated {
    port = 2000
  }
  process_min_avail = 1
  service_count = 1
  vsz_limit = 64 M
}
ssl_cert = </etc/ssl/private/startssl-onnet.ch <http://startssl-onnet.ch/>-chain.crt
ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-CAMELLIA256-SHA:CAMELLIA128-SHA:CAMELLIA256-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA:!SSLv2
ssl_key = </etc/ssl/private/startssl-onnet.ch.key
userdb {
  args = /etc/dovecot/dovecot-ldap.conf
  driver = ldap
}
protocol lmtp {
  mail_plugins = zlib quota acl sieve
}
protocol lda {
  auth_socket_path = /var/run/dovecot/auth-master
  deliver_log_format = msgid=%m: %$
  mail_plugins = zlib quota acl sieve
  postmaster_address = postmaster at onnet.ch <mailto:postmaster at onnet.ch>
}
protocol imap {
  mail_plugins = zlib quota acl imap_quota imap_acl
}
protocol sieve {
  info_log_path = /var/log/sieve.log
  log_path = /var/log/sieve.log
  mail_max_userip_connections = 10
  managesieve_implementation_string = Dovecot Pigeonhole
  managesieve_logout_format = bytes=%i/%o
  managesieve_max_compile_errors = 5
  managesieve_max_line_length = 65536
}
… parts of the ldap config
user_attrs = homeDirectory=home=/var/spool/postfix/virtual/%$,uidNumber=uid,gidNumber=gid,quota=quota_rule=*:bytes=%$
user_filter = (&(objectClass=CourierMailAccount)(mail=%u))

… my shared configuration is currently commented out. 
# namespace {
#   type = shared
#   separator = .
#   prefix = shared.%%u.
#   location = maildir:%h/Maildir:INDEX=~/Maildir/shared/%%u
#   subscriptions = yes
#   list = children
#}

thanks in advance for any help

Sincerely, 
Simeon - onnet.ch <http://onnet.ch/>


More information about the dovecot mailing list