hello,
yes, all my virtual users in the vmail-database have the uid of the user 'virtual'. anyway, i seem to have found the reason why it didn't work. as ryan pointed out:
"Even though dspam can determine the user from the signature, it still needs to startup as a valid user. If the user is notspecified on the command line with the --user parameter, dspam uses the user that invoked dspam"
okay, so far so good. i had already added the user virtual to my dspam-database but for the sake of it i tried again, but again no success.
"Unable to determine the destination user. DSPAM agent misconfigured: aborting"
same thing when trying to call dspam without the "--user foo" option logged in as user 'virtual' on the commandline. oddly enough when logged in with my "normal" system account i do not need the "--user foo" option and a user with my name is automatically created in the dspam database (fits together with ryans statement). however i did not go in researching on this behaviour, so let's for now settle on the fact that on my current configuration i need the "--user foo" option to call dspam with the user 'virtual' for whatever reason that is ;-)
thus i inserted a user 'retrain' in my database by feeding dspam some spam for this user. (could have probably used 'virtual' as a dspam-dummyuser, but i wanted to be on the safe side). now i inserted the parameter "--user retrain" and "--debug" into the plugin-source, compiled it and copied it the dovecot plugin directory.
execl ("/usr/bin/dspam", "dspam", "--user retrain","--debug","--source=error", "--stdout", class_arg, sign_arg, NULL);
when trying to move mails into or out of the spam folder this results in the well known above error message, although - as pointed out before - executing the same command with the user virtual from the command line works fine. to debug this i substituted the executable with a little shell script logging the command line arguments and the user that called the script, but it didn't shed any light. somehow i got the idea to seperate the command line argument and it's value in the execl-statement.
execl ("/usr/bin/dspam", "dspam", "--user","retrain","--debug","--source=error", "--stdout", class_arg, sign_arg, NULL);
compiled it, copied it to the dovecot plugin directory and now it magically worked ! i again substituted the dspam-executable with my debugging shell script to check what was different, but as far as i could see the results in my logfile were exactly the same(!) (didn't use a hex-editor though, so there could be a remote possibility of a blank not being a blank or something like that). further checking my logs, it seems as if dspam is now working correctly.
No QuarantineAgent option found. Using standard quarantine. DSPAM Instance Startup input args: dspam --user retrain --debug --source=error --stdout --class=spam --signature=4,443a49e9305501142080570 pass-thru args: processing user retrain uid = 107, euid = 107, gid = 107, egid = 101 loading preferences for user retrain Loading preferences for uid 7 Loading preferences for uid 0 Loading preferences for uid 0 default preferences empty. reverting to dspam.conf preferences. Loading preferences from dspam.conf using /var/spool/dspam/opt-in/local/retrain.dspam as path using /var/spool/dspam/opt-out/local/retrain.nodspam as path sedation level set to: 0 loading preferences for user the_virtual_user_of_the_signature@mydomain.tld Loading preferences for uid 4 Loading preferences for uid 0 Loading preferences for uid 0 default preferences empty. reverting to dspam.conf preferences. Loading preferences from dspam.conf processing signature. length: 10944 reversing 912 tokens Control: [10 10] [11 9] Delta: [1 -1] reclassifying iteration 1 result: 0 libdspam returned probability of 1.000000 message result: SPAM DSPAM Instance Shutdown. Exit Code: 0
so maybe the execl-statement doesn't allow any blanks in it's arguments
- could this possibly be ?
resumé: for most users the plugin should work just fine if they insert the user that dspam is called as into the dspam-database, but in some special cases the "--user foo"-option seems to needed (for whatever reason). i hope this thread is useful to some other potential dovecot-dspam-plugin-user :-)
stefan
Johannes Berg schrieb:
On Tue, 2006-04-11 at 15:12 +0200, Stefan Schmidt wrote:
no, dovecot is running as user dovecot. but to my understanding it switches to the userid of the virtual user accounts before reading/writing data to the maildirs.
Right. But is that the 'virtual' user for all virtual users?
johannes