[Dovecot] [BUG] Incorrect maildir quota value after maildirsize creation
I found a problem with maildir++ quota. When dovecot creates maildirsize file, it counts quota wrong. This is, how I reproduce a situation on version 1.2.0:
First, I remove maildirsize file:
# cd /var/mail/test # rm -f maildirsize # ls -la total 32 drwx--S--- 5 mbox mbox 4096 Jul 12 20:45 . drwxrwsr-x 3 root mbox 4096 Jul 12 20:39 .. drwx--S--- 2 mbox mbox 4096 Jul 9 20:45 cur -rw------- 1 mbox mbox 491 Jul 12 20:45 dovecot-uidlist -rw------- 1 mbox mbox 8 Jul 12 20:45 dovecot-uidvalidity -rw------- 1 mbox mbox 8536 Jul 12 20:45 dovecot.index.cache -rw------- 1 mbox mbox 284 Jul 12 20:45 dovecot.index.log drwx--S--- 2 mbox mbox 4096 Jul 12 00:58 new drwx--S--- 2 mbox mbox 4096 Jul 12 00:58 tmp
I have 8 emails which take 14183471 bytes together:
# find cur new -type f | wc -l 8 # find cur new -type f -printf '%s\n' | awk 'END { print a } { a += $0 }' 14183471
Now, I connect to dovecot via POP3 and delete exactly _one_ email which takes 969 bytes. After that, maildirsize file has been created:
# ls -la total 48 drwx--S--- 5 mbox mbox 4096 Jul 12 20:50 . drwxrwsr-x 3 root mbox 4096 Jul 12 20:39 .. drwx--S--- 2 mbox mbox 4096 Jul 12 20:50 cur -rw------- 1 mbox mbox 491 Jul 12 20:45 dovecot-uidlist -rw------- 1 mbox mbox 8 Jul 12 20:45 dovecot-uidvalidity -rw------- 1 mbox mbox 8536 Jul 12 20:50 dovecot.index.cache -rw------- 1 mbox mbox 532 Jul 12 20:50 dovecot.index.log -rw------- 1 mbox mbox 28 Jul 12 20:50 maildirsize drwx--S--- 2 mbox mbox 4096 Jul 9 00:58 new drwx--S--- 2 mbox mbox 4096 Jul 9 00:58 tmp # cat maildirsize 5242880S 14182502 7 -969 -1
So, maildirsize says, that there should be 7-1=6 emails which should take 14182502-969=14181533 bytes together. In fact, there are 7 emails (I delete only one of eight emails) which take 14182502 bytes together (deleted email taked 969 bytes):
# find cur new -type f | wc -l 7 # find cur new -type f -printf '%s\n' | awk 'END { print a } { a += $0 }' 14182502
I figured, that dovecot after physically file removal, calls function maildir_quota_update(), which calls maildirquota_refresh() first (which in turn recalculate quota with new values), and then calls maildirsize_update(), which additionally and incorrectly decreases quota value.
Regards, Adam.
On Sun, 2009-07-12 at 21:25 +0200, Adam Osuchowski wrote:
I found a problem with maildir++ quota. When dovecot creates maildirsize file, it counts quota wrong. This is, how I reproduce a situation on version 1.2.0:
Thanks, fixed: http://hg.dovecot.org/dovecot-1.2/rev/1127a2fddffc
participants (2)
-
Adam Osuchowski
-
Timo Sirainen