Hi,

Currently Dovecot's LMTPd writes incoming emails to mail_temp_dir if it's bigger than 128k. But I would like to spare those unnecessary operations (creating a file, deleting it, writing into it, reading from it, checking whether there is free space and if not, rejecting (temporarily) the message). Memory is cheap, disk IO is not. :) And BTW, on a lot of systems, /tmp is a memory file system already, so there is absolute no need for this.

I only fired two greps so far before writing this mail, in the hope that I can spare writing, testing and sending a patch, which will be either rejected, or rewritten. :)

So, am I right that the following constant would be needed to be converted into a configurable setting and the task is done?
static int
client_input_add(struct client *client, const unsigned char *data, size_t size)
{
        if (client->state.mail_data->used + size <=
            CLIENT_MAIL_DATA_MAX_INMEMORY_SIZE &&
            client->state.mail_data_output == NULL) {
                buffer_append(client->state.mail_data, data, size);
                return 0;
        } else {
                return client_input_add_file(client, data, size);
        }
}

It could be defaulted to 128k, but the user could set it "unlimited" (0 or -1, depending on the author's mood, 0 and/or -1 being unlimited, or 0 being 0, meaning don't even store a bit -doesn't really make sense to me). LMTP is mostly protected from the outside world, so I don't see too much DoS potential here (absolutely not more than in the tmpfs case).

Thanks,

Reply via email to