listen_loop(): Fix format specifiers in two log messages
[privoxy.git] / doc / webserver / announce.txt
index 9c581e2..a8ca9db 100644 (file)
-               Announcing Privoxy 3.0.22 stable
+               Announcing Privoxy 3.0.28 stable
 --------------------------------------------------------------------
 
 --------------------------------------------------------------------
 
-Privoxy 3.0.22 stable is mainly a bug-fix release, it also has a
-couple of new features, though. Note that the first two entries in
-the ChangeLog below refer to security issues.
+Privoxy 3.0.27 stable scales better in multi-user environments
+and brings a couple of tuning directives.
+
+Privoxy 3.0.28 stable fixes two regressions introduced in 3.0.27.
 
 --------------------------------------------------------------------
 
 --------------------------------------------------------------------
-ChangeLog for Privoxy
+ChangeLog for Privoxy 3.0.28
 --------------------------------------------------------------------
 --------------------------------------------------------------------
-*** Version 3.0.22 stable ***
-
-- Bug fixes:
-  - Fixed a memory leak when rejecting client connections due to
-    the socket limit being reached (CID 66382). This affected
-    Privoxy 3.0.21 when compiled with IPv6 support (on most
-    platforms this is the default).
-  - Fixed an immediate-use-after-free bug (CID 66394) and two
-    additional unconfirmed use-after-free complaints made by
-    Coverity scan (CID 66391, CID 66376).
-  - Actually show the FORCE_PREFIX value on the show-status page.
-  - Properly deal with Keep-Alive headers with timeout= parameters
-    If the timeout still can't be parsed, use the configured
-    timeout instead of preventing the client from keeping the
-    connection alive. Fixes #3615312/#870 reported by Bernard Guillot.
-  - Not using any filter files no longer results in warning messages
-    unless an action file is referencing header taggers or filters.
-    Reported by Stefan Kurtz in #3614835.
-  - Fixed a bug that prevented Privoxy from reusing some reusable
-    connections. Two bit masks with different purpose unintentionally
-    shared the same bit.
-  - A couple of additional bugs were discovered by Coverity Scan.
-    The fixes that are not expected to affect users are not explicitly
-    mentioned here, for details please have a look at the CVS logs.
+- Bug fixes for regressions in 3.0.27:
+  - Fixed misplaced parentheses.
+    Reported by David Binderman.
+  - Changed two regression tests to depend on config directive
+    enable-remote-toggle instead of FEATURE_TOGGLE.
 
 
+--------------------------------------------------------------------
+ChangeLog for Privoxy 3.0.27
+--------------------------------------------------------------------
 - General improvements:
 - General improvements:
-  - Introduced negative tag patterns NO-REQUEST-TAG and NO-RESPONSE-TAG.
-    They apply if no matching tag is found after parsing client or
-    server headers.
-  - Add support for external filters which allow to process the
-    response body with a script or program written in any language
-    the platform supports. External filters are enabled with
-    +external-filter{} after they have been defined in one of the
-    filter files with a header line starting with "EXTERNAL-FILTER:".
-    External filter support is experimental, not compiled by default
-    and known not to work on all platforms.
-  - Add support for the 'PATCH' method as defined in RFC5789.
-  - Reject requests with unsupported Expect header values.
-    Fixes a couple of Co-Advisor tests.
-  - Normalize the HTTP-version in forwarded requests and responses.
-    This is an explicit RFC 2616 MUST and RFC 7230 mandates that
-    intermediaries send their own HTTP-version in forwarded
-    messages.
-  - Server 'Keep-Alive' headers are no longer forwarded. From a user's
-    point of view it doesn't really matter, but RFC 2616 (obsolete)
-    mandates that the header is removed and this fixes a Co-Advisor
-    complaint.
-  - Change declared template file encoding to UTF-8. The templates
-    already used a subset of UTF-8 anyway and changing the declaration
-    allows to properly display UTF-8 characters used in the action files.
-    This change may require existing action files with ISO-8859-1
-    characters that aren't valid UTF-8 to be converted to UTF-8.
-    Requested by Sam Chen in #582.
-  - Do not pass rejected keep-alive timeouts to the server. It might
-    not have caused any problems (we know of), but doing the right
-    thing shouldn't hurt either.
-  - Let log_error() use its own buffer size #define to make changing
-    the log buffer size slightly less inconvenient.
-  - Turned single-threaded into a "proper" toggle directive with arguments.
-  - CGI templates no longer enforce new windows for some links.
-  - Remove an undocumented workaround ('HOST' header removal) for
-    an Apple iTunes bug that according to #729900 got fixed in 2003.
+  - Add a receive-buffer-size directive which can be used to
+    set the size of the previously statically allocated buffer
+    in handle_established_connection().
+    Increasing the buffer size increases Privoxy's memory usage but
+    can lower the number of context switches and thereby reduce the
+    CPU usage and potentially increase the throughput.
+    This is mostly relevant for fast network connections and
+    large downloads that don't require filtering.
+    Sponsored by: Robert Klemme
+  - Add a listen-backlog directive which specifies the backlog
+    value passed to listen().
+    Sponsored by: Robert Klemme
+  - Add an enable-accept-filter directive which allows to
+    toggle accept filter support at run time when compiled
+    with FEATURE_ACCEPT_FILTER support.
+    It makes testing more convenient and now that it's
+    optional we can emit an error message if enabling
+    the accept filter fails.
+    Sponsored by: Robert Klemme
+  - Add a delay-response{} action.
+    This is useful to tar pit JavaScript requests that
+    are endlessly retried in case of blocks. It can also
+    be used to simulate a slow Internet connection.
+    Sponsored by: Robert Klemme
+  - Add a 'trusted-cgi-referrer' directive.
+    It allows to configure another page or site that can be used
+    to reach sensitive CGI resources.
+    Sponsored by: Robert Klemme
+  - Add a --fuzz mode which exposes Privoxy internals to input
+    from files or stdout.
+    Mainly tested with American Fuzzy Lop. For details see:
+    https://www.fabiankeil.de/talks/fuzzing-on-freebsd/
+    This work was partially funded with donations and done
+    as part of the Privoxy month in 2015.
+  - Consistently use the U(ngreedy) flag in the 'img-reorder' filter.
+  - listen_loop(): Reuse a single thread attribute object
+    The object doesn't change and creating a new one for
+    every thread is a waste of (CPU) time.
+    Sponsored by: Robert Klemme
+  - Free csp resources in the thread that belongs to the csp instead
+    of the main thread which has enough on its plate already.
+    Sponsored by: Robert Klemme
+  - Improve 'socket timeout reached' message.
+    Log the timeout that was triggered and downgrade the
+    log level to LOG_LEVEL_CONNECT to reduce the log noise
+    with common debug settings.
+    The timeout isn't necessary the result of an error and
+    usually merely indicates that Privoxy's socket timeout
+    is lower than the relevant timeouts used by client and
+    server.
+    Sponsored by: Robert Klemme
+  - Explicitly taint the server socket in case of CONNECT requests.
+    This doesn't fix any known problems, but makes
+    some log messages less confusing.
+  - Let write_pid_file() terminate if the pid file can't be opened.
+    Logging the issue at info level is unlikely to help.
+  - log_error(): Reduce the mutex-protected area by not using a
+    heap-allocated buffer that is shared between all threads.
+    This increases performance and reduces the latency with
+    verbose debug settings and multiple concurrent connections.
+    Sponsored by: Robert Klemme
+  - Let zalloc() use calloc() if it's available.
+    In some situations using calloc() can be faster than
+    malloc() + memset() and it should never be slower.
+    In the real world the impact of this change is not
+    expected to be noticeable.
+    Sponsored by: Robert Klemme
+  - Never use select() when poll() is available.
+    On most platforms select() is limited by FD_SETSIZE while
+    poll() is not. This was a scaling issue for multi-user setups.
+    Using poll() has no downside other than the usual risk
+    that code modifications may introduce new bugs that have
+    yet to be found and fixed.
+    At least in theory this commit could also reduce the latency
+    when there are lots of connections and select() would use
+    "bit fields in arrays of integers" to store file descriptors.
+    Another side effect is that Privoxy no longer has to stop
+    monitoring the client sockets when pipelined requests are
+    waiting but can't be read yet.
+    This code keeps the select()-based code behind ifdefs for
+    now but hopefully it can be removed soonish to make the
+    code more readable.
+    Sponsored by: Robert Klemme
+  - Add a 'reproducible-tarball-dist' target.
+    It's currently separate from the "tarball-dist" target
+    because it requires a tar implementation with mtree spec
+    support.
+    It's far from being perfect and does not enforce a
+    reproducible mode, but it's better than nothing.
+  - Use arc4random() if it's available.
+    While Privoxy doesn't need high quality pseudo-random numbers
+    there's no reason not to use them when we can and this silences
+    a warning emitted by code checkers that can't tell whether or not
+    the quality matters.
+  - Show the FEATURE_EXTERNAL_FILTERS status on the status page.
+    Better late than never. Previously a couple of tests weren't
+    executed as Privoxy-Regression-Test couldn't detect that the
+    FEATURE_EXTERNAL_FILTERS dependency was satisfied.
+  - Ditch FEATURE_IMAGE_DETECT_MSIE.
+    It's an obsolete workaround we inherited from Junkbuster
+    and was already disabled by default.
+    Users that feel the urge to work around issues with
+    image requests coming from an Internet Explorer version
+    from more than 15 years ago can still do this using tags.
+  - Consistently use strdup_or_die() instead of strdup() in
+    cases where allocation failures aren't expected.
+    Using strdup_or_die() allows to remove a couple of explicit
+    error checks which slightly reduces the size of the binary.
+  - Insert a refresh tag into the /client-tags CGI page when
+    serving it while a client-specific tag is temporarily enabled.
+    This makes it less likely that the user ends up
+    looking at tag state that is out of date.
+  - Use absolute URLs in the client-tag forms.
+    It's more consistent with the rest of the CGI page
+    URLs and makes it more convenient to copy the forms
+    to external pages.
+  - cgi_error_disabled(): Use status code 403 and an appropriate response line
+  - Use a dedicated CGI handler to deal with tag-toggle requests
+    As a result the /client-tags page is now safe to reach without
+    trusted Referer header which makes bookmarking or linking to
+    it more convenient.
+    Finally, refreshing the /client-tags page to show the
+    current state can no longer unintentionally repeat the
+    previous toggle request.
+  - Don't add a "Connection" header for CONNECT requests.
+    Explicitly sending "Connection: close" is not necessary and
+    apparently it causes problems with some forwarding proxies
+    that will close the connection prematurely.
+    Reported by Marc Thomas.
+  - Fix compiler warnings.
+
+- Bug fixes:
+  - rfc2553_connect_to(): Properly detect and log when poll()
+    reached the time out. Previously this was logged as:
+    Could not connect to [...]: No error: 0.
+    which isn't very helpful.
+    Sponsored by: Robert Klemme
+  - add_tag_for_client(): Set time_to_live properly.
+    Previously the time_to_live was always set for the first tag.
+    Attempts to temporarily enable a tag would result in enabling
+    it permanently unless no tag was enabled already.
+  - Revert r1.165 which didn't perform as advertised.
+    While the idea was to use "https:// when creating links
+    for the user manual on the website", the actual effect
+    was to use "https://" when Privoxy was supposed to serve
+    the user manual itself.
+    Reported by Yossi Zahn on Privoxy-devel@.
+  - socks5_connect(): Fail in case of unsupported address types.
+    Previously they would not be detected right away and
+    Privoxy would fail later on with an error message that
+    didn't make it obvious that the problem was socks-related.
+    So far, no such problems have actually been reported.
+  - socks5_connect(): Properly deal with socks replies that
+    contain IPv6 addresses.
+    Previously parts of the reply were left unread and
+    later on treated as invalid HTTP response data.
+    Fixes #904 reported by Danny Goossen who also provided
+    the initial version of this patch.
 
 - Action file improvements:
 
 - Action file improvements:
-  - The pattern 'promotions.' is no longer being blocked.
-    Reported by rakista in #3608540.
-  - Disable fast-redirects for .microsofttranslator.com/.
-  - Disable filter{banners-by-size} for .dgb-tagungszentren.de/.
-  - Add adn.speedtest.net as a site-specific unblocker.
-    Support request #3612908.
-  - Disable filter{banners-by-size} for creativecommons.org/.
-  - Block requests to data.gosquared.com/. Reported by cbug in #3613653.
-  - Unblock .conrad./newsletter/. Reported by David Bo in #3614238.
-  - Unblock .bundestag.de/.
-  - Unblock .rote-hilfe.de/.
-  - Disable fast-redirects for .facebook.com/plugins/like.php.
-  - Unblock Stackexchange popup URLs that aren't used to serve ads.
-    Reported by David Wagner in #3615179.
-  - Disable fast-redirects for creativecommons.org/.
-  - Unblock .stopwatchingus.info/.
-  - Block requests for .adcash.com/script/.
-    Reported by Tyrexionibus in #3615289.
-  - Disable HTML filters if the response was tagged as JavaScript.
-    Filtering JavaScript code with filters intended to deal with HTML
-    is usually a waste of time and, more importantly, may break stuff.
-  - Use a custom redirect{} for .washingtonpost.com/wp-apps/imrs\.php\?src=
-    Previously enabling the 'Advanced' settings (or manually enabling
-    +fast-redirects{}) prevented some images from being loaded properly.
-  - Unblock "adina*." Fixes #919 reported by Morton A. Goldberg.
-  - Block '/.*DigiAd'.
-  - Unblock 'adele*.'. Reported by Adele Lime in #1663.
-  - Disable banners-by-size for kggp.de/.
-
-- Filter file improvements & bug fixes:
-  - Decrease the chances that js-annoyances creates invalid JavaScript.
-    Submitted by John McGowan on ijbswa-users@.
-  - Let the msn filter hide 'related' ads again.
-  - Remove a stray '1' in the 'html-annoyances' filter.
-  - Prevent img-reorder from messing up img tags with empty src
-    attributes. Fixes #880 reported by Duncan.
+  - Unblock 'msdn.microsoft.com/'.
+    It (presumably) isn't used to serve the kind of ads Privoxy should
+    block by default but happens to serve lots of pages with URLs that
+    are likely to result in false positives.
+    Reported by bugreporter1694 in AF#939.
+  - Disable gif deanimation for requests tagged with CSS-REQUEST.
+    The action will ignore content that isn't considered text
+    anyway and explicitly disabling it makes this more obvious
+    if "action" debugging (debug 65536) is enabled while
+    "gif deanimation" debugging (debug 256) isn't.
+  - Explicitly disable HTML filters for requests with CSS-REQUEST tag.
+    The filters are unlikely to break CSS files but executing
+    them without (intentionally) getting any hits is a waste of
+    cpu time and makes the log more noisy when running with
+    "debug 64".
+  - Unblock 'adventofcode.com/'.
+    Reported by Clint Adams in Debian bug #848211.
+    Fixes Roland's AF#937.
+  - Unblock 'adlibris.com'.
+    Reported by Wyrex in #935
+  - Unblock .golang.org/
+  - Add fast-redirects exception for '.youtube.com/.*origin=http'
+
+- Privoxy-Log-Parser:
+  - Don't gather host and resource statistics if they aren't requested.
+    While the performance impact seems negligible this significantly
+    reduces the memory usage if there are lots of requests.
+  - Bump version as the behaviour (slightly) changed.
+  - Count connection failures as well in statistics mode.
+    Sponsored by: Robert Klemme
+  - Count connection timeouts as well in statistics mode.
+    Sponsored by: Robert Klemme
+  - Fix an 'uninitialized value' warning when generating
+    statistics for a log file without response headers.
+    While privoxy-log-parser was supposed to detect this already,
+    the check was flawed and the message the user didn't see was
+    somewhat confusing anyway.
+    Now the message is less confusing, more helpful and actually printed.
+    Reported by: Robert Klemme
 
 - Documentation improvements:
 
 - Documentation improvements:
-  - Updated the 'Would you like to donate?' section.
-  - Note that invalid forward-override{} parameter syntax isn't
-    detected until the parameter is used.
-  - Add another +redirect{} example: a shortcut for illumos bugs.
-  - Make it more obvious that many operating systems support log
-    rotation out of the box.
-  - Fixed dead links. Reported by Mark Nelson in #3614557.
-  - Rephrased the 'Why is the configuration so complicated?' answer
-    to be slightly less condescending. Anonymously suggested in #3615122.
-  - Be more explicit about accept-intercepted-requests's lack of MITM support.
-  - Make 'demoronizer' FAQ entries more generic.
-  - Add an example hostname to the --pre-chroot-nslookup description.
-  - Add an example for a host pattern that matches an IP address.
-  - Rename the 'domain pattern' to 'host pattern' as it may
-    contain IP addresses as well.
-  - Recommend forward-socks5t when using Tor. It seems to work fine and
-    modifying the Tor configuration to profit from it hasn't been necessary
-    for a while now.
-  - Add another redirect{} example to stress that redirect loops can
-    and should be avoided.
-  - The usual spelling and grammar fixes. Parts of them were
-    reported by Reuben Thomas in #3615276.
-  - Mention the PCRS option letters T and D in the filter section.
-  - Clarify that handle-as-empty-doc-returns-ok is still useful
-    and will not be removed without replacement.
-  - Note that security issues shouldn't be reported using the bug tracker.
-  - Clarify what Privoxy does if both +block{} and +redirect{} apply.
-  - Removed the obsolete bookmarklets section.
+  - Refer to the git sources instead of CVS.
+  - Use GNU/Linux when referring to the OS instead of the kernel.
+  - Add FAQ entry for what to do if editing the config file is access denied.
+  - Add brief HTTP/2 FAQ.
+  - Add a small fuzzing section to the developer documentation.
+  - Add a client-header-tagger{client-ip-address} example.
+  - Stop suggesting that Privoxy is an anonymizing proxy.
+    The term could lead to Privoxy users overestimating
+    what it can do on its own (without Tor).
+  - Make it more obvious that SPI accepts Paypal, too.
+    Currently most donations are made through the Paypal account
+    managed by Zwiebelfreunde e.V. and a more even distribution
+    would be useful.
+  - Suggest to log applying actions as well when reproducing problems.
+  - Explicitly mention that Privoxy binaries are built by individuals
+    on their own systems. Buyer beware!
+  - Mention the release feed on the homepage.
+  - Remove a mysterious comment with a GNU FDL link as it isn't
+    useful and could confuse license scanners.
+    In May 2002 it was briefly claimed that "this document" was covered
+    by the GNU FDL. The commit message (r1.5) doesn't explain the motivation
+    or whether all copyright holders were actually asked and agreed to the
+    declared license change.
+    It's thus hard to tell whether or not the license change was legit,
+    but luckily two days later the "doc license" was "put" "back to GPL"
+    anyway (r1.6).
+    At the same time the offending comment with a link to the FDL
+    (not the GPL) was added for no obvious reason.
+    Now it's gone again.
+
+- Regression tests:
+  - Bump for-privoxy-version to 3.0.27 as we now rely on untrusted
+    CGI request being rejected with status code 403 (instead of 200).
+  - Update test for /send-stylesheet and add another one
+
+- Templates:
+  - Consistently use https:// when linking to the Privoxy website.
+  - Remove SourceForge references in Copyright header.
+  - Remove a couple of SourceForge references in a comment.
+    While at it, fix the grammar.
+  - Move the site-specific documentation block before the generic one.
+    While most Privoxy installations don't have a site-specific
+    documentation block, in cases were it exists it's likely to
+    be more relevant than the generic one.
+    Showing it first makes it less likely that users stop reading
+    before they reach it, especially on pages that don't fit on
+    the screen.
 
 - Build system improvements:
 
 - Build system improvements:
-  - Let --with-group properly deal with secondary groups.
-    Patch submitted by Anatoly Arzhnikov in #3615187.
-  - Fix web-actions target.
-  - Add a web-faq target that only updates the FAQ on the webserver.
-  - Remove already-commented-out non-portable DOSFILTER alternatives.
-  - Remove the obsolete targets dok-put and dok-get.
-  - Add a sf-shell target.
-
-- Known bugs:
-  - To compile with --disable-force you need the following change which
-    didn't make it into the release:
-    http://ijbswa.cvs.sourceforge.net/viewvc/ijbswa/current/project.h?r1=1.208&r2=1.209&view=patch
-    Thanks to Kai Raven for the report.
+  - Prefer openjade to jade. On some systems Jade produces
+    HTML with unescaped ampersands in URLs.
+  - Prefer OpenSP to SP to be consistent.
+  - Have Docbook generated HTML files be straight ASCII.
+    Dealing with a mixture of ISO-8859 and UTF-8 files is problematic.
+  - Echo the filename to stderr for 'make dok-tidy'.
+    Make it a bit easier to find errors in docbook generated HTML.
+  - Warn when still using select().
+  - Warn when compiling without calloc().
+  - Make it more obvious that the --with-fdsetsize configure switch
+    is pointless if poll() is available.
+  - Remove support for AmigaOS.
+  - Update windows build system to use supported software.
+    The cygwin gcc -mno-cygwin option is no longer supported, so
+    convert the windows build system to use the cygwin cross-compiler
+    to build "native" code.
+  - Add --enable-static-linking option for configure
+    does the same thing as LDFLAGS=-static; ./configure
+    but nicer than mixing evars and configure options.
 
 -----------------------------------------------------------------
 About Privoxy:
 
 -----------------------------------------------------------------
 About Privoxy:
@@ -169,14 +304,14 @@ Privoxy is Free Software and licensed under the GNU GPLv2.
 
 Our TODO list is rather long. Helping hands and donations are welcome:
 
 
 Our TODO list is rather long. Helping hands and donations are welcome:
 
-  * http://www.privoxy.org/faq/general.html#PARTICIPATE
+  * https://www.privoxy.org/faq/general.html#PARTICIPATE
 
 
-  * http://www.privoxy.org/faq/general.html#DONATE
+  * https://www.privoxy.org/faq/general.html#DONATE
 
 At present, Privoxy is known to run on Windows 95 and later versions
 (98, ME, 2000, XP, Vista, Windows 7 etc.), GNU/Linux (RedHat, SuSE,
 Debian, Fedora, Gentoo, Slackware and others), Mac OS X (10.4 and
 
 At present, Privoxy is known to run on Windows 95 and later versions
 (98, ME, 2000, XP, Vista, Windows 7 etc.), GNU/Linux (RedHat, SuSE,
 Debian, Fedora, Gentoo, Slackware and others), Mac OS X (10.4 and
-upwards on PPC and Intel processors), OS/2, Haiku, DragonFly,
+upwards on PPC and Intel processors), OS/2, Haiku, DragonFly, ElectroBSD,
 FreeBSD, NetBSD, OpenBSD, Solaris, and various other flavors of Unix.
 
 In addition to the core features of ad blocking and cookie management,
 FreeBSD, NetBSD, OpenBSD, Solaris, and various other flavors of Unix.
 
 In addition to the core features of ad blocking and cookie management,
@@ -206,7 +341,7 @@ more control, more privacy and more freedom:
      tracing of rule and filter effects. Remote toggling.
 
   *  Web page filtering (text replacements, removes banners based on size,
      tracing of rule and filter effects. Remote toggling.
 
   *  Web page filtering (text replacements, removes banners based on size,
-     invisible <quote>web-bugs</quote> and HTML annoyances, etc.)
+     invisible "web-bugs" and HTML annoyances, etc.)
 
   *  Modularized configuration that allows for standard settings and user
      settings to reside in separate files, so that installing updated actions
 
   *  Modularized configuration that allows for standard settings and user
      settings to reside in separate files, so that installing updated actions
@@ -227,10 +362,7 @@ more control, more privacy and more freedom:
   *  Most features are controllable on a per-site or per-location basis.
 
 
   *  Most features are controllable on a per-site or per-location basis.
 
 
-Download location: 
-   http://sourceforge.net/project/showfiles.php?group_id=11118
 Home Page: 
 Home Page: 
-   http://www.privoxy.org/
+   https://www.privoxy.org/
 
 
-  - Privoxy Developers <ijbswa-developers@lists.sourceforge.net>
+  - Privoxy Developers <privoxy-devel@lists.privoxy.org>