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

This distribution contains a mod_perl2 module, implementing the spamd
protocol from the SpamAssassin (http://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

For now, report to me directly or to the SpamAssassin dev list.

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.


COPYRIGHT AND LICENCE

Copyright (C) 2006 by Radosław Zieliński <radek@pld-linux.org>

Based on spamd code, (C) by The SpamAssassin(tm) Project

This library is free software; you can redistribute it and/or modify it
under the terms of the Apache License, Version 2.0.


# vim: encoding=utf8
