Re: [Dovecot] mbox file too large error with deliver
Timo Sirainen tss@iki.fi wrote:
Setting mailbox_size_limit to 0 made deliveries possible. a limit of
2000000000 (<2GB) also did not show the errors. Thank you ! :)My issue is fixed but deliver might have a bug, so I will explain
things, sorry for not being clear previously.Old mail server was 32 bit(an old version of debian) and used
procmail for deliveries, that setup worked with the given limit of
5GB and mailbox sizes above 1GB.After migrating to an 64 bit server (debian etch) and dovecot's
deliver, the stated delivery errors appeared for mailboxes above 1
GB. As I stated at the beginning of my reply, setting
mailbox_size_limit below 2GB made deliveries possible. I tried with
edge values, mailbox_size_limit=2147483648 (exactly 2GB) would give
the following error in postfix logs:fatal: main.cf configuration error: mailbox_size_limit is smaller
than message_size_limitA limit of 2147483648 - 1 worked fine.
There are two distinct bugs probably, one in postfix and one in
dovecot.Postfix clearly is using signed 32bit integer here, which could be
considered a bug. But why do you think there's a bug in Dovecot? Note
that Dovecot never even sees this value. It's the kernel that enforces
it, Dovecot simply reacts to a write() failure.
The logs stating the "File too large" errors belong to dovecot's deliver process. While I was searching for a solution, I read that deliver honors mailbox_size_limit setting of postfix, I'm not sure if that is correct or not.
Note that the destination mailboxes are smaller than 2GB here, but still gets "File too large" error. The machine is 64-bit, so no fs related kernel limits on file size.
I have not dived into postfix and/or dovecot internals, but my guess is , dovecot gets the mailbox size limit and behaves accordingly. If that is the case, the problem can be fixed in dovecot's deliver code.
If postfix sets file size limit with ulimit before execing deliver, OR uses a similar process which is out of deliver's control, then there is nothing concerning dovecot. If someone can clarify the issue I would be happy.
-- Gokdeniz Karadag
On Mon, 2008-11-24 at 19:13 +0200, Gokdeniz Karadag wrote:
fatal: main.cf configuration error: mailbox_size_limit is smaller
than message_size_limitA limit of 2147483648 - 1 worked fine.
There are two distinct bugs probably, one in postfix and one in
dovecot.Postfix clearly is using signed 32bit integer here, which could be
considered a bug. But why do you think there's a bug in Dovecot? Note
that Dovecot never even sees this value. It's the kernel that enforces
it, Dovecot simply reacts to a write() failure.The logs stating the "File too large" errors belong to dovecot's deliver process. While I was searching for a solution, I read that deliver honors mailbox_size_limit setting of postfix, I'm not sure if that is correct or not.
It's kind of correct, but not really. What happens is:
Postfix reads the mailbox_size_limit setting.
Based on the setting Postfix calls setrlimit(RLIMIT_FSIZE) function to tell kernel the maximum file size for the process and child processes. This is similar to running "ulimit -f mailbox_size_limit" on shell before running deliver.
Postfix executes deliver. deliver is in no way aware of the mailbox_size_limit setting or that there is any kind of a limit. It simply tries to write to a file, which fails with EFBIG.
If postfix sets file size limit with ulimit before execing deliver, OR uses a similar process which is out of deliver's control, then there is nothing concerning dovecot. If someone can clarify the issue I would be happy.
Yes, this is the case.
participants (2)
-
Gokdeniz Karadag
-
Timo Sirainen