You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by ms...@apache.org on 2004/08/24 19:22:02 UTC

svn commit: rev 36816 - in spamassassin/trunk: . lib/Mail/SpamAssassin t t/data

Author: mss
Date: Tue Aug 24 10:22:00 2004
New Revision: 36816

Added:
   spamassassin/trunk/t/data/testplugin.pm
   spamassassin/trunk/t/plugin_file.t   (contents, props changed)
Modified:
   spamassassin/trunk/MANIFEST
   spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm
   spamassassin/trunk/t/ifversion.t   (props changed)
   spamassassin/trunk/t/spamd_ssl.t   (props changed)
Log:
bug 3717: Loading PlugIns from outside @INC didn't work because do() looks in @INC, too, for relative paths.  Fixed by always using absolute paths.

also:
 * Added Justin's regression test for this feature.
 * Marked some tests which missed the bit as executable.
 * Sorted MANIFEST alphabetically (again).



Modified: spamassassin/trunk/MANIFEST
==============================================================================
--- spamassassin/trunk/MANIFEST	(original)
+++ spamassassin/trunk/MANIFEST	Tue Aug 24 10:22:00 2004
@@ -4,10 +4,10 @@
 INSTALL
 INSTALL.VMS
 LICENSE
-NOTICE
 MANIFEST
 MANIFEST.SKIP
 Makefile.PL
+NOTICE
 PACKAGING
 README
 STATUS
@@ -80,6 +80,9 @@
 masses/Makefile
 masses/README
 masses/README.perceptron
+masses/compare-models
+masses/config.set0
+masses/config.set1
 masses/corpora/README
 masses/corpora/fuzzy-hash-maildir
 masses/corpora/mass-find-nonspam
@@ -88,10 +91,12 @@
 masses/corpora/uniq-maildirs
 masses/cpucount
 masses/extract-message-from-mbox
+masses/extract-results
 masses/find-extremes
 masses/fp-fn-statistics
 masses/fp-fn-to-tcr
 masses/freqdiff
+masses/generate-corpus
 masses/graphs/gen-score-freqs-gnuplot-table
 masses/graphs/gnuplot-score-graph
 masses/hit-frequencies
@@ -102,6 +107,7 @@
 masses/mass-check.cf
 masses/mboxget
 masses/mk-baseline-results
+masses/model-statistics
 masses/overlap
 masses/parse-rules-for-masses
 masses/perceptron.c
@@ -123,6 +129,7 @@
 masses/tenpass/compute-current-tcr
 masses/tenpass/split-log-into-buckets
 masses/uniq-scores
+masses/validate-model
 ninjabutton.png
 ninjabutton.xcf
 procmailrc.example
@@ -189,10 +196,10 @@
 spamc/utils.h
 spamc/version.h.in
 spamc/version.h.pl
+spamd/PROTOCOL
 spamd/README
 spamd/README.SuSE
 spamd/README.vpopmail
-spamd/PROTOCOL
 spamd/netbsd-rc-script.sh
 spamd/redhat-rc-script.sh
 spamd/slackware-rc-script.sh
@@ -268,6 +275,7 @@
 t/data/spam/bsmtp
 t/data/spam/dnsbl.eml
 t/data/spam/gtube.eml
+t/data/testplugin.pm
 t/data/whitelists/action.eff.org
 t/data/whitelists/amazon_co_uk_ship
 t/data/whitelists/amazon_com_ship
@@ -297,11 +305,13 @@
 t/gtube.t
 t/hashcash.t
 t/html_obfu.t
+t/ifversion.t
 t/ip_addrs.t
 t/lang_pl_tests.t
 t/mimeparse.t
 t/nonspam.t
 t/plugin.t
+t/plugin_file.t
 t/prefs_include.t
 t/razor2.t
 t/rcvd_parser.t
@@ -359,11 +369,3 @@
 tools/split_corpora
 tools/test_extract
 tools/triplets.pl
-masses/validate-model
-masses/generate-corpus
-masses/extract-results
-masses/compare-models
-masses/config.set0
-masses/config.set1
-masses/model-statistics
-t/ifversion.t

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm	(original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm	Tue Aug 24 10:22:00 2004
@@ -23,6 +23,7 @@
 package Mail::SpamAssassin::PluginHandler;
 use Mail::SpamAssassin;
 use Mail::SpamAssassin::Plugin;
+use Mail::SpamAssassin::Util;
 
 use strict;
 use bytes;
@@ -58,6 +59,12 @@
 
   my $ret;
   if ($path) {
+    # At least Perl 5.8.0 seems to confuse $cwd internally at some point -- we
+    # need to use an absolute path here else we get a "File not found" error.
+    # <http://bugzilla.spamassassin.org/show_bug.cgi?id=3717>
+    $path = Mail::SpamAssassin::Util::untaint_file_path(
+              File::Spec->rel2abs($path)
+	    );
     dbg ("plugin: loading $package from $path");
     $ret = do $path;
   }

Added: spamassassin/trunk/t/data/testplugin.pm
==============================================================================
--- (empty file)
+++ spamassassin/trunk/t/data/testplugin.pm	Tue Aug 24 10:22:00 2004
@@ -0,0 +1,43 @@
+=head1 
+
+To try this out, write these lines to /etc/mail/spamassassin/plugintest.cf:
+
+  loadplugin     myTestPlugin
+  header         MY_TEST_PLUGIN eval:check_test_plugin()
+
+=cut
+
+package myTestPlugin;
+
+use Mail::SpamAssassin::Plugin;
+use strict;
+use bytes;
+
+our @ISA = qw(Mail::SpamAssassin::Plugin);
+
+# constructor: register the eval rule
+sub new {
+  my $class = shift;
+  my $mailsaobject = shift;
+
+  # some boilerplate...
+  $class = ref($class) || $class;
+  my $self = $class->SUPER::new($mailsaobject);
+  bless ($self, $class);
+
+  # the important bit!
+  $self->register_eval_rule ("check_test_plugin");
+
+  print "registered myTestPlugin: $self\n";
+  return $self;
+}
+
+# and the eval rule itself
+sub check_test_plugin {
+  my ($self, $permsgstatus) = @_;
+  print "myTestPlugin eval test called: $self\n";
+  # ... hard work goes here...
+  return 1;
+}
+
+1;

Added: spamassassin/trunk/t/plugin_file.t
==============================================================================
--- (empty file)
+++ spamassassin/trunk/t/plugin_file.t	Tue Aug 24 10:22:00 2004
@@ -0,0 +1,36 @@
+#!/usr/bin/perl
+
+use lib '.'; use lib 't';
+use SATest; sa_t_init("plugin_file");
+use Test; BEGIN { plan tests => 6 };
+
+# ---------------------------------------------------------------------------
+
+%patterns = (
+
+q{ GTUBE }, 'gtube',
+q{ MY_TEST_PLUGIN }, 'plugin_called',
+q{ registered myTestPlugin }, 'registered',
+q{ myTestPlugin eval test called }, 'test_called',
+
+);
+
+%anti_patterns = (
+
+q{ SHOULD_NOT_BE_CALLED }, 'should_not_be_called'
+
+);
+
+tstlocalrules ("
+	loadplugin myTestPlugin ../../data/testplugin.pm
+	ifplugin FooPlugin
+	  header SHOULD_NOT_BE_CALLED	eval:doesnt_exist()
+	endif
+	if plugin(myTestPlugin)
+	  header MY_TEST_PLUGIN		eval:check_test_plugin()
+	endif
+");
+
+ok (sarun ("-L -t < data/spam/gtube.eml", \&patterns_run_cb));
+ok_all_patterns();
+