[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