You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2008/08/14 18:31:01 UTC

svn commit: r685954 - in /spamassassin/trunk: lib/Mail/SpamAssassin/Plugin/DKIM.pm rules/v312.pre

Author: jm
Date: Thu Aug 14 09:31:00 2008
New Revision: 685954

URL: http://svn.apache.org/viewvc?rev=685954&view=rev
Log:
bug 5889: enable the DKIM rules by default in 3.3.0, by emulating SPF's behaviour when the Mail::DKIM module is not installed (it logs an error at debug-level only)

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm
    spamassassin/trunk/rules/v312.pre

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm?rev=685954&r1=685953&r2=685954&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/DKIM.pm Thu Aug 14 09:31:00 2008
@@ -74,9 +74,6 @@
 use bytes;
 use re 'taint';
 
-# Have to do this so that RPM doesn't find these as required perl modules.
-BEGIN { require Mail::DKIM; require Mail::DKIM::Verifier; }
-
 use vars qw(@ISA);
 @ISA = qw(Mail::SpamAssassin::Plugin);
 
@@ -288,9 +285,37 @@
 
 # ---------------------------------------------------------------------------
 
+sub _dkim_load_modules {
+  my ($self) = @_;
+
+  return $self->{tried_loading} if defined $self->{tried_loading};
+  $self->{tried_loading} = 0;
+
+  my $timemethod = $self->{main}->time_method("dkim_load_modules");
+  my $eval_stat;
+  eval {
+    # Have to do this so that RPM doesn't find these as required perl modules.
+    { require Mail::DKIM; require Mail::DKIM::Verifier; }
+  } or do {
+    $eval_stat = $@ ne '' ? $@ : "errno=$!";  chomp $eval_stat;
+  };
+
+  if (!defined($eval_stat)) {
+    dbg("dkim: using Mail::DKIM for DKIM checks");
+    $self->{tried_loading} = 1;
+  } else {
+    dbg("dkim: cannot load Mail::DKIM module, DKIM checks disabled: $eval_stat");
+  }
+}
+
+# ---------------------------------------------------------------------------
+
 sub _check_dkim_signature {
   my ($self, $scan) = @_;
 
+  return unless $self->_dkim_load_modules();
+  my $timemethod = $self->{main}->time_method("check_dkim_signature");
+
   $scan->{dkim_checked_signature} = 1;
   $scan->{dkim_signed} = 0;
   $scan->{dkim_valid} = 0;
@@ -299,8 +324,6 @@
   $scan->{dkim_author_address} =
     $scan->get('from:addr')  if !defined $scan->{dkim_author_address};
 
-  my $timemethod = $self->{main}->time_method("check_dkim_signature");
-
 # my $verifier = Mail::DKIM::Verifier->new();         # per new docs
   my $verifier = Mail::DKIM::Verifier->new_object();  # old style???
   if (!$verifier) {
@@ -434,6 +457,8 @@
   $scan->{dkim_author_address} =
     $scan->get('from:addr')  if !defined $scan->{dkim_author_address};
 
+  return unless $self->_dkim_load_modules();
+
   # must check the message first to obtain signer, domain, and verif. status
   $self->_check_dkim_signature($scan) unless $scan->{dkim_checked_signature};
   my $verifier = $scan->{dkim_object};
@@ -501,6 +526,7 @@
   my ($self, $scan) = @_;
 
   $scan->{whitelist_checked} = 1;
+  return unless $self->_dkim_load_modules();
   return unless $scan->is_dns_available();
 
   my $author = $scan->{dkim_author_address};

Modified: spamassassin/trunk/rules/v312.pre
URL: http://svn.apache.org/viewvc/spamassassin/trunk/rules/v312.pre?rev=685954&r1=685953&r2=685954&view=diff
==============================================================================
--- spamassassin/trunk/rules/v312.pre (original)
+++ spamassassin/trunk/rules/v312.pre Thu Aug 14 09:31:00 2008
@@ -25,5 +25,5 @@
 # Note that if C<Mail::DKIM> version 0.20 or later is installed, this
 # renders the DomainKeys plugin redundant.
 #
-#loadplugin Mail::SpamAssassin::Plugin::DKIM
+loadplugin Mail::SpamAssassin::Plugin::DKIM