[privoxy.git] / doc / webserver / user-manual / whatsnew.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2 "http://www.w3.org/TR/html4/loose.dtd">
3 <html>
4 <head>
5   <title>What's New in this Release</title>
6   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
7   <link rel="HOME" title="Privoxy 3.0.28 User Manual" href="index.html">
8   <link rel="PREVIOUS" title="Installation" href="installation.html">
9   <link rel="NEXT" title="Quickstart to Using Privoxy" href="quickstart.html">
10   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
11   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
12   <link rel="STYLESHEET" type="text/css" href="p_doc.css">
13 </head>
14 <body class="SECT1" bgcolor="#EEEEEE" text="#000000" link="#0000FF" vlink="#840084" alink="#0000FF">
15   <div class="NAVHEADER">
16     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
17       <tr>
18         <th colspan="3" align="center">Privoxy 3.0.28 User Manual</th>
19       </tr>
20       <tr>
21         <td width="10%" align="left" valign="bottom"><a href="installation.html" accesskey="P">Prev</a></td>
22         <td width="80%" align="center" valign="bottom"></td>
23         <td width="10%" align="right" valign="bottom"><a href="quickstart.html" accesskey="N">Next</a></td>
24       </tr>
25     </table>
26     <hr align="left" width="100%">
27   </div>
28   <div class="SECT1">
29     <h1 class="SECT1"><a name="WHATSNEW" id="WHATSNEW">3. What's New in this Release</a></h1>
30     <p><span class="APPLICATION">Privoxy 3.0.27</span> stable scales better in multi-user environments and brings a
31     couple of tuning directives. <span class="APPLICATION">Privoxy 3.0.28</span> stable fixes two regressions
32     introduced in 3.0.27.</p>
33     <p>Changes in <span class="APPLICATION">Privoxy 3.0.28</span> stable:</p>
34     <ul>
35       <li>
36         <p>Bug fixes for regressions in 3.0.27:</p>
37         <ul>
38           <li>
39             <p>Fixed misplaced parentheses. Reported by David Binderman.</p>
40           </li>
41           <li>
42             <p>Changed two regression tests to depend on config directive enable-remote-toggle instead of
43             FEATURE_TOGGLE.</p>
44           </li>
45         </ul>
46       </li>
47     </ul>
48     <p>Changes in <span class="APPLICATION">Privoxy 3.0.27</span> stable:</p>
49     <ul>
50       <li>
51         <p>General improvements:</p>
52         <ul>
53           <li>
54             <p>Add a receive-buffer-size directive which can be used to set the size of the previously statically
55             allocated buffer in handle_established_connection(). Increasing the buffer size increases Privoxy's memory
56             usage but can lower the number of context switches and thereby reduce the CPU usage and potentially
57             increase the throughput. This is mostly relevant for fast network connections and large downloads that
58             don't require filtering. Sponsored by: Robert Klemme</p>
59           </li>
60           <li>
61             <p>Add a listen-backlog directive which specifies the backlog value passed to listen(). Sponsored by:
62             Robert Klemme</p>
63           </li>
64           <li>
65             <p>Add an enable-accept-filter directive which allows to toggle accept filter support at run time when
66             compiled with FEATURE_ACCEPT_FILTER support. It makes testing more convenient and now that it's optional we
67             can emit an error message if enabling the accept filter fails. Sponsored by: Robert Klemme</p>
68           </li>
69           <li>
70             <p>Add a delay-response{} action. This is useful to tar pit JavaScript requests that are endlessly retried
71             in case of blocks. It can also be used to simulate a slow Internet connection. Sponsored by: Robert
72             Klemme</p>
73           </li>
74           <li>
75             <p>Add a 'trusted-cgi-referrer' directive. It allows to configure another page or site that can be used to
76             reach sensitive CGI resources. Sponsored by: Robert Klemme</p>
77           </li>
78           <li>
79             <p>Add a --fuzz mode which exposes Privoxy internals to input from files or stdout. Mainly tested with
80             American Fuzzy Lop. For details see: https://www.fabiankeil.de/talks/fuzzing-on-freebsd/ This work was
81             partially funded with donations and done as part of the Privoxy month in 2015.</p>
82           </li>
83           <li>
84             <p>Consistently use the U(ngreedy) flag in the 'img-reorder' filter.</p>
85           </li>
86           <li>
87             <p>listen_loop(): Reuse a single thread attribute object The object doesn't change and creating a new one
88             for every thread is a waste of (CPU) time. Sponsored by: Robert Klemme</p>
89           </li>
90           <li>
91             <p>Free csp resources in the thread that belongs to the csp instead of the main thread which has enough on
92             its plate already. Sponsored by: Robert Klemme</p>
93           </li>
94           <li>
95             <p>Improve 'socket timeout reached' message. Log the timeout that was triggered and downgrade the log level
96             to LOG_LEVEL_CONNECT to reduce the log noise with common debug settings. The timeout isn't necessary the
97             result of an error and usually merely indicates that Privoxy's socket timeout is lower than the relevant
98             timeouts used by client and server. Sponsored by: Robert Klemme</p>
99           </li>
100           <li>
101             <p>Explicitly taint the server socket in case of CONNECT requests. This doesn't fix any known problems, but
102             makes some log messages less confusing.</p>
103           </li>
104           <li>
105             <p>Let write_pid_file() terminate if the pid file can't be opened. Logging the issue at info level is
106             unlikely to help.</p>
107           </li>
108           <li>
109             <p>log_error(): Reduce the mutex-protected area by not using a heap-allocated buffer that is shared between
110             all threads. This increases performance and reduces the latency with verbose debug settings and multiple
111             concurrent connections. Sponsored by: Robert Klemme</p>
112           </li>
113           <li>
114             <p>Let zalloc() use calloc() if it's available. In some situations using calloc() can be faster than
115             malloc() + memset() and it should never be slower. In the real world the impact of this change is not
116             expected to be noticeable. Sponsored by: Robert Klemme</p>
117           </li>
118           <li>
119             <p>Never use select() when poll() is available. On most platforms select() is limited by FD_SETSIZE while
120             poll() is not. This was a scaling issue for multi-user setups. Using poll() has no downside other than the
121             usual risk that code modifications may introduce new bugs that have yet to be found and fixed. At least in
122             theory this commit could also reduce the latency when there are lots of connections and select() would use
123             "bit fields in arrays of integers" to store file descriptors. Another side effect is that Privoxy no longer
124             has to stop monitoring the client sockets when pipelined requests are waiting but can't be read yet. This
125             code keeps the select()-based code behind ifdefs for now but hopefully it can be removed soonish to make
126             the code more readable. Sponsored by: Robert Klemme</p>
127           </li>
128           <li>
129             <p>Add a 'reproducible-tarball-dist' target. It's currently separate from the "tarball-dist" target because
130             it requires a tar implementation with mtree spec support. It's far from being perfect and does not enforce
131             a reproducible mode, but it's better than nothing.</p>
132           </li>
133           <li>
134             <p>Use arc4random() if it's available. While Privoxy doesn't need high quality pseudo-random numbers
135             there's no reason not to use them when we can and this silences a warning emitted by code checkers that
136             can't tell whether or not the quality matters.</p>
137           </li>
138           <li>
139             <p>Show the FEATURE_EXTERNAL_FILTERS status on the status page. Better late than never. Previously a couple
140             of tests weren't executed as Privoxy-Regression-Test couldn't detect that the FEATURE_EXTERNAL_FILTERS
141             dependency was satisfied.</p>
142           </li>
143           <li>
144             <p>Ditch FEATURE_IMAGE_DETECT_MSIE. It's an obsolete workaround we inherited from Junkbuster and was
145             already disabled by default. Users that feel the urge to work around issues with image requests coming from
146             an Internet Explorer version from more than 15 years ago can still do this using tags.</p>
147           </li>
148           <li>
149             <p>Consistently use strdup_or_die() instead of strdup() in cases where allocation failures aren't expected.
150             Using strdup_or_die() allows to remove a couple of explicit error checks which slightly reduces the size of
151             the binary.</p>
152           </li>
153           <li>
154             <p>Insert a refresh tag into the /client-tags CGI page when serving it while a client-specific tag is
155             temporarily enabled. This makes it less likely that the user ends up looking at tag state that is out of
156             date.</p>
157           </li>
158           <li>
159             <p>Use absolute URLs in the client-tag forms. It's more consistent with the rest of the CGI page URLs and
160             makes it more convenient to copy the forms to external pages.</p>
161           </li>
162           <li>
163             <p>cgi_error_disabled(): Use status code 403 and an appropriate response line</p>
164           </li>
165           <li>
166             <p>Use a dedicated CGI handler to deal with tag-toggle requests As a result the /client-tags page is now
167             safe to reach without trusted Referer header which makes bookmarking or linking to it more convenient.
168             Finally, refreshing the /client-tags page to show the current state can no longer unintentionally repeat
169             the previous toggle request.</p>
170           </li>
171           <li>
172             <p>Don't add a "Connection" header for CONNECT requests. Explicitly sending "Connection: close" is not
173             necessary and apparently it causes problems with some forwarding proxies that will close the connection
174             prematurely. Reported by Marc Thomas.</p>
175           </li>
176           <li>
177             <p>Fix compiler warnings.</p>
178           </li>
179         </ul>
180       </li>
181       <li>
182         <p>Bug fixes:</p>
183         <ul>
184           <li>
185             <p>rfc2553_connect_to(): Properly detect and log when poll() reached the time out. Previously this was
186             logged as: Could not connect to [...]: No error: 0. which isn't very helpful. Sponsored by: Robert
187             Klemme</p>
188           </li>
189           <li>
190             <p>add_tag_for_client(): Set time_to_live properly. Previously the time_to_live was always set for the
191             first tag. Attempts to temporarily enable a tag would result in enabling it permanently unless no tag was
192             enabled already.</p>
193           </li>
194           <li>
195             <p>Revert r1.165 which didn't perform as advertised. While the idea was to use "https:// when creating
196             links for the user manual on the website", the actual effect was to use "https://" when Privoxy was
197             supposed to serve the user manual itself. Reported by Yossi Zahn on Privoxy-devel@.</p>
198           </li>
199           <li>
200             <p>socks5_connect(): Fail in case of unsupported address types. Previously they would not be detected right
201             away and Privoxy would fail later on with an error message that didn't make it obvious that the problem was
202             socks-related. So far, no such problems have actually been reported.</p>
203           </li>
204           <li>
205             <p>socks5_connect(): Properly deal with socks replies that contain IPv6 addresses. Previously parts of the
206             reply were left unread and later on treated as invalid HTTP response data. Fixes #904 reported by Danny
207             Goossen who also provided the initial version of this patch.</p>
208           </li>
209         </ul>
210       </li>
211       <li>
212         <p>Action file improvements:</p>
213         <ul>
214           <li>
215             <p>Unblock 'msdn.microsoft.com/'. It (presumably) isn't used to serve the kind of ads Privoxy should block
216             by default but happens to serve lots of pages with URLs that are likely to result in false positives.
217             Reported by bugreporter1694 in AF#939.</p>
218           </li>
219           <li>
220             <p>Disable gif deanimation for requests tagged with CSS-REQUEST. The action will ignore content that isn't
221             considered text anyway and explicitly disabling it makes this more obvious if "action" debugging (debug
222             65536) is enabled while "gif deanimation" debugging (debug 256) isn't.</p>
223           </li>
224           <li>
225             <p>Explicitly disable HTML filters for requests with CSS-REQUEST tag. The filters are unlikely to break CSS
226             files but executing them without (intentionally) getting any hits is a waste of cpu time and makes the log
227             more noisy when running with "debug 64".</p>
228           </li>
229           <li>
230             <p>Unblock 'adventofcode.com/'. Reported by Clint Adams in Debian bug #848211. Fixes Roland's AF#937.</p>
231           </li>
232           <li>
233             <p>Unblock 'adlibris.com'. Reported by Wyrex in #935</p>
234           </li>
235           <li>
236             <p>Unblock .golang.org/</p>
237           </li>
238           <li>
239             <p>Add fast-redirects exception for '.youtube.com/.*origin=http'</p>
240           </li>
241         </ul>
242       </li>
243       <li>
244         <p>Privoxy-Log-Parser:</p>
245         <ul>
246           <li>
247             <p>Don't gather host and resource statistics if they aren't requested. While the performance impact seems
248             negligible this significantly reduces the memory usage if there are lots of requests.</p>
249           </li>
250           <li>
251             <p>Bump version as the behaviour (slightly) changed.</p>
252           </li>
253           <li>
254             <p>Count connection failures as well in statistics mode. Sponsored by: Robert Klemme</p>
255           </li>
256           <li>
257             <p>Count connection timeouts as well in statistics mode. Sponsored by: Robert Klemme</p>
258           </li>
259           <li>
260             <p>Fix an 'uninitialized value' warning when generating statistics for a log file without response headers.
261             While privoxy-log-parser was supposed to detect this already, the check was flawed and the message the user
262             didn't see was somewhat confusing anyway. Now the message is less confusing, more helpful and actually
263             printed. Reported by: Robert Klemme</p>
264           </li>
265         </ul>
266       </li>
267       <li>
268         <p>Documentation improvements:</p>
269         <ul>
270           <li>
271             <p>Refer to the git sources instead of CVS.</p>
272           </li>
273           <li>
274             <p>Use GNU/Linux when referring to the OS instead of the kernel.</p>
275           </li>
276           <li>
277             <p>Add FAQ entry for what to do if editing the config file is access denied.</p>
278           </li>
279           <li>
280             <p>Add brief HTTP/2 FAQ.</p>
281           </li>
282           <li>
283             <p>Add a small fuzzing section to the developer documentation.</p>
284           </li>
285           <li>
286             <p>Add a client-header-tagger{client-ip-address} example.</p>
287           </li>
288           <li>
289             <p>Stop suggesting that Privoxy is an anonymizing proxy. The term could lead to Privoxy users
290             overestimating what it can do on its own (without Tor).</p>
291           </li>
292           <li>
293             <p>Make it more obvious that SPI accepts Paypal, too. Currently most donations are made through the Paypal
294             account managed by Zwiebelfreunde e.V. and a more even distribution would be useful.</p>
295           </li>
296           <li>
297             <p>Suggest to log applying actions as well when reproducing problems.</p>
298           </li>
299           <li>
300             <p>Explicitly mention that Privoxy binaries are built by individuals on their own systems. Buyer
301             beware!</p>
302           </li>
303           <li>
304             <p>Mention the release feed on the homepage.</p>
305           </li>
306           <li>
307             <p>Remove a mysterious comment with a GNU FDL link as it isn't useful and could confuse license scanners.
308             In May 2002 it was briefly claimed that "this document" was covered by the GNU FDL. The commit message
309             (r1.5) doesn't explain the motivation or whether all copyright holders were actually asked and agreed to
310             the declared license change. It's thus hard to tell whether or not the license change was legit, but
311             luckily two days later the "doc license" was "put" "back to GPL" anyway (r1.6). At the same time the
312             offending comment with a link to the FDL (not the GPL) was added for no obvious reason. Now it's gone
313             again.</p>
314           </li>
315         </ul>
316       </li>
317       <li>
318         <p>Regression tests:</p>
319         <ul>
320           <li>
321             <p>Bump for-privoxy-version to 3.0.27 as we now rely on untrusted CGI request being rejected with status
322             code 403 (instead of 200).</p>
323           </li>
324           <li>
325             <p>Update test for /send-stylesheet and add another one</p>
326           </li>
327         </ul>
328       </li>
329       <li>
330         <p>Templates:</p>
331         <ul>
332           <li>
333             <p>Consistently use https:// when linking to the Privoxy website.</p>
334           </li>
335           <li>
336             <p>Remove SourceForge references in Copyright header.</p>
337           </li>
338           <li>
339             <p>Remove a couple of SourceForge references in a comment. While at it, fix the grammar.</p>
340           </li>
341           <li>
342             <p>Move the site-specific documentation block before the generic one. While most Privoxy installations
343             don't have a site-specific documentation block, in cases were it exists it's likely to be more relevant
344             than the generic one. Showing it first makes it less likely that users stop reading before they reach it,
345             especially on pages that don't fit on the screen.</p>
346           </li>
347         </ul>
348       </li>
349       <li>
350         <p>Build system improvements:</p>
351         <ul>
352           <li>
353             <p>Prefer openjade to jade. On some systems Jade produces HTML with unescaped ampersands in URLs.</p>
354           </li>
355           <li>
356             <p>Prefer OpenSP to SP to be consistent.</p>
357           </li>
358           <li>
359             <p>Have Docbook generated HTML files be straight ASCII. Dealing with a mixture of ISO-8859 and UTF-8 files
360             is problematic.</p>
361           </li>
362           <li>
363             <p>Echo the filename to stderr for 'make dok-tidy'. Make it a bit easier to find errors in docbook
364             generated HTML.</p>
365           </li>
366           <li>
367             <p>Warn when still using select().</p>
368           </li>
369           <li>
370             <p>Warn when compiling without calloc().</p>
371           </li>
372           <li>
373             <p>Make it more obvious that the --with-fdsetsize configure switch is pointless if poll() is available.</p>
374           </li>
375           <li>
376             <p>Remove support for AmigaOS.</p>
377           </li>
378           <li>
379             <p>Update windows build system to use supported software. The cygwin gcc -mno-cygwin option is no longer
380             supported, so convert the windows build system to use the cygwin cross-compiler to build "native" code.</p>
381           </li>
382           <li>
383             <p>Add --enable-static-linking option for configure does the same thing as LDFLAGS=-static; ./configure but
384             nicer than mixing evars and configure options.</p>
385           </li>
386         </ul>
387       </li>
388     </ul>
389     <div class="SECT2">
390       <h2 class="SECT2"><a name="UPGRADERSNOTE" id="UPGRADERSNOTE">3.1. Note to Upgraders</a></h2>
391       <p>A quick list of things to be aware of before upgrading from earlier versions of <span class=
392       "APPLICATION">Privoxy</span>:</p>
393       <ul>
394         <li>
395           <p>The recommended way to upgrade <span class="APPLICATION">Privoxy</span> is to backup your old
396           configuration files, install the new ones, verify that <span class="APPLICATION">Privoxy</span> is working
397           correctly and finally merge back your changes using <span class="APPLICATION">diff</span> and maybe
398           <span class="APPLICATION">patch</span>.</p>
399           <p>There are a number of new features in each <span class="APPLICATION">Privoxy</span> release and most of
400           them have to be explicitly enabled in the configuration files. Old configuration files obviously don't do
401           that and due to syntax changes using old configuration files with a new <span class=
402           "APPLICATION">Privoxy</span> isn't always possible anyway.</p>
403         </li>
404         <li>
405           <p>Note that some installers remove earlier versions completely, including configuration files, therefore you
406           should really save any important configuration files!</p>
407         </li>
408         <li>
409           <p>On the other hand, other installers don't overwrite existing configuration files, thinking you will want
410           to do that yourself.</p>
411         </li>
412         <li>
413           <p>In the default configuration only fatal errors are logged now. You can change that in the <a href=
414           "config.html#DEBUG">debug section</a> of the configuration file. You may also want to enable more verbose
415           logging until you verified that the new <span class="APPLICATION">Privoxy</span> version is working as
416           expected.</p>
417         </li>
418         <li>
419           <p>Three other config file settings are now off by default: <a href=
420           "config.html#ENABLE-REMOTE-TOGGLE">enable-remote-toggle</a>, <a href=
421           "config.html#ENABLE-REMOTE-HTTP-TOGGLE">enable-remote-http-toggle</a>, and <a href=
422           "config.html#ENABLE-EDIT-ACTIONS">enable-edit-actions</a>. If you use or want these, you will need to
423           explicitly enable them, and be aware of the security issues involved.</p>
424         </li>
425       </ul>
426     </div>
427   </div>
428   <div class="NAVFOOTER">
429     <hr align="left" width="100%">
430     <table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
431       <tr>
432         <td width="33%" align="left" valign="top"><a href="installation.html" accesskey="P">Prev</a></td>
433         <td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">Home</a></td>
434         <td width="33%" align="right" valign="top"><a href="quickstart.html" accesskey="N">Next</a></td>
435       </tr>
436       <tr>
437         <td width="33%" align="left" valign="top">Installation</td>
438         <td width="34%" align="center" valign="top">&nbsp;</td>
439         <td width="33%" align="right" valign="top">Quickstart to Using Privoxy</td>
440       </tr>
441     </table>
442   </div>
443 </body>
444 </html>