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

Johannes Rohr johannes at rohr.org
Wed Apr 13 06:27:29 UTC 2016


Hi List,

does the antispam plugin any way of actually seeing how it is calling 
the pipe program and how it is failing? I can't reproduce the failure 
when I call sa-learn manually. Can someone tell me, with which UID the 
call happens, is it the UID the current dovecot process is running under 
(which would be vmail, as it is a virtual user setup)
Cheers,

Johannes

Am 12.04.2016 um 23:09 schrieb Johannes Rohr:
> 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