On Tue, Jan 06, 2004 at 01:36:20PM -0800, Quenten Griffith wrote: > Hello all I am looking for suggestions on how to best > implement a Exim4 with Cyrus IMAP mail boxes (virtual > users) with spamassassian where users prefs. are > stored in mysql. Currently I have tried amavisd-new > but it does not use spamd/spamc so it will not connect > to mysql to retrieve users preferences. I then tried > to use sa-exim, but that connects to the mysql server > as the debian-exim4 user instead of the user in the > from field of the email. Does anyone have a working > example or suggestion they can give me for me to > achieve this? I designed and built a similar system a few months ago. On my system, however, I elected to store only user preferences in a database, and to keep bayes and awl data in the filesystem. Because of this, my users have /etc/passwd entries, though they're limited to a form similar to foo:x:15493:15493::/home/virtualusers/foo:/bin/false In spamassassin, database connections don't need to be made as individual users, but instead should be made as something like debian-exim4 or spamassassin or something like that. Spamassassin with then issue db queries such as "SELECT preference, value FROM userpref WHERE username='<recipient>'". I decided not to pursue the possibility of having bayes and AWL in an SQL database for a couple of reasons. The real reason to use a database, IMO, is that it makes it much easier to provide a web frontend for updating user configurations. But you don't need such a thing for bayes and AWL. Those work just fine in flat files, and I would bet actually perform better there due to their being less overhead. The relevant router and transport in my exim configuration look like this: spamtest: driver = accept # OK, it's still better than sendmail, but not by much... # Translated to english, the following condition is true iff # the message did not originate via local-bsmtp (because that's # what spamassassin uses to resubmit the filtered message) and # the local-part is present in /etc/mail/filterusers condition = ${if and \ { \ { ! eq{$received_protocol}{local-bsmtp} }\ { == { ${lookup{$local_part} \ dbmnz{/etc/mail/filterusers}{1}}} \ {1}\ }\ } \ {yes}{no}} check_local_user transport = spamcheck spamcheck: driver = pipe batch_max = 1000 use_bsmtp command = /usr/sbin/exim -bS transport_filter = /usr/local/bin/spamc -u $local_part Somewhere after the spamtest router you should have another router that feeds you mail to Cyrus via LMTP, or, in my case, to another machine via SMTP, since I wanted to keep the spamassassin processes, anti-virus software, etc running on a different machine than the one that runs Cyrus. HTH. Let me know if you have any questions. noah
Attachment:
pgpsDldhplwgD.pgp
Description: PGP signature