The smtpd server is coming along nicely. I've added a simple
blocking list capability. It reads a file for bad internet
addresses. The server now properly tell's it's children to
shutdown, and the children will shut down once they are done
with the current SMTP transaction.

I guess I should outline how this server works. It is very
minimal and is meant for bulk processing. It's just a simple
pre-forking server that understands SMTP. It writes all
messages it receives to disk. It doesn't validate users. It
accepts all mail it gets unless the source is in it's block
list. Messages are written to disk and after that it returns
OK. Prepended to each message are a couple of lines:

Forward-Path:

Return-Path:

Received:

Forward-Path reflects the value given to the RCPT command.

Anyhow, the server simply creates a new directory every
minute and puts the message in a sub-directory of the
current 'minute' directory. That sub-directory is the domain
portion of the RCPT command. The message itself is in the
form PIDSEQ. After the file is written, it's renamed
PIDSEQ.msg. No locking required. This should also keep the
number of message per directory manageable. I'm gambling
that the server doesn't need to write more than 50 messages
a second. So how does mail get to it's final destination?
That's up to other programs.