Version History:

Version 2.9.7:
- Fixed: External "Sent-To" addresses are not whitelisted when there's a local CC.
- Fixed: Mousewheel event propagation is not allowed to propagate to objects behid the white/blacklist table
- Fixed: Unable to login to the web interface if 127.0.0.1 is assigned to a secondary domain in CGP
- New: The login error message is now more explicit in case of misconfiguration
- New: The error message is now more explicit when trying to open the list page of an unscanned domain or user
- New: Simplified the User page text
- New: Prepared the User page for better integration in the upcoming and long-awaited LookOut mail 4 (still a work in progress).
- Verified and cleaned the integration in LookOut 3.
- New: Upgraded to jQuery 1.7

Version 2.9.6:
- Simplified the in-memory storage structure for outbound monitoring

Version 2.9.5c:
- Fixed (v2.9.1): Outbound monitoring does not resolve aliases properly when trying to disable an account

Version 2.9.5a:
- Fixed: "Whitelisted words" can't be enabled

Version 2.9.5:
- New: Internal messages Date header is generated using the server timezone instead of GMT/UTC
- Fixed: PolluStop running OSX-PPC and Solaris-Sparc may not be able to download Regex database

Version 2.9.4a:
- Fixed (v2.9.1): Regex to determine "Real sender" is incomplete, leading to a failure to identify the authenticated account in forged-message situations

Version 2.9.4:
- Fixed: On some platforms, the daily report displays random characters around the local spam targets percentages
- Fixed: On cluster setups, the source IP addresses are not included in the daily report
- Fixed: Outbound monitoring may trigger on Mailer-Daemon
- New: The "whitelisted" and "blacklisted" tag on the diagnostic header indicates the list level (user, domain or server) which first matched the address

Version 2.9.3:
- Fixed: PolluStop-linux64 settings are corrupted on Ubuntu-x64 and RHEL6-x64, while being OK on CentOS-x64
- New: More ratios added to the daily report

Version 2.9.2b:
- Fixed: "Local spam targets" always comes empty in the PolluStop daily report

Version 2.9.2a:
- Fixed: Invalid whitelist/blacklist entries can be created and are then impossible to delete using webadmin

Version 2.9.2:
- Retrieving new licenses from www.niversoft.com instead of licenses.niversoft.com as the SSL certificate doesn't match
- Fixed: Parse error on some special PBX router entries
- Fixed (v2.9.1): Dataset parsing error on double-quote characters in regular expressions
- New: SQLite database information on the Database page
- New: Removed the SQLite VACUUM command on startup to reduce startup time. VACUUM can now be done manually from the Database page

Version 2.9.1:
- New: Outbound monitoring, optional feature to disable outbound queue of accounts going over a configurable spam threshold
- New: "Real sender" is now taken from the first Received header when message is sent from an authenticated user
- Fixed: Dataset parsing error, some characters were decoded twice. It will now be possible to use shared regex using \t.

Version 2.9.0b:
- Fixed (v2.9): http module not compiled with SSL-enabling flags on some platforms, causing the https calls to always fail
- Removed various unused code
- Fixed: POST does not fall back to http when https isn't available

Version 2.9.0a:
- Fixed (v2.9): PolluStop webadmin can't be reached when only HTTPS is enabled.

Version 2.9:
- New: "Shared" regular expression database downloaded from www.niversoft.com
- New: Rewrote the internal downloader to use HTTPS. Supports HTTPS tunnels through HTTP proxies.
- Rewrote parts of internal socket libraries for more efficiency
- Removed compression mode from Client/Controller protocol, as usage showed that this actually made everything slower

Version 2.8.2b:
- Fixed: PolluStop is not able to reuse a webmail session in CGP 5.3.12(?) and up
- Update the Dataset parser to support new internal structures generated by CGP

Version 2.8.2a:
- Fixed: (2.8.1) a possible issue with stdout not being completely flushed, stalling the filter

Version 2.8.2:
- Fixed: Router parser doesn't understand escaped wildcard symbol (\*) in Signal rules
- New: Soft hyphen (0x73) characters are now considered part of tokens but removed later. Equivalent HTML entity (&shy;) was already processed that way.

Version 2.8.1a:
- Fixed: Problem reading domain.settings when a CABundle key is present in CGP 5.3 syntax
- Fixed: 'Error: CLI module reported: "failed to read an unquoted string: non a/n data' in wizard step 2.

Version 2.8.1:
- Rewrote the logging service classes for more efficiency and to remove all chances of deadlocks
- Fixed a possible locking issue on high-activity non-clustered servers
- Fixed a possible but harmless XSS attack vector on the login page
- New: Daily report and statistics of non-clustered installations includes CPU processing as well as wall-clock processing times.
- New: Whitelisted, Blacklisted and Direct Reply messages are now scanned for attachments too (X-AttachExt header)

Version 2.8.0a:
- Fixed: Regex count statistics always 0 in daily report
- Fixed: Incorrect regex count processing prevents old statistics to be reloaded from file at startup
- Removed per-session regex count, display was confusing
- Fixed (v2.0): Datasets containing double-quote character in keys are not saved properly

Version 2.8:
- New: Usage statistics for regular expressions
- New: Daily report sent to postmaster
- New: Repeated log lines are only outputted once for each module
- Fixed: multipart/signed over multipart/mixed messages may not be scanned entirely

Version 2.7.7b
- Fixed: SharedDomains system subdirectories are interpreted as being domains instead of being ignored.
- New url parameter for user.page to help embedding in LookOut and other webskins

Version 2.7.7a
- Fixed: Regex test field is broken

Version 2.7.7
- New: When addresses are white/blacklisted through the drop boxes or another learn method, they are also removed from the opposite list
- Fixed: Domain-level whitelists and blacklists may be ignored

Version 2.7.6
- New: Setting to specify the IMAP account in which the drop boxes are stored
- New: Command-line setting to disable sqlite db backup at startup
- Fixed: Filter reports "Upgrade mode" on first installation
- Fixed: The ruledisabled option (per-user settings) does not appear on recent installations

Version 2.7.5d
- Upgraded sqlite to 3.6.22 to try to help with db backup performances during startup on some servers

Version 2.7.5c
- Fixed: Rare 1-byte heap corruption in the dataset parser leading to a crash (caused by an unhandled exception)
- Fixed: Initial Setup Training page doesn't recognize mailboxes with non-ascii characters in their name

Version 2.7.5b
- Fixed: Whitelist and blacklist "Filter list" UI feature is broken
- Fixed: Mouse events on the whitelist/blacklist table can be doubled after sort.
- Fixed: Dataset/settings parser is unable to read line-wrapped datablocks created by CGP 5.3

Version 2.7.5a
- Fixed: "Sent-to" addresses may be added to the global whitelist instead of the user whitelist.

Version 2.7.5
- Fixed: PolluStop router don't understand the .here suffix correctly
- Fixed: PolluStop router is not greedy enough when matching domain names
- Fixed: Possible (but improbable) infinite loop if the PWD connection is dropped during a CLI command
- New javascript code to handle large whitelists/blacklists more efficiently

Version 2.7.4
- Fixed: Impossible to remove user whitelist/blacklist entries
- Cosmetic fixes
- Rewrote parts of the javascript code handling the web interface. More prominent use of jQuery

Version 2.7.3a
- Fixed (v2.7-beta1): Addresses may be added to the global whitelist/blacklist even if recipient/sender is not authorized to populate the global list.

Version 2.7.3
- Fixed: It is not possible to remove entries from whitelisted tokens
- New: The login page gives a more detailed error message when the master account fails to login.

Version 2.7.2
- Removed the IMAP account setting as it's confusing and not useful anyway. The master account and password is used to access IMAP, as the drop mailboxes are likely in that account.
- Fixed: The "test senders lists" does not test correctly for listed domains, and does not accept naked domain names

Version 2.7.1e
- Fixed: Local address testing reports invalid results

Version 2.7.1d
- Fixed: Javascript error in the list selector page under Internet Explorer
- Fixed: Router parser doesn't accept slash character

Version 2.7.1c
- Fixed: Web interface problems when using Internet Explorer
- Fixed: User whitelist always appears empty
- Updated install instructions, removed references to old install steps

Version 2.7.1b
- Fixed: Crash on shutdown on OSX, and random crash on shutdown on other platforms
- Fixed: Client mode may refuse to scan any message

Version 2.7.1a
- Upgraded sqlite code to v3.6.13 to fix a segfault in the OSX-Intel build

Version 2.7.1
- Fixed: Licensing issue

Version 2.7
- Removed the "Separate IMAP account" setting. Specifying the IMAP account is now mandatory

Version 2.7-RC3
- Fixed: Stream lock problem on FreeBSD in third-party code (flex-generated scanner).
- Fixed: Found real cause of the RC2 sqlite problem, optimization re-enabled on all platforms

Version 2.7-RC2
- Fixed: Sqlite problem under big-endian processors when compiler optimizations are enabled. Disabled opt for sqlite only on these platforms (OSX/PPC and Solaris/SPARC) until the problem is fixed in the sqlite code.

Version 2.7-RC1
- Removed some debug code
- Changed the optimization level to -O2 in gcc

Version 2.7-beta3
- IMAP username / password configuration is added back, in the Drop page
- Removed a few references to deleted pages
- Forgotten "Reset CLI password" feature implemented
- Better startup performance for large account sets

Version 2.7-beta2
- Fixed: Early crash on most platforms

Version 2.7-beta1
- New: Per-domain settings
- New access rights management. CGP access rights are used to determine which configuration can be seen and modified
- New: No more pollustop-only username. The pollustop main configuration page can be accessed with any username having "Master" access rights in CGP
- New: PolluStop mininmalist http server can now answer using compress/deflate encodings
- New: PolluStop now verifies, when the From and Sender headers list local addresses, if those addresses are valid
- New: The MessageId database, the whitelists (server, per-domain and per-user) and the per-user settings are now stored in a sqlite database

Version 2.6.6
- New variables available in the user page to help customizations
- Additional checks to make sure local addresses are not used for whitelisting/blacklisting

Version 2.6.5
- Fixed: PolluStop wizard creates a Junk folder for accounts for which filtering is disabled
- Fixed: PolluStop does not resolve recursive forwarders
- Fixed: PolluStop does not support non-wssp Session IDs (such as XIMSS Session IDs) for user login

Version 2.6.4b
- Fixed: User bypass rule is invalid
- Fixed (v2.6.3): A problem in the IMAP client code is causing drop-mailbox messages to not always be put in the whitelist

Version 2.6.4a
- Fixed (v2.6.4) The dataset parser is broken and fails to load pollustop.strings and other DOS-type text files on non-Win32 platforms

Version 2.6.4
- Fixed (v2.6.1): Accessing user pages with an alias does not always load the resolved user's data
- Fixed: A quote character in a regular expression breaks the regex page
- Fixed: OSX 10.5 Firewall breaks the integrity validation of PolluStop. OSX binaries are now "signed".
- The OCR module is not included in the package anymore, as its role on fighting spam has become insignificant. Still available on request.

Version 2.6.3b
- Fixed (v2.6.3): The latest changes in the sockets library is causing various awkward side-effects

Version 2.6.3
- New: PolluStop webadmin (including user config) can be accessed with alias or forwarder username pointing to a real account
- Fixed (v2.6 beta 4): Spam score of, for instance, 0.07 is printed as 0.7 in the X-PolluStop-Score header, leading to confusion.
- Fixed: IMAP Processing of drop folder processing fails when a packet boundary is aligned with an internal buffer

Version 2.6.2
- Fixed: When CGP returns an error to IMAP command, the error text may be discarded
- Fixed: The tokens whitelists are not sorted and stray semicolon characters are displayed
- Fixed: On certain conditions, learn logic of messages forwarded as attachment is reversed regarding whitelist

Version 2.6.1a
- Fixed: a javascript error in the whitelist/blacklist pages, occurring with specific data, could wipe out the lists.
- Fixed: Display artifact in whitelist/blacklist pages using IE.

Version 2.6.1
- New: Resolving forwarders to local, scanned accounts so they are scanned even if "scan forwarders" is disabled
- Fixed: The passwords page behaves erratically when accessed in SSL mode
- Fixed: The login page can answer with "The system not properly configured..." instead of "Incorrect password or account name" when an invalid username is entered
- Fixed: The user page doesn't show the Save button when scanning is disabled
- Fixed: On the first login, the user page displays scanning as disabled even if it's not.
- Fixed: Learn and Filter page, incorrect warning about local addresses not being local
- Fixed: IMAP password is corrupted after restart

Version 2.6
- Fixed: "automatic redirection to HTTPS on the login page" is not saved and is broken

Version 2.6 RC1
- Filter page redesigned for clarity
- Learn setting has been moved to a separate page and redesigned for clarity.
- White/Blacklist interface redesigned for ease of use
- Removed most of the increasingly confusing Learn rights settings, replaced by simpler ones
- Removed the "allow global whitelist" setting from the whitelist page, replaced by new Learn rights
- Fixed: account+detail- and mailbox#account-type addresses get their own whitelists instead of using the real account's
- Fixed: When a message is sent to multiple addresses and at least one is external, all sent-to addresses are added to the user whitelist, whether or not they are local
- New: When an user enables filtering for his account in per-user settings, PolluStop attempts to re-create the Junk Mail mailbox (using the mailbox name set in the setup wizard)
- Fixed: X-Orig-Recipients may be empty in client/controller mode when the recipient is a domain alias
- New: Command-line switch to enable data compression in client/controller communication

Version 2.6 beta 4
- Fixed: Hidden rule to disable filtering can't be removed when it's the only rule
- New: Non-mail accounts (pbx, etc) can be ignored in the license count. These accounts must be entered manually in the Filter page
- Fixed: The score given by the client and the controller on the same message is different

Version 2.6 beta 3
- Fixed: A small number of messages are not parsed correctly and their data can't be understood by the controller, causing the message to be postponed indefinitely
- New: Setting to allow all scanned users to use the email-training method to whitelist messages, even if they are not allowed to train the database
- New: Log setting to show reasons why a message is or isn't scanned/considered for training/whitelisting/blacklisting

Version 2.6 beta 2
- Fixed: Client instances are not always receiving the full domain list from controller when more than one client instance
- Fixed: The query part of an url in a message body is not always recognized as being part of an url
- Fixed: Alternate httpd listen port from the new command line is not considered in client mode
- Fixed: Lists can get user settings
- Fixed: Buffers and socket are not always flushed when a transmission error occurs between client and controller
- Modified the parameters of the data structure holding the spam/good database for more efficiency
- New: it is possible to set default value for per-user settings (for new users only)

Version 2.6 beta 1
- New: Controller and clients local domain name exchange
- Rewrote the command-line parser. Old command-line syntax is not supported anymore.
- New: Clients-controller connection is authenticated with a shared secret. PolluStop user password won't have to appear on the command line anymore
- New: --nowait parameter for the client instances to let the message pass instead of holding them if the controller is temporarily unavailable
- New: Relevant log entries are prefixed with the seqID of the CGP FILE request
- New: If the current license is valid but outdated (valid for a previous version), PolluStop will automatically attempt to fetch an updated license from http://license.niversoft.com
- New: It is now possible to use separate accounts for the Drop Mailboxes and the CLI access. Account containing Drop Mailboxes does not need admin rights and can be in a secondary domain
- New: Per-user setting to disable filtering for one account. PolluStop creates an hidden account-level rule to bypass the domain rule for these accounts
- New: CLI access IP address can be configured
- Enhanced the token polymorphism detection algorithm
- Fixed: PolluStop refuses to train from Shared Domains
- Fixed: Minor threading issue slowing down PolluStop shutdown
- Fixed: HTTPd Listener preventing PolluStop from completely shutting down on several platforms
- Fixed: A shared resource is not protected enough and can crash the controller (Client/controller mode only)

Version 2.5.2a
- Fixed (v2.5.2): An infinite loop may happen when scanning messages created by MS Office

Version 2.5.2
- New: Remote Command Client/Server for data synchronization between PolluStop instances on a CGP cluster. This PWD-like protocol can be extended in the future to allow scripted interactions with PolluStop
- Several minor modifications for a better integration on a CGP cluster
- Fixed a few broken links in the Configuration Wizard text
- New: PolluStop will skip text inside <style> tags even if they are within the html message body (this text is never shown to the user and is there to confuse bayesian filters)

Version 2.5.1a
- Fixed: Deadlock in the HTTP processing thread, leading to the PolluStop webadmin interface not responding while the filter is still active.
- Fixed: In the Filter page, when "Scan All" is disabled, the "Ignore" list is remembered and used even if not shown, causing domains to be ignored.
- Fixed: Messages coming from IPs blacklisted by CGP (RBL, etc) but "un-blacklisted" by a router entry (*@blacklisted = ...) are not scanned by PolluStop

Version 2.5.1
- Fixed: PolluStop stops while loading an empty but existing dataset file
- Fixed: Blacklisted entries are sometimes ignored
- SpamAssassin's GTUBE test string is now recognized (see http://spamassassin.apache.org/gtube/)
- New: Tool to find if an address is whitelisted or blacklisted (in the Lists page)
- Fixed: Local addresses in the whitelist may allow false negatives when the message sender is forged
- Fixed: Under rare conditions, the filter may fail to detect and skip the CGPro envelope

Version 2.5
- Fixed (v2.5 beta 4): Command-line learning mode is broken
- Fixed a possible crash on Windows due to new overzealous validation routines in the Microsoft CRT

Version 2.5 RC1
- Fixed (v2.5 beta 4): The passwords page values can't be saved.
- Fixed (v2.5 beta 4): Learn requests may cause a controlled exception in PolluStop (causing a restart of the filter)

Version 2.5 beta 4
- New: The name of the matched regex is added to the message headers. An option is available to disable this feature
- Fixed: A problem in the regex configuration page html code prevents the regex feature to be disabled.
- Fixed: When PolluStop reloads a modified settings file, the passwords are doubled in memory ("password" becomes "passwordpassword")
- Enhanced the rule to detect attachment spam
- Fixed: In the mailbox browser, account names are not sorted
- Default settings are now embedded in the binary. pollustop.settings.defaults is not read anymore.
- Fixed (v2.5 beta 3): fatal exception when clicking the "Check for new version" button

Version 2.5 beta 3
- New major feature: Custom rules, allowing admins to enter regular expressions having an effect on the message score
- Core: Encryption and decryption of passwords and private keys happen only when required.
- New internal rule to detect attachment spam (single pdf/zip attachment and no text in the body)
- New setting to disable two other internal rules if desired (check message date and detect header pattern)
- New: User learning requests (drop boxes, learn addresses) can be configured to either update the spam database or only their personal whitelist/blacklist
- Updated the documentation on the Filter page to clarify the different learning requests and the associated settings
- Fixed: The settings encoding procedure can enter into an endless loop, using a few more bytes of memory on each loop, until exhaustion
- Core: The WSSP-like engine for the webadmin interface now supports the ELIF WSSP command
- HTTPd: HTTP parameters are now stored in a hashed map(string/vector) instead of a hashed multimap(string/string) to be sure to keep the order of parameters with mutliple values
- HTTPd: The new threads are created on the fly instead of using a thread pool which caused problems on Windows without giving a noticeable performance gain compared to the memory used
- Using Boost::Regex for the new regular expressions feature
- Tesseract OCR updated with latest changes in the open-source engine (v2.0)

Version 2.5 beta 2
- Fixed: A deadlock condition may happen at startup on Windows, sometimes preventing the connection to the HTTP interface
- Ported to x64 platform (Linux, FreeBSD, Windows)
- FreeBSD builds are now created on FreeBSD 6.x. To run PolluStop on FreeBSD 5.5, please contact us

Version 2.5 beta 1
- New: PolluStop Webadmin interface now supports SSL (https) on the same port - just use https instead of http in the URL.
- Fixed: A per-user whitelist is created for aliases
- New: Auto-generated replies such as vacation messages are ignored when adding outbound messages to the per-user whitelist

Version 2.4.3b
- Fixed: A deadlock condition may happen at startup on Windows, sometimes preventing the connection to the HTTP interface

Version 2.4.3a
- Fixed: Mailbox Browser is broken

Version 2.4.3
- Most HTTP POST queries are now answered with a 303 See Other code. This prevents data to be submitted twice or browser to ask for POST confirmation when refreshing the page.
- Background processing code to avoid a session timeout as long as the browser is open. Session timeout is fixed to a lower value (5 minutes)
- Enhanced shutdown code with more inter-thread waiting, resulting in a quicker shutdown
- Fixed: Malformed date header can lead PolluStop to crash
- Tesseract OCR updated with latest changes in the open-source engine

Version 2.4.2
- New: Option for dropped message's addresses to be added both to the per-user whitelist and the global whitelist
- Fixed: The IMAP module can fail to empty drop mailboxes in very rare occasions when an empty response is received on the socket before the real response. The actual cause of this socket behavior is not known.

Version 2.4.1
- Fixed: PolluStop will refuse to load a cgp data file containing unquoted utf-8 text and produce a warning in the logs
- Fixed: Messages received through PIPE are not verified by the "Check More Than Return Path"-related code
- Fixed: PolluStop seems to stop to process or empty the drop mailboxes after a while
- Parts of the IMAP module have been rewritten for efficiency, now using the IMAP IDLE command.
- The timed poll (check every x seconds) setting is not required anymore and has been removed.
- Rewrote all the exception handling code of different modules for consitence and sanity, and to help compiler optimizations

Version 2.4
- The IMAP connection for the drop mailboxes is now permanent instead of being brought up and shut down every 15 seconds
- Most modules got an "initialized" flag to avoid unneeded shutdown when the filter is stopped before being completely initialized
- Modified the sigpipe handling for BSD platforms (FreeBSD, OSX)
- Fixed: Non-scanned account can access "their" per-user settings

Version 2.4 beta 3
- Fixed: (v2.4 beta 1) Initial Setup Wizard pages can't be used
- Fixed: (v2.4 beta 1) PolluStop stops after using the drop mailboxes on OSX and FreeBSD
- All still hardcoded error messages displayed on the web interface have been moved to http/pollustop.strings
- Main Domain Name display have been removed from the User Configuration page.
- Fixed incoherences in the Passwords page

Version 2.4 beta 2
- Fixed: (v2.4 beta 1) An incorrect synchronization object prevents the web interface from being displayed on most non-Win32 platforms
- Fixed: (v2.4 beta 1) A "broken pipe" signal can stop PolluStop if the communication between a web browser and PolluStop is abruptly closed (FreeBSD and OSX only)
- Fixed: (v2.4 beta 1) Heap can become corrupted if several users access the same page at once.
- New: The Passwords page now rsa-encrypts the passwords before sending them to PolluStop, as on the login page (javascript required)
- Fixed: The version number is only partially displayed (the beta information is stripped)
- Fixed: (v2.3.4) The upgrade page may not accept the apply command

Version 2.4 beta 1
- New: Integrated an OCR tool, tesseract-ocr (open source), to fight image-based spam. See the General Settings page.
- New: Statistics for the OCR engine. Existing statistics will be reset
- New: Per-user settings. Users can access the PolluStop webadmin interface with their email account's username and password, they will be presented a single configuration page.
- New: PolluStop now uses IMAP to fetch dropped messages. Direct Mailbox Addressing and POP access are no longer required
- New: PolluStop can store dropped messages in a defined mailbox instead of deleting them, allowing to restore an accidentaly lost message
- New: External scripts can append addresses to the global whitelist and blacklist by writing them in [pollustop]/Drop/whitelist.append and [pollustop]/Drop/blacklist.append

Version 2.3.4b
- Fixed: Possible crash when reading broken shift-jis encoding

Version 2.3.4a
- Fixed: Average good and spam score statistics (since last reset) are always both near 0.
- Fixed: In warning/notification emails sent by PolluStop, the Date field contains invalid data
- New option: Whitelisted words can be matched against the body and the headers, or against the body only
- Fixed: Filter is not able to read new Main.settings line written by CGP 5.1

Version 2.3.4
- New experimental feature attempting to defeat obfuscated drug names (such as VIAvGRA) and a few other words (such as S''exual)
- Fixed: In certain cases the score is not properly capped at 1.0 and wrongly reported as 0.160 and 16 #'s
- Fixed (v2.3.3a): broken HTML entities can make PolluStop enter in an infinite loop

Version 2.3.3a
- Fixed: PolluStop can't verify its license when running under CGP 5.1 beta
- Fixed: A problem in the mailbox browser can crash PolluStop on some less-common CGP setup
- Fixed: A problem in the header parser can crash PolluStop when uncommon header lines are received

Version 2.3.3
- Whitelisting and blacklisting can now use other header fields such as From, Sender or List-ID

Version 2.3.2
- Wizard: Dropboxes aliases are now written in account template

Version 2.3.1d
- Fixed: (v2.3.1) Attachment filenames encoded with quoted-printable can cause an extra blank line to be added to message headers when the FindAttachments module is enabled, sometimes resulting in unreadable emails

Version 2.3.1c
- Fixed: The calculation of the number of ###'s in the Diagnostic header is not exact, a score of 0.70 can give a diagnostic with 6 #'s.

Version 2.3.1b
- Fixed: PolluStop is likely to mark as spam the ugly MS-Word-generated emails with dummy o:p tags
- Fixed: PolluStop is not considering the semicolon symbol as a punctuation mark

Version 2.3.1a
- Fixed a synchronization bug probably present since v2.0, crashing PolluStop in rare occasions when intensive training is made while the filter is active and scans incoming messages
- Removed an old naive rule causing rare false positives.

Version 2.3.1
- Improved the parsing engine regarding non-ASCII characters. Database must be retrained from scratch to take advantage of this improvement.
- Improved the detection of filter-misleading HTML comments. These comments are meant to confuse Bayesian filters and are an obvious sign of spam. PolluStop wasn't confused by them but didn't always gave the message its due score.
- The FindAttachment module of PolluStop can now detect attachments of encoded filenames containing international characters
- Fixed: A problem in routing can make PolluStop fail to whitelist an address if a forward router entry exists for that address or its domain

Version 2.3b
- Improved the handling of version numbers
- Improved the handling of license upgrade warnings on the Upgrade page
- Added a way to display arbitrary warning messages on the upgrade page when needed (providing the Check For New Version button is clicked)
- Fixed group loading and group count display on License page

Version 2.3a
- Added back the previous left-align mode for the white and blacklists
- Changed the look of the main menu with a nice CSS-only rollover highlight
- Fixed: Impossible to upload files in the Database page when the server and the client are not on the same platform
- Fixed: Some typos and bad english sentences
- Fixed: The upgrade page behavior is incorrect

Version 2.3
- New: View-only mode - another set of credentials allows an user to view a restricted set of config pages, and, optionaly, to modify white and blacklists
- Cleaned up the admin pages, better stylesheet
- Error and confirmation messages in the admin pages stands more clearly above the text
- Fixed license page display for missing or invalid licenses
- New: (Experimental) detection of spam formed of one or two linked images with almost no text
- New: Detection of new forms of obfuscation tentative (html/title tags in text/plain messages)
- New: Database operations, ability to backup, restore, upload database files from the database admin page
- New: Splitted the totals (accounts, forwarders, groups, lists) on the license page for more information
- New: The upgrade page now monitors for the upgrade to be completed
- New: Whitelist by (whole) word, case-sensitive or case-insensitive

Version 2.2.9
- New: Algorithms to detect excessive single-letter tokens usage, such as "m o r t g a g e", or html/css float tricks
- New: Filter is able to parse shift-jis encoding
- Fixed: Inline-JIS settings were not saved

Version 2.2.8
- Fixed: Corrupted or uncleaned Forwarders and Aliases files are causing PolluStop to count more accounts than existing.
- New: More debug log entries on startup, If Debug log level is enabled, EACH counted account is reported.
- Fixed: PolluStop fails to parse router entries containing double prefix

Version 2.2.7d
- Fixed: Auto-Whitelisted entries are not always saved on filter shutdown

Version 2.2.7c
- Minor cosmetic bug

Version 2.2.7b
- Removed import code for v2.0 database to minimize maintenance of useless code. PolluStop versions under v2.1 are now officially not supported at all.
- Fixed: Training from terminal is broken

Version 2.2.7a
- Fixed: Mails sent to PolluStop for training purposes can crash the filter under very specific conditions

Version 2.2.7
- New unlimited license mode
- Fixed: When no password is set yet, it is not possible to set a new one (problem introduced in 2.2.6)

Version 2.2.6a
- New: Whitelist and Blacklist are now sorted by domain

Version 2.2.6
- New: Support for Directory-based domains
- New: All CLI and license processing is postponed after the reception of the INTF command. This ensure CGPro is done initializing before issuing CLI commands.
- Fixed: [Core] Files opened in read mode are also opened with write flags, causing useless locks.

Version 2.2.5a
- Fixed: A problem in the core libraries HTTP module can raise an unhandled exception and crash when an empty HTTP request is sent

Version 2.2.5
- New!: Database and Settings backup files, with old backups automatic deletion (check new settings at the bottom of the General Settings page)
- Fixed: Auto-whitelisting can corrupt the whitelist with strange characters and in rare case lead PolluStop to a crash.
- Fixed: Whitelist and blacklist boxes were missing a scrollbar.

Version 2.2.4
- Fixed: PolluStop issues a warning when encountering new CGP 5.0 sip-related router entries

Version 2.2.3
- Added HTTP Proxy support for Upgrade functions
- Auto-Whitelisting entries now includes the date it has been added
- Removed the Auto-Blacklist feature, it's way too dangerous. No worries, Auto-Whitelist is kept.

Version 2.2.2
- Changed retry delay to 30 seconds for HTTP listener
- All webadmin pages are now XHTML 1.0 compliant
- Fixed old database converter
- Fixed: Settings were not always saved after a warning message is sent
- Fixed: License status is not always updated when applying a new license

Version 2.2.1
- Fixed: OSX: PolluStop can fail to initialize when no license is installed.
- Fixed: The 2.0 database importer can fail

Version 2.2c
- Fixed: ModifySubject can crash PolluStop if Subject is folded and the first line is empty

Version 2.2b
- Fixed: PolluStop can timeout if the message-id field is longer than 255 characters
- Other minor fixes

Version 2.2a
- Fixed: Saturdays are not parser properly
- Removed duplicate report lines from MIME decoders

Version 2.2
- Major rewrite in core libraries, code improvements, optimizations
- New: Inline JIS encoding (ESC $ B) is now decoded
- New: Detection of subjects with "splitted" words (FW:LEN:GTH&GIR:TH&MUL:TI...)
- New: Check for New version and automatic upgrade function
- Fixed: The "Allow users to bypass the rule" function is reversed
- Fixed: A bug in the mailbox parser may prevent mbox files from being parsed properly
- Fixed: A 0x1A character in a mbox file stops the parsing at this point
- Fixed: The Message Sentinel of the mbox file is compared without regards to the case, making the message count higher than expected
- Fixed: Messages received through RPOP with unqualified domain name can be left unscanned

Version 2.1.2a
- A change in the build environment was corrupting the binaries on linux
- While searching for the cause of the problem, a part of the code has been optimized

Version 2.1.2
- New: PolluStop now adds a X-Orig-Return-Path header along with the X-PolluStop normal headers, to allow training from Outlook (which strips the Return-Path header)
- New: PolluStop don't add its header when the exact same header can be found in the message (for instance, whe message is redirected to another account through rules)
- Fixed: Minor bug in List account names processing, list-action wasn't considered as list. No real incidence, since only list-request and list-admin will pass through pollustop
- Removed the url from the X-PolluStop header, was not very useful and was cluttering headers

Version 2.1.1
- Fixed: PolluStop can crash on startup with very specific CGPro server settings

Version 2.1
- Fixed: If an alias is used for Pop, PolluStop may fail to resolve the filesystem path of the account
- Fixed: After machine reboot, PolluStop may think another PolluStop instance is running if a process has the same pid than a pre-reboot pollustop instance
- IPC info file is relocated in the default temp directory (%temp% on Windows, /tmp on other platforms)
- Fixed: In PolluStop package (tar files), files rights weren't set correctly
- Added security code to be sure all response are sent properly to CGPro, even when a response text or comment is missing a newline. This could cause CGPro to shutdown PolluStop repeatedly.
- Fixed: Drop Mailboxes settings validity is checked on commit even if Drop Mailboxes are disabled

Version 2.1 RC2
- Fixed: PolluStop X- Headers are all on a single line (too much escaping)
- Fixed: Default setting m_interestingthreshold value is incorrect
- Fixed: Learning from attached messages can fail for invalid reasons
- Fixed: A new license smaller than the current requirements can't be applied and is rejected with an erroneous message
- Fixed: License page numbers are not updated immediately
- Fixed: Changed settings are not reloaded when filtering is disabled
- Fixed: "Multiple recipients" bounce error message is not customizeable

Version 2.1 RC1
- Fixed: CGPro Router entries can't be read properly if they don't end with a newline character
- Fixed: PolluStop license is not updated properly when new license is entered on the License page
- Fixed: PolluStop now uses settings instead of separate files to store a few more internal states
- Fixed: A small style problem in webadmin pages
- Fixed: Forward as attachment wasn't working properly
- Fixed: Learn bounce messages was not formatted properly
- Fixed: The Filter page auto-applies the change to the "Scan all local domains" drop-down
- Fixed: Training from a mbox-type Mailbox can abort on a big message, letting PolluStop ignore messages after this point
- The webadmin pages text has been reviewed and corrected
- Changed the path of the ipc info file, it will now be written in [cgpro files]/pollustop.pid
- Added locks to avoid harmless crash on shutdown if PolluStop was still learning from files

Version 2.1 beta 5c
- Fixed: PolluStop can crash if a message put in the drop box doesn't contain a Return-Path

Version 2.1 beta 5b
- Fixed: Aliases creation in the wizard can't complete
- Fixed: PolluStop can stop itself after two seconds if no settings file is present

Version 2.1 beta 5a
- Fixed: OSX installation can't read dataset files
- Fixed: Error in a few warning messages
- Fixed: The CLI module doesn't get its new settings immediately when the Passwords page is submitted

Version 2.1 beta 5
- New: The Initial Setup Wizard is implemented
- New: Text hidden by HTML tricks such as using <title> tags, prepending an invalid < character, or text in html comments is now ignored by the filter.
- New: [Experimental] White text on white background is now ignored by the filter.
- Fixed: The MessageID disk database was triggered 1024x too early
- Fixed: The name of the in-memory MessageID database savefile was not correct
- Published a new spam database
- When a message is send to pollustop-spam or pollustop-good and used for additional training, the From and To fields of the message are not considered
- Sending a message to pollustop@yourdomain is now possible if the original message is sent as an attachment.
- Added auto-blacklist and auto-whitelist based on dropped messages and messages sent to the filter as an attachement
- Added the possibility to configure the bounce message of PolluStop

Version 2.1 beta 4b
- Fixed: Error in the Last Startup date of the Statistics module
- Fixed the /version URL to get PolluStop's current version number

Version 2.1 beta 4a
- Fixed: Whitelist and Blacklist config page could crash PolluStop

Version 2.1 beta 4
- Fixed: Statistics' scanned count is not properly reloaded on filter startup
- Fixed: Forwarding option (for training) were not working properly, the filter_uselearnsettings was taken backwardsI
- Added Last Reset Date and Last Startup Date to statistics. Existing statistics will be reset upon beta 4 installation
- Implemented Date functions in the page renderer
- Implemented basic Whitelist and Blacklist
- The HTTP listener port (for the webadmin interface) can now be changed directly in the webadmin interface
- Added an option to use APOP or not use it for PWD access.
- Added an option to stop PolluStop from using CLI.
- Recoded the POP fetcher, better error handling

Version 2.1 beta 3
- NEW: Explicit user relay entries (no wildcard) can now be included in the scanned accounts
- Modified the Mutex objects used in non-Win32 platform to match the behaviors of the Win32 mutexes.
- Mutexes has been choosen to be recursive to prevent self-deadlock of a thread and simplify code and mutex management
- Faster integrity check at filter startup
- Code cleanup, removed c-style functions in favor of C++ classes (yes, I know it you reader don't really care about this...)

Version 2.1 beta 2
- Fixed: PolluStop can deadlock on a Mutex under certain conditions, not all OSes are affected.
- Increased by one character the length limit of the SubjectPrefix parameter (now 16)
- Maked sure the HTTPd listener is closed before exiting the filter
- In the Password page, the webadmin Password is now saved even if there's a CLI error

Version 2.1 beta 1
- Implemented WebAdmin module
- Implemented Statistics module
- Implemented Message ID History
- Implemented Invisibility detection (experimental)
- Implemented Long Tokens Sequence detection
- Implemented Cluster support (some parts has to be disabled; requires a special license)
- Changed the format of the settings file, more computer-readable
- Changed the format of the database, it takes about 30% less place in memory
- Removed AutoTrain mode, was causing problems and database instability, and wasn't compatible with new enhancements
- When ScanGroups is not set, a group specified in the scan list will still be scanned. Same thing for Lists and Forwarders
- Added partial protection against | and (BROKEN BAR) separators (ex: c:al:s)
- All settings and license files are now stored with the database, in the [pollustop]/data subdirectory

Version 2.0.6
- PolluStop router module now accepts router entries with a % instead of a @
- Added CheckMoreThanReturnPath feature. When you're not using SMTP AUTH, people can send you mail in your behalf, and this may trick Pollustop in not scanning the mail. If you enable this setting, PolluStop verifies other things to determine the sender. Leave it disabled if you use SMTP AUTH.

Version 2.0.5
- Changed the parser flags to generate a 8-bits parser

Version 2.0.4
- Fixed a small display problem in the Warning messages.
- Added PGP check and tweak (EXPERIMENTAL)
- PolluStop now waits for the first INTF command to initialize itself to be sure CGPro is done reading its settings files (to avoid sharing violation)

Version 2.0.3
- Added Encrypted Zip detection in the FindAttachments module
- Modified the Router to make it stop matching domain when the domain is final

Version 2.0.2
- Fixed the Router Parser, was not able to read the router entries when the first entry was a new line or a comment

Version 2.0.1
- Fixed the Ignore flag on learning modes
- Fixed the MessageCount on Unlearn mode (was increased instead of being decreased)
- People that used Unlearn mode or used -i flag while doing training should redo the training from scratch for more accuracy.

Version 2.0
- Recreated the default Spam database from scratch. Enhanced the cleanup process.
- Separated package in two: binaries and database. *nix packages are now made with tar and gzip and should contain correct exec permissions
- Fixed a small display bug in debug mode
- Fixed: An empty [Ignore] instruction in the settings file could remove the main domain from the scanned list
- Fixed: An empty [Scan] instruction in the settings file could add the main domain to the scanned list
- Fixed: A bug in lockfiles prevented second instance of the same installation on non-Win32 platforms
- Added a math feature to protect against the now common "accented words" attack (New setting, DoubleCheckWithoutAccents)
- Added a math feature to reduce the bias caused by the To/CC fields and the shared database (New setting, OnlyAllowHighTOCCTokens).
- Removed ConfidenceLevel setting, replaced by NewWordConfidenceOnRare, another concept
- HTML entities like "&eacute;" are now converted to the equivalent character before token evaluation
- Successful testing with Communigate Pro 4.2b6
- Fixed a problem in router parser with PIPE entries
- A few changes in default settings, a complete review of your existing configuration is strongly recommended

Version 2.0 Release Candidate 3
- Integrated the enhanced threading and platform-independant library developed for another filter.
- Fixed a bug in licensing.
- Added a multi-process protection in licensing.
- Added three new settings (ScanGroups, ScanForwarders, ScanLists) for people who doesn't want to include these in their license size
- Fixed a timing bug to increase the delay between server info calculations
- Fixed some typos in log messages

Version 2.0 Release Candidate 2
- The OS-independent library has been updated, introducing its optimizations into PolluStop (file access and information query)
- Fixed a small glitch that causes PolluStop to reload the router information for each message received (bug introduced in rev 2)

Version 2.0 Release Candidate 1 rev 2 (Win32 only)
- Modified the thread library wrapper, the locking objects were not reliable. There's no wrapper in the *nix versions, this bug is win32 only.

Version 2.0 Release Candidate 1 rev 1
- Added a syntax condition to the router parser for a case not specified in CGPro documentation

Version 2.0 Release Candidate 1
- Filter/Scan: lines are not interpreted anymore when ScanAllLocalDomains is set
- Remplaced General/ScanInternal by ScanFromLocalScanned & ScanFromLocalNonScanned
- Modified a few strings
- The builtin Attachment Finder has been updated with the new features of Find_Attachments v1.06
- Fixed detection of GB2312 & Windows-1251/2 character sets
- Fixed domain alias parsing
- Now using Communigate Pro router entries (with settings file and domain aliases) to determine the path of a message
- New log level (debug) added (undocumented)
- New mode (router test) added (undocumented)
- Fixed SubjectPrefix (discrepancy between doc and setting, and the value was hardcoded)
- Fixed Endianness of database bytes on Solaris (Sparc) - the database is now transferable from i386 to sparc
- Added a new supported platform: Solaris (i386)

Version 2.0 public beta 7 rev 1
- Fixed Modify Subject feature to avoid incorrect relaying.
- Unlicensed/Standalone mode doesn't try anymore to match Domains and Account settings with existing domains and accounts
- Added a warning when database is not trained enough (< 1000 messages in Good or Spam database)

Version 2.0 public beta 7
- Fixed Diagnostic mode (dump all was crashing)
- Messages to external users with names similar to [LEARN-Prefix] were treated by pollustop as control messages.
- Added a lockfile to avoid multiple instance of the same database loaded
- Added "Local" Drop directory. You can now put things in [pollustop path]/Drop/Spam and [pollustop path]/Drop/Good, the current running instance will take care of them.
- From now, if you try to use the Learn feature and there's already a pollustop instance running with the same database, the learn request is transferred to the running instance that will take care of it in the DropMailboxes thread.
- Added the possibility to modify the Subject line when the message score is high enough

Version 2.0 public beta 6 rev 1
- Fixed Forward To Learn feature

Version 2.0 public beta 6
- Added "ALL" to Filter settings
- Removed "SCANRELAY" and "SCANOUTBOUND" from general settings,
  can't really be used or useful and were causing problems and support questions.
- Better handling of non-ASCII characters in tokens
- Added MATH.GOODIMPORTANCE setting to give additional importance to Good corpus.
- Context Tagged tokens, helps the filter to determine the part of the message where the token comes from
- Now filters with To and CC fields too, along with Subject.
- Completely rewrote the Settings file
- Tokens are now case sensitive,
- Internal "timeout", the filter stops scanning after a preset number of line to avoid CGP timeout
- Tokens polymorphism
- "Interesting" tokens threshold
- A lot of new settings
- DropMailboxes separate process no longer exists, now multithreaded.

Version 2.0 public beta 5 revision 1
- Fixed a crash occuring with euc-kr character set

Version 2.0 public beta 5
- Fixed bug with POP retrieval on linux/osx/freebsd. CRLF issue.
- Fixed bug that prevented PolluStop training from .mbox files
- Small other optimisations
- USETOCCMATCH is now disabled by default

Version 2.0 public beta 4
- Fix bug about opened filehandles. Some were not closed and after a while (depending on
  the number of domains in the server) the process was running out of filehandles.
- Fixed another bug regarding licensing check. Was done too often.

Version 2.0 public beta 3
- Fixed database compatibility between Intel and Motorola platforms (endianness)
- Fixed problems while reading POP message if the message contained NULL chars
- Small bugfix in licensing module. New licenses are required.

Version 2.0 public beta 2
- "Floating Point Exception" bug on training fixed.
- Settings parser problem with tab characters fixed
- Integrated changes made to Find_Attachments (v1.04->v1.05)

Version 2.0 public beta 1
- First public release of PolluStop

[...]

Version 1.0
- First release of PolluStop, perl version
