+ <para>
+ Privoxy can (re)compress buffered content before delivering
+ it to the client. Disabled by default as most users wouldn't
+ benefit from it.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The +fast-redirects{check-decoded-url} action checks URL
+ segments separately. If there are other parameters behind
+ the redirect URL, this makes it unnecessary to cut them off
+ by additionally using a +redirect{} pcrs command.
+ Initial patch submitted by Jamie Zawinski in #3429848.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ When loading action sections, verify that the referenced filters
+ exist. Currently missing filters only result in an error message,
+ but eventually the severity will be upgraded to fatal.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Allow to bind to multiple separate addresses.
+ Patch set submitted by Petr Pisar in #3354485.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Set socket_error to errno if connecting fails in rfc2553_connect_to().
+ Previously rejected direct connections could be incorrectly reported
+ as DNS issues if Privoxy was compiled with IPv6 support.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Adjust url_code_map[] so spaces are replaced with %20 instead of '+'
+ While '+' can be used by client's submitting form data, this is not
+ actually what Privoxy is using the lookups for. This is more of a
+ cosmetic issue and doesn't fix any known problems.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ When compiled without FEATURE_FAST_REDIRECTS, do not silently
+ ignore +fast-redirect{} directives
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Added a workaround for GNU libc's strptime() reporting negative
+ year values when the parsed year is only specified with two digits.
+ On affected systems cookies with such a date would not be turned
+ into session cookies by the +session-cookies-only action.
+ Reported by Vaeinoe in #3403560
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fixed bind failures with certain GNU libc versions if no non-loopback
+ IP address has been configured on the system. This is mainly an issue
+ if the system is using DHCP and Privoxy is started before the network
+ is completely configured.
+ Reported by Raphael Marichez in #3349356.
+ Additional insight from Petr Pisar.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Privoxy log messages now use the ISO 8601 date format %Y-%m-%d.
+ It's only slightly longer than the old format, but contains
+ the full date including the year and allows sorting by date
+ (when grepping in multiple log files) without hassle.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In get_last_url(), do not bother trying to decode URLs that do
+ not contain at least one '%' sign. It reduces the log noise and
+ a number of unnecessary memory allocations.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In case of SOCKS5 failures, dump the socks response in the log message.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Simplify the signal setup in main().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Streamline socks5_connect() slightly.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In socks5_connect(), require a complete socks response from the server.
+ Previously Privoxy didn't care how much data the server response
+ contained as long as the first two bytes contained the expected
+ values. While at it, shrink the buffer size so Privoxy can't read
+ more than a whole socks response.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In chat(), do not bother to generate a client request in case of
+ direct CONNECT requests. It will not be used anyway.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Reduce server_last_modified()'s stack size.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Shorten get_http_time() by using strftime().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Constify the known_http_methods pointers in unknown_method().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Constify the time_formats pointers in parse_header_time().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Constify the formerly_valid_actions pointers in action_used_to_be_valid().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Introduce a GNUMakefile MAN_PAGE variable that defaults to privoxy.1.
+ The Debian package uses section 8 for the man page and this
+ should simplify the patch.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Deduplicate the INADDR_NONE definition for Solaris by moving it to jbsockets.h
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In block_url(), ditch the obsolete workaround for ancient Netscape versions
+ that supposedly couldn't properly deal with status code 403.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Remove a useless NULL pointer check in load_trustfile().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Remove two useless NULL pointer checks in load_one_re_filterfile().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Change url_code_map[] from an array of pointers to an array of arrays
+ It removes an unnecessary layer of indirection and on 64bit system reduces
+ the size of the binary a bit.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fix various typos. Fixes taken from Debian's 29_typos.dpatch by Roland Rosenfeld.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add a dok-tidy GNUMakefile target to clean up the messy HTML
+ generated by the other dok targets.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ GNUisms in the GNUMakefile have been removed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Change the HTTP version in static responses to 1.1
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Synced config.sub and config.guess with upstream
+ 2011-11-11/386c7218162c145f5f9e1ff7f558a3fbb66c37c5.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add a dedicated function to parse the values of toggles. Reduces duplicated
+ code in load_config() and provides better error handling. Invalid or missing
+ toggle values are now a fatal error instead of being silently ignored.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Terminate HTML lines in static error messages with \n instead of \r\n.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Simplify cgi_error_unknown() a bit.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In LogPutString(), don't bother looking at pszText when not
+ actually logging anything.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Change ssplit()'s fourth parameter from int to size_t.
+ Fixes a clang complaint.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add a warning that the statistics currently can't be trusted.
+ Mention Privoxy-Log-Parser's --statistics option as
+ an alternative for the time being.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In rfc2553_connect_to(), start setting cgi->error_message on error.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Change the expected status code returned for http://p.p/die depending
+ on whether or not FEATURE_GRACEFUL_TERMINATION is available.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In cgi_die(), mark the client connection for closing.
+ If the client will fetch the style sheet through another connection
+ it gets the main thread out of the accept() state and should thus
+ trigger the actual shutdown.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add a proper CGI message for cgi_die().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Don't enforce a logical line length limit in read_config_line().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Slightly refactor server_last_modified() to remove useless gmtime*() calls.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In get_content_type(), also recognize '.jpeg' as JPEG extension.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add '.png' to the list of recognized file extensions in get_content_type().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In block_url(), consistently use the block reason "Request blocked by Privoxy"
+ In two places the reason was "Request for blocked URL" which hides the
+ fact that the request got blocked by Privoxy and isn't necessarily
+ correct as the block may be due to tags.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In listen_loop(), reload the configuration files after accepting
+ a new connection instead of before.
+ Previously the first connection that arrived after a configuration
+ change would still be handled with the old configuration.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In chat()'s receive-data loop, skip a client socket check if
+ the socket will be written to right away anyway. This can
+ increase the transfer speed for unfiltered content on fast
+ network connections.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The socket timeout is used for SOCKS negotiations as well which
+ previously couldn't timeout.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Don't keep the client connection alive if any configuration file
+ changed since the time the connection came in. This is closer to
+ Privoxy's behaviour before keep-alive support for client connection
+ has been added and also less confusing in general.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Treat all Content-Type header values containing the pattern
+ 'script' as a sign of text. Reported by pribog in #3134970.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Action file improvements:
+ <itemizedlist>
+ <listitem>
+ <para>
+ Moved the site-specific block pattern section below the one for the
+ generic patterns so for requests that are matched in both, the block
+ reason for the domain is shown which is usually more useful than showing
+ the one for the generic pattern.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Remove -prevent-compression from the fragile alias. It's no longer
+ used anywhere by default and isn't known to break stuff anyway.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add a (disabled) section to block various Facebook tracking URLs.
+ Reported by Dan Stahlke in #3421764.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add a (disabled) section to rewrite and redirect click-tracking
+ URLs used on news.google.com.
+ Reported by Dan Stahlke in #3421755.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Unblock linuxcounter.net/.
+ Reported by Dan Stahlke in #3422612.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Block 'www91.intel.com/' which is used by Omniture.
+ Reported by Adam Piggott in #3167370.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Disable the handle-as-empty-doc-returns-ok option and mark it as deprecated.
+ Reminded by tceverling in #2790091.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add ".ivwbox.de/" to the "Cross-site user tracking" section.
+ Reported by Nettozahler in #3172525.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Unblock and fast-redirect ".awin1.com/.*=http://".
+ Reported by Adam Piggott in #3170921.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Block "b.collective-media.net/".
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Widen the Debian popcon exception to "qa.debian.org/popcon".
+ Seen in Debian's 05_default_action.dpatch by Roland Rosenfeld.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Block ".gemius.pl/" which only seems to be used for user tracking.
+ Reported by johnd16 in #3002731. Additional input from Lee and movax.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Disable banners-by-size filters for '.thinkgeek.com/'.
+ The filter only seems to catch pictures of the inventory.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Block requests for 'go.idmnet.bbelements.com/please/showit/'.
+ Reported by kacperdominik in #3372959.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Unblock adainitiative.org/.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add a fast-redirects exception for '.googleusercontent.com/.*=cache'.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Add a fast-redirects exception for webcache.googleusercontent.com/.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Unblock http://adassier.wordpress.com/ and http://adassier.files.wordpress.com/.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Filter file improvements:
+ <itemizedlist>
+ <listitem>
+ <para>
+ Let the yahoo filter hide '.ads'.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Let the msn filter hide overlay ads for Facebook 'likes' in search
+ results and elements with the id 's_notf_div'. They only seem to be
+ used to advertise site 'enhancements'.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Let the js-events filter additionally disarm setInterval().
+ Suggested by dg1727 in #3423775.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Documentation improvements:
+ <itemizedlist>
+ <listitem>
+ <para>
+ Clarify the effect of compiling Privoxy with zlib support.
+ Suggested by dg1727 in #3423782.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Point out that the SourceForge messaging system works like a black
+ hole and should thus not be used to contact individual developers.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Mention some of the problems one can experience when not explicitly
+ configuring an IP addresses as listen address.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Explicitly mention that hostnames can be used instead of IP addresses
+ for the listen-address, that only the first address returned will be
+ used and what happens if the address is invalid.
+ Requested by Calestyo in #3302213.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Log message improvements:
+ <itemizedlist>
+ <listitem>
+ <para>
+ If only the server connection is kept alive, do not pretend to
+ wait for a new client request.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Remove a superfluous log message in forget_connection().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In chat(), properly report missing server responses as such
+ instead of calling them empty.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In forwarded_connect(), fix a log message nobody should ever see.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Fix a log message in socks5_connect(), a failed write operation
+ was logged as failed read operation.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Let load_one_actions_file() properly complain about a missing
+ '{' at the beginning of the file.
+ Simply stating that a line is invalid isn't particularly helpful.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Do not claim to listen on a socket until Privoxy actually does.
+ Patch submitted by Petr Pisar #3354485
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Prevent a duplicated LOG_LEVEL_CLF message when sending out
+ the "no-server-data" response.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Also log the client socket when dropping a connection.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Include the destination host in the 'Request ... marked for
+ blocking. limit-connect{...} doesn't allow CONNECT ...' message
+ Patch submitted by Saperski in #3296250.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Prevent a duplicated log message if none of the resolved IP
+ addresses were reachable.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In connect_to(), do not pretend to retry if forwarded-connect-retries
+ is zero or unset.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ When a specified user or group can't be found, put the name in
+ single-quotes when logging it.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In rfc2553_connect_to(), explain getnameinfo() errors better.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Remove a useless log message in chat().
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ When retrying to connect, also log the maximum number of connection
+ attempts.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Rephrase a log message in compile_dynamic_pcrs_job_list().
+ Divide the error code and its meaning with a colon. Call the pcrs
+ job dynamic and not the filter. Filters may contain dynamic and
+ non-dynamic pcrs jobs at the same time. Only mention the name of
+ the filter or tagger, but don't claim it's a filter when it could
+ be a tagger.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In a fatal error message in load_one_actions_file(), cover both
+ URL and TAG patterns.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In pcrs_strerror(), properly report unknown positive error code
+ values as such. Previously they were handled like 0 (no error).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In compile_dynamic_pcrs_job_list(), also log the actual error code as
+ pcrs_strerror() doesn't handle all errors reported by pcre.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Don't bother trying to continue chatting if the client didn't ask for it.
+ Reduces log noise a bit.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Make two fatal error message in load_one_actions_file() more descriptive.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In cgi_send_user_manual(), log when rejecting a file name due to '/' or '..'.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In load_file(), log a message if opening a file failed.
+ The CGI error message alone isn't too helpful.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In connection_destination_matches(), improve two log messages
+ to help understand why the destinations don't match.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Rephrase a log message in serve(). Client request arrival
+ should be differentiated from closed client connections now.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In serve(), log if a client connection isn't reused due to a
+ configuration file change.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Let mark_server_socket_tainted() always mark the server socket tainted,
+ just don't talk about it in cases where it has no effect. It doesn't change
+ Privoxy's behaviour, but makes understanding the log file easier.
+ </para>
+ </listitem>
+ </itemizedlist>