Rebuild docs with cors-allowed-origin directive
[privoxy.git] / doc / webserver / announce.txt
1                Announcing Privoxy 3.0.28 stable
2 --------------------------------------------------------------------
3
4 Privoxy 3.0.27 stable scales better in multi-user environments
5 and brings a couple of tuning directives.
6
7 Privoxy 3.0.28 stable fixes two regressions introduced in 3.0.27.
8
9 --------------------------------------------------------------------
10 ChangeLog for Privoxy 3.0.28
11 --------------------------------------------------------------------
12 - Bug fixes for regressions in 3.0.27:
13   - Fixed misplaced parentheses.
14     Reported by David Binderman.
15   - Changed two regression tests to depend on config directive
16     enable-remote-toggle instead of FEATURE_TOGGLE.
17
18 --------------------------------------------------------------------
19 ChangeLog for Privoxy 3.0.27
20 --------------------------------------------------------------------
21 - General improvements:
22   - Add a receive-buffer-size directive which can be used to
23     set the size of the previously statically allocated buffer
24     in handle_established_connection().
25     Increasing the buffer size increases Privoxy's memory usage but
26     can lower the number of context switches and thereby reduce the
27     CPU usage and potentially increase the throughput.
28     This is mostly relevant for fast network connections and
29     large downloads that don't require filtering.
30     Sponsored by: Robert Klemme
31   - Add a listen-backlog directive which specifies the backlog
32     value passed to listen().
33     Sponsored by: Robert Klemme
34   - Add an enable-accept-filter directive which allows to
35     toggle accept filter support at run time when compiled
36     with FEATURE_ACCEPT_FILTER support.
37     It makes testing more convenient and now that it's
38     optional we can emit an error message if enabling
39     the accept filter fails.
40     Sponsored by: Robert Klemme
41   - Add a delay-response{} action.
42     This is useful to tar pit JavaScript requests that
43     are endlessly retried in case of blocks. It can also
44     be used to simulate a slow Internet connection.
45     Sponsored by: Robert Klemme
46   - Add a 'trusted-cgi-referrer' directive.
47     It allows to configure another page or site that can be used
48     to reach sensitive CGI resources.
49     Sponsored by: Robert Klemme
50   - Add a --fuzz mode which exposes Privoxy internals to input
51     from files or stdout.
52     Mainly tested with American Fuzzy Lop. For details see:
53     https://www.fabiankeil.de/talks/fuzzing-on-freebsd/
54     This work was partially funded with donations and done
55     as part of the Privoxy month in 2015.
56   - Consistently use the U(ngreedy) flag in the 'img-reorder' filter.
57   - listen_loop(): Reuse a single thread attribute object
58     The object doesn't change and creating a new one for
59     every thread is a waste of (CPU) time.
60     Sponsored by: Robert Klemme
61   - Free csp resources in the thread that belongs to the csp instead
62     of the main thread which has enough on its plate already.
63     Sponsored by: Robert Klemme
64   - Improve 'socket timeout reached' message.
65     Log the timeout that was triggered and downgrade the
66     log level to LOG_LEVEL_CONNECT to reduce the log noise
67     with common debug settings.
68     The timeout isn't necessary the result of an error and
69     usually merely indicates that Privoxy's socket timeout
70     is lower than the relevant timeouts used by client and
71     server.
72     Sponsored by: Robert Klemme
73   - Explicitly taint the server socket in case of CONNECT requests.
74     This doesn't fix any known problems, but makes
75     some log messages less confusing.
76   - Let write_pid_file() terminate if the pid file can't be opened.
77     Logging the issue at info level is unlikely to help.
78   - log_error(): Reduce the mutex-protected area by not using a
79     heap-allocated buffer that is shared between all threads.
80     This increases performance and reduces the latency with
81     verbose debug settings and multiple concurrent connections.
82     Sponsored by: Robert Klemme
83   - Let zalloc() use calloc() if it's available.
84     In some situations using calloc() can be faster than
85     malloc() + memset() and it should never be slower.
86     In the real world the impact of this change is not
87     expected to be noticeable.
88     Sponsored by: Robert Klemme
89   - Never use select() when poll() is available.
90     On most platforms select() is limited by FD_SETSIZE while
91     poll() is not. This was a scaling issue for multi-user setups.
92     Using poll() has no downside other than the usual risk
93     that code modifications may introduce new bugs that have
94     yet to be found and fixed.
95     At least in theory this commit could also reduce the latency
96     when there are lots of connections and select() would use
97     "bit fields in arrays of integers" to store file descriptors.
98     Another side effect is that Privoxy no longer has to stop
99     monitoring the client sockets when pipelined requests are
100     waiting but can't be read yet.
101     This code keeps the select()-based code behind ifdefs for
102     now but hopefully it can be removed soonish to make the
103     code more readable.
104     Sponsored by: Robert Klemme
105   - Add a 'reproducible-tarball-dist' target.
106     It's currently separate from the "tarball-dist" target
107     because it requires a tar implementation with mtree spec
108     support.
109     It's far from being perfect and does not enforce a
110     reproducible mode, but it's better than nothing.
111   - Use arc4random() if it's available.
112     While Privoxy doesn't need high quality pseudo-random numbers
113     there's no reason not to use them when we can and this silences
114     a warning emitted by code checkers that can't tell whether or not
115     the quality matters.
116   - Show the FEATURE_EXTERNAL_FILTERS status on the status page.
117     Better late than never. Previously a couple of tests weren't
118     executed as Privoxy-Regression-Test couldn't detect that the
119     FEATURE_EXTERNAL_FILTERS dependency was satisfied.
120   - Ditch FEATURE_IMAGE_DETECT_MSIE.
121     It's an obsolete workaround we inherited from Junkbuster
122     and was already disabled by default.
123     Users that feel the urge to work around issues with
124     image requests coming from an Internet Explorer version
125     from more than 15 years ago can still do this using tags.
126   - Consistently use strdup_or_die() instead of strdup() in
127     cases where allocation failures aren't expected.
128     Using strdup_or_die() allows to remove a couple of explicit
129     error checks which slightly reduces the size of the binary.
130   - Insert a refresh tag into the /client-tags CGI page when
131     serving it while a client-specific tag is temporarily enabled.
132     This makes it less likely that the user ends up
133     looking at tag state that is out of date.
134   - Use absolute URLs in the client-tag forms.
135     It's more consistent with the rest of the CGI page
136     URLs and makes it more convenient to copy the forms
137     to external pages.
138   - cgi_error_disabled(): Use status code 403 and an appropriate response line
139   - Use a dedicated CGI handler to deal with tag-toggle requests
140     As a result the /client-tags page is now safe to reach without
141     trusted Referer header which makes bookmarking or linking to
142     it more convenient.
143     Finally, refreshing the /client-tags page to show the
144     current state can no longer unintentionally repeat the
145     previous toggle request.
146   - Don't add a "Connection" header for CONNECT requests.
147     Explicitly sending "Connection: close" is not necessary and
148     apparently it causes problems with some forwarding proxies
149     that will close the connection prematurely.
150     Reported by Marc Thomas.
151   - Fix compiler warnings.
152
153 - Bug fixes:
154   - rfc2553_connect_to(): Properly detect and log when poll()
155     reached the time out. Previously this was logged as:
156     Could not connect to [...]: No error: 0.
157     which isn't very helpful.
158     Sponsored by: Robert Klemme
159   - add_tag_for_client(): Set time_to_live properly.
160     Previously the time_to_live was always set for the first tag.
161     Attempts to temporarily enable a tag would result in enabling
162     it permanently unless no tag was enabled already.
163   - Revert r1.165 which didn't perform as advertised.
164     While the idea was to use "https:// when creating links
165     for the user manual on the website", the actual effect
166     was to use "https://" when Privoxy was supposed to serve
167     the user manual itself.
168     Reported by Yossi Zahn on Privoxy-devel@.
169   - socks5_connect(): Fail in case of unsupported address types.
170     Previously they would not be detected right away and
171     Privoxy would fail later on with an error message that
172     didn't make it obvious that the problem was socks-related.
173     So far, no such problems have actually been reported.
174   - socks5_connect(): Properly deal with socks replies that
175     contain IPv6 addresses.
176     Previously parts of the reply were left unread and
177     later on treated as invalid HTTP response data.
178     Fixes #904 reported by Danny Goossen who also provided
179     the initial version of this patch.
180
181 - Action file improvements:
182   - Unblock 'msdn.microsoft.com/'.
183     It (presumably) isn't used to serve the kind of ads Privoxy should
184     block by default but happens to serve lots of pages with URLs that
185     are likely to result in false positives.
186     Reported by bugreporter1694 in AF#939.
187   - Disable gif deanimation for requests tagged with CSS-REQUEST.
188     The action will ignore content that isn't considered text
189     anyway and explicitly disabling it makes this more obvious
190     if "action" debugging (debug 65536) is enabled while
191     "gif deanimation" debugging (debug 256) isn't.
192   - Explicitly disable HTML filters for requests with CSS-REQUEST tag.
193     The filters are unlikely to break CSS files but executing
194     them without (intentionally) getting any hits is a waste of
195     cpu time and makes the log more noisy when running with
196     "debug 64".
197   - Unblock 'adventofcode.com/'.
198     Reported by Clint Adams in Debian bug #848211.
199     Fixes Roland's AF#937.
200   - Unblock 'adlibris.com'.
201     Reported by Wyrex in #935
202   - Unblock .golang.org/
203   - Add fast-redirects exception for '.youtube.com/.*origin=http'
204
205 - Privoxy-Log-Parser:
206   - Don't gather host and resource statistics if they aren't requested.
207     While the performance impact seems negligible this significantly
208     reduces the memory usage if there are lots of requests.
209   - Bump version as the behaviour (slightly) changed.
210   - Count connection failures as well in statistics mode.
211     Sponsored by: Robert Klemme
212   - Count connection timeouts as well in statistics mode.
213     Sponsored by: Robert Klemme
214   - Fix an 'uninitialized value' warning when generating
215     statistics for a log file without response headers.
216     While privoxy-log-parser was supposed to detect this already,
217     the check was flawed and the message the user didn't see was
218     somewhat confusing anyway.
219     Now the message is less confusing, more helpful and actually printed.
220     Reported by: Robert Klemme
221
222 - Documentation improvements:
223   - Refer to the git sources instead of CVS.
224   - Use GNU/Linux when referring to the OS instead of the kernel.
225   - Add FAQ entry for what to do if editing the config file is access denied.
226   - Add brief HTTP/2 FAQ.
227   - Add a small fuzzing section to the developer documentation.
228   - Add a client-header-tagger{client-ip-address} example.
229   - Stop suggesting that Privoxy is an anonymizing proxy.
230     The term could lead to Privoxy users overestimating
231     what it can do on its own (without Tor).
232   - Make it more obvious that SPI accepts Paypal, too.
233     Currently most donations are made through the Paypal account
234     managed by Zwiebelfreunde e.V. and a more even distribution
235     would be useful.
236   - Suggest to log applying actions as well when reproducing problems.
237   - Explicitly mention that Privoxy binaries are built by individuals
238     on their own systems. Buyer beware!
239   - Mention the release feed on the homepage.
240   - Remove a mysterious comment with a GNU FDL link as it isn't
241     useful and could confuse license scanners.
242     In May 2002 it was briefly claimed that "this document" was covered
243     by the GNU FDL. The commit message (r1.5) doesn't explain the motivation
244     or whether all copyright holders were actually asked and agreed to the
245     declared license change.
246     It's thus hard to tell whether or not the license change was legit,
247     but luckily two days later the "doc license" was "put" "back to GPL"
248     anyway (r1.6).
249     At the same time the offending comment with a link to the FDL
250     (not the GPL) was added for no obvious reason.
251     Now it's gone again.
252
253 - Regression tests:
254   - Bump for-privoxy-version to 3.0.27 as we now rely on untrusted
255     CGI request being rejected with status code 403 (instead of 200).
256   - Update test for /send-stylesheet and add another one
257
258 - Templates:
259   - Consistently use https:// when linking to the Privoxy website.
260   - Remove SourceForge references in Copyright header.
261   - Remove a couple of SourceForge references in a comment.
262     While at it, fix the grammar.
263   - Move the site-specific documentation block before the generic one.
264     While most Privoxy installations don't have a site-specific
265     documentation block, in cases were it exists it's likely to
266     be more relevant than the generic one.
267     Showing it first makes it less likely that users stop reading
268     before they reach it, especially on pages that don't fit on
269     the screen.
270
271 - Build system improvements:
272   - Prefer openjade to jade. On some systems Jade produces
273     HTML with unescaped ampersands in URLs.
274   - Prefer OpenSP to SP to be consistent.
275   - Have Docbook generated HTML files be straight ASCII.
276     Dealing with a mixture of ISO-8859 and UTF-8 files is problematic.
277   - Echo the filename to stderr for 'make dok-tidy'.
278     Make it a bit easier to find errors in docbook generated HTML.
279   - Warn when still using select().
280   - Warn when compiling without calloc().
281   - Make it more obvious that the --with-fdsetsize configure switch
282     is pointless if poll() is available.
283   - Remove support for AmigaOS.
284   - Update windows build system to use supported software.
285     The cygwin gcc -mno-cygwin option is no longer supported, so
286     convert the windows build system to use the cygwin cross-compiler
287     to build "native" code.
288   - Add --enable-static-linking option for configure
289     does the same thing as LDFLAGS=-static; ./configure
290     but nicer than mixing evars and configure options.
291
292 -----------------------------------------------------------------
293 About Privoxy:
294 -----------------------------------------------------------------
295
296 Privoxy is a non-caching web proxy with advanced filtering capabilities for
297 enhancing privacy, modifying web page data and HTTP headers, controlling
298 access, and removing ads and other obnoxious Internet junk. Privoxy has a
299 flexible configuration and can be customized to suit individual needs and
300 tastes. It has application for both stand-alone systems and multi-user
301 networks.
302
303 Privoxy is Free Software and licensed under the GNU GPLv2.
304
305 Our TODO list is rather long. Helping hands and donations are welcome:
306
307   * https://www.privoxy.org/faq/general.html#PARTICIPATE
308
309   * https://www.privoxy.org/faq/general.html#DONATE
310
311 At present, Privoxy is known to run on Windows 95 and later versions
312 (98, ME, 2000, XP, Vista, Windows 7 etc.), GNU/Linux (RedHat, SuSE,
313 Debian, Fedora, Gentoo, Slackware and others), Mac OS X (10.4 and
314 upwards on PPC and Intel processors), OS/2, Haiku, DragonFly, ElectroBSD,
315 FreeBSD, NetBSD, OpenBSD, Solaris, and various other flavors of Unix.
316
317 In addition to the core features of ad blocking and cookie management,
318 Privoxy provides many supplemental features, that give the end-user
319 more control, more privacy and more freedom:
320
321   *  Supports "Connection: keep-alive". Outgoing connections can be kept
322      alive independently from the client. Currently not available on all
323      platforms.
324
325   *  Supports IPv6, provided the operating system does so too,
326      and the configure script detects it.
327
328   *  Supports tagging which allows to change the behaviour based on client
329      and server headers.
330
331   *  Can be run as an "intercepting" proxy, which obviates the need to
332      configure browsers individually.
333
334   *  Sophisticated actions and filters for manipulating both server and
335      client headers.
336
337   *  Can be chained with other proxies.
338
339   *  Integrated browser based configuration and control utility at
340      http://config.privoxy.org/ (shortcut: http://p.p/). Browser-based
341      tracing of rule and filter effects. Remote toggling.
342
343   *  Web page filtering (text replacements, removes banners based on size,
344      invisible "web-bugs" and HTML annoyances, etc.)
345
346   *  Modularized configuration that allows for standard settings and user
347      settings to reside in separate files, so that installing updated actions
348      files won't overwrite individual user settings.
349
350   *  Support for Perl Compatible Regular Expressions in the configuration
351      files, and a more sophisticated and flexible configuration syntax.
352
353   *  GIF de-animation.
354
355   *  Bypass many click-tracking scripts (avoids script redirection).
356
357   *  User-customizable HTML templates for most proxy-generated pages (e.g.
358      "blocked" page).
359
360   *  Auto-detection and re-reading of config file changes.
361     
362   *  Most features are controllable on a per-site or per-location basis.
363
364
365 Home Page: 
366    https://www.privoxy.org/
367
368   - Privoxy Developers <privoxy-devel@lists.privoxy.org>