Adam Osuchowski
2009-Jul-12 19:25 UTC
[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.
Timo Sirainen
2009-Jul-27 03:20 UTC
[Dovecot] [BUG] Incorrect maildir quota value after maildirsize creation
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 -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 197 bytes Desc: This is a digitally signed message part URL: <http://dovecot.org/pipermail/dovecot/attachments/20090726/93ccc261/attachment-0002.bin>