#!/bin/sh set -eu USER=${USER:-$LOGNAME} DOMAIN=${DOMAIN:-$(hostname --fqdn)} NICE='/usr/bin/nice -20' NICE='' MAILFILTER=$HOME/.etc/mailfilter SA_PREFS="$MAILFILTER/spamassassin/user_prefs" MAILREAVER="$NICE /usr/share/crm114/mailreaver.crm -u $MAILFILTER/crm114/" SPAMASSASSIN="$NICE /usr/bin/spamassassin --prefs-file=$SA_PREFS" SPAMC="$NICE /usr/bin/spamc --log-to-stderr" SA_REPORT="$SPAMC --reporttype=report" SA_REVOKE="$SPAMC --reporttype=revoke" SA_LEARN="$NICE /usr/bin/sa-learn -p $SA_PREFS" SA_LEARN_HAM="$SPAMC --learntype=ham" SA_LEARN_SPAM="$SPAMC --learntype=spam" PRE_CLEANUP="$NICE $MAILFILTER/procmail/pre-spam-cleanup" HAM=0 SPAM=0 FILE= for i in "$@"; do case "$i" in --ham) HAM=1;; --spam) SPAM=1;; *) if [ -n "$FILE" ]; then echo "E: input file already specified: $i" >&2 exit 1 elif [ -r "$i" ]; then FILE="$i" else echo "E: unknown argument: $i" >&2 exit 255 fi ;; esac done case "$HAM/$SPAM" in 0/0) echo "E: you need to specify either --ham or --spam." >&2 exit 255 ;; 1/1) echo "E: you cannot specify both --ham and --spam." >&2 exit 255 ;; esac TMPFILE="$(tempfile -p mailtrainer)" trap "rm -f $TMPFILE" 1 2 3 4 5 6 7 8 10 11 12 13 14 15 $PRE_CLEANUP < ${FILE:-/dev/stdin} > "$TMPFILE" cd $HOME/.var/crm114 case "$HAM/$SPAM" in 1/0) echo -n 'Training Spamassassin with ham: ' >&2 $SA_LEARN_HAM < "$TMPFILE" >&2 echo -n 'Revoking spam via Spamassassin: ' >&2 $SA_REVOKE < "$TMPFILE" >&2 # [ "${CRM114_STATUS:-}" = GOOD ] || { echo -n 'Training crm114 with ham: ' >&2 $MAILREAVER --good < "$TMPFILE" >/dev/null echo 'done.' >&2 # } formail -I 'X-Trained-As: ham' < "$TMPFILE" ;; 0/1) echo -n 'Training Spamassassin with spam: ' >&2 $SA_LEARN_SPAM < "$TMPFILE" >&2 echo -n 'Reporting spam via Spamassassin: ' >&2 $SA_REPORT < "$TMPFILE" >&2 # [ "${CRM114_STATUS:-}" = SPAM ] || { echo -n 'Training crm114 with spam: ' >&2 $MAILREAVER --spam < "$TMPFILE" >/dev/null echo 'done.' >&2 # } formail -I 'X-Trained-As: spam' < "$TMPFILE" ;; esac rm -f $TMPFILE trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 exit 0