2.31 "Nothing" (release 30.8.2005)

  * Added missing http:// scheme to google.html error page.
    Type: bugfix
    Changed: wc/google.py, templates/classic/google.html

  * Only try to recognize MIME type if enough data is available.
    Type: bugfix
    Changed: wc/filter/MimeRecognizer.py

  * Ensure that HTML tag and attribute names are ASCII safe.
    Other modules (eg. the HtmlSecurity filter) rely on that assumption.
    Type: feature
    Changed: wc/HtmlParser/htmllex.l

  * Ability to use placeholders when replacing header values. The
    "Referer:" header for example is now always the request domain.
    Type: feature
    Changed: wc/filter/Header.py

  * Added forgotten ATTRNAME to part value list and to filter method.
    Type: bugfix
    Changed: wc/filter/rules/HtmlrewriteRule.py

  * Updated spidermonkey JavaScript library from upstream CVS as of
    20050828.
    Type: feature
    Changed: libjs/*

  * Updated blacklist filters as of 20050828.
    Type: feature
    Changed: config/blacklist*

  * Filter updates:
    - remove more X-<something> response headers
    - remove OSDN feed ads (slashdot and freshmeat)
    Type: feature
    Changed: config/*.zap

  * Added framework for HTTP/1.1 RFC compliance tests. Also added some
    tests.
    Type: feature
    Added: wc/proxy/ftests/*.py

  * HTTP/1.1 compliant handling of Warning: headers.
    Type: feature
    Changed: wc/proxy/Headers.py

  * Make the SSL certificate name length a multiple of 4 to work around
    a bug in the pyopenssl wrapper which accidently identifies strings
    as UniversalStrings when they are in fact not.
    Type: bugfix
    Changed: wc/proxy/ssl.py

  * Use CSS mini-tabs in the HTML interface navigation.
    Type: feature
    Changed: templates/classic/wc.css, templates/classic/macros/standards.html

  * The Windows installer generates now an Internet Shortcut pointing
    to the configuration web page.
    Type: feature
    Changed: install-webcleaner.py

2.30 "Dear Wendy" (released 16.8.2005)

  * Fix attribute error in allowance check.
    Type: bugfix
    Changed: wc/proxy/Allowed.py

  * Fix case where connections were stalled in connect state forever.
    Type: bugfix
    Changed: wc/proxy/Dispatcher.py

  * Remove too large HTML width/height and src/href values.
    Type: feature
    Changed: wc/filter/HtmlSecurity.py

  * Added XML filter module, with special filter mode for RSS feeds.
    Type: feature
    Added: wc/filter/XmlRewriter.py, wc/filter/xmlfilt/*.py,
      wc/filter/rules/Xmlrewriterule.py
    Changed: wc/webgui/context/filterconfig_html.py,
      templates/classic/macros/rules.html

  * Allow changing of clamav config value over web GUI.
    Type: bugfix
    Changed: wc/webgui/filterconfig_html.py

  * Remove unallowed double header entries.
    Type: bugfix
    Changed: wc/proxy/Headers.py

  * Remove unallowed content body from GET and HEAD requests.
    Type: bugfix
    Changed: wc/proxy/HttpClient.py

  * Updated spidermonkey JavaScript library from upstream CVS as of
    20050809.
    Type: feature
    Changed: libjs/*

  * Initial cookie value is an empty string, not NULL. Fixes some
    improperly handled JS script.
    Type: bugfix
    Changed: wc/js/jslib.c

  * Catch decoding errors on HTTP Digest authentication.
    Type: bugfix
    Changed: wc/proxy/auth/digest.py

  * Ensure that proxy usernames and passwords are all ASCII.
    Type: bugfix
    Changed: wc/configuration.py, wc/webgui/context/config_html.py,
      templates/classic/config.html

  * Instead of removing the "Referer" HTTP header it is now replaced
    with "http://www.google.com/".
    Type: feature
    Changed: config/headers.zap

2.29 "The Forgotten" (released 12.4.2005)

  * Replace template_dir in windows install script.
    Type: bugfix
    Changed: install-webcleaner.py

  * Do not include generated .html pages in source tarball.
    Type: bugfix
    Changed: doc/en/Makefile.am

2.28 "Shrek" (released 16.3.2005)

  * Initialize the ImageReducer attributes properly. Only change
    headers when filtering data, not earlier.
    Type: bugfix
    Changed: wc/filter/ImageReducer.py

  * Split off any superfluous MIME info when detecting MIME types.
    Type: bugfix
    Changed: wc/magic/__init__.py

  * Fix conffile name on windows installations
    Type: bugfix
    Closes: SF bug #1150918
    Changed: install-webcleaner.py

  * Close client connection on server connect() errors.
    Type: bugfix
    Changed: wc/proxy/HttpServer.py

2.27 "Aliens" (released 11.2.2005)

  * Add <nbr> to the list of known deprecated tags so it does not get
    corrected to <br> anymore.
    Type: feature
    Changed: wc/filter/HtmlTags.py

  * Mime type classification returns now a properly stripped mime type.
    Type: bugfix
    Changed: wc/magic/__init__.py

  * HTML parser updates:
    - supply and use Py_CLEAR macro
    - only call set_encoding function if tag name is 'meta'
    Type: feature
    Changed: wc/HtmlParser/*

  * Changed documentation format for epydoc.
    Type: documentation
    Changed: *.py

  * SSL certificates are now checked for expiration. Expired certificates
    are no longer accepted.
    Type: feature
    Changed: wc/proxy/ssl.py

  * The build script setup.py uses -std=gnu99 when using GNU gcc compilers.
    This gets rid of several compile warnings.
    Type: feature
    Changed: setup.py

  * HTML data will be defered until all filters have seen some data.
    This ensures correct header values.
    Type: bugfix
    Changed: wc/proxy/HttpServer.py

2.26 "Tokyo Raiders" (released 2.1.2005)

  * Do not include test packages in installed binaries. This prevents
    finding the Virus test pattern in them.
    Type: feature
    Changed: setup.py

  * Fix rule XML export.
    Type: bugfix
    Changed: wc/filter/rules/Rule.py

  * Updated blacklists and advert filters.
    Type: feature
    Changed: config/*.zap

  * Added restart button to proxy configuration HTML page.
    Type: feature
    Changed: wc/__init__.py, webcleaner, wc/webgui/webconfig.py,
    Added: templates/classic/restart.html,
      wc/webgui/context/restart_html.py

  * Reenabled and fixed the rating edit pages.
    Type: bugfix
    Changed: templates/classic/rating*.html, wc/webgui/context/rating*.py

  * Reenabled and fixed the rating rules.
    Type: bugfix
    Changed: wc/filter/rules/RatingRule.py,
      templates/classic/macors/rules.html

2.25 "Elf" (released 23.12.2004)

  * Filter rating is disabled for now until it works again.
    Changed: wc/configuration.py, templates/classic/macros/standard.html,
      templates/classic/update.html, wc/webgui/context/filterconfig_html.py

  * Put documentation in language specific directories.
    Added: doc/en/*, doc/de/*
    Changed: MANIFEST.in, setup.py

  * Ignore unknown or unsupported tags in XML configuration files.
    Changed: wc/configuration.py

  * Updated spidermonkey JavaScript library from upstream CVS as of
    20041221
    Type: feature
    Changed: libjs/*

2.24 "Tootsie" (released 10.12.2004)

  * Really ignore encoding errors of HTML content.
    Type: bugfix
    Changed: wc/filter/HtmlParser.py

  * Another fix for MIME type changing.
    Type: bugfix
    Changed: wc/proxy/Headers.py

  * Install both ugettext() and ungettext() into the default namespace
    for translation.
    Make fallback class customizable in get_translator().
    Type: feature
    Changed: wc/i18n.py

  * Encode msg variable of web configuration response. Fixes crash
    when LANG=de_DE@euro was set and the configuration interface was
    requested.
    Type: bugfix
    Changed: wc/webgui/webconfig.py

  * Regenerate the HTML parser with new Bison version 1.875d.
    Also use the now supported Bison memory macros YYMALLOC and
    YYFREE.
    The parser now honors the document type and generates XML-style
    end tags for XHTML documents.
    Type: feature
    Changed: wc/HtmlParser/htmlparse.y

  * Do not try to detect CSS Mime type with the magic(5) database, since
    it is not supported there.
    Introduced an wc.magic.unsupported_types list for that.
    Type: bugfix
    Changed: wc/magic/__init__.py, wc/proxy/HttpServer.py

  * Added german man pages.
    Type: documentation
    Added: docs/de/*.[15]

  * Disable the BinaryCharFilter for Unicode data since the HTML
    parser does not yet support Unicode.
    Type: bugfix
    Changed: wc/filter/BinaryCharFilter.py

  * Honor nomatchurl when applying header rules.
    Type: bugfix
    Changed: wc/filter/Header.py

  * Do not add duplicate rules to filter modules.
    Type: bugfix
    Changed: wc/configuration.py

2.23 "The fog of war" (released 27.10.2004)

  * Fixed MIME type changing.
    Type: bugfix
    Changed: wc/proxy/Headers.py

  * Handle case in MIME recognizing where Content-type header was
    missing.
    Type: bugfix
    Changed: wc/filter/MimeRecognizer.py
    
  * Only enable support for network interface configuration on
    Linux and Windows platforms. All other are currently not supported.
    Type: bugfix
    Closes: SF bug #1053838
    Changed: wc/dns/ifconfig.py

  * The windows installation has been fixed.
    Type: bugfix
    Closes: SF bug #1053899
    Changed: setup.py, wc/proxy/Dispatcher.py

  * Ignore encoding errors of HTML content.
    Type: bugfix
    Changed: wc/filter/HtmlParser.py

  * Proper reset of Connection objects, including emptying of all send
    and receive buffers.
    Type: bugfix
    Changed: wc/proxy/*Connection.py

  * Updated spidermonkey JavaScript library from upstream CVS as of
    20041026
    Type: feature
    Changed: libjs/*

2.22 "Monster" (released 20.10.2004)

  * added favicon.ico to distributed files
    Type: bugfix
    Changed: setup.py

  * fix filter update imports
    Type: bugfix
    Changed: wc/update.py

  * fix folder config charset import
    Type: bugfix
    Changed: wc/filter/rules/FolderRule.py

  * initialize indexstr attr after generating new folders
    Type: bugfix
    Changed: wc/webgui/context/filterconfig_html.py

  * use correct configdir in all classes
    Type: bugfix
    Changed: wc/update.py, wc/magic/__init__.py, wc/webgui/context/*.py
      wc/filter/Blocker.py

  * accept both unicode and normal strings for TALES path segments,
    fixes generation of new rules
    Type: bugfix
    Changed: wc/webgui/PageTemplates/Expressions.py

  * do not set client mime for server content
    Type: bugfix
    Changed: wc/proxy/HttpClient.py

2.21 "Bugsy" (released 18.10.2004)
  * make string of domain before concatenating
    Type: bugfix
    Changed: wc/proxy/dns_lookup.py

  * generate .mo file per default
    Type: bugfix
    Changed: po/Makefile.am

  * added missing set_format log function
    Type: bugfix
    Changed: wc/__init__.py

  * more fixes for the .exe binary installer
    Type: bugfix
    Changed: Makefile.am

2.20 "The machinist" (released 16.10.2004)
  * Fixed service install (SF bug #1001556)
    Type: bugfix
    Changed: Makefile.am

  * Added BinaryCharFilter to the list of content-rewriting filters
    Type: bugfix
    Changed: wc/__init__.py

  * use dnspython for DNS resolving
    Type: feature
    Added: wc/dns/*
    Changed: wc/proxy/dns_lookups.py

  * do not double-quote the document, so that URLs with ~ and other
    quotable characters work again
    Type: bugfix
    Changed: wc/proxy/ClientServerMatchmaker.py

  * fix IP netmask/suffix calculation
    Type: bugfix
    Changed: wc/ip.py

  * Use Zope TAL (ZPT) implementation instead of SimpleTAL. This has
    the advantage of a fully supported "i18n:" namespace.
    Type: feature
    Added: wc/webgui/{TAL,ZTUtils,PageTemplates}
    Removed: wc/webgui/simpletal
    Changed: wc/webgui/*.py

  * Recognize MIME type not in request form content but in request data.
    Type: bugfix
    Added: wc/filter/MimeRecognizer.py
    Changed: wc/filter/__init__.py, wc/proxy/HttpServer.py

  * In URLs keep a trailing equal sign in CGI key-value pairs even if the
    value is an empty string. Otherwise some sites will not work correctly.
    Type: bugfix
    Changed: wc/url.py

  * Configurable socket bind address. The configuration displays a list of
    network interface addresses to listen on.
    Type: feature
    Changed: wc/configuration.py, wc/proxy/Listener.py,
      wc/webgui/context/config_html.py, template/classic/config.html

  * Configuration shortcut: config.html?disablefilter=1 disables
    all filters. This is a shortcut for adding 1.1.1.1/0 to the nofilter
    host list.
    Specifying enablefilter=1 enables the filters back again.
    Type: feature
    Changed: wc/webgui/context/config_html.py

  * Fixed the "server_content without server" bug by reordering
    the handle_close calls
    Type: bugfix
    Changed: wc/proxy/HttpClient.py

  * Add data of all filters to filter attributes since the MIME type
    can change dynamically.
    Type: feature
    Changed: wc/filter/__init__.py

  * The HTML parser now emits Unicode data.
    Type: feature
    Changed: wc/HtmlParser/*

  * The external required modules PIL, Crypto and OpenSSL are now optional,
    however still recommended.
    Type: feature
    Changed: setup.py, wc/*/*.py

  * The error page has now a link to the coral cache of the page.
    Type: feature
    Changed: template/classic/google.html, wc/google.py

  * Added a new mailing list to the sourceforge page:
    webcleaner-users@lists.sourceforge.net
    Type: documentation
    Changed: docs/faq.txt, docs/index.txt

  * Removed the keyword args "**" prefix to have a modifiable filter
    attribute dictionary.
    Type: bug fix
    Changed: wc/filter/*.py

  * Fixed the value conversion function for the magic(5) database
    reader.
    Type: bug fix
    Changed: wc/magic/__init__.py

  * Support cross compiling for bdist_wininst
    Type: feature
    Changed: setup.py, Makefile.am
    Added: crossbuild.sh

2.19 "A Knight's Tale" (released 27.7.2004)
  * Fix _webcleaner2_config.py file writing when --root directory has a
    trailing slash, and don't write the unneeded output file list.
    This should fix custom installers (eg Gentoo scripts).
    Type: bugfix
    Changed: setup.py

  * Fixed ImageReducer initialization, and filter always if image
    size is not known
    Type: bugfix
    Changed: wc/filter/ImageReducer.py

  * Redirections to the proxy host are forbidden.
    Type: feature
    Changed: wc/proxy/HttpServer.py

  * improve parsing of Accept-Encoding values in Compress module
    Type: feature
    Changed: wc/filter/Compress.py

  * construct filter config xml before opening file for write;
    prevents null byte files
    Type: bugfix
    Changed: wc/filter/rules/FolderRule.py

  * new and improved test script from the schooltool project
    Type: feature
    Changed: a lot of files were moved/updated
    Added: test.py, testsimpletal.py

  * factorized code into new packages and modules
    Type: code cleanup
    Changed: a lot :)

  * Split filter header arguments in client, server and data headers.
    Client and server headers are read-only, data headers are mutable.
    Type: bugfix
    Changed: wc/filter/*.py, wc/proxy/Http{Server,Client}.py

  * the block message html is now more concise and informative
    Type: feature
    Changed: templates/classic/blocked.html, wc/filter/Blocker.py

  * fixed the url_norm function to not unquote the url anymore
    Type: bugfix
    Changed: bk/url.py

  * added a favicon
    Type: feature
    Changed: templates/classic/*.html
    Added: templates/classic/favicon.*

  * fixed HTML comment parsing
    Type: bugfix
    Changed: bk/HtmlParser/htmllex.l

  * merge upstream CVS changes of libjs (spidermonkey) as of 20040725
    Type: feature
    Changed: libjs/*

  * updated squidguard blacklists as of 20040725
    Type: feature
    Changed: config/blacklist/*, config/blacklist_*.zap

2.18 "Bubba Ho-tep" (released 1.6.2004)
  * rename local var 'data' to correct name 'content'
    Type: bugfix
    Changed: wc/proxy/Headers.py

  * install blocked.js and blocked.swf
    Type: bugfix
    Changed: setup.py

  * fix --configdir option handling in webcleaner script
    Type: bugfix
    Changed: webcleaner

  * add --no-file-logs option to webcleaner script
    Type: feature
    Changed: webcleaner, webcleaner.1, wc/__init__.py, wc/win32start.py,
      service/webcleaner/run2

2.17 "Ong-bak" (released 29.5.2004)
  * Added release names. Due to the somewhat shaky past releases,
    those names should render each release a pearl of uniqueness.
    Now all one has to do is look at the name - which will always be
    a name of a really good movie - and watch this movie. After that,
    any error in the release will be a little less bad :)

  * doh, add docs to DIST_SUBDIRS
    Type: bugfix
    Changed: Makefile.am

  * make all hosts lowercase in dns config
    Type: bugfix
    Changed: wc/network/*.py, tests/TestDns.py

  * really remove old wcheaders stuff
    Type: code cleanup
    Removed: config/wcheaders.{conf,dtd}
    Changed: setup.py

  * add bgsound to old html tags
    Type: feature
    Changed: wc/filter/HtmlTags.py

  * show adminpass.html page when a non-public local page has been
    requested without having set an admin password
    Type: feature
    Changed: wc/proxy/HttpClient.py

2.16 (released 26.5.2004)
  * parse and quote query parts of urls
    Type: bugfix
    Changed: wc/url.py

  * added all allowed blocked pages to public documents
    Type: bugfix
    Changed: wc/proxy/Allowed.py

  * always check for public documents in local pages
    Type: bugfix
    Changed: wc/proxy/HttpClient.py

  * fix urls with (leading) backslashes or double slashes in the path
    Type: bugfix
    Changed: wc/url.py

  * when url had backslashes, give a 302 redirect to correct url
    Type: feature
    Changed: wc/proxy/HttpClient.py

  * sanitize JavaScript urls before background download, fixes "invalid
    script src" errors
    Type: bugfix
    Changed: wc/filter/JSFilter.py

  * add Host: header, not host: on client requests
    Type: bugifx
    Changed: wc/proxy/Headers.py

  * added new network package with ability to find all configured
    local ip addresses in a system
    Type: feature
    Added: wc/network/*.py
    Moved: wc/ip.py -> wc/network/ip.py
    Changed: setup.py, Makefile.am

  * reread DNS config every minute
    Type: feature
    Changed: wc/proxy/dns_lookups.py

  * do not build documentation per default, fixes install problems on
    some platforms
    Type: bugfix
    Changed: Makefile.am

  * move special container classes into own submodule and use them
    Type: feature
    Added: wc/containers.py
    Moved: tests/TestSortedDict.py -> tests/TestContainers.py
    Changed: wc/parser/{htmllex.l,htmlparse.y,htmlsax.h},
      wc/network/__init__.py

  * fix configfile writing
    Type: bugfix
    Changed: wc/__init__.py

  * set default config dir in win32start handler
    Type: bugfix
    Changed: wc/win32start.py

  * only apply non-empty config dir to win32start handler
    Type: bugfix
    Changed: webcleaner

  * fixed and better logging of rating and filter updaters
    Type: bugfix
    Changed: wc/update.py, wc/webgui/context/update_doit_html.py

2.15 (released 22.5.2004)
  * set default config dir in webcleaner script
    Type: bugfix
    Changed: webcleaner

2.14 (released 22.5.2004)
  * honor unreadable state in StatefulConnection.readable()
    Type: bugfix
    Changed: wc/proxy/StatefulConnection.py

  * use out.write() in tagbuffer output directly instead of putting
    together a string; solves encoding problems
    Type: bugfix
    Changed: wc/filter/rules/RewriteRule.py

  * fix challenge writing when given a wrong password
    Type: bugfix
    Changed: wc/proxy/HttpClient.py

  * merge upstream CVS changes of libjs (spidermonkey) as of 20040522
    Type: feature
    Changed: libjs/*

  * use wc.log, not "from wc.log import *"
    Type: code cleanup
    Changed: *.py

  * do not bail out on I/O errors (eg gzip error) when reading
    configuration files
    Type: bugfix
    Changed: wc/filter/Blocker.py

  * new function applyfilters to apply filters of multiple levels
    Type: feature
    Changed: wc/filter/__init__.py, wc/proxy/Http{Client,Server}.py

  * changed command line options: webcleaner and webcleaner-certificates
    accept both now a --configdir option
    Type: feature
    Changed: webcleaner{,.1}, webcleaner-certificates{,.1}

2.13 (released 11.5.2004)
  * remove all old simpletal imports
    Type: bugfix
    Changed: wc/webgui/simpletal/simpleTAL.py

  * added docutils to requirements
    Type: bugfix
    Changed: docs/install.txt

  * more encoding fixes
    Type: bugfix
    Changed: wc/filter/rules/*.py, wc/webgui/context/*.py

  * add charset to filter attrs
    Type: bugfix
    Changed: wc/proxy/HttpClient.py

  * add charset to content type header
    Type: bugfix
    Changed: wc/webgui/__init__.py

2.12 (released 8.5.2004)
  * do not assume zero content size if Content-Length header is
    missing in a server reply
    Type: bugfix
    Changed: wc/proxy/{HttpServer,Header}.py

  * handle HTTP servers were both response line and headers are
    missing
    Type: feature
    Changed: wc/proxy/HttpServer.py

  * fixed HTML comment parsing
    Type: bugfix
    Changed: wc/parser/htmllex.l

  * fixed webcleaner -h call of print_help
    Type: bugfix
    Changed: webcleaner

  * fixed win32 startup
    Type: bugfix
    Changed: webcleaner

  * enable py2exe inclusion
    Type: feature
    Changed: setup.py

  * updated simpletal to upstream version 3.9, use unicode strings in
    context vars and filters
    Type: feature
    Changed: wc/webgui/simpletal/*, wc/__init__.py, wc/webgui/__init__.py
      wc/webgui/context/*, wc/filter/{__init__,Replacer}.py

  * merge upstream CVS changes of libjs (spidermonkey) as of 20040505
    Type: feature
    Changed: libjs/*

  * updated squidguard blacklists
    Type: feature
    Changed: config/blacklist/*, config/blacklist_*.zap

2.11 (released 25.4.2004)
  * - preserve the order in which HTML attributes have been parsed
    - cope with trailing space in HTML comments
    Type: feature
    Changed: wc/parser/{__init__.py,htmllex.l}

  * fix rewrite rule filtering when only the tag name should be
    replaced
    Type: bugfix
    Changed: wc/filter/rule/RewriteRule.py, wc/filter/HTMLFilter.py

  * correct ".." typos in domain names on DNS resolving
    Type: feature
    Changed: wc/proxy/dns_lookups.py

  * do not quote commas in url paths, solves "Access forbidden"
    problems on some servers
    Type: bugfix
    Changed: wc/url.py

  * allow JavaScript urls to connect to port 80 (default), 8000 (used
    in test scripts) and 8080 (for proxies).
    Type: feature
    Changed: wc/url.py

  * merge upstream CVS changes of libjs (spidermonkey) as of 20040425
    Type: feature
    Changed: libjs/*

  * change default socket timeout to 10 seconds, and apply it only
    to server sockets, added correct timeout error code
    Type: bugfix
    Changed: config/webcleaner.conf, wc/__init__.py, wc/proxy/SslServer.py,
      wc/proxy/HttpsServer.py, wc/

  * filter background JavaScript download urls
    Type: feature
    Changed: wc/proxy/HttpProxyClient.py, wc/filter/Blocker.py
    Added: templates/classic/blocked.js

  * remove 404 "Not found" from the list of errors to display the google
    search possibilities on
    Type: feature
    Changed: wc/google.py

  * added a virus filter module using the clamav virus scanner
    Type: feature
    Changed: wc/__init__.py, wc/webgui/context/filterconfig_html.py,
      templates/classic/macors/rules.html
    Added: wc/filter/VirusFilter.py, wc/filter/rules/AntivirusRule.py,
      tests/TestClamdScanner.py, test/virus/*

  * fixed the magic(5) rule checking for string types
    Type: bugfix
    Changed: wc/magic/{convert,magic}.py

  * prevent CAN-2004-0380 (Microsoft ITS protocol vulnerability)
    Type: feature
    Changed: wc/filter/HtmlSecurity.py, tests/TestRewriter.py

  * fix proxy crash when connect() raised socket error or timeout
    Type: bugfix
    Changed: wc/proxy/{Http,Ssl}Server.py

  * The ``webcleaner`` script accepts new commandline options
    --config and --filterdir to be able to specify custom configuration
    and filter definitions.
    Type: feature
    Changed: webcleaner, wc/__init__.py


2.10 (released 27.3.2004)
  * merge upstream CVS changes of libjs (spidermonkey) as of 20040323
    Type: feature
    Changed: libjs/*

  * move psyco initialization to after startup, just before the proxy
    mainloop starts. this speeds up the startup a bit when psyco is
    used.
    Type: optimization
    Changed: webcleaner, wc/__init__.py

  * do not use locals(), this does not work for psyco-compiled functions
    Type: bugfix
    Changed: wc/proxy/auth/digest.py

  * filter unreadable or unwritable sockets from socket handler list
    Type: bugfix
    Changed: wc/proxy/__init__.py

  * new header rule attribute allowing to specify to only filter headers
    in request, response or both
    Type: feature
    Changed: config/filter.dtd, wc/filter/Header.py,
      wc/filter/rules/HeaderRule.py

  * webgui config for new header attribute
    Type: feature
    Changed: wc/webgui/context/filterconfig_html.py,
      templates/classic/macros/rule.html

  * new url validity check function allowing queries, used to check
    JavaScript source links
    Type: feature
    Changed: wc/url.py, wc/filter/JSFilter.py, tests/TestUrl.py

  * added `htmlpromo' to the known invalid html tags
    Type: feature
    Changed: wc/filter/HtmlTags.py

  * added SSL gateway functionality, starting a local SSL server
    to handle and filter https connections. This feature is still
    considered in development, since SSL certificates are not verified.
    Type: feature
    Changed: wc/__init__.py, wc/proxy/{__init__,ClientServerMatchmaker}.py
    Added: wc/proxy/{HttpsServer,SslClient,SslServer}.py, test/getssl.py,
      webcleaner-certificates*

  * web gui configuration for ssl gateway
    Type: feature
    Changed: wc/webgui/context/config_html.py, templates/classic/config.html

  * the "no filter hosts" list is now a list of domains, equivalent to
    Mozillas "no proxy for" domain list
    Type: feature
    Changed: wc/{url,ip,__init__}.py, wc/webgui/context/config_html.py

  * the "allowed hosts" list is now DNS resolved
    Type: feature
    Changed: wc/ip.py

  * the "edit rule" in blocked HTML pages has now a "_top" target,
    removing any parent frames.
    Type: feature
    Changed: templates/classic/blocked.html

  * decouple NT service install from setup.py, and proper wait for NT
    service to start up, then open web config. this fixes the Windows
    install.
    Type: bugfix
    Added: webcleaner-service
    Changed: setup.py

  * handle and correct missing start quotes in HTML attributes
    Type: feature
    Changed: wc/parser/htmllex.l


2.9 (released 1.3.2004)
  * do not ship _webcleaner2_configdata.py, and adjust file permissions
    for the tarball
    Changed: MANIFEST.in, Makefile.am
  * break cyclic references in configuration parsers
    Changed: wc/__init__.py
  * break cyclic references in simpleTAL compilers
    Changed: wc/webgui/simpletal/simpleTAL.py
  * removed HtmlParser class in favor of pure handler class, the combined
    parser/handler classes are now splitted.
    Changed: wc/parser/htmllib.py, wc/filter/{Rewriter,HtmlParser}.py
    Added: wc/filter/{JS,Html}Filter.py
  * HTML parser and JS environment objects are now subclassable and
    collectable by the cyclic garbage collector
    Changed: wc/parser/htmlparse.y, wc/js/jslib.c
  * added note that the web configuration needs write permissions in
    the configuration directory
    Changed: README
  * line and column counting has been added to the HTML parser
    Changed: wc/parser/{htmlparse.y,htmllex.l,htmlsax.h}
  * merge upstream CVS changes of libjs (spidermonkey) as of 20040216
    Changed: libjs/*
  * simplyfied Connection close handling, and ship our own Dispatcher
    class
    Added: wc/proxy/Dispatcher.py
    Changed: wc/proxy/{Connection,HttpClient,Server,HttpServer,
      ClientServerMatchmaker,HttpProxyClient}.py
  * a block/allow domain rule is only matched against the url domain, not
    against the complete url anymore
    Changed: wc/filter/Blocker.py
  * The standard block page displays a link to edit the rule responsible
    for the blocked page.
    Changed: templates/classic/blocked.html, wc/filter/Blocker.py,
      wc/webgui/context/blocked_html.py
  * translation improvements in the TAL interpreter
    Changed: wc/webgui/simpletal/simpleTAL.py
  * translatable rule title and description
    Changed: wc/filter/rules/*.py, wc/__init__.py, config/filter.dtd,
      config/*.{zap,py}
  * added a rating update service to the filter update page
    Changed: wc/filter/Rating.py, wc/update.py,
      templates/classic/update.html
  * service supervision is done by the runit tools instead of the
    daemontools.
    Changed: service/*, debian/{control,webcleaner.init}
  * added another easter egg. I like eggs 8-)

2.8 (released 15.1.2004)
  * removed old webcleanerconf gui and wcheaders tool; the preferred way
    to configure webcleaner is over the web interface.
    Removed: wc/gui/*, webcleanerconf*, wcheaders*
    Changed: setup.py, MANIFEST.in, debian/control, debian/rules
  * remove own daemon functions in favor of daemontools on Unix/Linux
    and NT services on windows.
    Removed: wc/daemon/*.py
    Changed: webcleaner, wc/__init__.py, wc/proxy/__init__.py
    Added: wc/win32start.py
  * added separate administrator user/password for the configuration
    interface
    Changed: wc/__init__.py, wc/proxy/HttpClient.py,
      wc/proxy/ClientServerMatchmaker.py, wc/webgui/config_html.py,
      templates/classic/config.html, FAQ
  * disable the proxy until an administrator password was given.
    Changed: wc/proxy/HttpClient.py
    Added: templates/classic/adminpass.html,
      wc/webgui/context/adminpass_html.py
  * added rating config interface
    Added: templates/classic/rating.html, wc/webgui/context/rating_html.py
  * updated magic database to newest upstream
    Changed: config/magic.mime
  * added dhcp nameserver config support on windows dns resolver
    Changed: wc/proxy/dns_lookups.py
  * import everything from _winreg in windows registry wrapper
    Changed: wc/proxy/winreg.py
  * fixed and documented the windows installation procedure
    Changed: INSTALL, setup.py
  * added note nedding zlib support for python
    Changed: INSTALL
    Closes: SF #869424
  * added help for the web gui
    Added: templates/classic/help.html, wc/webgui/context/help_html.py
    Changed: templates/classic/macros/standard.html
  * merge upstream CVS changes of libjs (spidermonkey) as of 20031222
    Changed: libjs/*
  * added conflict for unstable psyco versions (I am using a cvs version
    of psyco)
    Changed: debian/control
  * do not (un)quote query parts of urls
    Changed: wc/proxy/__init__.py
    Closes: SF #868823
  * unquote network ips in configuration interface
    Changed: wc/ip.py, wc/webgui/context/config_html.py
    Closes: SF #868811, SF #877191
  * enclosed block matches can match complete HTML markup, not only data
    Changed: wc/filter/rule/RewriteRule.py
  * Accept all 2xx responses in background downloading, not only 200
    Changed: wc/proxy/HttpProxyClient.java
  * write new proxy config on all changes
    Changed: wc/webgui/context/config_html.py
  * after changing filter rules or folders all the filter modules are
    reinitialized
    Changed: wc/webgui/context/filterconfig_html.py
  * fix script src urls with broken base href
    Changed: wc/filter/HtmlParser.py
  * accept empty url in _has_lots_of_percents
    Changed: wc/filter/HtmlSecurity.py

2.7 (released 04.12.2003)
  * updated filters:
    - remove _top targets
    - mark <a href> custom targets with a dashed line
    - squidguard blacklist filters as of 20031204
    Changed: config/blacklists/*, config/misc.zap
  * prevent Opera vulnerability CAN-2003-0870
    Changed: wc/filter/HtmlSecurity.py
  * do not accept encoded pages for JavaScript background downloading
    Changed: wc/filter/HtmlParser.py, wc/proxy/HttpProxyClient.java
  * remove unused compress parameter
    Changed: wc/proxy/Http{Client,Server}.py,
      wc/proxy/ClientServerMatchmaker.py
  * new file(1)-like content guessing with a magic(5) database
    Added: wc/magic/*, config/magic.mime
    Changed: MANIFEST.in, setup.py, Makefile.am
  * wc.magic package enables correction of some wrong advertised file types.
    This also prevents exploits like those found in CVE-2002-0025 and
    CVE-2002-0024.
    Changed: wc/proxy/{Headers,HttpServer}.py
  * improved url norming, the url is no always unquoted before matching
    Changed: wc/proxy/__init__.py
  * new utility test/magic.py for commandline magic testing
    Added: test/magic.py
  * new utility test/get.py for download test
    Added: test/get.py
  * new test test_url for url norming tests
    Added: test/test_url.py, test/output/test_url
  * merge upstream CVS changes of libjs (spidermonkey) as of 20031126
    Changed: libjs/*
  * correct stopwatch message output
    Changed: wc/daemon/_posix.py
  * - properly initialize a RewriteRule added over the web interface
    - allow regex back references also in attribute value replacement
    Changed: wc/filter/rule/RewriteRule.py
  * fix xml output and parsing name typos in replace rule
    Changed: wc/filter/ReplaceRule.py
  * introduced a Py_RETURN_NONE macro
    Changed: wc/parser/{htmlsax.h,htmlparse.y}

2.6 (released 25.11.2003)
  * fixed background downloading with 30x redirects
    Changed: wc/proxy/HttpProxyClient.py
  * merge upstream CVS changes of libjs (spidermonkey) as of 20031125
    Changed: libjs/*
  * do not quote HTML attributes in the parser
    Changed: wc/parser/htmllex.[lc]
  * quote all HTML attributes after filtering
    Changed: wc/filter/HtmlParser.py, wc/parser/htmllib.py
  * fixed stop() and stopwatch() daemon functions
    Changed: webcleaner, wc/daemon/*.px
  * write changed filtermodules in web gui into config
    Changed: wc/webgui/context/config_html.py
  * dynamic filter attributes are now acquired only for used filter
    stages, not for all
    Changed: wc/filter/*.py, wc/proxy/Http{Server,Client}.py

2.5 (released 15.11.2003)
  * updated blacklist filters
    Changed: config/blacklist*, config/bl2wc.py
  * make AllowRule a subclass of UrlRule
    Changed: wc/filter/rule/AllowRule.py, wc/filter/Blocker.py,
      templates/classic/macros/rules.html
  * remove unnecessary bits from the dns library
    Removed: wc/proxy/dns/{lazy,Base,win32dns}.py
    Changed: wc/proxy/dns/*.py
  * corrected the reversed google cache urls
    Changed: templates/classic/google.html
  * merge upstream CVS changes of libjs (spidermonkey) as of 20031114
    Changed: libjs/*
  * FILTER_REQUEST must have the complete request for filtering, not
    only the URL
    Changed: wc/proxy/HttpClient.py, wc/filter/Blocker.py
  * improved get_user():
    - does not use getlogin() anymore
    - checks the sanity of the username before returning it, since it
      is used as a filename part
    Changed: wc/daemon/__init__.py
  * get rid of sys.path.insert, use PYTHONPATH instead
    Changed: all scripts
  * filtered requests must change previously stored data
    Changed: wc/proxy/ClientServerMatchmaker.py
  * fixed the rule merging
    Changed: wc/update.py, wc/__init__.py
  * make parsing of <? ?> html more tolerant
    Changed: wc/parser/htmllex.[lc]
  * ignore self.mime type on error
    Changed: wc/proxy/HttpServer.py

2.4 (released 1.11.2003)
  * merge upstream CVS changes of libjs (spidermonkey) as of 20031101
    Changed: libjs/*
  * enabled persistent client connections
    Changed: wc/proxy/{HttpClient,Connection}.py
  * new connection logger for printing all sent/received connection
    data for debugging
    Changed: wc/log.py, wc/proxy/Connection.py, config/logging.conf
  * enabled CONNECT tunneling; WebCleaner can now be a HTTPS proxy
    Changed: wc/proxy/[ClientServerMatchmaker,HttpClient,HttpServer}.py
  * updated .zap filter for https urls
    Changed: config/adverts{_specific,}.zap
  * added script to parser AdZapper squid_redirect files
    Added: config/adzap2wc.py
  * use python regex backreference expanding instead of named groups
    Changed: config/redirects.zap, wc/filter/rule/RewriteRule.py
  * in Block/AllowRule merge all url attributes into a single url regex
    Changed: wc/filter/rule/*.py, config/filter.dtd,
      templates/classic/macros/rules.html,
      templates/classic/filterconfig.html,
      wc/gui/FX{Allow,Block}RuleFrame.py,
      wc/webgui/context/filterconfig_html.py
  * fix bug in XML character data decoding
    Changed: wc/__init__.py, wc/filter/rule/*.py
  * optimize rule sorting; sort only once after config read; rule.oid
    is now generated dynamically, updated *.zap files accordingly
    Changed: wc/__init__.py, wc/filter/__init__.py, wc/filter/rules/*.py,
      config/filter.dtd, config/*.zap
  * limit number of displayed folder rules, added prev/next stuff
    Changed: wc/webgui/context/filterconfig_html.py,
      templates/classic/filterconfig.html

2.3 (released 21.10.2003)
  * oops, add some mising files to distribution
    Changed: setup.py, MANIFEST.in

2.2 (released 19.10.2003)
  * removed unused imports, better debugging
    Changed: wc/*.py, config/logging.conf
  * updated filters, whitelists removed due to conflict with GPL
    Changed: config/*.zap
  * parser fixes:
    - fixed parsing of end tags with trailing garbage
    - fixed parsing of script single comment lines
    - do not #include <stdint.h>, fixes build on some FreeBSD, Windows
      and Solaris/SunOS platforms
    - ignore first leading invalid backslash in a=\"b\" attributes
    - fixed parsing of script with \r line endings
    Changed: wc/parser/htmllex.{l,c}
  * cope with falsely advertised GIF images, the GIF parser skips
    invalid GIF data now
    Changed: wc/filter/GifImage.py
  * - fixed setting of missing host header
    - fixed redirection response data
    Changed: wc/proxy/ClientServerMatchmaker.py
  * Javascript engine initialization improvements:
    - set navigator.plugins['Shockwave Flash'] object
    - set location.hostname and document.location.hostname properties
    - add alert() function (doing nothing)
    - recognize IE window.createPopup() as a popup function
  * fixed parent proxy authentication in Basic and Digest mode
    Changed: wc/proxy/{basic,digest}.py, wc/proxy/HttpServer.py
  * added NTLM proxy authentication (UNTESTED)
    Changed: wc/proxy/Http{Client,Server}.py, wc/proxy/auth/__init__.py
    Added: wc/proxy/auth/{ntlm,des,des_c,des_data,md4,utils}.py
  * increase requested read/write data size on sockets to 4kB
    Changed: wc/proxy/Connection.py
  * use WcMessage always for headers which copes with header entries
    that have identical names
    Changed: wc/proxy/Headers.py
  * Security additions:
    - prevent CAN-2003-0238, table width=-1 crashes ICQ client
    - prevent CVE-2002-0823, WinHlp overflow bug
    - prevent CVE-2002-0153, local file redirection bug
    - prevent CVE-2002-0022, IE filename overflow crash
    - prevent CVE-2001-0130, Lotus Domino font size overflow crash
    Changed: wc/filter/HtmlParser.py
    Added: wc/filter/HtmlSecurity.py
  * norm the path of urls in request and script src tags
    Changed: wc/proxy/HttpClient.py, wc/filter/HtmlParser.py
  * use Python 2.3.1, fixes socket host name mem leak, and adds
    cStringIO().closed attribute
    Changed: INSTALL, wc/filter/ImageSize.py
  * for non-existing .com and .net hosts, the DNS server returns valid
    "host not found" messages, fixing the verisign wildcard DNS change
    Changed: wc/proxy/dns_lookups.py
  * new option "try_google": for invalid pages display an option page
    with google links
    Added: wc/google.py, templates/classic/google.html,
      wc/webgui/context/google_html.py
    Changed: wc/proxy/HttpClient.py
  * merge upstream changes of simpleTAL 3.5 and 3.6
    Changed: wc/webgui/simpletal/*.py, templates/classic/filterconfig.html
  * merge upstream CVS changes of libjs (spidermonkey) as of 20031016
    Changed: js/*
  * try to use psyco for speedup; see http://psyco.sf.net/ for more info
    Changed: webcleaner
  * do not try to write bytes when there is nothing to send (ie do
    not send 0 bytes)
    Changed: wc/proxy/Connection.py

2.1
  * lots of minor bugs fixed running pychecker
    Changed: a lot of .py files
  * make mimelist of filter modules to class variables
    Changed: wc/filter/*.py
  * you can now have a priority in a filter
    Changed: wc/__init__.py, wc/filter/Filter.py
  * fix some bugs with not detecting changed config values
    Changed: wc/webgui/context/config.py
  * improved footnote text in proxy configuration
    Changed: templates/classic/config.html
  * remove i18n from web context files, use i18n:translate in templates
    Changed: wc/webgui/context/*.py, templates/classic/*.html
  * wait until enough image data is available to get size info, this
    fixes the "could not get image size" errors
    Changed: wc/filter/ImageSize.py
  * added from glib project the detection of va_copy macro to configure.in
    and use that for compiling the JS library
    Changed: configure.in, libjs/jsprf.c, libjs/jsprf.h, libjs/Makefile.am
    Closes: SF bug #788040
  * fixed parent proxy authentication, added Digest authentication
    (both client and server authentication)
    Added: wc/proxy/auth/parse.py
    Changed: wc/proxy/auth/{digest,basic,__init__}.py,
      wc/proxy/ClientServerMatchmaker.py
  * fix parsing of JavaScript multi-line comments
    Changed: wc/parser/htmllex.l
  * handle JS background fetching more gracefully and consistent
    Changed: wc/proxy/HttpProxyClient.py, wc/filter/HtmlParser.py

2.0
  * require and use python 2.3
    Changed: a lot config and build files
  * remove -std=gnu99 option from compiler call, fixes compilation on
    platforms which do not have GNU gcc 3.x.
    Changed: setup.py
    Closes: SF bug #757361
  * do not setuid/setgid any more to enable web configuration
    Changed: wc/__init__.py
  * updated simpleTAL to 3.4
    Changed: wc/webgui/simpletal/*.py
  * - fix blocking filter
    - burn gif and switch to blocked.png
    Changed: wc/filter/Blocker.py, wc/webgui/__init__.py
    Added: templates/classic/blocked.png
  * - CAN-???: detect and prevent IE <input type> crash
    - CAN-???: detect and prevent Mozilla <fieldset style> crash
    - CAN-2003-0469: detect and prevent IE <hr align> crash
    - CAN-2003-0344: detect and prevent <object type> crash
    Changed: wc/filter/HtmlParser.py
  * added a web configuration interface with "classic" theme
    Added: templates/classic/*,
           wc/webgui/context/*.py,
  * added a templating mechanism
    Added: wc/webgui/*.py
  * new filter module ImageSize that filters images by size
    Added: wc/filter/ImageSize.py
  * - parse JS strings and comments
    - accept "<!- " as comment begin
    - allow colons in attribute names for namespaces
    Changed: wc/parser/htmlex.l
  * - handle empty status messages like 'HTTP/1.1 302 \r\n'
    - fix Message.get() usage by always providing default value
    - set statuscode for all http versions, even with missing response
      line
    Changed: wc/proxy/HttpServer.py
    Closes: SF bug #760434
  * added a new filter update mechanism that actually works
    Closes: SF bug #776076
    Added: wc/update.py

1.13
  * - when the HTTP server closes, flush any existing data
    - limit the time we wait for background javascript downloads
    Changed files: wc/proxy/HttpServer.py
  * more template stuff, minor debug updates
    Changed files: various

1.12
  * distribution fixes:
    - install template files
    - generate md5sums and gpg signatures for dist file
    - removed unused make targets
    - add misssing files to MANIFEST
    Changed files: Makefile.am, setup.py, MANIFEST.in

1.11
  * added "What you can do" entry
    Changed files: README
  * Filter rule updates:
    - remove <body ondragstart, oncontextmenu, onselectstart, onkeydown>
    - prevent document.onmousedown rebinding
    - some ad filter updates
    - remove more headers with client infos
    - updated blacklists and whitelists
    Changed files: config/{scripting,adverts,misc}.zap
  * Html filtering:
    - fixed nasty bug in HTML filter buffer handling which resulted in
      lost HTML data
    - also apply filter rules to document.write content
    - support <base href> for JS src fetching
    - wrap all javascript code in <!-- ... //--> comment
    Changed files: wc/filter/HtmlParser.py
  * HTML parser:
    - handle missing > in "</a <a b=c>"
    Changed files: wc/parser/htmllex.l
  * fix return types in the daemon package
    Changed files: wc/daemon/_posix.py
  * use builtin dict type for configuration
    Changed files: wc/__init__.py
  * convert install paths to platform specific representation
    Changed files: setup.py
  * 100 continue: switch back to response state only after reading headers
    Changed files: wc/proxy/HttpServer.py
  * be more HTTP/1.1 conform:
    - remove hop-by-hop headers
    - add Connection: Keep-Alive header for persistent connections
    - some header values are parsed with better error recovery
    Changed files: wc/proxy/{__init__, HttpClient, HttpServer}.py,
       wc/__init__.py
    Added files: wc/proxy/Headers.py
  * handle partial proxy request uris
    Changed files: wc/proxy/{__init__,ClientServerMatchmaker}.py
  * embedded the spidermonkey javascript engine to reduce dependencies
    Added files: libjs/*, configure.in, autogen.sh, Makefile.am
    Removed files: Makefile
  * use python logging module framework
    Added files: wc/log.py, config/logging.conf
    Changed files: a lot
    Removed files: wc/debug.py
  * local html pages use TAL templates and simpleTAL
    Added files: wc/webgui/{simpletal, context}
    Changed files: wc/proxy/HttpClient.py
    Removed files: old Zope TAL packages in wc/webgui

1.10
  * fix rule title updating (again)
    Changed files: wc/gui/FXRuleFrame.py
  * Add PICS rating system
    Added files: wc/filter/{PICS, PicsHeader}.py,
      wc/filter/rules/PicsRule.py, wc/gui/FXPicsRuleFrame.py,
      config/pics_raiting.zap
    Changed files: wc/filter/Rewriter.py, wc/__init__.py,
      wc/gui/FXRuleFrameFactory.py
  * - correctly propagate and display parsing errors
    - really cope with missing ">" end tags
    - enable yydebug on debug() call
    - minor cleanups
    Changed files: wc/parser/html{lex.*, parse.*}
  * Do not add Content-Length: 0 header to client requests, only if
    length is > 0. This makes WebCleaner compatible with publicfile
    servers again.
    Changed files: wc/proxy/HttpClient.py
  * add mime hints
    Changed files: wc/proxy/{HttpServer.py, ClientServerMatchmaker.py}
  * cope with b0rked servers not sending any response or header lines,
    just the plain content
    Changed files: wc/proxy/HttpServer.py
  * use levenshtein distance function to correct misspelled tag names
    Added files: wc/levenshtein.c, wc/filter/HtmlTags.py
    Changed files: wc/filter/HtmlParser.py

1.9
  * use the original headers list in rfc822 Message objects to preserve
    header case sensitivity; some servers dont like lowercase headers
    Changed files: wc/proxy/HttpServer.py
  * javascript handling:
    - unescape inlined javascripts before execution
    - add error callback to javascript listeners
    - dont execute setTimeout callback recursively (avoids endless loop)
    Changed files: wc/js/{jslib.c,JSListener.py}, wc/filter/Rewriter.py
  
1.8
  * add document.layers property to jslib
  * escape inlined javascript
  * add wc.js to packages in setup.py

1.7
  * parser changes:
    - rebuild with flex 2.5.27 and bison 1.875a
    - remove stpcpy declaration, fixes compile error on RedHat 7.x
    - use python2.2 headers for parser compile, not 2.1.
    - resolve &#XY; numeric entities in attribute values
    Changed files: wc/parser/*
  * fix replacing of attributes with non-empty values
    Changed files: wc/filter/rules/RewriteRule.py
  * updated filters:
    o remove _blank and _new targets
    o remove frame(set) onunload attribute
    o prevent javascript top frame bashing
    o use Calzilla/6.0 as user agent
    o more ad filters
    o remove From: header
    Changed files: config/*.zap
  * Removed unneeded guruguru.bmp
  * #define YY_NO_UNISTD_H on Windows systems, fixes build error with
    Visual Studio compiler
    Changed files: setup.py
  * handle missing HTTP response header line
    Changed files: wc/proxy/HttpServer.py
  * chunked encoding:
    - handle client requests
    - ignore chunk extensions
    - fixed chunk size matching
    Changed files: wc/proxy/{HttpClient.py,HttpServer.py,UnchunkStream.py}
  * fix some typos and grammar
    Changed files: FAQ, README*
  * add javascript interpreter wrapper library. This filters popups
    and executes scripts
    Added files: wc/js/*, test/test_js.py, wc/filter/rule/JavascriptRule.py,
      wc/gui/FXJavascriptRuleFrame.py
    Changed files: wc/filter/Rewriter.py, conf/{filter.dtd,scripting.zap},
      wc/gui/FXRuleFrameFactory.py
  * rule renaming does not remove the rule type anymore
    Changed files: wc/gui/FXRuleFrame.py

1.6
  * updated filters:
    o remove more ads
    o replace <marquee> with <span>
    o Love and Peace!
    o rewrite Sourceforge download links
    o replace bllnk with blink at indian radio site
    Changed files: config/*.zap
  * Reorganize some code
    Changed files: a lot
    Added files: wc/i18n.py, wc/AnsiColor.py, wc/debug.py,
      wc/XmlUtils.py
    Removed files: wc/debug_levels.py
  * Parse config files with ISO-8859-1
    Changed files: wc/__init__.py
  * working TAL template example, lets see how this integrates into
    WebCleaner local file handling. Anyway, most of the custom
    handlers except error handling is now in the webgui package.
  * parser changes:
    o use yy_size_t for parser alloc definitions, fixes build errors on 64bit
      architectures
    o recognise "<! --" HTML comments (seen at Eonline)
    o recognise "<! !>" HTML comments (seen at www.nba.com)
    o rebuild with flex 2.5.26
    Changed files: wc/parser/htmllex.[lc]
  * Improve error message for failing htmlsax module import
    Changed files: wc/parser/htmllib.py
  * rebuild parser with bison 1.875
    Changed files: wc/parser/htmlparser.c
  * turn on TCP_NODELAY to disable the Nagle Algorithm; no bad experiences
    so far (but lagging a real profiling). I leave TCP_NODELAY turned
    on for the moment, you can report success or failure with this option
    to me.
    Changed files: wc/proxy/{dns_lookups,HttpServer}.py
  * new module ImageReducer which converts all images into a low quality
    JPEG file to save bandwidth (usually 70%-80%).
    The Python Image Library (PIL) is required for this!
    Unfortunately the complete image has to be loaded before it is
    converted, so use this only when the proxy has a fast internet
    connection (eg. your university) and you yourself are surfing over
    a modem.
    Added files: wc/filter/ImageReducer.py, test/imagereduce.py
    Changed files: wc/gui/ConfWindow.py
  * 1k recv and send buffer (instead of 8k) to improve responsiveness
    for slow connections.
    Changed files: wc/proxy/Connection.py
  * updated german translation
    Changed files: po/de.po

1.5
  * - increase TCP dns query timeout from 10 to 20 seconds
    - remember dns errors and return them
    Changed files: wc/proxy/dns_lookups.py
  * recognize .ico and .jpeg as images
    Changed files: wc/filter/Blocker.py
  * - updated and reorganized filters
    - remove onmouseover redirects
    Changed files: config/*.zap, config/bl2wc.py
  * - when type/encoding header is not what we guessed, fix only some
      contents, not all
    - dont guess type/encoding on 304 Not Modified answers, this info
      is already cached
    Changed files: wc/proxy/HttpServer.py
  * - use flex memory management interface
    - use only double quotes for attribute quoting
    - check quoting of all attributes
    Changed files: wc/parser/htmllex.l
  * add TAL packages for web configuration
    Added files: wc/webgui/*
  * add header test fetcher
    Added files: test/head.py

1.4
  * blocked.html has no content anymore and displays much cleaner
    Changed files: config/blocked.html
  * remove old and superfluous options from webcleanerconf, added
    tooltip help, fixed host config parsing
    Changed files: wc/gui/*.py, wc/__init__.py
  * - ignore invalid html attribute characters
    - ignore trailing garbage on html end tags
    - fixed debugging code with flex
    Changed files: wc/parser/htmllex.l
  * build with flex 2.5.25
    Changed files: wc/parser/{Makefile, htmllex.c}

1.3
  * Updated advert filters
    Changed files: config/adverts.zap
  * Local HTML configuration
    Changed files: wc/proxy/ClientServerMatchMaker.py
    Added files: wc/webgui/{__init__.py, WebConfig.py}
  * Added README.parser and README.sshtunnel to documents
  * import DeflateStream, fixes pages with content-encoding: deflate
    Changed files: wc/proxy/HttpServer.py
  * Add netmask support for allowed/denied host configuration
    Changed files: wc/__init__.py
    Added files: wc/ip.py

1.2
  * quote attribute values ending in '/'
    Changed files: wc/parser/htmllex.l

1.1
  * Dont try to remove the .pid file on startup errors, because we
    might already have dropped root privileges

1.0
  * Print access denied messages on stderr
    Changed files: wc/proxy/HttpClient.py
  * Remove unsupported timeout and obfuscateip config options
    Changed files: wc/gui/ConfWindow.py, wc/__init__.py, README,
      config/webcleaner.conf
  * Updated ssh tunnel scripts
    Changed files: README.sshtunnel
  * fixed the reloading on SIGHUP
    Changed files: wc/__init__.py
  * Updated README and FAQ
  * Updated filter block lists with config/bl2wc.py script.
    Changed files: config/*.zap, config/bl2wc.py
    New files: config/dmozfilter.py
  * Dont yet use True and False constants - they are only in most
    recent Python versions (2.2.2, 2.3pre)
    Changed files: wc/__init__.py, wc/proxy/GunzipStream.py,
    wc/proxy/HttpServer.py, wc/proxy/ClientServerMatchmaker.py,
    wc/proxy/__init__.py

0.60
  * Dont filter comments in *.oreillynet.com - they have some funky
    JavaScript stuff and Mozilla renders the page not good if there
    are no HTML comments.
    Changed files: config/misc.zap
  * Use lists and "".join(list) in HtmlFilter.buffer2data, which gives
    a pretty good speedup when filtering big HTML files.
    Changed files: wc/filter/Rewriter.py
  * Always send our Accept-Encoding header, but remember what the
    client could understand.
    Changed files: wc/proxy/HttpClient.py, wc/proxy/HttpServer.py,
      wc/proxy/ClientServerMatchmaker.py
  * Only compress files when the client accepts the gzip encoding.
    Changed files: wc/filter/Compress.py
  * Some b0rked servers send a gzip encoding when the file is not
    compressed. So the decoding disables the decompression when such
    an error is encountered.
    Changed files: wc/proxy/GunzipStream.py
  * updated documentation and german translation
    Changed files: README, FAQ, po/de.po

0.59
  * - add missing import of _
    - correct warning of unknown encoding
    - use precompiled _http_re to match request lines
    - use content-length also if rewriting
    - syntax cleanups
    Changed files: wc/proxy/HttpServer.py
  * remove unsupported "compress" encoding from Accept-Encodings header
    Changed files: wc/proxy/HttpClient.py
  * import errno
    Changed files: wc/proxy/Connection.py
  * import sys
    Changed files: wc/proxy/Listener.py
  * use tuple of allowed Content-Encodings instead of regex
    Changed files: wc/filter/Compress.py
  * updated squid example config with no-digest peer option
    Changed files: README.squid
  * recompile HTML parser with bison 1.50 and flex 2.5.22
    Changed files: wc/parser/Makefile, wc/parser/htmllex.c,
      wc/parser/htmlparse.c wc/parser/htmlparse.h
  * enable the referrer HTTP header filter per default
    Changed files: config/header.zap
  * add allowed host acls for client connects
    Changed files: wc/proxy/HttpClient.py, wc/gui/ConfWindow.py,
      config/webcleaner.conf, wc/__init__.py, README, setup.py,
      debian/control

0.58:
  * Set the 'Via' HTTP header when forwarding requests/responses
  * Remove the Via header in the default filter configuration,
    so the above is not even noticed :)
  * Add a 'Warning' HTTP header when content-encoding is changed
  * Honor the 'Max-Forwards' HTTP header for OPTIONS requests
  * Adjust empty paths in requests to be '/'. This was causing
    "puzzling header received" errors.
  * Updated german translation

0.57:
  * Oopsie, fix umask to 0177

0.56:
  * fix dropping of root privileges if run as root
  * set umask to 0277
  * dont compress if no appropriate Accept-Encoding header is found

0.55:
  * Also support Content-Encoding: deflate and identity
  * Updated german translations

0.54:
  * add <area> to tags-with-no-end-tag in Rewriter rule
  * added more advert filters
  * remove unused blacklist zappers from CVS
  * fix string joining in wc.__init__.text_status()
  * really remove Content-Length header for rewritten content
  * only rely on mime type guessing values if both encoding and
    mime type were found

0.53:
  * only filter some <meta name> tags, not all
  * README.squid, a sample squid configuration file to use with
    WebCleaner, was added
  * added some more advertising urls to filter
  * minor code cleanups
  * guess mime types non-strict (see Python docs)
  * use True/False boolean constants, which makes us...
  * ...Require Python >= 2.2
