aboutsummaryrefslogtreecommitdiff
path: root/mail/p5-Mail-SpamAssassin
diff options
context:
space:
mode:
authorWesley Shields <wxs@FreeBSD.org>2011-06-27 02:44:36 +0000
committerWesley Shields <wxs@FreeBSD.org>2011-06-27 02:44:36 +0000
commit4a00bc0a6ad68ea91892ea0a5eabcfba7d7b77d1 (patch)
tree4079121bcad049ef4491354a1ecb3f96316b7006 /mail/p5-Mail-SpamAssassin
parent533bf6c2be3ec9eae50acb07e658e016d1a7bec1 (diff)
downloadports-4a00bc0a6ad68ea91892ea0a5eabcfba7d7b77d1.tar.gz
ports-4a00bc0a6ad68ea91892ea0a5eabcfba7d7b77d1.zip
- Update to 3.3.2. Now works with perl 5.12+ with no warnings.
- Separate out RUN_DEPENDS and BUILD_DEPENDS. - Do not hardcode spamd as the user in the RC script. - Use @stopdaemon. - Add a patch from upstream that fixes a bug when using MYSQL. PR: ports/158267 Submitted by: Michael Scheidell <scheidell@secnap.net> (maintainer)
Notes
Notes: svn path=/head/; revision=276475
Diffstat (limited to 'mail/p5-Mail-SpamAssassin')
-rw-r--r--mail/p5-Mail-SpamAssassin/Makefile18
-rw-r--r--mail/p5-Mail-SpamAssassin/distinfo4
-rw-r--r--mail/p5-Mail-SpamAssassin/files/patch-DKIM.pm66
-rw-r--r--mail/p5-Mail-SpamAssassin/files/patch-bug6392225
-rw-r--r--mail/p5-Mail-SpamAssassin/files/patch-bug639613
-rw-r--r--mail/p5-Mail-SpamAssassin/files/patch-bug648818
-rw-r--r--mail/p5-Mail-SpamAssassin/files/patch-bug662488
-rw-r--r--mail/p5-Mail-SpamAssassin/pkg-install10
-rw-r--r--mail/p5-Mail-SpamAssassin/pkg-plist7
9 files changed, 108 insertions, 341 deletions
diff --git a/mail/p5-Mail-SpamAssassin/Makefile b/mail/p5-Mail-SpamAssassin/Makefile
index 551b12a52c7d..9b699054133f 100644
--- a/mail/p5-Mail-SpamAssassin/Makefile
+++ b/mail/p5-Mail-SpamAssassin/Makefile
@@ -6,8 +6,7 @@
#
PORTNAME= Mail-SpamAssassin
-PORTVERSION= 3.3.1
-PORTREVISION= 4
+PORTVERSION= 3.3.2
CATEGORIES= mail perl5
MASTER_SITES= ${MASTER_SITE_APACHE:S/$/:apache/} ${MASTER_SITE_PERL_CPAN:S/$/:cpan/}
MASTER_SITE_SUBDIR= spamassassin/source/:apache Mail/:cpan
@@ -23,7 +22,12 @@ RUN_DEPENDS= p5-NetAddr-IP>=4.00.7:${PORTSDIR}/net-mgmt/p5-NetAddr-IP \
${SITE_PERL}/Bundle/LWP.pm:${PORTSDIR}/www/p5-libwww \
${SITE_PERL}/${PERL_ARCH}/Encode/Detect.pm:${PORTSDIR}/converters/p5-Encode-Detect \
${SITE_PERL}/Mail/Internet.pm:${PORTSDIR}/mail/p5-Mail-Tools
-BUILD_DEPENDS= ${RUN_DEPENDS}
+BUILD_DEPENDS= p5-NetAddr-IP>=4.00.7:${PORTSDIR}/net-mgmt/p5-NetAddr-IP \
+ p5-Net-DNS>=0.63:${PORTSDIR}/dns/p5-Net-DNS \
+ p5-HTML-Parser>=3.43:${PORTSDIR}/www/p5-HTML-Parser \
+ ${SITE_PERL}/Bundle/LWP.pm:${PORTSDIR}/www/p5-libwww \
+ ${SITE_PERL}/${PERL_ARCH}/Encode/Detect.pm:${PORTSDIR}/converters/p5-Encode-Detect \
+ ${SITE_PERL}/Mail/Internet.pm:${PORTSDIR}/mail/p5-Mail-Tools
CONFLICTS= ja-p5-Mail-SpamAssassin-[0-9]*
@@ -207,7 +211,7 @@ MAN3= Mail::SpamAssassin.3 \
spamassassin-run.3
MAN1= spamd.1 spamassassin.1 spamc.1 sa-learn.1 sa-update.1 \
- spamassassin-run.1 sa-compile.1
+ spamassassin-run.1 sa-compile.1 sa-awl.1
DOCSDIR= ${PREFIX}/share/doc/${PKGNAMEPREFIX}${PORTNAME}
DATADIR= ${PREFIX}/share/spamassassin
@@ -224,7 +228,7 @@ SUB_LIST+= SQL_FLAG="-Q"
SUB_LIST+= SQL_FLAG=""
.endif
.if !defined(WITH_AS_ROOT)
-SUB_LIST+= RUN_AS_USER="-u spamd -H /var/spool/spamd"
+SUB_LIST+= RUN_AS_USER="-u ${USERS} -H /var/spool/spamd"
.else
SUB_LIST+= RUN_AS_USER=""
.endif
@@ -274,7 +278,7 @@ post-build:
.endif
pre-su-install:
- @${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL
+ @USER=${USERS} GROUP=${GROUPS} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL
@${INSTALL_PROGRAM} ${WRKSRC}/spamc/libspamc.so ${PREFIX}/lib/libspamc.so.0
@${LN} -sf libspamc.so.0 ${PREFIX}/lib/libspamc.so
.if !defined(WITHOUT_SSL)
@@ -299,7 +303,7 @@ post-install:
@[ -f ${PREFIX}/etc/mail/spamassassin/v320.pre ] || \
${CP} ${PREFIX}/etc/mail/spamassassin/v320.pre.sample \
${PREFIX}/etc/mail/spamassassin/v320.pre
- @PKG_PREFIX=${PREFIX} BATCH=${BATCH} SU_CMD="${SU_CMD}" ${SH} ${PKGDIR}/pkg-install ${PKGNAME} POST-INSTALL
+ @PKG_PREFIX=${PREFIX} BATCH=${BATCH} SU_CMD="${SU_CMD}" USER=${USERS} GROUP=${GROUPS} ${SH} ${PKGDIR}/pkg-install ${PKGNAME} POST-INSTALL
@[ -f ${PREFIX}/etc/mail/spamassassin/v330.pre ] || \
${CP} ${PREFIX}/etc/mail/spamassassin/v330.pre.sample \
${PREFIX}/etc/mail/spamassassin/v330.pre
diff --git a/mail/p5-Mail-SpamAssassin/distinfo b/mail/p5-Mail-SpamAssassin/distinfo
index e935a052afd2..faa554038982 100644
--- a/mail/p5-Mail-SpamAssassin/distinfo
+++ b/mail/p5-Mail-SpamAssassin/distinfo
@@ -1,2 +1,2 @@
-SHA256 (Mail-SpamAssassin-3.3.1.tar.gz) = a11ca187150d5a8fc2904c4a50f29d3ff739294fa714aaab127ba692d65410ad
-SIZE (Mail-SpamAssassin-3.3.1.tar.gz) = 1196842
+SHA256 (Mail-SpamAssassin-3.3.2.tar.gz) = 5323038939a0ef9fc97d5264defce3ae1d95e98b3a94c4c3b583341c927f32df
+SIZE (Mail-SpamAssassin-3.3.2.tar.gz) = 1208182
diff --git a/mail/p5-Mail-SpamAssassin/files/patch-DKIM.pm b/mail/p5-Mail-SpamAssassin/files/patch-DKIM.pm
deleted file mode 100644
index e209eeb6a5dc..000000000000
--- a/mail/p5-Mail-SpamAssassin/files/patch-DKIM.pm
+++ /dev/null
@@ -1,66 +0,0 @@
---- lib/Mail/SpamAssassin/Plugin/DKIM.pm (revision 925052)
-+++ lib/Mail/SpamAssassin/Plugin/DKIM.pm (working copy)
-@@ -213,6 +213,19 @@
- in the SpamAssassin distribution. The whitelist score is lower, because
- these are often targets for abuse of public mailers which sign their mail.
-
-+=item unwhitelist_from_dkim author@example.com
-+
-+Removes an email address from def_whitelist_from_dkim and whitelist_from_dkim
-+tables, if it exists. Useful for removing undesired default entries from a
-+distributed configuration file by a local.cf file or by a C<user_prefs>.
-+Note that a parameter is a single email address - currently that address
-+is removed regardless of a signing-domain which may have been specified in a
-+whitelisting entry.
-+
-+The specified email address has to match exactly the address previously
-+used in a whitelist_from_dkim or def_whitelist_from_dkim directive
-+(with an exception that its domain name part is matched case-insensitively).
-+
- =item adsp_override domain [signing-practices]
-
- Currently few domains publish their signing practices (RFC 5617 - ADSP),
-@@ -362,6 +375,7 @@
- }
- my $address = $1;
- my $sdid = defined $2 ? $2 : ''; # empty implies author domain signature
-+ $address =~ s/(\@[^@]*)\z/lc($1)/e; # lowercase the email address domain
- $self->{parser}->add_to_addrlist_rcvd('whitelist_from_dkim',
- $address, $sdid);
- }
-@@ -381,12 +395,32 @@
- }
- my $address = $1;
- my $sdid = defined $2 ? $2 : ''; # empty implies author domain signature
-+ $address =~ s/(\@[^@]*)\z/lc($1)/e; # lowercase the email address domain
- $self->{parser}->add_to_addrlist_rcvd('def_whitelist_from_dkim',
- $address, $sdid);
- }
- });
-
- push (@cmds, {
-+ setting => 'unwhitelist_from_dkim',
-+ type => $Mail::SpamAssassin::Conf::CONF_TYPE_ADDRLIST,
-+ 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;
-+ }
-+ $value =~ s/(\@[^@]*)\z/lc($1)/e; # lowercase the email address domain
-+ $self->{parser}->remove_from_addrlist_rcvd('whitelist_from_dkim',
-+ $value);
-+ $self->{parser}->remove_from_addrlist_rcvd('def_whitelist_from_dkim',
-+ $value);
-+ }
-+ });
-+
-+ push (@cmds, {
- setting => 'adsp_override',
- type => $Mail::SpamAssassin::Conf::CONF_TYPE_HASH_KEY_VALUE,
- code => sub {
-
-
-
diff --git a/mail/p5-Mail-SpamAssassin/files/patch-bug6392 b/mail/p5-Mail-SpamAssassin/files/patch-bug6392
deleted file mode 100644
index 6125c497e8da..000000000000
--- a/mail/p5-Mail-SpamAssassin/files/patch-bug6392
+++ /dev/null
@@ -1,225 +0,0 @@
-Index: lib/Mail/SpamAssassin/HTML.pm
-===================================================================
---- lib/Mail/SpamAssassin/HTML.pm (revision 943932)
-+++ lib/Mail/SpamAssassin/HTML.pm (revision 943933)
-@@ -191,7 +191,7 @@
- my $self = shift;
- my %options = @_;
-
-- return join('', @{ $self->{text} }) unless keys %options;
-+ return join('', @{ $self->{text} }) unless %options;
-
- my $mask;
- while (my ($k, $v) = each %options) {
-Index: lib/Mail/SpamAssassin/Dns.pm
-===================================================================
---- lib/Mail/SpamAssassin/Dns.pm (revision 943932)
-+++ lib/Mail/SpamAssassin/Dns.pm (revision 943933)
-@@ -754,7 +754,7 @@
- dbg("dns: entering helper-app run mode");
- $self->{old_slash} = $/; # Razor pollutes this
- %{$self->{old_env}} = ();
-- if ( defined %ENV ) {
-+ if ( %ENV ) {
- # undefined values in %ENV can result due to autovivification elsewhere,
- # this prevents later possible warnings when we restore %ENV
- while (my ($key, $value) = each %ENV) {
-Index: lib/Mail/SpamAssassin/Plugin/Check.pm
-===================================================================
---- lib/Mail/SpamAssassin/Plugin/Check.pm (revision 943932)
-+++ lib/Mail/SpamAssassin/Plugin/Check.pm (revision 943933)
-@@ -307,64 +307,51 @@
- my $package_name = __PACKAGE__;
- my $methodname = $package_name."::_".$ruletype."_tests_".$clean_priority;
-
-- if (defined &{$methodname} && !$doing_user_rules) {
--run_compiled_method:
-- # dbg("rules: run_generic_tests - calling %s", $methodname);
-- my $t = Mail::SpamAssassin::Timeout->new({ deadline => $master_deadline });
-- my $err = $t->run(sub {
-- no strict "refs";
-- $methodname->($pms, @{$opts{args}});
-- });
-- if ($t->timed_out() && $master_deadline && time > $master_deadline) {
-- info("check: exceeded time limit in $methodname, skipping further tests");
-- $pms->{deadline_exceeded} = 1;
-- }
-- return;
-- }
-+ if (!defined &{$methodname} || $doing_user_rules) {
-
-- # use %nopts for named parameter-passing; it's more friendly to future-proof
-- # subclassing, since new parameters can be added without breaking third-party
-- # subclassed implementations of this plugin.
-- my %nopts = (
-- ruletype => $ruletype,
-- doing_user_rules => $doing_user_rules,
-- priority => $priority,
-- clean_priority => $clean_priority
-- );
-+ # use %nopts for named parameter-passing; it's more friendly
-+ # to future-proof subclassing, since new parameters can be added without
-+ # breaking third-party subclassed implementations of this plugin.
-+ my %nopts = (
-+ ruletype => $ruletype,
-+ doing_user_rules => $doing_user_rules,
-+ priority => $priority,
-+ clean_priority => $clean_priority
-+ );
-
-- # build up the eval string...
-- $self->{evalstr_methodname} = $methodname;
-- $self->{evalstr_chunk_current_methodname} = undef;
-- $self->{evalstr_chunk_methodnames} = [];
-- $self->{evalstr_chunk_prefix} = []; # stack (array) of source code sections
-- $self->{evalstr} = ''; $self->{evalstr_l} = 0;
-- $self->{evalstr2} = '';
-- $self->begin_evalstr_chunk($pms);
-+ # build up the eval string...
-+ $self->{evalstr_methodname} = $methodname;
-+ $self->{evalstr_chunk_current_methodname} = undef;
-+ $self->{evalstr_chunk_methodnames} = [];
-+ $self->{evalstr_chunk_prefix} = []; # stack (array) of source code sections
-+ $self->{evalstr} = ''; $self->{evalstr_l} = 0;
-+ $self->{evalstr2} = '';
-+ $self->begin_evalstr_chunk($pms);
-
-- $self->push_evalstr_prefix($pms, '
-- # start_rules_plugin_code '.$ruletype.' '.$priority.'
-- my $scoresptr = $self->{conf}->{scores};
-- ');
-- if (defined $opts{pre_loop_body}) {
-- $opts{pre_loop_body}->($self, $pms, $conf, %nopts);
-- }
-- $self->add_evalstr($pms,
-- $self->start_rules_plugin_code($ruletype, $priority) );
-- while (my($rulename, $test) = each %{$opts{testhash}->{$priority}}) {
-- $opts{loop_body}->($self, $pms, $conf, $rulename, $test, %nopts);
-- }
-- if (defined $opts{post_loop_body}) {
-- $opts{post_loop_body}->($self, $pms, $conf, %nopts);
-- }
-+ $self->push_evalstr_prefix($pms, '
-+ # start_rules_plugin_code '.$ruletype.' '.$priority.'
-+ my $scoresptr = $self->{conf}->{scores};
-+ ');
-+ if (defined $opts{pre_loop_body}) {
-+ $opts{pre_loop_body}->($self, $pms, $conf, %nopts);
-+ }
-+ $self->add_evalstr($pms,
-+ $self->start_rules_plugin_code($ruletype, $priority) );
-+ while (my($rulename, $test) = each %{$opts{testhash}->{$priority}}) {
-+ $opts{loop_body}->($self, $pms, $conf, $rulename, $test, %nopts);
-+ }
-+ if (defined $opts{post_loop_body}) {
-+ $opts{post_loop_body}->($self, $pms, $conf, %nopts);
-+ }
-
-- $self->flush_evalstr($pms, 'run_generic_tests');
-- $self->free_ruleset_source($pms, $ruletype, $priority);
-+ $self->flush_evalstr($pms, 'run_generic_tests');
-+ $self->free_ruleset_source($pms, $ruletype, $priority);
-
-- # clear out a previous version of this method
-- undef &{$methodname};
-+ # clear out a previous version of this method
-+ undef &{$methodname};
-
-- # generate the loop that goes through each line...
-- my $evalstr = <<"EOT";
-+ # generate the loop that goes through each line...
-+ my $evalstr = <<"EOT";
- {
- package $package_name;
-
-@@ -373,41 +360,52 @@
- sub $methodname {
- EOT
-
-- for my $chunk_methodname (@{$self->{evalstr_chunk_methodnames}}) {
-- $evalstr .= " $chunk_methodname(\@_);\n";
-- }
-+ for my $chunk_methodname (@{$self->{evalstr_chunk_methodnames}}) {
-+ $evalstr .= " $chunk_methodname(\@_);\n";
-+ }
-
-- $evalstr .= <<"EOT";
-+ $evalstr .= <<"EOT";
- }
-
- 1;
- }
- EOT
-
-- delete $self->{evalstr}; # free up some RAM before we eval()
-- delete $self->{evalstr2};
-- delete $self->{evalstr_methodname};
-- delete $self->{evalstr_chunk_current_methodname};
-- delete $self->{evalstr_chunk_methodnames};
-- delete $self->{evalstr_chunk_prefix};
-+ delete $self->{evalstr}; # free up some RAM before we eval()
-+ delete $self->{evalstr2};
-+ delete $self->{evalstr_methodname};
-+ delete $self->{evalstr_chunk_current_methodname};
-+ delete $self->{evalstr_chunk_methodnames};
-+ delete $self->{evalstr_chunk_prefix};
-
-- dbg("rules: run_generic_tests - compiling eval code: %s, priority %s",
-- $ruletype, $priority);
--# dbg("rules: eval code to compile: $evalstr");
-- my $eval_result;
-- { my $timer = $self->{main}->time_method('compile_gen');
-- $eval_result = eval($evalstr);
-- }
-- if (!$eval_result) {
-- my $eval_stat = $@ ne '' ? $@ : "errno=$!"; chomp $eval_stat;
-- warn "rules: failed to compile $ruletype tests, skipping:\n".
-- "\t($eval_stat)\n";
-- $pms->{rule_errors}++;
-- }
-- else {
-+ dbg("rules: run_generic_tests - compiling eval code: %s, priority %s",
-+ $ruletype, $priority);
-+ # dbg("rules: eval code to compile: $evalstr");
-+ my $eval_result;
-+ { my $timer = $self->{main}->time_method('compile_gen');
-+ $eval_result = eval($evalstr);
-+ }
-+ if (!$eval_result) {
-+ my $eval_stat = $@ ne '' ? $@ : "errno=$!"; chomp $eval_stat;
-+ warn "rules: failed to compile $ruletype tests, skipping:\n".
-+ "\t($eval_stat)\n";
-+ $pms->{rule_errors}++;
-+ return;
-+ }
- dbg("rules: compiled $ruletype tests");
-- goto run_compiled_method;
- }
-+
-+#run_compiled_method:
-+# dbg("rules: run_generic_tests - calling %s", $methodname);
-+ my $t = Mail::SpamAssassin::Timeout->new({ deadline => $master_deadline });
-+ my $err = $t->run(sub {
-+ no strict "refs";
-+ $methodname->($pms, @{$opts{args}});
-+ });
-+ if ($t->timed_out() && $master_deadline && time > $master_deadline) {
-+ info("check: exceeded time limit in $methodname, skipping further tests");
-+ $pms->{deadline_exceeded} = 1;
-+ }
- }
-
- sub begin_evalstr_chunk {
-Index: lib/Mail/SpamAssassin/Plugin/BodyEval.pm
-===================================================================
---- lib/Mail/SpamAssassin/Plugin/BodyEval.pm (revision 943932)
-+++ lib/Mail/SpamAssassin/Plugin/BodyEval.pm (revision 943933)
-@@ -119,7 +119,7 @@
- }
-
- # If there are no words, mark if there's at least 1 image ...
-- if (keys %html == 0 && exists $pms->{html}{inside}{img}) {
-+ if (!%html && exists $pms->{html}{inside}{img}) {
- # Use "\n" as the mark since it can't ever occur normally
- $html{"\n"}=1;
- }
diff --git a/mail/p5-Mail-SpamAssassin/files/patch-bug6396 b/mail/p5-Mail-SpamAssassin/files/patch-bug6396
deleted file mode 100644
index cfd9f3bd1926..000000000000
--- a/mail/p5-Mail-SpamAssassin/files/patch-bug6396
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: lib/Mail/SpamAssassin/Plugin/MIMEEval.pm
-===================================================================
---- lib/Mail/SpamAssassin/Plugin/MIMEEval.pm (revision 929342)
-+++ lib/Mail/SpamAssassin/Plugin/MIMEEval.pm (revision 929343)
-@@ -498,7 +498,7 @@
- # perhaps just limit to test, and image?
- next if ($ctype eq 'application/ics');
-
-- my $cte = lc $p->get_header('content-transfer-encoding') || '';
-+ my $cte = lc($p->get_header('content-transfer-encoding') || '');
- next if ($cte !~ /^base64$/);
- foreach my $l ( @{$p->raw()} ) {
- my $len = length $l;
diff --git a/mail/p5-Mail-SpamAssassin/files/patch-bug6488 b/mail/p5-Mail-SpamAssassin/files/patch-bug6488
deleted file mode 100644
index 08bb1cf534ad..000000000000
--- a/mail/p5-Mail-SpamAssassin/files/patch-bug6488
+++ /dev/null
@@ -1,18 +0,0 @@
-BUG 6488 - Lint errors with Perl 5.12.1 in AntiVirus.pm
-
-Index: lib/Mail/SpamAssassin/Plugin/AntiVirus.pm
-=========================================================================
---- lib/Mail/SpamAssassin/Plugin/AntiVirus.pm (revision 574664)
-+++ lib/Mail/SpamAssassin/Plugin/AntiVirus.pm (revision 1028149)
-@@ -98,9 +98,9 @@
- my ($ctype, $boundary, $charset, $name) =
- Mail::SpamAssassin::Util::parse_content_type($p->get_header('content-type'));
-
-- $name = lc $name || '';
-+ $name = lc($name || '');
-
-- my $cte = lc $p->get_header('content-transfer-encoding') || '';
-+ my $cte = lc($p->get_header('content-transfer-encoding') || '');
- $ctype = lc $ctype;
-
- if ($name && $name =~ /\.(?:ade|adp|asx|bas|bat|chm|cmd|com|cpl|crt|dll|exe|hlp|hta|inf|ins|isp|js|jse|lnk|mda|mdb|mde|mdt|mdw|mdz|msc|msi|msp|mst|nws|ops|pcd|pif|prf|reg|scf|scr\??|sct|shb|shs|shm|swf|url|vb|vbe|vbs|vbx|vxd|wsc|wsf|wsh)$/)
diff --git a/mail/p5-Mail-SpamAssassin/files/patch-bug6624 b/mail/p5-Mail-SpamAssassin/files/patch-bug6624
new file mode 100644
index 000000000000..54ee5573dadc
--- /dev/null
+++ b/mail/p5-Mail-SpamAssassin/files/patch-bug6624
@@ -0,0 +1,88 @@
+--- lib/Mail/SpamAssassin/BayesStore/MySQL.pm (revision 1138970)
++++ lib/Mail/SpamAssassin/BayesStore/MySQL.pm (working copy)
+@@ -840,14 +840,28 @@
+ return 0;
+ }
+
++ # With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if
++ # the row is inserted as a new row and 2 if an existing row is updated.
++ #
++ # Due to a MySQL server bug a value of 3 can be seen.
++ # See: http://bugs.mysql.com/bug.php?id=46675
++ # When executing the INSERT ... ON DUPLICATE KEY UPDATE statement
++ # and checking the rows return count:
++ # mysql_client_found_rows = 0: The second INSERT returns a row count
++ # of 2 in all MySQL versions.
++ # mysql_client_found_rows = 1: The second INSERT returns this row count:
++ # Before MySQL 5.1.20: 2
++ # MySQL 5.1.20: undef on Mac OS X, 139775481 on Linux (garbage?)
++ # MySQL 5.1.21 and up: 3
++ #
+ my $num_rows = $rc;
+
+ $sth->finish();
+
+- if ($num_rows == 1 || $num_rows == 2) {
++ if ($num_rows == 1 || $num_rows == 2 || $num_rows == 3) {
+ my $token_count_update = '';
+
+- $token_count_update = "token_count = token_count + 1," if ($num_rows == 1);
++ $token_count_update = "token_count = token_count + 1," if $num_rows == 1;
+ $sql = "UPDATE bayes_vars SET
+ $token_count_update
+ newest_token_age = GREATEST(newest_token_age, ?),
+@@ -872,7 +886,11 @@
+ }
+ else {
+ # $num_rows was not what we expected
+- dbg("bayes: _put_token: Updated an unexpected number of rows.");
++ my $token_displ = $token;
++ $token_displ =~ s/(.)/sprintf('%02x',ord($1))/egs;
++ dbg("bayes: _put_token: Updated an unexpected number of rows: %s, ".
++ "id: %s, token (hex): %s",
++ $num_rows, $self->{_userid}, $token_displ);
+ $self->{_dbh}->rollback();
+ return 0;
+ }
+@@ -987,8 +1005,24 @@
+ else {
+ my $num_rows = $rc;
+
+- $need_atime_update_p = 1 if ($num_rows == 1 || $num_rows == 2);
+- $new_tokens++ if ($num_rows == 1);
++ # With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if
++ # the row is inserted as a new row and 2 if an existing row is updated.
++ # But see MySQL bug (as above): http://bugs.mysql.com/bug.php?id=46675
++
++ if ($num_rows == 1) {
++ $new_tokens++;
++ $need_atime_update_p = 1;
++ } elsif ($num_rows == 2 || $num_rows == 3) {
++ $need_atime_update_p = 1;
++ } else {
++ # $num_rows was not what we expected
++ my $token_displ = $token;
++ $token_displ =~ s/(.)/sprintf('%02x',ord($1))/egs;
++ dbg("bayes: _put_tokens: Updated an unexpected number of rows: %s, ".
++ "id: %s, token (hex): %s",
++ $num_rows, $self->{_userid}, $token_displ);
++ $error_p = 1;
++ }
+ }
+ }
+
+@@ -1026,10 +1060,10 @@
+ }
+ }
+ else {
+- # $num_rows was not what we expected
+- dbg("bayes: _put_tokens: Updated an unexpected number of rows.");
+- $self->{_dbh}->rollback();
+- return 0;
++ info("bayes: _put_tokens: no atime updates needed? Num of tokens: %d",
++ scalar keys %{$tokens});
++# $self->{_dbh}->rollback();
++# return 0;
+ }
+ }
+
diff --git a/mail/p5-Mail-SpamAssassin/pkg-install b/mail/p5-Mail-SpamAssassin/pkg-install
index f2ec36333236..568dc5e832e4 100644
--- a/mail/p5-Mail-SpamAssassin/pkg-install
+++ b/mail/p5-Mail-SpamAssassin/pkg-install
@@ -1,9 +1,7 @@
#!/bin/sh
PKG_PREFIX=${PKG_PREFIX:-/usr/local}
-USER=spamd
-GROUP=${USER}
-UID=58
-GID=${UID}
+USER=${USER:-spamd}
+GROUP=${GROUP:-spamd}
HOME=/var/spool/${USER}
if [ "$2" = "POST-INSTALL" ];then
@@ -34,10 +32,10 @@ yesno() {
}
# Create pid directory
- install -d -g ${USER} -g ${GROUP} /var/run/spamd
+ install -d -o ${USER} -g ${GROUP} /var/run/spamd
/usr/bin/su root -c "${PKG_PREFIX}/bin/spamassassin -x -L --lint"
- if [ ${?} -eq 255 ];then
+ if [ ${?} -eq 9 ];then
echo "***********************************************"
echo "*__ ___ ____ _ _ ___ _ _ ____ *"
echo "*\ \ / / \ | _ \| \ | |_ _| \ | |/ ___|*"
diff --git a/mail/p5-Mail-SpamAssassin/pkg-plist b/mail/p5-Mail-SpamAssassin/pkg-plist
index f3ec23c6b92c..ba54cd6073ce 100644
--- a/mail/p5-Mail-SpamAssassin/pkg-plist
+++ b/mail/p5-Mail-SpamAssassin/pkg-plist
@@ -1,5 +1,4 @@
-@unexec %D/etc/rc.d/sa-spamd.sh stop > /dev/null 2>&1 || true
-@unexec %D/etc/rc.d/sa-spamd stop > /dev/null 2>&1 || true
+@stopdaemon sa-spamd
bin/sa-awl
bin/sa-check_spamd
bin/sa-compile
@@ -134,7 +133,7 @@ lib/libspamc.so.0
@unexec rm -rf /var/lib/spamassassin/2* || true
@unexec rmdir /var/lib/spamassassin 2>/dev/null || true
@unexec rmdir /var/lib 2>/dev/null || true
-@unexec rmdir /var/db/spamassassin || true
+@unexec rmdir /var/db/spamassassin 2>/dev/null || true
@dirrm %%DATADIR%%
@dirrm %%SITE_PERL%%/%%PERL_ARCH%%/auto/Mail/SpamAssassin
@dirrmtry %%SITE_PERL%%/%%PERL_ARCH%%/auto/Mail
@@ -151,4 +150,4 @@ lib/libspamc.so.0
@dirrmtry %%SITE_PERL%%/Mail
@dirrmtry etc/mail/spamassassin
@dirrmtry etc/mail
-@dirrmtry /var/run/spamd
+@unexec rm -rf /var/run/spamd || true