doveadm quota recalc problem for domain

Samuel compte-dovecot at ingescom.com
Sun Sep 6 16:55:52 UTC 2015


Hello,

I've set up user quota and domain quota for dict SQL and all seems OK.

New mail for user increase the user quota and the domain quota.

Deleting email count down user quota and domain quota.

But in case of SQL failure, I'm trying to rebuild the user quota and 
domain quota with doveadm quota recalc.

The problem is that the command :

'doveadm quota recalc -u foo at bar' sets the domain quota only with user 
foo at bar

even when I try a domain quota recalc :

doveadm quota recalc -A

or

doveadm quota recalc -u *@bar (only one user is taken in account for the 
domain quota and not all the user).

The domain SQL database is broken with value of only one user for the 
whole domain quota.

So how to achieve rebuild domain quota correctly with doveadm ?

Thanks a lot.

Samuel.

Debian Jessie
Dovecot : 2.2.13
custom grsec kernel :Linux postfix 3.14.50-grsec-1

##########################
dovecot -n :

# 2.2.13: /etc/dovecot/dovecot.conf
# OS: Linux 3.14.50-grsec-1 x86_64 Debian 8.1 nfs4
auth_mechanisms = plain login
auth_verbose = yes
dict {
   quota = mysql:/etc/dovecot/dovecot-dict-sql-user.conf
   quota_domain = mysql:/etc/dovecot/dovecot-dict-sql-domain.conf
}
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
login_trusted_networks = XXXXXX/24
mail_location = maildir:/maildir/%d/%n/Maildir
mail_plugins = " quota"
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 Junk {
     auto = subscribe
     special_use = \Junk
   }
   mailbox Sent {
     special_use = \Sent
   }
   mailbox "Sent Messages" {
     special_use = \Sent
   }
   mailbox Trash {
     auto = subscribe
     special_use = \Trash
   }
   prefix =
}
passdb {
   args = /etc/dovecot/dovecot-sql.conf.ext
   driver = sql
}
plugin {
   quota = dict:user::proxy::quota
   quota2 = dict:domain:%d:proxy::quota_domain
   quota_grace = 10M
   quota_status_nouser = DUNNO
   quota_status_overquota = 552 5.2.2 Mailbox is full
   quota_status_success = DUNNO
   quota_warning = storage=100%% quota-warning 100 %u
   quota_warning2 = storage=95%% quota-warning 95 %u
   quota_warning3 = storage=80%% quota-warning 80 %u
   quota_warning4 = -storage=100%% quota-warning below %u
   sieve = ~/.dovecot.sieve
   sieve_dir = ~/sieve
}
protocols = imap pop3 sieve lmtp
service auth-worker {
   user = vmail
}
service auth {
   unix_listener /var/spool/postfix/private/auth {
     group = postfix
     mode = 0660
     user = postfix
   }
}
service dict {
   unix_listener dict {
     mode = 0666
     user = dovecot
   }
}
service quota-status {
   executable = quota-status -p postfix
   inet_listener {
     port = 12340
   }
}
service quota-warning {
   client_limit = 1
   executable = script /usr/local/bin/quota-warning.sh
   unix_listener quota-warning {
     mode = 0666
     user = vmail
   }
   user = vmail
}
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem
userdb {
   args = /etc/dovecot/dovecot-sql.conf.ext
   driver = sql
}
protocol lda {
   mail_plugins = " quota sieve"
}
protocol imap {
   mail_plugins = " quota imap_quota"
}

################
root at postfix:/etc/dovecot# cat dovecot-dict-sql-domain.conf |grep -v "#"

connect = host=XXXXX dbname=mail user=test password=test

map {
   pattern = priv/quota/storage
   table = domains
   username_field = domain
   value_field = quota
}
map {
   pattern = priv/quota/messages
   table = domains
   username_field = domain
   value_field = quota_messages
}

map {
   pattern = shared/expire/$user/$mailbox
   table = expires
   value_field = expire_stamp

   fields {
     username = $user
     mailbox = $mailbox
   }
}

###################

root at postfix:/etc/dovecot# cat dovecot-dict-sql-user.conf |grep -v "#"

connect = host=XXXXXXXX dbname=mail user=test password=test

map {
   pattern = priv/quota/storage
   table = quota
   username_field = email
   value_field = bytes
}
map {
   pattern = priv/quota/messages
   table = quota
   username_field = email
   value_field = messages
}

map {
   pattern = shared/expire/$user/$mailbox
   table = expires
   value_field = expire_stamp

   fields {
     username = $user
     mailbox = $mailbox
   }
}
############################


More information about the dovecot mailing list