The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Introduction
============
Normally spamd looks for user_prefs for users listed in /etc/passwd. Of course
with vpopmail this doesn't work since vpopmail are virtual users and do not 
exist in /etc/passwd. But each vpopmail user does have their own maildir where
personal user_prefs can be stored.  I have patched spamd to look for user prefs
in the users vpopmail maildir. 

Requirements
============
1. This should work with v.5.0.1-5.20 of vpopmail as long as it has the 
seekable patch installed to allow you to use filters like procmail or 
maildrop in the .qmail-default file.  See http://www.thesafebox.com for this 
patch.  Older versions may work w/o patch but I don't know for sure.
2. SA v.2.20
3. Procmail or maildrop for filtering and running spamc.


Usage Tips and Examples
=======================
1. Run spamc with the "-u userid@somedomain.net" option. This is how spamd 
determines what the vpopmail users name is and therefore their maildir.
2. Run spamd with the following switches: 

	spamd -v -u vpopmail (of course any other ones that you use) 

where "vpopmail" is the name of your vpopmail account in /etc/passwd. 
spamd will now run with proper ownership and will be able to read/write to any
vpopmail maildir. I would suggest you consider running spamd as:

	spamd -d -v -u vpopmail -F 0 

3. You can also use -c switch so that it will auto-create user_prefs file or 
use some other interface outside of SA to create the personal user_prefs 
(perhaps a modified phpsa interface).  User_prefs dir will be created in the 
vpopmail users maildir. It gets this info from the command:
        vuserinfo -d userid@somedomain.net

For example if the user's maildir is:
	/home/vpopmail/domains/somedomain.net/4/userid

then their user_prefs would be stored in:
	/home/vpopmail/domains/somedomain.net/4/userid/.spamassassin/user_prefs

5. One gotcha - cannot have personal AWL dbs - only a sitewide AWL will work.
This is specified in your /etc/mail/spamassassin/local.cf file.  Perhaps a
future enhancement would be to add the capability to have personal AWL db.

6. Of course vpopmail must have the seekable patch installed (see 
http://www.thesafebox.com for patch). This will allow you to use procmail or 
maildrop for filtering in the global .qmail-default file for each virtual 
domain that you host.

7. Dallas Engelken contributed the following example files using maildrop:
after you have the seekable patch applied, you can filter through maildrop
by changing your domain/.qmail-default file to
| preline maildrop mailfilter

the mailfilter file must be owned by vpopmail:vckpw and have 0600
permissions.  otherwise maildrop will not process it.  the contents of
mailfilter should be something like this (of course edit paths to match your 
setup):

####################################################
VPOP="| /var/vpopmail/pop/bin/vdelivermail '' bounce-no-mailbox"
VHOME=`/var/vpopmail/pop/bin/vuserinfo -d $EXT@$HOST`

if ( $SIZE < 262144 )
{
        exception {
                xfilter "/usr/bin/spamc -f -u $EXT@$HOST"
        }
}

if (/^X-Spam-Flag: *YES/)
{
        exception {
                include $VHOME/Maildir/.mailfilter
        }
## IF YOU WANT TO GATHER ALL SPAM INTO 1 MAILDRIR
        #exception {
        #        to /home/pop/spam/
        #}
## OR IF YOU WANT TO DELIVER SPAM TO THE USERS MAILDIR
        exception {
                to "$VPOP"
        }
}
else
{
        exception {
                include $VHOME/Maildir/.mailfilter
        }
        exception {
                to "$VPOP"
        }
}
####################################################


8. Of course there are a myriad of ways to deliver the mail.  For instance at 
my site I divert all Spam to each individuals own Spam IMAP folder so I would 
use:

   to $VHOME/Maildir/.Spam

(of course .Spam must have been created ahead of time using maildirmake 
command).


Hope this helps,
Ed Henderson <ed.henderson@certainty.net>