Timo Sirainen wrote:
Introduction: If dovecot LDA save failed to mbox (not enough disk space, for example), it does not do rollback. Then my mailbox was corrupted. Last message is dropped in the middle of headers(body, attachments, etc).
That shouldn't be happening, even if you're not using quota plugin at all. What does Dovecot log in that situation?
I'm sorry, but this happens if I do not use quota plugin for LDA. :(
My environment is: -- OS: Linux 2.6.30 i686 Slackware 11.0.0 -- dovecot 1.2.6 (with 2 patchs: stat((null)) + istream-seekable) -- user inbox(mbox) and homedir(with mbox) locate at NFS (OS: Linux 2.6.18.7 i686 Slackware 11.0.0) -- NFS has file system group quota
Test user is over quoted:
Disk quotas for group #5751796 (gid 5751796): Filesystem blocks quota limit nfse:/export 23768* 10240 10240
dovecot -n
# 1.2.6: /usr/local/etc/dovecot.conf # OS: Linux 2.6.30 i686 Slackware 11.0.0 base_dir: /var/run/dovecot/
[ skip listen and ssl_* conf params ]
mmap_disable: yes mail_nfs_storage: yes mail_nfs_index: yes mbox_write_locks: dotlock_try fcntl
mail_plugins(default): quota imap_quota mail_plugins(imap): quota imap_quota mail_plugins(pop3): quota
lda: mail_plugins: quota quota_full_tempfail: no sendmail_path: /usr/lib/sendmail rejection_subject: Rejected: %s rejection_reason: Your message to <%t> was automatically rejected:%n%r auth_socket_path: /var/run/dovecot/auth-master auth default: mechanisms: plain login passdb: driver: sql userdb: driver: prefetch userdb: driver: sql socket: type: listen master: path: /var/run/dovecot/auth-master mode: 384 plugin: quota: dirsize:Quota quota2: fs:Quota:group
If I change only one string (disable LDA quota): "lda: mail_plugins: quota", my inbox starts corrupt.
- LDA with quota plugin log:
$ echo "123123123" | /usr/local/libexec/dovecot/deliver -d koc
Quota root: name=Quota backend=dirsize args= Quota rule: root=Quota mailbox=* bytes=10383360 messages=0 Quota root: name=Quota backend=fs args=group Quota rule: root=Quota mailbox=* bytes=10383360 messages=0 mbox: data=~/:INBOX=/var/virtual/mail/I/I/koc:INDEX=MEMORY fs: root=/var/virtual/home/I/I/koc, index=, control=, inbox=/var/virtual/mail/I/I/koc fs quota add storage dir = /var/virtual/home/I/I/koc fs quota block device = nfse:/export fs quota mount point = /mount/m5 quota-fs: host=nfse, path=/export, gid=5751796, bytes quota-fs: gid=5751796, value=24338432, limit=10485760, active=1 from=<>, msgid=: save failed to INBOX: Quota exceeded (mailbox for user is full) from=<>, msgid=: rejected: Quota exceeded (mailbox for user is full) msgid=: Return-Path missing, rejection reason: Quota exceeded (mailbox for user is full)
- LDA without quota plugin:
$ echo "123123123" | /usr/local/libexec/dovecot/deliver -d koc
mbox: data=~/:INBOX=/var/virtual/mail/I/I/koc:INDEX=MEMORY fs: root=/var/virtual/home/I/I/koc, index=, control=, inbox=/var/virtual/mail/I/I/koc close(/var/virtual/mail/I/I/koc.lock) failed: Disk quota exceeded from=<>, msgid=: saved mail to INBOX
My INBOX before delivery: -rw------- 1 5751796 5751796 4087 2009-10-16 17:24 koc after: -rw------- 1 5751796 5751796 4096 2009-10-16 17:25 koc (look at size, now it 8*512k blocks)
If INBOX is zero size, than deliver say same: "lock failed, saved mail to INBOX", but INBOX size still zero. If INBOX is 1 byte size, than deliver say same, but message writes to INBOX to full 512k block.
Or what does your MTA log? Does it say deliver crashed? Because that's the only reason I can think of that it would leave the mbox corrupted. Post your dovecot -n output also?
MTA log is: stat=ok3: saved mail to INBOX. Deliver not crash. I can make strace if it helps.
The stat((null)) should be fixed by this: http://hg.dovecot.org/dovecot-2.0/rev/14eeed133d57
I backport it to dovecot-1.2 and "stat((null))" fixed now! Thanx again, Timo!
=kostik