1
#! /bin/sh /usr/share/dpatch/dpatch-run
2
## 90_ipv6_header_support.dpatch by <noahm@debian.org>
4
## All lines beginning with `## DP:' are a description of the patch.
5
## DP: Backport upstream changeset 637123
6
## DP: (http://svn.apache.org/viewvc?view=rev&revision=637123)
7
## DP: to add ipv6 support to trusted_networks, internal_networks,
8
## DP: whitelist_from_rcvd, msa_networks, etc.
11
diff -urNad spamassassin-3.2.5~/INSTALL spamassassin-3.2.5/INSTALL
12
--- spamassassin-3.2.5~/INSTALL 2009-08-09 15:42:27.000000000 -0400
13
+++ spamassassin-3.2.5/INSTALL 2009-08-09 15:42:28.000000000 -0400
15
- version 0.34 or higher on Unix systems
16
- version 0.46 or higher on Windows systems
18
+ - NetAddr::IP (from CPAN)
20
+ Used to parse IP addresses and IP address ranges for
23
+ Debian/Ubuntu: apt-get install libnetaddr-ip-perl
25
- LWP (aka libwww-perl) (from CPAN)
27
This set of modules will include both the LWP::UserAgent and
28
diff -urNad spamassassin-3.2.5~/Makefile.PL spamassassin-3.2.5/Makefile.PL
29
--- spamassassin-3.2.5~/Makefile.PL 2008-06-10 05:21:07.000000000 -0400
30
+++ spamassassin-3.2.5/Makefile.PL 2009-08-09 15:42:28.000000000 -0400
32
'Pod::Usage' => 1.10, # all versions prior to this do seem to be buggy
33
'HTML::Parser' => 3.43, # the HTML code is based on this parser, older versions have utf-8 bugs
34
'Net::DNS' => (RUNNING_ON_WINDOWS ? 0.46 : 0.34), # bugs in older revs
39
diff -urNad spamassassin-3.2.5~/lib/Mail/SpamAssassin/Conf.pm spamassassin-3.2.5/lib/Mail/SpamAssassin/Conf.pm
40
--- spamassassin-3.2.5~/lib/Mail/SpamAssassin/Conf.pm 2009-08-09 15:42:27.000000000 -0400
41
+++ spamassassin-3.2.5/lib/Mail/SpamAssassin/Conf.pm 2009-08-09 15:42:28.000000000 -0400
43
If a network or host address is prefaced by a C<!> the network or host will be
44
excluded (or included) in a first listed match fashion.
46
-Note: 127/8 is always included in trusted_networks, regardless of your config.
47
+Note: 127/8 and ::1 are always included in trusted_networks, regardless of
53
trusted_networks 192.168/16 # all in 192.168.*.*
54
trusted_networks 212.17.35.15 # just that host
55
trusted_networks !10.0.1.5 10.0.1/24 # all in 10.0.1.* but not 10.0.1.5
56
+ trusted_networks DEAD:BEEF::/32 # all in that ipv6 prefix
59
This operates additively, so a C<trusted_networks> line after another one
60
will result in all those networks becoming trusted. To clear out the
62
Every entry in C<internal_networks> must appear in C<trusted_networks>; in
63
other words, C<internal_networks> is always a subset of the trusted set.
65
-Note: 127/8 is always included in internal_networks, regardless of your config.
66
+Note: 127/8 and ::1 are always included in internal_networks, regardless of
73
my $set = Mail::SpamAssassin::NetSet->new();
74
$set->add_cidr ('127/8');
75
+ $set->add_cidr ('::1');
79
diff -urNad spamassassin-3.2.5~/lib/Mail/SpamAssassin/Constants.pm spamassassin-3.2.5/lib/Mail/SpamAssassin/Constants.pm
80
--- spamassassin-3.2.5~/lib/Mail/SpamAssassin/Constants.pm 2008-06-10 05:20:22.000000000 -0400
81
+++ spamassassin-3.2.5/lib/Mail/SpamAssassin/Constants.pm 2009-08-09 15:42:28.000000000 -0400
83
# 3330 = <ftp://ftp.rfc-editor.org/in-notes/rfc3330.txt>
84
# CYMRU = <http://www.cymru.com/Documents/bogon-list.html>
87
-# 2005-01-10 Daniel Quinlan - reduced to standard private IP addresses
88
+# This also includes IPv6 link-local space, fe80::/10, the IPv4
89
+# spaces mapped in IPv6, and the IPv6 host-local address, ::1.
91
use constant IP_PRIVATE => qr{^(?:
92
- 10| # 10/8: Private Use (3330)
93
- 127| # 127/8: Private Use (localhost)
94
- 169\.254| # 169.254/16: Private Use (APIPA)
95
- 172\.(?:1[6-9]|2[0-9]|3[01])| # 172.16-172.31/16: Private Use (3330)
96
- 192\.168 # 192.168/16: Private Use (3330)
98
+ (?: # IPv4 addresses
99
+ 10| # 10/8: Private Use (3330)
100
+ 127| # 127/8: Private Use (localhost)
101
+ 169\.254| # 169.254/16: Private Use (APIPA)
102
+ 172\.(?:1[6-9]|2[0-9]|3[01])| # 172.16-172.31/16: Private Use (3330)
103
+ 192\.168 # 192.168/16: Private Use (3330)
106
+ (?: # IPv6 addresses
107
+ # don't use \b here, it hits on :'s
108
+ (?:IPv6: # with optional prefix
112
+ # IPv4 mapped in IPv6
113
+ # note the colon after the 12th byte in each here
115
+ # first 6 (12 bytes) non-zero
116
+ (?:0{1,4}:){5} ffff:
118
+ # leading zeros omitted (note {0,5} not {1,5})
119
+ ::(?:0{1,4}:){0,4} ffff:
121
+ # trailing zeros (in the first 6) omitted
122
+ (?:0{1,4}:){1,4}: ffff:
124
+ # 0000 in second up to (including) fifth omitted
125
+ 0{1,4}::(?:0{1,4}:){1,3} ffff:
127
+ # 0000 in third up to (including) fifth omitted
128
+ (?:0{1,4}:){2}:0{1,2}: ffff:
130
+ # 0000 in fourth up to (including) fifth omitted
131
+ (?:0{1,4}:){3}:0: ffff:
133
+ # 0000 in fifth omitted
134
+ (?:0{1,4}:){4}: ffff:
136
+ # and the IPv4 address appended to all of the 12 bytes above
141
+ 172\.(?:1[6-9]|2[0-9]|3[01])|
145
+ | # or IPv6 link-local address space, fe80::/10
146
+ fe[89ab][0-9a-f]:.*
148
+ | # or the host-local ::1 addr, as a pure IPv6 address
150
+ # all 8 (16 bytes) of them present
151
+ (?:0{1,4}:){7} 0{0,3}1
153
+ # leading zeros omitted
154
+ :(?::0{1,4}){0,6}: 0{0,3}1
156
+ # 0000 in second up to (including) seventh omitted
157
+ 0{1,4}:(?::0{1,4}){0,5}: 0{0,3}1
159
+ # 0000 in third up to (including) seventh omitted
160
+ (?:0{1,4}:){2}(?::0{1,4}){0,4}: 0{0,3}1
162
+ # 0000 in fouth up to (including) seventh omitted
163
+ (?:0{1,4}:){3}(?::0{1,4}){0,3}: 0{0,3}1
165
+ # 0000 in fifth up to (including) seventh omitted
166
+ (?:0{1,4}:){4}(?::0{1,4}){0,2}: 0{0,3}1
168
+ # 0000 in sixth up to (including) seventh omitted
169
+ (?:0{1,4}:){5}(?::0{1,4}){0,1}: 0{0,3}1
171
+ # 0000 in seventh omitted
172
+ (?:0{1,4}:){6}: 0{0,3}1
178
# backward compatibility
179
use constant IP_IN_RESERVED_RANGE => IP_PRIVATE;
181
# ---------------------------------------------------------------------------
182
# match the various ways of saying "localhost".
185
use constant LOCALHOST => qr/
188
diff -urNad spamassassin-3.2.5~/lib/Mail/SpamAssassin/Message/Metadata/Received.pm spamassassin-3.2.5/lib/Mail/SpamAssassin/Message/Metadata/Received.pm
189
--- spamassassin-3.2.5~/lib/Mail/SpamAssassin/Message/Metadata/Received.pm 2008-06-10 05:20:13.000000000 -0400
190
+++ spamassassin-3.2.5/lib/Mail/SpamAssassin/Message/Metadata/Received.pm 2009-08-09 15:42:28.000000000 -0400
191
@@ -1205,12 +1205,6 @@
192
dbg("received-header: could not parse IP address from: $_");
195
- $ip = Mail::SpamAssassin::Util::extract_ipv4_addr_from_string ($ip);
197
- dbg("received-header: could not parse IPv4 address, assuming IPv6");
198
- return 0; # ignore IPv6 handovers
201
# DISABLED: if we cut out localhost-to-localhost SMTP handovers,
202
# we will give FPs on SPF checks -- since the SMTP "MAIL FROM" addr
203
# will be recorded, but we won't have the relays handover recorded
204
@@ -1226,6 +1220,14 @@
205
if ($rdns =~ /^unknown$/i) {
206
$rdns = ''; # some MTAs seem to do this
209
+ $ip =~ s/^\[//; $ip =~ s/\]$//;
211
+ $ip =~ s/^ipv6://i; # remove optional "IPv6:" prefix
213
+ # remove "::ffff:" prefix from IPv4-mapped-in-IPv6 addresses,
214
+ # so we can treat them as simply IPv4 addresses
215
+ $ip =~ s/^0*:0*:(?:0*:)*ffff:(\d+\.\d+\.\d+\.\d+)$/$1/i;
217
$envfrom =~ s/^\s*<*//gs; $envfrom =~ s/>*\s*$//gs;
219
diff -urNad spamassassin-3.2.5~/lib/Mail/SpamAssassin/NetSet.pm spamassassin-3.2.5/lib/Mail/SpamAssassin/NetSet.pm
220
--- spamassassin-3.2.5~/lib/Mail/SpamAssassin/NetSet.pm 2008-06-10 05:20:22.000000000 -0400
221
+++ spamassassin-3.2.5/lib/Mail/SpamAssassin/NetSet.pm 2009-08-09 15:42:28.000000000 -0400
228
use Mail::SpamAssassin::Util;
229
use Mail::SpamAssassin::Logger;
231
$self->{nets} ||= [ ];
235
- my $exclude = s/^\s*!// ? 1 : 0;
236
- my ($ip, $bits) = m#^\s*
237
- ((?:(?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.){0,3}
238
- (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)?) (?:(?<!\.)/(\d+))?
240
+ foreach my $cidr (@nets) {
241
+ my $exclude = ($cidr =~ s/^\s*!//) ? 1 : 0;
243
- my $err = "netset: illegal network address given: '$_'\n";
245
+ if ($cidr =~ /^\d+[\.\/]/) {
246
+ if ($cidr =~ /^(\d+)\.(\d+)\.(\d+)\.$/) { $cidr = "$1.$2.$3.0/24"; }
247
+ elsif ($cidr =~ /^(\d+)\.(\d+)\.$/) { $cidr = "$1.$2.0.0/16"; }
248
+ elsif ($cidr =~ /^(\d+)\.$/) { $cidr = "$1.0.0.0/8"; }
252
+ my $ip = NetAddr::IP->new($cidr);
255
+ warn "netset: illegal network address given: '$cidr'\n";
258
- elsif ($ip =~ /\.$/) {
259
- # just use string matching; much simpler than doing smart stuff with arrays ;)
260
- if ($ip =~ /^(\d+)\.(\d+)\.(\d+)\.$/) { $ip = "$1.$2.$3.0"; $bits = 24; }
261
- elsif ($ip =~ /^(\d+)\.(\d+)\.$/) { $ip = "$1.$2.0.0"; $bits = 16; }
262
- elsif ($ip =~ /^(\d+)\.$/) { $ip = "$1.0.0.0"; $bits = 8; }
269
- $bits = 32 if (!defined $bits);
271
- next if ($self->is_net_declared($ip, $bits, $exclude, 0));
272
+ # if this is an IPv4 address, create an IPv6 representation, too
276
+ $ip6 = $self->_convert_ipv4_cidr_to_ipv6($cidr);
281
- my $mask = 0xFFffFFff ^ ((2 ** (32-$bits)) - 1);
282
+ next if ($self->is_net_declared($ip4, $ip6, $exclude, 0));
284
+ # note: it appears a NetAddr::IP object takes up about 279 bytes
285
push @{$self->{nets}}, {
288
- ip => (Mail::SpamAssassin::Util::my_inet_aton($ip) & $mask),
296
@@ -100,21 +101,41 @@
297
return scalar @{$self->{nets}};
300
+sub _convert_ipv4_cidr_to_ipv6 {
301
+ my ($self, $cidr) = @_;
303
+ # only do this for IPv4 addresses
304
+ return undef unless ($cidr =~ /^\d+[.\/]/);
306
+ if ($cidr !~ /\//) { # no mask
307
+ return NetAddr::IP->new6("::ffff:".$cidr);
310
+ # else we have a CIDR mask specified. use new6() to do this
312
+ my $ip6 = ""+(NetAddr::IP->new6($cidr));
313
+ # 127.0.0.1 -> 0:0:0:0:0:0:7F00:0001/128
314
+ # 127/8 -> 0:0:0:0:0:0:7F00:0/104
316
+ # now, move that from 0:0:0:0:0:0: space to 0:0:0:0:0:ffff: space
317
+ if (!defined $ip6 || $ip6 !~ /^0:0:0:0:0:0:(.*)$/) {
318
+ warn "oops! unparseable IPv6 address for $cidr: $ip6";
322
+ return NetAddr::IP->new6("::ffff:$1");
325
sub _nets_contains_network {
326
- my ($self, $network, $mask, $exclude, $quiet, $netname, $declared) = @_;
327
+ my ($self, $net4, $net6, $exclude, $quiet, $netname, $declared) = @_;
329
return 0 unless (defined $self->{nets});
331
- $exclude = 0 if (!defined $exclude);
332
- $quiet = 0 if (!defined $quiet);
333
- $declared = 0 if (!defined $declared);
335
foreach my $net (@{$self->{nets}}) {
336
- # a net can not be contained by a (smaller) net with a larger mask
337
- next if ($net->{mask} > $mask);
339
# check to see if the new network is contained by the old network
340
- if (($network & $net->{mask}) == $net->{ip}) {
341
+ my $in4 = defined $net4 && defined $net->{ip4} && $net->{ip4}->contains($net4);
342
+ my $in6 = defined $net6 && defined $net->{ip6} && $net->{ip6}->contains($net6);
343
+ if ($in4 || $in6) {
344
warn "netset: cannot " . ($exclude ? "exclude" : "include")
345
. " $netname as it has already been "
346
. ($net->{exclude} ? "excluded" : "included") . "\n" unless $quiet;
347
@@ -129,35 +150,38 @@
350
sub is_net_declared {
351
- my ($self, $network, $bits, $exclude, $quiet) = @_;
353
- my $mask = 0xFFffFFff ^ ((2 ** (32-$bits)) - 1);
354
- my $aton = Mail::SpamAssassin::Util::my_inet_aton($network);
356
- return $self->_nets_contains_network($aton, $mask, $exclude,
357
- $quiet, "$network/$bits", 1);
358
+ my ($self, $net4, $net6, $exclude, $quiet) = @_;
359
+ return $self->_nets_contains_network($net4, $net6, $exclude,
360
+ $quiet, $net4 || $net6, 1);
364
my ($self, $ip) = @_;
366
if (!defined $self->{nets}) { return 0; }
367
- if ($ip !~ m/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { return 0; }
369
- $ip = Mail::SpamAssassin::Util::my_inet_aton($ip);
371
+ if ($ip =~ /^\d+\./) {
372
+ $ip4 = NetAddr::IP->new($ip);
373
+ $ip6 = $self->_convert_ipv4_cidr_to_ipv6($ip);
375
+ $ip6 = NetAddr::IP->new($ip);
378
foreach my $net (@{$self->{nets}}) {
379
- return !$net->{exclude} if (($ip & $net->{mask}) == $net->{ip});
380
+ return !$net->{exclude} if
381
+ ((defined $ip4 && defined $net->{ip4} && $net->{ip4}->contains($ip4))
382
+ || (defined $ip6 && defined $net->{ip6} && $net->{ip6}->contains($ip6)));
389
my ($self, $net) = @_;
390
- my $mask = $net->{mask};
391
my $exclude = $net->{exclude};
392
- my $network = $net->{ip};
394
- return $self->_nets_contains_network($network, $mask, $exclude, 1, "", 0);
395
+ my $net4 = $net->{ip4};
396
+ my $net6 = $net->{ip6};
397
+ return $self->_nets_contains_network($net4, $net6, $exclude, 1, "", 0);
401
diff -urNad spamassassin-3.2.5~/t/cidrs.t spamassassin-3.2.5/t/cidrs.t
402
--- spamassassin-3.2.5~/t/cidrs.t 2008-06-10 05:21:04.000000000 -0400
403
+++ spamassassin-3.2.5/t/cidrs.t 2009-08-09 15:42:28.000000000 -0400
408
-use Mail::SpamAssassin;
412
+use Mail::SpamAssassin;
413
use Mail::SpamAssassin::NetSet;
415
my $sa = Mail::SpamAssassin->new({
416
rules_filename => "$prefix/rules",
423
my ($testip, @nets) = @_;
424
my $nets = Mail::SpamAssassin::NetSet->new();
425
foreach my $net (@nets) { $nets->add_cidr ($net); }
430
-ok (tryone ("127.0.0.1", "127.0.0.1"));
431
-ok (!tryone ("127.0.0.2", "127.0.0.1"));
433
+ my ($cidr, @nets) = @_;
434
+ my $net = Mail::SpamAssassin::NetSet->new();
435
+ $net->add_cidr ($cidr);
437
-ok (tryone ("127.0.0.1", "127."));
438
-ok (tryone ("127.0.0.254", "127."));
439
-ok (tryone ("127.0.0.1", "127/8"));
440
-ok (tryone ("127.0.0.1", "127.0/16"));
441
-ok (tryone ("127.0.0.1", "127.0.0/24"));
442
-ok (tryone ("127.0.0.1", "127.0.0.1/32"));
443
-ok (tryone ("127.0.0.1", "127.0.0.1/31"));
444
-ok (tryone ("127.0.0.1", "10.", "11.", "127.0.0.1"));
445
-ok (tryone ("127.0.0.1", "127.0."));
446
-ok (tryone ("127.0.0.1", "127.0.0."));
447
-ok (tryone ("127.0.0.1", "127."));
448
+ my $nets = Mail::SpamAssassin::NetSet->new();
449
+ foreach my $net (@nets) { $nets->add_cidr ($net); }
451
-ok (!tryone ("128.0.0.254", "127."));
452
-ok (!tryone ("128.0.0.1", "127/8"));
453
-ok (!tryone ("128.0.0.1", "127.0/16"));
454
-ok (!tryone ("128.0.0.1", "127.0.0/24"));
455
-ok (!tryone ("128.0.0.1", "127.0.0.1/32"));
456
-ok (!tryone ("128.0.0.1", "127.0.0.1/31"));
457
-ok (!tryone ("128.0.0.1", "127.0."));
458
-ok (!tryone ("128.0.0.1", "127.0.0."));
459
-ok (!tryone ("12.9.0.1", "10.", "11.", "127.0.0.1"));
460
+ if ($nets->contains_net ($net->{nets}->[0])) {
461
+ print "\n$cidr was in @nets\n"; return 1;
463
+ print "\n$cidr was not in @nets\n"; return 0;
467
+ok tryone "127.0.0.1", "127.0.0.1";
468
+ok !tryone "127.0.0.2", "127.0.0.1";
470
+ok tryone "127.0.0.1", "127.";
471
+ok tryone "127.0.0.254", "127.";
472
+ok tryone "127.0.0.1", "127/8";
473
+ok tryone "127.0.0.1", "127.0/16";
474
+ok tryone "127.0.0.1", "127.0.0/24";
475
+ok tryone "127.0.0.1", "127.0.0.1/32";
476
+ok tryone "127.0.0.1", "127.0.0.1/31";
477
+ok tryone "127.0.0.1", "10.", "11.", "127.0.0.1";
478
+ok tryone "127.0.0.1", "127.0.";
479
+ok tryone "127.0.0.1", "127.0.0.";
480
+ok tryone "127.0.0.1", "127.";
482
+ok !tryone "128.0.0.254", "127.";
483
+ok !tryone "128.0.0.1", "127/8";
484
+ok !tryone "128.0.0.1", "127.0/16";
485
+ok !tryone "128.0.0.1", "127.0.0/24";
486
+ok !tryone "128.0.0.1", "127.0.0.1/32";
487
+ok !tryone "128.0.0.1", "127.0.0.1/31";
488
+ok !tryone "128.0.0.1", "127.0.";
489
+ok !tryone "128.0.0.1", "127.0.0.";
490
+ok !tryone "12.9.0.1", "10.", "11.", "127.0.0.1";
492
+ok !tryone "127.0.0.1", "::DEAD:BEEF";
493
+ok tryone "DEAD:BEEF:0000:0102:0304:0506:0708:0a0b",
494
+ "DEAD:BEEF:0000:0102:0304:0506::/96";
495
+ok tryone "DEAD:BEEF:0000:0102:0304:0506:0708:0a0b",
496
+ "DEAD:BEEF:0000:0102:0304:0506:0:0/96";
497
+ok tryone "fec0:02::0060:1dff:fff7:2109",
498
+ "fec0:02::0060:1dff:fff7:2109";
499
+ok tryone "::1", "::1";
500
+ok tryone "::1", "0:0:0:0:0:0:0:1";
501
+ok tryone "::1", "0:0:0::0:1";
502
+ok tryone "::1", "::/96";
504
+# various equivalences of ipv4 and ipv4-mapped-ipv6
505
+ok tryone "::ffff:127.0.0.1", "127/8";
506
+ok tryone "::ffff:127.0.0.1", "127.0.0.1";
507
+ok tryone "::ffff:127.0.0.1", "::ffff:127.0.0.1";
508
+ok tryone "127.0.0.1", "::ffff:127.0.0.1";
509
+ok tryone "127.0.0.1", "::ffff:7f00:0000/112";
510
+ok tryone "127.0.0.1", "::ffff:7f00:0001";
511
+ok tryone "127.0.0.1", "0000:0000:0000:0000:0000:ffff:127.0.0.0/112";
512
+ok tryone "127.0.0.1", "0000:0000:0000:0000:0000:ffff:127.0.0.1";
514
+ok !tryone "127.0.0.1", "::127.0.0.1";
515
+ok !tryone "::127.0.0.1", "127.0.0.1";
516
+ok !tryone "::127.0.0.1", "127/8";
517
+ok !tryone "127.0.0.1", "::7f00:0000/112";
519
+ok trynet "1.1/16", "1.1/16";
520
+ok trynet "1.1/16", "1.1/15";
521
+ok !trynet "1.1/16", "1.1/17";
522
+ok !trynet "1.1/16", "1.1.1/24";
523
+ok trynet "1.1.1/24", "1.1/16";
525
+ok trynet "DEAD:BEEF:0000:0102:0304:0506:0:0/96",
526
+ "DEAD:BEEF:0000:0102:0304:0506:0:0/96";
527
+ok trynet "DEAD:BEEF:0000:0102:0304:0506:0:0/96",
528
+ "DEAD:BEEF:0000:0102:0304:0506:0:0/95";
529
+ok trynet "DEAD:BEEF:0000:0102:0304:0506:0:0/96",
530
+ "DEAD:BEEF:0000:0102:0304:0506:1:1/90";
531
+ok !trynet "DEAD:BEEF:0000:0102:0304:0506:1:1/90",
532
+ "DEAD:BEEF:0000:0102:0304:0506:0:0/96";
534
diff -urNad spamassassin-3.2.5~/t/ip_addrs.t spamassassin-3.2.5/t/ip_addrs.t
535
--- spamassassin-3.2.5~/t/ip_addrs.t 2008-06-10 05:21:04.000000000 -0400
536
+++ spamassassin-3.2.5/t/ip_addrs.t 2009-08-09 15:42:28.000000000 -0400
538
rules_filename => "$prefix/rules",
546
my ($pat, $testip) = @_;
547
#warn "matching $testip gainst $pat\n";
548
if ($testip =~ /^$pat$/) {
551
use Mail::SpamAssassin::Constants qw(:all);
556
- ok (tryone ($pat, "127.0.0.1"));
557
- ok (tryone ($pat, "255.255.255.255"));
558
- ok (tryone ($pat, "1.0.0.1"));
559
- ok (tryone ($pat, "0.0.0.1"));
560
- ok (tryone ($pat, "255.5.4.128"));
561
- ok (!tryone ($pat, "255.5.n.128"));
562
- ok (!tryone ($pat, "-1.0.0.1"));
563
- ok (!tryone ($pat, "256.0.0.1"));
564
- ok (!tryone ($pat, "10.0.0.256"));
565
- ok (!tryone ($pat, "10.0.0.999999"));
566
- ok (!tryone ($pat, "255.5.-1.128"));
567
- ok (!tryone ($pat, "255.5.-1.128."));
568
- ok (!tryone ($pat, "100.1.2"));
569
- ok (!tryone ($pat, "100.1"));
570
+ ok tryone $pat, "127.0.0.1";
571
+ ok tryone $pat, "255.255.255.255";
572
+ ok tryone $pat, "1.0.0.1";
573
+ ok tryone $pat, "0.0.0.1";
574
+ ok tryone $pat, "255.5.4.128";
575
+ ok !tryone $pat, "255.5.n.128";
576
+ ok !tryone $pat, "-1.0.0.1";
577
+ ok !tryone $pat, "256.0.0.1";
578
+ ok !tryone $pat, "10.0.0.256";
579
+ ok !tryone $pat, "10.0.0.999999";
580
+ ok !tryone $pat, "255.5.-1.128";
581
+ ok !tryone $pat, "255.5.-1.128.";
582
+ ok !tryone $pat, "100.1.2";
583
+ ok !tryone $pat, "100.1";
586
-tryipv4s (Mail::SpamAssassin::Constants::IPV4_ADDRESS);
587
-tryipv4s (Mail::SpamAssassin::Constants::IP_ADDRESS);
588
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210"));
589
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "::ffff:64.142.3.173"));
590
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "fec0::1"));
591
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "1080:0:0:0:8:800:200C:417A"));
592
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "1080::8:800:200C:417A"));
593
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "0:0:0:0:0:0:0:0"));
594
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "::"));
595
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "fec0:02::0060:1dff:fff7:2109"));
596
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "fec0:02::0060:1dff:ff1e:26ee"));
597
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "3ffe:ffff:0100:f101:0210:a4ff:fee3:9566"));
598
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "3ffe:ffff:100:f101:210:a4ff:fee3:9566"));
599
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "3ffe:ffff:100:f101::1"));
600
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "::1"));
601
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "::192.168.0.1"));
602
-ok (!tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210:"));
603
-ok (!tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210:9348"));
604
-ok (!tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "3ffe:fffff:100:f101:210:a4ff:fee3:9566"));
605
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "ff02:0:0:0:0:0:0:1"));
606
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "ff02:0:0:0:0:0:0:2"));
607
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "IPv6:::1"));
608
-ok (tryone (Mail::SpamAssassin::Constants::IP_ADDRESS, "IPv6:3ffe:2500:310:3:20a:95ff:fef5:246e"));
609
+tryipv4s Mail::SpamAssassin::Constants::IPV4_ADDRESS;
610
+tryipv4s Mail::SpamAssassin::Constants::IP_ADDRESS;
612
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "localhost"));
613
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "localhost.localdomain"));
614
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "127.0.0.1"));
615
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "::ffff:127.0.0.1"));
616
-ok (!tryone (Mail::SpamAssassin::Constants::LOCALHOST, ":::ffff:127.0.0.1"));
617
-ok (!tryone (Mail::SpamAssassin::Constants::LOCALHOST, "0000:0000:0000:ffff:127.0.0.1"));
618
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "0000:0000:0000:0000:0000:ffff:127.0.0.1"));
619
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "::1"));
620
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "0:0:0:0:0:0:0:1"));
621
-ok (!tryone (Mail::SpamAssassin::Constants::LOCALHOST, "3ffe:fffff:100:f101:210:a4ff:fee3:9566"));
622
-ok (!tryone (Mail::SpamAssassin::Constants::LOCALHOST, "::192.168.0.1"));
623
-ok (!tryone (Mail::SpamAssassin::Constants::LOCALHOST, "notlocalhost"));
624
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "IPv6:::1"));
625
-ok (!tryone (Mail::SpamAssassin::Constants::LOCALHOST, "IPv6:3ffe:2500:310:3:20a:95ff:fef5:246e"));
626
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210";
627
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "::ffff:64.142.3.173";
628
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "fec0::1";
629
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "1080:0:0:0:8:800:200C:417A";
630
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "1080::8:800:200C:417A";
631
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "0:0:0:0:0:0:0:0";
632
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "::";
633
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "fec0:02::0060:1dff:fff7:2109";
634
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "fec0:02::0060:1dff:ff1e:26ee";
635
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "3ffe:ffff:0100:f101:0210:a4ff:fee3:9566";
636
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "3ffe:ffff:100:f101:210:a4ff:fee3:9566";
637
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "3ffe:ffff:100:f101::1";
638
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "::1";
639
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "::192.168.0.1";
640
+ok !tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210:";
641
+ok !tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210:9348";
642
+ok !tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "3ffe:fffff:100:f101:210:a4ff:fee3:9566";
643
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "ff02:0:0:0:0:0:0:1";
644
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "ff02:0:0:0:0:0:0:2";
645
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "IPv6:::1";
646
+ok tryone Mail::SpamAssassin::Constants::IP_ADDRESS, "IPv6:3ffe:2500:310:3:20a:95ff:fef5:246e";
648
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "::0:0:0:0:0:0:1"));
649
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "::0:0:0:0:1"));
650
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "0::0:0:0:0:0:1"));
651
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "0:0::0:0:0:0:1"));
652
-ok (tryone (Mail::SpamAssassin::Constants::LOCALHOST, "0:0:0::0:0:1"));
653
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "localhost";
654
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "localhost.localdomain";
655
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "127.0.0.1";
656
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "::ffff:127.0.0.1";
657
+ok !tryone Mail::SpamAssassin::Constants::LOCALHOST, ":::ffff:127.0.0.1";
658
+ok !tryone Mail::SpamAssassin::Constants::LOCALHOST, "0000:0000:0000:ffff:127.0.0.1";
659
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "0000:0000:0000:0000:0000:ffff:127.0.0.1";
660
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "::1";
661
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "0:0:0:0:0:0:0:1";
662
+ok !tryone Mail::SpamAssassin::Constants::LOCALHOST, "3ffe:fffff:100:f101:210:a4ff:fee3:9566";
663
+ok !tryone Mail::SpamAssassin::Constants::LOCALHOST, "::192.168.0.1";
664
+ok !tryone Mail::SpamAssassin::Constants::LOCALHOST, "notlocalhost";
665
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "IPv6:::1";
666
+ok !tryone Mail::SpamAssassin::Constants::LOCALHOST, "IPv6:3ffe:2500:310:3:20a:95ff:fef5:246e";
668
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "::0:0:0:0:0:0:1";
669
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "::0:0:0:0:1";
670
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "0::0:0:0:0:0:1";
671
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "0:0::0:0:0:0:1";
672
+ok tryone Mail::SpamAssassin::Constants::LOCALHOST, "0:0:0::0:0:1";
675
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "127.0.0.1";
676
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "::ffff:127.0.0.1";
677
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, ":::ffff:127.0.0.1";
678
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "0000:0000:0000:ffff:127.0.0.1";
679
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "0000:0000:0000:0000:0000:ffff:127.0.0.1";
680
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "192.168.12.3";
681
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "::ffff:192.168.12.3";
682
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, ":::ffff:192.168.12.3";
683
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "0000:0000:0000:ffff:192.168.12.3";
684
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "0000:0000:0000:0000:0000:ffff:192.168.12.3";
685
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "::1";
686
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "0:0:0:0:0:0:0:1";
687
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "3ffe:fffff:100:f101:210:a4ff:fee3:9566";
688
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "::192.168.0.1";
689
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "notlocalhost";
690
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "IPv6:::1";
691
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "IPv6:3ffe:2500:310:3:20a:95ff:fef5:246e";
693
+# fe80::/10 link-local
694
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "IPv6:fe80:2500:310:3:20a:95ff:fef5:246e";
695
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "IPv6:fe93:2500:310:3:20a:95ff:fef5:246e";
696
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "fea9:2500:310:3:20a:95ff:fef5:246e";
697
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "feb0::310:3:20a:95ff:fef5:246e";
698
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "fec0:2500:310:3:20a:95ff:fef5:246e";
699
+ok !tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "fe7f:2500:310:3:20a:95ff:fef5:246e";
701
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "::0:0:0:0:0:0:1";
702
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "::0:0:0:0:1";
703
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "0::0:0:0:0:0:1";
704
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "0:0::0:0:0:0:1";
705
+ok tryone Mail::SpamAssassin::Constants::IP_PRIVATE, "0:0:0::0:0:1";
711
my $got = Mail::SpamAssassin::Util::RegistrarBoundaries::trim_domain ($dom);
712
@@ -116,13 +149,13 @@
716
-ok (tsttrim ("foo.demon.co.uk", "foo.demon.co.uk"));
717
-ok (tsttrim ("bar.foo.demon.co.uk", "foo.demon.co.uk"));
718
-ok (tsttrim ("a.b.c.d.e.f.g.g.h.bar.foo.demon.co.uk", "foo.demon.co.uk"));
719
-ok (tsttrim ("de", "de"));
720
-ok (tsttrim ("jmason.org", "jmason.org"));
721
-ok (tsttrim ("localhost.jmason.org", "jmason.org"));
722
-ok (tsttrim ("localhost.jmason.edu.au", "jmason.edu.au"));
723
-ok (tsttrim ("localhost.jmason.hacked.au", "hacked.au"));
724
-ok (tsttrim ("localhost.jmason.edu.net", "edu.net"));
725
+ok tsttrim "foo.demon.co.uk", "foo.demon.co.uk";
726
+ok tsttrim "bar.foo.demon.co.uk", "foo.demon.co.uk";
727
+ok tsttrim "a.b.c.d.e.f.g.g.h.bar.foo.demon.co.uk", "foo.demon.co.uk";
728
+ok tsttrim "de", "de";
729
+ok tsttrim "jmason.org", "jmason.org";
730
+ok tsttrim "localhost.jmason.org", "jmason.org";
731
+ok tsttrim "localhost.jmason.edu.au", "jmason.edu.au";
732
+ok tsttrim "localhost.jmason.hacked.au", "hacked.au";
733
+ok tsttrim "localhost.jmason.edu.net", "edu.net";
735
diff -urNad spamassassin-3.2.5~/t/rcvd_parser.t spamassassin-3.2.5/t/rcvd_parser.t
736
--- spamassassin-3.2.5~/t/rcvd_parser.t 2008-06-10 05:21:04.000000000 -0400
737
+++ spamassassin-3.2.5/t/rcvd_parser.t 2009-08-09 15:42:28.000000000 -0400
740
use lib '.'; use lib 't';
741
use SATest; sa_t_init("rcvd_parser");
742
-use Test; BEGIN { plan tests => 130 };
743
+use Test; BEGIN { plan tests => 131 };
750
'from rc3.isc.org (rc3.isc.org [IPv6:2001:4f8:3:bb::25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sf1.isc.org (Postfix) with ESMTP id C986F284EE for <jm@jmason.org>; Sat, 16 Oct 2004 21:30:02 +0000 (UTC) (envelope-from bind-users-bounce@isc.org)' =>
752
+ '[ ip=2001:4f8:3:bb::25 rdns=rc3.isc.org helo=rc3.isc.org by=sf1.isc.org ident= envfrom=bind-users-bounce@isc.org id=C986F284EE auth= msa=0 ]',
754
'from ausisaps301-dmz.aus.amer.dell.com ([143.166.226.16]) (SquirrelMail authenticated user hoolis); by www.penguintowne.org with HTTP; Mon, 22 Mar 2004 12:54:13 -0600 (CST)' =>
758
'from [86.122.158.69] by mta2.iomartmail.com; Thu, 2 Aug 2007 21:50:04 -0200' =>
759
'[ ip=86.122.158.69 rdns= helo=!86.122.158.69! by=mta2.iomartmail.com ident= envfrom= id= auth= msa=0 ]',
761
+ 'from ([89.79.20.16]) by pop3.m80.net with MailEnable ESMTP; Tue, 20 Feb 2007 09:26:17 -0500' =>
762
+ '[ ip=89.79.20.16 rdns= helo= by=pop3.m80.net ident= envfrom= id= auth= msa=0 ]'
766
diff -urNad spamassassin-3.2.5~/t/trust_path.t spamassassin-3.2.5/t/trust_path.t
767
--- spamassassin-3.2.5~/t/trust_path.t 2008-06-10 05:21:04.000000000 -0400
768
+++ spamassassin-3.2.5/t/trust_path.t 2009-08-09 15:42:28.000000000 -0400
771
use lib '.'; use lib 't';
772
use SATest; sa_t_init("trust_path");
773
-use Test; BEGIN { plan tests => 81 };
774
+use Test; BEGIN { plan tests => 96 };
781
# ---------------------------------------------------------------------------
786
+ trusted_networks DEAD:BEEF:0000:0102:0304:0506:0708:0a0b
787
+ Received: from sender.net (sender.net [DEAD:BEEF:0000:0102:0304:0506:0708:0a0b])
788
+ by receiver.net (Postfix) with ESMTP id A96E18BD97
792
+Trusted: [ ip=DEAD:BEEF:0000:0102:0304:0506:0708:0a0b rdns=sender.net helo=sender.net by=receiver.net ident= envfrom= intl=1 id=A96E18BD97 auth= msa=0 ]
797
+# ---------------------------------------------------------------------------
802
+ trusted_networks DEAD:BEEF:0000:0102:0304:0506:0708:0a0b
803
+ Received: from sender.net (sender.net [IPv6:2002:abcd:ef10::1])
804
+ by receiver.net (Postfix) with ESMTP id A96E18BD97
809
+Untrusted: [ ip=2002:abcd:ef10::1 rdns=sender.net helo=sender.net by=receiver.net ident= envfrom= intl=0 id=A96E18BD97 auth= msa=0 ]
813
+# ---------------------------------------------------------------------------
815
+# ::1 implicitly trusted as default
818
+ Received: from sender.net (::1) by receiver.net
819
+ with SMTP; 10 Nov 2005 00:00:00 -0000
823
+Trusted: [ ip=::1 rdns=sender.net helo=sender.net by=receiver.net ident= envfrom= intl=1 id= auth= msa=0 ]
828
+# ---------------------------------------------------------------------------
832
+ trusted_networks DEAD:BEEF:0000:0102:0304:0506:0708:0000/108
833
+ Received: from sender.net (sender.net [DEAD:BEEF:0000:0102:0304:0506:0708:0a0b])
834
+ by receiver.net (Postfix) with ESMTP id A96E18BD97
838
+Trusted: [ ip=DEAD:BEEF:0000:0102:0304:0506:0708:0a0b rdns=sender.net helo=sender.net by=receiver.net ident= envfrom= intl=1 id=A96E18BD97 auth= msa=0 ]
843
+# ---------------------------------------------------------------------------
847
+ trusted_networks DEAD:BEEF:0000:0102:0304:0506:0708:0a0c
848
+ Received: from sender.net (sender.net [DEAD:BEEF:0000:0102:0304:0506:0708:0a0b])
849
+ by receiver.net (Postfix) with ESMTP id A96E18BD97
854
+Untrusted: [ ip=DEAD:BEEF:0000:0102:0304:0506:0708:0a0b rdns=sender.net helo=sender.net by=receiver.net ident= envfrom= intl=0 id=A96E18BD97 auth= msa=0 ]
858
+# ---------------------------------------------------------------------------
863
print "[netset warning expected here...]\n";
866
- my $sa = create_saobj({ userprefs_filename => "log/tst.cf" });
867
+ my $sa = create_saobj({
868
+ userprefs_filename => "log/tst.cf",
873
$sa->{lint_callback} = sub {