Hello Aaron, > The flow I sketched in my pipe.c rewrite first copies messages into a > target user's INBOX, and then calls the function execute_filters(useridnr, > msgidnr). The filters can then run on the header and/or body and toss the > message around as needed, sending a rejection to the From address and > deleting it, forwarding and possibly deleting it, or just moving it to > another mailbox.
Just a thought - it seems there'd be a race-condition here where a message has been inserted into INBOX, but before the filters get executed to move it somewhere else, a user reads their mailbox (eg. via imap). I don't know if this would cause any actual errors (I noticed in a recent imap trace posted that it queried for message metadata matching both message_idnr and mailbox_idnr - if the latter changed since having been looked up, it could), or just an inconsistent view of the mailbox. Considering some of those filters will likely be for matching virus headers, etc., there's a chance someone could end up opening such a message that should have been deleted. Also, I've not looked at your code, so you may well have addressed this.... Jesse -- Jesse Norell jesse (at) kci.net
