You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by do...@apache.org on 2005/05/25 06:07:14 UTC

svn commit: r178359 - in /spamassassin/trunk/lib/Mail/SpamAssassin: Conf.pm Conf/Parser.pm Plugin/AWL.pm Plugin/ReplaceTags.pm Plugin/SpamCop.pm Plugin/URIDNSBL.pm

Author: dos
Date: Tue May 24 21:07:12 2005
New Revision: 178359

URL: http://svn.apache.org/viewcvs?rev=178359&view=rev
Log:
bug 4347: validate the majority of config options

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ReplaceTags.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SpamCop.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm?rev=178359&r1=178358&r2=178359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Conf.pm Tue May 24 21:07:12 2005
@@ -232,7 +232,7 @@
           info($msg);
         }
         $self->{errors}++;
-        return;
+        return $INVALID_VALUE;
       }
 
       # If we're only passed 1 score, copy it to the other scoresets
@@ -259,7 +259,7 @@
           info($msg);
         }
         $self->{errors}++;
-        return;
+        return $MISSING_REQUIRED_VALUE;
       }
     }
   });
@@ -364,6 +364,12 @@
     setting => 'whitelist_from_rcvd',
     code => sub {
       my ($self, $key, $value, $line) = @_;
+      unless (defined $value && $value !~ /^$/) {
+	return $MISSING_REQUIRED_VALUE;
+      }
+      unless ($value =~ /^\S+\@\S+\s+\S+$/) {
+	return $INVALID_VALUE;
+      }
       $self->{parser}->add_to_addrlist_rcvd ('whitelist_from_rcvd',
                                         split(/\s+/, $value));
     }
@@ -373,6 +379,12 @@
     setting => 'def_whitelist_from_rcvd',
     code => sub {
       my ($self, $key, $value, $line) = @_;
+      unless (defined $value && $value !~ /^$/) {
+	return $MISSING_REQUIRED_VALUE;
+      }
+      unless ($value =~ /^\S+\@\S+\s+\S+$/) {
+	return $INVALID_VALUE;
+      }
       $self->{parser}->add_to_addrlist_rcvd ('def_whitelist_from_rcvd',
                                         split(/\s+/, $value));
     }
@@ -431,6 +443,12 @@
     setting => 'unwhitelist_from_rcvd',
     code => sub {
       my ($self, $key, $value, $line) = @_;
+      unless (defined $value && $value !~ /^$/) {
+	return $MISSING_REQUIRED_VALUE;
+      }
+      unless ($value =~ /^(?:\S+\@\S+(?:\s+\S+\@\S+)*)$/) {
+	return $INVALID_VALUE;
+      }
       $self->{parser}->remove_from_addrlist_rcvd('whitelist_from_rcvd',
                                         split (/\s+/, $value));
       $self->{parser}->remove_from_addrlist_rcvd('def_whitelist_from_rcvd',
@@ -573,8 +591,11 @@
       my($hdr, $string) = split(/\s+/, $value, 2);
       $hdr = ucfirst(lc($hdr));
 
+      if ($hdr =~ /^$/) {
+	return $MISSING_REQUIRED_VALUE;
+      }
       # We only deal with From, Subject, and To ...
-      if ($hdr =~ /^(?:From|Subject|To)$/) {
+      elsif ($hdr =~ /^(?:From|Subject|To)$/) {
 	unless (defined $string && $string =~ /\S/) {
 	  delete $self->{rewrite_header}->{$hdr};
 	  return;
@@ -586,9 +607,11 @@
         $self->{rewrite_header}->{$hdr} = $string;
         return;
       }
-
-      # if we get here, note the issue, then we'll fail through for an error.
-      info("config: rewrite_header: ignoring $hdr, not From, Subject, or To");
+      else {
+	# if we get here, note the issue, then we'll fail through for an error.
+	info("config: rewrite_header: ignoring $hdr, not From, Subject, or To");
+	return $INVALID_VALUE;
+      }
     }
   });
 
@@ -882,6 +905,9 @@
     setting => 'trusted_networks',
     code => sub {
       my ($self, $key, $value, $line) = @_;
+      unless (defined $value && $value !~ /^$/) {
+	return $MISSING_REQUIRED_VALUE;
+      }
       foreach my $net (split (/\s+/, $value)) {
         $self->{trusted_networks}->add_cidr ($net);
       }
@@ -926,6 +952,9 @@
     setting => 'internal_networks',
     code => sub {
       my ($self, $key, $value, $line) = @_;
+      unless (defined $value && $value !~ /^$/) {
+	return $MISSING_REQUIRED_VALUE;
+      }
       foreach my $net (split (/\s+/, $value)) {
         $self->{internal_networks}->add_cidr ($net);
       }
@@ -2172,7 +2201,7 @@
     default => '__userstate__/bayes',
     code => sub {
       my ($self, $key, $value, $line) = @_;
-      unless (defined $value) {
+      unless (defined $value && $value !~ /^$/) {
 	return $MISSING_REQUIRED_VALUE;
       }
       if (-d $value) {

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm?rev=178359&r1=178358&r2=178359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Conf/Parser.pm Tue May 24 21:07:12 2005
@@ -573,7 +573,10 @@
 sub set_numeric_value {
   my ($conf, $key, $value, $line) = @_;
 
-  unless (defined $value && $value =~ /^-?\d+(?:\.\d+)?$/) {
+  unless (defined $value && $value !~ /^$/) {
+    return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+  }
+  unless ($value =~ /^-?\d+(?:\.\d+)?$/) {
     return $Mail::SpamAssassin::Conf::INVALID_VALUE;
   }
 
@@ -583,7 +586,10 @@
 sub set_bool_value {
   my ($conf, $key, $value, $line) = @_;
 
-  unless (defined $value && ($value == 1 || $value == 0) ) {
+  unless (defined $value && $value !~ /^$/) {
+    return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+  }
+  unless ($value == 1 || $value == 0) {
     return $Mail::SpamAssassin::Conf::INVALID_VALUE;
   }
 
@@ -593,7 +599,7 @@
 sub set_string_value {
   my ($conf, $key, $value, $line) = @_;
 
-  unless (defined $value) {
+  unless (defined $value && $value !~ /^$/) {
     return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
   }
 
@@ -613,11 +619,19 @@
 
 sub set_addrlist_value {
   my ($conf, $key, $value, $line) = @_;
+
+  unless (defined $value && $value =~ /^(?:\S+\@\S+(?:\s+\S+\@\S+)*)$/) {
+    return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+  }
   $conf->{parser}->add_to_addrlist ($key, split (' ', $value));
 }
 
 sub remove_addrlist_value {
   my ($conf, $key, $value, $line) = @_;
+
+  unless (defined $value && $value =~ /^(?:\S+\@\S+(?:\s+\S+\@\S+)*)$/) {
+    return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+  }
   $conf->{parser}->remove_from_addrlist ($key, split (' ', $value));
 }
 

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm?rev=178359&r1=178358&r2=178359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm Tue May 24 21:07:12 2005
@@ -197,7 +197,7 @@
 		default => '__userstate__/auto-whitelist',
 		code => sub {
 		  my ($self, $key, $value, $line) = @_;
-		  unless (defined $value) {
+		  unless (defined $value && $value !~ /^$/) {
 		    return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
 		  }
 		  if (-d $value) {

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ReplaceTags.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ReplaceTags.pm?rev=178359&r1=178358&r2=178359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ReplaceTags.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/ReplaceTags.pm Tue May 24 21:07:12 2005
@@ -226,6 +226,12 @@
     setting => 'replace_rules',
     code => sub {
       my ($self, $key, $value, $line) = @_;
+      unless (defined $value && $value !~ /^$/) {
+	return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+      }
+      unless ($value =~ /\S+/) {
+	return $Mail::SpamAssassin::Conf::INVALID_VALUE;
+      }
       foreach my $rule (split(' ', $value)) {
 	$conf->{rules_to_replace}->{$rule} = 1;
       }

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SpamCop.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SpamCop.pm?rev=178359&r1=178358&r2=178359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SpamCop.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/SpamCop.pm Tue May 24 21:07:12 2005
@@ -101,6 +101,12 @@
       if ($value =~ /([^<\s]+\@[^>\s]+)/) {
 	$self->{spamcop_from_address} = $1;
       }
+      elsif ($value =~ /^$/) {
+	return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+      }
+      else {
+	return $Mail::SpamAssassin::Conf::INVALID_VALUE;
+      }
     },
   });
 
@@ -122,6 +128,12 @@
       my ($self, $key, $value, $line) = @_;
       if ($value =~ /([^<\s]+\@[^>\s]+)/) {
 	$self->{spamcop_to_address} = $1;
+      }
+      elsif ($value =~ /^$/) {
+	return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+      }
+      else {
+	return $Mail::SpamAssassin::Conf::INVALID_VALUE;
       }
     },
   });

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm?rev=178359&r1=178358&r2=178359&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm Tue May 24 21:07:12 2005
@@ -309,6 +309,12 @@
           is_rhsbl => 0
         };
       }
+      elsif ($value =~ /^$/) {
+        return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+      }
+      else {
+        return $Mail::SpamAssassin::Conf::INVALID_VALUE;
+      }
     }
   });
 
@@ -325,6 +331,12 @@
           is_rhsbl => 1
         };
       }
+      elsif ($value =~ /^$/) {
+        return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+      }
+      else {
+        return $Mail::SpamAssassin::Conf::INVALID_VALUE;
+      }
     }
   });
 
@@ -346,6 +358,12 @@
           rulename => $rulename
         };
       }
+      elsif ($value =~ /^$/) {
+        return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+      }
+      else {
+        return $Mail::SpamAssassin::Conf::INVALID_VALUE;
+      }
     }
   });
 
@@ -354,6 +372,9 @@
     default => {},
     code => sub {
       my ($self, $key, $value, $line) = @_;
+      if ($value =~ /^$/) {
+        return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
+      }
       foreach my $domain (split(/\s+/, $value)) {
         $self->{uridnsbl_skip_domains}->{lc $domain} = 1;
       }



Re: svn commit: r178359 - in /spamassassin/trunk/lib/Mail/SpamAssassin: Conf.pm Conf/Parser.pm Plugin/AWL.pm Plugin/ReplaceTags.pm Plugin/SpamCop.pm Plugin/URIDNSBL.pm

Posted by Michael Parker <pa...@pobox.com>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

>  sub set_addrlist_value {
>    my ($conf, $key, $value, $line) = @_;
> +
> +  unless (defined $value && $value =~ /^(?:\S+\@\S+(?:\s+\S+\@\S+)*)$/) {
> +    return $Mail::SpamAssassin::Conf::MISSING_REQUIRED_VALUE;
> +  }
>    $conf->{parser}->add_to_addrlist ($key, split (' ', $value));
>  }

Pretty sure this isn't correct.

- From the documentation:
           Whitelist and blacklist addresses are now file-glob-style
patterns, so "friend@somewhere.com", "*@isp.com", or
           "*.domain.net" will all work.  Specifically, "*" and "?" are
allowed, but all other metacharacters are not.  Reg-
           ular expressions are not used for security reasons.


That break *.domain.net.

Michael
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFClUPzG4km+uS4gOIRAjZLAJ9fhn/LhJq7D5HTrc+cICv7nepHWgCfduGs
VJh3L7xkBw6jG79kiuQ82jQ=
=ovib
-----END PGP SIGNATURE-----