Mail::SpamAssassin::Spamd::Apache2
==================================

This distribution contains a mod_perl2 module, implementing the spamd
protocol from the SpamAssassin (https://spamassassin.apache.org/) project
in Apache2.  It's mostly compatible with the original spamd.

The apache-spamd.pl script is included to help you configuring Apache.

It has been tested on Linux with perl 5.8.8 (with threads), Apache 2.2.2,
and mod_perl 2.0.2 (DSO).  Success / failure reports for other platforms
and configurations are most welcome.

Right now, consider this an alpha version.

Refer to apache-spamd.pl and Mail::SpamAssassin::Spamd::Apache2::Config
documentation (read with perldoc or man) for configuration instructions.


TODO

Hmm... done?


INSTALLATION

To install this module type the following:

   perl Makefile.PL
   make
   make test
   make install


DEPENDENCIES

  Apache version 2
  mod_perl

If you want to use SSL, you'll also need mod_ssl.  mod_identd is required
for --auth-ident.

Tests use the Apache::Test framework, distributed with mod_perl and
available separately on CPAN.


BUGS
  
See <http://issues.apache.org/SpamAssassin/> to report a bug.

Please include perl, Apache and mod_perl versions. 

`httpd -V` shouldn't hurt (unless you know it doesn't matter in your case).  
`httpd -l` might also be handy, if you're reporting an apache-spamd.pl issue.
Don't forget relevant lines from logs/error_log.

Known bugs: 

Worker (and other threading MPMs) probably will cause
problems.  SA isn't really thread-safe; one example is using umask().
Some helpers like Razor / Pyzor / DCC probably do chdir().  I consider
this a problem of SA, not this code.

# vim: encoding=utf8
