[Postfixbuch-users] SA-Learn

Christian Bricart christian at bricart.de
Di Nov 7 22:40:16 CET 2006


Christian Boltz schrieb:
> Hallo Lars, hallo Leute,
> 
> Am Dienstag, 7. November 2006 17:00 schrieb lars behrens:
>> sorry, ist etwas OT, aber hier weiss sicher jemand antwort ;-)
>>
>> ich habe mir ein script gebastelt, welches in einen mailordner
>> verschobene HAMs und SPAMs in den spamassassin verschiebt (sa-learn);
>>
>> [..snip..]
> [..snap..]
> Üblicherweise empfehle ich in diesem Fall
>    for file in * ; do echo machwas mit "$file" ; done

vorsicht bei der *-Expansion - sieht auch dein eigenes P.S.
( aber stimmt - mein Skript (s.u.) macht das auch nicht :-) )

> aber da Du ja die Dateiliste nicht brauchst und das ganze Verzeichnis an 
> sa-learn verfütterst, empfiehlt sich hier
>     ls * && echo machwas
> 
> Auf Dein Script angewendet also
>     ls /home/ham/Maildir/cur/* && sa-learn [...] && mail [...]
>     exit 0
> oder besser
>     ls /home/ham/Maildir/cur/* || exit 0
>     sa-learn [...] && mail [...]
> weil Du dann Fehler in sa-learn mitbekommst.

Wie gut, dass sa-learn auch (Maildir-) _Folder_ lernen kann ;-)

@Lars: und vergiss nicht auch Ham mit zu lernen - wenn du den Hund immer
nur tadelst und nie lobst, dann beisst er dich irgendwann mal...
Ich löse das so, dass die Leute ihre false-positives einfach wieder in
die INBOX verschieben. Gleichzeitig lernt er auch alles als Ham, was
nicht in die sa-learn-Box verschoben wurde (sind die User selber schuld,
wenn sie den Spam in ihrem Posteingang lassen ;-)

# Voraussetzung ist, dass unter /home/* nur die $HOMEs der Benutzer
# liegen und dass der Loginname mit dem Verzeichnisnamen
# übereinstimmen:
for homedir in /home/*; do
 user=`basename ${homedir}`
 echo "---------------------------"
 echo "${user}"
 echo "---------------------------"
 if [ -d ${homedir}/Maildir/cur/ ]; then
  if [ $(ls ${homedir}/Maildir/cur/ | wc -l) -gt 0 ]; then
   id ${user} >/dev/null 2>&1
   if [ $? -eq 0 ]; then
    echo "learning HAM for ${user}"
    su ${user} -c \
      "sa-learn --ham --no-sync ${homedir}/Maildir/cur/"
   fi
  fi
 fi
 if [ -d ${homedir}/Maildir/.sa-learn/cur/ ]; then
  if [ $(ls ${homedir}/Maildir/.sa-learn/cur/ | wc -l) -gt 0 ]; then
   id ${user} >/dev/null 2>&1
   if [ $? -eq 0 ]; then
    echo "learning SPAM for ${user}"
    su ${user} -c \
      "sa-learn --spam --no-sync ${homedir}/Maildir/.sa-learn/cur/ \
      && rm -f ${homedir}/Maildir/.sa-learn/cur/*"
   fi
  fi
 fi
 if [ -f ${homedir}/.spamassassin/bayes_journal ]; then
   echo "sync SA database"
   su ${user} -c \
      "sa-learn --sync"
 fi
done

> [..schnapp..]
>
> PS @ Benjamin: Bis wirklich die Argumentliste für cat, rm usw. zu lang 
>    wird, muss viel geschehen - AFAIK sind unter Linux Befehlszeilen mit 
>    einer Länge von 16 oder sogar 32 kB (!) möglich.
>    Jedenfalls deutlich mehr als die 2 Dateien, die hier Probleme machen.

.. und für die Paranoiden gibt es ja die "find mit xargs"-Methode ;-)

Christian



Mehr Informationen über die Mailingliste Postfixbuch-users