Hello again, Here is another trivial patch to a dspam tool, this time to fix the broken command line parsing in dspam_train. It suffered from 2 problems:
1. The username, documented as optional in the man page, was required and you couldn't run just "dspam_train spam_dir ham_dir" 2. The check that "spam_dir" and "ham_dir" were directories in the beginning of the script wasn't done at all because "!=" (which can't be used to compare string in Perl) was used instead of "ne". This patch fixes these 2 problems and also slightly updates the man page (the description of "-i index" option still would need to be added ideally...). As before, please let me know if you have any questions about this patch, thanks, VZ diff -r b2246e7d9208 man/dspam_train.1 --- a/man/dspam_train.1 Tue Apr 15 04:16:53 2008 +0200 +++ b/man/dspam_train.1 Tue Apr 15 04:16:56 2008 +0200 @@ -20,11 +20,10 @@ dspam_train - train a corpus of mail .BI \ username \fR ] [\c -.BI \ spam_dir \fR +.BI \ --client \fR ] -[\c -.BI \ nonspam_dir \fR -] +.BI spam_dir \fR +.BI nonspam_dir \fR .ad .SH DESCRIPTION @@ -46,18 +45,23 @@ of a particular corpus against dspam in .n3 3 .TP -.BI [username]\c -Specifies the user to train. +.BI --client\c +If specified, dspam is used in client-server mode. .n3 3 .TP -.BI [spam_dir]\c +.BI username\c +Specifies the user to train, if omitted the current user name is used. + +.n3 3 +.TP +.BI spam_dir\c Specifies the pathname to the directory containing the corpus of spam. Each message should be separate in its own file. .n3 3 .TP -.BI [nonspam_dir]\c +.BI nonspam_dir\c Specifies the pathname to the directory containing the corpus of nonspam. Each message should be separate in its own file. diff -r b2246e7d9208 src/tools/dspam_train.in --- a/src/tools/dspam_train.in Tue Apr 15 04:16:53 2008 +0200 +++ b/src/tools/dspam_train.in Tue Apr 15 04:16:56 2008 +0200 @@ -18,7 +18,9 @@ if ($SPAM_CORPUS eq "--client" || $SPAM_ $NONSPAM_CORPUS = shift; if ($NONSPAM_CORPUS eq "") { - usage(); + # we were wrong about the first argument, it was the spam corpus and not + # the user name in fact + ($USER, $NONSPAM_CORPUS, $SPAM_CORPUS) = ((getpwuid($<))[0], $SPAM_CORPUS, $USER) } sub usage { @@ -26,7 +28,7 @@ sub usage { exit(-1); } -if ($SPAM_CORPUS != "-i" && (! -d $SPAM_CORPUS || ! -d $NONSPAM_CORPUS)) { +if ($SPAM_CORPUS ne "-i" && (! -d $SPAM_CORPUS || ! -d $NONSPAM_CORPUS)) { print STDERR "ERROR: " . ((-d $SPAM_CORPUS) ? "nonspam" : "spam" ) . "corpus must be path to maildir directory\n"; usage(); }