HAM=0
SPAM=0
-MAILDIR=
+maildir=
+files=
for i in "$@"; do
case "$i" in
--ham) HAM=1;;
--spam) SPAM=1;;
*)
- if [ -n "$MAILDIR" ]; then
- echo "E: Maildir already specified: $i" >&2
- exit 1
+ if [ -f "$i" ] && [ -r "$i" ]; then
+ files="$files $i"
elif [ -d "$i"/cur ] && [ -d "$i"/new ] && [ -d "$i"/tmp ]; then
- MAILDIR="$i"
+ 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
1/0) ARG=--ham;;
esac
-LOCKFILE="$MAILDIR/.retrain.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 retrain process is already running over that Maildir." >&2
- exit 1
+if [ -n "$maildir" ]; then
+ LOCKFILE="$maildir/.retrain.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 retrain process is already running over that Maildir." >&2
+ exit 1
+ fi
+
+ files="$files $(find $MAILDIR/cur $MAILDIR/new -type f)"
fi
-find $MAILDIR/cur $MAILDIR/new -type f | while read msg; do
+for msg in $files; do
$NICE ${0%/*}/train $ARG "$msg" | $RESUBMIT || ret=$?
case "${ret:-0}" in
0|75) :;;
sleep $PAUSETIME
done
-rm -f "$LOCKFILE"
-trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15
+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
^(community|discuss)=opensource\.mit\.edu@mass\.madduck\.net$
^debian\.ch=fortytwo\.ch@mass\.madduck\.net$
^crm114-discuss=lists\.sourceforge\.net@mass\.madduck\.net$
+^libkdtree-devel=lists\.alioth\.debian\.org@mass\.madduck\.net$
^logcheck-devel=lists\.alioth\.debian\.org@mass\.madduck\.net$
^pkg-mdadm-devel=lists\.alioth\.debian\.org@mass\.madduck\.net$
^debconf-(team|press)=lists\.debconf\.org@mass\.madduck\.net$
^To:.*\<immoscout24\.ch@pobox\.madduck\.net\>
^To:.*\<homegate\.ch@pobox\.madduck\.net\>
^To:.*\<lufthansa\.com@pobox\.madduck\.net\>
+^To:.*\<miles-and-more\.com@pobox\.madduck\.net\>
^To:.*\<united\.com@pobox\.madduck\.net\>
^To:.*\<easyjet\.com@pobox\.madduck\.net\>
^To:.*\<thaiair\.com@pobox\.madduck\.net\>
^To:.*\<acm\.org@pobox\.madduck\.net\>
^To:.*\<immoscout24\.ch@pobox\.madduck\.net\>
^To:.*\<amazon\.com@pobox\.madduck\.net\>
+^To:.*\<padi\.com@pobox\.madduck\.net\>
^To:.*\<klarmobil.de@pobox\.madduck\.net\>
^From:.*\<logcheck@
^From:.*\<installer@ftp-master\.debian\.org\>
^From:.*\<swsupport@pimlicosoftware\.com\>
^From:.*\<root@.+[[:space:]]+\<Cron Daemon\>
^From:.*\<(leader|secretary)@debian\.org\>
+^X-Original-To: \<[^[:space:]]+@r2e.madduck.net$
^(webmaster|info|sales)@madduck\.(ch|net|eu)$
^(webmaster|info|sales)@martin-krafft\.(de|com|net|eu|ch)$
^(webmaster|info|sales)@pantsfullofunix\.net$
-^(webmaster|sales)@debian-?(book|system)\.info$
+^(contact|webmaster|sales)@debian-?(book|system)\.info$
^3dpostfix\.org@mass\.madduck\.net$
^adultfriendfinder\.com@pobox\.madduck\.net$
^alt\.cellular\.nokia@usenet\.madduck\.net$
^mass\+snns@madduck\.net$
^mass\+zope-users@madduck\.net$
^metrodate\.com@pobox\.madduck\.net$
-^moveon\.org@pobox\.madduck\.net$
-^opengroup\.org@pobox\.madduck\.net$
^sales@sudetia\.de$
^someone_else@pantsfullofunix\.net$
^superbookdeals\.com@pobox\.madduck\.net$
--- /dev/null
+../../../.var/crm114/nonspam.css
\ No newline at end of file
--- /dev/null
+../../../.var/crm114/spam.css
\ No newline at end of file
-# create table messages (msgid text unique not null, filename text
-# primary key not null unique, release_ts integer not null);
-
#TODO: create config/delay-(disabled|tonight|weekend)
:0
LOG="delay: delay delivery of $MSGID until $RELEASE_TIME$NL"
- DELAYED_QUEUE_DB=$PMVAR/delayed-queue.sqlite
- DO_QUERY="$SQLITE $DELAYED_QUEUE_DB"
-
- DATA="$MSGID"
- INCLUDERC=$PMDIR/sql-escape
-
- Q="insert into messages values
- ($DATA, '\\'\$DESTFILE\\'', $RELEASE_TS)"
- TRAP="$TRAP; $DO_QUERY '$Q'"
-
:0 fw
|$FORMAIL -I "X-Delayed: $RELEASE_TS ($RELEASE_TIME)"
+ INCLUDERC=$PMDIR/record-delayed-mail
+
:0
$DELAYED_QUEUE
}
:0 E
{ DEST=".$DEST" }
-TRAP="$TRAP; echo \"delivered: \$DESTFILE\" >> '$THISLOGFILE'"
-
-LOG="deliver: delivering message $MSGID to $DEST$NL"
:0
-$BASE/$DEST
+{
+ LOG="deliver: delivering message $MSGID to $DEST$NL"
+ TRAP="$TRAP; echo \"delivered: \$DESTFILE\" >> '$THISLOGFILE'"
+
+ :0
+ $BASE/$DEST
+}
subject: $SUBJECT$NL"
TRAP="DESTFILE=\"\${LASTFOLDER#$BASE/}\";
- echo >> '$THISLOGFILE';
- egrep -v '^XX(procmail:)?[[:space:]\"]' '$THISLOGFILE' >> $MASTERLOGFILE"
+ /usr/bin/lockfile -4 -r50 -l180 $PMVAR/lock;
+ trap \"echo >> '$THISLOGFILE';
+ /bin/cat '$THISLOGFILE' >> $MASTERLOGFILE;
+ /bin/rm -f $PMVAR/lock\" 0"
#VERBOSE=yes
# create table messages (sender text not null, recipient text not null,
-# subject text not null, msgid text unique not null, filename text primary key
+# subject text not null, msgid text not null, filename text primary key
# not null unique, timestamp integer, dest text not null);
#
# create trigger insert_messages_timestamp after insert on messages begin
INCLUDERC=$PMDIR/sql-escape
QUERY="insert into messages (sender, recipient, subject, msgid, filename, dest) values (
- $DATA, '\\'$THISLOGFILE_REL\\'', '\\'\$DESTFILE\\'')"
-TRAP="$TRAP; $DO_QUERY '$QUERY'"
+ $DATA, '\\'$THISLOGFILE_REL\\'', '\\'\$DESTFILE\\'');
+ select * from messages where filename = '\\'$THISLOGFILE_REL\\''"
+TRAP="$TRAP; case \"$($DO_QUERY '$QUERY')\" in '')
+ echo 'msgid-index: failed to insert reference into database';; esac"
QUERY
DATA
--- /dev/null
+# create table messages (msgid text unique not null, filename text
+# primary key not null unique, release_ts integer not null);
+
+DELAYED_QUEUE_DB=$PMVAR/delayed-queue.sqlite
+
+DO_QUERY="$SQLITE $DELAYED_QUEUE_DB"
+
+DATA="$MSGID"
+INCLUDERC=$PMDIR/sql-escape
+
+QUERY="insert into messages values ($DATA, '\\'\$DESTFILE\\'', $RELEASE_TS);
+ select * from messages where msgid = $DATA"
+TRAP="$TRAP; case \"$($DO_QUERY '$QUERY')\" in '')
+ echo 'delay: failed to insert reference into database';; esac"
+
+QUERY
+DATA
+DO_QUERY
+DELAYED_QUEUE_DB