Hi,

I have a problem with permissions for newly created folders in Dovecot. Everything worked fine until few days ago, when i did a little change in userdb lookup - but i don't know why it is causing problems.

Server uses following directory structure:

index - /data/mail/index
mail - /data/mail/mail
alt - /data/mail/archive

all 3 on separate volumes, for performance reasons.

Up until few days, i used following:

# doveadm user d...@example.com
field    value
user    d...@example.com
uid    13726
gid    1004
home    /data/mail/mail/003/3726/da/dave
mail mdbox:~/mbox/:DIRNAME=.00f-dbox-Mails:INDEX=/data/mail/stub/index/data/mail/mail/003/3726/da/dave:ALT=/data/mail/stub/archive/data/mail/mail/003/3726/da/dave

config is quite simple:

mail_location = mdbox:~/mbox/:DIRNAME=.00f-dbox-Mails:INDEX=/data/mail/stub/index%h:ALT=/data/mail/stub/archive%h

passdb {
    driver = sql
    args = /data/mail/sql/dovecot-sql.conf.ext
}

userdb {
    driver = static
    args = gid=vmail
}

from SQL i get those fileds
username
domain
password
userdb_home
userdb_uid
userdb_quota_rule
userdb_quota_over_flag


For nicer paths, i created a symlinks
/data/mail/stub/index/data/mail -> /data/mail/index
/data/mail/stub/archive/data/mail -> /data/mail/archive

so path /data/mail/stub/index/data/mail/mail/003/3726/da/dave is in fact in /data/mail/index/003/3726/da/dave

In that setup, everything worked fine, but i didn't like those simlinks, so i altered the SQL query to return all paths in userdb_mail filed:

# doveadm user d...@example.com
field    value
user    d...@example.com
uid    13726
gid    1004
home    /data/mail/mail/003/3726/da/dave
mail mdbox:~/mbox/:DIRNAME=.00f-dbox-Mails:INDEX=/data/mail/index/003/3726/da/dave:ALT=/data/mail/archive/003/3726/da/dave

So everything is in fact the same but little nicer. But since then, newly created directories doesn't get the same permissions like parent folder as day should (2770), but instead they are created with 2700:

# stat -c "%a (%A)"  /data/mail/mail/
2770 (drwxrws---)

# stat -c "%a (%A)"  /data/mail/mail/003
2700 (drwx--S---)

I need to have there 2770 perms, especialy because when other user like this is created:

user    d...@example.com
uid    13999
gid    1004
home    /data/mail/mail/003/3999/da/dave

Dovecot is unable to create directory /data/mail/mail/003/3999, because it doesn't have write permissions for group on /data/mail/mail/003.


I can't find any reason for this behavior - is it something in Dovecot or am I doing something wrong?

Thank you,

David


Dovecot version: 2.2.21
# doveconf -n

# 2.2.21 (5345f22): /usr/local/dovecot/2.2.21/etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.12 (c1c0a23)
# OS: Linux 3.10.0-327.4.5.el7.x86_64 x86_64 CentOS Linux release 7.2.1511 (Core)
auth_master_user_separator = xxxxxx
dict {
  sieve_movespam = mysql:/data/mail/sql/dovecot-movespam-sql.conf.ext
  sieve_redirect = mysql:/data/mail/sql/dovecot-redirects-sql.conf.ext
}
mail_location = mdbox:~/mbox/:DIRNAME=.00f-dbox-Mails:INDEX=/data/mail/stub/index%h:ALT=/data/mail/stub/archive%h
mail_plugins = " quota notify replication"
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 index ihave duplicate mime foreverypart extracttext
mdbox_rotate_size = 15 M
passdb {
  args = xxxxxx
  driver = passwd-file
  master = yes
  pass = yes
  skip = authenticated
}
passdb {
  args = /data/mail/sql/dovecot-sql.conf.ext
  driver = sql
}
passdb {
  args = /data/mail/sql/dovecot-catchall-sql.conf.ext
  driver = sql
}

plugin {
  mail_replica = tcp:xxx:xxx
  quota = dict:user-quota::file:~/user_quota.dat
  quota2 = dict:domain-quota:%d:file:~/../../domain_quota.dat
  quota2_over_flag_value = 1
  quota2_over_script = quota-warning domain %d %n@%d %i missmatch2
  quota2_rule = *:bytes=500M
  quota2_rule2 = Trash:bytes=+5%%
  quota2_warning = bytes=90%% quota-warning domain %d %n@%d %i warn 90
  quota2_warning2 = bytes=100%% quota-warning domain %d %n@%d %i over 100
  quota2_warning3 = -bytes=100%% quota-warning domain %d %n@%d %i under 100
  quota_grace = 5%%
  quota_over_flag_value = 1
  quota_over_script = quota-warning user %n %n@%d %i missmatch1
  quota_rule = *:bytes=0
  quota_rule2 = Trash:bytes=+5%%
  quota_warning = bytes=90%% quota-warning user %n %n@%d %i warn 90
  quota_warning2 = bytes=100%% quota-warning user %n %n@%d %i over 100
  quota_warning3 = -bytes=100%% quota-warning user %n %n@%d %i under 100
  sieve = file:~/sieve;active=~/.dovecot.sieve
  sieve_before = dict:proxy::sieve_movespam;name=sieve_movespam;bindir=~
  sieve_before2 = dict:proxy::sieve_redirect;name=sieve_before;bindir=~
  sieve_max_actions = 500
  sieve_max_redirects = 500
  sieve_redirect_envelope_from = recipient
}
pop3_no_flag_updates = yes
protocols = imap pop3 lmtp sieve
replication_dsync_parameters = -1 -d -N -l 30 -U
replication_max_conns = 5
service aggregator {
  fifo_listener replication-notify-fifo {
    group = vmail
    mode = 0660
    user = vmail
  }
  unix_listener replication-notify {
    group = vmail
    mode = 0660
    user = vmail
  }
}
service dict {
  unix_listener dict {
    group = vmail
    mode = 0660
    user = vmail
  }
}
service doveadm {
  inet_listener {
    port = xxxx
  }
}
service imap-login {
  client_limit = 10000
  inet_listener imap {
    port = 143
  }
  process_min_avail = 50
  service_count = 0
  vsz_limit = 256 M
}
service imap {
  client_limit = 1
  process_limit = 20000
  vsz_limit = 1 G
}
service lmtp {
  inet_listener lmtp {
    port = 2525
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
}
service quota-warning {
  executable = script /data/mail/scripts/quota-actions.sh
  unix_listener quota-warning {
    mode = 0666
  }
  user = root
}
service replicator {
  process_min_avail = 1
  unix_listener replicator-doveadm {
    mode = 0666
  }
}
ssl = no
ssl_client_ca_file = /etc/pki/tls/cert.pem
syslog_facility = local5
userdb {
  args = gid=vmail
  driver = static
}
userdb {
  args = /data/mail/sql/dovecot-sql.conf.ext
  driver = sql
  override_fields = gid=vmail
}
protocol imap {
  mail_max_userip_connections = 1000
  mail_plugins = " quota notify replication imap_quota"
}
protocol lmtp {
  mail_plugins = " quota notify replication sieve"
}
protocol lda {
  mail_plugins = " quota notify replication sieve"
}

Reply via email to