-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Eugene Morozov writes:
>I've created a beta version of crm114 plugin for
>SpamAssassin. I didn't implemented config options
>(is it possible without hacking SA Conf.pm?), so crm114
>command is hardcoded in the module code.

Looks cool.

The config can be parsed by registering a callback for "parse_config";
any unrecognised config lines are passed through that so that
plugins can use them.

- --j.

> Here's my
>sample configuration:
>
>loadplugin crm114 /home/jmv/projects/spamassassin/crm114.pm
>ifplugin crm114
>  # This is probably lame, but I've just started using
>  # crm114 and doesn't fully understand yet how it
>  # works and what its pR really mean
>  body CRM114_SPAM_00       eval:check_crm('-10.00', '-0.01')
>  body CRM114_SPAM_10       eval:check_crm('-50.00', '-10.00')
>  body CRM114_SPAM_50       eval:check_crm('-100.00', '-50.00')
>  body CRM114_SPAM_99       eval:check_crm('undef', '-100.00')
>
>  body CRM114_HAM_00        eval:check_crm('0.00', '10.00')
>  body CRM114_HAM_10        eval:check_crm('10.00', '50.00')
>  body CRM114_HAM_50        eval:check_crm('50.00', '100.00')
>  body CRM114_HAM_99        eval:check_crm('100.00', 'undef')
>
>  score CRM114_SPAM_00      1
>  score CRM114_SPAM_10      1.5  
>  score CRM114_SPAM_50      3
>  score CRM114_SPAM_99      4
>
>  score CRM114_HAM_00       -1
>  score CRM114_HAM_10       -1.5
>  score CRM114_HAM_50       -3
>  score CRM114_HAM_99       -4
>
>  tflags CRM114_SPAM_00     learn
>  tflags CRM114_SPAM_10     learn
>  tflags CRM114_SPAM_50     learn
>  tflags CRM114_SPAM_99     learn
>  tflags CRM_114_HAM_00     nice learn
>  tflags CRM_114_HAM_10     nice learn
>  tflags CRM_114_HAM_50     nice learn
>  tflags CRM_114_HAM_99     nice learn
>
>  describe CRM114_SPAM_00      CRM114 pR from -0.01 to -10.00
>  describe CRM114_SPAM_10      CRM114 pR from -10.00 to -50.00
>  describe CRM114_SPAM_50      CRM114 pR from -50.00 to -100.00
>  describe CRM114_SPAM_99      CRM114 pR from -100.00 to -999.99
>
>  describe CRM114_HAM_00       CRM114 pR from 0.00 to 10.00
>  describe CRM114_HAM_10       CRM114 pR from 10.00 to 50.00
>  describe CRM114_HAM_50       CRM114 pR from 50.00 to 100.00
>  describe CRM114_HAM_99       CRM114 pR from 100.00 to 999.99
>endif
>
>Module code is in the attachment. Comments are welcome.
>Eugene
>
>-- 
>Email: jmv /at/ online.ru
>
>--=-=-=
>Content-Type: text/x-perl
>Content-Disposition: inline; filename=crm114.pm
>
>package crm114;
>
>use strict;
>use IPC::Open3;
>use Mail::SpamAssassin::Plugin;
>use vars qw(@ISA);
>@ISA = qw(Mail::SpamAssassin::Plugin);
>
>sub new {
>  my $class = shift;
>  my $mailsaobject = shift;
>
>  # the usual perlobj boilerplate to create a subclass object
>  $class = ref($class) || $class;
>  my $self = $class->SUPER::new($mailsaobject);
>  bless ($self, $class);
>
>  $self->{crm_command} = "/usr/bin/crm114 -u /home/jmv/crm114 mailfilter.crm";
>
>  # then register an eval rule
>  $self->register_eval_rule ("check_crm");
>
>  # and return the new plugin object
>  return $self;
>}
>
>sub check_crm {
>  my ($self, $status, $fulltext, $min, $max) = @_;
>
>  my $msg = $status->get_message()->get_pristine();
>
>  if (!exists($self->{crm114_score})) {
>    my $pid;
>    eval {
>      open3(\*CRM_OUT, \*CRM_IN, \*CRM_ERR, $self->{crm_command});
>    };
>    if ($@) { printf "\@: %s\n", $@; }
>
>    print CRM_OUT $msg;
>    close(CRM_OUT);
>
>    while(<CRM_IN>) {
>      if (/^open3: (.*)/) {
>        die $1;
>      }
>
>      if (/^X-CRM114-Status: \w+\s+\( pR: ([-\d.]+) \)/) {
>        $self->{crm114_score} = $1;
>      }
>    }
>
>    close(CRM_OUT);
>    close(CRM_IN);
>
>    if (!exists($self->{crm114_score})) {
>      die "CRM114 didn't return spamicity value.";
>    }
>
>    dbg(sprintf ("CRM114 score: %3.4f", $self->{crm114_score}));
>  }
>
>  if (($min eq "undef" || $self->{crm114_score} > $min)
>      && ($max eq "undef" || $self->{crm114_score} <= $max))
>  {
>    return 1
>  }
>
>  return 0;
>}
>
>sub dbg { Mail::SpamAssassin::dbg (@_); }
>
>1;
>
>--=-=-=--
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
Comment: Exmh CVS

iD8DBQFAPmTxQTcbUG5Y7woRAqYFAKCZnQ+KKNpInNxVILHh2mu1DT0fUACeNYK+
qN59A4caOY6ew6AVt65l7+Y=
=nJnj
-----END PGP SIGNATURE-----

Reply via email to