Hello,
I have Dovecot 2.2.9 from Debian repository running on AMD64, ext4 filesystem for mail storage. Each mailbox has its own system user, quotas are enforced by file system. Quota settings in configuration are as follows (from doveconf -n):
quota = fs:Domain quota:group:inode_per_mail quota2 = fs:Mailbox quota:user:inode_per_mail quota2_grace = 18%% quota_grace = 18%% quota_status_nouser = DUNNO quota_status_overquota = 552 5.2.2 Mailbox is full quota_status_success = DUNNO
Quota rules are read from PostgreSQL (snippet)
user_query = ...
'*:bytes=' || domains.quota_size || 'M:messages=' ||
domains.quota_files as quota_rule,
'*:bytes=' || mailboxes.quota_size || 'M:messages=' ||
mailboxes.quota_files as quota2_rule,
...
As far as I can tell, quota enforcing in dovecot-lda works correctly. User is allowed one message which brings him over quota (provided the message fits into filesystem quota hard limit and quota_grace value), every other message after that is rejected.
However policy service quota-status for Postfix seems to ignore the quota_grace value. When a message arrives which would make user go over quota (but which would not make him exceed the grace limit value), Postfix checks the policy service and is told to reject the message.
I checked and dovecot itself is fine with the message - if I try to send it with the policy service check disabled, Postfix accepts it and so does dovecot-lda, the message is delivered into mailbox.
My question is - is that intended behavior or bug in the quota-status?
Appending some lines from debug log - as far as I can see there's not much in it though:
dovecot: quota-status: Debug: Added userdb setting: mail=maildir:/home/mailboxes/t/e/test.info/test/:LAYOUT=fs:INDEX=/var/lib/dovecot-data/index/1010:CONTROL=/var/lib/dovecot-data/control/1010 dovecot: quota-status: Debug: Added userdb setting: plugin/quota2_rule=*:bytes=11M:messages=110 dovecot: quota-status: Debug: Added userdb setting: plugin/quota_rule=*:bytes=15M:messages=150 dovecot: quota-status(test@test.info): Debug: Effective uid=1010, gid=1007, home=/home/mailboxes/t/e/test.info/test/ dovecot: quota-status(test@test.info): Debug: Quota root: name=Domain quota backend=fs args=group:inode_per_mail dovecot: quota-status(test@test.info): Debug: Quota rule: root=Domain quota mailbox=* bytes=15728640 messages=150 dovecot: quota-status(test@test.info): Debug: Quota grace: root=Domain quota bytes=2831155 (18%) dovecot: quota-status(test@test.info): Debug: Quota root: name=Mailbox quota backend=fs args=user:inode_per_mail dovecot: quota-status(test@test.info): Debug: Quota rule: root=Mailbox quota mailbox=* bytes=11534336 messages=110 dovecot: quota-status(test@test.info): Debug: Quota grace: root=Mailbox quota bytes=2076180 (18%) dovecot: quota-status(test@test.info): Debug: Namespace inbox: type=private, prefix=, sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:/home/mailboxes/t/e/test.info/test/:LAYOUT=fs:INDEX=/var/lib/dovecot-data/index/1010:CONTROL=/var/lib/dovecot-data/control/1010 dovecot: quota-status(test@test.info): Debug: fs: root=/home/mailboxes/t/e/test.info/test, index=/var/lib/dovecot-data/index/1010, indexpvt=, control=/var/lib/dovecot-data/control/1010, inbox=/home/mailboxes/t/e/test.info/test, alt= dovecot: quota-status(test@test.info): Debug: fs quota add mailbox dir = /home/mailboxes/t/e/test.info/test dovecot: quota-status(test@test.info): Debug: fs quota block device = /dev/sdc1 dovecot: quota-status(test@test.info): Debug: fs quota mount point = /home dovecot: quota-status(test@test.info): Debug: fs quota mount type = ext4