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 2010/03/11 15:41:05 UTC

svn commit: r921873 - in /spamassassin/branches/3.3: ./ lib/Mail/SpamAssassin/Plugin/ rules/ t/ t/data/spam/

Author: jm
Date: Thu Mar 11 14:41:05 2010
New Revision: 921873

URL: http://svn.apache.org/viewvc?rev=921873&view=rev
Log:
bug 6335: add Spamhaus DBL as URIBL_DBL_SPAM rule, leaving room for future DBL subtypes like phish or malware; add URIBL_DBL_ERROR to detect lookups of IP addresses due to possible future bugs

Added:
    spamassassin/branches/3.3/t/data/spam/dnsbl_domsonly.eml
    spamassassin/branches/3.3/t/data/spam/dnsbl_ipsonly.eml
    spamassassin/branches/3.3/t/uribl_all_types.t
    spamassassin/branches/3.3/t/uribl_domains_only.t
    spamassassin/branches/3.3/t/uribl_ips_only.t
Modified:
    spamassassin/branches/3.3/MANIFEST
    spamassassin/branches/3.3/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
    spamassassin/branches/3.3/rules/25_uribl.cf
    spamassassin/branches/3.3/rules/50_scores.cf
    spamassassin/branches/3.3/t/SATest.pm
    spamassassin/branches/3.3/t/data/spam/dnsbl.eml
    spamassassin/branches/3.3/t/dnsbl.t
    spamassassin/branches/3.3/t/dnsbl_sc_meta.t
    spamassassin/branches/3.3/t/uribl.t

Modified: spamassassin/branches/3.3/MANIFEST
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/MANIFEST?rev=921873&r1=921872&r2=921873&view=diff
==============================================================================
--- spamassassin/branches/3.3/MANIFEST (original)
+++ spamassassin/branches/3.3/MANIFEST Thu Mar 11 14:41:05 2010
@@ -530,3 +530,8 @@ t/whitelist_subject.t
 t/whitelist_to.t
 t/zz_cleanup.t
 t/spamc_bug6176.t
+t/data/spam/dnsbl_domsonly.eml
+t/uribl_domains_only.t
+t/data/spam/dnsbl_ipsonly.eml
+t/uribl_all_types.t
+t/uribl_ips_only.t

Modified: spamassassin/branches/3.3/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm?rev=921873&r1=921872&r2=921873&view=diff
==============================================================================
--- spamassassin/branches/3.3/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm (original)
+++ spamassassin/branches/3.3/lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm Thu Mar 11 14:41:05 2010
@@ -205,6 +205,16 @@ B<A>).  C<subtest> is the sub-test to ru
 Note that, as with C<urirhsbl>, you must also define a body-eval rule calling
 C<check_uridnsbl()> to use this.
 
+=item tflags NAME_OF_RULE ips_only
+
+Only URIs containing IP addresses as the "host" component will be matched
+against the named "urirhsbl"/"urirhssub" rule.
+
+=item tflags NAME_OF_RULE domains_only
+
+Only URIs containing a non-IP-address "host" component will be matched against
+the named "urirhsbl"/"urirhssub" rule.
+
 =back
 
 =head1 ADMINISTRATOR SETTINGS
@@ -291,6 +301,8 @@ sub parsed_metadata {
 
   # only hit DNSBLs for active rules (defined and score != 0)
   $scanner->{'uridnsbl_active_rules_rhsbl'} = { };
+  $scanner->{'uridnsbl_active_rules_rhsbl_ipsonly'} = { };
+  $scanner->{'uridnsbl_active_rules_rhsbl_domsonly'} = { };
   $scanner->{'uridnsbl_active_rules_nsrhsbl'} = { };
   $scanner->{'uridnsbl_active_rules_fullnsrhsbl'} = { };
   $scanner->{'uridnsbl_active_rules_revipbl'} = { };
@@ -299,7 +311,13 @@ sub parsed_metadata {
     next unless ($scanner->{conf}->is_rule_active('body_evals',$rulename));
 
     my $rulecf = $scanner->{conf}->{uridnsbls}->{$rulename};
-    if ($rulecf->{is_rhsbl}) {
+    my $tflags = $scanner->{conf}->{tflags}->{$rulename};
+
+    if ($rulecf->{is_rhsbl} && $tflags =~ /\b ips_only \b/x) {
+      $scanner->{uridnsbl_active_rules_rhsbl_ipsonly}->{$rulename} = 1;
+    } elsif ($rulecf->{is_rhsbl} && $tflags =~ /\b domains_only \b/x) {
+      $scanner->{uridnsbl_active_rules_rhsbl_domsonly}->{$rulename} = 1;
+    } elsif ($rulecf->{is_rhsbl}) {
       $scanner->{uridnsbl_active_rules_rhsbl}->{$rulename} = 1;
     } elsif ($rulecf->{is_fullnsrhsbl}) {
       $scanner->{uridnsbl_active_rules_fullnsrhsbl}->{$rulename} = 1;
@@ -388,7 +406,6 @@ sub parsed_metadata {
     }
     else {
       # trim down to a limited number - pick randomly
-      my $i;
       while (@domains && keys %domlist < $umd) {
         my $r = int rand (scalar @domains);
         $domlist{splice (@domains, $r, 1)} = 1;
@@ -721,7 +738,10 @@ sub query_domain {
 
   my $obj = { dom => $dom };
 
-  my $single_dnsbl = 0;
+  my $tflags = $scanner->{conf}->{tflags};
+  my $cf = $scanner->{uridnsbl_active_rules_revipbl};
+
+  my ($is_ip, $single_dnsbl);
   if ($dom =~ /^\d+\.\d+\.\d+\.\d+$/) {
     my $IPV4_ADDRESS = IPV4_ADDRESS;
     my $IP_PRIVATE = IP_PRIVATE;
@@ -733,6 +753,7 @@ sub query_domain {
       if ($dom =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/) {
 	$dom = "$4.$3.$2.$1";
 	$single_dnsbl = 1;
+        $is_ip = 1;
       }
     }
   }
@@ -741,13 +762,24 @@ sub query_domain {
   }
 
   my $rhsblrules = $scanner->{uridnsbl_active_rules_rhsbl};
+  my $rhsbliprules = $scanner->{uridnsbl_active_rules_rhsbl_ipsonly};
+  my $rhsbldomrules = $scanner->{uridnsbl_active_rules_rhsbl_domsonly};
   my $nsrhsblrules = $scanner->{uridnsbl_active_rules_nsrhsbl};
   my $fullnsrhsblrules = $scanner->{uridnsbl_active_rules_fullnsrhsbl};
   my $reviprules = $scanner->{uridnsbl_active_rules_revipbl};
 
   if ($single_dnsbl) {
-    # look up the domain in the RHSBL subset
-    foreach my $rulename (keys %{$rhsblrules}) {
+    # look up the domain in the basic RHSBL subset
+    my @rhsbldoms = keys %{$rhsblrules};
+
+    # and add the "domains_only" and "ips_only" subsets as appropriate
+    if ($is_ip) {
+      push @rhsbldoms, keys %{$rhsbliprules};
+    } else {
+      push @rhsbldoms, keys %{$rhsbldomrules};
+    }
+
+    foreach my $rulename (@rhsbldoms) {
       my $rulecf = $scanner->{conf}->{uridnsbls}->{$rulename};
       $self->lookup_single_dnsbl($scanner, $obj, $rulename,
 				 $dom, $rulecf->{zone}, $rulecf->{type});
@@ -883,9 +915,14 @@ sub lookup_dnsbl_for_ip {
   $ip =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
   my $revip = "$4.$3.$2.$1";
 
+  my $tflags = $scanner->{conf}->{tflags};
   my $cf = $scanner->{uridnsbl_active_rules_revipbl};
   foreach my $rulename (keys %{$cf}) {
     my $rulecf = $scanner->{conf}->{uridnsbls}->{$rulename};
+
+    # ips_only/domains_only lookups should not act on this kind of BL
+    next if ($tflags->{$rulename} =~ /\b(?:ips_only|domains_only)\b/);
+    
     $self->lookup_single_dnsbl($scanner, $obj, $rulename,
 			       $revip, $rulecf->{zone}, $rulecf->{type});
   }
@@ -981,7 +1018,9 @@ sub got_dnsbl_hit {
   if ($scanner->{uridnsbl_active_rules_revipbl}->{$rulename}
     || $scanner->{uridnsbl_active_rules_nsrhsbl}->{$rulename}
     || $scanner->{uridnsbl_active_rules_fullnsrhsbl}->{$rulename}
-    || $scanner->{uridnsbl_active_rules_rhsbl}->{$rulename})
+    || $scanner->{uridnsbl_active_rules_rhsbl}->{$rulename}
+    || $scanner->{uridnsbl_active_rules_rhsbl_ipsonly}->{$rulename}
+    || $scanner->{uridnsbl_active_rules_rhsbl_domsonly}->{$rulename})
   {
     # TODO: this needs to handle multiple domain hits per rule
     $scanner->clear_test_state();
@@ -1052,6 +1091,7 @@ sub log_dns_result {
 
 # capability checks for "if can()":
 #
+sub has_tflags_domains_only { 1 }
 sub has_subtest_for_ranges { 1 }
 
 1;

Modified: spamassassin/branches/3.3/rules/25_uribl.cf
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/rules/25_uribl.cf?rev=921873&r1=921872&r2=921873&view=diff
==============================================================================
--- spamassassin/branches/3.3/rules/25_uribl.cf (original)
+++ spamassassin/branches/3.3/rules/25_uribl.cf Thu Mar 11 14:41:05 2010
@@ -31,14 +31,29 @@
 ifplugin Mail::SpamAssassin::Plugin::URIDNSBL
 
 ###########################################################################
-## SBL
+## Spamhaus
 
-uridnssub       URIBL_SBL       zen.spamhaus.org.       A   127.0.0.2
-body            URIBL_SBL       eval:check_uridnsbl('URIBL_SBL')
-describe        URIBL_SBL       Contains an URL listed in the SBL blocklist
-tflags          URIBL_SBL       net
+uridnssub       URIBL_SBL        zen.spamhaus.org.       A   127.0.0.2
+body            URIBL_SBL        eval:check_uridnsbl('URIBL_SBL')
+describe        URIBL_SBL        Contains an URL listed in the SBL blocklist
+tflags          URIBL_SBL        net
 reuse           URIBL_SBL
 
+# DBL, http://www.spamhaus.org/dbl/ 
+if can(Mail::SpamAssassin::Plugin::URIDNSBL::has_tflags_domains_only)
+urirhssub       URIBL_DBL_SPAM   dbl.spamhaus.org.       A   127.0.1.2
+body            URIBL_DBL_SPAM   eval:check_uridnsbl('URIBL_DBL_SPAM')
+describe        URIBL_DBL_SPAM   Contains an URL listed in the DBL blocklist
+tflags          URIBL_DBL_SPAM   net domains_only
+
+# this indicates that IP-address queries were sent to DBL, and should
+# never appear; if it does, something is wrong with SpamAssassin
+urirhssub       URIBL_DBL_ERROR  dbl.spamhaus.org.       A   127.0.1.255
+body            URIBL_DBL_ERROR  eval:check_uridnsbl('URIBL_DBL_ERROR')
+describe        URIBL_DBL_ERROR  Error: queried the DBL blocklist for an IP
+tflags          URIBL_DBL_ERROR  net domains_only
+endif
+
 ###########################################################################
 ## SURBL
 

Modified: spamassassin/branches/3.3/rules/50_scores.cf
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/rules/50_scores.cf?rev=921873&r1=921872&r2=921873&view=diff
==============================================================================
--- spamassassin/branches/3.3/rules/50_scores.cf (original)
+++ spamassassin/branches/3.3/rules/50_scores.cf Thu Mar 11 14:41:05 2010
@@ -1021,9 +1021,11 @@ score URIBL_SC_SURBL 0 0.001 0 0.568 # n
 score URIBL_WS_SURBL 0 1.659 0 1.608 # n=0 n=2
 score URIBL_BLACK 0 1.775 0 1.725 # n=0 n=2
 score URIBL_GREY 0 1.084 0 0.424 # n=0 n=2
+score URIBL_DBL_SPAM 0 1.7 0 1.7
 # </gen:mutable>
 # score URIBL_GREY 0.25
 score URIBL_RED 0.001
+score URIBL_DBL_ERROR 0 0.001 0 0.001
 endif # Mail::SpamAssassin::Plugin::URIDNSBL
 
 # ReplaceTags

Modified: spamassassin/branches/3.3/t/SATest.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/SATest.pm?rev=921873&r1=921872&r2=921873&view=diff
==============================================================================
--- spamassassin/branches/3.3/t/SATest.pm (original)
+++ spamassassin/branches/3.3/t/SATest.pm Thu Mar 11 14:41:05 2010
@@ -21,6 +21,7 @@ BEGIN {
   our $SKIP_SPAMC_TESTS;
   our $SSL_AVAILABLE;
   our $SKIP_SETUID_NOBODY_TESTS = 0;
+  our $SKIP_DNSBL_TESTS = 0;
 }
 
 # Set up for testing. Exports (as global vars):
@@ -961,4 +962,18 @@ sub exit_status_str($;$) {
 
 sub dbgprint { print STDOUT "[".time()."] ".$_[0]; }
 
+sub can_use_net_dns_safely {
+  return unless eval { require Net::DNS; };
+
+  # bug 3806:
+  # Do not run this test with version of Sys::Hostname::Long older than 1.4
+  # on non-Linux unices as root, due to a bug in Sys::Hostname::Long
+  # (which is used by Net::DNS)
+
+  return 1 if eval { require Sys::Hostname::Long; Sys::Hostname::Long->VERSION(1.4) };
+  return 1 if ($< != 0);
+  return 1 if ($^O =~ /^(linux|mswin|dos|os2)/oi);
+  return;
+}
+
 1;

Modified: spamassassin/branches/3.3/t/data/spam/dnsbl.eml
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/data/spam/dnsbl.eml?rev=921873&r1=921872&r2=921873&view=diff
==============================================================================
--- spamassassin/branches/3.3/t/data/spam/dnsbl.eml (original)
+++ spamassassin/branches/3.3/t/data/spam/dnsbl.eml Thu Mar 11 14:41:05 2010
@@ -24,4 +24,5 @@ me too: http://uribl-example-b.com/
 me too: http://uribl-example-c.com/
 
 Also -- http://spamassassin.org/
+And -- http://144.137.3.98/blah
 

Added: spamassassin/branches/3.3/t/data/spam/dnsbl_domsonly.eml
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/data/spam/dnsbl_domsonly.eml?rev=921873&view=auto
==============================================================================
--- spamassassin/branches/3.3/t/data/spam/dnsbl_domsonly.eml (added)
+++ spamassassin/branches/3.3/t/data/spam/dnsbl_domsonly.eml Thu Mar 11 14:41:05 2010
@@ -0,0 +1,11 @@
+From spammer@example.net  Fri Dec  7 11:07:10 2001
+Received: from evil.example.net [144.137.3.98] by chaos.example.net
+    for someone@example.com; Fri, 07 Dec 2001 11:07:15 +1100 (EST)
+From: "DNSBL Testing" <sp...@example.com>
+To: someone@example.com
+Subject: no subject needed
+Date: Fri, 7 Dec 2001 07:01:03
+Message-Id: <20...@mail.netnoteinc.com>
+
+I should not be listed: http://144.137.3.98/blah
+

Added: spamassassin/branches/3.3/t/data/spam/dnsbl_ipsonly.eml
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/data/spam/dnsbl_ipsonly.eml?rev=921873&view=auto
==============================================================================
--- spamassassin/branches/3.3/t/data/spam/dnsbl_ipsonly.eml (added)
+++ spamassassin/branches/3.3/t/data/spam/dnsbl_ipsonly.eml Thu Mar 11 14:41:05 2010
@@ -0,0 +1,11 @@
+From spammer@example.net  Fri Dec  7 11:07:10 2001
+Received: from evil.example.net [144.137.3.98] by chaos.example.net
+    for someone@example.com; Fri, 07 Dec 2001 11:07:15 +1100 (EST)
+From: "DNSBL Testing" <sp...@example.com>
+To: someone@example.com
+Subject: no subject needed
+Date: Fri, 7 Dec 2001 07:01:03
+Message-Id: <20...@mail.netnoteinc.com>
+
+I should not be listed: http://foo.bar.baz.uribl-example-a.com/
+

Modified: spamassassin/branches/3.3/t/dnsbl.t
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/dnsbl.t?rev=921873&r1=921872&r2=921873&view=diff
==============================================================================
--- spamassassin/branches/3.3/t/dnsbl.t (original)
+++ spamassassin/branches/3.3/t/dnsbl.t Thu Mar 11 14:41:05 2010
@@ -4,21 +4,7 @@ use lib '.'; use lib 't';
 use SATest; sa_t_init("dns");
 
 use constant TEST_ENABLED => conf_bool('run_net_tests') && conf_bool('run_long_tests');
-use constant HAS_NET_DNS => eval { require Net::DNS; };
-# bug 3806:
-# Do not run this test with version of Sys::Hostname::Long older than 1.4
-# on non-Linux unices as root, due to a bug in Sys::Hostname::Long
-# (which is used by Net::DNS)
-use constant IS_LINUX   => $^O eq 'linux';
-use constant IS_WINDOWS => ($^O =~ /^(mswin|dos|os2)/oi);
-use constant AM_ROOT    => $< == 0;
-use constant HAS_SAFE_HOSTNAME =>
-  eval { require Sys::Hostname::Long; Sys::Hostname::Long->VERSION(1.4) };
-
-use constant DO_RUN =>
-  TEST_ENABLED && HAS_NET_DNS &&
-  (HAS_SAFE_HOSTNAME || !AM_ROOT || IS_LINUX || IS_WINDOWS);
-
+use constant DO_RUN => TEST_ENABLED && can_use_net_dns_safely();
 use Test;
 
 BEGIN {

Modified: spamassassin/branches/3.3/t/dnsbl_sc_meta.t
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/dnsbl_sc_meta.t?rev=921873&r1=921872&r2=921873&view=diff
==============================================================================
--- spamassassin/branches/3.3/t/dnsbl_sc_meta.t (original)
+++ spamassassin/branches/3.3/t/dnsbl_sc_meta.t Thu Mar 11 14:41:05 2010
@@ -4,21 +4,7 @@ use lib '.'; use lib 't';
 use SATest; sa_t_init("dnsbl_sc_meta");
 
 use constant TEST_ENABLED => conf_bool('run_net_tests');
-use constant HAS_NET_DNS => eval { require Net::DNS; };
-# bug 3806:
-# Do not run this test with version of Sys::Hostname::Long older than 1.4
-# on non-Linux unices as root, due to a bug in Sys::Hostname::Long
-# (which is used by Net::DNS)
-use constant IS_LINUX   => $^O eq 'linux';
-use constant IS_WINDOWS => ($^O =~ /^(mswin|dos|os2)/oi);
-use constant AM_ROOT    => $< == 0;
-use constant HAS_SAFE_HOSTNAME =>
-  eval { require Sys::Hostname::Long; Sys::Hostname::Long->VERSION(1.4) };
-
-use constant DO_RUN =>
-  TEST_ENABLED && HAS_NET_DNS &&
-  (HAS_SAFE_HOSTNAME || !AM_ROOT || IS_LINUX || IS_WINDOWS);
-
+use constant DO_RUN => TEST_ENABLED && can_use_net_dns_safely();
 use Test;
 
 BEGIN {

Modified: spamassassin/branches/3.3/t/uribl.t
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/uribl.t?rev=921873&r1=921872&r2=921873&view=diff
==============================================================================
--- spamassassin/branches/3.3/t/uribl.t (original)
+++ spamassassin/branches/3.3/t/uribl.t Thu Mar 11 14:41:05 2010
@@ -4,25 +4,11 @@ use lib '.'; use lib 't';
 use SATest; sa_t_init("uribl");
 
 use constant TEST_ENABLED => conf_bool('run_net_tests') && conf_bool('run_long_tests');
-use constant HAS_NET_DNS => eval { require Net::DNS; };
-# bug 3806:
-# Do not run this test with version of Sys::Hostname::Long older than 1.4
-# on non-Linux unices as root, due to a bug in Sys::Hostname::Long
-# (which is used by Net::DNS)
-use constant IS_LINUX   => $^O eq 'linux';
-use constant IS_WINDOWS => ($^O =~ /^(mswin|dos|os2)/oi);
-use constant AM_ROOT    => $< == 0;
-use constant HAS_SAFE_HOSTNAME =>
-  eval { require Sys::Hostname::Long; Sys::Hostname::Long->VERSION(1.4) };
-
-use constant DO_RUN =>
-  TEST_ENABLED && HAS_NET_DNS &&
-  (HAS_SAFE_HOSTNAME || !AM_ROOT || IS_LINUX || IS_WINDOWS);
-
+use constant DO_RUN => TEST_ENABLED && can_use_net_dns_safely();
 use Test;
 
 BEGIN {
-  plan tests => (DO_RUN ? 5 : 0),
+  plan tests => (DO_RUN ? 6 : 0),
 };
 
 exit unless (DO_RUN);
@@ -34,6 +20,7 @@ exit unless (DO_RUN);
  q{ X_URIBL_B } => 'B',
  q{ X_URIBL_NS } => 'NS',
  q{ X_URIBL_FULL_NS } => 'FULL_NS',
+ q{ X_URIBL_DOMSONLY } => 'X_URIBL_DOMSONLY',
 );
 
 tstlocalrules(q{
@@ -56,6 +43,10 @@ tstlocalrules(q{
   body       X_URIBL_FULL_NS  eval:check_uridnsbl('X_URIBL_FULL_NS')
   tflags     X_URIBL_FULL_NS  net
 
+  urirhssub  X_URIBL_DOMSONLY  dnsbltest.spamassassin.org.    A 2
+  body       X_URIBL_DOMSONLY  eval:check_uridnsbl('X_URIBL_DOMSONLY')
+  tflags     X_URIBL_DOMSONLY  net domains_only
+
   add_header all RBL _RBL_
 
 });

Added: spamassassin/branches/3.3/t/uribl_all_types.t
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/uribl_all_types.t?rev=921873&view=auto
==============================================================================
--- spamassassin/branches/3.3/t/uribl_all_types.t (added)
+++ spamassassin/branches/3.3/t/uribl_all_types.t Thu Mar 11 14:41:05 2010
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+#
+# bug 6335: ensure that both domains_only and ips_only URIDNSBL rules can coexist
+
+use lib '.'; use lib 't';
+use SATest; sa_t_init("uribl_all_types");
+
+use constant TEST_ENABLED => conf_bool('run_net_tests') && conf_bool('run_long_tests');
+use constant DO_RUN => TEST_ENABLED && can_use_net_dns_safely();
+use Test;
+
+BEGIN {
+  plan tests => (DO_RUN ? 3 : 0),
+};
+
+exit unless (DO_RUN);
+
+# ---------------------------------------------------------------------------
+
+%patterns = (
+
+   q{ X_URIBL_IPSONLY [URIs: 144.137.3.98] } => 'X_URIBL_IPSONLY',
+   q{ X_URIBL_DOMSONLY [URIs: uribl-example-c.com] } => 'X_URIBL_DOMSONLY',
+
+);
+
+tstlocalrules(q{
+
+  rbl_timeout 30
+
+  urirhssub  X_URIBL_IPSONLY  dnsbltest.spamassassin.org.    A 2
+  body       X_URIBL_IPSONLY  eval:check_uridnsbl('X_URIBL_IPSONLY')
+  tflags     X_URIBL_IPSONLY  net ips_only
+
+  urirhssub  X_URIBL_DOMSONLY  dnsbltest.spamassassin.org.    A 4
+  body       X_URIBL_DOMSONLY  eval:check_uridnsbl('X_URIBL_DOMSONLY')
+  tflags     X_URIBL_DOMSONLY  net domains_only
+
+  add_header all RBL _RBL_
+
+});
+
+# note: don't leave -D here, it causes spurious passes
+ok sarun ("-t < data/spam/dnsbl.eml 2>&1", \&patterns_run_cb);
+ok_all_patterns();
+

Added: spamassassin/branches/3.3/t/uribl_domains_only.t
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/uribl_domains_only.t?rev=921873&view=auto
==============================================================================
--- spamassassin/branches/3.3/t/uribl_domains_only.t (added)
+++ spamassassin/branches/3.3/t/uribl_domains_only.t Thu Mar 11 14:41:05 2010
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+# bug 6335: domains_only URIDNSBL rules
+
+use lib '.'; use lib 't';
+use SATest; sa_t_init("uribl_domains_only");
+
+use constant TEST_ENABLED => conf_bool('run_net_tests') && conf_bool('run_long_tests');
+use constant DO_RUN => TEST_ENABLED && can_use_net_dns_safely();
+use Test;
+
+BEGIN {
+  plan tests => (DO_RUN ? 2 : 0),
+};
+
+exit unless (DO_RUN);
+
+# ---------------------------------------------------------------------------
+
+%anti_patterns = (
+ q{ X_URIBL_DOMSONLY } => 'A',
+);
+
+tstlocalrules(q{
+
+  rbl_timeout 30
+
+  urirhssub  X_URIBL_DOMSONLY  dnsbltest.spamassassin.org.    A 2
+  body       X_URIBL_DOMSONLY  eval:check_uridnsbl('X_URIBL_DOMSONLY')
+  tflags     X_URIBL_DOMSONLY  net domains_only
+
+  add_header all RBL _RBL_
+
+});
+
+# note: don't leave -D here, it causes spurious passes
+ok sarun ("-t < data/spam/dnsbl_domsonly.eml 2>&1", \&patterns_run_cb);
+ok_all_patterns();
+

Added: spamassassin/branches/3.3/t/uribl_ips_only.t
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/t/uribl_ips_only.t?rev=921873&view=auto
==============================================================================
--- spamassassin/branches/3.3/t/uribl_ips_only.t (added)
+++ spamassassin/branches/3.3/t/uribl_ips_only.t Thu Mar 11 14:41:05 2010
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+# bug 6335: ips_only URIDNSBL rules
+
+use lib '.'; use lib 't';
+use SATest; sa_t_init("uribl_ips_only");
+
+use constant TEST_ENABLED => conf_bool('run_net_tests') && conf_bool('run_long_tests');
+use constant DO_RUN => TEST_ENABLED && can_use_net_dns_safely();
+use Test;
+
+BEGIN {
+  plan tests => (DO_RUN ? 2 : 0),
+};
+
+exit unless (DO_RUN);
+
+# ---------------------------------------------------------------------------
+
+%anti_patterns = (
+ q{ X_URIBL_IPSONLY } => 'A',
+);
+
+tstlocalrules(q{
+
+  rbl_timeout 30
+
+  urirhssub  X_URIBL_IPSONLY  dnsbltest.spamassassin.org.    A 2
+  body       X_URIBL_IPSONLY  eval:check_uridnsbl('X_URIBL_IPSONLY')
+  tflags     X_URIBL_IPSONLY  net ips_only
+
+  add_header all RBL _RBL_
+
+});
+
+# note: don't leave -D here, it causes spurious passes
+ok sarun ("-t < data/spam/dnsbl_ipsonly.eml 2>&1", \&patterns_run_cb);
+ok_all_patterns();
+