#!/bin/sh set -eu NICE='/usr/bin/nice -20' NICE='' RESUBMIT="$NICE $HOME/.etc/mailfilter/bin/resubmit" PAUSETIME=10 HAM=0 SPAM=0 maildir= files= for i in "$@"; do case "$i" in --ham) HAM=1;; --spam) SPAM=1;; *) if [ -f "$i" ] && [ -r "$i" ]; then files="$files $i" elif [ -d "$i"/cur ] && [ -d "$i"/new ] && [ -d "$i"/tmp ]; then if [ -n "$maildir" ]; then echo "E: Maildir already specified: $i" >&2 exit 1 fi maildir="$i" else echo "E: unknown argument: $i" >&2 exit 255 fi ;; esac done ARG= 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 ;; 0/1) ARG=--spam;; 1/0) ARG=--ham;; esac if [ -n "$maildir" ]; then ME="${0##*/}" LOCKFILE="$maildir/.$ME.lock" trap "rm -f $LOCKFILE" 1 2 3 4 5 6 7 8 10 11 12 13 14 15 if ! lockfile -0 -r0 -l 3600 "$LOCKFILE" 2>/dev/null; then echo "E: another $ME process is already running over that Maildir." >&2 trap - 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 exit 1 fi files="$files $(find $MAILDIR/cur $MAILDIR/new -type f)" fi for msg in $files; do $NICE ${0%/*}/train $ARG "$msg" | $RESUBMIT || ret=$? case "${ret:-0}" in 0|75) :;; *) echo "E: resubmission returned with exit code $ret" >&2 continue ;; esac rm -f "$msg" sleep $PAUSETIME done if [ -n "${LOCKFILE:-}" ]; then rm -f "$LOCKFILE" trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 fi exit 0