Good, them shipment a patch to be able here to use to bogofilter with qmail-scanner, which is a perfect combination.
The patch is for version 1,24 of qmail-scanner and 0,93 of bogofilter.

I hope that it serves to them, and they add it to the official version of qmail-scanner

Pablo Castorino

PS:  the data base of bogofilter must have permissions of writing for the group that uses to qmail-scanner


Desarrollador de CastorinoP Sistemas
Mandrakelinux Community 10.1


Index: configure
===================================================================
--- configure	(revisión: 1)
+++ configure	(copia de trabajo)
@@ -38,7 +38,7 @@
 VERSION=`grep '^# Version: ' qmail-scanner-queue.template`
 VERSION=`echo $VERSION|awk '{print $NF}'`
 
-SUPPORTED_SCANNERS="clamscan,clamdscan,sweep,sophie,vscan,trophie,uvscan,csav,antivir,kavscanner,AvpLinux,kavdaemon,AvpDaemonClient,fsav,fprot,inocucmd,vexira,bitdefender,nod32,verbose_spamassassin,fast_spamassassin"
+SUPPORTED_SCANNERS="clamscan,clamdscan,sweep,sophie,vscan,trophie,uvscan,csav,antivir,kavscanner,AvpLinux,kavdaemon,AvpDaemonClient,fsav,fprot,inocucmd,vexira,bitdefender,nod32,verbose_spamassassin,fast_spamassassin,bogofilter"
 
 SILENT_VIRUSES='klez,bugbear,hybris,yaha,braid,nimda,tanatos,sobig,winevar,palyh,fizzer,gibe,cailont,lovelorn,swen,dumaru,sober,hawawi,holar-i,mimail,poffer,bagle,worm.galil,mydoom,worm.sco,tanx,novarg,[EMAIL PROTECTED]'
 
@@ -129,7 +129,8 @@
 	--skip-setuid-test) SKIP_SETUID_TEST=1 ; if [ "$2" != "" -a "`echo $2|grep '\-'`" = "" ] ; then  shift ; if [ "`echo $1|egrep -i '^1|^yes'`" != "" ]; then SKIP_SETUID_TEST="1" ; fi ;  if  [ "`echo $1|egrep -i '^[1-9]+$'`" != "" ]; then SKIP_SETUID_TEST="$1" ; fi ; if [ "`echo $1|egrep -i '^0|^no'`" != "" ]; then SKIP_SETUID_TEST="0" ; fi ; fi ;;
 	--qmail-queue-binary) if [ "$2" != "" ] ; then  shift ; fi ; QMAILQUEUE_BIN="$1" ;;
         --mime-unpacker) if [ "$2" != "" ] ; then  shift ; fi ; MIME_UNPACKER="$1" ;;
-	--install) INSTALLIT="1" ; if [ "$2" != "" -a "`echo $2|grep '\-'`" = "" ] ; then  shift ; fi ;;
+  --install) INSTALLIT="1" ; if [ "$2" != "" -a "`echo $2|grep '\-'`" = "" ] ; then  shift ; fi ;;
+	--bogofilter-dir) if [ "$2" != "" ] ; then  shift ; fi ; BOGOFILTER_DIR="$1" ;;
         *) cat <<EOF >&2
 
 valid options:
@@ -896,6 +897,16 @@
 	   fi
 	fi
     fi
+		if [ "`echo $FIND_SCANNERS|grep bogofilter`" != "" -a "$BOGOFILTER_BINARY" = "" ]; then
+			if test -x $dir/bogofilter
+    		then
+				BOGOFILTER_BINARY="$dir/bogofilter"
+				BOGOFILTER_OPTIONS="-p -u -e"
+				if [ "$BOGOFILTER_DIR" != "" ]; then
+					BOGOFILTER_OPTIONS="$BOGOFILTER_OPTIONS -d $BOGOFILTER_DIR"
+       	fi
+      fi
+    fi
     if [ "`echo $FIND_SCANNERS|grep spamassassin`" != "" -a "$SPAMASSASSIN_BINARY" = "" ]; then
     if test -x $dir/spamassassin
     then
@@ -1380,6 +1391,10 @@
 	SCANNER_ARRAY="$SCANNER_ARRAY,\"verbose_spamassassin\""
     fi
 fi
+if [ "$BOGOFILTER_BINARY" != "" ]; then
+    echo "bogofilter=$BOGOFILTER_BINARY";
+    SCANNER_ARRAY="$SCANNER_ARRAY,\"bogofilter\""
+fi
 
 USERNAME=${USERNAME:-$LOGNAME}
 
@@ -1623,6 +1638,9 @@
 s?SPAMC_BINARY?$SPAMC_BINARY?g;
 s?SPAMC_OPTIONS?$SPAMC_OPTIONS?g;
 s?SPAMC_SUBJECT?$SPAMC_SUBJECT?g;
+s?BOGOFILTER_BINARY?$BOGOFILTER_BINARY?g;
+s?BOGOFILTER_OPTIONS?$BOGOFILTER_OPTIONS?g;
+s?BOGOFILTER_SUBJECT?$BOGOFILTER_SUBJECT?g;
 s?USERNAME?$USERNAME?g;
 s?SKIP_TEXT_MSGS?$SKIP_TEXT_MSGS?g;
 s?FQDN?$FQDN?g;
Index: qmail-scanner-queue.template
===================================================================
--- qmail-scanner-queue.template	(revisión: 1)
+++ qmail-scanner-queue.template	(copia de trabajo)
@@ -220,6 +220,9 @@
 my $spamc_options='SPAMC_OPTIONS';
 my $spamc_subject='SPAMC_SUBJECT';
 my $spamassassin_binary='SPAMASSASSIN_BINARY';
+my $bogofilter_binary="BOGOFILTER_BINARY";
+my $bogofilter_options="BOGOFILTER_OPTIONS";
+my $bogofilter_subject="BOGOFILTER_SUBJECT";
 my ($sa_comment,$sa_level);
 my $sa_symbol='+';
 my ($tag_score)="";
@@ -1224,7 +1227,7 @@
       #Just run virus scanners over mail that isn't plain text
       if ($plain_text_msg) {
 	#If it's plain text - just run anti-spam checks
-	&{$scanner} if ($scanner =~ /spam/i);
+	&{$scanner} if ($scanner =~ /spam/i || $scanner =~ /bogo/i);
       }else {
 	&{$scanner};
       }
@@ -1489,7 +1492,7 @@
 sub scan_queue {
   my ($scanner,$SCANINFO,$files,$sweep_eng,$sweep_product,$sophie_eng,$dir);
   my $start_scan_time =time;
-  my ($inocucmd_eng,$inocucmd_product,$spamassassin_eng);
+  my ($inocucmd_eng,$inocucmd_product,$spamassassin_eng,$bogofilter_version);
   
   chdir($scandir);
   &debug("s_q: re-create the quarantine version file");
@@ -1713,6 +1716,17 @@
       }
       close(SPAS);
       $SCANINFO .= "spamassassin: $spamassassin_eng. ";
+		} elsif ($scanner eq "bogofilter") {
+      #X-Spam-Checker-Version: SpamAssassin 2.01
+      open(SPAS,"$bogofilter_binary  -V 2>&1 |")||die "failed to call $bogofilter_binary -V - $!";
+      while (<SPAS>) {
+	chomp;
+	if (/^bogofilter version (.*)$/i) {
+	  $bogofilter_version=$1;
+	}
+      }
+      close(SPAS);
+      $SCANINFO .= "bogofilter: $bogofilter_version. ";
     } else {
       #Catch-all for other ones
       $SCANINFO .= "$scanner: ???. ";
Index: sub-bogofilter.pl
===================================================================
--- sub-bogofilter.pl	(revisión: 0)
+++ sub-bogofilter.pl	(revisión: 7)
@@ -0,0 +1,51 @@
+sub bogofilter {
+  #Only run BF if mail is from a "remote" SMTP client, or QS_BOGOFILTER
+  #is defined via tcpserver...
+  if (defined($ENV{'RELAYCLIENT'}) && !defined($ENV{'QS_BOGOFILTER'})) {
+		&debug("BF: don't scan as RELAYCLIENT implies this was sent by a local user");
+		return;
+  }
+  #bogofilter
+  my ($bogofilter_found);
+  my ($start_bogofilter_time)=[gettimeofday];
+  my ($DD,$bogofilter_status,$stop_bogofilter_time,$bogofilter_time);
+  my ($bf_status)=0;
+  my ($bf_score)=0; my ($bf_max)=0;
+  my ($bf_version);
+  &debug("BF: run $bogofilter_binary $bogofilter_options < $scandir/$wmaildir/new/$file_id");
+  open(BF,"$bogofilter_binary $bogofilter_options < $scandir/$wmaildir/new/$file_id|")||&tempfail("cannot run $bogofilter_binary  < $scandir/$wmaildir/new/$file_id - $!");
+  open(SOUT,">$scandir/$wmaildir/new/$file_id.bogof")||&tempfail("cannot open for write $scandir/$wmaildir/new/$file_id.bogof - $!");
+  while (<BF>) {
+    if (/^X-Bogosity: (Spam|Unsure), tests=bogofilter, spamicity=(.*), version=(.*)/) {
+      $bf_status=1 if ($1 eq "Spam");
+      $bf_score=$2;$bf_version=$3;
+    }
+    print SOUT;
+  }
+  close(SA);
+  $bogofilter_status=($? >> 8);
+  $bf_status = $bogofilter_status if ($bogofilter_options !~ /\-e/);
+  close(SOUT);
+
+  $bf_score="0" if (!$bf_score);
+
+  if ($bogofilter_options =~ /\-e/ && -s "$scandir/$wmaildir/new/$file_id.bogof" && $bogofilter_status == 0) {
+    &debug("BF: overwriting $scandir/$wmaildir/new/$file_id with $scandir/$wmaildir/new/$file_id.bogof");
+    rename ("$scandir/$wmaildir/new/$file_id.bogof","$scandir/$wmaildir/new/$file_id");
+  } else {
+               unlink("$scandir/$wmaildir/new/$file_id.bogof");
+  }
+   &debug("BF: bf_status=$bf_status, options=$bogofilter_options");
+  if ($bf_status == 0) {
+    $tag_score .= "BF:0($bf_score):";
+    $sa_comment = "No, Score:$bf_score" if ($bogofilter_options =~ /\-v/);
+    &debug("BF: no SPAM ($sa_comment)");
+  } else {
+    $tag_score .= "BF:1($bf_score):";
+    $sa_comment = "Yes, Score:$bf_score" if ($bogofilter_options =~ /\-v/);
+    &debug("BF: yup, this smells like SPAM");
+  }
+  $stop_bogofilter_time=[gettimeofday];
+  $bogofilter_time = tv_interval ($start_bogofilter_time, $stop_bogofilter_time);
+  &debug("BF: finished scan of dir \"$scandir/$file_id\" in $bogofilter_time secs");
+}

Reply via email to