0.95.7b
-------
o Fixed a bug in hash trimming (thanks to Jost Krieger, who
  pointed this out before, and I blew it).

0.95.7a
------
o Fixed a couple of bugs in filter_messageid.
o Added a check for 'strip_path' spam bot.
o Added sfnet.tiedostot to bin_allowed.
o Fixed a bug in control message detection - the regexp to look for
  types 'cancel', 'newgroup', and 'rmgroup' needed to be anchored.
o Added a bad_cancel_path or two.
o Tightened up the control message filtering a bit.
o Raised the thresholds on the excessive supersedes filter a bit.

0.95.7
------
o Fixed a bug with the HTML filter (0.95.6a release).
o Fixed a bug with hash trimming.
o Added total articles per second to the statistics.  timer_info
  and timer_interval settings added for this.
o Fixed the non-verbose-mode rejection bug.
o Added Usenet II check for "rule of three" excessive crossposting.
o Closed a hole in the fuzzy MD5 filter.
o Since there is debate as to whether hash elements should be
  deleted during an each loop, I stopped doing that.
o bad_cancel_paths now also applied to Supersedes, added option
  check_supersedes_path to disable.
o If block_late_cancels is enabled, filter_messageid will refuse
  late cancels if possible (INN only).
o Fixed a bug in the scoring filter ("free pictures" getting
  counted twice).
o Added active_file so the filter can understand moderated groups.
o Added binaries_in_mod_groups to allow binaries in all moderated
  groups, regardless of whether they are in bin_allowed.
o Added "Excessive Supersedes" filter, and do_supersedes_filter
  to turn it on and off.  Also added supersedes_exempt.
o Control messages with Supersedes headers are dropped, added option
  drop_control_with_supersedes to disable.
o Drop all sendsys, senduuname, version, ihave, and sendme control
  messages.  Added options block_useless_controls to disable blocking
  of the first three types, and block_ihave_sendme to disable blocking
  of the last two.
o For those using cleanfeed.local, the %gr hash now has 'mod', 'allmod',
  and 'faq' items.  See the documentation.
o I was going to add code to exempt the free.* hierarchy from all
  filtering other than misplaced binaries.  Unfortunately, I was too
  busy concentrating on stopping HipCrime's terrorism, and wanted to
  get this out ASAP, so it'll have to wait.

0.95.6
------
o Added SIGHUP handler to reload configuration in standalone mode.
o Changed the Newsgroup line checks.
o Changed the way reject() is called.
o Added Usenet II checks for crosspost-outside and distribution.
o Added html_allowed, and fixed a silly bug in the block_html code.
o poison_groups was missing from the %config_append code.  Fixed.
o Tweaked up fuzzy_md5 a bit.  It works better now.
o We no longer trust the Lines header.
o Added a new "scoring" filter.  Big change; several filters were
  moved into this block, including "only URL" and "IP URL".  Added
  do_scoring_filter to turn it on and off.
o Added cleanfeed.local for site-specific (user-supplied) filter
  code.  Read the documentation before you play with this!
o My header-batch-writing subroutines are now included in the
  distribution for debugging.
o Added debug_batch_directory and debug_batch_size, for the debug
  routines.
o Added bad_cancel_paths, net_abuse_groups, and spam_report_groups,
  rather than having them hardcoded.
o Fixed a little bug in the standalone-mode main loop that could
  cause the filter to get out of sync with Cyclone or Typhoon.
o Added John Payne's mode.patch, and a filter_stats() function, to
  add a new line to INN's "ctlinnd mode" output.  (optional.)
o Added messageid.patch and filter_messageid() for INN, to examine
  message-ids during the CHECK transaction, and decide whether to
  refuse them.  I altered the patch from Ed Mooring's original so
  it won't die if filter_messageid isn't defined.
o Added do_mid_filter and refuse_messageids for the above.
o Added log_accepts so you can have only rejections logged if you
  want (standalone mode only).
o Fixed the binary filters to work with INN 2.0 possibly sending
  the article bodies in wireformat.
o Added md5_skips_followups, so you can have *all* articles MD5
  checked if you've got the resources to handle it.
o Added do_bot_checks, in case you want to turn them off for some
  reason (you wrote your own, or something).

0.95.5
------
o Fixed 2.0.x bot filter so it doesn't catch posts from tin on certain
  versions of Linux.
o Empty-body articles are now exempt from the MD5 filter.
o Properly handle empty bin_allowed, allexclude, poison_groups, etc.

0.95.4
------
o Added external config cleanfeed.conf config file.  Now the only
  thing you have to set in the actual code is the location of this
  file.  Set to undef to not use it (there is a microscopic performance
  hit).
o Changed the config variables into a %config hash, to make bringing
  in the external config file easier and more scalable.
o Fixed fuzzy_md5 to delete *all* MIME-seperator lines, not just the
  first one (oops).
o Made fuzzy_md5 delete lines with 6 or more characters but no
  whitespace.  (Those random "hash-busting" strings the spammers
  have started using.)
o Change header capitalization to canonical form in Highwind/NNTPRelay
  header parsing.
o Added postnews.dejanews.com to the posting-host filter exclusions.
o Regexps tweaked in further chasing of the killer article problem.
o No more URL-in-From filter.  It was pointed out to me that there
  are real people doing this for some obscure reason.
o Straightened out the logic of the excessive-crosspost filter.
  Set one number, and articles are rejected if posted such that
  followups will be to more than that many groups.
o Use byte-length of message body in EMP checks if no Lines header
  is present.
o Each of the three different EMP checks can now be turned off in
  the configuration.
o Added 'poison_groups' to reject crossposts to anything that
  matches.  Replaces the venerable "misspelling trap".

0.95.3
------
o Added $aggressive option.  Set to 0 to disable all content-based
  filters.
o Changed the crossposting code a bit.
o Try to avoid "killer articles" by skipping body checks on articles
  over 8000 lines that aren't large enough to be an encoded binary.
o Tweaked the from/subject/lines filter a tad.
o Added a fuzzy option to the MD5 filter -- removes non alphanumeric
  characters and whitespace, and strips MIME-sepearator lines, before
  MD5ing the body.
o Changed filter.patch (INN only).  An unfortunate necessity, to get
  access to the X-Newsreader header.  An upgrade patch is provided.
o Added a couple of X-Newsreader filters.
o Turned the documentation into a man page.
o No more $badips.  There are no good IPs.  Any IP-address URL will
  be considered spam.
o Added NNTPRelay support.
o Unified the code so the same program works with all the different
  server packages.
o Changed the name to "Cleanfeed" because that's what everyone calls
  it anyway.

0.95.2
------
o Cleaned out some obsolete $badguys.
o MD5 checks and header checks now use different histories so the
  length can be specified for each.
o $ArticleHistSize changed to $ArticleHistory because lots of these
  variables are sounding very similar
o Tweaked the out-of-date Netzilla filter.
o Added "URL in From line" filter.  Real people don't put URLs in
  their From lines.
o Changed default $bin_allowed to include de.alt.dateien (German
  alt.binaries) and allow for other non-English binaries groups.
o Changed the name of the second patch to "dynamic-load.patch"
  because "md5.patch" was stupid.  It doesn't do md5, it just
  enables dynamic perl loading.  The patch has *not* changed.
o The $badguys check now looks at NNTP-Posting-Host.

0.95.1
------
o Added MD5 body checksums, and the new patch to enable them.
o Changed the EMP memory expiration to time-based.
o Moved body-scanning filters to the end of the code, after the EMP
  filter, so they won't be called as much.  (Performance enhancement.)
o Various other performance enhancements.
o Added $allexclude to keep clari.* intact.
o EMP memory only expired every $trimcycles times through the filter.
o Changed the default for $block_binaries to on, now that the binary
  filter works the way I want.

0.95
----
o Improved binary filter again, now relies on detection of encoded lines.
o Added $max_encoded_lines variable for binary filter.
o Added $bin_allowed to tell the binary filter where binaries are ok.
o Added $verbose option.  Turned on, makes news.daily reports interesting;
  turned off, makes them shorter and more to the point.
o Added "services" filter, scanning subject lines.  Very nice.
o Added a filter for the "angle-bracket spam bot", made famous by
  the sperm-donor spammer.
o Forced-lowercase body scan now only looks at first 50k of the article.
  (That should be enough...?)
o Added Email Platinum filter
o Fixed the continuation-line bug in the Cyclone version

0.94.4
------
o Lowercase Organization once instead of multiple times.
o Removed some obsolete $badguys and filters.
o Added some new $badguys, of course.
o Raised the default EMP settings a tiny bit.
o Fixed up the search for uuencoded and base64-encoded lines.
  It works much better now.
o Made the blocking of MIME-encapsulated HTML an option, in case it
  makes you uncomfortable.  Please note that this does NOT affect
  straight HTML or multipart/alternative, like the posts generated
  by Netscape and IE, but ONLY MIME-encapsulated HTML posts, a
  favorite format of sex spammers which often sneaks in under the
  EMP radar.
o Brought the Cyclone version up to date, finally.

0.94.3 (INN version only)
------
o Exempt posts in binary groups over 1000 lines from the posting-host
  filter, to prevent false positives on multipart binary posts.
o Moved config variables out of filter_art, so they don't need to
  be executed every time through the filter.  (INN version.)
o Added a lower crosspost limit for jobs, forsale, and test groups.
o Added a nifty new filter to catch the Adultsights spam based on
  the pattern of headers their spam program makes.
o "Misc HTML Spam" was catching all multipart/alternative HTML posts,
  regardless of the $block_html setting.  It shouldn't be anymore.
o Added spammer-filters and such, obviously.

0.94.2 (INN version only)
------
o ARGH! *Really* fixed the AOL false positive problem.  I will write
  on the chalkboard 1000 times, "double quotes eat backslashes."
  (Cyclone 0.94 is fixed.)
o Moved the lowercasing of the body inward in the loop so it is not
  applied to all articles (performance enhancement).
o Changed some body search regexps to accomodate.
o Changed the ^begin regexp again.

0.94.1
------
o Improved the binaries-in-non-binary-groups filter, and fixed a
  small bug in the INN version.
o Added a couple more exemptions and a couple more spammers, since
  I was making changes anyway.
o Reversed the order of this file, because, like, that's what
  other people do.

0.94
----
o Added option to reject binaries in non-binary groups.
o Added option to reject HTML and multipart/alternative posts.
o Added a few more spam sites.
o Cleaned up the URL body scan to use $badguys and $badips.
o Made the URL search case-insensitive.
o Added search for text/html within multipart MIME posts.
o Attempted performance enhancement by lowercasing strings instead
  of using case-insensitive pattern matches.
o Sprinkled some ?: around as another attempted performance enhancement.
o Changed the regexp searching for ^begin lines of encoded HTML spam.
o Fixed a false positive problem -- all articles coming from AOL
  have the AOL news server name in NNTP-Posting-Host, so many AOL
  posts were getting caught by the posting-host/lines EMP filter,

0.93
----
First "real" release.

