From owner-freebsd-ports-bugs@FreeBSD.ORG Fri Jun 24 19:30:17 2011 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8DE2E106566C for ; Fri, 24 Jun 2011 19:30:17 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id 698F08FC15 for ; Fri, 24 Jun 2011 19:30:17 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p5OJUHbY050683 for ; Fri, 24 Jun 2011 19:30:17 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p5OJUHEP050680; Fri, 24 Jun 2011 19:30:17 GMT (envelope-from gnats) Resent-Date: Fri, 24 Jun 2011 19:30:17 GMT Resent-Message-Id: <201106241930.p5OJUHEP050680@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Michael Scheidell Received: from mx1.freebsd.org (unknown [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 044E81065670 for ; Fri, 24 Jun 2011 19:27:08 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (red.freebsd.org [69.147.83.34]) by mx1.freebsd.org (Postfix) with ESMTP id E74A68FC18 for ; Fri, 24 Jun 2011 19:27:07 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p5OJR7Sx072378 for ; Fri, 24 Jun 2011 19:27:07 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.4/8.14.4/Submit) id p5OJR7u8072377; Fri, 24 Jun 2011 19:27:07 GMT (envelope-from nobody) Message-Id: <201106241927.p5OJR7u8072377@red.freebsd.org> Date: Fri, 24 Jun 2011 19:27:07 GMT From: Michael Scheidell To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: ports/158267: [Maintainer-Update] ports/p5-Mail-SpamAssassin X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Jun 2011 19:30:17 -0000 >Number: 158267 >Category: ports >Synopsis: [Maintainer-Update] ports/p5-Mail-SpamAssassin >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Fri Jun 24 19:30:16 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Michael Scheidell >Release: lots of them >Organization: SECNAP Network Security >Environment: na. supports all current versions of freebsd, as of the date of this port. might support old ones also, but don't email me if it doesn't. >Description: Update SA 3.3.1 to current version 3.3.2. remove these files, fixed in 3.3.2 trunk: files/patch-DKIM.pm, files/patch-bug6392 files/patch-bug6396 files/patch-bug6488 replaces pr 157982, thanks to Chris Rees (don't use absolute path's, use stopdaemin, and not ../spamd.(sh) stop) (committers: please close pr 157982) ADDED FILE: files/patch-bug6624 CRITICAL BUG FIX, was in 3.3.2 also: new versions of mysql broke bayes store (sometimes) Minor bug fix: pkg-install was not asking for sa-update because rc from lint changed. Minor bug, continuation of pr 157584, USERS/GROUPS hardwired. make a couple changes to Makefile and pkg-install do make this follow ${USERS} and not 'spamd' fat fingers: open a pr if this breaks something please changed Makefile: build_depends != run_depends (it does, its duplicated, but the side affect of having build_depends = run_depends in Makefile, is that binary packages have more dependencies then they should. >How-To-Repeat: na >Fix: apply attached patch, run sa-update (optionally sa-compile) restart spamd/amavisd, whatever is running your SpamAssassin Patch attached with submission follows: diff -bBru /var/tmp/sa331/Makefile ./Makefile --- /var/tmp/sa331/Makefile 2011-06-07 19:23:51.000000000 -0400 +++ ./Makefile 2011-06-24 15:20:26.000000000 -0400 @@ -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 @@ ${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]* @@ -224,7 +228,7 @@ 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 @@ .endif pre-su-install: - @${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL + @${SH} USER=${USERS} GROUP=${GROUPS} ${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 @@ @[ -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 -bBru /var/tmp/sa331/distinfo ./distinfo --- /var/tmp/sa331/distinfo 2011-06-07 19:23:51.000000000 -0400 +++ ./distinfo 2011-06-24 06:42:10.000000000 -0400 @@ -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 -bBru /var/tmp/sa331/files/patch-DKIM.pm ./files/patch-DKIM.pm --- /var/tmp/sa331/files/patch-DKIM.pm 2010-04-08 09:13:01.000000000 -0400 +++ ./files/patch-DKIM.pm 2011-06-24 06:38:31.000000000 -0400 @@ -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. -+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 -bBru /var/tmp/sa331/files/patch-bug6392 ./files/patch-bug6392 --- /var/tmp/sa331/files/patch-bug6392 2010-10-06 06:38:09.000000000 -0400 +++ ./files/patch-bug6392 2011-06-24 06:38:23.000000000 -0400 @@ -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 -bBru /var/tmp/sa331/files/patch-bug6396 ./files/patch-bug6396 --- /var/tmp/sa331/files/patch-bug6396 2010-10-06 06:38:09.000000000 -0400 +++ ./files/patch-bug6396 2011-06-24 06:37:44.000000000 -0400 @@ -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 -bBru /var/tmp/sa331/files/patch-bug6488 ./files/patch-bug6488 --- /var/tmp/sa331/files/patch-bug6488 2011-06-07 19:23:51.000000000 -0400 +++ ./files/patch-bug6488 2011-06-24 06:37:51.000000000 -0400 @@ -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 -bBru /var/tmp/sa331/files/patch-bug6624 ./files/patch-bug6624 --- /var/tmp/sa331/files/patch-bug6624 2011-06-24 13:27:06.000000000 -0400 +++ ./files/patch-bug6624 2011-06-24 13:26:12.000000000 -0400 @@ -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 -bBru /var/tmp/sa331/pkg-install ./pkg-install --- /var/tmp/sa331/pkg-install 2011-06-07 19:23:51.000000000 -0400 +++ ./pkg-install 2011-06-24 13:39:33.000000000 -0400 @@ -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 @@ } # 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 -bBru /var/tmp/sa331/pkg-plist ./pkg-plist --- /var/tmp/sa331/pkg-plist 2010-02-10 08:37:11.000000000 -0500 +++ ./pkg-plist 2011-06-24 07:56:24.000000000 -0400 @@ -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 @@ @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 @@ @dirrmtry %%SITE_PERL%%/Mail @dirrmtry etc/mail/spamassassin @dirrmtry etc/mail -@dirrmtry /var/run/spamd +@unexec rm -rf /var/run/spamd || true >Release-Note: >Audit-Trail: >Unformatted: