blob: dab9135f7bfa663dd898406156efd33aa7364d73 [file] [log] [blame]
To: users, dev, announce
Subject: ANNOUNCE: Apache SpamAssassin 3.3.0-alpha3 available
[DRAFT DRAFT DRAFT - NOT YET RELEASED - DRAFT DRAFT DRAFT]
Apache SpamAssassin 3.3.0-alpha3 is now available for testing.
Downloads are available from:
http://people.apache.org/~jm/devel/
md5sum of archive files:
TODO
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://spamassassin.apache.org/released/GPG-SIGNING-KEY
The key information is:
pub 1024D/265FA05B 2003-06-09 SpamAssassin Signing Key <release@spamassassin.org>
Key fingerprint = 26C9 00A4 6DD4 0CD5 AD24 F6D7 DEE0 1987 265F A05B
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
- 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.36_5 or later)
- no longer used: Mail::DomainKeys, Mail::SPF::Query
- 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.0 or later
(of these three the 5.8.9 appears to be the most buggy)
BUILDING AND PACKAGING
- rules are no longer distributed with the package, but installed by
sa-update
- simplify Makefile.PL and fix a bug in DESTDIR support by increasing
the minimum ExtUtils::MakeMaker version required to 6.17
- we now include check_whitelist and check_spamd tools in the distribution,
now called 'sa-awl' and 'sa-check_spamd'
WORKAROUNDS TO PERL BUGS AND LIMITATIONS
- let the Check.pm plugin produce smaller chunks of source code from rules
(60 kB) to avoid Perl compiler crashing on exceeding stack size
- localize $1, $2, etc at several places, avoiding taint issue from propagating
- avoid Perl I/O bug by replacing line-by-line reading with read() where
suitable, or play down the EBADF status in other places and only report it
as dbg instead of a die - while also providing a little speedup (10..25%)
on reading a message
- new sub Message::split_into_array_of_short_lines to nicely split
a text into array of paragraph chunks of sizes between 1 kB and 2 kB,
gives 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;
- save some memory by not importing Pod::Usage unless it is needed;
- save 350k+ of memory in sa-compile by replacing DynaLoader with XSLoader;
- remove unneeded index from MySQL bayes_token table;
IPv6 SUPPORT
- IPv6 support for trusted_networks, internal_networks, whitelist_from_rcvd,
msa_networks, and other stuff that uses NetSet and the Received header
parser, using NetAddr::IP;
- allow usage of a remote dccifd host through an INET or INET6 socket;
- README.awl: increase suggested awl.ip field width to 45 to be able to
hold IPv6 addresses (optionally);
- IP_PRIVATE now includes the 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 headers;
- 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 is always included in the trusted_networks/internal_networks set
similar to 127.0.0.0/8;
SPAMC
- add -n / --connect-timeout switch to spamc, allowing separate
connection timeout from communication timeout;
- add --filter-retries and --filter-retry-sleep
- spamc would not time out connections to a hung spamd
- spamc client library leaks 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 the 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;
- add 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 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
(tag ADDEDHEADER and friends);
RULES
- rules are no longer distributed with the package;
- dropped redundant rules or rules causing too many false positives;
- added or updated rules (incomplete list in no particular order:
vbounce, money, 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,
FORGED_MUA_THEBAT_BOUN, FORGED_MUA_THEBAT_CS, UNRESOLVED_TEMPLATE,
__THEBAT_MUA, __ANY_OUTLOOK_MUA, RP_MATCHES_RCVD, one-word X-Mailer, ...
- rule for plain text attachments with octet-stream MIME type;
- avoid false positives on ISO-2022-JP messages in several rules;
- 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;
- README.awl: increase suggested awl.ip field width to 45 to support IPv6
addresses or DKIM signer domains;
- AutoWhitelist.pm: allow storing an IPv6 address (previously causing
SQL server errors: value too long)
- let AWL keep separate records for DKIM-signed and unsigned mail
(when auto_whitelist_distinguish_signed configuration option is true,
and SQL field awl.ip field size is increased or made dynamic);
- gracefully handle NaN from corrupted database or a broken emulator;
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);
- allow usage of a remote dccifd host through an INET or INET6 socket;
DKIM PLUGIN
- 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
- supports multiple signatures (useful for whitelisting);
- 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;
BUG FIXES
- fixed Rule2XSBody segfaults;
- do not 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;
- 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
- 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;
- Exporter never really worked in SA, was not enclosed in BEGIN{}
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-protect 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 and workarounds to prevent it;
- add 'use strict' where missing;
- avoid a bunch of warnings on "Use of uninitialized value"
- clearly report reasons for helper application process failures
OTHER
- 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;
- total rewrite of URI detection in plain text body;
- pseudoheader "ALL:raw" returns a pristine header section,
and pseudoheader "ALL" returns a cleaned header section
- many updates to the list of top level domains;
- add 'util_rb_3tld', allowing 3-level TLDs to be listed in URIBLs and
allowing new 3TLDs to be added from rule updates;
- avoid trusted_networks bog down due to O(n^2) loop with millions of entries;
- preserve order of declared 'add_header' haeder fields;
- allow debug areas to be excluded from debugging,
e.g.: -D all,norules,noconfig,nodcc
- fixes to Plugin/VBounce.pm, updated VBounce ruleset;
- new module Mail::SpamAssassin::BayesStore::BDB, but is not yet ready for use
- numerous additional and updated self-tests;
- updated documentation, fixed 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