On Fri, Dec 25, 2009 at 03:19:28PM -0500, Warren Togami wrote: > Apache SpamAssassin 3.3.0-rc1 is now available for testing. > > Downloads are available from > http://people.apache.org/~wtogami/devel/ > > md5sum of archive files: > > 41a68daf1bae2ded652a74c77b1fb498 Mail-SpamAssassin-3.3.0-rc1.tar.bz2 > e5f1498a02b79ead743504e1f4f0fa89 Mail-SpamAssassin-3.3.0-rc1.tar.gz > 5654b6e2af313e5428f1291e616e248e Mail-SpamAssassin-3.3.0-rc1.zip > a7f03934e048ad6f277b55e95ed8e3ca > Mail-SpamAssassin-rules-3.3.0-rc1.r893295.tgz > > sha1sum of archive files: > > 53bca205e007159d6b438d07b63ae0674fb7cb02 > Mail-SpamAssassin-3.3.0-rc1.tar.bz2 > d90b5cbe554a345f20c48cc2bfc121189f87fa32 Mail-SpamAssassin-3.3.0-rc1.tar.gz > 7d8e359fe3d2589542fd82e5fa1cb4f454c0763f Mail-SpamAssassin-3.3.0-rc1.zip > 57cfbf3091651ca6b343987f899663efda53d7ce > Mail-SpamAssassin-rules-3.3.0-rc1.r893295.tgz > > Note that the *-rules-*.tgz files are only necessary if you cannot, or do not > wish to, run "sa-update" after install to download the latest fresh rules. > > The release files also have a .asc accompanying them. The file serves > as an external GPG signature for the given release file. The signing > key is available via the wwwkeys.pgp.net key server, as well as > http://www.apache.org/dist/spamassassin/KEYS > > The key information is: > > pub 4096R/F7D39814 2009-12-02 > Key fingerprint = D809 9BC7 9E17 D7E4 9BC2 1E31 FDE5 2F40 F7D3 9814 > uid SpamAssassin Project Management Committee > <priv...@spamassassin.apache.org> > uid SpamAssassin Signing Key (Code Signing Key, replacement > for 1024D/265FA05B) <d...@spamassassin.apache.org> > sub 4096R/7B3265A5 2009-12-02 > > See the INSTALL and UPGRADE files in the distribution for important > installation notes. > > > Summary of major changes since 3.2.5 > ------------------------------------ > > COMPATIBILITY WITH 3.2.5 > > - rules are no longer distributed with the package, but installed by > sa-update - either automatically fetched from the network (preferably), > or from a tar archive, which is available for downloading separately > (see below, section INSTALLING RULES); > > - CPAN module requirements: > - minimum required version of ExtUtils::MakeMaker is 6.17 > - modules now required: Time::HiRes, NetAddr::IP, Archive::Tar > - minimal version of Mail::DKIM is 0.31 (preferred: 0.37 or later); > expect some tests in t/dkim2.t to fail with versions older than 0.36_5; > - no longer used: Mail::DomainKeys, Mail::SPF::Query > - if module Digest::SHA is not available, a module Digest::SHA1 > will be used, but at least one of them must be installed; > a DKIM plugin requires Digest::SHA (the older Digest::SHA1 does not > support sha256 hashes), so in practice the Digest::SHA is required > > - if keeping AWL database in SQL, the field awl.ip must be extended to > 40 characters. The change is necessary to allow AWL to keep track of IPv6 > addresses which may appear in a mail header even on non-IPv6 -enabled host. > While at it, consider also adding a field 'signedby' to the SQL table 'awl' > (and adding 'auto_whitelist_distinguish_signed 1' to local.cf); > See sql/README.awl for details. The change need not be undone even if > downgrading back to 3.2.* for some reason; > > - fixing a protocol implementation error regarding a PING command required > bumping up the SPAMC protocol version to 1.5. Spamd retains compatibility > with older spamc clients. Combining new spamc clients with pre-3.3 versions > of a spamd daemon is not supported (but happens to work, except for the > PING and SKIP commands). > > - if using one of the plugins (FreeMail, PhishTag, Reuse) which were > previously not part of the official package, please retire your local copy > to avoid it conflicting with a new native plugin; > > - as the plugin AWL is no longer loaded by default, to continue using it > the following line is needed in one of the .pre files (e.g. local.pre): > loadplugin Mail::SpamAssassin::Plugin::AWL > > - it may be worth mentioning that a rule DKIM_VERIFIED has been renamed > to DKIM_VALID, to match its semantics; > > - due to a change in internal data structure (Bug 6185, 6254), third-party > plugins which accesss the $pms->{main}->{conf}->{headers_spam} (and ham) > need to be updated. One such example is the ClamAVPlugin plugin - please > find a fresh version on its wiki page. It retains backwards compatibility, > so can be used with both 3.2.5 as well as with SpamAssassin 3.3.0; > > - versions of amavisd-new between 2.5.2 and 2.6.1 (inclusive) are incompatible > with SpamAssassin 3.3; please upgrade amavisd to 2.6.2 or later, or apply > a workaround https://issues.apache.org/SpamAssassin/show_bug.cgi?id=6257 > > - support for versions of perl 5.6.* is being gradually revoked > (may still work, but no promises and no support); > > - preferred versions of perl are 5.8.8, 5.8.9, and 5.10.1 or later > > > INSTALLING RULES > > Installing rules from network is done with a single command: > sa-update > > Installing rules from files: > obtain all the following files: > Mail-SpamAssassin-rules-xxx.tgz > Mail-SpamAssassin-rules-xxx.tgz.asc > Mail-SpamAssassin-rules-xxx.tgz.md5 > Mail-SpamAssassin-rules-xxx.tgz.sha1 > (where xxx may look something like '3.3.0-rc1.r893295') > obtain a rules-signing key: > curl -O http://spamassassin.apache.org/updates/GPG.KEY > import the signing key to a SpamAssassin keyring: > sa-update --import GPG.KEY > install rules from a compressed tar archive: > sa-update --install Mail-SpamAssassin-rules-3.3.0-rc1.r893295.tgz > (sa-update will need corresponding .asc and .sha1 files with the > same base name in a currect directory) > > > MAIN NEW FEATURES > > - IPv6 support was substantially improved (see below); > > - many improvements to the DKIM plugin (understands author domain signatures, > supports multiple signatures, ADSP support with overrides) - (see below); > > - added 'if can(Class::method)' conditional statement, allowing configuration > settings to be conditionalised on plugin capabilities without requiring > new version releases to do so; > > - added a configuration option 'time_limit', defaulting to 300 seconds > or whatever the caller (like spamd) provides; attempting to gracefully > terminate the checking when a time limit is reached, reporting the score > and test hits that were collected so far, along with an added hit on > a rule TIME_LIMIT_EXCEEDED; > > - more expensive code sections are now instrumented with timing measurements; > timing report is logged as a debug message by the end of processing, > and made available to a caller and to 'add_header' directives through > a TIMING tag; > > - added a configuration option skip_uribl_checks to the URIDNSBL plugin, > cross-document it with skip_rbl_checks; > > - preserve order of declared 'add_header' header fields; > > - configurable network mask length for the AWL plugin (see below); > > - added support for DCC reputations (see below); > > - improved error handling and robustness (see below); > > - added timestamps when logging on stderr; > > - allowed debug areas to be excluded from debugging, > e.g.: -D all,norules,noconfig,nodcc > > > BUILDING AND PACKAGING > > - rules are no longer distributed with the package, but installed by > sa-update > > - Makefile.PL has been simplified and a bug fixed in a DESTDIR support > by increasing the minimum required version of ExtUtils::MakeMaker to 6.17 > > - tools check_whitelist and check_spamd are now included in the distribution, > now called 'sa-awl' and 'sa-check_spamd' > > > WORKAROUNDS TO PERL BUGS AND LIMITATIONS > > - modified the Check.pm plugin to produce smaller chunks of source code > from rules (60 kB) to avoid Perl compiler crashing on exceeding stack size > > - localized global variables $1, $2, etc at several places, avoiding taint > issue from propagating > > - avoided Perl I/O bug by replacing line-by-line reading with read() where > suitable, or played down the EBADF status in other places and only report > it as a dbg instead of a die - while also providing a little speedup > (10 .. 25 %) on reading a message > > - provided a new sub Message::split_into_array_of_short_lines to split > a text into array of paragraph chunks of sizes between 1 kB and 2 kB, > giving less opportunity to runaway regular expressions in rules; > fixes bugs: 5717, 5644, 5795, 5486, 5801, 5041 > > > MEMORY FOOTPRINT > > - as a side-effect of compiling rules in smaller chunks (to avoid compiler > crashes), virtual memory footprint of SpamAssassin is reduced; > > - saved some memory by not importing the Pod::Usage unless it is needed; > > - saved 350k+ of memory in sa-compile by replacing DynaLoader with XSLoader; > > - removed unneeded index from MySQL bayes_token table; > > > IPv6 SUPPORT > > - added IPv6 support for trusted_networks, internal_networks, msa_networks, > whitelist_from_rcvd, and other stuff that uses NetSet and the Received > header field parser, using NetAddr::IP; > > - allowed usage of a remote dccifd host through an INET or INET6 socket; > > - added IPv6 support to AWL plugin and its utility modules; a network > mask length is now configurable and defaults to /48, which controls > what data is stored in an AWL database; > > - sql/README.awl and sql/awl_*.sql: increased suggested awl.ip field width > to 40 characters to be able to hold IPv6 addresses; > > - IP_PRIVATE now includes ipv6 variants of private address space, > as well as the ipv6-mapped ipv4 addresses. > > - NetSet now understands that ::ffff:192.168.1.2 and 192.168.1.2 are > the same address; > > - IPv6 addresses are now recognised in Received header fields; > > - when reading Received header fields, the "IPv6:" prefix is stripped from > IPv6 addresses, and "::ffff:" is removed from IPv6-mapped IPv4 addresses > (so strings can match them as simply IPv4 addresses); > > - ::1/128 is always included in the trusted_networks/internal_networks set > similar to 127.0.0.0/8; > > - some of the IPv6 functionality in SpamAssassin requires that a perl module > IO::Socket::INET6 is available (like accessing a DNS resolver over inet6, > talking to a dccifd host over inet6 socket, SPAMC protocol); > > > SPAMC > > - Mail::SpamAssasin::Client ping may erroneously result in broken pipe; > bump spamc protocol version to 1.5, updated spamd, spamc and Client.pm; > > - added -n / --connect-timeout switch to spamc, allowing separate > connection timeout from communication timeout; > > - added --filter-retries and --filter-retry-sleep > > - increased allowed line length in spamc.conf files to 8 KiB and report > an error when the limit is exceeded > > - spamc would not time out connections to a hung spamd, fixed > > - spamc client library leaked the zlib compression buffer if compression > is used > > - spamc long option '--dest' was broken > > > SPAMD > > - when spamd is started with the daemonize option do not exit the parent > until a child signals that it has logged the pid, to allow a wrapper > script to simply continue immediately after starting spamd; > > - additional tempfile cleanup in kill_handler; > > - added SPAMD_LOCALHOST option to "make test" to allow specifying > non-127.0.0.1 IP address for use in FreeBSD jail > > > API > > - adding one optional argument to Mail::SpamAssassin::parse allows caller > to pass additional out-of-band information to SpamAssassin (such as a > deadline time, DKIM verification results, information about a SMTP session, > or dynamic rule hits); this information is made available to plugins and > the rest of the code through a 'suppl_attrib' hash; > > - Plugin::Check - pick up 'rule_hits' from caller via the new mechanism > and call got_hit() on them; > > - simplified adding dynamic score hits and dynamic rules by plugins > (such as AWL, CRM114, FuzzyOcr, Check) by letting got_hit() accept > options tflags and description, and letting it store a supplied > dynamic score for proper reporting; > > - let the timing breakdown information be accessible to a caller through > the existing get_tag mechanism (tag TIMING); > > - let the generated header fields ('add_header' configuration options) > be accessible to a caller through the existing get_tag mechanism > (tags ADDEDHEADER, ADDEDHEADERHAM, ADDEDHEADERSPAM); > > > RULES > > - rules are no longer distributed with the package; > > - new scores have been generated by a GA algorithm and then manually tweaked, > based on cleaned datasets supplied by a dozen of volunteers; > > - dropped redundant rules or rules causing too many false positives; > > - added or updated many rules; incomplete list in no particular order: > vbounce, lotsa_money, muchmoney, image spam, fill_this_form, FreeMail, > European Parliament, HTML attachments, uri_obfu*, urinsrhsbl, urinsrhssub, > urifullnsrhsbl, URI_OBFU_X9_WS, rDNS=localhost, INVALID_DATE_TZ_ABSURD, > KHOP_SC, RCVD_IN_PSBL, FRT_VALIUM*, BOUNCE_MESSAGE, VBOUNCE_MESSAGE, > __BOUNCE_UNDELIVERABLE, HELO_STATIC_HOST, FILL_THIS_FORM_FRAUD_PHISH, > CHALLENGE_RESPONSE, DKIM_VALID, DKIM_VALID_AU, DKIM_ADSP_*, > NML_ADSP_CUSTOM_{LOW,MED,HIGH}, __VIA_ML, MIME_BASE64_TEXT, LOTTO_URI, > FORGED_MUA_THEBAT_BOUN, FORGED_MUA_THEBAT_CS, UNRESOLVED_TEMPLATE, > __THEBAT_MUA, __ANY_OUTLOOK_MUA, RP_MATCHES_RCVD, one-word X-Mailer, > advance_fee update, tweak SPAN rules, tweak skype and misquoted-HTML rules, > added some new HTML obfuscation and Google feedproxy URI rules, > tweak reevolved advance fee second-order metarules, > added a test rule for postmaster+abuse missing, FROM_MISSPACED, > fix FROM_CONTAINS_TAB, added Facebook redirector pattern, > avoided ISO-2022-JP FPs on TVD_SPACE_RATIO, GAPPY_SUBJECT, PLING_QUERY > and FM_FRM_RN_L_BRACK rules, FP fix for one-word mails on TVD_SPACE_RATIO, > RATWARE_BOUNDARY plus variant, supersede all previous RATWARE_OUTLOOK > stuff, added exclusion for __ISO_2022_JP_DELIM to OBFUSCATING_COMMENT, > FP in obfuscated URI rule, fixed breakage in tbird image rule, fixed > SUBJECT_FUZZY_MEDS FP on unobfuscated "meds", added misspaced From header > field rule, numeric+cctld URI rule, ... > > - added PSBL blacklist - http://psbl.surriel.com/ > > - added support for http://www.spamhaus.org/css/ > > - replaces HABEAS, BSP and SSC with RP CERTIFIED; > > - use ReturnPath's RNBL, replacing SSBL; > > - added rule for plain text attachments with octet-stream MIME type; > > - avoided false positives on ISO-2022-JP messages in several rules; > > - removed massmailers from uridnsbl_skip_domain in 25_uribl.cf; > > - updated various default whitelists, uridnsbl_skip_domain, adsp_override, ... > > > PLUGINS > > - new plugins: FreeMail, PhishTag, Reuse > > - now enabled by default: DKIM > > - now disabled by default: AWL > > - retired plugin: DomainKeys > > > AWL PLUGIN > > - plugin AWL is now disabled by default; > > - added new configuration options auto_whitelist_ipv4_mask_len and > auto_whitelist_ipv6_mask_len to allow more control on what part of > an IP address is stored into an AWL database; > > - README.awl: increased a suggested awl.ip field width to 40 characters > to support IPv6 addresses; > > - AutoWhitelist.pm: allowed storing a canonicalized IPv6 address, cropped > to a configurable network mask (previously causing SQL server errors: > 'value too long') > > - let AWL with SQL keep separate records for DKIM-signed and unsigned mail > (when auto_whitelist_distinguish_signed configuration option is true, > and a field awl.signedby exists); > > - avoided a race condition in SQLBasedAddrList.pm when multiple processes > try to insert-or-update an awl SQL record: trying INSERT first, and if > that fails go for UPDATE; > > - gracefully handle NaN from corrupted database or a broken emulator or > virtualizer; > > > DCC PLUGIN > > - added support for DCC reputations, added setting dcc_rep_percent, > new test check_dcc_reputation_range(), new tag DCCREP > (DCC servers supply reputation data only to licensed clients); > > - allowed usage of a remote dccifd host through an INET or INET6 socket; > > > DKIM PLUGIN > > - the plugin is now enabled by default; > > - absolute minimal version of Mail::DKIM is 0.31; > support for ADSP requires Mail::DKIM 0.34; > a DNS test (and rule) for NXDOMAIN is operational since Mail::DKIM 0.36_5 > > - a perl module Digest::SHA is required if the DKIM plugin is enabled > (if a perl module Digest::SHA is available, the module Digest::SHA1 > becomes optional as far as SpamAssassin is concerned (but is still > needed by Razor agents)); > > - added support for multiple signatures (useful for whitelisting); > > - plugin now distinguishes author domain signatures from third party > signatures (useful for whitelisting); > > - provides a tag DKIMIDENTITY (in addition to DKIMDOMAIN); > > - DKIM now supports Author Domain Signing Practices - ADSP (RFC 5617); > > - use the Mail::DKIM::AuthorDomainPolicy instead of Mail::DKIM::DkimPolicy, > when available (since Mail::DKIM 0.34); > > - implements an 'adsp_override' configuration directive and adds > an eval:check_dkim_adsp check, which is used by new DKIM_ADSP_* rules; > > - rules contain an initial set of 'adsp_override' directives, listing > some of the more popular target domains for phishing (applicable only to > domains which sign all their direct mail with a DKIM or DK signature); > > - this plugin can now re-use Mail::DKIM verification results if made > available by a caller, which saves resources and makes it possible > for SpamAssassin to work on a truncated large mail without breaking > DKIM signatures; > > - check_dkim_signed and check_dkim_adsp eval rules can now take an optional > list of domain names, which limits their action to listed domains only. > It facilitates building DKIM-based rules for specific domains, without > having to resort to meta rules; > > - draft-ietf-dkim-ssp-10/RFC-5617 made Author Domain Signature based on 'd': > updated ADSP code accordingly; changed whitelisting code to be based on > SDID ('d') instead of AUID ('i'); > > - Plugin/DKIM.pm: terminology changes in comments and logging according > to RFC 5617 and draft-ietf-dkim-rfc4871-errata-07; > > > BUG FIXES > > - fixed Rule2XSBody segfaults; > > - no longer treat user data as perl booleans (a string "0" is a false); > > - avoid data from the wild be interpreted as perl regular expressions; > > - ArchiveIterator: prevent _scan_directory from passing directories > to _scan_file (on NFS it would fail with EISDIR on read(2); > > - fixed vpopmail support; > > - fixed incorrect mode bits when creating lock files for AWL; > > - fixed some cases where :addr headers were parsed incorrectly; > > - fixed leakage of 'whitelist_from_rcvd' entries between spamd users; > > - fixing run_and_catch, which failed to catch a non-timed run; > > - 127/8 isn't an illegal IP; > > - reworked the M::S::Timeout module to deal with nested timers as one would > expect: an inner timer shouldn't be able to extend an outer timer's limit; > account for time elapsed in the submitted subroutine when restarting an > outer timer; reset() should have accounted for time already spent; > deal with nested timed runs where alarm(0) does not provide remaining time; > > - the 'exists:' evaluator in HEADER rules now works as documented > and tests for existence of a header field, instead of testing for > a header field body being nonempty; internally, the pms->get can > also now distinguish between empty and nonexistent header fields; > > - applied fixes to header fields parsing in several places: header field > names are case-insensitive, whitespace is not required after a colon, > obsolete rfc822 syntax allowed whitespace before a colon; > VBounce: match "Received:" only at the beginning of a line; > > - fixed bug 6237: 2.0.0.0/8 is now an allocated address range, > fixed RCVD_ILLEGAL_IP with IP 2.0.0.0/8 (and 223.0.0.0/8); > > - fixed bug 6205 comment 5 in URIDetail.pm; > > - 'pyzor_options' in Plugin/Pyzor.pm was not untainted; > > - URIDetail plugin was not taint safe, fixed; > > - fixed parsing of multi-line Received header fields for > BOUNCE_MESSAGE/VBOUNCE_MESSAGE et al; > > - Bug 6206, Bug 2536: spamd: untaint directory as obtained from a password > file or from vpopmail utilities, avoid implicit untainting; report error > if user preferences file exists but cannot be accessed; > > - avoid using raw data from DNS as a regexp in Plugin/ASN.pm; > > - ensured the dbg() and info() calls always return the same value (true) > regardless of log level; > > - suppress logging of $& when its value is not available (i.e. when > no regexp has been evaluated during rule evaluation); > > - Exporter never really worked in SA, was not enclosed in BEGIN {}; > > - masses/runGA and masses/mk-baseline-results: prevent a shell 'source' > command from loading an unrelated file named 'config' which happens to be > in the current PATH - must use a ./ in an arg to a 'source' command; > > > ERROR HANDLING, ROBUSTNESS > > - improved error detection and reporting: test status of all system calls > and I/O operations (or explicitly document where not), and report > unexpected failures; > > - eval calls now check for eval result instead of testing the $@, which > is not always reliable; > > - localized $@ and $! in DESTROY methods to prevent potential calls to eval > and calls to system routines in code executed from a DESTROY method > from clobbering global variables $@ and $!; > > - Util::helper_app_pipe_open_unix: contain a failing exec with an eval > to prevent additional cases of process cloning. The exec could fail > this way when given tainted arguments; > > - Util::helper_app_pipe_open_unix: flush stdout and stderr before forking, > otherwise an error reported by exec (such as 'insecure dependency') > was lost in a buffer; > > - eval-protected an open($fh,'-|') to capture implied fork failures > due to lack of system resource; > > - explicit untainting: combine "use re 'taint'" with untaint_var(), > avoiding implicit perl untainting, along with workarounds to prevent it; > > - added 'use strict' where missing; > > - avoided a bunch of warnings on "Use of uninitialized value" > > - clearly report reasons for helper application process failures > > - t/SATest.pm: provide information about the process failure reason > if a system() call fails; improved its reporting of failures; > > - improved error reporting in Plugin/DCC.pm on finding a DCC home directory > to facilitate troubleshooting; > > > OTHER CHANGES > > - pseudoheader "ALL:raw" returns a pristine header section, > and pseudoheader "ALL" returns a cleaned header section > > - total rewrite of URI detection in plain text body; > > - many updates to the list of top level domains; > > - added 'util_rb_3tld', allowing 3-level TLDs to be listed in URIBLs and > allowing new 3TLDs to be added from rule updates; > > - avoided trusted_networks bog down due to O(n^2) loop with millions > of entries; > > - applied fixes to Plugin/VBounce.pm, updated VBounce ruleset; > > - added support for a 'Communigate Pro' Received header field; > > - parse Communigate Pro "with HTTPU" auth token; > > - let DependencyInfo.pm understand a concept of recommended module version, > besides a required version; > > - provided a workaround for Net::DNS::Packet::new inconsistency; > > - let SpamAssassin use either Digest::SHA or Digest::SHA1, whichever is > available (the Digest::SHA is now a base module since perl 5.10.0); > > - improved parsing of eval-type rules: allow unquoted domain names, > disallow unmatched quotes; > > - provided a new module Mail::SpamAssassin::BayesStore::BDB. It should be > treated as alpha-quality (needs more testing) and is not yet ready for > production use; > > - exposed existing function 'received_within_months' as an eval function > in Plugin/HeaderEval.pm; > > - use /var/lock/subsys/spamd instead of /var/lock/subsys/spamassassin for > rc script, so that 'service spamd status' will work; > > - re-download MIRRRORED.BY files at least once a week, or if > 'sa-update --refreshmirrors' switch is used; > > - input delimiter $/ can be corrupted by a plugin, localize $/ and $\ before > calling a plugin; > > - takes almost a minute to start spamd on a slow machine, bumped up the > retry counter to 180 seconds; > > - resolved Bug 5325: syslog severity level in spamc/libspamc.c for max > message size (changed LOG_ERR into LOG_NOTICE for the message: > "skipped message, greater than max message size"); > > - avoid taint warnings if hostname is returned as '(none)'; > > - produce an error message if an sa-update channel doesn't exist; > > - Bug 6150, Bug 6127, Bug 5981, Bug 5950, Bug 6191: let spamd log/report > a child process exit status or aborting condition in an informative way; > > - detect accidental match-everything regexps in rules; > > - updated garescorer for 3.3.0: use more epochs in GA runs for better scores; > clarify some mass-check warning output, ensure rule name always appears at > start of line; if a rule had no default/existing score in 50_scores.cf, > don't tell the GA that 1.0 is an appropriate default value, instead pick > the midway point of its score range. this produces better results; > remove some dead code from masses/score-ranges-from-freqs; > > - report performance as iterations per second in garescorer.c; > > - added test to ensure that all config settings are correctly handled when > switching between users; added more config setting type metadata to enable > those tests to work; and fix URIDetail to store config on the {conf} object, > not on the plugin; > > - moved 'release tests' to xt/ directory; mirror long-running, net-tests and > stress tests with xt/50_testname.t scripts to enforce their run before a > release; > > - numerous additional and updated self-tests; > > - added a Test::Perl::Critic release-test; > > - some code cleanups based on suggestions by a perl module Test::Perl::Critic, > among others: > . enable TestingAndDebugging::ProhibitNoStrict test but allow the > use of 'no strict "refs"'; > . deal with BuiltinFunctions::RequireGlobFunction; > . deal with ControlStructures::ProhibitMutatingListFunctions > removing this exception from xt/60_perlcritic.t; > . deal with BayesStore/BDB.pm, Variables::ProhibitConditionalDeclarations > . now that the module Time::HiRes is a required module, we can afford > to replace a select() with Time::HiRes::sleep, and remove exception > BuiltinFunctions::ProhibitSleepViaSelect from xt/60_perlcritic.t > > - documentation was updated, fixing numerous typos and mistakes in > documentation text and in log messages; > > - extensive improvements to development process: > automated testing through Hudson, improvements to mass-check and rules
Get an rc2 ready make test /usr/bin/perl build/mkrules --exit_on_no_src --src rulesrc --out rules --manifest MANIFEST --manifestskip MANIFEST.SKIP no source directory found: exiting /usr/bin/perl build/preprocessor -Mvars -DVERSION="3.003000" -DPREFIX="/usr/contrib" -DDEF_RULES_DIR="/usr/contrib/share/spamassassin" -DLOCAL_RULES_DIR="/usr/contrib/etc/mail/spamassassin" -DLOCAL_STATE_DIR="/usr/contrib/var/spamassassin" -DINSTALLSITELIB="/usr/contrib/lib/perl5/site_perl/5.10.1" -DCONTACT_ADDRESS="the administrator of that system" -Msharpbang -Mconditional -DPERL_BIN="/usr/bin/perl" -DPERL_WARN="" -DPERL_TAINT="" -m755 -isa-update.raw -osa-update cp sa-update blib/script/sa-update /usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/sa-update PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/basic_lint.t .................... /usr/bin/perl: can't resolve symbol '_Unwind_GetIP' /usr/bin/perl: can't resolve symbol '_Unwind_GetRegionStart' /usr/bin/perl: can't resolve symbol '_Unwind_Resume' /usr/bin/perl: can't resolve symbol '_Unwind_DeleteException' /usr/bin/perl: can't resolve symbol '_Unwind_RaiseException' /usr/bin/perl: can't resolve symbol '_Unwind_SetIP' /usr/bin/perl: can't resolve symbol '_Unwind_GetTextRelBase' /usr/bin/perl: can't resolve symbol '_Unwind_GetLanguageSpecificData' /usr/bin/perl: can't resolve symbol '_Unwind_SetGR' /usr/bin/perl: can't resolve symbol '_Unwind_GetDataRelBase' /usr/bin/perl: can't resolve symbol '_Unwind_Resume' t/basic_lint.t .................... ok t/basic_meta.t .................... ok t/basic_obj_api.t ................. ok t/bayesbdb.t ...................... skipped: (no reason given) t/bayesdbm.t ...................... skipped: (no reason given) t/bayesdbm_flock.t ................ skipped: (no reason given) t/bayessdbm.t ..................... skipped: (no reason given) t/bayessdbm_seen_delete.t ......... skipped: (no reason given) t/bayessql.t ...................... skipped: (no reason given) t/blacklist_autolearn.t ........... ok t/body_mod.t ...................... ok t/check_implemented.t ............. ok t/cidrs.t ......................... ok t/config_errs.t ................... skipped: (no reason given) t/config_text.t ................... ok t/config_tree_recurse.t ........... ok t/cpp_comments_in_spamc.t ......... ok t/cross_user_config_leak.t ........ ok t/date.t .......................... ok t/db_awl_path.t ................... ok t/db_awl_perms.t .................. ok t/db_based_whitelist.t ............ skipped: (no reason given) t/db_based_whitelist_ips.t ........ skipped: (no reason given) t/dcc.t ........................... skipped: (no reason given) t/debug.t ......................... skipped: (no reason given) t/desc_wrap.t ..................... ok t/dkim.t .......................... skipped: (no reason given) t/dkim2.t ......................... skipped: (no reason given) t/dnsbl.t ......................... skipped: (no reason given) t/dnsbl_sc_meta.t ................. skipped: (no reason given) t/duplicates.t .................... ok t/get_all_headers.t ............... ok t/get_headers.t ................... ok t/gtube.t ......................... ok t/hashcash.t ...................... ok t/html_colors.t ................... ok t/html_obfu.t ..................... ok t/html_utf8.t ..................... ok t/if_can.t ........................ ok t/ifversion.t ..................... ok t/ip_addrs.t ...................... ok t/lang_lint.t ..................... skipped: (no reason given) t/lang_pl_tests.t ................. ok t/line_endings.t .................. skipped: (no reason given) t/lint_nocreate_prefs.t ........... /usr/bin/perl: can't resolve symbol '_Unwind_GetIP' /usr/bin/perl: can't resolve symbol '_Unwind_GetRegionStart' /usr/bin/perl: can't resolve symbol '_Unwind_Resume' /usr/bin/perl: can't resolve symbol '_Unwind_DeleteException' /usr/bin/perl: can't resolve symbol '_Unwind_RaiseException' /usr/bin/perl: can't resolve symbol '_Unwind_SetIP' /usr/bin/perl: can't resolve symbol '_Unwind_GetTextRelBase' /usr/bin/perl: can't resolve symbol '_Unwind_GetLanguageSpecificData' /usr/bin/perl: can't resolve symbol '_Unwind_SetGR' /usr/bin/perl: can't resolve symbol '_Unwind_GetDataRelBase' /usr/bin/perl: can't resolve symbol '_Unwind_Resume' t/lint_nocreate_prefs.t ........... ok t/memory_cycles.t ................. skipped: (no reason given) t/metadata.t ...................... ok t/mimeheader.t .................... ok t/mimeparse.t ..................... ok t/missing_hb_separator.t .......... ok t/mkrules.t ....................... ok t/nonspam.t ....................... ok t/plugin.t ........................ ok t/plugin_file.t ................... ok t/plugin_priorities.t ............. ok t/prefs_include.t ................. ok t/priorities.t .................... ok t/razor2.t ........................ skipped: (no reason given) t/rcvd_parser.t ................... ok t/re_base_extraction.t ............ ok t/recips.t ........................ ok t/recreate.t ...................... ok t/recursion.t ..................... ok t/regexp_valid.t .................. ok t/relative_scores.t ............... ok t/report_safe.t ................... ok t/reportheader.t .................. ok t/reportheader_8bit.t ............. ok t/reuse.t ......................... skipped: (no reason given) t/root_spamd.t .................... skipped: (no reason given) t/root_spamd_tell.t ............... skipped: (no reason given) t/root_spamd_tell_paranoid.t ...... skipped: (no reason given) t/root_spamd_tell_x.t ............. skipped: (no reason given) t/root_spamd_tell_x_paranoid.t .... skipped: (no reason given) t/root_spamd_u.t .................. skipped: (no reason given) t/root_spamd_u_dcc.t .............. skipped: (no reason given) t/root_spamd_virtual.t ............ skipped: (no reason given) t/root_spamd_x.t .................. skipped: (no reason given) t/root_spamd_x_paranoid.t ......... skipped: (no reason given) t/root_spamd_x_u.t ................ skipped: (no reason given) t/rule_multiple.t ................. ok t/rule_names.t .................... skipped: (no reason given) t/rule_types.t .................... ok t/sa_awl.t ........................ ok t/sa_check_spamd.t ................ ok t/sa_compile.t .................... skipped: (no reason given) t/sha1.t .......................... ok t/shortcircuit.t .................. ok t/spam.t .......................... ok t/spamc.t ......................... ok t/spamc_B.t ....................... ok t/spamc_bug6176.t ................. ok t/spamc_c.t ....................... ok t/spamc_c_stdout_closed.t ......... ok t/spamc_cf.t ...................... ok t/spamc_E.t ....................... ok t/spamc_H.t ....................... skipped: (no reason given) t/spamc_headers.t ................. ok t/spamc_l.t ....................... ok t/spamc_optC.t .................... ok t/spamc_optL.t .................... ok t/spamc_x_e.t ..................... ok t/spamc_x_E_R.t ................... skipped: (no reason given) t/spamc_y.t ....................... ok t/spamc_z.t ....................... ok t/spamd.t ......................... ok t/spamd_allow_user_rules.t ........ ok t/spamd_client.t .................. skipped: (no reason given) t/spamd_hup.t ..................... skipped: (no reason given) t/spamd_kill_restart.t ............ skipped: (no reason given) t/spamd_kill_restart_rr.t ......... skipped: (no reason given) t/spamd_ldap.t .................... skipped: (no reason given) t/spamd_maxchildren.t ............. ok t/spamd_maxsize.t ................. skipped: (no reason given) t/spamd_parallel.t ................ ok t/spamd_plugin.t .................. skipped: (no reason given) t/spamd_port.t .................... ok t/spamd_prefork_stress.t .......... skipped: (no reason given) t/spamd_prefork_stress_2.t ........ skipped: (no reason given) t/spamd_prefork_stress_3.t ........ skipped: (no reason given) t/spamd_prefork_stress_4.t ........ skipped: (no reason given) t/spamd_protocol_10.t ............. ok t/spamd_report.t .................. ok t/spamd_report_ifspam.t ........... ok t/spamd_sql_prefs.t ............... Name "DBD::SQLite::sqlite_version" used only once: possible typo at /usr/libdata/perl5/i386-bsdos/DynaLoader.pm line 223. t/spamd_sql_prefs.t ............... skipped: (no reason given) t/spamd_ssl.t ..................... skipped: (no reason given) t/spamd_ssl_accept_fail.t ......... skipped: (no reason given) t/spamd_ssl_tls.t ................. skipped: (no reason given) t/spamd_ssl_v2.t .................. skipped: (no reason given) t/spamd_ssl_v23.t ................. skipped: (no reason given) t/spamd_ssl_v3.t .................. skipped: (no reason given) t/spamd_stop.t .................... ok t/spamd_symbols.t ................. ok t/spamd_syslog.t .................. ok t/spamd_unix.t .................... ok t/spamd_unix_and_tcp.t ............ ok t/spamd_user_rules_leak.t ......... ok t/spamd_utf8.t .................... skipped: (no reason given) t/spamd_whitelist_leak.t .......... ok t/spf.t ........................... skipped: (no reason given) t/sql_based_whitelist.t ........... skipped: (no reason given) t/stop_always_matching_regexps.t .. ok t/strip2.t ........................ skipped: (no reason given) t/strip_no_subject.t .............. skipped: (no reason given) t/stripmarkup.t ................... ok t/tainted_msg.t ................... ok t/text_bad_ctype.t ................ ok t/timeout.t ....................... ok t/trust_path.t .................... skipped: (no reason given) t/uri.t ........................... ok t/uri_html.t ...................... ok t/uri_text.t ...................... ok t/uribl.t ......................... skipped: (no reason given) t/utf8.t .......................... ok t/util_wrap.t ..................... ok t/whitelist_addrs.t ............... skipped: (no reason given) t/whitelist_from.t ................ skipped: (no reason given) t/whitelist_subject.t ............. ok t/whitelist_to.t .................. ok t/zz_cleanup.t .................... ok All tests successful. Files=160, Tests=1982, 630 wallclock secs ( 2.28 usr 3.82 sys + 115.28 cusr 30.03 csys = 151.42 CPU) Result: PASS -- Member - Liberal International This is doc...@nl2k.ab.ca Ici doc...@nl2k.ab.ca God, Queen and country! Never Satan President Republic! Beware AntiChrist rising! http://twitter.com/rootnl2k http://www.myspace.com/502748630 Merry Christmas 2009 and Happy New Year 2010