New with this version:

*  Updated from more recent version to work properly and to bring things
   current.
*  Add Bennett Todd's preforking and option-parsing code from smtpproxy. 
   See notes below for more details.
*  Documentation appropriately updated.

NOTE:  Startup of the script has changed.  The script now requires three
parameters before the it will start, notably listening IP and port, next-hop
server and port, and e-mail address to send all messages marked "positive"
to (which may be per-user overridable in the future).

The minimum syntax is as follows:

spamproxyd srdaddr:srcport dstaddr:dstport spamaddr@example.com

If any of the three required parameters are missing, the script will error
out with the syntax and show edited-in defaults an examples.

You can also specify the size of the process pool (in number of preforked
child processes) as well as the low- and high-water-marks of the number of
messages each child may process before being reaped and replaced.

The in-script values are ideal for my own production system, currently a
Pentium Pro 200 with 64 megabytes of RAM running Debian GNU/Linux Woody
which already does quite a bit more than just handle e-mail.  Best thing to
do is to play with these settings then throw a bunch of mixed mail at it. 
As always, YMMV.

Things are still quite rough, but this is a marked improvement from the
previous version, which when left running for an extended period of time,
would consume an enormous amount of memory depending on the size of the
largest messages passed through it.  Discarding the process after a certain
number of messages processed helps this situation enormously.

Preforking also allows the script to handle more messages per unit time,
allowing the script to be bit more scalable, a la Apache.  Many thanks go to
Bennett Todd for the code which makes this possible.

As always, any comments and suggestions for improvement would be greatly
suggested.

--Ian R. Justman <ianj@esper.net>  02/26/2002
