antispam plugin, pipe backend, how to make it work?

Johannes Rohr johannes at rohr.org
Tue Apr 12 21:09:44 UTC 2016


Hi Tom,

Am 12.04.2016 um 22:26 schrieb Tom Hendrikx:
> On 12-04-16 20:14, Johannes Rohr wrote:
>>      Hi, my setup is a dovecot 2.0.19 IMAP server on Ubuntu Precise with
>> the antispam plugin in version  2.0+20120225-2 and spamassassin at
>> version 3.2.2
>>
>> I have been trying and failed to get the pipe backend of the antispam
>> plugin to work. Spamassin by itself works, a manual call of sa-learn
>> works fine. Bayes data is stored in a mysql DB.
>>
>> I have the following configuration in /etc/dovecot/conf.d/90-plugin.conf
>>
>> plugin {
>>    #setting_name = value
>>    sieve=~/.dovecot.sieve
>>    sieve_dir=~/sieve
>>      antispam_pipe_program_spam_arg = --spam
>>      antispam_pipe_program_notspam_arg  = --ham
>>      antispam_pipe_program = /usr/local/bin/sa-learn-pipe.sh
>>      antispam_pipe_program_args = --username=%u # % expansion done by
>> dovecot
> You need to specify the argument list as a list seperated by semicolons,
> per example on the wiki:
>
> antispam_pipe_program_args = --username;%u

Not sure about that, because sa-learn expects the parameter 
--username=user at na.me, this is one parameter, not two, and it works for 
me locally, where I also set up dovecot to test. The main differences 
are that the versions I have here are newer, I'm running Debian sid, the 
server is on Ubuntu Precise, and second, the server is handling virtual 
users, locally I have only real Unix users.

Also, dovecot doesn't complain about configuration errors regard 
--username=%u. What other way would be there to get the parameter passed 
to sa-learn the way I want?

btw, I tried this, just to be sure, but the result was the same.

>
> The verbose debug should give you some logging to work with.
Yes, and I pasted the output. I can of course repeat:

Apr 12 22:53:02 vm10 imap: antispam: mailbox_is_unsure(Junk): 0
Apr 12 22:53:02 vm10 imap: antispam: mailbox_is_trash(INBOX): 0
Apr 12 22:53:02 vm10 imap: antispam: mailbox_is_trash(Junk): 0
Apr 12 22:53:02 vm10 imap: antispam: mail copy: from trash: 0, to trash: 0
Apr 12 22:53:02 vm10 imap: antispam: mailbox_is_spam(INBOX): 0
Apr 12 22:53:02 vm10 imap: antispam: mailbox_is_spam(Junk): 1
Apr 12 22:53:02 vm10 imap: antispam: mailbox_is_unsure(INBOX): 0
Apr 12 22:53:02 vm10 imap: antispam: mail copy: src spam: 0, dst spam: 
1, src unsure: 0
Apr 12 22:53:02 vm10 imap: antispam: running mailtrain backend program 
/usr/bin/sa-learn
Apr 12 22:53:02 vm10 imap: antispam: running mailtrain backend program 
/usr/bin/sa-learn
Apr 12 22:53:02 vm10 imap: antispam: running mailtrain backend program 
parameter 1 --username=johannes at rohr.org
Apr 12 22:53:02 vm10 imap: antispam: running mailtrain backend program 
parameter 2 --spam
Apr 12 22:53:03 vm10 imap: antispam: run program failed with exit code -1




>   Also, what
> does the wrapper script log when dovecot runs it?

I have actually ditched  the wrapper script because it works without 
locally, I have configured the plugin to call sa-learn directly.

> How does that differ
> from a manual run?
sa-learn works just fine with a manual run. It seems as if the plugin is 
passing the parameters wrongly, but the debugging output doesn't reveal 
the actual command, so it's just guesswork.

Cheers,

Johannes

>
>
>>      antispam_trash = trash;Trash;Deleted Items;Deleted Messages
>>      antispam_spam = SPAM;Junk
>>      antispam_backend = pipe
>>      antispam_verbose_debug = 1
>>      antispam_debug_target = syslog
>>      antispam_pipe_tmpdir = /tmp
>> }
>>
>> I have tried the following wrapper script:
>> #!/bin/bash
>> # set -x
>> LOGFILE=/tmp/sa-learn-pipe.log
>> echo "$$-start ($*)" >> $LOGFILE
>> #echo $* > /tmp/sendmail-parms.txt
>> cat<&0 >> /tmp/sendmail-msg-$$.txt
>> /usr/bin/sa-learn $* -D /tmp/sendmail-msg-$$.txt >> $LOGFILE 2>&1 && \
>> rm -f /tmp/sendmail-msg-$$.txt
>> echo "$$-end" >> $LOGFILE
>> exit 0
>>
>> It somehow isn't working. I can call the wrapper script manually e.g.
>> sudo -u vmail /usr/local/bin/sa-learn-pipe.sh --username=some at mail.user
>> --ham \
>> < someham
>>
>> But it doesn't work from dovecot. It seems the script is called. but no
>> new patterns show up in the bayes DB. Unfortunately, the plugin seems to
>> be documented poorly. How does it call the programme it pipes to? Is it
>> something like $programme --par1 --par2 < message ? Why can't /
>> shouldn't I call sa-learn directly? All the instructions I found on the
>> in internet contained a wrapper script, but none bothered to explain why
>> you would actually need it.
>>
>> I would be very grateful, if someone could enlighten me on that...
>>
>> Cheers,
>>
>> Johannes
>



More information about the dovecot mailing list