Linuxconf is deprecated on RH, substitute chkconfig.
[privoxy.git] / doc / source / user-manual.sgml
1 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
2 <!entity % dummy "INCLUDE"> 
3 <!entity supported SYSTEM "supported.sgml">
4 <!entity newfeatures SYSTEM "newfeatures.sgml">
5 <!entity p-intro SYSTEM "privoxy.sgml">
6 <!entity seealso SYSTEM "seealso.sgml">
7 <!entity buildsource SYSTEM "buildsource.sgml">
8 <!entity contacting SYSTEM "contacting.sgml">
9 <!entity history SYSTEM "history.sgml">
10 <!entity copyright SYSTEM "copyright.sgml">
11 <!entity p-version "2.9.14">
12 <!entity p-status "beta">
13 <!entity % p-not-stable "INCLUDE">
14 <!entity % p-stable "IGNORE">
15 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
16 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
17 <!entity % p-readme "IGNORE">
18 <!entity % p-config "IGNORE">
19 <!entity % p-supp-userman "IGNORE"> <!-- Omit some from supported.sgml    -->
20 ]>
21 <!--
22  File        :  $Source: /cvsroot/ijbswa/current/doc/source/user-manual.sgml,v $
23
24  Purpose     :  user manual
25                 This file belongs into
26                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
27                 
28  $Id: user-manual.sgml,v 1.89 2002/04/23 21:05:28 oes Exp $
29
30  Written by and Copyright (C) 2001 the SourceForge
31  Privoxy team. http://www.privoxy.org/
32
33  Based on the Internet Junkbuster originally written
34  by and Copyright (C) 1997 Anonymous Coders and 
35  Junkbusters Corporation.  http://www.junkbusters.com
36
37
38  ========================================================================
39  NOTE: Please read developer-manual/documentation.html before touching 
40  anything in this, or other Privoxy documentation.
41  ========================================================================
42
43 -->
44
45 <article id="index">
46 <artheader>
47 <title>Privoxy User Manual</title>
48
49 <pubdate>$Id: user-manual.sgml,v 1.89 2002/04/23 21:05:28 oes Exp $</pubdate>
50
51 <authorgroup>
52  <author>
53   <affiliation>
54    <orgname>By: Privoxy Developers</orgname>
55    </affiliation>
56  </author>
57 </authorgroup>
58
59 <abstract>
60 <![%dummy;[
61  <para>
62  <comment>
63   This is here to keep vim syntax file from breaking :/
64   If I knew enough to fix it, I would.
65   PLEASE DO NOT REMOVE! HB: hal@foobox.net
66  </comment>
67  </para>
68 ]]>
69
70  <para>
71   The user manual gives users information on how to install, configure and use
72   <ulink
73   url="http://www.privoxy.org/"><application>Privoxy</application></ulink>.
74   </para>
75
76 <!-- Include privoxy.sgml boilerplate: -->
77  &p-intro;
78 <!-- end privoxy.sgml -->
79
80  <para>
81   You can find the latest version of the user manual at  <ulink
82   url="http://www.privoxy.org/user-manual/">http://www.privoxy.org/user-manual/</ulink>.
83   Please see the <ulink url="contact.html">Contact section</ulink> on how to
84   contact the developers.
85   </para>
86
87 <!--   <para> -->
88 <!--    Feel free to send a note to the developers at <email>ijbswa-developers@lists.sourceforge.net</email>. -->
89 <!--   </para> -->
90 </abstract>
91
92 </artheader>
93
94 <!--   ~~~~~       New section      ~~~~~     -->
95 <sect1 id="intro" label=""><title></title>
96 <!-- dummy section to force TOC on page by itself -->
97 <!-- DO NOT REMOVE! please ;) -->
98 <para> </para>
99 </sect1>
100
101 <!--   ~~~~~       New section      ~~~~~     -->
102
103 <sect1 label="1" id="introduction"><title>Introduction</title>
104 <para>
105  This documentation is included with the current &p-status; version of
106  <application>Privoxy</application>, v.&p-version;<![%p-not-stable;[, 
107  and is mostly complete at this point. The most up to date reference for the
108  time being is still the comments in the source files and in the individual
109  configuration files. Development of version 3.0 is currently nearing
110  completion, and includes many significant changes and enhancements over
111  earlier versions. The target release date for
112  stable v3.0 is <quote>soon</quote> ;-)]]>.
113 </para>
114
115 <!-- include only in non-stable versions -->
116 <![%p-not-stable;[
117 <para>
118  Since this is a &p-status; version, not all new features are well tested. This
119  documentation may be slightly out of sync as a result (especially with 
120  CVS sources). And there <emphasis>may be</emphasis> bugs, though hopefully
121  not many! 
122 </para>
123 ]]>
124
125 <!--   ~~~~~       New section      ~~~~~     -->
126 <sect2 id="newfeatures">
127 <title>New Features</title>
128 <para>
129  In addition to <application>Internet Junkbuster's</application> traditional
130  features of ad and banner blocking and cookie management,
131  <application>Privoxy</application> provides new features<![%p-not-stable;[,
132  some of them currently under development]]>:
133 </para>
134
135 <!-- Include newfeatures.sgml boilerplate here: -->
136  &newfeatures;
137 <!-- end boilerplate -->
138 </sect2>
139
140 </sect1>
141
142 <!--  ~  End section  ~  -->
143
144
145 <!--   ~~~~~       New section      ~~~~~     -->
146 <sect1 id="installation"><title>Installation</title>
147
148 <para>
149  <application>Privoxy</application> is available both in convenient pre-compiled
150  packages for a wide range of operating systems, and as raw source code.
151  For most users, we recommend using the packages, which can be downloaded from our
152  <ulink url="http://sourceforge.net/projects/ijbswa/">Privoxy Project Page</ulink>.
153 </para>
154
155 <para>
156  If you like to live on the bleeding edge and are not afraid of using
157  possibly unstable development versions, you can check out the up-to-the-minute
158  version directly from <ulink url="http://sourceforge.net/cvs/?group_id=11118">the
159  CVS repository</ulink> or simply download <ulink
160  url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz">the nightly CVS
161  tarball.</ulink>
162 </para>
163
164 <!-- Include supported.sgml boilerplate -->
165  &supported; 
166 <!-- end boilerplate -->
167
168 <!--   ~~~~~       New section      ~~~~~     -->
169 <sect2 id="installation-packages"><title>Binary Packages</title>
170
171 <para>
172  Note: If you have a previous <application>Junkbuster</application> or
173  <application>Privoxy</application> installation on your system, you
174  will need to remove it.  Some platforms do this for you as part 
175  of their installation procedure. (See below for your platform).
176 </para>
177
178 <para>
179  In any case <emphasis>be sure to backup your old configuration
180  if it is valuable to you.</emphasis> See the
181  <link linkend="upgradersnote">note to upgraders</link>.
182 </para>
183
184 <para>
185  How to install the binary packages depends on your operating system:
186 </para>
187
188 <!--   ~~~~~       New section      ~~~~~     -->
189 <sect3 id="installation-pack-rpm"><title>Red Hat and SuSE RPMs</title>
190
191 <para>
192  RPMs can be installed with <literal>rpm -Uvh privoxy-&p-version;-1.rpm</literal>,
193  and will use <filename>/etc/privoxy</filename> for the location 
194  of configuration files.
195 </para>
196
197 <para>
198  Note that on Red Hat, <application>Privoxy</application> will not be
199  automatically started on system boot. You will need to enable that using
200  <command>chkconfig</command>, <command>ntsysv</command>, or similar method.
201 </para>
202
203 <para>
204  If you have problems with failed dependencies, try rebuilding the SRC RPM: 
205  <literal>rpm --rebuild privoxy-&p-version;-1.src.rpm;</literal>. This 
206  will use your locally installed libraries and RPM version. 
207 </para>
208
209 <para>
210  Also note that if you have a <application>Junkbuster</application> RPM installed
211  on your system, you need to remove it first, because the packages conflict.
212  Otherwise, RPM will try to remove <application>Junkbuster</application>
213  automatically, before installing <application>Privoxy</application>.
214 </para>
215 </sect3>
216
217 <!--   ~~~~~       New section      ~~~~~     -->
218 <sect3 id="installation-deb"><title>Debian</title>
219 <para>
220  FIXME.
221 </para>
222 </sect3>
223
224 <!--   ~~~~~       New section      ~~~~~     -->
225 <sect3 id="installation-pack-win"><title>Windows</title>
226
227 <para>
228  Just double-click the installer, which will guide you through
229  the installation process.
230 </para>
231 </sect3>
232
233 <!--   ~~~~~       New section      ~~~~~     -->
234 <sect3 id="installation-pack-bintgz"><title>Solaris, NetBSD, FreeBSD, HP-UX</title>
235
236 <para>
237  Create a new directory, <literal>cd</literal> to it, then unzip and
238  untar the archive. For the most part, you'll have to figure out where
239  things go. FIXME.
240 </para>
241 </sect3>
242
243 <!--   ~~~~~       New section      ~~~~~     -->
244 <sect3 id="installation-os2"><title>OS/2</title>
245
246 <para>
247  First, make sure that no previous installations of
248  <application>Junkbuster</application> and / or 
249  <application>Privoxy</application> are left on your
250  system. You can do this by 
251 </para>
252
253 <para>
254  Then, just double-click the WarpIN self-installing archive, which will
255  guide you through the installation process. A shadow of the
256  <application>Privoxy</application> executable will be placed in your
257  startup folder so it will start automatically whenever OS/2 starts.
258 </para>
259
260 <para>
261  The directory you choose to install <application>Privoxy</application>
262  into will contain all of the configuration files.
263 </para>
264 </sect3>
265
266 <!--   ~~~~~       New section      ~~~~~     -->
267 <sect3 id="installation-mac"><title>Max OSX</title>
268 <para>
269  Unzip the downloaded package (you can either double-click on the file
270  in the finder, or on the desktop if you downloaded it there).  Then,
271  double-click on the package installer icon and follow the installation
272  process.
273  <application>Privoxy</application> will be installed in the subdirectory
274  <literal>/Applications/Privoxy.app</literal>.
275  <application>Privoxy</application> will set itself up to start 
276  automatically on system bringup via
277  <literal>/System/Library/StartupItems/Privoxy</literal>.
278 </para>
279 </sect3>
280
281 <!--   ~~~~~       New section      ~~~~~     -->
282 <sect3 id="installation-amiga"><title>AmigaOS</title>
283 <para>
284  Copy and then unpack the <filename>lha</filename> archive to a suitable location. 
285  All necessary files will be installed into <application>Privoxy</application>
286  directory, including all configuration and log files. To uninstall, just 
287  remove this directory.
288 </para>
289 <para>
290  Start <application>Privoxy</application> (with RUN &lt;&gt;NIL:) in your
291  <filename>startnet</filename> script (AmiTCP), in
292  <filename>s:user-startup</filename> (RoadShow), as startup program in your
293  startup script (Genesis), or as startup action (Miami and MiamiDx). 
294  <application>Privoxy</application> will automatically quit when you quit your
295  TCP/IP stack (just ignore the harmless warning your TCP/IP stack may display that
296  <application>Privoxy</application> is still running).
297 </para>
298 </sect3>
299 </sect2>
300
301 <!--   ~~~~~       New section      ~~~~~     -->
302 <sect2 id="installation-source"><title>Building from Source</title>
303
304 <!-- include buildsource.sgml boilerplate: -->
305 &buildsource;
306 <!-- end boilerplate -->
307 </sect2>
308
309 </sect1>
310
311 <!--  ~  End section  ~  -->
312
313
314 <!--   ~~~~~       New section      ~~~~~     -->
315
316 <sect1 id="quickstart"><title>Quickstart to Using <application>Privoxy</application></title>
317
318
319 <!--   ~~~~~       New section      ~~~~~     -->
320 <sect2 id="upgradersnote">
321 <title>Note to Upgraders</title>
322 <para>
323  There are very significant changes from older versions of 
324  <application>Junkbuster</application> to the current
325  <application>Privoxy</application>. Configuration is substantially 
326  changed. <application>Junkbuster 2.0.x</application> and earlier 
327  configuration files will not migrate. The functionality of the old
328  <filename>blockfile</filename>, <filename>cookiefile</filename> and
329  <filename>imagelist</filename>, are now combined into the
330  <quote>actions file</quote>  (<filename>default.action</filename>
331  for most installations).
332 </para>
333 <para>
334  A <quote>filter file</quote> (typically <filename>default.filter</filename>)
335  is new as of <application>Privoxy 2.9.x</application>, and provides some
336  of the new sophistication (explained below). <filename>config</filename> is 
337  much the same as before.
338 </para>
339 <para>
340  If upgrading from a 2.0.x version, you will have to use the new config 
341  files, and possibly adapt any personal rules from your older files.
342  When porting personal rules over from the old <filename>blockfile</filename>
343  to the new actions file, please note that even the pattern syntax has
344  changed. If upgrading from 2.9.x development versions, it is still
345  recommended to use the new configuration files.
346 </para>
347 <para>
348  A quick list of things to be aware of before upgrading: 
349 </para>
350
351 <para>
352  <itemizedlist>
353
354  <listitem>
355   <para>
356    The default listening port is now 8118 due to a conflict with another 
357    service (NAS).
358   </para>
359  </listitem>  
360  <listitem>
361   <para>  
362     Some installers may remove earlier versions completely. Save any 
363     important configuration files!
364   </para>
365  </listitem>
366  <listitem>
367   <para>
368    <application>Privoxy</application> is controllable with a web browser 
369    at the special URL: <ulink
370    url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
371    (Shortcut: <ulink url="http://p.p/">http://p.p/</ulink>). Many
372    aspects of configuration can be done here, including temporarily disabling
373    <application>Privoxy</application>.
374   </para>
375  </listitem> 
376  <listitem>
377   <para>
378    The primary configuration file for cookie management, ad and banner 
379    blocking, and many other aspects of <application>Privoxy</application>
380    configuration is <filename>default.action</filename>. It is strongly
381    recommended to become familiar with the new actions concept below, 
382    before modifying this file.
383   </para>
384  </listitem> 
385   <listitem>
386   <para>
387 <!-- I think it is best to keep this somewhat vague, in case  -->
388 <!-- the situation changes under our feet. -->   
389    Some installers may not automatically start
390    <application>Privoxy</application> after installation.
391   </para>
392  </listitem> 
393
394  </itemizedlist>
395 </para>
396
397 </sect2>
398
399 <!--   ~~~~~       New section      ~~~~~     -->
400 <sect2 id="startup">
401 <title>Starting <application>Privoxy</application></title>
402 <para>
403  Before launching <application>Privoxy</application> for the first time, you 
404  will want to configure your browser(s) to use <application>Privoxy</application>
405  as a HTTP and HTTPS proxy. The default is localhost for the proxy address,
406  and port 8118 (earlier versions used port 8000). This is the one
407  configuration step that must be done! 
408 </para>
409  
410 <para> 
411  With <application>Netscape</application> (and
412  <application>Mozilla</application>), this can be set under <literal>Edit
413  -&gt; Preferences -&gt; Advanced -&gt; Proxies -&gt; HTTP Proxy</literal>.
414  For <application>Internet Explorer</application>: <literal>Tools -&gt;
415  Internet Properties -&gt; Connections -&gt; LAN Setting</literal>. Then,
416  check <quote>Use Proxy</quote> and fill in the appropriate info (Address:
417  localhost, Port: 8118). Include if HTTPS proxy support too.
418 </para>
419
420 <para>
421  After doing this, flush your browser's disk and memory caches to force a
422  re-reading of all pages and to get rid of any ads that may be cached. You 
423  are now ready to start enjoying the benefits of using
424  <application>Privoxy</application>!
425 </para>
426
427
428 <para>
429  <application>Privoxy</application> is typically started by specifying the
430  main configuration file to be used on the command line. Example Unix startup
431  command:
432 </para>
433
434 <para>
435  <screen>
436  
437  # /usr/sbin/privoxy /etc/privoxy/config
438  
439  </screen>
440 </para>
441
442 <para>
443  See <link linkend="cmdoptions">below</link> for other command line options.
444 </para>
445
446 <para>
447  An init script is provided for SuSE and Red Hat.
448 </para>
449
450 <para>
451  For for SuSE: <command>rcprivoxy start</command>
452 </para>
453
454 <para>
455  For Red Hat and Debian: <command>/etc/rc.d/init.d/privoxy start</command>
456 </para>
457
458
459 <para>
460  If no configuration file is specified on the command line,
461  <application>Privoxy</application> will look for a file named
462  <filename>config</filename> in the current directory. Except on Win32 where
463  it will try <filename>config.txt</filename>. If no file is specified on the
464  command line and no default configuration file can be found, 
465  <application>Privoxy</application> will fail to start.
466 </para>
467
468
469 <para>
470  The included default configuration files should give a reasonable starting
471  point. Most of the per site configuration is done in the
472  <quote>actions</quote> files. These are where various cookie actions are
473  defined, ad and banner blocking, and other aspects of
474  <application>Privoxy</application> configuration. There are several such
475  files included, with varying levels of aggressiveness. 
476 </para>
477
478 <para>
479  You will probably want to keep an eye out for sites that require persistent
480  cookies, and add these to <filename>default.action</filename> as needed. By
481  default, most of these will be accepted only during the current browser
482  session (aka <quote>session cookies</quote>), until you add them to the
483  configuration. If you want the browser to handle this instead, you will need
484  to edit <filename>default.action</filename> and disable this feature. If you
485  use more than one browser, it would make more sense to let
486  <application>Privoxy</application> handle this. In which case, the
487  browser(s) should be set to accept all cookies.
488 </para>
489
490 <para>
491  Another feature where you will probably want to define exceptions for trusted
492  sites is the popup-killing (through the <literal>+popup</literal> and
493  <literal>+filter{popups}</literal> actions), because your favorite shopping,
494  banking, or leisure site may need popups. 
495 </para>
496
497 <para>
498  <application>Privoxy</application> is HTTP/1.1 compliant,  but not all of
499  the optional 1.1 features are as yet supported. In the unlikely event that
500  you experience inexplicable problems with browsers that use HTTP/1.1 per default
501  (like <application>Mozilla</application> or recent versions of I.E.), you might
502  try to force HTTP/1.0 compatibility. For Mozilla, look under <literal>Edit -&gt;
503  Preferences -&gt; Debug -&gt; Networking</literal>.
504  Alternatively, set the <quote>+downgrade</quote> config option in
505  <filename>default.action</filename> which will downgrade your browser's HTTP
506  requests from HTTP/1.1 to HTTP/1.0 before processing them.
507 </para>
508
509 <para>
510  After running <application>Privoxy</application> for a while, you can 
511  start to fine tune the configuration to suit your personal, or site, 
512  preferences and requirements. There are many, many aspects that can 
513  be customized. <quote>Actions</quote> (as specified in <filename>default.action</filename>) 
514  can be adjusted by pointing your browser to 
515  <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
516  (shortcut: <ulink url="http://p.p/">http://p.p/</ulink>), 
517  and then follow the link to <quote>edit the actions list</quote>. 
518  (This is an internal page and does not require Internet access.)
519 </para>
520
521 <para>
522  In fact, various aspects of <application>Privoxy</application>
523  configuration can be viewed from this page, including 
524  current configuration parameters, source code version numbers, 
525  the browser's request headers, and <quote>actions</quote> that apply 
526  to a given URL. In addition to the <filename>default.action</filename> file 
527  editor mentioned above, <application>Privoxy</application> can also 
528  be turned <quote>on</quote> and <quote>off</quote> (toggled) from this page.
529 </para>
530
531 <para>
532  If you encounter problems, try loading the page without
533  <application>Privoxy</application>. If that helps, enter the URL where
534  you have the problems into <ulink url="http://p.p/show-url-info">the browser
535  based rule tracing utility</ulink>. See which rules apply and why, and
536  then try turning them off for that site one after the other, until the problem
537  is gone. When you have found the culprit, you might want to turn the rest on
538  again.
539 </para>
540
541 <para>
542  If the above paragraph sounds gibberish to you, you might want to <ulink
543  url="configuration.html#ACTIONSFILE">read more about the actions concept</ulink>
544  or even dive deep into the <ulink url="appendix.html#ACTIONSANAT">Appendix
545  on actions</ulink>.
546 </para>
547
548 <para>
549  If you can't get rid of the problem at all, think you've found a bug in
550  Privoxy, want to propose a new feature or smarter rules, please see the 
551  chapter "Contacting the Developers, .." below.
552 </para>
553
554 </sect2>
555
556
557 <!--   ~~~~~       New section      ~~~~~     -->
558 <sect2 id="cmdoptions">
559 <title>Command Line Options</title>
560 <para>
561  <application>Privoxy</application> may be invoked with the following
562  command-line options:
563 </para>
564
565 <para>
566  <itemizedlist>
567
568  <listitem>
569   <para>
570     <emphasis>--version</emphasis>
571   </para>
572   <para>
573      Print version info and exit. Unix only.
574   </para>
575  </listitem> 
576  <listitem>
577   <para>
578     <emphasis>--help</emphasis>
579   </para>
580   <para>
581    Print short usage info and exit. Unix only.
582   </para>
583  </listitem> 
584  <listitem>
585   <para>
586    <emphasis>--no-daemon</emphasis>
587   </para>
588   <para>
589    Don't become a daemon, i.e. don't fork and become process group
590    leader, and don't detach from controlling tty. Unix only.
591   </para>
592  </listitem> 
593  <listitem>
594   <para>
595    <emphasis>--pidfile FILE</emphasis>
596   
597   </para>
598   <para>
599    On startup, write the process ID to <emphasis>FILE</emphasis>. Delete the
600    <emphasis>FILE</emphasis> on exit. Failure to create or delete the
601    <emphasis>FILE</emphasis> is non-fatal. If no <emphasis>FILE</emphasis>
602    option is given, no PID file will be used. Unix only.
603   </para>
604  </listitem> 
605  <listitem>
606   <para>
607    <emphasis>--user USER[.GROUP]</emphasis>
608   
609   </para>
610   <para>
611    After (optionally) writing the PID file, assume the user  ID  of
612    <emphasis>USER</emphasis>, and if included the GID of GROUP.  Exit if the
613    privileges are not sufficient to do so. Unix only.
614   </para>
615  </listitem> 
616  <listitem>
617   <para>
618     <emphasis>configfile</emphasis>
619   </para>
620   <para>
621     If no <emphasis>configfile</emphasis> is included on the command line, 
622     <application>Privoxy</application> will look for a file named 
623     <quote>config</quote> in the current directory (except on Win32 
624     where it will look for <quote>config.txt</quote> instead). Specify 
625     full path to avoid confusion. If no config file is found, 
626     <application>Privoxy</application> will fail to start.
627   </para>
628  </listitem> 
629
630  </itemizedlist>
631 </para>
632
633 </sect2>
634
635 </sect1>
636
637 <!--  ~  End section  ~  -->
638
639
640 <!--   ~~~~~       New section      ~~~~~     -->
641 <sect1 id="configuration"><title><application>Privoxy</application> Configuration</title>
642  <para>
643   All <application>Privoxy</application> configuration is stored  
644   in text files. These files can be edited with a text editor.
645   Many important aspects of <application>Privoxy</application> can 
646   also be controlled easily with a web browser.
647
648  </para>
649
650
651 <!--   ~~~~~       New section      ~~~~~     -->
652
653 <sect2>
654 <title>Controlling <application>Privoxy</application> with Your Web Browser</title>
655 <para>
656  <application>Privoxy</application>'s user interface can be reached through the special 
657  URL <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
658  (shortcut: <ulink url="http://p.p/">http://p.p/</ulink>), 
659  which is a built-in page and works without Internet access.
660  You will see the following section:
661
662 </para>
663
664 <para>
665  <screen>
666
667 Please choose from the following options:
668
669     * Privoxy main page
670     * Show information about the current configuration
671     * Show the source code version numbers
672     * Show the request headers.
673     * Show which actions apply to a URL and why
674     * Toggle Privoxy on or off
675     * Edit the actions list
676
677  </screen>
678 </para>
679
680 <para>
681  This should be self-explanatory. Note the last item is an editor for the
682  <quote>actions list</quote>, which is where much of the ad, banner, cookie,
683  and URL blocking magic is configured as well as other advanced features of
684  <application>Privoxy</application>. This is an easy way to adjust various
685  aspects of <application>Privoxy</application> configuration. The actions
686  file, and other configuration files, are explained in detail below. 
687 </para>
688
689 <para>
690  <quote>Toggle Privoxy On or Off</quote> is handy for sites that might 
691  have problems with your current actions and filters. You can in fact use
692  it as a test to see whether it is <application>Privoxy</application> 
693  causing the problem or not. <application>Privoxy</application> continues 
694  to run as a proxy in this case, but all filtering is disabled. There
695  is even a toggle <link linkend="bookmarklets">Bookmarklet</link> offered, so
696  that you can toggle <application>Privoxy</application> with one click from
697  your browser.
698 </para>
699
700 </sect2>
701
702 <!--  ~  End section  ~  -->
703
704
705
706
707 <!--   ~~~~~       New section      ~~~~~     -->
708
709 <sect2>
710 <title>Configuration Files Overview</title>
711 <para>
712  For Unix, *BSD and Linux, all configuration files are located in
713  <filename>/etc/privoxy/</filename> by default. For MS Windows, OS/2, and
714  AmigaOS these are all in the same directory as the 
715  <application>Privoxy</application> executable. <![%p-not-stable;[ The name
716  and number of configuration files has changed from previous versions, and is
717  subject to change as development progresses.]]>
718 </para>
719
720 <para>
721  The installed defaults provide a reasonable starting point, though possibly
722  aggressive by some standards. For the time being, there are only three
723  default configuration files (this may change in time):
724 </para>
725
726 <para>
727  <itemizedlist>
728
729   <listitem>
730    <para>
731      The main configuration file is named <filename>config</filename>
732      on Linux, Unix, BSD, OS/2, and AmigaOS and <filename>config.txt</filename>
733      on Windows.
734    </para>
735   </listitem> 
736
737   <listitem>
738    <para>
739     <filename>default.action</filename> (the actions file) is used to define
740     which of a set of various <quote>actions</quote> relating to images, banners, 
741     pop-ups, access restrictions, banners and cookies are to be applied, and where.
742     There is a web based editor for this file that can be accessed at <ulink
743     url="http://config.privoxy.org/edit-actions/">http://config.privoxy.org/edit-actions/</ulink>
744     (Shortcut: <ulink url="http://p.p/edit-actions/">http://p.p/edit-actions/</ulink>).
745     (Other actions files are included as well with differing levels of filtering 
746     and blocking, e.g. <filename>basic.action</filename>.)
747    </para>
748   </listitem> 
749
750   <listitem>
751    <para>
752     <filename>default.filter</filename> (the filter file) can be used to re-write the raw
753     page content, including viewable text as well as embedded HTML and JavaScript,
754     and whatever else lurks on any given web page. The filtering jobs are only
755     pre-defined here; whether to apply them or not is up to the actions file.
756    </para>
757   </listitem> 
758
759  </itemizedlist>
760 </para>
761
762 <para>
763  All files use the <quote><literal>#</literal></quote> character to denote a
764  comment (the rest of the line will be ignored) and understand line continuation
765  through placing a backslash ("<literal>\</literal>") as the very last character
766  in a line. If the <literal>#</literal> is preceded by a backslash, it looses
767  its special function. Placing a <literal>#</literal> in front of an otherwise
768  valid configuration line to prevent it from being interpreted is called "commenting
769  out" that line.
770 </para>
771
772 <para>
773  <filename>default.action</filename> and <filename>default.filter</filename> 
774  can use Perl style <link linkend="regex">regular expressions</link> for
775  maximum flexibility. 
776 </para>
777
778 <para>
779  After making any changes, there is no need to restart
780  <application>Privoxy</application> in order for the changes to take
781  effect. <application>Privoxy</application> detects such changes 
782  automatically. Note, however, that it may take one or two additional
783  requests for the change to take effect. When changing the listening address
784  of <application>Privoxy</application>, these <quote>wake up</quote> requests
785  must obviously be sent to the <emphasis>old</emphasis> listening address.
786 </para>
787
788 <![%p-not-stable;[
789 <para>
790  While under development, the configuration content is subject to change. 
791  The below documentation may not be accurate by the time you read this. 
792  Also, what constitutes a <quote>default</quote> setting, may change, so 
793  please check all your configuration files on important issues.
794 </para>
795 ]]>
796 </sect2>
797
798
799 <!--   ~~~~~       New section      ~~~~~     -->
800
801 <sect2>
802 <title>The Main Configuration File</title>
803 <para>
804  Again, the main configuration file is named <filename>config</filename> on
805  Linux/Unix/BSD and OS/2, and <filename>config.txt</filename> on Windows.
806  Configuration lines consist of an initial keyword followed by a list of
807  values, all separated by whitespace (any number of spaces or tabs). For
808  example:
809 </para>
810
811 <para>
812  <literal>
813   <msgtext> 
814    <literallayout>
815   <emphasis>confdir /etc/privoxy</emphasis>
816    </literallayout>
817   </msgtext>
818  </literal> 
819 </para>
820
821 <para>
822  Assigns the value <literal>/etc/privoxy</literal> to the option
823  <literal>confdir</literal> and thus indicates that the configuration
824  directory is named <quote>/etc/privoxy/</quote>.
825 </para>
826
827 <para>
828  All options in the config file except for <literal>confdir</literal> and
829  <literal>logdir</literal> are optional. Watch out in the below description
830  for what happens if you leave them unset.
831 </para>
832
833 <para>
834  The main config file controls all aspects of <application>Privoxy</application>'s
835  operation that are not location dependent (i.e. they apply universally, no matter
836  where you may be surfing).
837 </para>
838
839
840 <!--   ~~~~~       New section      ~~~~~     -->
841
842 <sect3>
843 <title>Configuration and Log File Locations</title>
844
845 <para>
846  <application>Privoxy</application> can (and normally does) use a number of
847  other files for additional configuration and logging.
848  This section of the configuration file tells <application>Privoxy</application>
849  where to find those other files. 
850 </para>
851
852
853 <sect4><title>confdir</title>
854
855 <variablelist>
856  <varlistentry>
857   <term>Specifies:</term>
858   <listitem>
859    <para>The directory where the other configuration files are located</para>
860   </listitem>
861  </varlistentry>
862  <varlistentry>
863   <term>Type of value:</term>
864   <listitem>
865    <para>Path name</para>
866   </listitem>
867  </varlistentry>
868  <varlistentry>
869   <term>Default value:</term>
870   <listitem>
871    <para>/etc/privoxy (Unix) <emphasis>or</emphasis> <application>Privoxy</application> installation dir (Windows) </para>
872   </listitem>
873  </varlistentry>
874  <varlistentry>
875   <term>Effect if unset:</term>
876   <listitem>
877    <para><emphasis>Mandatory</emphasis></para>
878   </listitem>
879  </varlistentry>
880  <varlistentry>
881   <term>Notes:</term>
882   <listitem>
883    <para>
884     No trailing <quote><literal>/</literal></quote>, please
885    </para>
886    <para>
887     When development goes modular and multi-user, the blocker, filter, and
888     per-user config will be stored in subdirectories of <quote>confdir</quote>.
889     For now, the configuration directory structure is flat, except for 
890     <filename>confdir/templates</filename>, where the HTML templates for CGI 
891     output reside (e.g. <application>Privoxy's</application> 404 error page). 
892    </para>
893   </listitem>
894  </varlistentry>
895 </variablelist>
896 </sect4>
897
898
899 <sect4><title>logdir</title>
900
901 <variablelist>
902  <varlistentry>
903   <term>Specifies:</term>
904   <listitem>
905    <para>
906     The directory where all logging takes place (i.e. where <filename>logfile</filename> and 
907     <filename>jarfile</filename> are located) 
908    </para>
909   </listitem>
910  </varlistentry>
911  <varlistentry>
912   <term>Type of value:</term>
913   <listitem>
914    <para>Path name</para>
915   </listitem>
916  </varlistentry>
917  <varlistentry>
918   <term>Default value:</term>
919   <listitem>
920    <para>/var/log/privoxy (Unix) <emphasis>or</emphasis> <application>Privoxy</application> installation dir (Windows) </para>
921   </listitem>
922  </varlistentry>
923  <varlistentry>
924   <term>Effect if unset:</term>
925   <listitem>
926    <para><emphasis>Mandatory</emphasis></para>
927   </listitem>
928  </varlistentry>
929  <varlistentry>
930   <term>Notes:</term>
931   <listitem>
932    <para>
933     No trailing <quote><literal>/</literal></quote>, please
934    </para>
935   </listitem>
936  </varlistentry>
937 </variablelist>
938 </sect4>
939
940 <sect4><title>actionsfile</title>
941
942 <variablelist>
943  <varlistentry>
944   <term>Specifies:</term>
945   <listitem>
946    <para>
947     The actions file to use
948    </para>
949   </listitem>
950  </varlistentry>
951  <varlistentry>
952   <term>Type of value:</term>
953   <listitem>
954    <para>File name, relative to <literal>confdir</literal></para>
955   </listitem>
956  </varlistentry>
957  <varlistentry>
958   <term>Default value:</term>
959   <listitem>
960    <para>default.action (Unix) <emphasis>or</emphasis> default.action.txt (Windows)</para>
961   </listitem>
962  </varlistentry>
963  <varlistentry>
964   <term>Effect if unset:</term>
965   <listitem>
966    <para>
967     No action is taken at all. Simple neutral proxying. 
968    </para>
969   </listitem>
970  </varlistentry>
971  <varlistentry>
972   <term>Notes:</term>
973   <listitem>
974    <para>
975     There is no point in using <application>Privoxy</application> without
976     an actions file. There are three different actions files included in the
977     distribution, with varying degrees of aggressiveness: 
978     <filename>default.action</filename>, <filename>intermediate.action</filename> and
979     <filename>advanced.action</filename>.
980    </para>
981   </listitem>
982  </varlistentry>
983 </variablelist>
984 </sect4>
985
986 <sect4><title>filterfile</title>
987
988 <variablelist>
989  <varlistentry>
990   <term>Specifies:</term>
991   <listitem>
992    <para>
993     The filter file to use
994    </para>
995   </listitem>
996  </varlistentry>
997  <varlistentry>
998   <term>Type of value:</term>
999   <listitem>
1000    <para>File name, relative to <literal>confdir</literal></para>
1001   </listitem>
1002  </varlistentry>
1003  <varlistentry>
1004   <term>Default value:</term>
1005   <listitem>
1006    <para>default.filter (Unix) <emphasis>or</emphasis> default.filter.txt (Windows)</para>
1007   </listitem>
1008  </varlistentry>
1009  <varlistentry>
1010   <term>Effect if unset:</term>
1011   <listitem>
1012    <para>
1013     No textual content filtering takes place, i.e. all
1014     <literal>+filter{<replaceable class="parameter">name</replaceable>}</literal>
1015     actions in the actions file are turned off
1016    </para>
1017   </listitem>
1018  </varlistentry>
1019  <varlistentry>
1020   <term>Notes:</term>
1021   <listitem>
1022    <para>
1023     The <quote>default.filter</quote> file contains content modification rules 
1024     that use <quote>regular expressions</quote>. These rules permit powerful
1025     changes on the content of Web pages, e.g., you could disable your favorite
1026     JavaScript annoyances, re-write the actual displayed text, or just have some
1027     fun replacing <quote>Microsoft</quote> with <quote>MicroSuck</quote> wherever
1028     it appears on a Web page.
1029    </para>
1030   </listitem>
1031  </varlistentry>
1032 </variablelist>
1033 </sect4>
1034
1035 <sect4><title>logfile</title>
1036
1037 <variablelist>
1038  <varlistentry>
1039   <term>Specifies:</term>
1040   <listitem>
1041    <para>
1042     The log file to use
1043    </para>
1044   </listitem>
1045  </varlistentry>
1046  <varlistentry>
1047   <term>Type of value:</term>
1048   <listitem>
1049    <para>File name, relative to <literal>logdir</literal></para>
1050   </listitem>
1051  </varlistentry>
1052  <varlistentry>
1053   <term>Default value:</term>
1054   <listitem>
1055    <para>logfile (Unix) <emphasis>or</emphasis> privoxy.log (Windows)</para>
1056   </listitem>
1057  </varlistentry>
1058  <varlistentry>
1059   <term>Effect if unset:</term>
1060   <listitem>
1061    <para>
1062     No log file is used, all log messages go to the console (<literal>stderr</literal>).
1063    </para>
1064   </listitem>
1065  </varlistentry>
1066  <varlistentry>
1067   <term>Notes:</term>
1068   <listitem>
1069    <para>
1070     The windows version will additionally log to the console.
1071    </para>
1072    <para>
1073     The logfile is where all logging and error messages are written. The level
1074     of detail and number of messages are set with the <literal>debug</literal>
1075     option (see below). The logfile can be useful for tracking down a problem with
1076     <application>Privoxy</application> (e.g., it's not blocking an ad you
1077     think it should block) but in most cases you probably will never look at it.
1078    </para>
1079    <para>
1080     Your logfile will grow indefinitely, and you will probably want to
1081     periodically remove it.  On Unix systems, you can do this with a cron job
1082     (see <quote>man cron</quote>). For Red Hat, a <command>logrotate</command> 
1083     script has been included.
1084    </para> 
1085    <para>
1086     On SuSE Linux systems, you can place a line like <quote>/var/log/privoxy.*
1087     +1024k 644 nobody.nogroup</quote> in <filename>/etc/logfiles</filename>, with
1088     the effect that cron.daily will automatically archive, gzip, and empty the
1089     log, when it exceeds 1M size.
1090    </para>
1091   </listitem>
1092  </varlistentry>
1093 </variablelist>
1094 </sect4>
1095
1096 <sect4><title>jarfile</title>
1097
1098 <variablelist>
1099  <varlistentry>
1100   <term>Specifies:</term>
1101   <listitem>
1102    <para>
1103     The file to store intercepted cookies in
1104    </para>
1105   </listitem>
1106  </varlistentry>
1107  <varlistentry>
1108   <term>Type of value:</term>
1109   <listitem>
1110    <para>File name, relative to <literal>logdir</literal></para>
1111   </listitem>
1112  </varlistentry>
1113  <varlistentry>
1114   <term>Default value:</term>
1115   <listitem>
1116    <para>jarfile (Unix) <emphasis>or</emphasis> privoxy.jar (Windows)</para>
1117   </listitem>
1118  </varlistentry>
1119  <varlistentry>
1120   <term>Effect if unset:</term>
1121   <listitem>
1122    <para>
1123     Intercepted cookies are not stored at all.
1124    </para>
1125   </listitem>
1126  </varlistentry>
1127  <varlistentry>
1128   <term>Notes:</term>
1129   <listitem>
1130    <para>
1131     The jarfile may grow to ridiculous sizes over time.
1132    </para>
1133   </listitem>
1134  </varlistentry>
1135 </variablelist>
1136 </sect4>
1137
1138 <sect4><title>trustfile</title>
1139
1140 <variablelist>
1141  <varlistentry>
1142   <term>Specifies:</term>
1143   <listitem>
1144    <para>
1145     The trust file to use
1146    </para>
1147   </listitem>
1148  </varlistentry>
1149  <varlistentry>
1150   <term>Type of value:</term>
1151   <listitem>
1152    <para>File name, relative to <literal>confdir</literal></para>
1153   </listitem>
1154  </varlistentry>
1155  <varlistentry>
1156   <term>Default value:</term>
1157   <listitem>
1158    <para><emphasis>Unset (commented out)</emphasis>. When activated: trust (Unix) <emphasis>or</emphasis> trust.txt (Windows)</para>
1159   </listitem>
1160  </varlistentry>
1161  <varlistentry>
1162   <term>Effect if unset:</term>
1163   <listitem>
1164    <para>
1165     The whole trust mechanism is turned off.
1166    </para>
1167   </listitem>
1168  </varlistentry>
1169  <varlistentry>
1170   <term>Notes:</term>
1171   <listitem>
1172    <para>
1173     The trust mechanism is an experimental feature for building white-lists and should
1174     be used with care. It is <emphasis>NOT</emphasis> recommended for the casual user.
1175    </para>
1176    <para>
1177     If you specify a trust file, <application>Privoxy</application> will only allow
1178     access to sites that are named in the trustfile. 
1179     You can also mark sites as trusted referrers (with <literal>+</literal>), with
1180     the effect that access to untrusted sites will be granted, if a link from a
1181     trusted referrer was used.
1182     The link target will then be added to the <quote>trustfile</quote>.
1183     Possible applications include limiting Internet access for children.
1184    </para>
1185    <para>
1186     If you use <literal>+</literal> operator in the trust file, it may grow considerably over time.
1187    </para>
1188   </listitem>
1189  </varlistentry>
1190 </variablelist>
1191 </sect4>
1192
1193 </sect3>
1194
1195 <!--  ~  End section  ~  -->
1196
1197
1198
1199 <!--   ~~~~~       New section      ~~~~~     -->
1200
1201 <sect3>
1202 <title>Local Set-up Documentation</title>
1203
1204   <para>
1205     If you intend to operate <application>Privoxy</application> for more users
1206     that just yourself, it might be a good idea to let them know how to reach
1207     you, what you block and why you do that, your policies etc.
1208    </para>
1209
1210 <sect4><title>trust-info-url</title>
1211
1212 <variablelist>
1213  <varlistentry>
1214   <term>Specifies:</term>
1215   <listitem>
1216    <para>
1217     A URL to be displayed in the error page that users will see if access to an untrusted page is denied.    
1218    </para>
1219   </listitem>
1220  </varlistentry>
1221  <varlistentry>
1222   <term>Type of value:</term>
1223   <listitem>
1224    <para>URL</para>
1225   </listitem>
1226  </varlistentry>
1227  <varlistentry>
1228   <term>Default value:</term>
1229   <listitem>
1230    <para>Two example URL are provided</para>
1231   </listitem>
1232  </varlistentry>
1233  <varlistentry>
1234   <term>Effect if unset:</term>
1235   <listitem>
1236    <para>
1237     No links are displayed on the "untrusted" error page.
1238    </para>
1239   </listitem>
1240  </varlistentry>
1241  <varlistentry>
1242   <term>Notes:</term>
1243   <listitem>
1244    <para>
1245     The value of this option only matters if the experimental trust mechanism has been
1246     activated. (See <literal>trustfile</literal> above.)
1247    </para>
1248    <para>
1249     If you use the trust mechanism, it is a good idea to write up some on-line
1250     documentation about your trust policy and to specify the URL(s) here.
1251     Use multiple times for multiple URLs.
1252    </para>
1253    <para>
1254     The URL(s) should be added to the trustfile as well, so users don't end up
1255     locked out from the information on why they were locked out in the first place!
1256    </para>
1257   </listitem>
1258  </varlistentry>
1259 </variablelist>
1260 </sect4>
1261
1262 <sect4><title>admin-address</title>
1263
1264 <variablelist>
1265  <varlistentry>
1266   <term>Specifies:</term>
1267   <listitem>
1268    <para>
1269     An email address to reach the proxy administrator.
1270    </para>
1271   </listitem>
1272  </varlistentry>
1273  <varlistentry>
1274   <term>Type of value:</term>
1275   <listitem>
1276    <para>Email address</para>
1277   </listitem>
1278  </varlistentry>
1279  <varlistentry>
1280   <term>Default value:</term>
1281   <listitem>
1282    <para><emphasis>Unset</emphasis></para>
1283   </listitem>
1284  </varlistentry>
1285  <varlistentry>
1286   <term>Effect if unset:</term>
1287   <listitem>
1288    <para>
1289     No email address is displayed on error pages and the CGI user interface.
1290    </para>
1291   </listitem>
1292  </varlistentry>
1293  <varlistentry>
1294   <term>Notes:</term>
1295   <listitem>
1296     <para>
1297     If both <literal>admin-address</literal> and <literal>proxy-info-url</literal>
1298     are unset, the whole "Local Privoxy Support" box on all generated pages will
1299     not be shown.
1300    </para>  
1301   </listitem>
1302  </varlistentry>
1303 </variablelist>
1304 </sect4>
1305
1306 <sect4><title>proxy-info-url</title>
1307
1308 <variablelist>
1309  <varlistentry>
1310   <term>Specifies:</term>
1311   <listitem>
1312    <para>
1313     A URL to documentation about the local <application>Privoxy</application> setup,
1314     configuration or policies.
1315    </para>
1316   </listitem>
1317  </varlistentry>
1318  <varlistentry>
1319   <term>Type of value:</term>
1320   <listitem>
1321    <para>URL</para>
1322   </listitem>
1323  </varlistentry>
1324  <varlistentry>
1325   <term>Default value:</term>
1326   <listitem>
1327    <para><emphasis>Unset</emphasis></para>
1328   </listitem>
1329  </varlistentry>
1330  <varlistentry>
1331   <term>Effect if unset:</term>
1332   <listitem>
1333    <para>
1334     No link to local documentation is displayed on error pages and the CGI user interface.
1335    </para>
1336   </listitem>
1337  </varlistentry>
1338  <varlistentry>
1339   <term>Notes:</term>
1340   <listitem>
1341    <para>
1342     If both <literal>admin-address</literal> and <literal>proxy-info-url</literal>
1343     are unset, the whole "Local Privoxy Support" box on all generated pages will
1344     not be shown.
1345    </para>  
1346    <para>
1347     This URL shouldn't be blocked ;-)
1348    </para> 
1349   </listitem>
1350  </varlistentry>
1351 </variablelist>
1352 </sect4>
1353
1354 </sect3>
1355 <!--  ~  End section  ~  -->
1356
1357 <!--   ~~~~~       New section      ~~~~~     -->
1358
1359 <sect3>
1360 <title>Debugging</title>
1361
1362  <para>
1363   These options are mainly useful when tracing a problem.
1364   Note that you might also want to invoke
1365   <application>Privoxy</application> with the <literal>--no-daemon</literal>
1366   command line option when debugging.
1367  </para>
1368
1369 <sect4><title>debug</title>
1370
1371 <variablelist>
1372  <varlistentry>
1373   <term>Specifies:</term>
1374   <listitem>
1375    <para>
1376     Key values that determine what information gets logged.
1377    </para>
1378   </listitem>
1379  </varlistentry>
1380  <varlistentry>
1381   <term>Type of value:</term>
1382   <listitem>
1383    <para>Integer values</para>
1384   </listitem>
1385  </varlistentry>
1386  <varlistentry>
1387   <term>Default value:</term>
1388   <listitem>
1389    <para>12289 (i.e.: URLs plus informational and warning messages)</para>
1390   </listitem>
1391  </varlistentry>
1392  <varlistentry>
1393   <term>Effect if unset:</term>
1394   <listitem>
1395    <para>
1396     Nothing gets logged.
1397    </para>
1398   </listitem>
1399  </varlistentry>
1400  <varlistentry>
1401   <term>Notes:</term>
1402   <listitem>
1403    <para>
1404     The available debug levels are:
1405    </para>
1406    <para>
1407     <programlisting>
1408   debug         1 # show each GET/POST/CONNECT request
1409   debug         2 # show each connection status
1410   debug         4 # show I/O status
1411   debug         8 # show header parsing
1412   debug        16 # log all data into the logfile
1413   debug        32 # debug force feature
1414   debug        64 # debug regular expression filter 
1415   debug       128 # debug fast redirects
1416   debug       256 # debug GIF de-animation
1417   debug       512 # Common Log Format
1418   debug      1024 # debug kill pop-ups
1419   debug      4096 # Startup banner and warnings.
1420   debug      8192 # Non-fatal errors
1421     </programlisting>
1422    </para>
1423    <para>
1424     To select multiple debug levels, you can either add them or use
1425     multiple <literal>debug</literal> lines.
1426    </para>
1427    <para>
1428     A debug level of 1 is informative because it will show you each request
1429     as it happens. <emphasis>1, 4096 and 8192 are highly recommended</emphasis>
1430     so that you will notice when things go wrong. The other levels are probably
1431     only of interest if you are hunting down a specific problem. They can produce
1432     a hell of an output (especially 16).
1433     <!-- LOL -->
1434    </para>
1435    <para>
1436     The reporting of <emphasis>fatal</emphasis> errors (i.e. ones which crash 
1437     <application>Privoxy</application>) is always on and cannot be disabled.
1438    </para>
1439    <para>
1440     If you want to use CLF (Common Log Format), you should set <quote>debug
1441     512</quote> <emphasis>ONLY</emphasis> and not enable anything else.
1442    </para>
1443   </listitem>
1444  </varlistentry>
1445 </variablelist>
1446 </sect4>
1447
1448 <sect4><title>single-threaded</title>
1449
1450 <variablelist>
1451  <varlistentry>
1452   <term>Specifies:</term>
1453   <listitem>
1454    <para>
1455     Whether to run only one server thread
1456    </para>
1457   </listitem>
1458  </varlistentry>
1459  <varlistentry>
1460   <term>Type of value:</term>
1461   <listitem>
1462    <para><emphasis>None</emphasis></para>
1463   </listitem>
1464  </varlistentry>
1465  <varlistentry>
1466   <term>Default value:</term>
1467   <listitem>
1468    <para><emphasis>Unset</emphasis></para>
1469   </listitem>
1470  </varlistentry>
1471  <varlistentry>
1472   <term>Effect if unset:</term>
1473   <listitem>
1474    <para>
1475     Multi-threaded (or, where unavailable: forked) operation, i.e. the ability to
1476     serve multiple requests simultaneously.
1477    </para>
1478   </listitem>
1479  </varlistentry>
1480  <varlistentry>
1481   <term>Notes:</term>
1482   <listitem>
1483    <para>
1484     This option is only there for debug purposes and you should never
1485     need to use it. <emphasis>It will drastically reduce performance.</emphasis>
1486    </para>
1487   </listitem>
1488  </varlistentry>
1489 </variablelist>
1490 </sect4>
1491
1492 </sect3>
1493
1494 <!--   ~~~~~       New section      ~~~~~     -->
1495
1496 <sect3>
1497 <title>Access Control and Security</title>
1498
1499  <para>
1500   This section of the config file controls the security-relevant aspects
1501   of <application>Privoxy</application>'s configuration.
1502  </para>
1503
1504 <sect4><title>listen-address</title>
1505
1506 <variablelist>
1507  <varlistentry>
1508   <term>Specifies:</term>
1509   <listitem>
1510    <para>
1511     The IP address and TCP port on which <application>Privoxy</application> will
1512     listen for client requests.
1513    </para>
1514   </listitem>
1515  </varlistentry>
1516  <varlistentry>
1517   <term>Type of value:</term>
1518   <listitem>
1519    <para>[<replaceable class="parameter">IP-Address</replaceable>]:<replaceable class="parameter">Port</replaceable></para>
1520   </listitem>
1521  </varlistentry>
1522  <varlistentry>
1523   <term>Default value:</term>
1524   <listitem>
1525    <para>localhost:8118</para>
1526   </listitem>
1527  </varlistentry>
1528  <varlistentry>
1529   <term>Effect if unset:</term>
1530   <listitem>
1531    <para>
1532     Bind to localhost (127.0.0.1), port 8118. This is suitable and recommended for
1533     home users who run <application>Privoxy</application> on the same machine as
1534     their browser.
1535    </para>
1536   </listitem>
1537  </varlistentry>
1538  <varlistentry>
1539   <term>Notes:</term>
1540   <listitem>
1541    <para>
1542     You will need to configure your browser(s) to this proxy address and port.
1543    </para>
1544    <para>
1545     If you already have another service running on port 8118, or if you want to
1546     serve requests from other machines (e.g. on your local network) as well, you
1547     will need to override the default.
1548    </para>
1549    <para>
1550     If you leave out the IP address, <application>Privoxy</application> will
1551     bind to all interfaces (addresses) on your machine and may become reachable
1552     from the Internet. In that case, consider using access control lists (acl's)
1553     (see <quote>ACLs</quote> below), or a firewall.
1554    </para>
1555   </listitem>
1556  </varlistentry>
1557  <varlistentry>
1558   <term>Example:</term>
1559   <listitem>
1560    <para>
1561      Suppose you are running <application>Privoxy</application> on
1562      a machine which has the address 192.168.0.1 on your local private network
1563      (192.168.0.0) and has another outside connection with a different address.
1564      You want it to serve requests from inside only:
1565    </para>
1566    <para>
1567     <programlisting>
1568   listen-address  192.168.0.1:8118
1569     </programlisting>
1570    </para>
1571   </listitem>
1572  </varlistentry>
1573 </variablelist>
1574 </sect4>
1575
1576 <sect4><title>toggle</title>
1577
1578 <variablelist>
1579  <varlistentry>
1580   <term>Specifies:</term>
1581   <listitem>
1582    <para>
1583     Initial state of "toggle" status
1584    </para>
1585   </listitem>
1586  </varlistentry>
1587  <varlistentry>
1588   <term>Type of value:</term>
1589   <listitem>
1590    <para>1 or 0</para>
1591   </listitem>
1592  </varlistentry>
1593  <varlistentry>
1594   <term>Default value:</term>
1595   <listitem>
1596    <para>1</para>
1597   </listitem>
1598  </varlistentry>
1599  <varlistentry>
1600   <term>Effect if unset:</term>
1601   <listitem>
1602    <para>
1603     Act as if toggled on
1604    </para>
1605   </listitem>
1606  </varlistentry>
1607  <varlistentry>
1608   <term>Notes:</term>
1609   <listitem>
1610    <para>
1611     If set to 0, <application>Privoxy</application> will start in
1612     <quote>toggled off</quote> mode, i.e. behave like a normal, content-neutral
1613     proxy. See <literal>enable-remote-toggle</literal>
1614     below. This is not really useful anymore, since toggling is much easier
1615     via <ulink url="http://config.privoxy.org/toggle">the web
1616     interface</ulink> then via editing the <filename>conf</filename> file.
1617    </para>
1618    <para>
1619     The windows version will only display the toggle icon in the system tray
1620     if this option is present.
1621    </para>
1622   </listitem>
1623  </varlistentry>
1624 </variablelist>
1625 </sect4>
1626
1627
1628 <sect4><title>enable-remote-toggle</title>
1629 <variablelist>
1630  <varlistentry>
1631   <term>Specifies:</term>
1632   <listitem>
1633    <para>
1634     Whether or not the <ulink url="http://config.privoxy.org/toggle">web-based toggle
1635     feature</ulink> may be used
1636    </para>
1637   </listitem>
1638  </varlistentry>
1639  <varlistentry>
1640   <term>Type of value:</term>
1641   <listitem>
1642    <para>0 or 1</para>
1643   </listitem>
1644  </varlistentry>
1645  <varlistentry>
1646   <term>Default value:</term>
1647   <listitem>
1648    <para>1</para>
1649   </listitem>
1650  </varlistentry>
1651  <varlistentry>
1652   <term>Effect if unset:</term>
1653   <listitem>
1654    <para>
1655     The web-based toggle feature is disabled.
1656    </para>
1657   </listitem>
1658  </varlistentry>
1659  <varlistentry>
1660   <term>Notes:</term>
1661   <listitem>
1662    <para>
1663     When toggled off, <application>Privoxy</application> acts like a normal,
1664     content-neutral proxy, i.e. it acts as if none of the actions applied to
1665     any URL.
1666    </para>
1667    <para>
1668     For the time being, access to the toggle feature can <emphasis>not</emphasis> be
1669     controlled separately by <quote>ACLs</quote> or HTTP authentication,
1670     so that everybody who can access <application>Privoxy</application> (see
1671     <quote>ACLs</quote> and <literal>listen-address</literal> above) can
1672     toggle it for all users. So this option is <emphasis>not recommended</emphasis>
1673     for multi-user environments with untrusted users.
1674    </para>
1675    <para>
1676     Note that you must have compiled <application>Privoxy</application> with
1677     support for this feature, otherwise this option has no effect. 
1678    </para>
1679   </listitem>
1680  </varlistentry>
1681 </variablelist>
1682 </sect4>
1683
1684
1685 <sect4><title>enable-edit-actions</title>
1686 <variablelist>
1687  <varlistentry>
1688   <term>Specifies:</term>
1689   <listitem>
1690    <para>
1691     Whether or not the <ulink url="http://config.privoxy.org/edit-actions">web-based actions
1692     file editor</ulink> may be used
1693    </para>
1694   </listitem>
1695  </varlistentry>
1696  <varlistentry>
1697   <term>Type of value:</term>
1698   <listitem>
1699    <para>0 or 1</para>
1700   </listitem>
1701  </varlistentry>
1702  <varlistentry>
1703   <term>Default value:</term>
1704   <listitem>
1705    <para>1</para>
1706   </listitem>
1707  </varlistentry>
1708  <varlistentry>
1709   <term>Effect if unset:</term>
1710   <listitem>
1711    <para>
1712     The web-based actions file editor is disabled.
1713    </para>
1714   </listitem>
1715  </varlistentry>
1716  <varlistentry>
1717   <term>Notes:</term>
1718   <listitem>
1719    <para>
1720     For the time being, access to the editor can <emphasis>not</emphasis> be
1721     controlled separately by <quote>ACLs</quote> or HTTP authentication,
1722     so that everybody who can access <application>Privoxy</application> (see
1723     <quote>ACLs</quote> and <literal>listen-address</literal> above) can
1724     modify its configuration for all users. So this option is <emphasis>not
1725     recommended</emphasis> for multi-user environments with untrusted users.
1726    </para>
1727    <para>
1728     Note that you must have compiled <application>Privoxy</application> with
1729     support for this feature, otherwise this option has no effect. 
1730    </para>
1731   </listitem>
1732  </varlistentry>
1733 </variablelist>
1734 </sect4>
1735
1736 <sect4><title>ACLs: permit-access and deny-access</title>
1737 <variablelist>
1738  <varlistentry>
1739   <term>Specifies:</term>
1740   <listitem>
1741    <para>
1742     Who can access what.
1743    </para>
1744   </listitem>
1745  </varlistentry>
1746  <varlistentry>
1747   <term>Type of value:</term>
1748   <listitem>
1749    <para>
1750     <replaceable class="parameter">src_addr</replaceable>[/<replaceable class="parameter">src_masklen</replaceable>]
1751     [<replaceable class="parameter">dst_addr</replaceable>[/<replaceable class="parameter">dst_masklen</replaceable>]]
1752    </para>
1753    <para>
1754     Where <replaceable class="parameter">src_addr</replaceable> and 
1755    <replaceable class="parameter">dst_addr</replaceable> are IP addresses in dotted decimal notation or valid
1756     DNS names, and <replaceable class="parameter">src_masklen</replaceable> and
1757     <replaceable class="parameter">dst_masklen</replaceable> are subnet masks in CIDR notation, i.e. integer
1758     values from 2 to 30 representing the length (in bits) of the network address. The masks and the whole
1759     destination part are optional.
1760    </para>
1761   </listitem>
1762  </varlistentry>
1763  <varlistentry>
1764   <term>Default value:</term>
1765   <listitem>
1766    <para><emphasis>Unset</emphasis></para>
1767   </listitem>
1768  </varlistentry>
1769  <varlistentry>
1770   <term>Effect if unset:</term>
1771   <listitem>
1772    <para>
1773     Don't restrict access further than implied by <literal>listen-address</literal>
1774    </para>
1775   </listitem>
1776  </varlistentry>
1777  <varlistentry>
1778   <term>Notes:</term>
1779   <listitem>
1780    <para>
1781     Access controls are included at the request of ISPs and systems
1782     administrators, and <emphasis>are not usually needed by individual users</emphasis>.
1783     For a typical home user, it will normally suffice to ensure that 
1784     <application>Privoxy</application> only listens on the localhost or internal (home)
1785     network address by means of the <literal>listen-address</literal> option.
1786    </para>
1787    <para>
1788     Please see the warnings in the FAQ that this proxy is not intended to be a substitute
1789     for a firewall or to encourage anyone to defer addressing basic security
1790     weaknesses.
1791    </para>
1792    <para>
1793     Multiple ACL lines are OK.
1794     If any ACLs are specified, then the <application>Privoxy</application>
1795     talks only to IP addresses that match at least one <literal>permit-access</literal> line
1796     and don't match any subsequent <literal>deny-access</literal> line. In other words, the
1797     last match wins, with the default being <literal>deny-access</literal>.
1798    </para>
1799    <para>
1800     If <application>Privoxy</application> is using a forwarder (see <literal>forward</literal> below)
1801     for a particular destination URL, the <replaceable class="parameter">dst_addr</replaceable>
1802     that is examined is the address of the forwarder and <emphasis>NOT</emphasis> the address
1803     of the ultimate target. This is necessary because it may be impossible for the local
1804     <application>Privoxy</application> to determine the IP address of the
1805     ultimate target (that's often what gateways are used for).
1806    </para>
1807    <para>
1808     You should prefer using IP addresses over DNS names, because the address lookups take
1809     time. All DNS names must resolve! You can <emphasis>not</emphasis> use domain patterns
1810     like <quote>*.org</quote> or partial domain names. If a DNS name resolves to multiple
1811     IP addresses, only the first one is used.
1812    </para>
1813    <para>
1814     Denying access to particular sites by ACL may have undesired side effects
1815     if the site in question is hosted on a machine which also hosts other sites.
1816    </para>
1817   </listitem>
1818  </varlistentry>
1819  <varlistentry>
1820   <term>Examples:</term>
1821   <listitem>
1822    <para>
1823     Explicitly define the default behavior if no ACL and
1824     <literal>listen-address</literal> are set: <quote>localhost</quote>
1825     is OK. The absence of a <replaceable class="parameter">dst_addr</replaceable> implies that
1826     <emphasis>all</emphasis> destination addresses are OK:
1827    </para>
1828    <para>
1829     <screen>
1830   permit-access  localhost
1831     </screen>
1832    </para>
1833    <para>
1834     Allow any host on the same class C subnet as www.privoxy.org access to
1835     nothing but www.example.com:
1836    </para>
1837    <para>
1838     <screen>
1839   permit-access  www.privoxy.org/24 www.example.com/32
1840     </screen>
1841    </para>
1842    <para>
1843     Allow access from any host on the 26-bit subnet 192.168.45.64 to anywhere,
1844     with the exception that 192.168.45.73 may not access www.dirty-stuff.example.com:
1845    </para>
1846    <para>
1847     <screen>
1848   permit-access  192.168.45.64/26
1849   deny-access    192.168.45.73    www.dirty-stuff.example.com
1850     </screen>
1851    </para>
1852   </listitem>
1853  </varlistentry>
1854 </variablelist>
1855 </sect4>
1856
1857 <sect4><title>buffer-limit</title>
1858
1859 <variablelist>
1860  <varlistentry>
1861   <term>Specifies:</term>
1862   <listitem>
1863    <para>
1864     Maximum size of the buffer for content filtering.
1865    </para>
1866   </listitem>
1867  </varlistentry>
1868  <varlistentry>
1869   <term>Type of value:</term>
1870   <listitem>
1871    <para>Size in Kbytes</para>
1872   </listitem>
1873  </varlistentry>
1874  <varlistentry>
1875   <term>Default value:</term>
1876   <listitem>
1877    <para>4096</para>
1878   </listitem>
1879  </varlistentry>
1880  <varlistentry>
1881   <term>Effect if unset:</term>
1882   <listitem>
1883    <para>
1884     Use a 4MB (4096 KB) limit.
1885    </para>
1886   </listitem>
1887  </varlistentry>
1888  <varlistentry>
1889   <term>Notes:</term>
1890   <listitem>
1891    <para>
1892     For content filtering, i.e. the <literal>+filter</literal> and
1893     <literal>+deanimate-gif</literal> actions, it is necessary that 
1894     <application>Privoxy</application> buffers the entire document body.
1895     This can be potentially dangerous, since a server could just keep sending
1896     data indefinitely and wait for your RAM to exhaust -- with nasty consequences.
1897     Hence this option.
1898    </para>
1899    <para>
1900     When a document buffer size reaches the <literal>buffer-limit</literal>, it is
1901     flushed to the client unfiltered and no further attempt to
1902     filter the rest of the document is made. Remember that there may be multiple threads
1903     running, which might require up to <literal>buffer-limit</literal> Kbytes
1904     <emphasis>each</emphasis>, unless you have enabled <quote>single-threaded</quote>
1905     above.
1906    </para>
1907   </listitem>
1908  </varlistentry>
1909 </variablelist>
1910 </sect4>
1911
1912 </sect3>
1913
1914 <!--  ~  End section  ~  -->
1915
1916
1917 <!--   ~~~~~       New section      ~~~~~     -->
1918
1919 <sect3 id="forwarding">
1920 <title>Forwarding</title>
1921
1922 <para>
1923  This feature allows routing of HTTP requests through a chain of
1924  multiple proxies.
1925  It can be used to better protect privacy and confidentiality when
1926  accessing specific domains by routing requests to those domains
1927  through an anonymous public proxy (see e.g. <ulink
1928  url="http://www.multiproxy.org/anon_list.htm">http://www.multiproxy.org/anon_list.htm</ulink>)
1929  Or to use a caching proxy to speed up browsing. Or chaining to a parent
1930  proxy may be necessary because the machine that <application>Privoxy</application>
1931  runs on has no direct Internet access.
1932 </para>
1933
1934 <para>
1935  Also specified here are SOCKS proxies. <application>Privoxy</application>
1936  supports the SOCKS 4 and SOCKS 4A protocols.
1937 </para>
1938
1939 <sect4><title>forward</title>
1940 <variablelist>
1941  <varlistentry>
1942   <term>Specifies:</term>
1943   <listitem>
1944    <para>
1945     To which parent HTTP proxy specific requests should be routed.
1946    </para>
1947   </listitem>
1948  </varlistentry>
1949  <varlistentry>
1950   <term>Type of value:</term>
1951   <listitem>
1952    <para>
1953     <replaceable class="parameter">target_domain</replaceable>[:<replaceable class="parameter">port</replaceable>]
1954     <replaceable class="parameter">http_parent</replaceable>[/<replaceable class="parameter">port</replaceable>]
1955    </para>
1956    <para>
1957     Where <replaceable class="parameter">target_domain</replaceable> is a domain name pattern (see the
1958     chapter on domain matching in the actions file),
1959     <replaceable class="parameter">http_parent</replaceable> is the address of the parent HTTP proxy
1960     as an IP addresses in dotted decimal notation or as a valid DNS name (or <quote>.</quote> to denote
1961     <quote>no forwarding</quote>, and the optional 
1962     <replaceable class="parameter">port</replaceable> parameters are TCP ports, i.e. integer
1963     values from 1 to 64535
1964    </para>
1965   </listitem>
1966  </varlistentry>
1967  <varlistentry>
1968   <term>Default value:</term>
1969   <listitem>
1970    <para><emphasis>Unset</emphasis></para>
1971   </listitem>
1972  </varlistentry>
1973  <varlistentry>
1974   <term>Effect if unset:</term>
1975   <listitem>
1976    <para>
1977     Don't use parent HTTP proxies.
1978    </para>
1979   </listitem>
1980  </varlistentry>
1981  <varlistentry>
1982   <term>Notes:</term>
1983   <listitem>
1984    <para>
1985     If <replaceable class="parameter">http_parent</replaceable> is <quote>.</quote>, then requests are not
1986     forwarded to another HTTP proxy but are made directly to the web servers.
1987    </para>
1988    <para>
1989     Multiple lines are OK, they are checked in sequence, and the last match wins.
1990    </para>
1991   </listitem>
1992  </varlistentry>
1993  <varlistentry>
1994   <term>Examples:</term>
1995   <listitem>
1996    <para>
1997     Everything goes to an example anonymizing proxy, except SSL on port 443 (which it doesn't handle):
1998    </para>
1999    <para>
2000     <screen>
2001   forward   .*     anon-proxy.example.org:8080
2002   forward   :443   .
2003     </screen>
2004    </para>
2005    <para>
2006     Everything goes to our example ISP's caching proxy, except for requests
2007     to that ISP's sites:
2008    </para>
2009    <para>
2010     <screen>
2011   forward   .*.                caching-proxy.example-isp.net:8000
2012   forward   .example-isp.net   .
2013     </screen>
2014    </para>
2015   </listitem>
2016  </varlistentry>
2017 </variablelist>
2018 </sect4>
2019
2020 <sect4><title>forward-socks4 and forward-socks4a</title>
2021 <variablelist>
2022  <varlistentry>
2023   <term>Specifies:</term>
2024   <listitem>
2025    <para>
2026     Through which SOCKS proxy (and to which parent HTTP proxy) specific requests should be routed.
2027    </para>
2028   </listitem>
2029  </varlistentry>
2030  <varlistentry>
2031   <term>Type of value:</term>
2032   <listitem>
2033    <para>
2034     <replaceable class="parameter">target_domain</replaceable>[:<replaceable class="parameter">port</replaceable>]
2035     <replaceable class="parameter">socks_proxy</replaceable>[/<replaceable class="parameter">port</replaceable>]
2036     <replaceable class="parameter">http_parent</replaceable>[/<replaceable class="parameter">port</replaceable>]
2037    </para>
2038    <para>
2039     Where <replaceable class="parameter">target_domain</replaceable> is a domain name pattern (see the
2040     chapter on domain matching in the actions file),
2041     <replaceable class="parameter">http_parent</replaceable> and <replaceable class="parameter">socks_proxy</replaceable>
2042     are IP addresses in dotted decimal notation or valid DNS names (<replaceable class="parameter">http_parent</replaceable>
2043     may be <quote>.</quote> to denote <quote>no HTTP forwarding</quote>), and the optional 
2044     <replaceable class="parameter">port</replaceable> parameters are TCP ports, i.e. integer values from 1 to 64535
2045    </para>
2046   </listitem>
2047  </varlistentry>
2048  <varlistentry>
2049   <term>Default value:</term>
2050   <listitem>
2051    <para><emphasis>Unset</emphasis></para>
2052   </listitem>
2053  </varlistentry>
2054  <varlistentry>
2055   <term>Effect if unset:</term>
2056   <listitem>
2057    <para>
2058     Don't use SOCKS proxies.
2059    </para>
2060   </listitem>
2061  </varlistentry>
2062  <varlistentry>
2063   <term>Notes:</term>
2064   <listitem>
2065    <para>
2066     Multiple lines are OK, they are checked in sequence, and the last match wins.
2067    </para>
2068    <para>
2069     The difference between <literal>forward-socks4</literal> and <literal>forward-socks4a</literal>
2070     is that in the SOCKS 4A protocol, the DNS resolution of the target hostname happens on the SOCKS
2071     server, while in SOCKS 4 it happens locally.
2072    </para>
2073    <para>
2074     If <replaceable class="parameter">http_parent</replaceable> is <quote>.</quote>, then requests are not
2075     forwarded to another HTTP proxy but are made (HTTP-wise) directly to the web servers, albeit through
2076     a SOCKS proxy.
2077    </para>
2078   </listitem>
2079  </varlistentry>
2080  <varlistentry>
2081   <term>Examples:</term>
2082   <listitem>
2083    <para>
2084      From the company example.com, direct connections are made to all
2085      <quote>internal</quote> domains, but everything outbound goes through
2086      their ISP's proxy by way of example.com's corporate SOCKS 4A gateway to
2087      the Internet.
2088    </para>
2089    <para>
2090     <screen>
2091   forward-socks4a   .*.            socks-gw.example.com:1080  www-cache.example-isp.net:8080
2092   forward           .example.com   .
2093     </screen>
2094    </para>
2095    <para>
2096     A rule that uses a SOCKS 4 gateway for all destinations but no HTTP parent looks like this:
2097    </para>
2098    <para>
2099     <screen>
2100   forward-socks4   .*.            socks-gw.example.com:1080  .
2101     </screen>
2102    </para>
2103   </listitem>
2104  </varlistentry>
2105 </variablelist>
2106 </sect4>
2107
2108 <sect4><title>Advanced Forwarding Examples</title>
2109
2110 <para>
2111  If you have links to multiple ISPs that provide various special content 
2112  only to their subscribers, you can configure multiple <application>Privoxies</application>
2113  which have connections to the respective ISPs to act as forwarders to each other, so that
2114  <emphasis>your</emphasis> users can see the internal content of all ISPs.
2115 </para>
2116
2117 <para>
2118  Assume that host-a has a PPP connection to isp-a.net. And host-b has a PPP connection to
2119  isp-b.net. Both run <application>Privoxy</application>. Their forwarding
2120  configuration can look like this:
2121 </para>
2122
2123 <para>
2124  host-a:
2125 </para>
2126
2127 <para>
2128  <screen>
2129   forward    .*.         .
2130   forward    .isp-b.net  host-b:8118
2131  </screen>
2132 </para>
2133
2134 <para>
2135  host-b:
2136 </para>
2137
2138 <para>
2139  <screen>
2140   forward    .*.         .
2141   forward    .isp-a.net  host-a:8118
2142  </screen>
2143 </para>
2144
2145 <para>
2146  Now, your users can set their browser's proxy to use either
2147  host-a or host-b and be able to browse the internal content
2148  of both isp-a and isp-b.
2149 </para>
2150
2151 <para>
2152  If you intend to chain <application>Privoxy</application> and 
2153  <application>squid</application> locally, then chain as 
2154  <literal>browser -> squid -> privoxy</literal> is the recommended way. 
2155 </para>
2156
2157 <para>
2158  Assuming that <application>Privoxy</application> and <application>squid</application>
2159  run on the same box, your squid configuration could then look like this:
2160 </para>
2161
2162 <para>
2163  <screen>
2164   # Define Privoxy as parent proxy (without ICP) 
2165   cache_peer 127.0.0.1 parent 8118 7 no-query 
2166
2167   # Define ACL for protocol FTP 
2168   acl ftp proto FTP 
2169
2170   # Do not forward FTP requests to Privoxy
2171   always_direct allow ftp 
2172
2173   # Forward all the rest to Privoxy
2174   never_direct allow all 
2175  </screen>
2176 </para>
2177
2178 <para>
2179  You would then need to change your browser's proxy settings to <application>squid</application>'s address and port.
2180  Squid normally uses port 3128. If unsure consult <literal>http_port</literal> in <filename>squid.conf</filename>.
2181 </para>
2182
2183 </sect4>
2184
2185 </sect3>
2186
2187 <!--  ~  End section  ~  -->
2188
2189
2190 <!--   ~~~~~       New section      ~~~~~     -->
2191
2192 <sect3>
2193 <title>Windows GUI Options</title>
2194 <para>
2195  <application>Privoxy</application> has a number of options specific to the
2196  Windows GUI interface:
2197 </para>
2198
2199 <para>
2200  If <quote>activity-animation</quote> is set to 1, the
2201  <application>Privoxy</application> icon will animate when
2202  <quote>Privoxy</quote> is active. To turn off, set to 0.
2203 </para>
2204
2205 <para>
2206  <literal>
2207   <msgtext> 
2208    <literallayout>
2209   <emphasis>activity-animation   1</emphasis>
2210    </literallayout>
2211   </msgtext> 
2212  </literal>
2213 </para>
2214
2215 <para>
2216  If <quote>log-messages</quote> is set to 1,
2217  <application>Privoxy</application> will log messages to the console
2218  window:
2219 </para>
2220
2221 <para>
2222  <literal>
2223   <msgtext> 
2224    <literallayout>
2225   <emphasis>log-messages       1</emphasis>
2226    </literallayout>
2227   </msgtext> 
2228  </literal>
2229 </para>
2230
2231 <para> 
2232  If <quote>log-buffer-size</quote> is set to 1, the size of the log buffer,
2233  i.e. the amount of memory used for the log messages displayed in the
2234  console window, will be limited to <quote>log-max-lines</quote> (see below).
2235 </para>
2236
2237 <para>
2238  Warning: Setting this to 0 will result in the buffer to grow infinitely and
2239  eat up all your memory!
2240 </para>
2241
2242 <para>
2243  <literal>
2244   <msgtext> 
2245    <literallayout>
2246   <emphasis>log-buffer-size      1</emphasis>
2247    </literallayout>
2248   </msgtext> 
2249  </literal>
2250 </para>
2251
2252 <para>
2253  <application>log-max-lines</application> is the maximum number of lines held
2254  in the log buffer. See above.
2255 </para>
2256
2257 <para>
2258  <literal>
2259   <msgtext> 
2260    <literallayout>
2261   <emphasis>log-max-lines      200</emphasis>
2262    </literallayout>
2263   </msgtext> 
2264  </literal>
2265 </para>
2266
2267 <para>
2268  If <quote>log-highlight-messages</quote> is set to 1,
2269  <application>Privoxy</application> will highlight portions of the log
2270  messages with a bold-faced font:
2271 </para>
2272
2273 <para>
2274  <literal>
2275   <msgtext> 
2276    <literallayout>
2277   <emphasis>log-highlight-messages   1</emphasis>
2278    </literallayout>
2279   </msgtext> 
2280  </literal>
2281 </para>
2282
2283 <para>
2284  The font used in the console window:
2285 </para>
2286
2287 <para>
2288  <literal>
2289   <msgtext> 
2290    <literallayout>
2291   <emphasis>log-font-name        Comic Sans MS</emphasis>
2292    </literallayout>
2293   </msgtext> 
2294  </literal>
2295 </para>
2296
2297 <para>
2298  Font size used in the console window:
2299 </para>
2300
2301 <para>
2302  <literal>
2303   <msgtext> 
2304    <literallayout>
2305   <emphasis>log-font-size        8</emphasis>
2306    </literallayout>
2307   </msgtext> 
2308  </literal>
2309 </para>
2310
2311 <para>  
2312  <quote>show-on-task-bar</quote> controls whether or not
2313  <application>Privoxy</application> will appear as a button on the Task bar
2314  when minimized:
2315 </para>
2316
2317 <para>
2318  <literal>
2319   <msgtext> 
2320    <literallayout>
2321   <emphasis>show-on-task-bar     0</emphasis>
2322    </literallayout>
2323   </msgtext> 
2324  </literal>
2325 </para>
2326
2327 <para>
2328  If <quote>close-button-minimizes</quote> is set to 1, the Windows close
2329  button will minimize <application>Privoxy</application> instead of closing
2330  the program (close with the exit option on the File menu).
2331 </para>
2332
2333 <para>
2334  <literal>
2335   <msgtext> 
2336    <literallayout>
2337   <emphasis>close-button-minimizes  1</emphasis>
2338    </literallayout>
2339   </msgtext> 
2340  </literal>
2341 </para>
2342
2343 <para>
2344  The <quote>hide-console</quote> option is specific to the MS-Win console
2345  version of <application>Privoxy</application>. If this option is used,
2346  <application>Privoxy</application> will disconnect from and hide  the
2347  command console.
2348 </para>
2349
2350 <para>
2351  <literal>
2352   <msgtext> 
2353    <literallayout>
2354   #hide-console
2355    </literallayout>
2356   </msgtext> 
2357  </literal>
2358 </para>
2359
2360 </sect3>
2361 </sect2>
2362
2363 <!--  ~  End section  ~  -->
2364
2365
2366 <!--   ~~~~~       New section      ~~~~~     -->
2367 <sect2 id="actionsfile">
2368 <title>The Actions File</title>
2369
2370 <para>
2371  The actions file (<filename>default.action</filename>, formerly:
2372  <filename>actionsfile</filename> or <filename>ijb.action</filename>) is used
2373  to define what actions <application>Privoxy</application> takes for which
2374  URLs, and thus determines how ad images, cookies and various other aspects
2375  of HTTP content and transactions are handled on which sites (or even parts
2376  thereof).
2377 </para>
2378
2379 <para> 
2380  Anything you want can blocked, including ads, banners, or just some obnoxious
2381  URL that you would rather not see. Cookies can be accepted or rejected, or
2382  accepted only during the current browser session (i.e. not written to disk),
2383  content can be modified, JavaScripts tamed, user-tracking fooled, and much more.
2384  See below for a complete list of available actions.
2385 </para>
2386
2387 <para>
2388  An actions file typically has sections. At the top, <quote>aliases</quote> are 
2389  defined (discussed below), then the default set of rules which will apply 
2390  universally to all sites and pages. And then below that is generally a lengthy 
2391  set of exceptions to the defined universal policies.
2392 </para>
2393
2394 <!--   ~~~~~       New section      ~~~~~     -->
2395 <sect3>
2396 <title>Finding the Right Mix</title>
2397 <para>
2398  Note that some actions like cookie suppression or script disabling may
2399  render some sites unusable, which rely on these techniques to work properly.
2400  Finding the right mix of actions is not easy and certainly a matter of personal
2401  taste. In general, it can be said that the more <quote>aggressive</quote>
2402  your default settings (in the top section of the actions file) are,
2403  the more exceptions for <quote>trusted</quote> sites you will have to
2404  make later. If, for example, you want to kill popup windows per default, you'll
2405  have to make exceptions from that rule for sites that you regularly use
2406  and that require popups for actually useful content, like maybe your bank,
2407  favorite shop, or newspaper.
2408 </para>
2409
2410 <para>
2411  We have tried to provide you with reasonable rules to start from in the
2412  distribution actions file. But there is no general rule of thumb on these
2413  things. There just are too many variables, and sites are constantly changing.
2414  Sooner or later you will want to change the rules (and read this chapter).
2415 </para>
2416 </sect3>
2417
2418 <!--   ~~~~~       New section      ~~~~~     -->
2419 <sect3>
2420 <title>How to Edit</title>
2421 <para>
2422  The easiest way to edit the <quote>actions</quote> file is with a browser by
2423  using our browser-based editor, which is available at <ulink
2424  url="http://config.privoxy.org/edit-actions">http://config.privoxy.org/edit-actions</ulink>.
2425 </para>
2426
2427 <para>
2428  If you prefer plain text editing to GUIs, you can of course also directly edit the
2429  <filename>default.action</filename> file.
2430 </para>
2431 </sect3>
2432
2433
2434 <sect3>
2435 <title>How Actions are Applied to URLs</title>
2436 <para>
2437  The actions file is divided into sections. There are special sections,
2438  like the <quote>alias</quote> sections which will be discussed later. For now
2439  let's concentrate on regular sections: They have a heading line (often split
2440  up to multiple lines for readability) which consist of a list of actions,
2441  separated by whitespace and enclosed in curly braces. Below that, there
2442  is a list of URL patterns, each on a separate line.
2443 </para>
2444
2445 <para>
2446  To determine which actions apply to a request, the URL of the request is
2447  compared to all patterns in this file. Every time it matches, the list of
2448  applicable actions for the URL is incrementally updated, using the heading
2449  of the section in which the pattern is located. If multiple matches for
2450  the same URL set the same action differently, the last match wins.
2451 </para>
2452
2453 <para>
2454  You can trace this process by visiting <ulink
2455  url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>.
2456 </para>
2457
2458 <para>
2459  More detail on this is provided in the Appendix, <link linkend="ACTIONSANAT">
2460  Anatomy of an Action</link>.
2461 </para>
2462 </sect3>
2463
2464 <!--   ~~~~~       New section      ~~~~~     -->
2465 <sect3>
2466 <title>Patterns</title>
2467 <para>
2468  Generally, a pattern has the form <literal>&lt;domain&gt;/&lt;path&gt;</literal>,
2469  where both the <literal>&lt;domain&gt;</literal> and <literal>&lt;path&gt;</literal>
2470  are optional. (This is why the pattern <literal>/</literal> matches all URLs).
2471 </para>
2472
2473 <variablelist>
2474  <varlistentry>
2475   <term><literal>www.example.com/</literal></term>
2476   <listitem>
2477    <para>
2478     is a domain-only pattern and will match any request to <literal>www.example.com</literal>,
2479     regardless of which document on that server is requested.
2480    </para>
2481   </listitem>
2482  </varlistentry>
2483  <varlistentry>
2484   <term><literal>www.example.com</literal></term>
2485   <listitem>
2486    <para>
2487     means exactly the same. For domain-only patterns, the trailing <literal>/</literal> may
2488     be omitted.
2489    </para>
2490   </listitem>
2491  </varlistentry>
2492  <varlistentry>
2493   <term><literal>www.example.com/index.html</literal></term>
2494   <listitem>
2495    <para>
2496     matches only the single document <literal>/index.html</literal>
2497     on <literal>www.example.com</literal>.
2498    </para>
2499   </listitem>
2500  </varlistentry>
2501  <varlistentry>
2502   <term><literal>/index.html</literal></term>
2503   <listitem>
2504    <para>
2505     matches the document <literal>/index.html</literal>, regardless of the domain,
2506     i.e. on <emphasis>any</emphasis> web server.
2507    </para>
2508   </listitem>
2509  </varlistentry>
2510  <varlistentry>
2511   <term><literal>index.html</literal></term>
2512   <listitem>
2513    <para>
2514     matches nothing, since it would be  interpreted as a domain name and
2515     there is no top-level domain called <literal>.html</literal>.
2516    </para>
2517   </listitem>
2518  </varlistentry>
2519 </variablelist>
2520
2521 <sect4><title>The Domain Pattern</title>
2522
2523 <para>
2524  The matching of the domain part offers some flexible options: if the
2525  domain starts or ends with a dot, it becomes unanchored at that end. 
2526  For example:
2527 </para>
2528
2529 <variablelist>
2530  <varlistentry>
2531   <term><literal>.example.com</literal></term>
2532   <listitem>
2533    <para>
2534     matches any domain that <emphasis>ENDS</emphasis> in
2535     <literal>.example.com</literal>
2536    </para>
2537   </listitem>
2538  </varlistentry>
2539  <varlistentry>
2540   <term><literal>www.</literal></term>
2541   <listitem>
2542    <para>
2543     matches any domain that <emphasis>STARTS</emphasis> with
2544     <literal>www.</literal>
2545    </para>
2546   </listitem>
2547  </varlistentry>
2548  <varlistentry>
2549   <term><literal>.example.</literal></term>
2550   <listitem>
2551    <para>
2552     matches any domain that <emphasis>CONTAINS</emphasis> <literal>.example.</literal>
2553     (Correctly speaking: It matches any FQDN that contains <literal>example</literal> as a domain.)
2554    </para>
2555   </listitem>
2556  </varlistentry>
2557 </variablelist>
2558
2559 <para>
2560  Additionally, there are wild-cards that you can use in the domain names
2561  themselves. They work pretty similar to shell wild-cards: <quote>*</quote>
2562  stands for zero or more arbitrary characters, <quote>?</quote> stands for
2563  any single character, you can define character classes in square
2564  brackets and all of that can be freely mixed:
2565 </para>
2566
2567 <variablelist>
2568  <varlistentry>
2569   <term><literal>ad*.example.com</literal></term>
2570   <listitem>
2571    <para>
2572     matches <quote>adserver.example.com</quote>, 
2573     <quote>ads.example.com</quote>, etc but not <quote>sfads.example.com</quote>
2574    </para>
2575   </listitem>
2576  </varlistentry>
2577  <varlistentry>
2578   <term><literal>*ad*.example.com</literal></term>
2579   <listitem>
2580    <para>
2581     matches all of the above, and then some.
2582    </para>
2583   </listitem>
2584  </varlistentry>
2585  <varlistentry>
2586   <term><literal>.?pix.com</literal></term>
2587   <listitem>
2588    <para>
2589     matches <literal>www.ipix.com</literal>,
2590     <literal>pictures.epix.com</literal>, <literal>a.b.c.d.e.upix.com</literal> etc. 
2591    </para>
2592   </listitem>
2593  </varlistentry>
2594  <varlistentry>
2595   <term><literal>www[1-9a-ez].example.c*</literal></term>
2596   <listitem>
2597    <para>
2598      matches <literal>www1.example.com</literal>, 
2599      <literal>www4.example.cc</literal>, <literal>wwwd.example.cy</literal>, 
2600      <literal>wwwz.example.com</literal> etc., but <emphasis>not</emphasis> 
2601      <literal>wwww.example.com</literal>.
2602    </para>
2603   </listitem>
2604  </varlistentry>
2605 </variablelist>
2606
2607 </sect4>
2608
2609 <sect4><title>The Path Pattern</title>
2610
2611 <para>
2612  <application>Privoxy</application> uses Perl compatible regular expressions
2613  (through the <ulink url="http://www.pcre.org/">PCRE</ulink> library) for
2614  matching the path.
2615 </para>
2616
2617 <para>
2618  There is an <link linkend="regex">Appendix</link> with a brief quick-start into regular
2619  expressions, and full (very technical) documentation on PCRE regex syntax is available on-line
2620  at <ulink url="http://www.pcre.org/man.txt">http://www.pcre.org/man.txt</ulink>.
2621  You might also find the Perl man page on regular expressions (<literal>man perlre</literal>)
2622  useful, which is available on-line at <ulink
2623  url="http://www.perldoc.com/perl5.6/pod/perlre.html">http://www.perldoc.com/perl5.6/pod/perlre.html</ulink>.
2624 </para>
2625
2626 <para>
2627  Note that the path pattern is automatically left-anchored at the <quote>/</quote>,
2628  i.e. it matches as if it would start with a <quote>^</quote>.
2629 </para>
2630
2631 <para>
2632  Please also note that matching in the path is case
2633  <emphasis>INSENSITIVE</emphasis> by default, but you can switch to case
2634  sensitive at any point in the pattern by using the 
2635  <quote>(?-i)</quote> switch:
2636  <literal>www.example.com/(?-i)PaTtErN.*</literal> will match only
2637  documents whose path starts with <literal>PaTtErN</literal> in
2638  <emphasis>exactly</emphasis> this capitalization.
2639 </para>
2640 </sect4>
2641
2642 </sect3>
2643
2644 <!--  ~  End section  ~  -->
2645
2646
2647 <!--   ~~~~~       New section      ~~~~~     -->
2648
2649 <sect3 id="actions">
2650 <title>Actions</title>
2651 <para>
2652  Actions are enabled if preceded with a <quote>+</quote>, and disabled if 
2653  preceded with a <quote>-</quote>. So a <quote>+action</quote> means 
2654  <quote>do that action</quote>, e.g. <quote>+block</quote> means please 
2655  <quote>block the following URLs and/or patterns</quote>. All actions are
2656  disabled by default, until they are explicitly enabled somewhere in an actions
2657  file.
2658 </para>
2659
2660 <para> 
2661  Actions are invoked by enclosing the action name in curly braces (e.g.
2662  {+some_action}), followed by a list of URLs (or patterns that match URLs) to
2663  which the action applies. There are three classes of actions: 
2664 </para>
2665
2666 <para>
2667  <itemizedlist>
2668
2669  <listitem>
2670   <para>  
2671    Boolean, i.e the action can only be <quote>on</quote> or
2672    <quote>off</quote>. Examples: 
2673  </para>
2674   <para>
2675    <literal>
2676     <msgtext> 
2677      <literallayout>
2678   <emphasis>{+name}</emphasis>        # enable this action
2679   <emphasis>{-name}</emphasis>        # disable this action
2680      </literallayout>
2681     </msgtext> 
2682    </literal>
2683   </para>
2684  </listitem>
2685
2686
2687  <listitem>
2688   <para>  
2689    Parameterized, e.g. <quote>+/-hide-user-agent{ Mozilla 1.0 }</quote>, 
2690    where some value is required in order to enable this type of action.
2691    Examples:
2692   </para>
2693   <para>
2694    <literal>
2695     <msgtext> 
2696      <literallayout>
2697   <emphasis>{+name{param}}</emphasis>  # enable action and set parameter to <quote>param</quote>
2698   <emphasis>{-name}</emphasis>         # disable action (<quote>parameter</quote>) can be omitted
2699      </literallayout>
2700     </msgtext> 
2701    </literal>
2702   </para>
2703  </listitem>
2704  
2705  <listitem>
2706   <para>  
2707   <!-- oes, or someone, check this. Re-worded 04/20/02 HB. -->
2708    Multi-value, e.g. <quote>{+/-add-header{Name: value}}</quote> ot
2709    <quote>{+/-wafer{name=value}}</quote>), where some value needs to be defined
2710    in addition to simply enabling the actino. Examples:
2711   </para>
2712   <para>
2713    <literal>
2714     <msgtext> 
2715      <literallayout>
2716   <emphasis>{+name{param=value}}</emphasis>   # enable action and set <quote>param</quote> to <quote>value</quote>
2717   <emphasis>{-name{param=value}}</emphasis>   # remove the parameter <quote>param</quote> completely
2718   <emphasis>{-name}</emphasis>                # disable this action totally and remove <application>param</application> too
2719      </literallayout>
2720     </msgtext> 
2721    </literal>
2722   </para>
2723  </listitem>
2724
2725  </itemizedlist>
2726 </para>
2727
2728 <para>
2729  If nothing is specified in this file, no <quote>actions</quote> are taken.
2730  So in this case <application>Privoxy</application> would just be a
2731  normal, non-blocking, non-anonymizing proxy. You must specifically
2732  enable the privacy and blocking features you need (although the 
2733  provided default <filename>default.action</filename> file will 
2734  give a good starting point).
2735 </para>
2736
2737 <para>
2738  Later defined actions always over-ride earlier ones.  So exceptions 
2739  to any rules you make, should come in the latter part of the file. For
2740  multi-valued actions, the actions are applied in the order they are
2741  specified.
2742 </para>
2743
2744 <!-- start actions listing -->
2745 <para>
2746  The list of valid <application>Privoxy</application> <quote>actions</quote> are:
2747 </para>
2748
2749
2750 <!-- ********************************************************** -->
2751 <!-- Please note the below defined actions use id's that are    -->
2752 <!-- probably linked from other places, so please don't change. -->
2753 <!--                                                            -->
2754 <!-- ********************************************************** -->
2755
2756
2757 <!--   ~~~~~       New section      ~~~~~     -->
2758
2759 <sect4 id="add-header">
2760 <title><emphasis>+add-header{Name: value}</emphasis></title>
2761
2762 <variablelist>
2763  <varlistentry>
2764   <term>Type:</term>
2765   <!-- boolean, parameterized, Multi-value -->
2766   <listitem>
2767    <para>Multi-value.</para>
2768   </listitem>
2769  </varlistentry>
2770  
2771  <varlistentry>
2772   <term>Typical uses:</term>
2773   <listitem>
2774    <para>
2775     Send a user defined HTTP header to the web server.
2776    </para>
2777   </listitem>
2778  </varlistentry>
2779
2780  <varlistentry>
2781   <term>Possible values:</term>
2782   <listitem>
2783    <para>
2784     Any value is possible. Validity of the defined HTTP headers is not checked.
2785    </para>
2786   </listitem>
2787  </varlistentry>
2788  
2789  <varlistentry>
2790   <term>Example usage:</term>
2791   <listitem>
2792     <literallayout>
2793      <emphasis>{+add-header{X-User-Tracking: sucks}}</emphasis>
2794      <emphasis>.example.com</emphasis>
2795     </literallayout>
2796   </listitem>
2797  </varlistentry>
2798
2799 <varlistentry>
2800   <term>Notes:</term>
2801   <listitem>
2802    <para>
2803     This action may be specified multiple times, in order to define multiple 
2804     headers. This is rarely needed for the typical user. If you don't know what 
2805     <quote>HTTP headers</quote> are, you definitely don't need to worry about this 
2806     one.
2807    </para>
2808   </listitem>
2809  </varlistentry>
2810 </variablelist>
2811 </sect4>
2812
2813
2814 <!--   ~~~~~       New section      ~~~~~     -->
2815 <sect4 id="block">
2816 <title><emphasis>+block</emphasis></title>
2817
2818 <variablelist>
2819  <varlistentry>
2820   <term>Type:</term>
2821   <!-- boolean, parameterized, Multi-value -->
2822   <listitem>
2823    <para>Boolean.</para>
2824   </listitem>
2825  </varlistentry>
2826
2827  <varlistentry>
2828   <term>Typical uses:</term>
2829   <listitem>
2830    <para>
2831     Used to block a URL from reaching your browser. The URL may be 
2832     anything, but is typically used to block ads or other obnoxious 
2833     content.    
2834    </para>
2835   </listitem>
2836  </varlistentry>
2837
2838  <varlistentry>
2839   <term>Possible values:</term>
2840   <listitem>
2841    <para>N/A</para>
2842   </listitem>
2843  </varlistentry>
2844  
2845  <varlistentry>
2846   <term>Example usage:</term>
2847   <listitem>
2848     <literallayout>
2849      <emphasis>{+block}</emphasis>
2850      <emphasis>.example.com</emphasis>
2851      <emphasis>.ads.r.us</emphasis>
2852     </literallayout>
2853   </listitem>
2854  </varlistentry>
2855
2856 <varlistentry>
2857   <term>Notes:</term>
2858   <listitem>
2859    <para>
2860     <application>Privoxy</application> will display its 
2861     special <quote>BLOCKED</quote> page if a URL matches one of the 
2862     blocked patterns. If there is sufficient space, a large red 
2863     banner will appear with a friendly message about why the page 
2864     was blocked, and a way to go there anyway. If there is insufficient 
2865     space a smaller blocked page will appear without the red banner.
2866     One exception is if the URL matches both <quote>+block</quote> 
2867     and <quote>+image</quote>, then it can be handled by 
2868     <quote>+image-blocker</quote> (see below).
2869    </para>
2870   </listitem>
2871  </varlistentry>
2872
2873 </variablelist>
2874 </sect4>
2875
2876
2877 <!--   ~~~~~       New section      ~~~~~     -->
2878 <sect4 id="deanimate-gifs">
2879 <title><emphasis>+deanimate-gifs</emphasis></title>
2880
2881 <variablelist>
2882  <varlistentry>
2883   <term>Type:</term>
2884   <!-- boolean, parameterized, Multi-value -->
2885   <listitem>
2886    <para>Parameterized.</para>
2887   </listitem>
2888  </varlistentry>
2889
2890  <varlistentry>
2891   <term>Typical uses:</term>
2892   <listitem>
2893    <para>
2894     To stop those annoying, distracting animated GIF images.
2895    </para>
2896   </listitem>
2897  </varlistentry>
2898
2899  <varlistentry>
2900   <term>Possible values:</term>
2901   <listitem>
2902    <para>
2903     <quote>last</quote> or <quote>first</quote>
2904    </para>
2905   </listitem>
2906  </varlistentry>
2907  
2908  <varlistentry>
2909   <term>Example usage:</term>
2910   <listitem>
2911     <literallayout>
2912       <emphasis>{+deanimate-gifs{last}}</emphasis>
2913       <emphasis>.example.com</emphasis>
2914     </literallayout>
2915   </listitem>
2916  </varlistentry>
2917
2918  <varlistentry>
2919   <term>Notes:</term>
2920   <listitem>
2921    <para>
2922     De-animate all animated GIF images, i.e. reduce them to their last frame.
2923     This will also shrink the images considerably (in bytes, not pixels!). If
2924     the option <quote>first</quote> is given, the first frame of the animation
2925     is used as the replacement. If <quote>last</quote> is given, the last
2926     frame of the animation is used instead, which probably makes more sense for
2927     most banner animations, but also has the risk of not showing the entire
2928     last frame (if it is only a delta to an earlier frame).
2929    </para>
2930   </listitem>
2931  </varlistentry>
2932
2933 </variablelist>
2934 </sect4>
2935
2936 <!--   ~~~~~       New section      ~~~~~     -->
2937 <sect4 id="downgrade">
2938 <title><emphasis>+downgrade</emphasis></title>
2939
2940 <variablelist>
2941  <varlistentry>
2942   <term>Type:</term>
2943   <!-- boolean, parameterized, Multi-value -->
2944   <listitem>
2945    <para>Boolean.</para>
2946   </listitem>
2947  </varlistentry>
2948
2949  <varlistentry>
2950   <term>Typical uses:</term>
2951   <listitem>
2952    <para>
2953     <quote>+downgrade</quote> will downgrade HTTP/1.1 client requests to
2954     HTTP/1.0 and downgrade the responses as well.
2955    </para>
2956   </listitem>
2957  </varlistentry>
2958
2959  <varlistentry>
2960   <term>Possible values:</term>
2961   <listitem>
2962    <para>
2963     N/A
2964    </para>
2965   </listitem>
2966  </varlistentry>
2967  
2968  <varlistentry>
2969   <term>Example usage:</term>
2970   <listitem>
2971     <literallayout>
2972      <emphasis>{+downgrade}</emphasis>
2973      <emphasis>.example.com</emphasis>
2974     </literallayout>
2975   </listitem>
2976  </varlistentry>
2977
2978  <varlistentry>
2979   <term>Notes:</term>
2980   <listitem>
2981    <para>
2982     Use this action for servers that use HTTP/1.1 protocol features that
2983     <application>Privoxy</application> doesn't handle well yet. HTTP/1.1 is
2984     only partially implemented. Default is not to downgrade requests. This is
2985     an infrequently needed action, and is used to help with problem sites only.
2986    </para>
2987   </listitem>
2988  </varlistentry>
2989
2990 </variablelist>
2991 </sect4>
2992
2993 <!--   ~~~~~       New section      ~~~~~     -->
2994 <sect4 id="fast-redirects">
2995 <title><emphasis>+fast-redirects</emphasis></title>
2996
2997 <variablelist>
2998  <varlistentry>
2999   <term>Type:</term>
3000   <!-- boolean, parameterized, Multi-value -->
3001   <listitem>
3002    <para>Boolean.</para>
3003   </listitem>
3004  </varlistentry>
3005
3006  <varlistentry>
3007   <term>Typical uses:</term>
3008   <listitem>
3009    <para>
3010     The <quote>+fast-redirects</quote> action enables interception of 
3011     <quote>redirect</quote> requests from one server to another, which 
3012     are used to track users.<application>Privoxy</application> can cut off
3013     all but the last valid URL in redirect request and send a local redirect
3014     back to your browser without contacting the intermediate site(s).
3015    </para>
3016   </listitem>
3017  </varlistentry>
3018
3019  <varlistentry>
3020   <term>Possible values:</term>
3021   <listitem>
3022    <para>
3023     N/A
3024    </para>
3025   </listitem>
3026  </varlistentry>
3027  
3028  <varlistentry>
3029   <term>Example usage:</term>
3030   <listitem>
3031     <literallayout>
3032      <emphasis>{+fast-redirects}</emphasis>
3033      <emphasis>.example.com</emphasis>
3034     </literallayout>
3035   </listitem>
3036  </varlistentry>
3037
3038  <varlistentry>
3039   <term>Notes:</term>
3040   <listitem>
3041    <para>  
3042     Many sites, like yahoo.com, don't just link to other sites. Instead, they
3043     will link to some script on their own server, giving the destination as a
3044     parameter, which will then redirect you to the final target. URLs
3045     resulting from this scheme typically look like:
3046     <emphasis>http://some.place/some_script?http://some.where-else</emphasis>.
3047   </para>
3048    <para>
3049     Sometimes, there are even multiple consecutive redirects encoded in the
3050     URL. These redirections via scripts make your web browsing more traceable,
3051     since the server from which you follow such a link can see where you go
3052     to. Apart from that, valuable bandwidth and time is wasted, while your
3053     browser ask the server for one redirect after the other. Plus, it feeds
3054     the advertisers.
3055    </para>
3056    <para>
3057     This is a normally on feature, and often requires exceptions for sites that
3058     are sensitive to defeating this mechanism.
3059    </para>
3060   </listitem>
3061  </varlistentry>
3062
3063 </variablelist>
3064 </sect4>
3065
3066
3067 <!--   ~~~~~       New section      ~~~~~     -->
3068 <sect4 id="filter">
3069 <title><emphasis>+filter</emphasis></title>
3070
3071 <variablelist>
3072  <varlistentry>
3073   <term>Type:</term>
3074   <!-- boolean, parameterized, Multi-value -->
3075   <listitem>
3076    <para>Parameterized.</para>
3077   </listitem>
3078  </varlistentry>
3079
3080  <varlistentry>
3081   <term>Typical uses:</term>
3082   <listitem>
3083    <para>
3084     Apply page filtering as defined by named sections of the
3085     <filename>default.filter</filename> file to the specified site(s). 
3086     <quote>Filtering</quote> can be any modification of the raw 
3087     page content, including re-writing or deletion.
3088    </para>
3089   </listitem>
3090  </varlistentry>
3091
3092  <varlistentry>
3093   <term>Possible values:</term>
3094   <listitem>
3095    <para>
3096     <quote>+filter</quote> must include the name of one of the section identifiers
3097     from <filename>default.filter</filename> (or whatever
3098     <emphasis>filterfile</emphasis> is specified in <filename>config</filename>).
3099    </para>
3100   </listitem>
3101  </varlistentry>
3102  
3103  <varlistentry>
3104   <term>Example usage (from the current <filename>default.filter</filename>):</term>
3105   <listitem>
3106    <simplelist>
3107    <member>
3108     <emphasis>+filter{html-annoyances}</emphasis>:  Get rid of particularly annoying HTML abuse.
3109    </member>
3110   </simplelist>
3111   <simplelist>
3112    <member>
3113     <emphasis>+filter{js-annoyances}</emphasis>:    Get rid of particularly annoying JavaScript abuse
3114    </member>
3115   </simplelist>
3116   <simplelist>
3117    <member>
3118     <emphasis>+filter{content-cookies}</emphasis>:   Kill cookies that come in the HTML or JS content 
3119    </member>
3120   </simplelist>
3121   <simplelist>
3122    <member>
3123     <emphasis>+filter{popups}</emphasis>:         Kill all popups in JS and HTML
3124    </member>
3125   </simplelist>
3126   <simplelist>
3127    <member>
3128     <emphasis>+filter{frameset-borders}</emphasis>: Give frames a border and make them resizable 
3129    </member>
3130   </simplelist>
3131   <simplelist>
3132    <member>
3133     <emphasis>+filter{webbugs}</emphasis>:          Squish WebBugs (1x1 invisible GIFs used for user tracking)
3134    </member>
3135   </simplelist>
3136   <simplelist>
3137    <member>
3138     <emphasis>+filter{refresh-tags}</emphasis>:     Kill automatic refresh tags (for dial-on-demand setups) 
3139    </member>
3140   </simplelist>
3141   <simplelist>
3142    <member>
3143     <emphasis>+filter{fun}</emphasis>:              Text replacements  for subversive browsing fun!
3144    </member>
3145   </simplelist>
3146   <simplelist>
3147    <member>
3148     <emphasis>+filter{nimda}</emphasis>:            Remove Nimda (virus) code.
3149    </member>
3150   </simplelist>
3151   <simplelist>
3152    <member>
3153     <emphasis>+filter{banners-by-size}</emphasis>:  Kill banners by size (<emphasis>very</emphasis> efficient!)
3154    </member>
3155   </simplelist>
3156   <simplelist>
3157    <member>
3158     <emphasis>+filter{shockwave-flash}</emphasis>:   Kill embedded Shockwave Flash objects
3159    </member>
3160   </simplelist>
3161   <simplelist>
3162    <member>
3163     <emphasis>+filter{crude-parental}</emphasis>:   Kill all web pages that contain the words "sex" or "warez"
3164    </member>
3165   </simplelist>
3166   </listitem>
3167  </varlistentry>
3168
3169  <varlistentry>
3170   <term>Notes:</term>
3171   <listitem>
3172    <para>
3173     This is potentially a very powerful feature! And requires a knowledge 
3174     of regular expressions if you want to <quote>roll your own</quote>.
3175    </para>
3176    <para>
3177     Filtering requires buffering the page content, which may appear to
3178     slow down page rendering since nothing is displayed until all content has
3179     passed the filters. (It does not really take longer, but seems that way
3180     since the page is not incrementally displayed.) This effect will be more
3181     noticeable on slower connections.
3182    </para>
3183   </listitem>
3184  </varlistentry>
3185
3186 </variablelist>
3187 </sect4>
3188
3189
3190 <!--   ~~~~~       New section      ~~~~~     -->
3191 <sect4 id="hide-forwarded">
3192 <title><emphasis>+hide-forwarded</emphasis></title>
3193
3194 <variablelist>
3195  <varlistentry>
3196   <term>Type:</term>
3197   <!-- Boolean, Parameterized, Multi-value -->
3198   <listitem>
3199    <para>Boolean.</para>
3200   </listitem>
3201  </varlistentry>
3202
3203  <varlistentry>
3204   <term>Typical uses:</term>
3205   <listitem>
3206    <para>
3207     Block any existing X-Forwarded-for HTTP header, and do not add a new one.
3208    </para>
3209   </listitem>
3210  </varlistentry>
3211
3212  <varlistentry>
3213   <term>Possible values:</term>
3214   <listitem>
3215    <para>
3216     N/A
3217    </para>
3218   </listitem>
3219  </varlistentry>
3220  
3221  <varlistentry>
3222   <term>Example usage:</term>
3223   <listitem>
3224     <literallayout>
3225      <emphasis>{+hide-forwarded}</emphasis>
3226      <emphasis>.example.com</emphasis>
3227     </literallayout>
3228   </listitem>
3229  </varlistentry>
3230
3231  <varlistentry>
3232   <term>Notes:</term>
3233   <listitem>
3234    <para>
3235     It is fairly safe to leave this on. It does not seem to break many sites.
3236    </para>
3237   </listitem>
3238  </varlistentry>
3239
3240 </variablelist>
3241 </sect4>
3242
3243
3244 <!--   ~~~~~       New section      ~~~~~     -->
3245 <sect4 id="hide-from">
3246 <title><emphasis>+hide-from</emphasis></title>
3247
3248 <variablelist>
3249  <varlistentry>
3250   <term>Type:</term>
3251   <!-- Boolean, Parameterized, Multi-value -->
3252   <listitem>
3253    <para>Parameterized.</para>
3254   </listitem>
3255  </varlistentry>
3256
3257  <varlistentry>
3258   <term>Typical uses:</term>
3259   <listitem>
3260    <para>
3261     To block the browser from sending your email address in a <quote>From:</quote>
3262     header.
3263    </para>
3264   </listitem>
3265  </varlistentry>
3266
3267  <varlistentry>
3268   <term>Possible values:</term>
3269   <listitem>
3270    <para>
3271     Keyword: <quote>block</quote>, or any user defined value.
3272    </para>
3273   </listitem>
3274  </varlistentry>
3275  
3276  <varlistentry>
3277   <term>Example usage:</term>
3278   <listitem>
3279     <literallayout>
3280      <emphasis>{+hide-from{block}}</emphasis>
3281      <emphasis>.example.com</emphasis>
3282     </literallayout>
3283   </listitem>
3284  </varlistentry>
3285
3286  <varlistentry>
3287   <term>Notes:</term>
3288   <listitem>
3289    <para>
3290     The keyword <quote>block</quote> will completely remove the header.
3291     Alternately, you can specify any value you prefer to send to the web
3292     server.
3293    </para>
3294   </listitem>
3295  </varlistentry>
3296
3297 </variablelist>
3298 </sect4>
3299
3300
3301 <!--   ~~~~~       New section      ~~~~~     -->
3302 <sect4 id="hide-referer">
3303 <title><emphasis>+hide-referer</emphasis></title>
3304 <anchor id="hide-referrer">
3305
3306 <variablelist>
3307  <varlistentry>
3308   <term>Type:</term>
3309   <!-- Boolean, Parameterized, Multi-value -->
3310   <listitem>
3311    <para>Parameterized.</para>
3312   </listitem>
3313  </varlistentry>
3314
3315  <varlistentry>
3316   <term>Typical uses:</term>
3317   <listitem>
3318    <para>
3319      Don't send the <quote>Referer:</quote> (sic) HTTP header to the web site.
3320      Or, alternately send a forged header instead.
3321    </para>
3322   </listitem>
3323  </varlistentry>
3324
3325  <varlistentry>
3326   <term>Possible values:</term>
3327   <listitem>
3328    <para>
3329      Prevent the header from being sent with the keyword, <quote>block</quote>.
3330      Or, <quote>forge</quote> a URL to one from the same server as the request.
3331      Or, set to user defined value of your choice.
3332    </para>
3333   </listitem>
3334  </varlistentry>
3335  
3336  <varlistentry>
3337   <term>Example usage:</term>
3338   <listitem>
3339     <literallayout>
3340      <emphasis>{+hide-referer{forge}}</emphasis>
3341      <emphasis>.example.com</emphasis>
3342     </literallayout>
3343   </listitem>
3344  </varlistentry>
3345
3346  <varlistentry>
3347   <term>Notes:</term>
3348   <listitem>
3349    <para>
3350     <quote>forge</quote> is the preferred option here, since some servers will
3351     not send images back otherwise.
3352    </para>
3353   <para>  
3354    <quote>+hide-referrer</quote> is an alternate spelling of
3355    <quote>+hide-referer</quote>. It has the exact same parameters, and can be freely
3356    mixed with, <quote>+hide-referer</quote>. (<quote>referrer</quote> is the
3357    correct English spelling, however the HTTP specification has a bug - it
3358    requires it to be spelled as <quote>referer</quote>.) 
3359   </para>
3360   </listitem>
3361  </varlistentry>
3362
3363 </variablelist>
3364 </sect4>
3365
3366
3367 <!--   ~~~~~       New section      ~~~~~     -->
3368 <sect4 id="hide-user-agent">
3369 <title><emphasis>+hide-user-agent</emphasis></title>
3370
3371 <variablelist>
3372  <varlistentry>
3373   <term>Type:</term>
3374   <!-- Boolean, Parameterized, Multi-value -->
3375   <listitem>
3376    <para>Parameterized.</para>
3377   </listitem>
3378  </varlistentry>
3379
3380  <varlistentry>
3381   <term>Typical uses:</term>
3382   <listitem>
3383    <para>
3384     To change the <quote>User-Agent:</quote> header so web servers can't tell
3385     your browser type. Who's business is it anyway?
3386    </para>
3387   </listitem>
3388  </varlistentry>
3389
3390  <varlistentry>
3391   <term>Possible values:</term>
3392   <listitem>
3393    <para>
3394     Any user defined string.
3395    </para>
3396   </listitem>
3397  </varlistentry>
3398  
3399  <varlistentry>
3400   <term>Example usage:</term>
3401   <listitem>
3402     <literallayout>
3403      <emphasis>{+hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}}</emphasis>
3404      <emphasis>.msn.com</emphasis>
3405     </literallayout>
3406   </listitem>
3407  </varlistentry>
3408
3409  <varlistentry>
3410   <term>Notes:</term>
3411   <listitem>
3412    <para>
3413      Warning! This breaks many web sites that depend on this in order 
3414      to determine how the target browser will respond to various 
3415      requests. Use with caution.
3416    </para>
3417   </listitem>
3418  </varlistentry>
3419
3420 </variablelist>
3421 </sect4>
3422
3423 <!--   ~~~~~       New section      ~~~~~     -->
3424 <sect4 id="image">
3425 <title><emphasis>+image</emphasis></title>
3426
3427 <variablelist>
3428  <varlistentry>
3429   <term>Type:</term>
3430   <!-- Boolean, Parameterized, Multi-value -->
3431   <listitem>
3432    <para>Boolean.</para>
3433   </listitem>
3434  </varlistentry>
3435
3436  <varlistentry>
3437   <term>Typical uses:</term>
3438   <listitem>
3439    <para>
3440     To define what <application>Privoxy</application> should treat 
3441     automatically as an image.
3442    </para>
3443   </listitem>
3444  </varlistentry>
3445
3446  <varlistentry>
3447   <term>Possible values:</term>
3448   <listitem>
3449    <para>
3450     N/A
3451    </para>
3452   </listitem>
3453  </varlistentry>
3454  
3455  <varlistentry>
3456   <term>Example usage:</term>
3457   <listitem>
3458     <literallayout>
3459      <emphasis>{+image}</emphasis>
3460      <emphasis>/.*\.(gif|jpg|jpeg|png|bmp|ico)</emphasis>
3461     </literallayout>
3462   </listitem>
3463  </varlistentry>
3464
3465  <varlistentry>
3466   <term>Notes:</term>
3467   <listitem>
3468    <para>
3469     This only has meaning if the URL (or pattern) also is
3470     <quote>+block</quote>ed, in which case a <quote>blocked</quote> image can
3471     be sent rather than a HTML page. (See <quote>+image-blocker{}</quote> below
3472     for the control over what is actually sent.)    
3473    </para>
3474    <para>
3475     There is little reason to change the default definition for this.
3476    </para>
3477   </listitem>
3478  </varlistentry>
3479
3480 </variablelist>
3481 </sect4>
3482
3483
3484 <!--   ~~~~~       New section      ~~~~~     -->
3485 <sect4 id="image-blocker">
3486 <title><emphasis>+image-blocker</emphasis></title>
3487
3488 <variablelist>
3489  <varlistentry>
3490   <term>Type:</term>
3491   <!-- Boolean, Parameterized, Multi-value -->
3492   <listitem>
3493    <para>Parameterized.</para>
3494   </listitem>
3495  </varlistentry>
3496
3497  <varlistentry>
3498   <term>Typical uses:</term>
3499   <listitem>
3500    <para>
3501     Decide what to do with URLs that end up tagged with both <quote>{+block}</quote>
3502     and <quote>{+image}</quote>, e.g an advertisement.
3503    </para>
3504   </listitem>
3505  </varlistentry>
3506
3507  <varlistentry>
3508   <term>Possible values:</term>
3509   <listitem>
3510    <para>
3511     There are four available options: <quote>-image-blocker</quote> will send a HTML
3512     <quote>blocked</quote> page, usually resulting in a <quote>broken
3513     image</quote> icon. <quote>+image-blocker{blank}</quote> will send a 1x1
3514     transparent GIF image. <quote>+image-blocker{pattern}</quote> will send a
3515     checkerboard type pattern (the default). And finally,
3516     <quote>+image-blocker{http://xyz.com}</quote> will send a HTTP temporary
3517     redirect to the specified image. This has the advantage of the icon being
3518     being cached by the browser, which will speed up the display.
3519    </para>
3520   </listitem>
3521  </varlistentry>
3522  
3523  <varlistentry>
3524   <term>Example usage:</term>
3525   <listitem>
3526     <literallayout>
3527      <emphasis>{+image-blocker{blank}}</emphasis>
3528      <emphasis>.example.com</emphasis>
3529     </literallayout>
3530   </listitem>
3531  </varlistentry>
3532
3533  <varlistentry>
3534   <term>Notes:</term>
3535   <listitem>
3536    <para>
3537     If you want <emphasis>invisible</emphasis> ads, they need to be both
3538     defined as <emphasis>images</emphasis> and <emphasis>blocked</emphasis>.
3539     And then, <quote>image-blocker</quote> should be set to
3540     <quote>blank</quote> for invisibility. Note you cannot treat HTML pages as
3541     images in most cases. For instance, frames require an HTML page to display.
3542     So a frame that is an ad, cannot be treated as an image. Forcing an
3543     <quote>image</quote> in this situation just will not work.
3544    </para>
3545   </listitem>
3546  </varlistentry>
3547
3548 </variablelist>
3549 </sect4>
3550
3551 <!--   ~~~~~       New section      ~~~~~     -->
3552 <sect4 id="limit-connect">
3553 <title><emphasis>+limit-connect</emphasis></title>
3554
3555 <variablelist>
3556  <varlistentry>
3557   <term>Type:</term>
3558   <!-- Boolean, Parameterized, Multi-value -->
3559   <listitem>
3560    <para>Parameterized.</para>
3561   </listitem>
3562  </varlistentry>
3563
3564  <varlistentry>
3565   <term>Typical uses:</term>
3566   <listitem>
3567    <para>
3568     By default, <application>Privoxy</application> only allows HTTP CONNECT
3569     requests to port 443 (the standard, secure HTTPS port). Use 
3570     <quote>+limit-connect</quote> to disable this altogether, or to allow 
3571     more ports.
3572    </para>
3573   </listitem>
3574  </varlistentry>
3575
3576  <varlistentry>
3577   <term>Possible values:</term>
3578   <listitem>
3579    <para>
3580     Any valid port number, or port number range.
3581    </para>
3582   </listitem>
3583  </varlistentry>
3584  
3585  <varlistentry>
3586   <term>Example usages:</term>
3587   <listitem>
3588    <!-- I had trouble getting the spacing to look right in my browser -->
3589    <!-- I probably have the wrong font setup, bollocks. -->
3590     <literallayout>
3591      <emphasis>+limit-connect{443}</emphasis>                      # This is the default and need not be specified.
3592      <emphasis>+limit-connect{80,443}</emphasis>                 # Ports 80 and 443 are OK.
3593      <emphasis>+limit-connect{-3, 7, 20-100, 500-}</emphasis> # Port less than 3, 7, 20 to 100 and above 500 are OK.
3594     </literallayout>
3595   </listitem>
3596  </varlistentry>
3597
3598  <varlistentry>
3599   <term>Notes:</term>
3600   <listitem>
3601    <para>
3602     The CONNECT methods exists in HTTP to allow access to secure websites
3603     (https:// URLs) through proxies. It works very simply: the proxy connects
3604     to the server on the specified port, and then short-circuits its
3605     connections to the client <emphasis>and</emphasis> to the remote proxy.
3606     This can be a big security hole, since CONNECT-enabled proxies can be
3607     abused as TCP relays very easily.
3608   </para>
3609   <para> 
3610    If you want to allow CONNECT for more ports than this, or want to forbid
3611    CONNECT altogether, you can specify a comma separated list of ports and
3612    port ranges (the latter using dashes, with the minimum defaulting to 0 and
3613    max to 65K).
3614   </para>
3615   <para>
3616    If you don't know what any of this means, there probably is no reason to 
3617    change this one.
3618   </para>
3619   </listitem>
3620  </varlistentry>
3621
3622 </variablelist>
3623 </sect4>
3624
3625 <!--   ~~~~~       New section      ~~~~~     -->
3626 <sect4 id="no-compression">
3627 <title><emphasis>+no-compression</emphasis></title>
3628
3629 <variablelist>
3630  <varlistentry>
3631   <term>Type:</term>
3632   <!-- Boolean, Parameterized, Multi-value -->
3633   <listitem>
3634    <para>Boolean.</para>
3635   </listitem>
3636  </varlistentry>
3637
3638  <varlistentry>
3639   <term>Typical uses:</term>
3640   <listitem>
3641    <para>
3642     Prevent the specified websites from compressing HTTP data.
3643    </para>
3644   </listitem>
3645  </varlistentry>
3646
3647  <varlistentry>
3648   <term>Possible values:</term>
3649   <listitem>
3650    <para>
3651     N/A
3652    </para>
3653   </listitem>
3654  </varlistentry>
3655  
3656  <varlistentry>
3657   <term>Example usage:</term>
3658   <listitem>
3659     <literallayout>
3660      <emphasis>{+no-compression}</emphasis>
3661      <emphasis>.example.com</emphasis>
3662     </literallayout>
3663   </listitem>
3664  </varlistentry>
3665
3666  <varlistentry>
3667   <term>Notes:</term>
3668   <listitem>
3669    <para>
3670     Some websites do this, which can be a problem for
3671     <application>Privoxy</application>, since <quote>+filter</quote>,
3672     <quote>+no-popup</quote> and <quote>+gif-deanimate</quote> will not work
3673     on compressed data. This will slow down connections to those websites,
3674     though. Default typically is to turn <quote>no-compression</quote> on.
3675    </para>
3676   </listitem>
3677  </varlistentry>
3678
3679 </variablelist>
3680 </sect4>
3681
3682 <!--   ~~~~~       New section      ~~~~~     -->
3683 <sect4 id="no-cookies-keep">
3684 <title><emphasis>+no-cookies-keep</emphasis></title>
3685
3686 <variablelist>
3687  <varlistentry>
3688   <term>Type:</term>
3689   <!-- Boolean, Parameterized, Multi-value -->
3690   <listitem>
3691    <para>Boolean.</para>
3692   </listitem>
3693  </varlistentry>
3694
3695  <varlistentry>
3696   <term>Typical uses:</term>
3697   <listitem>
3698    <para>
3699     Allow cookies for the current browser session only.
3700    </para>
3701   </listitem>
3702  </varlistentry>
3703
3704  <varlistentry>
3705   <term>Possible values:</term>
3706   <listitem>
3707    <para>
3708     N/A
3709    </para>
3710   </listitem>
3711  </varlistentry>
3712  
3713  <varlistentry>
3714   <term>Example usage:</term>
3715   <listitem>
3716     <literallayout>
3717      <emphasis>{+no-cookies-keep}</emphasis>
3718      <emphasis>.example.com</emphasis>
3719     </literallayout>
3720   </listitem>
3721  </varlistentry>
3722
3723  <varlistentry>
3724   <term>Notes:</term>
3725   <listitem>
3726    <para>
3727     If websites set cookies, <quote>no-cookies-keep</quote> will make sure
3728     they are erased when you exit and restart your web browser. This makes
3729     profiling cookies useless, but won't break sites which require cookies so
3730     that you can log in for transactions. This is generally turned on for all 
3731     sites. Sometimes referred to as <quote>session cookies</quote>.
3732    </para>
3733   </listitem>
3734  </varlistentry>
3735
3736 </variablelist>
3737 </sect4>
3738
3739
3740 <!--   ~~~~~       New section      ~~~~~     -->
3741 <sect4 id="no-cookies-read">
3742 <title><emphasis>+no-cookies-read</emphasis></title>
3743
3744 <variablelist>
3745  <varlistentry>
3746   <term>Type:</term>
3747   <!-- Boolean, Parameterized, Multi-value -->
3748   <listitem>
3749    <para>Boolean.</para>
3750   </listitem>
3751  </varlistentry>
3752
3753  <varlistentry>
3754   <term>Typical uses:</term>
3755   <listitem>
3756    <para>
3757     Explicitly prevent the web server from reading any cookies on your 
3758     system.
3759    </para>
3760   </listitem>
3761  </varlistentry>
3762
3763  <varlistentry>
3764   <term>Possible values:</term>
3765   <listitem>
3766    <para>
3767     N/A
3768    </para>
3769   </listitem>
3770  </varlistentry>
3771  
3772  <varlistentry>
3773   <term>Example usage:</term>
3774   <listitem>
3775     <literallayout>
3776      <emphasis>{+no-cookies-read}</emphasis>
3777      <emphasis>.example.com</emphasis>
3778     </literallayout>
3779   </listitem>
3780  </varlistentry>
3781
3782  <varlistentry>
3783   <term>Notes:</term>
3784   <listitem>
3785    <para>
3786     Often used in conjunction with <quote>+no-cookies-set</quote> to 
3787     disable persistant cookies completely.
3788    </para>
3789   </listitem>
3790  </varlistentry>
3791
3792 </variablelist>
3793 </sect4>
3794
3795
3796 <!--   ~~~~~       New section      ~~~~~     -->
3797 <sect4 id="no-cookies-set">
3798 <title><emphasis>+no-cookies-set</emphasis></title>
3799
3800 <variablelist>
3801  <varlistentry>
3802   <term>Type:</term>
3803   <!-- Boolean, Parameterized, Multi-value -->
3804   <listitem>
3805    <para>Boolean.</para>
3806   </listitem>
3807  </varlistentry>
3808
3809  <varlistentry>
3810   <term>Typical uses:</term>
3811   <listitem>
3812    <para>
3813     Explicitly block the web server from sending cookies to your 
3814     system.
3815    </para>
3816   </listitem>
3817  </varlistentry>
3818
3819  <varlistentry>
3820   <term>Possible values:</term>
3821   <listitem>
3822    <para>
3823     N/A
3824    </para>
3825   </listitem>
3826  </varlistentry>
3827  
3828  <varlistentry>
3829   <term>Example usage:</term>
3830   <listitem>
3831     <literallayout>
3832      <emphasis>{+no-cookies-set}</emphasis>
3833      <emphasis>.example.com</emphasis>
3834     </literallayout>
3835   </listitem>
3836  </varlistentry>
3837
3838  <varlistentry>
3839   <term>Notes:</term>
3840   <listitem>
3841    <para>
3842     Often used in conjunction with <quote>+no-cookies-read</quote> to 
3843     disable persistant cookies completely.
3844    </para>
3845   </listitem>
3846  </varlistentry>
3847
3848 </variablelist>
3849 </sect4>
3850
3851
3852 <!--   ~~~~~       New section      ~~~~~     -->
3853 <sect4 id="no-popup">
3854 <title><emphasis>+no-popup</emphasis></title>
3855 <anchor id="no-popups">
3856
3857 <variablelist>
3858  <varlistentry>
3859   <term>Type:</term>
3860   <!-- Boolean, Parameterized, Multi-value -->
3861   <listitem>
3862    <para>Boolean.</para>
3863   </listitem>
3864  </varlistentry>
3865
3866  <varlistentry>
3867   <term>Typical uses:</term>
3868   <listitem>
3869    <para>
3870     Stop those annoying JavaScript pop-up windows! 
3871    </para>
3872   </listitem>
3873  </varlistentry>
3874
3875  <varlistentry>
3876   <term>Possible values:</term>
3877   <listitem>
3878    <para>
3879     N/A
3880    </para>
3881   </listitem>
3882  </varlistentry>
3883  
3884  <varlistentry>
3885   <term>Example usage:</term>
3886   <listitem>
3887     <literallayout>
3888      <emphasis>{+no-popup}</emphasis>
3889      <emphasis>.example.com</emphasis>
3890     </literallayout>
3891   </listitem>
3892  </varlistentry>
3893
3894  <varlistentry>
3895   <term>Notes:</term>
3896   <listitem>
3897    <para>
3898     <quote>+no-popup</quote> uses a built in filter to disable pop-ups
3899     that use the <literal>window.open()</literal> function, etc.
3900    </para>
3901    <para>
3902     An alternate spelling is <quote>+no-popups</quote>, which is 
3903     interchangeable.
3904    </para>
3905   </listitem>
3906  </varlistentry>
3907
3908 </variablelist>
3909 </sect4>
3910
3911
3912 <!--   ~~~~~       New section      ~~~~~     -->
3913 <sect4 id="vanilla-wafer">
3914 <title><emphasis>+vanilla-wafer</emphasis></title>
3915
3916 <variablelist>
3917  <varlistentry>
3918   <term>Type:</term>
3919   <!-- Boolean, Parameterized, Multi-value -->
3920   <listitem>
3921    <para>Boolean.</para>
3922   </listitem>
3923  </varlistentry>
3924
3925  <varlistentry>
3926   <term>Typical uses:</term>
3927   <listitem>
3928    <para>
3929     Sends a cookie for every site stating that you do not accept any copyright
3930     on cookies sent to you, and asking them not to track you.
3931    </para>
3932   </listitem>
3933  </varlistentry>
3934
3935  <varlistentry>
3936   <term>Possible values:</term>
3937   <listitem>
3938    <para>
3939     N/A
3940    </para>
3941   </listitem>
3942  </varlistentry>
3943  
3944  <varlistentry>
3945   <term>Example usage:</term>
3946   <listitem>
3947     <literallayout>
3948      <emphasis>{+vanilla-wafer}</emphasis>
3949      <emphasis>.example.com</emphasis>
3950     </literallayout>
3951   </listitem>
3952  </varlistentry>
3953
3954  <varlistentry>
3955   <term>Notes:</term>
3956   <listitem>
3957    <para>
3958     This action only applies if you are using a <filename>jarfile</filename>
3959     for saving cookies. Of course, this is a (relatively) unique header and 
3960     could be used to track you.
3961    </para>
3962   </listitem>
3963  </varlistentry>
3964
3965 </variablelist>
3966 </sect4>
3967
3968
3969 <!--   ~~~~~       New section      ~~~~~     -->
3970 <sect4 id="wafer">
3971 <title><emphasis>+wafer</emphasis></title>
3972
3973 <variablelist>
3974  <varlistentry>
3975   <term>Type:</term>
3976   <!-- Boolean, Parameterized, Multi-value -->
3977   <listitem>
3978    <para>Multi-value.</para>
3979   </listitem>
3980  </varlistentry>
3981
3982  <varlistentry>
3983   <term>Typical uses:</term>
3984   <listitem>
3985    <para>
3986     This allows you to send an arbitrary, user definable cookie.
3987    </para>
3988   </listitem>
3989  </varlistentry>
3990
3991  <varlistentry>
3992   <term>Possible values:</term>
3993   <listitem>
3994    <para>
3995     User specified cookie name and corresponding value.
3996    </para>
3997   </listitem>
3998  </varlistentry>
3999  
4000  <varlistentry>
4001   <term>Example usage:</term>
4002   <listitem>
4003     <literallayout>
4004      <emphasis>{+wafer{name=value}}</emphasis>
4005      <emphasis>.example.com</emphasis>
4006     </literallayout>
4007   </listitem>
4008  </varlistentry>
4009
4010  <varlistentry>
4011   <term>Notes:</term>
4012   <listitem>
4013    <para>
4014     This can be specified multiple times in order to add as many cookies as you
4015     like.
4016    </para>
4017   </listitem>
4018  </varlistentry>
4019
4020 </variablelist>
4021 </sect4>
4022
4023
4024 <!--   ~~~~~       New section      ~~~~~     -->
4025 <sect4 id="act-examples" renderas="sect3">
4026 <title>Actions Examples</title>
4027 <para>
4028  Note that the meaning of any of the above examples is reversed by preceding
4029  the action with a <quote>-</quote>, in place of the <quote>+</quote>. Also, 
4030  that some actions are turned on in the default section of the actions file, 
4031  and require little to no additional configuration. These are just <quote>on</quote>.
4032  Some actions that are turned on the default section do typically require
4033  exceptions to be listed in the lower sections of actions file.
4034 </para>
4035
4036 <para>
4037  Some examples:
4038 </para>
4039
4040 <para>
4041  Turn off cookies by default, then allow a few through for specified sites:
4042 </para>
4043   
4044 <para>
4045  <literal>
4046   <msgtext> 
4047    <literallayout>
4048  # Turn off all persistent cookies
4049  { +no-cookies-read }
4050  { +no-cookies-set }
4051  
4052  # Allow cookies for this browser session ONLY
4053  { +no-cookies-keep }
4054
4055  # Exceptions to the above, sites that benefit from persistent cookies
4056  # that saved from one browser session to the next.
4057  { -no-cookies-read }
4058  { -no-cookies-set }
4059  { -no-cookies-keep }
4060  .javasoft.com
4061  .sun.com
4062  .yahoo.com
4063  .msdn.microsoft.com
4064  .redhat.com
4065
4066  # Alternative way of saying the same thing
4067  {-no-cookies-set -no-cookies-read -no-cookies-keep}
4068  .sourceforge.net
4069  .sf.net
4070    </literallayout>
4071   </msgtext> 
4072  </literal>
4073 </para>
4074
4075 <para>
4076  Now turn off <quote>fast redirects</quote>, and then we allow two exceptions:
4077 </para>
4078
4079 <para>
4080  <literal>
4081   <msgtext> 
4082    <literallayout>
4083  # Turn them off!
4084  {+fast-redirects}
4085  
4086  # Reverse it for these two sites, which don't work right without it.
4087  {-fast-redirects}
4088  www.ukc.ac.uk/cgi-bin/wac\.cgi\?
4089  login.yahoo.com
4090    </literallayout>
4091   </msgtext> 
4092  </literal>
4093 </para>
4094
4095 <para>
4096  Turn on page filtering according to rules in the defined sections 
4097  of <filename>default.filter</filename>, and make one exception for 
4098  Sourceforge:
4099  </para>
4100
4101 <para>
4102  <literal>
4103   <msgtext> 
4104    <literallayout>
4105  # Run everything through the filter file, using only the
4106  # specified sections:
4107  +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups}\
4108  +filter{webbugs} +filter{nimda} +filter{banners-by-size}
4109               
4110  # Then disable filtering of code from sourceforge!
4111  {-filter}
4112  .cvs.sourceforge.net
4113    </literallayout>
4114   </msgtext> 
4115  </literal>
4116 </para>
4117
4118 <para>
4119  Now some URLs that we want <quote>blocked</quote> (normally generates 
4120  the <quote>blocked</quote> banner). Many of these use 
4121  <link linkend="regex">regular expressions</link> that will expand to match
4122  multiple URLs: </para>
4123
4124 <para>
4125  <literal>
4126   <msgtext> 
4127    <literallayout>
4128   # Blocklist:
4129   {+block}
4130   /.*/(.*[-_.])?ads?[0-9]?(/|[-_.].*|\.(gif|jpe?g))
4131   /.*/(.*[-_.])?count(er)?(\.cgi|\.dll|\.exe|[?/])
4132   /.*/(ng)?adclient\.cgi
4133   /.*/(plain|live|rotate)[-_.]?ads?/
4134   /.*/(sponsor)s?[0-9]?/
4135   /.*/_?(plain|live)?ads?(-banners)?/
4136   /.*/abanners/
4137   /.*/ad(sdna_image|gifs?)/
4138   /.*/ad(server|stream|juggler)\.(cgi|pl|dll|exe)
4139   /.*/adbanners/
4140   /.*/adserver
4141   /.*/adstream\.cgi
4142   /.*/adv((er)?ts?|ertis(ing|ements?))?/
4143   /.*/banner_?ads/
4144   /.*/banners?/
4145   /.*/banners?\.cgi/
4146   /.*/cgi-bin/centralad/getimage
4147   /.*/images/addver\.gif
4148   /.*/images/marketing/.*\.(gif|jpe?g)
4149   /.*/popupads/
4150   /.*/siteads/
4151   /.*/sponsor.*\.gif
4152   /.*/sponsors?[0-9]?/
4153   /.*/advert[0-9]+\.jpg
4154   /Media/Images/Adds/
4155   /ad_images/
4156   /adimages/
4157   /.*/ads/
4158   /bannerfarm/
4159   /grafikk/annonse/
4160   /graphics/defaultAd/
4161   /image\.ng/AdType
4162   /image\.ng/transactionID
4163   /images/.*/.*_anim\.gif # alvin brattli
4164   /ip_img/.*\.(gif|jpe?g)
4165   /rotateads/
4166   /rotations/ 
4167   /worldnet/ad\.cgi
4168   /cgi-bin/nph-adclick.exe/
4169   /.*/Image/BannerAdvertising/
4170   /.*/ad-bin/
4171   /.*/adlib/server\.cgi
4172   /autoads/
4173    </literallayout>
4174   </msgtext> 
4175  </literal>
4176 </para>
4177
4178 <para>
4179  Note that many of these actions have the potential to cause a page to
4180  misbehave, possibly even not to display at all. There are many ways 
4181  a site designer may choose to design his site, and what HTTP header 
4182  content he may depend on. There is no way to have hard and fast rules 
4183  for all sites. See the <link linkend="ACTIONSANAT">Appendix</link>
4184  for a brief example on troubleshooting actions.
4185 </para>
4186 </sect4>
4187
4188 </sect3>
4189
4190 <!--  ~  End section  ~  -->
4191
4192
4193 <!--   ~~~~~       New section      ~~~~~     -->
4194 <sect3>
4195 <title>Aliases</title>
4196 <para>
4197  Custom <quote>actions</quote>, known to <application>Privoxy</application>
4198  as <quote>aliases</quote>, can be defined by combining other <quote>actions</quote>.
4199  These can in turn be invoked just like the built-in <quote>actions</quote>.
4200  Currently, an alias can contain any character except space, tab, <quote>=</quote>,
4201  <quote>{</quote> or <quote>}</quote>. But please use only <quote>a</quote>-
4202  <quote>z</quote>, <quote>0</quote>-<quote>9</quote>, <quote>+</quote>, and
4203  <quote>-</quote>. Alias names are not case sensitive, and 
4204  <emphasis>must be defined  before anything</emphasis> else in the
4205  <filename>default.action</filename>file! And there can only be one set of
4206  <quote>aliases</quote> defined.
4207 </para>
4208
4209 <para>
4210  Now let's define a few aliases:
4211 </para>
4212
4213 <para>
4214  <literal>
4215   <msgtext> 
4216    <literallayout>
4217  # Useful custom aliases we can use later. These must come first!
4218  {{alias}}
4219  +no-cookies = +no-cookies-set +no-cookies-read
4220  -no-cookies = -no-cookies-set -no-cookies-read
4221  fragile     = -block -no-cookies -filter -fast-redirects -hide-referer -no-popups
4222  shop        = -no-cookies -filter -fast-redirects
4223  +imageblock = +block +image
4224
4225  #For people who don't like to type too much:  ;-)
4226  c0 = +no-cookies
4227  c1 = -no-cookies
4228  c2 = -no-cookies-set +no-cookies-read
4229  c3 = +no-cookies-set -no-cookies-read
4230  #... etc.  Customize to your heart's content.
4231    </literallayout>
4232   </msgtext> 
4233  </literal>
4234 </para>
4235
4236 <para>
4237  Some examples using our <quote>shop</quote> and <quote>fragile</quote>
4238  aliases from above:
4239 </para>
4240
4241 <para>
4242  <literal>
4243   <msgtext> 
4244    <literallayout>
4245  # These sites are very complex and require
4246  # minimal interference.
4247  {fragile}
4248  .office.microsoft.com
4249  .windowsupdate.microsoft.com
4250  .nytimes.com
4251
4252  # Shopping sites - but we still want to block ads.
4253  {shop}
4254  .quietpc.com
4255  .worldpay.com   # for quietpc.com
4256  .jungle.com
4257  .scan.co.uk
4258
4259  # These shops require pop-ups also 
4260  {shop -no-popups}
4261  .dabs.com
4262  .overclockers.co.uk
4263    </literallayout>
4264   </msgtext> 
4265  </literal>
4266 </para>
4267
4268 <para>
4269  The <quote>shop</quote> and <quote>fragile</quote> aliases are often used for 
4270  <quote>problem</quote> sites that require most actions to be disabled 
4271  in order to function properly.
4272
4273 </para>
4274
4275 </sect3>
4276 </sect2>
4277
4278 <!--  ~  End section  ~  -->
4279
4280
4281 <!--   ~~~~~       New section      ~~~~~     -->
4282 <sect2 id="filterfile">
4283 <title>The Filter File</title>
4284 <para>
4285  Any web page can be dynamically modified with the filter file. This
4286  modification can be removal, or re-writing, of any web page content,
4287  including tags and non-visible content. The default filter file is
4288  <filename>default.filter</filename>, located in the config directory. 
4289 </para>
4290
4291 <para>
4292  This is potentially a very powerful feature, and requires knowledge of both 
4293  <quote>regular expression</quote> and HTML in order create custom 
4294  filters. But, there are a number of useful filters included with 
4295  <application>Privoxy</application> for many common situations.
4296 </para>
4297
4298 <para>
4299  The included example file is divided into sections. Each section begins 
4300  with the <literal>FILTER</literal> keyword, followed by the identifier 
4301  for that section, e.g. <quote>FILTER: webbugs</quote>. Each section performs
4302  a similar type of filtering, such as <quote>html-annoyances</quote>.
4303 </para>
4304
4305 <para>
4306  This file uses regular expressions to alter or remove any string in the
4307  target page. The expressions can only operate on one line at a time. Some
4308  examples from the included default <filename>default.filter</filename>:
4309 </para>
4310
4311 <para>
4312  Stop web pages from displaying annoying messages in the status bar by
4313  deleting such references:
4314 </para>
4315
4316 <para>
4317  <literal>
4318   <msgtext> 
4319    <literallayout>
4320  FILTER: html-annoyances
4321
4322  # New browser windows should be resizeable and have a location and status
4323  # bar. Make it so.
4324  #
4325  s/resizable="?(no|0)"?/resizable=1/ig s/noresize/yesresize/ig
4326  s/location="?(no|0)"?/location=1/ig s/status="?(no|0)"?/status=1/ig
4327  s/scrolling="?(no|0|Auto)"?/scrolling=1/ig
4328  s/menubar="?(no|0)"?/menubar=1/ig 
4329
4330  # The &lt;BLINK&gt; tag was a crime!
4331  #
4332  s*&lt;blink&gt;|&lt;/blink&gt;**ig
4333
4334  # Is this evil? 
4335  #
4336  #s/framespacing="?(no|0)"?//ig
4337  #s/margin(height|width)=[0-9]*//gi
4338    </literallayout>
4339   </msgtext> 
4340  </literal>
4341 </para>
4342
4343 <para>
4344  Just for kicks, replace any occurrence of <quote>Microsoft</quote> with
4345  <quote>MicroSuck</quote>, and have a little fun with topical buzzwords: 
4346 </para>
4347
4348 <para>
4349  <literal>
4350   <msgtext> 
4351    <literallayout>
4352  FILTER: fun
4353
4354  s/microsoft(?!.com)/MicroSuck/ig
4355
4356  # Buzzword Bingo:
4357  #
4358  s/industry-leading|cutting-edge|award-winning/&lt;font color=red&gt;&lt;b&gt;BINGO!&lt;/b&gt;&lt;/font&gt;/ig
4359    </literallayout>
4360   </msgtext> 
4361  </literal>
4362 </para>
4363
4364 <para>
4365  Kill those pesky little web-bugs:
4366 </para>
4367
4368 <para>
4369  <literal>
4370   <msgtext> 
4371    <literallayout>
4372  # webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking)
4373  FILTER: webbugs
4374
4375  s/&lt;img\s+[^&gt;]*?(width|height)\s*=\s*['"]?1\D[^&gt;]*?(width|height)\s*=\s*['"]?1(\D[^&gt;]*?)?>/&lt;!-- Squished WebBug --&gt;/sig
4376    </literallayout>
4377   </msgtext> 
4378  </literal>
4379 </para>
4380
4381 </sect2>
4382
4383 <!--  ~  End section  ~  -->
4384
4385
4386
4387 <!--   ~~~~~       New section      ~~~~~     -->
4388
4389 <sect2>
4390 <title>Templates</title>
4391 <para>
4392  When <application>Privoxy</application> displays one of its internal 
4393  pages, such as a 404 Not Found error page, it uses the appropriate template.
4394  On Linux, BSD, and Unix, these are located in
4395  <filename>/etc/privoxy/templates</filename> by default. These may be
4396  customized, if desired. <filename>cgi-style.css</filename> is 
4397  used to control the HTML attributes (fonts, etc).
4398 </para>
4399 <para>
4400  The default <quote>Blocked</quote> banner page with the bright red top 
4401  banner, is called just <quote><filename>blocked</filename></quote>. This 
4402  may be customized or replaced with something else if desired.
4403
4404 </para>
4405 </sect2>
4406
4407 </sect1>
4408
4409 <!--  ~  End section  ~  -->
4410
4411
4412
4413 <!--   ~~~~~       New section      ~~~~~     -->
4414
4415 <sect1 id="contact"><title>Contacting the Developers, Bug Reporting and Feature
4416 Requests</title>
4417
4418 <!-- Include contacting.sgml boilerplate: -->
4419  &contacting;
4420 <!-- end boilerplate -->
4421
4422
4423 <!--   ~~~~~       New section      ~~~~~     -->
4424 <sect2 id="submitactions">
4425 <title>Submitting Ads and <quote>Action</quote> Problems</title>
4426 <para>
4427  Ads and banners that are not stopped by <application>Privoxy</application> 
4428  can be submitted to the developers by accessing a special page and filling 
4429  out the brief, required form. Conversely, you can also report pages, images,
4430  etc. that <application>Privoxy</application> is blocking, but should not.
4431  The form itself does require Internet access.
4432 </para>
4433 <para>
4434  To do this, point your browser to <application>Privoxy</application> 
4435  at <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
4436  (shortcut: <ulink url="http://p.p/">http://p.p/</ulink>), and then select 
4437  <ulink url="javascript:w=Math.floor(screen.width/2);h=Math.floor(screen.height*0.9);void(window.open('http://www.privoxy.org/actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">Actions file feedback system</ulink>, 
4438  near the bottom of the page. Paste in the URL that is the cause of the 
4439  unwanted behavior, and follow the prompts. The developers will 
4440  try to incorporate a fix for the problem you reported into future versions.
4441 </para>
4442
4443 <para>
4444  New <filename>default.actions</filename> files will occasionally be made
4445  available based on your feedback. These 
4446  will be announced on the 
4447  <ulink
4448  url="http://lists.sourceforge.net/lists/listinfo/ijbswa-announce">ijbswa-announce</ulink>
4449  list.
4450 </para>
4451 </sect2>
4452
4453 </sect1>
4454
4455
4456 <!--   ~~~~~       New section      ~~~~~     -->
4457 <sect1 id="copyright"><title>Copyright and History</title>
4458
4459 <sect2><title>Copyright</title>
4460 <!-- Include copyright.sgml: -->
4461  &copyright;
4462 <!-- end copyright -->
4463 </sect2>
4464
4465 <!--  ~  End section  ~  -->
4466
4467
4468 <!--   ~~~~~       New section      ~~~~~     -->
4469
4470 <sect2 id="history"><title>History</title>
4471 <!-- Include history.sgml: -->
4472  &history;
4473 <!-- end history -->
4474 </sect2>
4475 </sect1>
4476
4477 <!--   ~~~~~       New section      ~~~~~     -->
4478 <sect1 id="seealso"><title>See Also</title>
4479 <!-- Include seealso.sgml: -->
4480  &seealso;
4481 <!-- end seealso -->
4482 </sect1>
4483
4484
4485
4486 <!--   ~~~~~       New section      ~~~~~     -->
4487 <sect1 id="appendix"><title>Appendix</title>
4488
4489
4490 <!--   ~~~~~       New section      ~~~~~     -->
4491 <sect2 id="regex">
4492 <title>Regular Expressions</title>
4493 <para>
4494  <application>Privoxy</application> can use <quote>regular expressions</quote> 
4495  in various config files. Assuming support for <quote>pcre</quote> (Perl
4496  Compatible Regular Expressions) is compiled in, which is the default. Such
4497  configuration directives do not require regular expressions, but they can be
4498  used to increase flexibility by matching a pattern with wild-cards against
4499  URLs.
4500 </para>
4501
4502 <para>
4503  If you are reading this, you probably don't understand what <quote>regular
4504  expressions</quote> are, or what they can do. So this will be a very brief
4505  introduction only. A full explanation would require a book ;-)
4506 </para>
4507
4508 <para>
4509  <quote>Regular expressions</quote> is a way of matching one character
4510  expression against another to see if it matches or not. One of the
4511  <quote>expressions</quote> is a literal string of readable characters
4512  (letter, numbers, etc), and the other is a complex string of literal
4513  characters combined with wild-cards, and other special characters, called
4514  meta-characters. The <quote>meta-characters</quote> have special meanings and
4515  are used to build the complex pattern to be matched against. Perl Compatible
4516  Regular Expressions is an enhanced form of the regular expression language
4517  with backward compatibility.
4518 </para>
4519
4520 <para>
4521  To make a simple analogy, we do something similar when we use wild-card
4522  characters when listing files with the <command>dir</command> command in DOS. 
4523  <literal>*.*</literal> matches all filenames. The <quote>special</quote>
4524  character here is the asterisk which matches any and all characters. We can be
4525  more specific and use <literal>?</literal> to match just individual
4526  characters. So <quote>dir file?.text</quote> would match
4527  <quote>file1.txt</quote>, <quote>file2.txt</quote>, etc. We are pattern
4528  matching, using a similar technique to <quote>regular expressions</quote>!
4529 </para>
4530
4531 <para>
4532  Regular expressions do essentially the same thing, but are much, much more
4533  powerful. There are many more <quote>special characters</quote> and ways of 
4534  building complex patterns however. Let's look at a few of the common ones,
4535  and then some examples:
4536 </para>
4537
4538 <para><simplelist>
4539  <member>
4540   <emphasis>.</emphasis> - Matches any single character, e.g. <quote>a</quote>,
4541   <quote>A</quote>, <quote>4</quote>, <quote>:</quote>, or <quote>@</quote>.
4542  </member>
4543 </simplelist></para>
4544
4545 <para><simplelist>
4546  <member>
4547   <emphasis>?</emphasis> - The preceding character or expression is matched ZERO or ONE
4548   times. Either/or.
4549  </member>
4550 </simplelist></para>
4551
4552 <para><simplelist>
4553  <member>
4554   <emphasis>+</emphasis> - The preceding character or expression is matched ONE or MORE
4555   times.
4556  </member>
4557 </simplelist></para>
4558
4559 <para><simplelist>
4560  <member>
4561   <emphasis>*</emphasis> - The preceding character or expression is matched ZERO or MORE
4562   times.
4563  </member>
4564 </simplelist></para>
4565
4566 <para><simplelist>
4567  <member>
4568   <emphasis>\</emphasis> - The <quote>escape</quote> character denotes that
4569   the following character should be taken literally. This is used where one of the 
4570   special characters (e.g. <quote>.</quote>) needs to be taken literally and
4571   not as a special meta-character. Example: <quote>example\.com</quote>, makes 
4572   sure the period is recognized only as a period (and not expanded to its 
4573   metacharacter meaning of any single character).
4574  </member>
4575 </simplelist></para>
4576
4577 <para><simplelist>
4578  <member>
4579   <emphasis>[]</emphasis> - Characters enclosed in brackets will be matched if
4580   any of the enclosed characters are encountered. For instance, <quote>[0-9]</quote>
4581   matches any numeric digit (zero through nine). As an example, we can combine 
4582   this with <quote>+</quote> to match any digit one of more times: <quote>[0-9]+</quote>.
4583  </member>
4584 </simplelist></para>
4585
4586 <para><simplelist>
4587  <member>
4588   <emphasis>()</emphasis> - parentheses are used to group a sub-expression,
4589   or multiple sub-expressions.
4590  </member>
4591 </simplelist></para>
4592
4593 <para><simplelist>
4594  <member>
4595   <emphasis>|</emphasis> - The <quote>bar</quote> character works like an
4596   <quote>or</quote> conditional statement. A match is successful if the
4597   sub-expression on either side of <quote>|</quote> matches. As an example:
4598   <quote>/(this|that) example/</quote> uses grouping and the bar character 
4599   and would match either <quote>this example</quote> or <quote>that
4600   example</quote>, and nothing else.
4601  </member>
4602 </simplelist></para>
4603
4604 <para><simplelist>
4605  <member>
4606   <emphasis>s/string1/string2/g</emphasis> - This is used to rewrite strings of text. 
4607   <quote>string1</quote> is replaced by <quote>string2</quote> in this
4608   example. There must of course be a match on <quote>string1</quote> first.
4609  </member>
4610 </simplelist></para>
4611
4612 <para>
4613  These are just some of the ones you are likely to use when matching URLs with 
4614  <application>Privoxy</application>, and is a long way from a definitive
4615  list. This is enough to get us started with a few simple examples which may
4616  be more illuminating:
4617 </para>
4618
4619 <para>
4620  <emphasis><literal>/.*/banners/.*</literal></emphasis> - A  simple example
4621  that uses the common combination of <quote>.</quote> and <quote>*</quote> to 
4622  denote any character, zero or more times. In other words, any string at all.
4623  So we start with a literal forward slash, then our regular expression pattern 
4624  (<quote>.*</quote>) another literal forward slash, the string
4625  <quote>banners</quote>, another forward slash, and lastly another
4626  <quote>.*</quote>. We are building 
4627  a directory path here. This will match any file with the path that has a
4628  directory named <quote>banners</quote> in it. The <quote>.*</quote> matches
4629  any characters, and this could conceivably be more forward slashes, so it
4630  might expand into a much longer looking path. For example, this could match:
4631  <quote>/eye/hate/spammers/banners/annoy_me_please.gif</quote>, or just
4632  <quote>/banners/annoying.html</quote>, or almost an infinite number of other
4633  possible combinations, just so it has <quote>banners</quote> in the path
4634  somewhere.
4635 </para>
4636
4637 <para>
4638  A now something a little more complex:
4639 </para>
4640
4641 <para>
4642  <emphasis><literal>/.*/adv((er)?ts?|ertis(ing|ements?))?/</literal></emphasis> - 
4643  We have several literal forward slashes again (<quote>/</quote>), so we are
4644  building another expression that is a file path statement. We have another 
4645  <quote>.*</quote>, so we are matching against any conceivable sub-path, just so
4646  it matches our expression. The only true literal that <emphasis>must
4647  match</emphasis> our pattern is <application>adv</application>, together with
4648  the forward slashes. What comes after the <quote>adv</quote> string is the
4649  interesting part. 
4650 </para>
4651
4652 <para>
4653  Remember the <quote>?</quote> means the preceding expression (either a
4654  literal character or anything grouped with <quote>(...)</quote> in this case)
4655  can exist or not, since this means either zero or one match. So
4656  <quote>((er)?ts?|ertis(ing|ements?))</quote> is optional, as are the
4657  individual sub-expressions: <quote>(er)</quote>,
4658  <quote>(ing|ements?)</quote>, and the <quote>s</quote>. The <quote>|</quote>
4659  means <quote>or</quote>. We have two of those. For instance, 
4660  <quote>(ing|ements?)</quote>, can expand to match either <quote>ing</quote> 
4661  <emphasis>OR</emphasis> <quote>ements?</quote>. What is being done here, is an
4662  attempt at matching as many variations of <quote>advertisement</quote>, and 
4663  similar, as possible. So this would expand to match just <quote>adv</quote>,
4664  or <quote>advert</quote>, or <quote>adverts</quote>, or
4665  <quote>advertising</quote>, or <quote>advertisement</quote>, or
4666  <quote>advertisements</quote>. You get the idea. But it would not match 
4667  <quote>advertizements</quote> (with a <quote>z</quote>). We could fix that by
4668  changing our regular expression to: 
4669  <quote>/.*/adv((er)?ts?|erti(s|z)(ing|ements?))?/</quote>, which would then match
4670  either spelling.
4671 </para>
4672
4673 <para>
4674  <emphasis><literal>/.*/advert[0-9]+\.(gif|jpe?g)</literal></emphasis> - Again 
4675  another path statement with forward slashes. Anything in the square brackets 
4676  <quote>[]</quote> can be matched. This is using <quote>0-9</quote> as a
4677  shorthand expression to mean any digit one through nine. It is the same as
4678  saying <quote>0123456789</quote>. So any digit matches. The <quote>+</quote>
4679  means one or more of the preceding expression must be included. The preceding 
4680  expression here is what is in the square brackets -- in this case, any digit 
4681  one through nine. Then, at the end, we have a grouping: <quote>(gif|jpe?g)</quote>. 
4682  This includes a <quote>|</quote>, so this needs to match the expression on
4683  either side of that bar character also. A simple <quote>gif</quote> on one side, and the other
4684  side will in turn match either <quote>jpeg</quote> or <quote>jpg</quote>,
4685  since the <quote>?</quote> means the letter <quote>e</quote> is optional and
4686  can be matched once or not at all. So we are building an expression here to
4687  match image GIF or JPEG type image file. It must include the literal
4688  string <quote>advert</quote>, then one or more digits, and a <quote>.</quote>
4689  (which is now a literal, and not a special character, since it is escaped
4690  with <quote>\</quote>), and lastly either <quote>gif</quote>, or
4691  <quote>jpeg</quote>, or <quote>jpg</quote>. Some possible matches would
4692  include: <quote>//advert1.jpg</quote>,
4693  <quote>/nasty/ads/advert1234.gif</quote>,
4694  <quote>/banners/from/hell/advert99.jpg</quote>. It would not match
4695  <quote>advert1.gif</quote> (no leading slash), or
4696  <quote>/adverts232.jpg</quote> (the expression does not include an
4697  <quote>s</quote>), or <quote>/advert1.jsp</quote> (<quote>jsp</quote> is not
4698  in the expression anywhere).
4699 </para>
4700
4701 <para>
4702  <emphasis><literal>s/microsoft(?!.com)/MicroSuck/i</literal></emphasis> - This is 
4703  a substitution. <quote>MicroSuck</quote> will replace any occurrence of 
4704  <quote>microsoft</quote>.  The <quote>i</quote> at the end of the expression
4705  means ignore case. The <quote>(?!.com)</quote> means 
4706  the match should fail if <quote>microsoft</quote> is followed by
4707  <quote>.com</quote>. In other words, this acts like a <quote>NOT</quote>
4708  modifier. In case this is a hyperlink, we don't want to break it ;-).
4709 </para>
4710
4711 <para>
4712  We are barely scratching the surface of regular expressions here so that you
4713  can understand the default <application>Privoxy</application>
4714  configuration files, and maybe use this knowledge to customize your own
4715  installation. There is much, much more that can be done with regular
4716  expressions. Now that you know enough to get started, you can learn more on
4717  your own :/
4718 </para>
4719
4720 <para>
4721  More reading on Perl Compatible Regular expressions: 
4722  <ulink url="http://www.perldoc.com/perl5.6/pod/perlre.html">http://www.perldoc.com/perl5.6/pod/perlre.html</ulink>
4723 </para>
4724
4725 </sect2>
4726
4727 <!--  ~  End section  ~  -->
4728
4729
4730 <!--   ~~~~~       New section      ~~~~~     -->
4731 <sect2>
4732 <title><application>Privoxy</application>'s Internal Pages</title>
4733
4734 <para>
4735  Since <application>Privoxy</application> proxies each requested 
4736  web page, it is easy for <application>Privoxy</application> to 
4737  trap certain special URLs. In this way, we can talk directly to
4738  <application>Privoxy</application>, and see how it is 
4739  configured, see how our rules are being applied, change these 
4740  rules and other configuration options, and even turn
4741  <application>Privoxy's</application> filtering off, all with 
4742  a web browser.
4743
4744 </para>
4745
4746 <para>
4747  The URLs listed below are the special ones that allow direct access 
4748  to <application>Privoxy</application>. Of course,
4749  <application>Privoxy</application> must be running to access these. If 
4750  not, you will get a friendly error message. Internet access is not 
4751  necessary either.
4752 </para>
4753
4754 <para>
4755  <itemizedlist>
4756
4757  <listitem>
4758   <para>  
4759    Privoxy main page: 
4760   </para>
4761   <blockquote>
4762    <para> 
4763      <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
4764    </para>
4765   </blockquote>
4766   <para>
4767    Alternately, this may be reached at <ulink
4768    url="http://p.p/">http://p.p/</ulink>, but this
4769    variation may not work as reliably as the above in some configurations.
4770   </para>
4771  </listitem>
4772
4773  <listitem>
4774   <para>  
4775     Show information about the current configuration: 
4776   </para>
4777    <blockquote>
4778    <para> 
4779     <ulink url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
4780    </para>
4781   </blockquote>
4782  </listitem>
4783  
4784  <listitem>
4785   <para>  
4786     Show the source code version numbers:
4787   </para>
4788   <blockquote>
4789    <para> 
4790     <ulink url="http://config.privoxy.org/show-version">http://config.privoxy.org/show-version</ulink>
4791    </para>
4792   </blockquote>
4793  </listitem>
4794  
4795  <listitem>
4796   <para>  
4797    Show the client's request headers:
4798   </para>
4799   <blockquote>
4800    <para> 
4801     <ulink url="http://config.privoxy.org/show-request">http://config.privoxy.org/show-request</ulink>
4802    </para>
4803   </blockquote>
4804  </listitem>
4805  
4806  <listitem>
4807   <para>  
4808    Show which actions apply to a URL and why:
4809   </para>
4810    <blockquote>
4811    <para> 
4812     <ulink url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>
4813    </para>
4814   </blockquote>
4815  </listitem>
4816  
4817  <listitem>
4818   <para>  
4819    Toggle Privoxy on or off. In this case, <quote>Privoxy</quote> continues 
4820    to run, but only as a pass-through proxy, with no actions taking place:
4821   </para>
4822    <blockquote>
4823    <para> 
4824     <ulink url="http://config.privoxy.org/toggle">http://config.privoxy.org/toggle</ulink>
4825    </para>
4826   </blockquote>
4827   <para>
4828    Short cuts. Turn off, then on: 
4829   </para>
4830    <blockquote>
4831    <para> 
4832      <ulink url="http://config.privoxy.org/toggle?set=disable">http://config.privoxy.org/toggle?set=disable</ulink>
4833    </para>
4834   </blockquote>
4835    <blockquote>
4836    <para> 
4837      <ulink url="http://config.privoxy.org/toggle?set=enable">http://config.privoxy.org/toggle?set=enable</ulink>
4838    </para>
4839   </blockquote>
4840  </listitem>
4841
4842  <listitem>
4843   <para>  
4844    Edit the actions list file:
4845   </para>
4846    <blockquote>
4847    <para> 
4848     <ulink url="http://config.privoxy.org/edit-actions">http://config.privoxy.org/edit-actions</ulink>
4849    </para>
4850   </blockquote>
4851  </listitem>
4852  
4853  </itemizedlist>
4854 </para>
4855
4856 <para>
4857  These may be bookmarked for quick reference. See next.
4858
4859 </para>
4860
4861 <sect3 id="bookmarklets">
4862 <title>Bookmarklets</title>
4863 <para>
4864  Below are some <quote>bookmarklets</quote> to allow you to easily access a
4865  <quote>mini</quote> version of some of <application>Privoxy's</application>
4866  special pages. They are designed for MS Internet Explorer, but should work
4867  equally well in Netscape, Mozilla, and other browsers which support
4868  JavaScript. They are designed to run directly from your bookmarks - not by
4869  clicking the links below (although that should work for testing).
4870 </para>
4871 <para>
4872  To save them, right-click the link and choose <quote>Add to Favorites</quote>
4873  (IE) or <quote>Add Bookmark</quote> (Netscape). You will get a warning that
4874  the bookmark <quote>may not be safe</quote> - just click OK. Then you can run the
4875  Bookmarklet directly from your favorites/bookmarks. For even faster access,
4876  you can put them on the <quote>Links</quote> bar (IE) or the <quote>Personal
4877  Toolbar</quote> (Netscape), and run them with a single click. 
4878 </para>
4879
4880 <para>
4881  <itemizedlist>
4882
4883   <listitem>
4884    <para>
4885     <ulink url="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&#38;set=enabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">Enable Privoxy</ulink>
4886    </para>
4887   </listitem> 
4888
4889   <listitem>
4890    <para>
4891     <ulink url="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&#38;set=disabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">Disable Privoxy</ulink>
4892    </para>
4893   </listitem> 
4894
4895   <listitem>
4896    <para>
4897     <ulink url="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&#38;set=toggle','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">Toggle Privoxy</ulink> (Toggles between enabled and disabled)
4898    </para>
4899   </listitem> 
4900
4901   <listitem>
4902    <para>
4903     <ulink url="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y','ijbstatus','width=250,height=2,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">View Privoxy Status</ulink>
4904    </para>
4905   </listitem> 
4906
4907   <listitem>
4908    <para>
4909     <ulink url="javascript:w=Math.floor(screen.width/2);h=Math.floor(screen.height*0.9);void(window.open('http://www.privoxy.org/actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">Actions file feedback system</ulink>
4910    </para>
4911   </listitem> 
4912
4913  </itemizedlist>
4914 </para>
4915
4916
4917
4918 <para>
4919  Credit: The site which gave me the general idea for these bookmarklets is
4920  <ulink url="http://www.bookmarklets.com">www.bookmarklets.com</ulink>. They
4921  have more information about bookmarklets. 
4922 </para>
4923
4924
4925 </sect3>
4926
4927 </sect2>
4928
4929
4930 <!--   ~~~~~       New section      ~~~~~     -->
4931 <sect2 id="actionsanat">
4932 <title>Anatomy of an Action</title>
4933
4934 <para>
4935  The way <application>Privoxy</application> applies <quote>actions</quote>
4936  and <quote>filters</quote> to any given URL can be complex, and not always so
4937  easy to understand what is happening. And sometimes we need to be able to
4938  <emphasis>see</emphasis> just what <application>Privoxy</application> is
4939  doing. Especially, if something <application>Privoxy</application> is doing
4940  is causing us a problem inadvertently. It can be a little daunting to look at
4941  the actions and filters files themselves, since they tend to be filled with
4942  <quote>regular expressions</quote> whose consequences are not always 
4943  so obvious. 
4944 </para>
4945
4946 <para>
4947  One quick test to see if <application>Privoxy</application> is causing a problem 
4948  or not, is to disable it temporarily. This should be the first troubleshooting 
4949  step. See <link linkend="bookmarklets">the Bookmarklets</link> section on a quick 
4950  and easy way to do this (be sure to flush caches afterwards!).
4951 </para>
4952
4953 <para>
4954  <application>Privoxy</application> also provides the 
4955  <ulink url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>
4956  page that can show us very specifically how <application>actions</application>
4957  are being applied to any given URL. This is a big help for troubleshooting.
4958 </para>
4959
4960 <para>
4961  First, enter one URL (or partial URL) at the prompt, and then
4962  <application>Privoxy</application> will tell us 
4963  how the current configuration will handle it. This will not
4964  help with filtering effects from the <filename>default.filter</filename> file! It
4965  also will not tell you about any other URLs that may be embedded within the
4966  URL you are testing (i.e. a web page). For instance, images such as ads are expressed as URLs
4967  within the raw page source of HTML pages. So you will only get info for the
4968  actual URL that is pasted into the prompt area -- not any sub-URLs. If you
4969  want to know about embedded URLs like ads, you will have to dig those out of
4970  the HTML source. Use your browser's <quote>View Page Source</quote> option
4971  for this. Or right click on the ad, and grab the URL.
4972 </para>
4973
4974 <para>
4975  Let's look at an example, <ulink url="http://google.com">google.com</ulink>, 
4976  one section at a time:
4977 </para>
4978
4979 <para>
4980  <screen>
4981  System default actions:
4982
4983  { -add-header -block -deanimate-gifs -downgrade -fast-redirects -filter 
4984    -hide-forwarded -hide-from -hide-referer -hide-user-agent -image 
4985    -image-blocker -limit-connect -no-compression -no-cookies-keep 
4986    -no-cookies-read -no-cookies-set -no-popups -vanilla-wafer -wafer }
4987  
4988  </screen>
4989 </para>
4990
4991 <para>
4992  This is the top section, and only tells us of the compiled in defaults. This 
4993  is basically what <application>Privoxy</application> would do if there 
4994  were not any <quote>actions</quote> defined, i.e. it does nothing. Every action 
4995  is disabled. This is not particularly informative for our purposes here. OK,
4996  next section:
4997 </para>
4998
4999 <para>
5000  <screen>
5001
5002  Matches for http://google.com:
5003
5004  { -add-header -block +deanimate-gifs -downgrade +fast-redirects 
5005    +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups} 
5006    +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
5007    +filter{fun} +hide-forwarded +hide-from{block} +hide-referer{forge} 
5008    -hide-user-agent -image +image-blocker{blank} +no-compression 
5009    +no-cookies-keep -no-cookies-read -no-cookies-set +no-popups 
5010    -vanilla-wafer -wafer }
5011    /
5012
5013  { -no-cookies-keep -no-cookies-read -no-cookies-set }
5014   .google.com
5015
5016  { -fast-redirects }
5017   .google.com
5018
5019  </screen>
5020 </para>
5021
5022 <para>
5023  This is much more informative, and tells us how we have defined our 
5024  <quote>actions</quote>, and which ones match for our example, 
5025  <quote>google.com</quote>. The first grouping shows our default 
5026  settings, which would apply to all URLs. If you look at your <quote>actions</quote>
5027  file, this would be the section just below the <quote>aliases</quote> section 
5028  near the top. This applies to all URLs as signified by the single forward
5029  slash -- <quote>/</quote>.
5030  
5031 </para>
5032
5033 <para>
5034  These are the default actions we have enabled. But we can define additional
5035  actions that would be exceptions to these general rules, and then list 
5036  specific URLs that these exceptions would apply to. Last match wins.
5037  Just below this then are two explicit matches for <quote>.google.com</quote>.
5038  The first is negating our various cookie blocking actions (i.e. we will allow
5039  cookies here). The second is allowing <quote>fast-redirects</quote>. Note
5040  that there is a leading dot here -- <quote>.google.com</quote>. This will
5041  match any hosts and sub-domains, in the google.com domain also, such as
5042  <quote>www.google.com</quote>. So, apparently, we have these actions defined
5043  somewhere in the lower part of our actions file, and
5044  <quote>google.com</quote> is referenced in these sections.
5045
5046 </para>
5047
5048 <para>
5049  And now we pull it altogether in the bottom section and summarize how
5050  <application>Privoxy</application> is applying all its <quote>actions</quote> 
5051  to <quote>google.com</quote>:
5052
5053 </para>
5054
5055 <para>
5056  <screen>
5057
5058  Final results:
5059
5060  -add-header -block -deanimate-gifs -downgrade -fast-redirects 
5061  +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups} 
5062  +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
5063  +filter{fun} +hide-forwarded +hide-from{block} +hide-referer{forge} 
5064  -hide-user-agent -image +image-blocker{blank} -limit-connect +no-compression 
5065  -no-cookies-keep -no-cookies-read -no-cookies-set +no-popups -vanilla-wafer 
5066  -wafer
5067
5068  </screen>
5069 </para>
5070
5071 <para>
5072  Now another example, <quote>ad.doubleclick.net</quote>:
5073 </para>
5074
5075 <para>
5076  <screen>
5077
5078  { +block +image }
5079   .ad.doubleclick.net
5080
5081  { +block +image }
5082   ad*.
5083
5084  { +block +image }
5085   .doubleclick.net
5086
5087  </screen>
5088 </para>
5089
5090 <para>
5091  We'll just show the interesting part here, the explicit matches. It is 
5092  matched three different times. Each as an <quote>+block +image</quote>,
5093  which is the expanded form of one of our aliases that had been defined as: 
5094  <quote>+imageblock</quote>. (<quote>Aliases</quote> are defined in the 
5095  first section of the actions file and typically used to combine more 
5096  than one action.)
5097 </para>
5098
5099 <para>
5100  Any one of these would have done the trick and blocked this as an unwanted 
5101  image. This is unnecessarily redundant since the last case effectively 
5102  would also cover the first. No point in taking chances with these guys 
5103  though ;-) Note that if you want an ad or obnoxious 
5104  URL to be invisible, it should be defined as <quote>ad.doubleclick.net</quote>
5105  is done here -- as both a <quote>+block</quote> <emphasis>and</emphasis> an
5106  <quote>+image</quote>. The custom alias <quote>+imageblock</quote> does this
5107  for us.
5108 </para>
5109
5110 <para>
5111  One last example. Let's try <quote>http://www.rhapsodyk.net/adsl/HOWTO/</quote>.
5112  This one is giving us problems. We are getting a blank page. Hmmm...
5113 </para>
5114
5115 <para>
5116  <screen>
5117
5118  Matches for http://www.rhapsodyk.net/adsl/HOWTO/:
5119
5120  { -add-header -block +deanimate-gifs -downgrade +fast-redirects 
5121    +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups} 
5122    +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
5123    +filter{fun} +hide-forwarded +hide-from{block} +hide-referer{forge} 
5124    -hide-user-agent -image +image-blocker{blank} +no-compression 
5125    +no-cookies-keep -no-cookies-read -no-cookies-set +no-popups 
5126    -vanilla-wafer -wafer }
5127    /
5128
5129  { +block +image }
5130   /ads
5131
5132  </screen>
5133 </para>
5134
5135 <para>
5136  Ooops, the <quote>/adsl/</quote> is matching <quote>/ads</quote>! But 
5137  we did not want this at all! Now we see why we get the blank page. We could
5138  now add a new action below this that explicitly does <emphasis>not</emphasis>
5139  block (-block) pages with <quote>adsl</quote>. There are various ways to
5140  handle such exceptions. Example:
5141 </para>
5142
5143 <para>
5144  <screen>
5145
5146  { -block }
5147   /adsl
5148  
5149  </screen>
5150 </para>
5151
5152 <para>
5153  Now the page displays ;-) Be sure to flush your browser's caches when 
5154  making such changes. Or, try using <literal>Shift+Reload</literal>.
5155 </para>
5156
5157 <para>
5158  But now what about a situation where we get no explicit matches like 
5159  we did with:
5160 </para>
5161
5162 <para>
5163  <screen>
5164
5165  { -block }
5166   /adsl
5167  
5168  </screen>
5169 </para>
5170
5171 <para>
5172  That actually was very telling and pointed us quickly to where the problem
5173  was. If you don't get this kind of match, then it means one of the default 
5174  rules in the first section is causing the problem. This would require some 
5175  guesswork, and maybe a little trial and error to isolate the offending rule.
5176  One likely cause would be one of the <quote>{+filter}</quote> actions. Try 
5177  adding the URL for the site to one of aliases that turn off <quote>+filter</quote>:
5178 </para>
5179
5180 <para>
5181  <screen>
5182
5183  {shop}
5184  .quietpc.com
5185  .worldpay.com   # for quietpc.com
5186  .jungle.com
5187  .scan.co.uk
5188  .forbes.com
5189  
5190  </screen>
5191 </para>
5192
5193 <para>
5194  <quote>{shop}</quote> is an <quote>alias</quote> that expands to 
5195  <quote>{ -filter -no-cookies -no-cookies-keep }</quote>. Or you could do 
5196  your own exception to negate filtering:
5197
5198 </para>
5199
5200 <para>
5201  <screen>
5202
5203  {-filter}
5204  .forbes.com
5205  
5206  </screen>
5207 </para>
5208
5209 <para>
5210  <quote>{fragile}</quote> is an alias that disables most actions. This can be 
5211  used as a last resort for problem sites. Remember to flush caches! If this 
5212  still does not work, you will have to go through the remaining actions one by
5213  one to find which one(s) is causing the problem.
5214 </para>
5215
5216 </sect2>
5217
5218 </sect1>
5219
5220  <!--
5221
5222  This program is free software; you can redistribute it 
5223  and/or modify it under the terms of the GNU General
5224  Public License as published by the Free Software
5225  Foundation; either version 2 of the License, or (at
5226  your option) any later version.
5227
5228  This program is distributed in the hope that it will
5229  be useful, but WITHOUT ANY WARRANTY; without even the
5230  implied warranty of MERCHANTABILITY or FITNESS FOR A
5231  PARTICULAR PURPOSE.  See the GNU General Public
5232  License for more details.
5233
5234  The GNU General Public License should be included with
5235  this file.  If not, you can view it at
5236  http://www.gnu.org/copyleft/gpl.html
5237  or write to the Free Software Foundation, Inc., 59
5238  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
5239
5240  $Log: user-manual.sgml,v $
5241  Revision 1.89  2002/04/23 21:05:28  oes
5242  Added hint for startup on Red Hat
5243
5244  Revision 1.88  2002/04/23 05:37:54  hal9
5245  Add AmigaOS install stuff.
5246
5247  Revision 1.87  2002/04/23 02:53:15  david__schmidt
5248  Updated OSX installation section
5249  Added a few English tweaks here an there
5250
5251  Revision 1.86  2002/04/21 01:46:32  hal9
5252  Re-write actions section.
5253
5254  Revision 1.85  2002/04/18 21:23:23  hal9
5255  Fix ugly typo (mine).
5256
5257  Revision 1.84  2002/04/18 21:17:13  hal9
5258  Spell Redhat correctly (ie Red Hat). A few minor grammar corrections.
5259
5260  Revision 1.83  2002/04/18 18:21:12  oes
5261  Added RPM install detail
5262
5263  Revision 1.82  2002/04/18 12:04:50  oes
5264  Cosmetics
5265
5266  Revision 1.81  2002/04/18 11:50:24  oes
5267  Extended Install section - needs fixing by packagers
5268
5269  Revision 1.80  2002/04/18 10:45:19  oes
5270  Moved text to buildsource.sgml, renamed some filters, details
5271
5272  Revision 1.79  2002/04/18 03:18:06  hal9
5273  Spellcheck, and minor touchups.
5274
5275  Revision 1.78  2002/04/17 18:04:16  oes
5276  Proofreading part 2
5277
5278  Revision 1.77  2002/04/17 13:51:23  oes
5279  Proofreading, part one
5280
5281  Revision 1.76  2002/04/16 04:25:51  hal9
5282  -Added 'Note to Upgraders' and re-ordered the 'Quickstart' section.
5283  -Note about proxy may need requests to re-read config files.
5284
5285  Revision 1.75  2002/04/12 02:08:48  david__schmidt
5286  Remove OS/2 building info... it is already in the developer-manual
5287
5288  Revision 1.74  2002/04/11 00:54:38  hal9
5289  Add small section on submitting actions.
5290
5291  Revision 1.73  2002/04/10 18:45:15  swa
5292  generated
5293
5294  Revision 1.72  2002/04/10 04:06:19  hal9
5295  Added actions feedback  to Bookmarklets section
5296
5297  Revision 1.71  2002/04/08 22:59:26  hal9
5298  Version update. Spell chkconfig correctly :)
5299
5300  Revision 1.70  2002/04/08 20:53:56  swa
5301  ?
5302
5303  Revision 1.69  2002/04/06 05:07:29  hal9
5304  -Add privoxy-man-page.sgml, for man page.
5305  -Add authors.sgml for AUTHORS (and p-authors.sgml)
5306  -Reworked various aspects of various docs.
5307  -Added additional comments to sub-docs.
5308
5309  Revision 1.68  2002/04/04 18:46:47  swa
5310  consistent look. reuse of copyright, history et. al.
5311
5312  Revision 1.67  2002/04/04 17:27:57  swa
5313  more single file to be included at multiple points. make maintaining easier
5314
5315  Revision 1.66  2002/04/04 06:48:37  hal9
5316  Structural changes to allow for conditional inclusion/exclusion of content
5317  based on entity toggles, e.g. 'entity % p-not-stable  "INCLUDE"'. And
5318  definition of internal entities, e.g. 'entity p-version "2.9.13"' that will
5319  eventually be set by Makefile.
5320  More boilerplate text for use across multiple docs.
5321
5322  Revision 1.65  2002/04/03 19:52:07  swa
5323  enhance squid section due to user suggestion
5324
5325  Revision 1.64  2002/04/03 03:53:43  hal9
5326  A few minor bug fixes, and touch ups. Ready for review.
5327
5328  Revision 1.63  2002/04/01 16:24:49  hal9
5329  Define entities to include boilerplate text. See doc/source/*.
5330
5331  Revision 1.62  2002/03/30 04:15:53  hal9
5332  - Fix privoxy.org/config links.
5333  - Paste in Bookmarklets from Toggle page.
5334  - Move Quickstart nearer top, and minor rework.
5335
5336  Revision 1.61  2002/03/29 01:31:08  hal9
5337  Minor update.
5338
5339  Revision 1.60  2002/03/27 01:57:34  hal9
5340  Added more to Anatomy section.
5341
5342  Revision 1.59  2002/03/27 00:54:33  hal9
5343  Touch up intro for new name.
5344
5345  Revision 1.58  2002/03/26 22:29:55  swa
5346  we have a new homepage!
5347
5348  Revision 1.57  2002/03/24 20:33:30  hal9
5349  A few minor catch ups with name change.
5350
5351  Revision 1.56  2002/03/24 16:17:06  swa
5352  configure needs to be generated.
5353
5354  Revision 1.55  2002/03/24 16:08:08  swa
5355  we are too lazy to make a block-built
5356  privoxy logo. hence removed the option.
5357
5358  Revision 1.54  2002/03/24 15:46:20  swa
5359  name change related issue.
5360
5361  Revision 1.53  2002/03/24 11:51:00  swa
5362  name change. changed filenames.
5363
5364  Revision 1.52  2002/03/24 11:01:06  swa
5365  name change
5366
5367  Revision 1.51  2002/03/23 15:13:11  swa
5368  renamed every reference to the old name with foobar.
5369  fixed "application foobar application" tag, fixed
5370  "the foobar" with "foobar". left junkbustser in cvs
5371  comments and remarks to history untouched.
5372
5373  Revision 1.50  2002/03/23 05:06:21  hal9
5374  Touch up.
5375
5376  Revision 1.49  2002/03/21 17:01:05  hal9
5377  New section in Appendix.
5378
5379  Revision 1.48  2002/03/12 06:33:01  hal9
5380  Catching up to Andreas and re_filterfile changes.
5381
5382  Revision 1.47  2002/03/11 13:13:27  swa
5383  correct feedback channels
5384
5385  Revision 1.46  2002/03/10 00:51:08  hal9
5386  Added section on JB internal pages in Appendix.
5387
5388  Revision 1.45  2002/03/09 17:43:53  swa
5389  more distros
5390
5391  Revision 1.44  2002/03/09 17:08:48  hal9
5392  New section on Jon's actions file editor, and move some stuff around.
5393
5394  Revision 1.43  2002/03/08 00:47:32  hal9
5395  Added imageblock{pattern}.
5396
5397  Revision 1.42  2002/03/07 18:16:55  swa
5398  looks better
5399
5400  Revision 1.41  2002/03/07 16:46:43  hal9
5401  Fix a few markup problems for jade.
5402
5403  Revision 1.40  2002/03/07 16:28:39  swa
5404  provide correct feedback channels
5405
5406  Revision 1.39  2002/03/06 16:19:28  hal9
5407  Note on perceived filtering slowdown per FR.
5408
5409  Revision 1.38  2002/03/05 23:55:14  hal9
5410  Stupid I did it again. Double hyphen in comment breaks jade.
5411
5412  Revision 1.37  2002/03/05 23:53:49  hal9
5413  jade barfs on '- -' embedded in comments. - -user option broke it.
5414
5415  Revision 1.36  2002/03/05 22:53:28  hal9
5416  Add new - - user option.
5417
5418  Revision 1.35  2002/03/05 00:17:27  hal9
5419  Added section on command line options.
5420
5421  Revision 1.34  2002/03/04 19:32:07  oes
5422  Changed default port to 8118
5423
5424  Revision 1.33  2002/03/03 19:46:13  hal9
5425  Emphasis on where/how to report bugs, etc
5426
5427  Revision 1.32  2002/03/03 09:26:06  joergs
5428  AmigaOS changes, config is now loaded from PROGDIR: instead of
5429  AmiTCP:db/junkbuster/ if no configuration file is specified on the
5430  command line.
5431
5432  Revision 1.31  2002/03/02 22:45:52  david__schmidt
5433  Just tweaking
5434
5435  Revision 1.30  2002/03/02 22:00:14  hal9
5436  Updated 'New Features' list. Ran through spell-checker.
5437
5438  Revision 1.29  2002/03/02 20:34:07  david__schmidt
5439  Update OS/2 build section
5440
5441  Revision 1.28  2002/02/24 14:34:24  jongfoster
5442  Formatting changes.  Now changing the doctype to DocBook XML 4.1
5443  will work - no other changes are needed.
5444
5445  Revision 1.27  2002/01/11 14:14:32  hal9
5446  Added a very short section on Templates
5447
5448  Revision 1.26  2002/01/09 20:02:50  hal9
5449  Fix bug re: auto-detect config file changes.
5450
5451  Revision 1.25  2002/01/09 18:20:30  hal9
5452  Touch ups for *.action files.
5453
5454  Revision 1.24  2001/12/02 01:13:42  hal9
5455  Fix typo.
5456
5457  Revision 1.23  2001/12/02 00:20:41  hal9
5458  Updates for recent changes.
5459
5460  Revision 1.22  2001/11/05 23:57:51  hal9
5461  Minor update for startup now daemon mode.
5462
5463  Revision 1.21  2001/10/31 21:11:03  hal9
5464  Correct 2 minor errors
5465
5466  Revision 1.18  2001/10/24 18:45:26  hal9
5467  *** empty log message ***
5468
5469  Revision 1.17  2001/10/24 17:10:55  hal9
5470  Catching up with Jon's recent work, and a few other things.
5471
5472  Revision 1.16  2001/10/21 17:19:21  swa
5473  wrong url in documentation
5474
5475  Revision 1.15  2001/10/14 23:46:24  hal9
5476  Various minor changes. Fleshed out SEE ALSO section.
5477
5478  Revision 1.13  2001/10/10 17:28:33  hal9
5479  Very minor changes.
5480
5481  Revision 1.12  2001/09/28 02:57:04  hal9
5482  Ditto :/
5483
5484  Revision 1.11  2001/09/28 02:25:20  hal9
5485  Ditto.
5486
5487  Revision 1.9  2001/09/27 23:50:29  hal9
5488  A few changes. A short section on regular expression in appendix.
5489
5490  Revision 1.8  2001/09/25 00:34:59  hal9
5491  Some additions, and re-arranging.
5492
5493  Revision 1.7  2001/09/24 14:31:36  hal9
5494  Diddling.
5495
5496  Revision 1.6  2001/09/24 14:10:32  hal9
5497  Including David's OS/2 installation instructions.
5498
5499  Revision 1.2  2001/09/13 15:27:40  swa
5500  cosmetics
5501
5502  Revision 1.1  2001/09/12 15:36:41  swa
5503  source files for junkbuster documentation
5504
5505  Revision 1.3  2001/09/10 17:43:59  swa
5506  first proposal of a structure.
5507
5508  Revision 1.2  2001/06/13 14:28:31  swa
5509  docs should have an author.
5510
5511  Revision 1.1  2001/06/13 14:20:37  swa
5512  first import of project's documentation for the webserver.
5513
5514  -->
5515
5516 </article>