diff options
-rwxr-xr-x | bin/spamcat | 4 | ||||
-rw-r--r-- | lib/SpamCat.pm | 20 | ||||
-rw-r--r-- | t/fixtures/always-allowed | 14 | ||||
-rw-r--r-- | t/fixtures/always-allowed.expected | 14 | ||||
-rw-r--r-- | t/lib.t | 23 |
5 files changed, 56 insertions, 19 deletions
diff --git a/bin/spamcat b/bin/spamcat index 25f04d2..60fdf46 100755 --- a/bin/spamcat +++ b/bin/spamcat @@ -30,7 +30,9 @@ Show database row for C<sender>. =item set C<sender> C<count> -Set C<sender>'s remaining message count to C<count>. +Set C<sender>'s remaining message count to C<count>. If C<count> is +less than 0, then mail from C<sender> will not be limited and always +be sent unmodified. =item dumpconfig diff --git a/lib/SpamCat.pm b/lib/SpamCat.pm index 0f3c8b8..7dff474 100644 --- a/lib/SpamCat.pm +++ b/lib/SpamCat.pm @@ -47,15 +47,17 @@ sub deliver { if (defined $count) { return if $count == 0; - my $count_str = '[' . $count . '/' . $self->{default_count} . ']'; - my $new_subject = $email->header('Subject'); - if ($new_subject) { - $new_subject .= ' - ' . $count_str; - } else { - $new_subject = $count_str; + if ($count > 0) { + my $count_str = '[' . $count . '/' . $self->{default_count} . ']'; + my $new_subject = $email->header('Subject'); + if ($new_subject) { + $new_subject .= ' - ' . $count_str; + } else { + $new_subject = $count_str; + } + $email->header_set('Subject' => $new_subject); + $email->header_set('X-SpamCat-Remaining' => $count); } - $email->header_set('Subject' => $new_subject); - $email->header_set('X-SpamCat-Remaining' => $count); } my $deliverfh = IO::File->new("| " . $self->{deliver}) || @@ -163,7 +165,7 @@ sub decrement_count_t { $count = $self->{default_count}; $q = 'INSERT INTO emails (count, sender) VALUES (?, ?)'; } else { - $count = $count <= 0 ? '0' : $count - 1; + $count = $count <= 0 ? $count : $count - 1; $q = "UPDATE emails SET count = ?, modified = CURRENT_TIMESTAMP WHERE sender = ?"; } diff --git a/t/fixtures/always-allowed b/t/fixtures/always-allowed new file mode 100644 index 0000000..b383d1a --- /dev/null +++ b/t/fixtures/always-allowed @@ -0,0 +1,14 @@ +Return-Path: <test@mta.example.com>
+Delivered-To: spamcat@example.com
+Received: from mta.example.com
+ by mta.example.com (Dovecot) with LMTP id 9DDcI25oblTvgAEAQc1eRg
+ for <spamcat@example.com>; Thu, 20 Nov 2014 17:17:18 -0500
+Received: by mta.example.com (Postfix, from userid 1001)
+ id 844956F1EE; Thu, 20 Nov 2014 17:17:18 -0500 (EST)
+To: always-allowed@spamcat.example.com
+Subject: test
+Message-Id: <always-allowed@mta.example.com>
+Date: Thu, 20 Nov 2014 17:17:18 -0500 (EST)
+From: sender@example.com (Spamcat Sender)
+
+Sample email.
diff --git a/t/fixtures/always-allowed.expected b/t/fixtures/always-allowed.expected new file mode 100644 index 0000000..b383d1a --- /dev/null +++ b/t/fixtures/always-allowed.expected @@ -0,0 +1,14 @@ +Return-Path: <test@mta.example.com>
+Delivered-To: spamcat@example.com
+Received: from mta.example.com
+ by mta.example.com (Dovecot) with LMTP id 9DDcI25oblTvgAEAQc1eRg
+ for <spamcat@example.com>; Thu, 20 Nov 2014 17:17:18 -0500
+Received: by mta.example.com (Postfix, from userid 1001)
+ id 844956F1EE; Thu, 20 Nov 2014 17:17:18 -0500 (EST)
+To: always-allowed@spamcat.example.com
+Subject: test
+Message-Id: <always-allowed@mta.example.com>
+Date: Thu, 20 Nov 2014 17:17:18 -0500 (EST)
+From: sender@example.com (Spamcat Sender)
+
+Sample email.
@@ -1,6 +1,6 @@ # -*- Mode: cperl -*- -use Test::More tests => 42; +use Test::More tests => 46; use strict; use warnings; @@ -66,18 +66,23 @@ test_file('wrongdomain', 1); test_file('nosubj', 1); test_file('bar', 0); +$sch->set_count('always-allowed', -1); +test_file('always-allowed', 1); + ok(SpamCat->can('get_table')); my @rows = @{$sch->get_table()}; -is($#rows, 3); +is($#rows, 4); @rows = sort { $a->{sender} cmp $b->{sender} } @rows; -is($rows[0]->{sender}, 'bar'); -is($rows[0]->{count}, 0); -is($rows[1]->{sender}, 'foo'); -is($rows[1]->{count}, 16); -is($rows[2]->{sender}, 'name1'); -is($rows[2]->{count}, 20); -is($rows[3]->{sender}, 'nosubj'); +is($rows[0]->{sender}, 'always-allowed'); +is($rows[0]->{count}, -1); +is($rows[1]->{sender}, 'bar'); +is($rows[1]->{count}, 0); +is($rows[2]->{sender}, 'foo'); +is($rows[2]->{count}, 16); +is($rows[3]->{sender}, 'name1'); is($rows[3]->{count}, 20); +is($rows[4]->{sender}, 'nosubj'); +is($rows[4]->{count}, 20); sub test_file { my ($filen, $should_exist) = @_; |