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

Reply via email to