Added Bookmarklet for one-click pre-filled access to show-url-info
[privoxy.git] / doc / source / user-manual.sgml
1 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
2 <!entity % dummy "IGNORE"> 
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 license SYSTEM "license.sgml">
12 <!entity p-authors SYSTEM "p-authors.sgml">
13 <!entity p-version "2.9.15">
14 <!entity p-status "beta">
15 <!entity % p-authors-formal "INCLUDE"> <!-- include additional text, etc  -->
16 <!entity % p-not-stable "INCLUDE">
17 <!entity % p-stable "IGNORE">
18 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
19 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
20 <!entity % p-readme "IGNORE">
21 <!entity % p-config "IGNORE">
22 <!entity % p-supp-userman "IGNORE"> <!-- Omit some from supported.sgml    -->
23 <!entity  my-copy "&copy;">         <!-- kludge for docbook2man           -->
24 <!entity % draft "IGNORE">          <!-- WIP stuff    -->
25 ]>
26 <!--
27  File        :  $Source: /cvsroot/ijbswa/current/doc/source/user-manual.sgml,v $
28
29  Purpose     :  user manual
30                 This file belongs into
31                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
32
33  $Id: user-manual.sgml,v 1.121 2002/05/23 23:20:17 oes Exp $
34
35  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
36  See LICENSE.
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
48 <title>Privoxy User Manual</title>
49
50 <pubdate>
51  <subscript>
52 <!-- Completely the wrong markup, but very little is allowed  -->
53 <!-- in this part of an article. FIXME -->
54  <link linkend="copyright">Copyright</link> &my-copy; 2001, 2002 by 
55  <ulink url="http://www.privoxy.org">Privoxy Developers</ulink>
56  </subscript>
57 </pubdate>
58
59 <pubdate>$Id: user-manual.sgml,v 1.121 2002/05/23 23:20:17 oes Exp $</pubdate>
60
61 <!--
62
63 Note: the following should generate a separate page, and a live link to it,
64 all nicely done. But it doesn't for some mysterious reason. Please leave
65 commented unless it can be fixed proper. For the time being, the
66 copyright/license declarations will be in their own sgml.
67
68 Hal.
69
70 <copyright>
71   <year>2001</year>
72   <year>2002</year>
73   <holder>Privoxy Developers</holder>
74 </copyright>
75
76 <legalnotice id="legalnotice"> 
77  <para>
78   text goes here ........
79  </para>
80 </legalnotice>
81
82 -->
83
84
85 <abstract>
86
87 <![%dummy;[
88  <para>
89  <comment>
90   This is here to keep vim syntax file from breaking :/
91   If I knew enough to fix it, I would.
92   PLEASE DO NOT REMOVE! HB: hal@foobox.net
93  </comment>
94  </para>
95 ]]>
96
97  <para>
98   The user manual gives users information on how to install, configure and use
99   <ulink
100   url="http://www.privoxy.org/"><application>Privoxy</application></ulink>.
101  </para>
102
103 <!-- Include privoxy.sgml boilerplate: -->
104  &p-intro;
105 <!-- end privoxy.sgml -->
106
107  <para>
108   You can find the latest version of the user manual at  <ulink
109   url="http://www.privoxy.org/user-manual/">http://www.privoxy.org/user-manual/</ulink>.
110   Please see the <ulink url="contact.html">Contact section</ulink> on how to
111   contact the developers.
112  </para>
113
114 <!--   <para> -->
115 <!--    Feel free to send a note to the developers at <email>ijbswa-developers@lists.sourceforge.net</email>. -->
116 <!--   </para> -->
117 </abstract>
118
119 </artheader>
120
121 <!--   ~~~~~       New section      ~~~~~     -->
122 <sect1 label="1" id="introduction"><title>Introduction</title>
123 <para>
124  This documentation is included with the current &p-status; version of
125  <application>Privoxy</application>, v.&p-version;<![%p-not-stable;[, 
126  and is mostly complete at this point. The most up to date reference for the
127  time being is still the comments in the source files and in the individual
128  configuration files. Development of version 3.0 is currently nearing
129  completion, and includes many significant changes and enhancements over
130  earlier versions. The target release date for
131  stable v3.0 is <quote>soon</quote> ;-)]]>.
132 </para>
133
134 <!-- include only in non-stable versions -->
135 <![%p-not-stable;[
136 <para>
137  Since this is a &p-status; version, not all new features are well tested. This
138  documentation may be slightly out of sync as a result (especially with 
139  CVS sources). And there <emphasis>may be</emphasis> bugs, though hopefully
140  not many! 
141 </para>
142 ]]>
143
144 <!--   ~~~~~       New section      ~~~~~     -->
145 <sect2 id="features"><title>Features</title>
146 <para>
147  In addition to <application>Internet Junkbuster's</application> traditional
148  features of ad and banner blocking and cookie management,
149  <application>Privoxy</application> provides new features<![%p-not-stable;[,
150  some of them currently under development]]>:
151 </para>
152 <!-- Include newfeatures.sgml boilerplate here: -->
153  &newfeatures;
154 <!-- end boilerplate -->
155 </sect2>
156
157 </sect1>
158
159 <!--  ~  End section  ~  -->
160
161
162 <!--   ~~~~~       New section      ~~~~~     -->
163 <sect1 id="installation"><title>Installation</title>
164
165 <para>
166  <application>Privoxy</application> is available both in convenient pre-compiled
167  packages for a wide range of operating systems, and as raw source code.
168  For most users, we recommend using the packages, which can be downloaded from our
169  <ulink url="http://sourceforge.net/projects/ijbswa/">Privoxy Project
170  Page</ulink>.
171 </para>
172
173 <para>
174  Note: If you have a previous <application>Junkbuster</application> or
175  <application>Privoxy</application> installation on your system, you
176  will need to remove it.  On some platforms, this may be done for you as part
177  of their installation procedure. (See below for your platform). In any case
178  <emphasis>be sure to backup your old configuration if it is valuable to
179  you.</emphasis> See the <link linkend="upgradersnote">note to
180  upgraders</link> section below.
181 </para>
182
183 <!--   ~~~~~       New section      ~~~~~     --> 
184 <sect2 id="installation-packages"><title>Binary Packages</title>
185 <para>
186 How to install the binary packages depends on your operating system:
187 </para>
188
189 <!--   ~~~~~       New section      ~~~~~     -->
190 <sect3 id="installation-pack-rpm"><title>Red Hat, SuSE RPMs and Conectiva</title>
191
192 <para>
193  RPMs can be installed with <literal>rpm -Uvh privoxy-&p-version;-1.rpm</literal>,
194  and will use <filename>/etc/privoxy</filename> for the location 
195  of configuration files.
196 </para>
197
198 <para>
199  Note that on Red Hat, <application>Privoxy</application> will
200  <emphasis>not</emphasis> be automatically started on system boot. You will
201  need to enable that using <command>chkconfig</command>,
202  <command>ntsysv</command>, or similar methods. Note that SuSE will 
203 automatically start Privoxy in the boot process.
204 </para>
205
206 <para>
207  If you have problems with failed dependencies, try rebuilding the SRC RPM: 
208  <literal>rpm --rebuild privoxy-&p-version;-1.src.rpm;</literal>. This 
209  will use your locally installed libraries and RPM version. 
210 </para>
211
212 <para>
213  Also note that if you have a <application>Junkbuster</application> RPM installed
214  on your system, you need to remove it first, because the packages conflict.
215  Otherwise, RPM will try to remove <application>Junkbuster</application>
216  automatically, before installing <application>Privoxy</application>.
217 </para>
218 </sect3>
219
220 <!--   ~~~~~       New section      ~~~~~     -->
221 <sect3 id="installation-deb"><title>Debian</title>
222 <para>
223  DEBs can be installed with <literal>dpkg -i
224  privoxy_&p-version;-1.deb</literal>, and will use
225  <filename>/etc/privoxy</filename> for the location of configuration
226  files.
227 </para>
228 </sect3>
229
230 <!--   ~~~~~       New section      ~~~~~     -->
231 <sect3 id="installation-pack-win"><title>Windows</title>
232
233 <para>
234  Just double-click the installer, which will guide you through
235  the installation process. You will find the configuration files
236  in the same directory as you installed Privoxy in. We do not
237  use the registry of Windows. 
238 </para>
239 </sect3>
240
241 <!--   ~~~~~       New section      ~~~~~     -->
242 <sect3 id="installation-pack-bintgz"><title>Solaris, NetBSD, FreeBSD, HP-UX</title>
243
244 <para>
245  Create a new directory, <literal>cd</literal> to it, then unzip and
246  untar the archive. For the most part, you'll have to figure out where
247  things go. FIXME.
248 </para>
249 </sect3>
250
251 <!--   ~~~~~       New section      ~~~~~     -->
252 <sect3 id="installation-os2"><title>OS/2</title>
253
254 <para>
255  First, make sure that no previous installations of
256  <application>Junkbuster</application> and / or 
257  <application>Privoxy</application> are left on your
258  system. You can do this by 
259 </para>
260
261 <para>
262  Then, just double-click the WarpIN self-installing archive, which will
263  guide you through the installation process. A shadow of the
264  <application>Privoxy</application> executable will be placed in your
265  startup folder so it will start automatically whenever OS/2 starts.
266 </para>
267
268 <para>
269  The directory you choose to install <application>Privoxy</application>
270  into will contain all of the configuration files.
271 </para>
272 </sect3>
273
274 <!--   ~~~~~       New section      ~~~~~     -->
275 <sect3 id="installation-mac"><title>Max OSX</title>
276 <para>
277  Unzip the downloaded package (you can either double-click on the file
278  in the finder, or on the desktop if you downloaded it there).  Then,
279  double-click on the package installer icon and follow the installation
280  process.
281  <application>Privoxy</application> will be installed in the subdirectory
282  <literal>/Applications/Privoxy.app</literal>.
283  <application>Privoxy</application> will set itself up to start 
284  automatically on system bring-up via
285  <literal>/System/Library/StartupItems/Privoxy</literal>.
286 </para>
287 </sect3>
288
289 <!--   ~~~~~       New section      ~~~~~     -->
290 <sect3 id="installation-amiga"><title>AmigaOS</title>
291 <para>
292  Copy and then unpack the <filename>lha</filename> archive to a suitable location. 
293  All necessary files will be installed into <application>Privoxy</application>
294  directory, including all configuration and log files. To uninstall, just 
295  remove this directory.
296 </para>
297 <para>
298  Start <application>Privoxy</application> (with RUN &lt;&gt;NIL:) in your
299  <filename>startnet</filename> script (AmiTCP), in
300  <filename>s:user-startup</filename> (RoadShow), as startup program in your
301  startup script (Genesis), or as startup action (Miami and MiamiDx). 
302  <application>Privoxy</application> will automatically quit when you quit your
303  TCP/IP stack (just ignore the harmless warning your TCP/IP stack may display that
304  <application>Privoxy</application> is still running).
305 </para>
306 </sect3>
307 </sect2>
308
309 <!--   ~~~~~       New section      ~~~~~     -->
310 <sect2 id="installation-source"><title>Building from Source</title>
311
312 <para>
313  The most convenient way to obtain the <application>Privoxy</application> sources
314  is to download the source tarball from our <ulink url="http://sf.net/projects/ijbswa/">project
315  page</ulink>.
316 </para>
317
318 <para>
319  If you like to live on the bleeding edge and are not afraid of using
320  possibly unstable development versions, you can check out the up-to-the-minute
321  version directly from <ulink url="http://sourceforge.net/cvs/?group_id=11118">the
322  CVS repository</ulink> or simply download <ulink
323  url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz">the nightly CVS
324  tarball.</ulink>
325 </para>
326
327 <!-- include buildsource.sgml boilerplate: -->
328 &buildsource;
329 <!-- end boilerplate -->
330
331 </sect2>
332
333 </sect1>
334
335 <!--  ~  End section  ~  -->
336
337 <!--   ~~~~~       New section      ~~~~~     -->
338 <sect1 id="upgradersnote">
339 <title>Note to Upgraders</title>
340 <para>
341  There are very significant changes from earlier 
342  <application>Junkbuster</application> versions to the current
343  <application>Privoxy</application>. The number, names, syntax, and
344  purposes of configuration files have substantially  changed.
345  <application>Junkbuster 2.0.x</application> configuration
346  files will not migrate, <application>Junkbuster 2.9.x</application>
347  and <application>Privoxy</application> configurations will need to be
348  ported. The functionalities of the old <filename>blockfile</filename>,
349  <filename>cookiefile</filename> and <filename>imagelist</filename> 
350  are now combined into the <link linkend="actions-file"><quote>actions
351  files</quote></link>.  
352  <filename>default.action</filename>, is the main actions file. Local
353  exceptions should best be put into <filename>user.action</filename>.
354 </para>
355 <para>
356  A <link linkend="filter-file"><quote>filter file</quote></link> (typically
357  <filename>default.filter</filename>) is new as of <application>Privoxy
358  2.9.x</application>, and provides some of the new sophistication (explained
359  below). <filename>config</filename> is much the same as before.
360 </para>
361 <para>
362  If upgrading from a 2.0.x version, you will have to use the new config 
363  files, and possibly adapt any personal rules from your older files.
364  When porting personal rules over from the old <filename>blockfile</filename>
365  to the new actions files, please note that even the pattern syntax has
366  changed. If upgrading from 2.9.x development versions, it is still
367  recommended to use the new configuration files.
368 </para>
369 <para>
370  A quick list of things to be aware of before upgrading: 
371 </para>
372
373 <para>
374  <itemizedlist>
375
376  <listitem>
377   <para>
378    The default listening port is now 8118 due to a conflict with another 
379    service (NAS).
380   </para>
381  </listitem>  
382  <listitem>
383   <para>  
384     Some installers may remove earlier versions completely. Save any 
385     important configuration files!
386   </para>
387  </listitem>
388  <listitem>
389   <para>
390    <application>Privoxy</application> is controllable with a web browser 
391    at the special URL: <ulink
392    url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
393    (Shortcut: <ulink url="http://p.p/">http://p.p/</ulink>). Many
394    aspects of configuration can be done here, including temporarily disabling
395    <application>Privoxy</application>.
396   </para>
397  </listitem> 
398  <listitem>
399   <para>
400    The primary configuration files for cookie management, ad and banner 
401    blocking, and many other aspects of <application>Privoxy</application>
402    configuration are the <link linkend="actions-file">actions
403    files</link>. It is strongly recommended to become familiar with the new
404    actions concept below, before modifying these files. Locally defined rules 
405    should go into <filename>user.action</filename>.
406   </para>
407  </listitem> 
408   <listitem>
409   <para>
410 <!-- I think it is best to keep this somewhat vague, in case  -->
411 <!-- the situation changes under our feet. -->   
412    Some installers may not automatically start
413    <application>Privoxy</application> after installation.
414   </para>
415  </listitem> 
416
417  </itemizedlist>
418 </para>
419 </sect1>
420
421 <!--   ~~~~~       New section      ~~~~~     -->
422 <sect1 id="quickstart"><title>Quickstart to Using <application>Privoxy</application></title>
423 <para>
424  <itemizedlist>
425
426  <listitem>
427   <para>
428    If upgrading, from versions before 2.9.16, please back up any configuration
429    files. See the <link linkend="upgradersnote">Note to Upgraders</link> Section.
430  </para>
431 </listitem> 
432
433  <listitem>
434   <para>
435   Install <application>Privoxy</application>. See the <link
436   linkend="installation">Installation Section</link> below for platform specific
437   information. 
438  </para>
439  </listitem>  
440
441  <listitem>
442   <para>
443    Advanced users and those who want to offer <application>Privoxy</application>
444    service to more than just their local machine should check the <link
445    linkend="config">main config file</link>, especially the <link
446    linkend="access-control">security-relevant</link> options. These are 
447    off by default.
448   </para>
449  </listitem>  
450
451  <listitem>
452   <para>
453   Start <application>Privoxy</application>, if the installation program has
454   not done this already (may vary according to platform). See the section
455   <link linkend="startup">Starting <application>Privoxy</application></link>.
456   </para>
457  </listitem>
458
459  <listitem>
460   <para>
461    Set your browser to use <application>Privoxy</application> as HTTP and
462    HTTPS proxy by setting the proxy configuration for address of
463    <literal>127.0.0.1</literal> and port <literal>8118</literal>.
464    (<application>Junkbuster</application> and earlier versions of
465    <application>Privoxy</application> used port 8000.) See the section <link
466    linkend="startup">Starting <application>Privoxy</application></link> below
467    for more details on this.
468   </para>
469  </listitem>  
470
471  <listitem>
472   <para>
473     Flush your browser's disk and memory caches, to remove any cached ad images.
474   </para>
475  </listitem> 
476
477  <listitem>
478   <para>
479    A default installation should provide a reasonable starting point for 
480    most. There will undoubtedly be occasions where you will want to adjust the
481    configuration, but that can be dealt with as the need arises. Little 
482    to no initial configuration is required in most cases.
483   </para>
484   <para>
485    See the <link linkend="configuration">Configuration section</link> for more
486    configuration options, and how to customize your installation.
487  <![%draft;[  You might also want to look at the <link
488    linkend="quickstart-ad-blocking">next section</link> for a quick
489    introduction to how <application>Privoxy</application> blocks ads and
490    banners.]]>
491   </para>
492  </listitem> 
493
494  <listitem>
495   <para>
496     If you experience ads that slipped through, innocent images that are
497     blocked, or otherwise feel the need to fine-tune
498     <application>Privoxy's</application> behaviour, take a look at the <link
499     linkend="actions-file">actions files</link>. As a quick start, you might
500     find the <link linkend="act-examples">richly commented examples</link>
501     helpful. You can also view and edit the actions files through the <ulink
502     url="http://config.privoxy.org">web-based user interface</ulink>. The
503     Appendix <quote><link linkend="actionsanat">Anatomy of an
504     Action</link></quote> has hints how to debug actions that
505     <quote>misbehave</quote>.
506   </para>
507  </listitem> 
508
509  <listitem>
510   <para>
511    Please see the section <link linkend="contact">Contacting the
512    Developers</link> on how to report bugs or problems with websites or to get
513    help. 
514   </para>
515  </listitem> 
516
517  <listitem>
518   <para>
519    Now enjoy surfing with enhanced comfort and privacy!
520   </para>
521  </listitem> 
522  
523  </itemizedlist>
524 </para>
525
526
527 <!--   ~~~~~       New section      ~~~~~     -->
528
529 <sect2 id="quickstart-ad-blocking">
530 <title>Quickstart to Ad Blocking</title>
531 <!--
532  NOTE:  This section is deliberately redundant for those that don't 
533  want to read the whole thing (which is getting lengthy).
534 -->
535 <para>
536  Ad blocking is but one of <application>Privoxy's</application>
537  array of features. Many of these features are for the technically minded advanced 
538  user. But, ad and banner blocking is surely common ground for everybody.
539 </para>
540 <para> 
541  This section will provide a quick summary of ad blocking so 
542  you can get up to speed quickly without having to read the more extensive
543  information provided below, though this is highly recommeneded.
544 </para>
545 <para>
546  First a bit of a warning ... blocking ads is much like blocking SPAM: the
547  more aggressive you are about it, the more likely you are to block 
548  things that were not intended. So there is a trade off here. If you want
549  extreme ad free browsing, be prepared to deal with more
550  <quote>problem</quote> sites, and to spend more time adjusting the
551  configuration to solve these unintended consequences. In short, there is 
552  not an easy way to eliminate <emphasis>all</emphasis> ads. Either take 
553  the easy way and settle for <emphasis>most</emphasis> ads blocked with the
554  default configuration, or jump in and tweak it for your personal surfing
555  habits and preferences.
556 </para>
557 <para>
558  Secondly, a brief explanation of <application>Privoxy's </application>
559  <quote>actions</quote>. <quote>Actions</quote> in this context, are 
560  the directives we use to tell <application>Privoxy</application> to perform
561  some task relating to HTTP transactions (i.e. web browsing). We tell
562  <application>Privoxy</application> to take some <quote>action</quote>. Each
563  action has a unique name and function. While there are many potential
564  <application>actions</application> in <application>Privoxy's</application>
565  arsenal, only a few are used for ad blocking. <link
566  linkend="actions">Actions</link>, and <link linkend="actions-file">action
567  configuration files</link>, are explained in depth below.
568 </para>
569 <para>
570  Actions are specified in <application>Privoxy's</application> configuration,
571  followed by one or more URLs to which the action should apply. URLs 
572  can actually be URL type <link linkend="af-patterns">patterns</link> that use
573  wildcards so they can apply potentially to a range of similar URLs. The
574  actions, together with the URL patterns are called a section.
575 </para>
576 <para>
577  When you connect to a website, the full URL will either match one or more
578  of the sections as defined in <application>Privoxy's</application> configuration,
579  or not. If so, then <application>Privoxy</application> will perform the
580  respective actions. If not, then nothing special happens. Futhermore, web
581  pages may contain embedded, secondary URLs that your web browser will
582  use to load additional components of the page, as it parses the
583  original page's HTML content. An ad image for instance, is just a URL
584  embedded in the page somewhere. The image itself may be on the same server,
585  or a server somewhere else on the Internet. Complex web pages will have many
586  such embedded URLs.
587 </para>
588
589 <para>
590  The actions we need to know about for ad blocking are:  <literal><link
591  linkend="block">block</link></literal>, <literal><link
592  linkend="handle-as-image">handle-as-image</link></literal>, and
593  <literal><link linkend="set-image-blocker">set-image-blocker</link></literal>:
594 </para>
595
596 <para>
597  <itemizedlist>
598   
599  <listitem>
600   <para>
601    <literal><link linkend="block">block</link></literal> - this action stops
602    any contact between your browser and any URL patterns that match this
603    action's configuration. It can be used for blocking ads, but also anything
604    that is determined to be unwanted. By itself, it simply stops any
605    communication with the remote server and sends <application>Privoxy</application>'s
606    own built-in BLOCKED page instead to let you now what has happened.
607   </para>
608  </listitem> 
609
610  <listitem>
611   <para>
612    <literal><link linkend="handle-as-image">handle-as-image</link></literal> - 
613    tells <application>Privoxy</application> to treat this URL as an image.
614    <application>Privoxy</application>'s default configuration already does this
615    for all common image types (e.g. GIF), but there are many situations where this
616    is not as easy to determine. So we'll force it in these cases. This is particularly
617    important for ad blocking, since  only if we know that it's an image, we can replace
618    it by an image instead of the BLOCKED page, which would only result in a
619    <quote>broken image</quote> icon. There are some limitations to this though. For
620    instance, you can't just brute-force an image substituion for an entire HTML page
621    in most situations.
622   </para>
623  </listitem> 
624
625  <listitem>
626   <para>
627    <literal><link
628    linkend="set-image-blocker">set-image-blocker</link></literal> - tells
629    <application>Privoxy</application> what to display in place of an ad image that
630    has hit a block rule. For this to come into play, the URL must match a
631    <literal><link linkend="block">block</link></literal> action somewhere in the
632    configuration, <emphasis>and</emphasis>, it must also match an
633    <literal><link linkend="handle-as-image">handle-as-image</link></literal> action.
634   </para>
635   <para>
636    The configuration options on what to display instead of the ad are:
637   </para>
638   <simplelist>
639    <member>
640     &nbsp;&nbsp;&nbsp;<emphasis>pattern</emphasis> - a checkboard pattern, so that an ad 
641     replacement is obvious. This is the default.
642    </member>
643   </simplelist>
644   <simplelist>
645    <member>
646     &nbsp;&nbsp;&nbsp;<emphasis>blank</emphasis> - A very small empty GIF image is displayed.
647     This is the so-called <quote>invisible</quote> configuration option.
648    </member>
649   </simplelist>
650   <simplelist>
651    <member>
652     &nbsp;&nbsp;&nbsp;<emphasis>http://&lt;URL&gt;</emphasis> - A redirect to any image anywhere
653     of the user's choosing (advanced usage).
654    </member>
655   </simplelist>
656   </listitem> 
657
658 </itemizedlist>
659 </para>
660
661 <para>
662  The quickest way to adjust any of these settings is with your browser through
663  the special <application>Privoxy</application> editor at <ulink
664  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
665  (shortcut: <ulink url="http://p.p/">http://p.p/show-status</ulink>). This 
666  is an internal page, and does not require Internet access. Select the
667  appropriate <quote>actions</quote> file, and click
668  <quote><guibutton>Edit</guibutton></quote>. It is best to put personal or
669  local preferences in <filename>user.action</filename> since this is not
670  meant to be overwritten during upgrades, and will over-ride the settings in
671  other files. Here you can insert new <quote>actions</quote>, and URLs for ad
672  blocking or other purposes, and make other adjustments to the configuration.
673  <application>Privoxy</application> will detect these changes automatically.
674 </para>
675
676 <para>
677  A quick and simple step by step example:
678 </para>
679
680 <para>
681  <itemizedlist>
682
683   <listitem>
684    <para>
685      Right click on the ad image to be blocked, then select 
686      <quote><guimenuitem>Copy Link Location</guimenuitem></quote> from the
687      pop-up menu. 
688    </para>
689   </listitem> 
690   <listitem>
691    <para>
692     Set your browser to 
693     <ulink
694  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
695    </para>
696   </listitem> 
697   <listitem>
698    <para>
699     Find <filename>user.action</filename> in the top section, and click 
700     on <quote><guibutton>Edit</guibutton></quote>:
701    </para>
702
703  <!-- image of editor and actions files selections -->
704  <para>
705   <figure pgwide="0" float="0"><title>Actions Files in Use</title>
706    <mediaobject>
707      <imageobject>
708       <imagedata  fileref="../images/files-in-use.jpg" format="jpg">
709        </imageobject> 
710        <textobject>
711         <phrase>Screenshot of Files in Use</phrase>
712       </textobject>
713    </mediaobject>
714   </figure>
715  </para>
716  </listitem> 
717  
718  <listitem>
719   <para>
720    You should have a section with only
721    <literal><link linkend="block">block</link></literal> listed under 
722    <quote>Actions:</quote>.
723    If not, click a <quote><guibutton>Insert new section below</guibutton></quote>
724    button, and in the new section that just appeared, click the 
725    <guibutton>Edit</guibutton> button right under the word <quote>Actions:</quote>.
726    This will bring up a list of all actions. Find
727    <literal><link linkend="block">block</link></literal> near the top, and click
728    in the <quote>Enabled</quote> column, then <quote><guibutton>Submit</guibutton></quote>
729    just below the list.
730   </para>
731  </listitem> 
732  <listitem>
733   <para>
734    Now, in the <literal><link linkend="block">block</link></literal> actions section,
735    click the <quote><guibutton>Add</guibutton></quote> button, and paste the URL the
736    browser got from <quote><guimenuitem>Copy Link Location</guimenuitem></quote>.
737    Remove the <literal>http://</literal> at the beginning of the URL. Then, click
738    <quote><guibutton>Submit</guibutton></quote> (or
739    <quote><guibutton>OK</guibutton></quote> if in a pop-up window).
740   </para>
741  </listitem> 
742  <listitem>
743   <para>
744    Now go back to the original page, and press <keycap>SHIFT-Reload</keycap>
745    (or flush all browser caches). The image should be gone now.
746   </para>
747  </listitem> 
748  
749  </itemizedlist>
750 </para>
751
752 <para>
753  This is a very crude and simple example. There might be good reasons to use a 
754  wildcard pattern match to include potentially similar images from the same
755  site. For a more extensive explanation of <quote>patterns</quote>, and 
756  the entire actions concept, see <link linkend="actions-file">the Actions
757  section</link>.
758 </para>
759
760 <para>
761  For advanced users who want to hand edit their config files, you might want
762  to now go to the <link linkend="act-examples">Actions Files Tutorial</link>.
763  The ideas explained thererin also apply to the web-based editor.
764 </para>
765
766 </sect2>
767
768 </sect1>
769
770 <!--  ~  End section  ~  -->
771
772
773 <!--   ~~~~~       New section      ~~~~~     -->
774 <sect1 id="startup">
775 <title>Starting <application>Privoxy</application></title>
776 <para>
777  Before launching <application>Privoxy</application> for the first time, you
778  will want to configure your browser(s) to use
779  <application>Privoxy</application> as a HTTP and HTTPS proxy. The default is
780  127.0.0.1 (or localhost) for the proxy address, and port 8118 (earlier versions
781  used port 8000). This is the one configuration step that must be done!
782 </para>
783  
784 <para> 
785  With <application>Netscape</application> (and
786  <application>Mozilla</application>), this can be set under <literal>Edit
787  -&gt; Preferences -&gt; Advanced -&gt; Proxies -&gt; HTTP Proxy</literal>.
788  For <application>Internet Explorer</application>: <literal>Tools -&gt;
789  Internet Properties -&gt; Connections -&gt; LAN Setting</literal>. Then,
790  check <quote>Use Proxy</quote> and fill in the appropriate info (Address:
791  127.0.0.1, Port: 8118). Include if HTTPS proxy support too.
792 </para>
793
794 <para>
795  After doing this, flush your browser's disk and memory caches to force a
796  re-reading of all pages and to get rid of any ads that may be cached. You 
797  are now ready to start enjoying the benefits of using
798  <application>Privoxy</application>!
799 </para>
800
801 <para>
802  <application>Privoxy</application> is typically started by specifying the
803  main configuration file to be used on the command line. If no configuration
804  file is specified on the command line, <application>Privoxy</application>
805  will look for a file named <filename>config</filename> in the current
806  directory. Except on Win32 where it will try <filename>config.txt</filename>.
807 </para>
808
809 <sect2 id="start-redhat">
810 <title>RedHat and Conectiva</title>
811 <para>
812 We use a script. Note that RedHat does not start Privoxy upon booting per
813 default. It will use the file <filename>/etc/privoxy/config</filename> as its
814 main configuration file.
815 </para>
816 <para>
817  <screen>
818  # /etc/rc.d/init.d/privoxy start
819 </screen>
820 </para>
821 </sect2>
822
823 <sect2 id="start-debian">
824 <title>Debian</title>
825 <para>
826  We use a script. Note that Debian starts Privoxy upon booting per
827  default.  It will use the file
828  <filename>/etc/privoxy/config</filename> as its main configuration
829  file.
830 </para>
831 <para>
832  <screen>
833  # /etc/init.d/privoxy start
834 </screen>
835 </para>
836 </sect2>
837
838 <sect2 id="start-suse">
839 <title>SuSE</title>
840 <para>
841 We use a script. It will use the file <filename>/etc/privoxy/config</filename>
842 as its main configuration file. Note that SuSE starts Privoxy upon booting
843 your PC.
844 </para>
845 <para>
846  <screen>
847  # rcprivoxy start
848 </screen>
849 </para>
850 </sect2>
851
852 <sect2 id="start-windows">
853 <title>Windows</title>
854 <para>
855 Click on the Privoxy Icon to start Privoxy. If no configuration file is
856  specified on the command line, <application>Privoxy</application> will look
857  for a file named <filename>config.txt</filename>. Note that Windows will
858  automatically start Privoxy upon booting you PC.
859 </para>
860 </sect2>
861
862 <sect2 id="start-unices">
863 <title>Solaris, NetBSD, FreeBSD, HP-UX and others</title>
864 <para>
865 Example Unix startup command:
866 </para>
867 <para>
868  <screen>
869  # /usr/sbin/privoxy /etc/privoxy/config
870 </screen>
871 </para>
872 </sect2>
873
874 <sect2 id="start-os2">
875 <title>OS/2</title>
876 <para>
877 FIXME.
878 </para>
879 </sect2>
880
881 <sect2 id="start-macosx">
882 <title>MAX OSX</title>
883 <para>
884 FIXME.
885 </para>
886 </sect2>
887
888
889 <sect2 id="start-amigaos">
890 <title>AmigaOS</title>
891 <para>
892 FIXME.
893 </para>
894 </sect2>
895
896 <!--
897
898 <para>
899  See the section <link linkend="cmdoptions">Command line options</link> for
900  furher info.
901 </para>
902
903 must find a better place for this paragraph
904
905 <para>
906  The included default configuration files should give a reasonable starting
907  point. Most of the per site configuration is done in the
908  <ulink url="actions-file.html"><quote>actions</quote></ulink> files. These are
909  where various cookie actions are defined, ad and banner blocking, and other
910  aspects of <application>Privoxy</application> configuration. There are several
911  such files included, with varying levels of aggressiveness. 
912 </para>
913
914 <para>
915  You will probably want to keep an eye out for sites for which you may prefer
916  persistent cookies, and add these to your actions configuration as needed. By
917  default, most of these will be accepted only during the current browser
918  session (aka <quote>session cookies</quote>), unless you add them to the
919  configuration. If you want the browser to handle this instead, you will need
920  to edit <filename>user.action</filename> (or through the web based interface)
921  and disable this feature. If you use more than one browser, it would make
922  more sense to let <application>Privoxy</application> handle this. In which
923  case, the browser(s) should be set to accept all cookies.
924 </para>
925
926 <para>
927  Another feature where you will probably want to define exceptions for trusted
928  sites is the popup-killing (through the <ulink
929  url="actions-file.html#KILL-POPUPS"><quote>+kill-popups</quote></ulink> and
930  <ulink
931  url="actions-file.html#FILTER-POPUPS"><quote>+filter{popups}</quote></ulink>
932  actions), because your favorite shopping, banking, or leisure site may need
933  popups (explained below). 
934 </para>
935
936 <para>
937  <application>Privoxy</application> is HTTP/1.1 compliant,  but not all of
938  the optional 1.1 features are as yet supported. In the unlikely event that
939  you experience inexplicable problems with browsers that use HTTP/1.1 per default
940  (like <application>Mozilla</application> or recent versions of I.E.), you might
941  try to force HTTP/1.0 compatibility. For Mozilla, look under <literal>Edit -&gt;
942  Preferences -&gt; Debug -&gt; Networking</literal>.
943  Alternatively, set the <quote>+downgrade-http-version</quote> config option in
944  <filename>default.action</filename> which will downgrade your browser's HTTP
945  requests from HTTP/1.1 to HTTP/1.0 before processing them.
946 </para>
947
948 <para>
949  After running <application>Privoxy</application> for a while, you can 
950  start to fine tune the configuration to suit your personal, or site, 
951  preferences and requirements. There are many, many aspects that can 
952  be customized. <quote>Actions</quote> 
953  can be adjusted by pointing your browser to 
954  <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
955  (shortcut: <ulink url="http://p.p/">http://p.p/</ulink>), 
956  and then follow the link to <quote>View &#38; Change the Current Configuration</quote>. 
957  (This is an internal page and does not require Internet access.)
958 </para>
959
960 <para>
961  In fact, various aspects of <application>Privoxy</application>
962  configuration can be viewed from this page, including 
963  current configuration parameters, source code version numbers, 
964  the browser's request headers, and <quote>actions</quote> that apply 
965  to a given URL. In addition to the actions file 
966  editor mentioned above, <application>Privoxy</application> can also 
967  be turned <quote>on</quote> and <quote>off</quote> (toggled) from this page.
968 </para>
969
970 <para>
971  If you encounter problems, try loading the page without
972  <application>Privoxy</application>. If that helps, enter the URL where
973  you have the problems into <ulink url="http://p.p/show-url-info">the browser
974  based rule tracing utility</ulink>. See which rules apply and why, and
975  then try turning them off for that site one after the other, until the problem
976  is gone. When you have found the culprit, you might want to turn the rest on
977  again.
978 </para>
979
980 <para>
981  If the above paragraph sounds gibberish to you, you might want to <ulink
982  url="actions-file.html#ACTIONSFILE">read more about the actions concept</ulink>
983  or even dive deep into the <ulink url="appendix.html#ACTIONSANAT">Appendix
984  on actions</ulink>.
985 </para>
986
987 <para>
988  If you can't get rid of the problem at all, think you've found a bug in
989  Privoxy, want to propose a new feature or smarter rules, please see the 
990  section <ulink url="contact.html"><quote>Contacting the
991  Developers</quote></ulink> below. 
992 </para>
993
994 -->
995
996 <!--   ~~~~~       New section      ~~~~~     -->
997 <sect2 id="cmdoptions">
998 <title>Command Line Options</title>
999 <para>
1000  <application>Privoxy</application> may be invoked with the following
1001  command-line options:
1002 </para>
1003
1004 <para>
1005  <itemizedlist>
1006
1007  <listitem>
1008   <para>
1009     <emphasis>--version</emphasis>
1010   </para>
1011   <para>
1012      Print version info and exit. Unix only.
1013   </para>
1014  </listitem> 
1015  <listitem>
1016   <para>
1017     <emphasis>--help</emphasis>
1018   </para>
1019   <para>
1020    Print short usage info and exit. Unix only.
1021   </para>
1022  </listitem> 
1023  <listitem>
1024   <para>
1025    <emphasis>--no-daemon</emphasis>
1026   </para>
1027   <para>
1028    Don't become a daemon, i.e. don't fork and become process group
1029    leader, and don't detach from controlling tty. Unix only.
1030   </para>
1031  </listitem> 
1032  <listitem>
1033   <para>
1034    <emphasis>--pidfile FILE</emphasis>
1035   
1036   </para>
1037   <para>
1038    On startup, write the process ID to <emphasis>FILE</emphasis>. Delete the
1039    <emphasis>FILE</emphasis> on exit. Failure to create or delete the
1040    <emphasis>FILE</emphasis> is non-fatal. If no <emphasis>FILE</emphasis>
1041    option is given, no PID file will be used. Unix only.
1042   </para>
1043  </listitem> 
1044  <listitem>
1045   <para>
1046    <emphasis>--user USER[.GROUP]</emphasis>
1047   
1048   </para>
1049   <para>
1050    After (optionally) writing the PID file, assume the user  ID  of
1051    <emphasis>USER</emphasis>, and if included the GID of GROUP.  Exit if the
1052    privileges are not sufficient to do so. Unix only.
1053   </para>
1054  </listitem> 
1055  <listitem>
1056   <para>
1057     <emphasis>configfile</emphasis>
1058   </para>
1059   <para>
1060     If no <emphasis>configfile</emphasis> is included on the command line, 
1061     <application>Privoxy</application> will look for a file named 
1062     <quote>config</quote> in the current directory (except on Win32 
1063     where it will look for <quote>config.txt</quote> instead). Specify 
1064     full path to avoid confusion. If no config file is found, 
1065     <application>Privoxy</application> will fail to start.
1066   </para>
1067  </listitem> 
1068
1069  </itemizedlist>
1070 </para>
1071
1072 </sect2>
1073
1074 </sect1>
1075
1076 <!--  ~  End section  ~  -->
1077
1078
1079 <!--   ~~~~~       New section      ~~~~~     -->
1080 <sect1 id="configuration"><title><application>Privoxy</application> Configuration</title>
1081  <para>
1082   All <application>Privoxy</application> configuration is stored  
1083   in text files. These files can be edited with a text editor.
1084   Many important aspects of <application>Privoxy</application> can 
1085   also be controlled easily with a web browser.
1086  </para>
1087
1088
1089 <!--   ~~~~~       New section      ~~~~~     -->
1090
1091 <sect2>
1092 <title>Controlling <application>Privoxy</application> with Your Web Browser</title>
1093 <para>
1094  <application>Privoxy</application>'s user interface can be reached through the special 
1095  URL <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
1096  (shortcut: <ulink url="http://p.p/">http://p.p/</ulink>), 
1097  which is a built-in page and works without Internet access.
1098  You will see the following section:
1099
1100 </para>
1101
1102 <!-- Needs to be put in a table and colorized  -->
1103 <screen>
1104  <msgtext>
1105  <bridgehead renderas="sect2">Privoxy Menu</bridgehead>
1106
1107  <simplelist>
1108  <member>
1109   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/show-status">View & change the current configuration</ulink>
1110  </member>
1111  <member>
1112   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/show-version">View the source code version numbers</ulink>
1113  </member>
1114  <member>
1115   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/show-request">View the request headers.</ulink>
1116  </member>
1117  <member>
1118   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/show-url-info">Look up which actions apply to a URL and why</ulink>
1119  </member>
1120  <member>
1121   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/toggle">Toggle Privoxy on or off</ulink>
1122  </member>
1123  </simplelist>
1124  </msgtext>
1125 </screen>
1126
1127
1128 <para>
1129  This should be self-explanatory. Note the first item leads to an editor for the
1130  <link linkend="actions-file">actions files</link>, which is where the ad, banner,
1131  cookie, and URL blocking magic is configured as well as other advanced features of
1132  <application>Privoxy</application>. This is an easy way to adjust various
1133  aspects of <application>Privoxy</application> configuration. The actions
1134  file, and other configuration files, are explained in detail below. 
1135 </para>
1136
1137 <para>
1138  <quote>Toggle Privoxy On or Off</quote> is handy for sites that might 
1139  have problems with your current actions and filters. You can in fact use
1140  it as a test to see whether it is <application>Privoxy</application> 
1141  causing the problem or not. <application>Privoxy</application> continues 
1142  to run as a proxy in this case, but all manipulation is disabled, i.e.
1143  <application>Privoxy</application> acts like a normal forwarding proxy. There
1144  is even a toggle <link linkend="bookmarklets">Bookmarklet</link> offered, so
1145  that you can toggle <application>Privoxy</application> with one click from
1146  your browser.
1147 </para>
1148
1149 </sect2>
1150
1151 <!--  ~  End section  ~  -->
1152
1153
1154
1155
1156 <!--   ~~~~~       New section      ~~~~~     -->
1157
1158 <sect2 id="confoverview">
1159 <title>Configuration Files Overview</title>
1160 <para>
1161  For Unix, *BSD and Linux, all configuration files are located in
1162  <filename>/etc/privoxy/</filename> by default. For MS Windows, OS/2, and
1163  AmigaOS these are all in the same directory as the 
1164  <application>Privoxy</application> executable. <![%p-not-stable;[ The name
1165  and number of configuration files has changed from previous versions, and is
1166  subject to change as development progresses.]]>
1167 </para>
1168
1169 <para>
1170  The installed defaults provide a reasonable starting point, though 
1171  some settings may be aggressive by some standards. For the time being, the
1172  principle configuration files are:
1173 </para>
1174
1175 <para>
1176  <itemizedlist>
1177
1178   <listitem>
1179    <para>
1180      The <link linkend="config">main configuration file</link> is named <filename>config</filename>
1181      on Linux, Unix, BSD, OS/2, and AmigaOS and <filename>config.txt</filename>
1182      on Windows. This is a required file.
1183    </para>
1184   </listitem> 
1185
1186   <listitem>
1187    <para>
1188     <filename>default.action</filename> (the main <link linkend="actions-file">actions file</link>)
1189     is used to define which <quote>actions</quote> relating to banner-blocking, images, pop-ups,
1190     content modification, cookie handling etc should be applied by default. It also defines many
1191     exceptions (both positive and negative) from this default set of actions that enable 
1192     <application>Privoxy</application> to selectively eliminate the junk, and only the junk, on
1193     as many websites as possible.
1194    </para>
1195    <para>
1196     Multiple actions files may be defined in <filename>config</filename>. These 
1197     are processed in the order they are defined. Local customizations and locally 
1198     preferred exceptions to the default policies  as defined in
1199     <filename>default.action</filename> (which you will most probably want
1200     to define sooner or later) are probably best applied in
1201     <filename>user.action</filename>, where you can preserve them across
1202     upgrades. <filename>standard.action</filename> is for
1203     <application>Privoxy's</application> internal use.
1204    </para>
1205    <para>    
1206     There is also a web based editor that can be accessed from
1207     <ulink
1208     url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
1209     (Shortcut: <ulink
1210     url="http://p.p/show-status">http://p.p/show-status</ulink>) for the
1211     various actions files. 
1212    </para>
1213   </listitem> 
1214
1215   <listitem>
1216    <para>
1217     <filename>default.filter</filename> (the <link linkend="filter-file">filter
1218     file</link>) can be used to re-write the raw page content, including
1219     viewable text as well as embedded HTML and JavaScript, and whatever else
1220     lurks on any given web page. The filtering jobs are only pre-defined here;
1221     whether to apply them or not is up to the actions files.
1222    </para>
1223   </listitem> 
1224
1225  </itemizedlist>
1226 </para>
1227
1228 <para>
1229  All files use the <quote><literal>#</literal></quote> character to denote a
1230  comment (the rest of the line will be ignored) and understand line continuation
1231  through placing a backslash ("<literal>\</literal>") as the very last character
1232  in a line. If the <literal>#</literal> is preceded by a backslash, it looses
1233  its special function. Placing a <literal>#</literal> in front of an otherwise
1234  valid configuration line to prevent it from being interpreted is called "commenting
1235  out" that line.
1236 </para>
1237
1238 <para>
1239  The actions files and <filename>default.filter</filename> 
1240  can use Perl style <link linkend="regex">regular expressions</link> for
1241  maximum flexibility. 
1242 </para>
1243
1244 <para>
1245  After making any changes, there is no need to restart
1246  <application>Privoxy</application> in order for the changes to take
1247  effect. <application>Privoxy</application> detects such changes 
1248  automatically. Note, however, that it may take one or two additional
1249  requests for the change to take effect. When changing the listening address
1250  of <application>Privoxy</application>, these <quote>wake up</quote> requests
1251  must obviously be sent to the <emphasis>old</emphasis> listening address.
1252 </para>
1253
1254 <![%p-not-stable;[
1255 <para>
1256  While under development, the configuration content is subject to change. 
1257  The below documentation may not be accurate by the time you read this. 
1258  Also, what constitutes a <quote>default</quote> setting, may change, so 
1259  please check all your configuration files on important issues.
1260 </para>
1261 ]]>
1262
1263 </sect2>
1264 </sect1>
1265 <!--  ~  End section  ~  -->
1266
1267
1268 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
1269
1270 <sect1 id="config">
1271 <title>The Main Configuration File</title>
1272
1273 <para>
1274  Again, the main configuration file is named <filename>config</filename> on
1275  Linux/Unix/BSD and OS/2, and <filename>config.txt</filename> on Windows.
1276  Configuration lines consist of an initial keyword followed by a list of
1277  values, all separated by whitespace (any number of spaces or tabs). For
1278  example:
1279 </para>
1280
1281 <para>
1282  <literal>
1283   <msgtext> 
1284    <literallayout>
1285   <emphasis>confdir /etc/privoxy</emphasis></literallayout>
1286   </msgtext>
1287  </literal> 
1288 </para>
1289
1290 <para>
1291  Assigns the value <literal>/etc/privoxy</literal> to the option
1292  <literal>confdir</literal> and thus indicates that the configuration
1293  directory is named <quote>/etc/privoxy/</quote>.
1294 </para>
1295
1296 <para>
1297  All options in the config file except for <literal>confdir</literal> and
1298  <literal>logdir</literal> are optional. Watch out in the below description
1299  for what happens if you leave them unset.
1300 </para>
1301
1302 <para>
1303  The main config file controls all aspects of <application>Privoxy</application>'s
1304  operation that are not location dependent (i.e. they apply universally, no matter
1305  where you may be surfing).
1306 </para>
1307
1308
1309 <!--   ~~~~~       New section      ~~~~~     -->
1310
1311 <sect2 id="conf-log-loc">
1312 <title>Configuration and Log File Locations</title>
1313
1314 <para>
1315  <application>Privoxy</application> can (and normally does) use a number of
1316  other files for additional configuration, help and logging.
1317  This section of the configuration file tells <application>Privoxy</application>
1318  where to find those other files. 
1319 </para>
1320
1321 <para>
1322  The user running Privoxy, must have read permission for all 
1323  configuration files, and write permission to any files that would 
1324  be modified, such as log files.
1325 </para>
1326
1327 <sect3 renderas="sect4" id="confdir"><title>confdir</title>
1328
1329 <variablelist>
1330  <varlistentry>
1331   <term>Specifies:</term>
1332   <listitem>
1333    <para>The directory where the other configuration files are located</para>
1334   </listitem>
1335  </varlistentry>
1336  <varlistentry>
1337   <term>Type of value:</term>
1338   <listitem>
1339    <para>Path name</para>
1340   </listitem>
1341  </varlistentry>
1342  <varlistentry>
1343   <term>Default value:</term>
1344   <listitem>
1345    <para>/etc/privoxy (Unix) <emphasis>or</emphasis> <application>Privoxy</application> installation dir (Windows) </para>
1346   </listitem>
1347  </varlistentry>
1348  <varlistentry>
1349   <term>Effect if unset:</term>
1350   <listitem>
1351    <para><emphasis>Mandatory</emphasis></para>
1352   </listitem>
1353  </varlistentry>
1354  <varlistentry>
1355   <term>Notes:</term>
1356   <listitem>
1357    <para>
1358     No trailing <quote><literal>/</literal></quote>, please
1359    </para>
1360    <para>
1361     When development goes modular and multi-user, the blocker, filter, and
1362     per-user config will be stored in subdirectories of <quote>confdir</quote>.
1363     For now, the configuration directory structure is flat, except for 
1364     <filename>confdir/templates</filename>, where the HTML templates for CGI 
1365     output reside (e.g. <application>Privoxy's</application> 404 error page). 
1366    </para>
1367   </listitem>
1368  </varlistentry>
1369 </variablelist>
1370 </sect3>
1371
1372
1373 <sect3 renderas="sect4" id="logdir"><title>logdir</title>
1374
1375 <variablelist>
1376  <varlistentry>
1377   <term>Specifies:</term>
1378   <listitem>
1379    <para>
1380     The directory where all logging takes place (i.e. where <filename>logfile</filename> and 
1381     <filename>jarfile</filename> are located) 
1382    </para>
1383   </listitem>
1384  </varlistentry>
1385  <varlistentry>
1386   <term>Type of value:</term>
1387   <listitem>
1388    <para>Path name</para>
1389   </listitem>
1390  </varlistentry>
1391  <varlistentry>
1392   <term>Default value:</term>
1393   <listitem>
1394    <para>/var/log/privoxy (Unix) <emphasis>or</emphasis> <application>Privoxy</application> installation dir (Windows) </para>
1395   </listitem>
1396  </varlistentry>
1397  <varlistentry>
1398   <term>Effect if unset:</term>
1399   <listitem>
1400    <para><emphasis>Mandatory</emphasis></para>
1401   </listitem>
1402  </varlistentry>
1403  <varlistentry>
1404   <term>Notes:</term>
1405   <listitem>
1406    <para>
1407     No trailing <quote><literal>/</literal></quote>, please
1408    </para>
1409   </listitem>
1410  </varlistentry>
1411 </variablelist>
1412 </sect3>
1413
1414 <sect3 renderas="sect4" id="actionsfile"><title>
1415 actionsfile
1416 </title>
1417 <anchor id="default.action">
1418 <anchor id="standard.action">
1419 <anchor id="user.action">
1420 <!-- Note: slightly modified this section 04/28/02, hal. See NOTE. -->
1421 <variablelist>
1422  <varlistentry>
1423   <term>Specifies:</term>
1424   <listitem>
1425    <para>
1426     The <link linkend="actions-file">actions file(s)</link> to use
1427    </para>
1428   </listitem>
1429  </varlistentry>
1430  <varlistentry>
1431   <term>Type of value:</term>
1432   <listitem>
1433    <para>File name, relative to <literal>confdir</literal>, without the <literal>.action</literal> suffix</para>
1434   </listitem>
1435  </varlistentry>
1436  <varlistentry>
1437   <term>Default values:</term>
1438   <listitem>
1439    <simplelist>
1440     <member>
1441      <msgtext><literallayout>  standard     # Internal purposes, no editing recommended</literallayout></msgtext>
1442     </member>
1443     <member>
1444      <msgtext><literallayout>  default      # Main actions file</literallayout></msgtext>
1445     </member>
1446     <member>
1447      <msgtext><literallayout>  user         # User customizations</literallayout></msgtext>
1448     </member>
1449    </simplelist>
1450   </listitem>
1451  </varlistentry>
1452  <varlistentry>
1453   <term>Effect if unset:</term>
1454   <listitem>
1455    <para>
1456     No actions are taken at all. Simple neutral proxying. 
1457    </para>
1458   </listitem>
1459  </varlistentry>
1460  <varlistentry>
1461   <term>Notes:</term>
1462   <listitem>
1463    <para>
1464     Multiple <literal>actionsfile</literal> lines are permitted, and are in fact recommended!
1465    </para>
1466    <para> 
1467     The default values include standard.action, which is used for internal
1468     purposes and should be loaded, default.action, which is the
1469     <quote>main</quote> actions file maintained by the developers, and
1470     <filename>user.action</filename>, where you can make your personal additions.
1471    </para>
1472    <para> 
1473     Actions files are where all the per site and per URL configuration is done for 
1474     ad blocking, cookie management, privacy considerations, etc.
1475     There is no point in using <application>Privoxy</application> without at 
1476     least one actions file.
1477    </para>
1478   </listitem>
1479  </varlistentry>
1480 </variablelist>
1481 </sect3>
1482
1483 <sect3 renderas="sect4" id="filterfile"><title>filterfile</title>
1484 <anchor id="default.filter">
1485 <variablelist>
1486  <varlistentry>
1487   <term>Specifies:</term>
1488   <listitem>
1489    <para>
1490     The <link linkend="filter-file">filter file</link> to use
1491    </para>
1492   </listitem>
1493  </varlistentry>
1494  <varlistentry>
1495   <term>Type of value:</term>
1496   <listitem>
1497    <para>File name, relative to <literal>confdir</literal></para>
1498   </listitem>
1499  </varlistentry>
1500  <varlistentry>
1501   <term>Default value:</term>
1502   <listitem>
1503    <para>default.filter (Unix) <emphasis>or</emphasis> default.filter.txt (Windows)</para>
1504   </listitem>
1505  </varlistentry>
1506  <varlistentry>
1507   <term>Effect if unset:</term>
1508   <listitem>
1509    <para>
1510     No textual content filtering takes place, i.e. all
1511     <literal>+<link linkend="filter">filter</link>{<replaceable class="parameter">name</replaceable>}</literal>
1512     actions in the actions files are turned neutral.
1513    </para>
1514   </listitem>
1515  </varlistentry>
1516  <varlistentry>
1517   <term>Notes:</term>
1518   <listitem>
1519    <para>
1520     The <link linkend="filter-file">filter file</link> contains content modification
1521     rules that use <link linkend="regex">regular expressions</link>. These rules permit
1522     powerful changes on the content of Web pages, e.g., you could disable your favorite
1523     JavaScript annoyances, re-write the actual displayed text, or just have some
1524     fun replacing <quote>Microsoft</quote> with <quote>MicroSuck</quote> wherever
1525     it appears on a Web page.
1526    </para>
1527    <para>
1528     The
1529     <literal>+<link linkend="filter">filter</link>{<replaceable class="parameter">name</replaceable>}</literal>
1530     actions rely on the relevant filter (<replaceable class="parameter">name</replaceable>)
1531     to be defined in the filter file!
1532    </para>
1533    <para>
1534     A pre-defined filter file called <filename>default.filter</filename> that contains
1535     a bunch of handy filters for common problems is included in the distribution.
1536     See the section on the <literal><link linkend="filter">filter</link></literal>
1537     action for a list.
1538    </para>
1539   </listitem>
1540  </varlistentry>
1541 </variablelist>
1542 </sect3>
1543
1544 <sect3 renderas="sect4" id="logfile"><title>logfile</title>
1545
1546 <variablelist>
1547  <varlistentry>
1548   <term>Specifies:</term>
1549   <listitem>
1550    <para>
1551     The log file to use
1552    </para>
1553   </listitem>
1554  </varlistentry>
1555  <varlistentry>
1556   <term>Type of value:</term>
1557   <listitem>
1558    <para>File name, relative to <literal>logdir</literal></para>
1559   </listitem>
1560  </varlistentry>
1561  <varlistentry>
1562   <term>Default value:</term>
1563   <listitem>
1564    <para>logfile (Unix) <emphasis>or</emphasis> privoxy.log (Windows)</para>
1565   </listitem>
1566  </varlistentry>
1567  <varlistentry>
1568   <term>Effect if unset:</term>
1569   <listitem>
1570    <para>
1571     No log file is used, all log messages go to the console (<literal>stderr</literal>).
1572    </para>
1573   </listitem>
1574  </varlistentry>
1575  <varlistentry>
1576   <term>Notes:</term>
1577   <listitem>
1578    <para>
1579     The windows version will additionally log to the console.
1580    </para>
1581    <para>
1582     The logfile is where all logging and error messages are written. The level
1583     of detail and number of messages are set with the <literal>debug</literal>
1584     option (see below). The logfile can be useful for tracking down a problem with
1585     <application>Privoxy</application> (e.g., it's not blocking an ad you
1586     think it should block) but in most cases you probably will never look at it.
1587    </para>
1588    <para>
1589     Your logfile will grow indefinitely, and you will probably want to
1590     periodically remove it.  On Unix systems, you can do this with a cron job
1591     (see <quote>man cron</quote>). For Red Hat, a <command>logrotate</command> 
1592     script has been included.
1593    </para> 
1594    <para>
1595     On SuSE Linux systems, you can place a line like <quote>/var/log/privoxy.*
1596     +1024k 644 nobody.nogroup</quote> in <filename>/etc/logfiles</filename>, with
1597     the effect that cron.daily will automatically archive, gzip, and empty the
1598     log, when it exceeds 1M size.
1599    </para>
1600    <para>
1601     Any log files must be writable by whatever user <application>Privoxy</application>
1602     is being run as (default on UNIX, user id is <quote>privoxy</quote>).
1603    </para>
1604   </listitem>
1605  </varlistentry>
1606 </variablelist>
1607 </sect3>
1608
1609 <sect3 renderas="sect4" id="jarfile"><title>jarfile</title>
1610
1611 <variablelist>
1612  <varlistentry>
1613   <term>Specifies:</term>
1614   <listitem>
1615    <para>
1616     The file to store intercepted cookies in
1617    </para>
1618   </listitem>
1619  </varlistentry>
1620  <varlistentry>
1621   <term>Type of value:</term>
1622   <listitem>
1623    <para>File name, relative to <literal>logdir</literal></para>
1624   </listitem>
1625  </varlistentry>
1626  <varlistentry>
1627   <term>Default value:</term>
1628   <listitem>
1629    <para>jarfile (Unix) <emphasis>or</emphasis> privoxy.jar (Windows)</para>
1630   </listitem>
1631  </varlistentry>
1632  <varlistentry>
1633   <term>Effect if unset:</term>
1634   <listitem>
1635    <para>
1636     Intercepted cookies are not stored at all.
1637    </para>
1638   </listitem>
1639  </varlistentry>
1640  <varlistentry>
1641   <term>Notes:</term>
1642   <listitem>
1643    <para>
1644     The jarfile may grow to ridiculous sizes over time.
1645    </para>
1646   </listitem>
1647  </varlistentry>
1648 </variablelist>
1649 </sect3>
1650
1651 <sect3 renderas="sect4" id="trustfile"><title>trustfile</title>
1652 <variablelist>
1653  <varlistentry>
1654   <term>Specifies:</term>
1655   <listitem>
1656    <para>
1657     The trust file to use
1658    </para>
1659   </listitem>
1660  </varlistentry>
1661  <varlistentry>
1662   <term>Type of value:</term>
1663   <listitem>
1664    <para>File name, relative to <literal>confdir</literal></para>
1665   </listitem>
1666  </varlistentry>
1667  <varlistentry>
1668   <term>Default value:</term>
1669   <listitem>
1670    <para><emphasis>Unset (commented out)</emphasis>. When activated: trust (Unix) <emphasis>or</emphasis> trust.txt (Windows)</para>
1671   </listitem>
1672  </varlistentry>
1673  <varlistentry>
1674   <term>Effect if unset:</term>
1675   <listitem>
1676    <para>
1677     The whole trust mechanism is turned off.
1678    </para>
1679   </listitem>
1680  </varlistentry>
1681  <varlistentry>
1682   <term>Notes:</term>
1683   <listitem>
1684    <para>
1685     The trust mechanism is an experimental feature for building white-lists and should
1686     be used with care. It is <emphasis>NOT</emphasis> recommended for the casual user.
1687    </para>
1688    <para>
1689     If you specify a trust file, <application>Privoxy</application> will only allow
1690     access to sites that are named in the trustfile. 
1691     You can also mark sites as trusted referrers (with <literal>+</literal>), with
1692     the effect that access to untrusted sites will be granted, if a link from a
1693     trusted referrer was used.
1694     The link target will then be added to the <quote>trustfile</quote>.
1695     Possible applications include limiting Internet access for children.
1696    </para>
1697    <para>
1698     If you use <literal>+</literal> operator in the trust file, it may grow considerably over time.
1699    </para>
1700   </listitem>
1701  </varlistentry>
1702 </variablelist>
1703 </sect3>
1704 </sect2>
1705
1706 <!--  ~  End section  ~  -->
1707
1708
1709
1710 <!--   ~~~~~       New section      ~~~~~     -->
1711
1712 <sect2 id="local-set-up">
1713 <title>Local Set-up Documentation</title>
1714
1715   <para>
1716     If you intend to operate <application>Privoxy</application> for more users
1717     than just yourself, it might be a good idea to let them know how to reach
1718     you, what you block and why you do that, your policies, etc.
1719    </para>
1720
1721 <sect3 renderas="sect4" id="user-manual"><title>user-manual</title>
1722 <variablelist>
1723  <varlistentry>
1724   <term>Specifies:</term>
1725   <listitem>
1726    <para>
1727     Location of the <application>Privoxy</application> User Manual.
1728    </para>
1729   </listitem>
1730  </varlistentry>
1731  <varlistentry>
1732   <term>Type of value:</term>
1733   <listitem>
1734    <para>A fully qualified URI</para>
1735   </listitem>
1736  </varlistentry>
1737  <varlistentry>
1738   <term>Default value:</term>
1739   <listitem>
1740    <para><emphasis>Unset</emphasis></para>
1741   </listitem>
1742  </varlistentry>
1743  <varlistentry>
1744   <term>Effect if unset:</term>
1745   <listitem>
1746    <para>
1747     <ulink url="http://www.privoxy.org/user-manual/">http://www.privoxy.org/<replaceable class="parameter">version</replaceable>/user-manual/</ulink>
1748     will be used, where <replaceable class="parameter">version</replaceable> is the <application>Privoxy</application> version.
1749    </para>
1750   </listitem>
1751  </varlistentry>
1752  <varlistentry>
1753   <term>Notes:</term>
1754   <listitem>
1755     <para>
1756     The User Manual URI is used for help links from some of the internal CGI pages. 
1757     The manual itself is normally packaged with the binary distributions, so you probably want
1758     to set this to a locally installed copy. For multi-user setups, you could provide a copy on
1759     a local webserver for all your users and use the corresponding URL here.
1760    </para>
1761    <para>
1762     Examples:
1763    </para>
1764   <para>
1765    Unix, in local filesystem:
1766   </para>
1767   <para>
1768    <screen>user-manual&nbsp;&nbsp;file:///usr/share/doc/privoxy-&p-version;/user-manual/</screen>
1769   </para>
1770   <para>
1771    Any platform, on local webserver (called <quote>local-webserver</quote>):
1772   </para>
1773   <para>
1774    <screen>user-manual&nbsp;&nbsp;http://local-webserver/privoxy-user-manual/</screen>
1775   </para>
1776   <warning>
1777    <para>
1778      If set, this option should be <emphasis>the first option in the config file</emphasis>, because
1779      it is used while the config file is being read.
1780    </para>
1781   </warning>     
1782  </listitem>
1783  </varlistentry>
1784 </variablelist>
1785 </sect3>
1786
1787 <sect3 renderas="sect4" id="trust-info-url"><title>trust-info-url</title>
1788
1789 <variablelist>
1790  <varlistentry>
1791   <term>Specifies:</term>
1792   <listitem>
1793    <para>
1794     A URL to be displayed in the error page that users will see if access to an untrusted page is denied.    
1795    </para>
1796   </listitem>
1797  </varlistentry>
1798  <varlistentry>
1799   <term>Type of value:</term>
1800   <listitem>
1801    <para>URL</para>
1802   </listitem>
1803  </varlistentry>
1804  <varlistentry>
1805   <term>Default value:</term>
1806   <listitem>
1807    <para>Two example URL are provided</para>
1808   </listitem>
1809  </varlistentry>
1810  <varlistentry>
1811   <term>Effect if unset:</term>
1812   <listitem>
1813    <para>
1814     No links are displayed on the "untrusted" error page.
1815    </para>
1816   </listitem>
1817  </varlistentry>
1818  <varlistentry>
1819   <term>Notes:</term>
1820   <listitem>
1821    <para>
1822     The value of this option only matters if the experimental trust mechanism has been
1823     activated. (See <link linkend="trustfile"><emphasis>trustfile</emphasis></link> above.)
1824    </para>
1825    <para>
1826     If you use the trust mechanism, it is a good idea to write up some on-line
1827     documentation about your trust policy and to specify the URL(s) here.
1828     Use multiple times for multiple URLs.
1829    </para>
1830    <para>
1831     The URL(s) should be added to the trustfile as well, so users don't end up
1832     locked out from the information on why they were locked out in the first place!
1833    </para>
1834   </listitem>
1835  </varlistentry>
1836 </variablelist>
1837 </sect3>
1838
1839 <sect3 renderas="sect4" id="admin-address"><title>admin-address</title>
1840
1841 <variablelist>
1842  <varlistentry>
1843   <term>Specifies:</term>
1844   <listitem>
1845    <para>
1846     An email address to reach the proxy administrator.
1847    </para>
1848   </listitem>
1849  </varlistentry>
1850  <varlistentry>
1851   <term>Type of value:</term>
1852   <listitem>
1853    <para>Email address</para>
1854   </listitem>
1855  </varlistentry>
1856  <varlistentry>
1857   <term>Default value:</term>
1858   <listitem>
1859    <para><emphasis>Unset</emphasis></para>
1860   </listitem>
1861  </varlistentry>
1862  <varlistentry>
1863   <term>Effect if unset:</term>
1864   <listitem>
1865    <para>
1866     No email address is displayed on error pages and the CGI user interface.
1867    </para>
1868   </listitem>
1869  </varlistentry>
1870  <varlistentry>
1871   <term>Notes:</term>
1872   <listitem>
1873     <para>
1874     If both <literal>admin-address</literal> and <literal>proxy-info-url</literal>
1875     are unset, the whole "Local Privoxy Support" box on all generated pages will
1876     not be shown.
1877    </para>  
1878   </listitem>
1879  </varlistentry>
1880 </variablelist>
1881 </sect3>
1882
1883 <sect3 renderas="sect4" id="proxy-info-url"><title>proxy-info-url</title>
1884
1885 <variablelist>
1886  <varlistentry>
1887   <term>Specifies:</term>
1888   <listitem>
1889    <para>
1890     A URL to documentation about the local <application>Privoxy</application> setup,
1891     configuration or policies.
1892    </para>
1893   </listitem>
1894  </varlistentry>
1895  <varlistentry>
1896   <term>Type of value:</term>
1897   <listitem>
1898    <para>URL</para>
1899   </listitem>
1900  </varlistentry>
1901  <varlistentry>
1902   <term>Default value:</term>
1903   <listitem>
1904    <para><emphasis>Unset</emphasis></para>
1905   </listitem>
1906  </varlistentry>
1907  <varlistentry>
1908   <term>Effect if unset:</term>
1909   <listitem>
1910    <para>
1911     No link to local documentation is displayed on error pages and the CGI user interface.
1912    </para>
1913   </listitem>
1914  </varlistentry>
1915  <varlistentry>
1916   <term>Notes:</term>
1917   <listitem>
1918    <para>
1919     If both <literal>admin-address</literal> and <literal>proxy-info-url</literal>
1920     are unset, the whole "Local Privoxy Support" box on all generated pages will
1921     not be shown.
1922    </para>  
1923    <para>
1924     This URL shouldn't be blocked ;-)
1925    </para> 
1926   </listitem>
1927  </varlistentry>
1928 </variablelist>
1929 </sect3>
1930
1931 </sect2>
1932 <!--  ~  End section  ~  -->
1933
1934 <!--   ~~~~~       New section      ~~~~~     -->
1935
1936 <sect2 id="debugging">
1937 <title>Debugging</title>
1938
1939  <para>
1940   These options are mainly useful when tracing a problem.
1941   Note that you might also want to invoke
1942   <application>Privoxy</application> with the <literal>--no-daemon</literal>
1943   command line option when debugging.
1944  </para>
1945
1946 <sect3 renderas="sect4" id="debug"><title>debug</title>
1947
1948 <variablelist>
1949  <varlistentry>
1950   <term>Specifies:</term>
1951   <listitem>
1952    <para>
1953     Key values that determine what information gets logged to the 
1954     <link linkend="logfile"><emphasis>logfile</emphasis></link>.
1955    </para>
1956   </listitem>
1957  </varlistentry>
1958  <varlistentry>
1959   <term>Type of value:</term>
1960   <listitem>
1961    <para>Integer values</para>
1962   </listitem>
1963  </varlistentry>
1964  <varlistentry>
1965   <term>Default value:</term>
1966   <listitem>
1967    <para>12289 (i.e.: URLs plus informational and warning messages)</para>
1968   </listitem>
1969  </varlistentry>
1970  <varlistentry>
1971   <term>Effect if unset:</term>
1972   <listitem>
1973    <para>
1974     Nothing gets logged.
1975    </para>
1976   </listitem>
1977  </varlistentry>
1978  <varlistentry>
1979   <term>Notes:</term>
1980   <listitem>
1981    <para>
1982     The available debug levels are:
1983    </para>
1984    <para>
1985     <programlisting>
1986   debug         1 # show each GET/POST/CONNECT request
1987   debug         2 # show each connection status
1988   debug         4 # show I/O status
1989   debug         8 # show header parsing
1990   debug        16 # log all data into the logfile
1991   debug        32 # debug force feature
1992   debug        64 # debug regular expression filter 
1993   debug       128 # debug fast redirects
1994   debug       256 # debug GIF de-animation
1995   debug       512 # Common Log Format
1996   debug      1024 # debug kill pop-ups
1997   debug      4096 # Startup banner and warnings.
1998   debug      8192 # Non-fatal errors
1999 </programlisting>
2000    </para>
2001    <para>
2002     To select multiple debug levels, you can either add them or use
2003     multiple <literal>debug</literal> lines.
2004    </para>
2005    <para>
2006     A debug level of 1 is informative because it will show you each request
2007     as it happens. <emphasis>1, 4096 and 8192 are highly recommended</emphasis>
2008     so that you will notice when things go wrong. The other levels are probably
2009     only of interest if you are hunting down a specific problem. They can produce
2010     a hell of an output (especially 16).
2011     <!-- LOL -->
2012    </para>
2013    <para>
2014     The reporting of <emphasis>fatal</emphasis> errors (i.e. ones which crash 
2015     <application>Privoxy</application>) is always on and cannot be disabled.
2016    </para>
2017    <para>
2018     If you want to use CLF (Common Log Format), you should set <quote>debug
2019     512</quote> <emphasis>ONLY</emphasis> and not enable anything else.
2020    </para>
2021   </listitem>
2022  </varlistentry>
2023 </variablelist>
2024 </sect3>
2025
2026 <sect3 renderas="sect4" id="single-threaded"><title>single-threaded</title>
2027
2028 <variablelist>
2029  <varlistentry>
2030   <term>Specifies:</term>
2031   <listitem>
2032    <para>
2033     Whether to run only one server thread
2034    </para>
2035   </listitem>
2036  </varlistentry>
2037  <varlistentry>
2038   <term>Type of value:</term>
2039   <listitem>
2040    <para><emphasis>None</emphasis></para>
2041   </listitem>
2042  </varlistentry>
2043  <varlistentry>
2044   <term>Default value:</term>
2045   <listitem>
2046    <para><emphasis>Unset</emphasis></para>
2047   </listitem>
2048  </varlistentry>
2049  <varlistentry>
2050   <term>Effect if unset:</term>
2051   <listitem>
2052    <para>
2053     Multi-threaded (or, where unavailable: forked) operation, i.e. the ability to
2054     serve multiple requests simultaneously.
2055    </para>
2056   </listitem>
2057  </varlistentry>
2058  <varlistentry>
2059   <term>Notes:</term>
2060   <listitem>
2061    <para>
2062     This option is only there for debug purposes and you should never
2063     need to use it. <emphasis>It will drastically reduce performance.</emphasis>
2064    </para>
2065   </listitem>
2066  </varlistentry>
2067 </variablelist>
2068 </sect3>
2069
2070 </sect2>
2071
2072 <!--   ~~~~~       New section      ~~~~~     -->
2073
2074 <sect2 id="access-control">
2075 <title>Access Control and Security</title>
2076
2077  <para>
2078   This section of the config file controls the security-relevant aspects
2079   of <application>Privoxy</application>'s configuration.
2080  </para>
2081
2082 <sect3 renderas="sect4" id="listen-address"><title>listen-address</title>
2083
2084 <variablelist>
2085  <varlistentry>
2086   <term>Specifies:</term>
2087   <listitem>
2088    <para>
2089     The IP address and TCP port on which <application>Privoxy</application> will
2090     listen for client requests.
2091    </para>
2092   </listitem>
2093  </varlistentry>
2094  <varlistentry>
2095   <term>Type of value:</term>
2096   <listitem>
2097    <para>[<replaceable class="parameter">IP-Address</replaceable>]:<replaceable class="parameter">Port</replaceable></para>
2098   </listitem>
2099  </varlistentry>
2100
2101  <varlistentry>
2102   <term>Default value:</term>
2103   <listitem>
2104    <para>127.0.0.1:8118</para>
2105   </listitem>
2106  </varlistentry>
2107  <varlistentry>
2108   <term>Effect if unset:</term>
2109   <listitem>
2110    <para>
2111     Bind to 127.0.0.1 (localhost), port 8118. This is suitable and recommended for
2112     home users who run <application>Privoxy</application> on the same machine as
2113     their browser.
2114    </para>
2115   </listitem>
2116  </varlistentry>
2117  <varlistentry>
2118   <term>Notes:</term>
2119   <listitem>
2120    <para>
2121     You will need to configure your browser(s) to this proxy address and port.
2122    </para>
2123    <para>
2124     If you already have another service running on port 8118, or if you want to
2125     serve requests from other machines (e.g. on your local network) as well, you
2126     will need to override the default.
2127    </para>
2128    <para>
2129     If you leave out the IP address, <application>Privoxy</application> will
2130     bind to all interfaces (addresses) on your machine and may become reachable
2131     from the Internet. In that case, consider using <link
2132     linkend="acls">access control lists</link> (ACL's, see below), and/or
2133     a firewall.
2134    </para>
2135    <para>
2136     If you open <application>Privoxy</application> to untrusted users, you will
2137     also want to turn off the <literal><link
2138     linkend="enable-edit-actions">enable-edit-actions</link></literal> and
2139     <literal><link linkend="enable-remote-toggle">enable-remote-toggle</link></literal>
2140     options!
2141    </para>
2142   </listitem>
2143  </varlistentry>
2144  <varlistentry>
2145   <term>Example:</term>
2146   <listitem>
2147    <para>
2148      Suppose you are running <application>Privoxy</application> on
2149      a machine which has the address 192.168.0.1 on your local private network
2150      (192.168.0.0) and has another outside connection with a different address.
2151      You want it to serve requests from inside only:
2152    </para>
2153    <para>
2154     <programlisting>
2155   listen-address  192.168.0.1:8118
2156 </programlisting>
2157    </para>
2158   </listitem>
2159  </varlistentry>
2160 </variablelist>
2161 </sect3>
2162
2163 <sect3 renderas="sect4" id="toggle"><title>toggle</title>
2164
2165 <variablelist>
2166  <varlistentry>
2167   <term>Specifies:</term>
2168   <listitem>
2169    <para>
2170     Initial state of "toggle" status
2171    </para>
2172   </listitem>
2173  </varlistentry>
2174  <varlistentry>
2175   <term>Type of value:</term>
2176   <listitem>
2177    <para>1 or 0</para>
2178   </listitem>
2179  </varlistentry>
2180  <varlistentry>
2181   <term>Default value:</term>
2182   <listitem>
2183    <para>1</para>
2184   </listitem>
2185  </varlistentry>
2186  <varlistentry>
2187   <term>Effect if unset:</term>
2188   <listitem>
2189    <para>
2190     Act as if toggled on
2191    </para>
2192   </listitem>
2193  </varlistentry>
2194  <varlistentry>
2195   <term>Notes:</term>
2196   <listitem>
2197    <para>
2198     If set to 0, <application>Privoxy</application> will start in
2199     <quote>toggled off</quote> mode, i.e. behave like a normal, content-neutral
2200     proxy where all ad blocking, filtering, etc are disabled. See
2201     <literal>enable-remote-toggle</literal> below. This is not really useful
2202     anymore, since toggling is much easier via <ulink
2203     url="http://config.privoxy.org/toggle">the web interface</ulink> than via
2204     editing the <filename>conf</filename> file.
2205    </para>
2206    <para>
2207     The windows version will only display the toggle icon in the system tray
2208     if this option is present.
2209    </para>
2210   </listitem>
2211  </varlistentry>
2212 </variablelist>
2213 </sect3>
2214
2215
2216 <sect3 renderas="sect4" id="enable-remote-toggle"><title>enable-remote-toggle</title>
2217 <variablelist>
2218  <varlistentry>
2219   <term>Specifies:</term>
2220   <listitem>
2221    <para>
2222     Whether or not the <ulink url="http://config.privoxy.org/toggle">web-based toggle
2223     feature</ulink> may be used
2224    </para>
2225   </listitem>
2226  </varlistentry>
2227  <varlistentry>
2228   <term>Type of value:</term>
2229   <listitem>
2230    <para>0 or 1</para>
2231   </listitem>
2232  </varlistentry>
2233  <varlistentry>
2234   <term>Default value:</term>
2235   <listitem>
2236    <para>1</para>
2237   </listitem>
2238  </varlistentry>
2239  <varlistentry>
2240   <term>Effect if unset:</term>
2241   <listitem>
2242    <para>
2243     The web-based toggle feature is disabled.
2244    </para>
2245   </listitem>
2246  </varlistentry>
2247  <varlistentry>
2248   <term>Notes:</term>
2249   <listitem>
2250    <para>
2251     When toggled off, <application>Privoxy</application> acts like a normal,
2252     content-neutral proxy, i.e. it acts as if none of the actions applied to
2253     any URL.
2254    </para>
2255    <para>
2256     For the time being, access to the toggle feature can <emphasis>not</emphasis> be
2257     controlled separately by <quote>ACLs</quote> or HTTP authentication,
2258     so that everybody who can access <application>Privoxy</application> (see
2259     <quote>ACLs</quote> and <literal>listen-address</literal> above) can
2260     toggle it for all users. So this option is <emphasis>not recommended</emphasis>
2261     for multi-user environments with untrusted users.
2262    </para>
2263    <para>
2264     Note that you must have compiled <application>Privoxy</application> with
2265     support for this feature, otherwise this option has no effect. 
2266    </para>
2267   </listitem>
2268  </varlistentry>
2269 </variablelist>
2270 </sect3>
2271
2272
2273 <sect3 renderas="sect4" id="enable-edit-actions"><title>enable-edit-actions</title>
2274 <variablelist>
2275  <varlistentry>
2276   <term>Specifies:</term>
2277   <listitem>
2278    <para>
2279     Whether or not the <ulink url="http://config.privoxy.org/show-status">web-based actions
2280     file editor</ulink> may be used
2281    </para>
2282   </listitem>
2283  </varlistentry>
2284  <varlistentry>
2285   <term>Type of value:</term>
2286   <listitem>
2287    <para>0 or 1</para>
2288   </listitem>
2289  </varlistentry>
2290  <varlistentry>
2291   <term>Default value:</term>
2292   <listitem>
2293    <para>1</para>
2294   </listitem>
2295  </varlistentry>
2296  <varlistentry>
2297   <term>Effect if unset:</term>
2298   <listitem>
2299    <para>
2300     The web-based actions file editor is disabled.
2301    </para>
2302   </listitem>
2303  </varlistentry>
2304  <varlistentry>
2305   <term>Notes:</term>
2306   <listitem>
2307    <para>
2308     For the time being, access to the editor can <emphasis>not</emphasis> be
2309     controlled separately by <quote>ACLs</quote> or HTTP authentication,
2310     so that everybody who can access <application>Privoxy</application> (see
2311     <quote>ACLs</quote> and <literal>listen-address</literal> above) can
2312     modify its configuration for all users. So this option is <emphasis>not
2313     recommended</emphasis> for multi-user environments with untrusted users.
2314    </para>
2315    <para>
2316     Note that you must have compiled <application>Privoxy</application> with
2317     support for this feature, otherwise this option has no effect. 
2318    </para>
2319   </listitem>
2320  </varlistentry>
2321 </variablelist>
2322 </sect3>
2323
2324 <sect3 renderas="sect4" id="acls"><title>
2325 ACLs: permit-access and deny-access</title>
2326 <anchor id="permit-access">
2327 <anchor id="deny-access">
2328
2329 <variablelist>
2330  <varlistentry>
2331   <term>Specifies:</term>
2332   <listitem>
2333    <para>
2334     Who can access what.
2335    </para>
2336   </listitem>
2337  </varlistentry>
2338  <varlistentry>
2339   <term>Type of value:</term>
2340   <listitem>
2341    <para>
2342     <replaceable class="parameter">src_addr</replaceable>[/<replaceable class="parameter">src_masklen</replaceable>]
2343     [<replaceable class="parameter">dst_addr</replaceable>[/<replaceable class="parameter">dst_masklen</replaceable>]]
2344    </para>
2345    <para>
2346     Where <replaceable class="parameter">src_addr</replaceable> and 
2347    <replaceable class="parameter">dst_addr</replaceable> are IP addresses in dotted decimal notation or valid
2348     DNS names, and <replaceable class="parameter">src_masklen</replaceable> and
2349     <replaceable class="parameter">dst_masklen</replaceable> are subnet masks in CIDR notation, i.e. integer
2350     values from 2 to 30 representing the length (in bits) of the network address. The masks and the whole
2351     destination part are optional.
2352    </para>
2353   </listitem>
2354  </varlistentry>
2355  <varlistentry>
2356   <term>Default value:</term>
2357   <listitem>
2358    <para><emphasis>Unset</emphasis></para>
2359   </listitem>
2360  </varlistentry>
2361  <varlistentry>
2362   <term>Effect if unset:</term>
2363   <listitem>
2364    <para>
2365     Don't restrict access further than implied by <literal>listen-address</literal>
2366    </para>
2367   </listitem>
2368  </varlistentry>
2369  <varlistentry>
2370   <term>Notes:</term>
2371   <listitem>
2372    <para>
2373     Access controls are included at the request of ISPs and systems
2374     administrators, and <emphasis>are not usually needed by individual users</emphasis>.
2375     For a typical home user, it will normally suffice to ensure that 
2376     <application>Privoxy</application> only listens on the localhost
2377     (127.0.0.1) or internal (home) network address by means of the
2378     <link linkend="listen-address"><emphasis>listen-address</emphasis></link>
2379     option. 
2380    </para>
2381    <para>
2382     Please see the warnings in the FAQ that this proxy is not intended to be a substitute
2383     for a firewall or to encourage anyone to defer addressing basic security
2384     weaknesses.
2385    </para>
2386    <para>
2387     Multiple ACL lines are OK.
2388     If any ACLs are specified, then the <application>Privoxy</application>
2389     talks only to IP addresses that match at least one <literal>permit-access</literal> line
2390     and don't match any subsequent <literal>deny-access</literal> line. In other words, the
2391     last match wins, with the default being <literal>deny-access</literal>.
2392    </para>
2393    <para>
2394     If <application>Privoxy</application> is using a forwarder (see <literal>forward</literal> below)
2395     for a particular destination URL, the <replaceable class="parameter">dst_addr</replaceable>
2396     that is examined is the address of the forwarder and <emphasis>NOT</emphasis> the address
2397     of the ultimate target. This is necessary because it may be impossible for the local
2398     <application>Privoxy</application> to determine the IP address of the
2399     ultimate target (that's often what gateways are used for).
2400    </para>
2401    <para>
2402     You should prefer using IP addresses over DNS names, because the address lookups take
2403     time. All DNS names must resolve! You can <emphasis>not</emphasis> use domain patterns
2404     like <quote>*.org</quote> or partial domain names. If a DNS name resolves to multiple
2405     IP addresses, only the first one is used.
2406    </para>
2407    <para>
2408     Denying access to particular sites by ACL may have undesired side effects
2409     if the site in question is hosted on a machine which also hosts other sites.
2410    </para>
2411   </listitem>
2412  </varlistentry>
2413  <varlistentry>
2414   <term>Examples:</term>
2415   <listitem>
2416    <para>
2417     Explicitly define the default behavior if no ACL and
2418     <literal>listen-address</literal> are set: <quote>localhost</quote>
2419     is OK. The absence of a <replaceable class="parameter">dst_addr</replaceable> implies that
2420     <emphasis>all</emphasis> destination addresses are OK:
2421    </para>
2422    <para>
2423     <screen>
2424   permit-access  localhost
2425 </screen>
2426    </para>
2427    <para>
2428     Allow any host on the same class C subnet as www.privoxy.org access to
2429     nothing but www.example.com:
2430    </para>
2431    <para>
2432     <screen>
2433   permit-access  www.privoxy.org/24 www.example.com/32
2434 </screen>
2435    </para>
2436    <para>
2437     Allow access from any host on the 26-bit subnet 192.168.45.64 to anywhere,
2438     with the exception that 192.168.45.73 may not access www.dirty-stuff.example.com:
2439    </para>
2440    <para>
2441     <screen>
2442   permit-access  192.168.45.64/26
2443   deny-access    192.168.45.73    www.dirty-stuff.example.com
2444 </screen>
2445    </para>
2446   </listitem>
2447  </varlistentry>
2448 </variablelist>
2449 </sect3>
2450
2451 <sect3 renderas="sect4" id="buffer-limit"><title>buffer-limit</title>
2452
2453 <variablelist>
2454  <varlistentry>
2455   <term>Specifies:</term>
2456   <listitem>
2457    <para>
2458     Maximum size of the buffer for content filtering.
2459    </para>
2460   </listitem>
2461  </varlistentry>
2462  <varlistentry>
2463   <term>Type of value:</term>
2464   <listitem>
2465    <para>Size in Kbytes</para>
2466   </listitem>
2467  </varlistentry>
2468  <varlistentry>
2469   <term>Default value:</term>
2470   <listitem>
2471    <para>4096</para>
2472   </listitem>
2473  </varlistentry>
2474  <varlistentry>
2475   <term>Effect if unset:</term>
2476   <listitem>
2477    <para>
2478     Use a 4MB (4096 KB) limit.
2479    </para>
2480   </listitem>
2481  </varlistentry>
2482  <varlistentry>
2483   <term>Notes:</term>
2484   <listitem>
2485    <para>
2486     For content filtering, i.e. the <literal>+filter</literal> and
2487     <literal>+deanimate-gif</literal> actions, it is necessary that 
2488     <application>Privoxy</application> buffers the entire document body.
2489     This can be potentially dangerous, since a server could just keep sending
2490     data indefinitely and wait for your RAM to exhaust -- with nasty consequences.
2491     Hence this option.
2492    </para>
2493    <para>
2494     When a document buffer size reaches the <literal>buffer-limit</literal>, it is
2495     flushed to the client unfiltered and no further attempt to
2496     filter the rest of the document is made. Remember that there may be multiple threads
2497     running, which might require up to <literal>buffer-limit</literal> Kbytes
2498     <emphasis>each</emphasis>, unless you have enabled <quote>single-threaded</quote>
2499     above.
2500    </para>
2501   </listitem>
2502  </varlistentry>
2503 </variablelist>
2504 </sect3>
2505
2506 </sect2>
2507
2508 <!--  ~  End section  ~  -->
2509
2510
2511 <!--   ~~~~~       New section      ~~~~~     -->
2512
2513 <sect2 id="forwarding">
2514 <title>Forwarding</title>
2515
2516 <para>
2517  This feature allows routing of HTTP requests through a chain of
2518  multiple proxies.
2519  It can be used to better protect privacy and confidentiality when
2520  accessing specific domains by routing requests to those domains
2521  through an anonymous public proxy (see e.g. <ulink
2522  url="http://www.multiproxy.org/anon_list.htm">http://www.multiproxy.org/anon_list.htm</ulink>)
2523  Or to use a caching proxy to speed up browsing. Or chaining to a parent
2524  proxy may be necessary because the machine that <application>Privoxy</application>
2525  runs on has no direct Internet access.
2526 </para>
2527
2528 <para>
2529  Also specified here are SOCKS proxies. <application>Privoxy</application>
2530  supports the SOCKS 4 and SOCKS 4A protocols.
2531 </para>
2532
2533 <sect3 renderas="sect4" id="forward"><title>forward</title>
2534 <variablelist>
2535  <varlistentry>
2536   <term>Specifies:</term>
2537   <listitem>
2538    <para>
2539     To which parent HTTP proxy specific requests should be routed.
2540    </para>
2541   </listitem>
2542  </varlistentry>
2543  <varlistentry>
2544   <term>Type of value:</term>
2545   <listitem>
2546    <para>
2547     <replaceable class="parameter">target_domain</replaceable>[:<replaceable class="parameter">port</replaceable>]
2548     <replaceable class="parameter">http_parent</replaceable>[/<replaceable class="parameter">port</replaceable>]
2549    </para>
2550    <para>
2551     Where <replaceable class="parameter">target_domain</replaceable> is a domain name pattern (see the
2552     chapter on domain matching in the <filename>default.action</filename> file),
2553     <replaceable class="parameter">http_parent</replaceable> is the address of the parent HTTP proxy
2554     as an IP addresses in dotted decimal notation or as a valid DNS name (or <quote>.</quote> to denote
2555     <quote>no forwarding</quote>, and the optional 
2556     <replaceable class="parameter">port</replaceable> parameters are TCP ports, i.e. integer
2557     values from 1 to 64535
2558    </para>
2559   </listitem>
2560  </varlistentry>
2561  <varlistentry>
2562   <term>Default value:</term>
2563   <listitem>
2564    <para><emphasis>Unset</emphasis></para>
2565   </listitem>
2566  </varlistentry>
2567  <varlistentry>
2568   <term>Effect if unset:</term>
2569   <listitem>
2570    <para>
2571     Don't use parent HTTP proxies.
2572    </para>
2573   </listitem>
2574  </varlistentry>
2575  <varlistentry>
2576   <term>Notes:</term>
2577   <listitem>
2578    <para>
2579     If <replaceable class="parameter">http_parent</replaceable> is <quote>.</quote>, then requests are not
2580     forwarded to another HTTP proxy but are made directly to the web servers.
2581    </para>
2582    <para>
2583     Multiple lines are OK, they are checked in sequence, and the last match wins.
2584    </para>
2585   </listitem>
2586  </varlistentry>
2587  <varlistentry>
2588   <term>Examples:</term>
2589   <listitem>
2590    <para>
2591     Everything goes to an example anonymizing proxy, except SSL on port 443 (which it doesn't handle):
2592    </para>
2593    <para>
2594     <screen>
2595   forward   .*     anon-proxy.example.org:8080
2596   forward   :443   .
2597 </screen>
2598    </para>
2599    <para>
2600     Everything goes to our example ISP's caching proxy, except for requests
2601     to that ISP's sites:
2602    </para>
2603    <para>
2604     <screen>
2605   forward   .*.                caching-proxy.example-isp.net:8000
2606   forward   .example-isp.net   .
2607 </screen>
2608    </para>
2609   </listitem>
2610  </varlistentry>
2611 </variablelist>
2612 </sect3>
2613
2614 <sect3 renderas="sect4" id="socks"><title>
2615 forward-socks4 and forward-socks4a</title>
2616 <anchor id="forward-socks4">
2617 <anchor id="forward-socks4a">
2618
2619 <variablelist>
2620  <varlistentry>
2621   <term>Specifies:</term>
2622   <listitem>
2623    <para>
2624     Through which SOCKS proxy (and to which parent HTTP proxy) specific requests should be routed.
2625    </para>
2626   </listitem>
2627  </varlistentry>
2628  <varlistentry>
2629   <term>Type of value:</term>
2630   <listitem>
2631    <para>
2632     <replaceable class="parameter">target_domain</replaceable>[:<replaceable class="parameter">port</replaceable>]
2633     <replaceable class="parameter">socks_proxy</replaceable>[/<replaceable class="parameter">port</replaceable>]
2634     <replaceable class="parameter">http_parent</replaceable>[/<replaceable class="parameter">port</replaceable>]
2635    </para>
2636    <para>
2637     Where <replaceable class="parameter">target_domain</replaceable> is a domain name pattern (see the
2638     chapter on domain matching in the <filename>default.action</filename> file),
2639     <replaceable class="parameter">http_parent</replaceable> and <replaceable class="parameter">socks_proxy</replaceable>
2640     are IP addresses in dotted decimal notation or valid DNS names (<replaceable class="parameter">http_parent</replaceable>
2641     may be <quote>.</quote> to denote <quote>no HTTP forwarding</quote>), and the optional 
2642     <replaceable class="parameter">port</replaceable> parameters are TCP ports, i.e. integer values from 1 to 64535
2643    </para>
2644   </listitem>
2645  </varlistentry>
2646  <varlistentry>
2647   <term>Default value:</term>
2648   <listitem>
2649    <para><emphasis>Unset</emphasis></para>
2650   </listitem>
2651  </varlistentry>
2652  <varlistentry>
2653   <term>Effect if unset:</term>
2654   <listitem>
2655    <para>
2656     Don't use SOCKS proxies.
2657    </para>
2658   </listitem>
2659  </varlistentry>
2660  <varlistentry>
2661   <term>Notes:</term>
2662   <listitem>
2663    <para>
2664     Multiple lines are OK, they are checked in sequence, and the last match wins.
2665    </para>
2666    <para>
2667     The difference between <literal>forward-socks4</literal> and <literal>forward-socks4a</literal>
2668     is that in the SOCKS 4A protocol, the DNS resolution of the target hostname happens on the SOCKS
2669     server, while in SOCKS 4 it happens locally.
2670    </para>
2671    <para>
2672     If <replaceable class="parameter">http_parent</replaceable> is <quote>.</quote>, then requests are not
2673     forwarded to another HTTP proxy but are made (HTTP-wise) directly to the web servers, albeit through
2674     a SOCKS proxy.
2675    </para>
2676   </listitem>
2677  </varlistentry>
2678  <varlistentry>
2679   <term>Examples:</term>
2680   <listitem>
2681    <para>
2682      From the company example.com, direct connections are made to all
2683      <quote>internal</quote> domains, but everything outbound goes through
2684      their ISP's proxy by way of example.com's corporate SOCKS 4A gateway to
2685      the Internet.
2686    </para>
2687    <para>
2688     <screen>
2689   forward-socks4a   .*.            socks-gw.example.com:1080  www-cache.example-isp.net:8080
2690   forward           .example.com   .
2691 </screen>
2692    </para>
2693    <para>
2694     A rule that uses a SOCKS 4 gateway for all destinations but no HTTP parent looks like this:
2695    </para>
2696    <para>
2697     <screen>
2698   forward-socks4   .*.            socks-gw.example.com:1080  .
2699 </screen>
2700    </para>
2701   </listitem>
2702  </varlistentry>
2703 </variablelist>
2704 </sect3>
2705
2706 <sect3 renderas="sect4" id="advanced-forwarding-examples"><title>Advanced Forwarding Examples</title>
2707
2708 <para>
2709  If you have links to multiple ISPs that provide various special content 
2710  only to their subscribers, you can configure multiple <application>Privoxies</application>
2711  which have connections to the respective ISPs to act as forwarders to each other, so that
2712  <emphasis>your</emphasis> users can see the internal content of all ISPs.
2713 </para>
2714
2715 <para>
2716  Assume that host-a has a PPP connection to isp-a.net. And host-b has a PPP connection to
2717  isp-b.net. Both run <application>Privoxy</application>. Their forwarding
2718  configuration can look like this:
2719 </para>
2720
2721 <para>
2722  host-a:
2723 </para>
2724
2725 <para>
2726  <screen>
2727   forward    .*.         .
2728   forward    .isp-b.net  host-b:8118
2729 </screen>
2730 </para>
2731
2732 <para>
2733  host-b:
2734 </para>
2735
2736 <para>
2737  <screen>
2738   forward    .*.         .
2739   forward    .isp-a.net  host-a:8118
2740 </screen>
2741 </para>
2742
2743 <para>
2744  Now, your users can set their browser's proxy to use either
2745  host-a or host-b and be able to browse the internal content
2746  of both isp-a and isp-b.
2747 </para>
2748
2749 <para>
2750  If you intend to chain <application>Privoxy</application> and 
2751  <application>squid</application> locally, then chain as 
2752  <literal>browser -> squid -> privoxy</literal> is the recommended way. 
2753 </para>
2754
2755 <para>
2756  Assuming that <application>Privoxy</application> and <application>squid</application>
2757  run on the same box, your squid configuration could then look like this:
2758 </para>
2759
2760 <para>
2761  <screen>
2762   # Define Privoxy as parent proxy (without ICP) 
2763   cache_peer 127.0.0.1 parent 8118 7 no-query 
2764
2765   # Define ACL for protocol FTP 
2766   acl ftp proto FTP 
2767
2768   # Do not forward FTP requests to Privoxy
2769   always_direct allow ftp 
2770
2771   # Forward all the rest to Privoxy
2772   never_direct allow all</screen>
2773 </para>
2774
2775 <para>
2776  You would then need to change your browser's proxy settings to <application>squid</application>'s address and port.
2777  Squid normally uses port 3128. If unsure consult <literal>http_port</literal> in <filename>squid.conf</filename>.
2778 </para>
2779
2780 </sect3>
2781
2782 </sect2>
2783
2784 <!--  ~  End section  ~  -->
2785
2786
2787 <!--   ~~~~~       New section      ~~~~~     -->
2788
2789 <sect2 id="windows-gui">
2790 <title>Windows GUI Options</title>
2791 <para>
2792  <application>Privoxy</application> has a number of options specific to the
2793  Windows GUI interface:
2794 </para>
2795
2796 <anchor id="activity-animation">
2797 <para>
2798  If <quote>activity-animation</quote> is set to 1, the
2799  <application>Privoxy</application> icon will animate when
2800  <quote>Privoxy</quote> is active. To turn off, set to 0.
2801 </para>
2802
2803 <para>
2804  <literal>
2805   <msgtext> 
2806    <literallayout>
2807   <emphasis>activity-animation   1</emphasis>
2808    </literallayout>
2809   </msgtext> 
2810  </literal>
2811 </para>
2812
2813 <anchor id="log-messages">
2814 <para>
2815  If <quote>log-messages</quote> is set to 1,
2816  <application>Privoxy</application> will log messages to the console
2817  window:
2818 </para>
2819
2820 <para>
2821  <literal>
2822   <msgtext> 
2823    <literallayout>
2824   <emphasis>log-messages       1</emphasis>
2825    </literallayout>
2826   </msgtext> 
2827  </literal>
2828 </para>
2829
2830 <anchor id="log-buffer-size">
2831 <para> 
2832  If <quote>log-buffer-size</quote> is set to 1, the size of the log buffer,
2833  i.e. the amount of memory used for the log messages displayed in the
2834  console window, will be limited to <quote>log-max-lines</quote> (see below).
2835 </para>
2836
2837 <para>
2838  Warning: Setting this to 0 will result in the buffer to grow infinitely and
2839  eat up all your memory!
2840 </para>
2841
2842 <para>
2843  <literal>
2844   <msgtext> 
2845    <literallayout>
2846   <emphasis>log-buffer-size      1</emphasis>
2847    </literallayout>
2848   </msgtext> 
2849  </literal>
2850 </para>
2851
2852 <anchor id="log-max-lines">
2853 <para>
2854  <application>log-max-lines</application> is the maximum number of lines held
2855  in the log buffer. See above.
2856 </para>
2857
2858 <para>
2859  <literal>
2860   <msgtext> 
2861    <literallayout>
2862   <emphasis>log-max-lines      200</emphasis>
2863    </literallayout>
2864   </msgtext> 
2865  </literal>
2866 </para>
2867
2868 <anchor id="log-highlight-messages">
2869 <para>
2870  If <quote>log-highlight-messages</quote> is set to 1,
2871  <application>Privoxy</application> will highlight portions of the log
2872  messages with a bold-faced font:
2873 </para>
2874
2875 <para>
2876  <literal>
2877   <msgtext> 
2878    <literallayout>
2879   <emphasis>log-highlight-messages   1</emphasis>
2880    </literallayout>
2881   </msgtext> 
2882  </literal>
2883 </para>
2884
2885 <anchor id="log-font-name">
2886 <para>
2887  The font used in the console window:
2888 </para>
2889
2890 <para>
2891  <literal>
2892   <msgtext> 
2893    <literallayout>
2894   <emphasis>log-font-name        Comic Sans MS</emphasis>
2895    </literallayout>
2896   </msgtext> 
2897  </literal>
2898 </para>
2899
2900 <anchor id="log-font-size">
2901 <para>
2902  Font size used in the console window:
2903 </para>
2904
2905 <para>
2906  <literal>
2907   <msgtext> 
2908    <literallayout>
2909   <emphasis>log-font-size        8</emphasis>
2910    </literallayout>
2911   </msgtext> 
2912  </literal>
2913 </para>
2914
2915 <anchor id="show-on-task-bar">
2916 <para>  
2917  <quote>show-on-task-bar</quote> controls whether or not
2918  <application>Privoxy</application> will appear as a button on the Task bar
2919  when minimized:
2920 </para>
2921
2922 <para>
2923  <literal>
2924   <msgtext> 
2925    <literallayout>
2926   <emphasis>show-on-task-bar     0</emphasis>
2927    </literallayout>
2928   </msgtext> 
2929  </literal>
2930 </para>
2931
2932 <anchor id="close-button-minimizes">
2933 <para>
2934  If <quote>close-button-minimizes</quote> is set to 1, the Windows close
2935  button will minimize <application>Privoxy</application> instead of closing
2936  the program (close with the exit option on the File menu).
2937 </para>
2938
2939 <para>
2940  <literal>
2941   <msgtext> 
2942    <literallayout>
2943   <emphasis>close-button-minimizes  1</emphasis>
2944    </literallayout>
2945   </msgtext> 
2946  </literal>
2947 </para>
2948
2949 <anchor id="hide-console">
2950 <para>
2951  The <quote>hide-console</quote> option is specific to the MS-Win console
2952  version of <application>Privoxy</application>. If this option is used,
2953  <application>Privoxy</application> will disconnect from and hide  the
2954  command console.
2955 </para>
2956
2957 <para>
2958  <literal>
2959   <msgtext> 
2960    <literallayout>
2961   #<emphasis>hide-console</emphasis>
2962    </literallayout>
2963   </msgtext> 
2964  </literal>
2965 </para>
2966
2967 </sect2>
2968 </sect1>
2969
2970 <!--  ~  End section  ~  -->
2971
2972
2973
2974 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
2975
2976 <sect1 id="actions-file"><title>Actions Files</title>
2977
2978 <para>
2979  The actions files are used to define what actions
2980  <application>Privoxy</application> takes for which URLs, and thus determine
2981  how ad images, cookies and various other aspects of HTTP content and
2982  transactions are handled, and on which sites (or even parts thereof). There 
2983  are three such files included with <application>Privoxy</application> (as of 
2984  version 2.9.15), with differing purposes:
2985  </para>
2986  
2987  <para>
2988   <itemizedlist>
2989    <listitem>
2990     <para>
2991      <filename>default.action</filename> - is the primary action file 
2992      that sets the initial values for all actions. It is intended to 
2993      provide a base level of functionality for
2994      <application>Privoxy's</application> array of features. So it is 
2995      a set of broad rules that should work reasonably well for users everywhere.
2996      This is the file that the developers are keeping updated, and making 
2997      available to users.
2998     </para>
2999    </listitem> 
3000    <listitem>
3001     <para>
3002      <filename>user.action</filename> - is intended to be for local site 
3003      preferences and exceptions. As an example, if your ISP or your bank
3004      has specific requirements, and need special handling, this kind of 
3005      thing should go here. This file will not be upgraded.
3006     </para>
3007   </listitem> 
3008    <listitem>
3009     <para>
3010      <filename>standard.action</filename> - is used by the web based editor, 
3011      to set various pre-defined sets of rules for the default actions section
3012      in <filename>default.action</filename>. These have increasing levels of
3013      aggressiveness <emphasis>and have no influence on your browsing unless
3014      you select them explicitly in the editor</emphasis>. It is not recommend
3015      to edit this file.
3016     </para>
3017    </listitem> 
3018   </itemizedlist>
3019  </para> 
3020
3021 <para>
3022  The list of actions files to be used are defined in the main configuration 
3023  file, and are processed in the order they are defined. The content of these
3024  can all be viewed and edited from <ulink
3025  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
3026 </para>
3027
3028 <para>
3029  An actions file typically has multiple sections. If you want to use
3030  <quote>aliases</quote> in an actions file, you have to place the (optional)
3031  <link linkend="aliases">alias section</link> at the top of that file.
3032  Then comes the default set of rules which will apply universally to all
3033  sites and pages (be <emphasis>very careful</emphasis> with using such a
3034  universal set in <filename>user.action</filename> or any other actions file after 
3035  <filename>default.action</filename>, because it will override the result
3036  from consulting any previous file). And then below that,
3037  exceptions to the defined universal policies. You can regard
3038  <filename>user.action</filename> as an appendix to <filename>default.action</filename>,
3039  with the advantage that is a separate file, which makes preserving your
3040  personal settings across <application>Privoxy</application> upgrades easier.
3041 </para>
3042
3043 <para> 
3044  Actions can be used to block anything you want, including ads, banners, or
3045  just some obnoxious URL that you would rather not see. Cookies can be accepted
3046  or rejected, or accepted only during the current browser session (i.e. not
3047  written to disk), content can be modified, JavaScripts tamed, user-tracking
3048  fooled, and much more. See below for a <link linkend="actions">complete list
3049  of actions</link>.
3050 </para>
3051
3052 <!--   ~~~~~       New section      ~~~~~     -->
3053 <sect2>
3054 <title>Finding the Right Mix</title>
3055 <para>
3056  Note that some <link linkend="actions">actions</link>, like cookie suppression
3057  or script disabling, may render some sites unusable that rely on these
3058  techniques to work properly. Finding the right mix of actions is not always easy and
3059  certainly a matter of personal taste. In general, it can be said that the more
3060  <quote>aggressive</quote> your default settings (in the top section of the
3061  actions file) are, the more exceptions for <quote>trusted</quote> sites you
3062  will have to make later. If, for example, you want to kill popup windows per
3063  default, you'll have to make exceptions from that rule for sites that you
3064  regularly use and that require popups for actually useful content, like maybe
3065  your bank, favorite shop, or newspaper.
3066 </para>
3067
3068 <para>
3069  We have tried to provide you with reasonable rules to start from in the
3070  distribution actions files. But there is no general rule of thumb on these
3071  things. There just are too many variables, and sites are constantly changing.
3072  Sooner or later you will want to change the rules (and read this chapter again :).
3073 </para>
3074 </sect2>
3075
3076 <!--   ~~~~~       New section      ~~~~~     -->
3077 <sect2>
3078 <title>How to Edit</title>
3079 <para>
3080  The easiest way to edit the actions files is with a browser by
3081  using our browser-based editor, which can be reached from <ulink
3082  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
3083  The editor allows both fine-grained control over every single feature on a
3084  per-URL basis, and easy choosing from wholesale sets of defaults like
3085  <quote>Cautious</quote>, <quote>Medium</quote> or <quote>Advanced</quote>.
3086 </para>
3087
3088 <para>
3089  If you prefer plain text editing to GUIs, you can of course also directly edit the
3090  the actions files. Look at <filename>default.action</filename> which is richly
3091  commented.
3092 </para>
3093 </sect2>
3094
3095
3096 <sect2 id="actions-apply">
3097 <title>How Actions are Applied to URLs</title>
3098 <para>
3099  Actions files are divided into sections. There are special sections,
3100  like the <quote><link linkend="aliases">alias</link></quote> sections which will
3101  be discussed later. For now let's concentrate on regular sections: They have a
3102  heading line (often split up to multiple lines for readability) which consist
3103  of a list of actions, separated by whitespace and enclosed in curly braces.
3104  Below that, there is a list of URL patterns, each on a separate line.
3105 </para>
3106
3107 <para>
3108  To determine which actions apply to a request, the URL of the request is
3109  compared to all patterns in each action file file. Every time it matches, the list of
3110  applicable actions for the URL is incrementally updated, using the heading
3111  of the section in which the pattern is located. If multiple matches for
3112  the same URL set the same action differently, the last match wins. If not, 
3113  the effects are aggregated. E.g. a URL might match a regular section with 
3114  a heading line of <literal>{ 
3115  +<ulink url="actions-file.html#HANDLE-AS-IMAGE">handle-as-image</ulink> }</literal>,
3116  then later another one with just <literal>{
3117  +<ulink url="actions-file.html#BLOCK">block</ulink> }</literal>, resulting
3118  in <emphasis>both</emphasis> actions to apply.
3119 </para>
3120
3121 <para>
3122  You can trace this process for any given URL by visiting <ulink
3123  url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>.
3124 </para>
3125
3126 <para>
3127  More detail on this is provided in the Appendix, <link linkend="ACTIONSANAT">
3128  Anatomy of an Action</link>.
3129 </para>
3130 </sect2>
3131
3132 <!--   ~~~~~       New section      ~~~~~     -->
3133 <sect2 id="af-patterns">
3134 <title>Patterns</title>
3135 <para>
3136  Generally, a pattern has the form <literal>&lt;domain&gt;/&lt;path&gt;</literal>,
3137  where both the <literal>&lt;domain&gt;</literal> and <literal>&lt;path&gt;</literal>
3138  are optional. (This is why the pattern <literal>/</literal> matches all URLs).
3139 </para>
3140
3141 <variablelist>
3142  <varlistentry>
3143   <term><literal>www.example.com/</literal></term>
3144   <listitem>
3145    <para>
3146     is a domain-only pattern and will match any request to <literal>www.example.com</literal>,
3147     regardless of which document on that server is requested.
3148    </para>
3149   </listitem>
3150  </varlistentry>
3151  <varlistentry>
3152   <term><literal>www.example.com</literal></term>
3153   <listitem>
3154    <para>
3155     means exactly the same. For domain-only patterns, the trailing <literal>/</literal> may
3156     be omitted.
3157    </para>
3158   </listitem>
3159  </varlistentry>
3160  <varlistentry>
3161   <term><literal>www.example.com/index.html</literal></term>
3162   <listitem>
3163    <para>
3164     matches only the single document <literal>/index.html</literal>
3165     on <literal>www.example.com</literal>.
3166    </para>
3167   </listitem>
3168  </varlistentry>
3169  <varlistentry>
3170   <term><literal>/index.html</literal></term>
3171   <listitem>
3172    <para>
3173     matches the document <literal>/index.html</literal>, regardless of the domain,
3174     i.e. on <emphasis>any</emphasis> web server.
3175    </para>
3176   </listitem>
3177  </varlistentry>
3178  <varlistentry>
3179   <term><literal>index.html</literal></term>
3180   <listitem>
3181    <para>
3182     matches nothing, since it would be  interpreted as a domain name and
3183     there is no top-level domain called <literal>.html</literal>.
3184    </para>
3185   </listitem>
3186  </varlistentry>
3187 </variablelist>
3188
3189
3190 <!--   ~~~~~       New section      ~~~~~     -->
3191 <sect3><title>The Domain Pattern</title>
3192
3193 <para>
3194  The matching of the domain part offers some flexible options: if the
3195  domain starts or ends with a dot, it becomes unanchored at that end. 
3196  For example:
3197 </para>
3198
3199 <variablelist>
3200  <varlistentry>
3201   <term><literal>.example.com</literal></term>
3202   <listitem>
3203    <para>
3204     matches any domain that <emphasis>ENDS</emphasis> in
3205     <literal>.example.com</literal>
3206    </para>
3207   </listitem>
3208  </varlistentry>
3209  <varlistentry>
3210   <term><literal>www.</literal></term>
3211   <listitem>
3212    <para>
3213     matches any domain that <emphasis>STARTS</emphasis> with
3214     <literal>www.</literal>
3215    </para>
3216   </listitem>
3217  </varlistentry>
3218  <varlistentry>
3219   <term><literal>.example.</literal></term>
3220   <listitem>
3221    <para>
3222     matches any domain that <emphasis>CONTAINS</emphasis> <literal>.example.</literal>
3223     (Correctly speaking: It matches any FQDN that contains <literal>example</literal> as a domain.)
3224    </para>
3225   </listitem>
3226  </varlistentry>
3227 </variablelist>
3228
3229 <para>
3230  Additionally, there are wild-cards that you can use in the domain names
3231  themselves. They work pretty similar to shell wild-cards: <quote>*</quote>
3232  stands for zero or more arbitrary characters, <quote>?</quote> stands for
3233  any single character, you can define character classes in square
3234  brackets and all of that can be freely mixed:
3235 </para>
3236
3237 <variablelist>
3238  <varlistentry>
3239   <term><literal>ad*.example.com</literal></term>
3240   <listitem>
3241    <para>
3242     matches <quote>adserver.example.com</quote>, 
3243     <quote>ads.example.com</quote>, etc but not <quote>sfads.example.com</quote>
3244    </para>
3245   </listitem>
3246  </varlistentry>
3247  <varlistentry>
3248   <term><literal>*ad*.example.com</literal></term>
3249   <listitem>
3250    <para>
3251     matches all of the above, and then some.
3252    </para>
3253   </listitem>
3254  </varlistentry>
3255  <varlistentry>
3256   <term><literal>.?pix.com</literal></term>
3257   <listitem>
3258    <para>
3259     matches <literal>www.ipix.com</literal>,
3260     <literal>pictures.epix.com</literal>, <literal>a.b.c.d.e.upix.com</literal> etc. 
3261    </para>
3262   </listitem>
3263  </varlistentry>
3264  <varlistentry>
3265   <term><literal>www[1-9a-ez].example.c*</literal></term>
3266   <listitem>
3267    <para>
3268      matches <literal>www1.example.com</literal>, 
3269      <literal>www4.example.cc</literal>, <literal>wwwd.example.cy</literal>, 
3270      <literal>wwwz.example.com</literal> etc., but <emphasis>not</emphasis> 
3271      <literal>wwww.example.com</literal>.
3272    </para>
3273   </listitem>
3274  </varlistentry>
3275 </variablelist>
3276
3277 </sect3>
3278
3279 <!--  ~  End section  ~  -->
3280
3281
3282 <!--   ~~~~~       New section      ~~~~~     -->
3283 <sect3><title>The Path Pattern</title>
3284
3285 <para>
3286  <application>Privoxy</application> uses Perl compatible regular expressions
3287  (through the <ulink url="http://www.pcre.org/">PCRE</ulink> library) for
3288  matching the path.
3289 </para>
3290
3291 <para>
3292  There is an <link linkend="regex">Appendix</link> with a brief quick-start into regular
3293  expressions, and full (very technical) documentation on PCRE regex syntax is available on-line
3294  at <ulink url="http://www.pcre.org/man.txt">http://www.pcre.org/man.txt</ulink>.
3295  You might also find the Perl man page on regular expressions (<literal>man perlre</literal>)
3296  useful, which is available on-line at <ulink
3297  url="http://www.perldoc.com/perl5.6/pod/perlre.html">http://www.perldoc.com/perl5.6/pod/perlre.html</ulink>.
3298 </para>
3299
3300 <para>
3301  Note that the path pattern is automatically left-anchored at the <quote>/</quote>,
3302  i.e. it matches as if it would start with a <quote>^</quote> (regular expression speak 
3303  for the beginning of a line).
3304 </para>
3305
3306 <para>
3307  Please also note that matching in the path is <emphasis>CASE INSENSITIVE</emphasis>
3308  by default, but you can switch to case sensitive at any point in the pattern by using the 
3309  <quote>(?-i)</quote> switch: <literal>www.example.com/(?-i)PaTtErN.*</literal> will match
3310  only documents whose path starts with <literal>PaTtErN</literal> in
3311  <emphasis>exactly</emphasis> this capitalization.
3312 </para>
3313 </sect3>
3314
3315 </sect2>
3316
3317 <!--  ~  End section  ~  -->
3318
3319
3320 <!--   ~~~~~       New section      ~~~~~     -->
3321
3322 <sect2 id="actions">
3323 <title>Actions</title>
3324 <para>
3325  All actions are disabled by default, until they are explicitly enabled
3326  somewhere in an actions file. Actions are turned on if preceded with a
3327  <quote>+</quote>, and turned off if preceded with a <quote>-</quote>. So a
3328  <literal>+action</literal> means <quote>do that action</quote>, e.g.
3329  <literal>+block</literal> means <quote>please block URLs that match the
3330  following patterns</quote>, and <literal>-block</literal> means <quote>don't
3331  block URLs that match the following patterns, even if <literal>+block</literal>
3332  previously applied.</quote>
3333
3334 </para>
3335
3336 <para> 
3337  Again, actions are invoked by placing them on a line, enclosed in curly braces and
3338  separated by whitespace, like in 
3339  <literal>{+some-action -some-other-action{some-parameter}}</literal>,
3340  followed by a list of URL patterns, one per line, to which they apply.
3341  Together, the actions line and the following pattern lines make up a section
3342  of the actions file. 
3343 </para>
3344
3345 <para> 
3346  There are three classes of actions:
3347 </para>
3348
3349 <para>
3350  <itemizedlist>
3351  <listitem>
3352   <para>  
3353    Boolean, i.e the action can only be <quote>enabled</quote> or
3354    <quote>disabled</quote>. Syntax:
3355   </para>
3356   <para>
3357    <screen>
3358   +<replaceable class="function">name</replaceable>        # enable action <replaceable class="parameter">name</replaceable>
3359   -<replaceable class="function">name</replaceable>        # disable action <replaceable class="parameter">name</replaceable></screen>
3360   </para>
3361   <para>  
3362    Example: <literal>+block</literal>
3363   </para>
3364  </listitem>
3365
3366
3367  <listitem>
3368   <para>  
3369    Parameterized, where some value is required in order to enable this type of action.
3370    Syntax:
3371   </para>
3372   <para>
3373    <screen>
3374   +<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>}  # enable action and set parameter to <replaceable class="parameter">param</replaceable>,
3375                # overwriting parameter from previous match if necessary
3376   -<replaceable class="function">name</replaceable>         # disable action. The parameter can be omitted</screen>
3377   </para>
3378   <para>
3379    Note that if the URL matches multiple positive forms of a parameterized action,
3380    the last match wins, i.e. the params from earlier matches are simply ignored.
3381   </para>
3382   <para>  
3383    Example: <literal>+hide-user-agent{ Mozilla 1.0 }</literal>
3384   </para>
3385  </listitem>
3386  
3387  <listitem>
3388   <para>  
3389    Multi-value. These look exactly like parameterized actions,
3390    but they behave differently: If the action applies multiple times to the
3391    same URL, but with different parameters, <emphasis>all</emphasis> the parameters
3392    from <emphasis>all</emphasis> matches are remembered. This is used for actions
3393    that can be executed for the same request repeatedly, like adding multiple
3394    headers, or filtering through multiple filters. Syntax:
3395   </para>
3396   <para>
3397    <screen>
3398   +<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>}   # enable action and add <replaceable class="parameter">param</replaceable> to the list of parameters
3399   -<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>}   # remove the parameter <replaceable class="parameter">param</replaceable> from the list of parameters
3400                 # If it was the last one left, disable the action.
3401   <replaceable class="parameter">-name</replaceable>          # disable this action completely and remove all parameters from the list</screen>
3402   </para>
3403   <para>  
3404    Examples: <literal>+add-header{X-Fun-Header: Some text}</literal> and
3405    <literal>+filter{html-annoyances}</literal>
3406   </para>
3407  </listitem>
3408
3409  </itemizedlist>
3410 </para>
3411
3412 <para>
3413  If nothing is specified in any actions file, no <quote>actions</quote> are
3414  taken. So in this case <application>Privoxy</application> would just be a
3415  normal, non-blocking, non-anonymizing proxy. You must specifically enable the
3416  privacy and blocking features you need (although the provided default actions
3417  files will give a good starting point).
3418 </para>
3419
3420 <para>
3421  Later defined actions always over-ride earlier ones.  So exceptions 
3422  to any rules you make, should come in the latter part of the file (or 
3423  in a file that is processed later when using multiple actions files). For
3424  multi-valued actions, the actions are applied in the order they are specified.
3425  Actions files are processed in the order they are defined in
3426  <filename>config</filename> (the default installation has three actions
3427  files). It also quite possible for any given URL pattern to match more than
3428  one pattern and thus more than one set of actions!
3429 </para>
3430
3431 <!-- start actions listing -->
3432 <para>
3433  The list of valid <application>Privoxy</application> actions are:
3434 </para>
3435
3436
3437 <!-- ********************************************************** -->
3438 <!-- Please note the below defined actions use id's that are    -->
3439 <!-- probably linked from other places, so please don't change. -->
3440 <!--                                                            -->
3441 <!-- ********************************************************** -->
3442
3443
3444 <!--   ~~~~~       New section      ~~~~~     -->
3445
3446 <sect3 renderas="sect4" id="add-header">
3447 <title>add-header</title>
3448
3449 <variablelist>
3450  <varlistentry>
3451   <term>Typical use:</term>
3452   <listitem>
3453    <para>Confuse log analysis, custom applications</para>
3454   </listitem>
3455  </varlistentry>
3456
3457  <varlistentry>
3458   <term>Effect:</term>
3459   <listitem>
3460    <para>
3461     Sends a user defined HTTP header to the web server.
3462    </para>
3463   </listitem>
3464  </varlistentry>
3465
3466  <varlistentry>
3467   <term>Type:</term>
3468   <!-- boolean, parameterized, Multi-value -->
3469   <listitem>
3470    <para>Multi-value.</para>
3471   </listitem>
3472  </varlistentry>
3473  
3474  <varlistentry>
3475   <term>Parameter:</term>
3476   <listitem>
3477    <para>
3478     Any string value is possible. Validity of the defined HTTP headers is not checked.
3479     It is recommended that you use the <quote><literal>X-</literal></quote> prefix
3480     for custom headers.
3481    </para>
3482   </listitem>
3483  </varlistentry>
3484  
3485 <varlistentry>
3486   <term>Notes:</term>
3487   <listitem>
3488    <para>
3489     This action may be specified multiple times, in order to define multiple 
3490     headers. This is rarely needed for the typical user. If you don't know what 
3491     <quote>HTTP headers</quote> are, you definitely don't need to worry about this 
3492     one.
3493    </para>
3494   </listitem>
3495  </varlistentry>
3496
3497  <varlistentry>
3498   <term>Example usage:</term>
3499   <listitem>
3500     <para>
3501      <screen>+add-header{X-User-Tracking: sucks}</screen>
3502    </para>
3503   </listitem>
3504  </varlistentry>
3505 </variablelist>
3506 </sect3>
3507
3508
3509 <!--   ~~~~~       New section      ~~~~~     -->
3510 <sect3 renderas="sect4" id="block">
3511 <title>block</title>
3512
3513 <variablelist>
3514  <varlistentry>
3515   <term>Typical use:</term>
3516   <listitem>
3517    <para>Block ads or other obnoxious content</para>
3518   </listitem>
3519  </varlistentry>
3520
3521  <varlistentry>
3522   <term>Effect:</term>
3523   <listitem>
3524    <para>
3525     Requests for URLs to which this action applies are blocked, i.e. the requests are not
3526     forwarded to the remote server, but answered locally with a substitute page or image,
3527     as determined by the <literal><link linkend="handle-as-image">handle-as-image</link></literal>
3528     and <literal><link linkend="set-image-blocker">set-image-blocker</link></literal> actions.
3529    </para>
3530   </listitem>
3531  </varlistentry>
3532
3533  <varlistentry>
3534   <term>Type:</term>
3535   <!-- boolean, parameterized, Multi-value -->
3536   <listitem>
3537    <para>Boolean.</para>
3538   </listitem>
3539  </varlistentry>
3540
3541  <varlistentry>
3542   <term>Parameter:</term>
3543   <listitem>
3544    <para>N/A</para>
3545   </listitem>
3546  </varlistentry>
3547  
3548 <varlistentry>
3549   <term>Notes:</term>
3550   <listitem>
3551    <para>
3552     <application>Privoxy</application> sends a special <quote>BLOCKED</quote> page
3553     for requests to blocked pages. This page contains links to find out why the request
3554     was blocked, and a click-through to the blocked content (the latter only if compiled with the
3555     force feature enabled). The <quote>BLOCKED</quote> page adapts to the available
3556     screen space -- it displays full-blown if space allows, or miniaturized and text-only
3557     if loaded into a small frame or window. If you are using <application>Privoxy</application>
3558     right now, you can take a look at the 
3559     <ulink url="http://ads.bannerserver.example.com/nasty-ads/sponsor.html"><quote>BLOCKED</quote>
3560     page</ulink>.
3561    </para>
3562    <para> 
3563     A very important exception occurs if <emphasis>both</emphasis> 
3564     <literal>block</literal> and <literal><link linkend="handle-as-image">handle-as-image</link></literal>,
3565     apply to the same request: it will then be replaced by an image. If 
3566     <literal><link linkend="set-image-blocker">set-image-blocker</link></literal>
3567     (see below) also applies, the type of image will be determined by its parameter,
3568     if not, the standard checkerboard pattern is sent.
3569    </para>
3570    <para>
3571     It is important to understand this process, in order 
3572     to understand how <application>Privoxy</application> deals with 
3573     ads and other unwanted content.
3574    </para>
3575    <para>
3576     The <literal><link linkend="filter">filter</link></literal>
3577     action can perform a very similar task, by <quote>blocking</quote>
3578     banner images and other content through rewriting the relevant URLs in the
3579     document's HTML source, so they don't get requested in the first place.
3580     Note that this is a totally different technique, and it's easy to confuse the two.
3581    </para>
3582   </listitem>
3583  </varlistentry>
3584
3585  <varlistentry>
3586   <term>Example usage (section):</term>
3587   <listitem>
3588     <para>
3589      <screen>{+block}      # Block and replace with "blocked" page
3590 .nasty-stuff.example.com
3591
3592 {+block +handle-as-image} # Block and replace with image
3593 .ad.doubleclick.net
3594 .ads.r.us</screen>
3595     </para>
3596   </listitem>
3597  </varlistentry>
3598
3599
3600 </variablelist>
3601 </sect3>
3602
3603 <!--   ~~~~~       New section      ~~~~~     -->
3604 <sect3 renderas="sect4" id="crunch-incoming-cookies">
3605 <title>crunch-incoming-cookies</title>
3606
3607 <variablelist>
3608  <varlistentry>
3609   <term>Typical use:</term>
3610   <listitem>
3611    <para>
3612     Prevent the web server from setting any cookies on your system
3613    </para>
3614   </listitem>
3615  </varlistentry>
3616
3617  <varlistentry>
3618   <term>Effect:</term>
3619   <listitem>
3620    <para>
3621     Deletes any <quote>Set-Cookie:</quote> HTTP headers from server replies.
3622    </para>
3623   </listitem>
3624  </varlistentry>
3625
3626  <varlistentry>
3627   <term>Type:</term>
3628   <!-- Boolean, Parameterized, Multi-value -->
3629   <listitem>
3630    <para>Boolean.</para>
3631   </listitem>
3632  </varlistentry>
3633
3634  <varlistentry>
3635   <term>Parameter:</term>
3636   <listitem>
3637    <para>
3638     N/A
3639    </para>
3640   </listitem>
3641  </varlistentry>
3642  
3643  <varlistentry>
3644   <term>Notes:</term>
3645   <listitem>
3646    <para>
3647     This action is only concerned with <emphasis>incoming</emphasis> cookies. For
3648     <emphasis>outgoing</emphasis> cookies, use
3649     <literal><link linkend="crunch-outgoing-cookies">crunch-outgoing-cookies</link></literal>.
3650     Use <emphasis>both</emphasis> to disable cookies completely.
3651    </para>
3652    <para>
3653     It makes <emphasis>no sense at all</emphasis> to use this action in conjunction
3654     with the <literal><link linkend="session-cookies-only">session-cookies-only</link></literal> action,
3655     since it would prevent the session cookies from being set.
3656    </para>
3657   </listitem>
3658  </varlistentry>
3659
3660  <varlistentry>
3661   <term>Example usage:</term>
3662   <listitem>
3663    <para>
3664     <screen>+crunch-incoming-cookies</screen>
3665    </para>
3666   </listitem>
3667  </varlistentry>
3668 </variablelist>
3669 </sect3>
3670
3671
3672 <!--   ~~~~~       New section      ~~~~~     -->
3673 <sect3 renderas="sect4" id="crunch-outgoing-cookies">
3674 <title>crunch-outgoing-cookies</title>
3675
3676 <variablelist>
3677  <varlistentry>
3678   <term>Typical use:</term>
3679   <listitem>
3680    <para>
3681     Prevent the web server from reading any cookies from your system
3682    </para>
3683   </listitem>
3684  </varlistentry>
3685
3686  <varlistentry>
3687   <term>Effect:</term>
3688   <listitem>
3689    <para>
3690     Deletes any <quote>Cookie:</quote> HTTP headers from client requests.
3691    </para>
3692   </listitem>
3693  </varlistentry>
3694
3695  <varlistentry>
3696   <term>Type:</term>
3697   <!-- Boolean, Parameterized, Multi-value -->
3698   <listitem>
3699    <para>Boolean.</para>
3700   </listitem>
3701  </varlistentry>
3702
3703  <varlistentry>
3704   <term>Parameter:</term>
3705   <listitem>
3706    <para>
3707     N/A
3708    </para>
3709   </listitem>
3710  </varlistentry>
3711  
3712  <varlistentry>
3713   <term>Notes:</term>
3714   <listitem>
3715    <para>
3716     This action is only concerned with <emphasis>outgoing</emphasis> cookies. For
3717     <emphasis>incoming</emphasis> cookies, use
3718     <literal><link linkend="crunch-incoming-cookies">crunch-incoming-cookies</link></literal>.
3719     Use <emphasis>both</emphasis> to disable cookies completely.
3720    </para>
3721    <para>
3722     It makes <emphasis>no sense at all</emphasis> to use this action in conjunction
3723     with the <literal><link linkend="session-cookies-only">session-cookies-only</link></literal> action,
3724     since it would prevent the session cookies from being read.
3725    </para>
3726   </listitem>
3727  </varlistentry>
3728
3729  <varlistentry>
3730   <term>Example usage:</term>
3731   <listitem>
3732    <para>
3733     <screen>+crunch-outgoing-cookies</screen>
3734    </para>
3735   </listitem>
3736  </varlistentry>
3737
3738 </variablelist>
3739 </sect3>
3740
3741
3742 <!--   ~~~~~       New section      ~~~~~     -->
3743 <sect3 renderas="sect4" id="deanimate-gifs">
3744 <title>deanimate-gifs</title>
3745
3746 <variablelist>
3747  <varlistentry>
3748   <term>Typical use:</term>
3749   <listitem>
3750    <para>Stop those annoying, distracting animated GIF images.</para>
3751   </listitem>
3752  </varlistentry>
3753
3754  <varlistentry>
3755   <term>Effect:</term>
3756   <listitem>
3757    <para>
3758     De-animate GIF animations, i.e. reduce them to their first or last image.
3759    </para>
3760   </listitem>
3761  </varlistentry>
3762
3763  <varlistentry>
3764   <term>Type:</term>
3765   <!-- boolean, parameterized, Multi-value -->
3766   <listitem>
3767    <para>Parameterized.</para>
3768   </listitem>
3769  </varlistentry>
3770
3771  <varlistentry>
3772   <term>Parameter:</term>
3773   <listitem>
3774    <para>
3775     <quote>last</quote> or <quote>first</quote>
3776    </para>
3777   </listitem>
3778  </varlistentry>
3779  
3780  <varlistentry>
3781   <term>Notes:</term>
3782   <listitem>
3783    <para>
3784     This will also shrink the images considerably (in bytes, not pixels!). If
3785     the option <quote>first</quote> is given, the first frame of the animation
3786     is used as the replacement. If <quote>last</quote> is given, the last
3787     frame of the animation is used instead, which probably makes more sense for
3788     most banner animations, but also has the risk of not showing the entire
3789     last frame (if it is only a delta to an earlier frame).
3790    </para>
3791    <para>
3792     You can safely use this action with patterns that will also match non-GIF
3793     objects, because no attempt will be made at anything that doesn't look like
3794     a GIF.
3795    </para>
3796   </listitem>
3797  </varlistentry>
3798
3799  <varlistentry>
3800   <term>Example usage:</term>
3801   <listitem>
3802     <para>
3803       <screen>+deanimate-gifs{last}</screen>
3804     </para>
3805   </listitem>
3806  </varlistentry>
3807 </variablelist>
3808 </sect3>
3809
3810 <!--   ~~~~~       New section      ~~~~~     -->
3811 <sect3 renderas="sect4" id="downgrade-http-version">
3812 <title>downgrade-http-version</title>
3813
3814 <variablelist>
3815  <varlistentry>
3816   <term>Typical use:</term>
3817   <listitem>
3818    <para>Work around (very rare) problems with HTTP/1.1</para>
3819   </listitem>
3820  </varlistentry>
3821
3822  <varlistentry>
3823   <term>Effect:</term>
3824   <listitem>
3825    <para>
3826     Downgrades HTTP/1.1 client requests and server replies to HTTP/1.0.
3827    </para>
3828   </listitem>
3829  </varlistentry>
3830
3831  <varlistentry>
3832   <term>Type:</term>
3833   <!-- boolean, parameterized, Multi-value -->
3834   <listitem>
3835    <para>Boolean.</para>
3836   </listitem>
3837  </varlistentry>
3838
3839  <varlistentry>
3840   <term>Parameter:</term>
3841   <listitem>
3842    <para>
3843     N/A
3844    </para>
3845   </listitem>
3846  </varlistentry>
3847  
3848 <varlistentry>
3849   <term>Notes:</term>
3850   <listitem>
3851    <para>
3852     This is a left-over from the time when <application>Privoxy</application>
3853     didn't support important HTTP/1.1 features well. It is left here for the
3854     unlikely case that you experience HTTP/1.1 related problems with some server
3855     out there. Not all (optional) HTTP/1.1 features are supported yet, so there
3856     is a chance you might need this action.
3857    </para>
3858   </listitem>
3859  </varlistentry>
3860
3861  <varlistentry>
3862   <term>Example usage (section):</term>
3863   <listitem>
3864     <para>
3865      <screen>{+downgrade-http-version}
3866 problem-host.example.com</screen>
3867     </para>
3868   </listitem>
3869  </varlistentry>
3870
3871 </variablelist>
3872 </sect3>
3873
3874 <!--   ~~~~~       New section      ~~~~~     -->
3875 <sect3 renderas="sect4" id="fast-redirects">
3876 <title>fast-redirects</title>
3877
3878 <variablelist>
3879  <varlistentry>
3880   <term>Typical use:</term>
3881   <listitem>
3882    <para>Fool some click-tracking scripts and speed up indirect links</para>
3883   </listitem>
3884  </varlistentry>
3885
3886  <varlistentry>
3887   <term>Effect:</term>
3888   <listitem>
3889    <para>
3890     Cut off all but the last valid URL from requests.
3891    </para>
3892   </listitem>
3893  </varlistentry>
3894
3895  <varlistentry>
3896   <term>Type:</term>
3897   <!-- boolean, parameterized, Multi-value -->
3898   <listitem>
3899    <para>Boolean.</para>
3900   </listitem>
3901  </varlistentry>
3902
3903  <varlistentry>
3904   <term>Parameter:</term>
3905   <listitem>
3906    <para>
3907     N/A
3908    </para>
3909   </listitem>
3910  </varlistentry>
3911
3912  <varlistentry>
3913   <term>Notes:</term>
3914   <listitem>
3915    <para>  
3916     Many sites, like yahoo.com, don't just link to other sites. Instead, they
3917     will link to some script on their own servers, giving the destination as a
3918     parameter, which will then redirect you to the final target. URLs
3919     resulting from this scheme typically look like:
3920     <emphasis>http://some.place/click-tracker.cgi?target=http://some.where.else</emphasis>.
3921   </para>
3922    <para>
3923     Sometimes, there are even multiple consecutive redirects encoded in the
3924     URL. These redirections via scripts make your web browsing more traceable,
3925     since the server from which you follow such a link can see where you go
3926     to. Apart from that, valuable bandwidth and time is wasted, while your
3927     browser ask the server for one redirect after the other. Plus, it feeds
3928     the advertisers.
3929    </para>
3930    <para>
3931     This feature is currently not very smart and is scheduled for improvement.
3932     It is likely to break some sites. You should expect to need possibly 
3933     many exceptions to this action, if it is enabled by default in
3934     <filename>default.action</filename>. Some sites just don't work without 
3935     it.
3936    </para>
3937   </listitem>
3938  </varlistentry>
3939
3940  <varlistentry>
3941   <term>Example usage:</term>
3942   <listitem>
3943     <para>
3944      <screen>{+fast-redirects}</screen>
3945     </para>
3946   </listitem>
3947  </varlistentry>
3948
3949 </variablelist>
3950 </sect3>
3951
3952
3953 <!--   ~~~~~       New section      ~~~~~     -->
3954 <sect3 renderas="sect4" id="filter">
3955 <title>filter</title>
3956
3957 <variablelist>
3958  <varlistentry>
3959   <term>Typical use:</term>
3960   <listitem>
3961    <para>Get rid of HTML and JavaScript annoyances, banner advertisements (by size), do fun text replacements, etc.</para>
3962   </listitem>
3963  </varlistentry>
3964
3965  <varlistentry>
3966   <term>Effect:</term>
3967   <listitem>
3968    <para>
3969     Text documents, including HTML and JavaScript, to which this action applies, are filtered on-the-fly
3970     through the specified regular expression based substitutions.    
3971    </para>
3972   </listitem>
3973  </varlistentry>
3974
3975  <varlistentry>
3976   <term>Type:</term>
3977   <!-- boolean, parameterized, Multi-value -->
3978   <listitem>
3979    <para>Parameterized.</para>
3980   </listitem>
3981  </varlistentry>
3982
3983  <varlistentry>
3984   <term>Parameter:</term>
3985   <listitem>
3986    <para>
3987     The name of a filter, as defined in the <link linkend="filter-file">filter file</link>
3988     (typically <filename>default.filter</filename>, set by the
3989     <literal><link linkend="filterfile">filterfile</link></literal>
3990     option in the <link linkend="config">config file</link>)
3991    </para>
3992   </listitem>
3993  </varlistentry>
3994  
3995  <varlistentry>
3996   <term>Notes:</term>
3997   <listitem>
3998    <para>
3999     For your convenience, there are a bunch of pre-defined filters available 
4000     in the distribution filter file that you can use. See the example below for
4001     a list.
4002    </para>
4003    <para>
4004     This is potentially a very powerful feature!  But <quote>rolling your own</quote>
4005     filters requires a knowledge of regular expressions and HTML.
4006    </para>
4007    <para>
4008     Filtering requires buffering the page content, which may appear to
4009     slow down page rendering since nothing is displayed until all content has
4010     passed the filters. (It does not really take longer, but seems that way
4011     since the page is not incrementally displayed.) This effect will be more
4012     noticeable on slower connections.
4013    </para>
4014    <para>
4015     At this time, <application>Privoxy</application> cannot (yet!) uncompress compressed
4016     documents. If you want filtering to work on all documents, even those that
4017     would normally be sent compressed, use the
4018     <literal><link linkend="prevent-compression">prevent-compression</link></literal>
4019     action in conjunction with <literal>filter</literal>.
4020    </para>
4021    <para>
4022     Filtering can achieve some of the effects as the 
4023     <literal><link linkend="block">block</link></literal>
4024     action, i.e. it can be used to block ads and banners. 
4025    </para>
4026    <para>
4027     <link linkend="contact">Feedback</link> with suggestions for new or improved filters is particularly
4028     welcome!
4029    </para>
4030   </listitem>
4031  </varlistentry>
4032
4033  <varlistentry>
4034   <term>Example usage (with filters from the distribution <filename>default.filter</filename> file):</term>
4035   <listitem>
4036    <para>
4037     <anchor id="filter-html-annoyances">
4038     <screen>+filter{html-annoyances}     # Get rid of particularly annoying HTML abuse.</screen>
4039    </para>
4040    <para>
4041     <anchor id="filter-js-annoyances">
4042     <screen>+filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse</screen>
4043    </para>
4044    <para>
4045     <anchor id="filter-banners-by-size">
4046     <screen>+filter{banners-by-size}     # Kill banners by size (<emphasis>very</emphasis> efficient!)</screen>
4047    </para>
4048    <para>
4049     <anchor id="filter-content-cookies">
4050     <screen>+filter{content-cookies}     # Kill cookies that come sneaking in the HTML or JS content</screen>
4051    </para>
4052    <para>
4053     <anchor id="filter-popups">
4054     <screen>+filter{popups}              # Kill all popups in JS and HTML</screen>
4055    </para>
4056    <para>
4057     <anchor id="filter-webbugs">
4058     <screen>+filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)</screen>
4059    </para>
4060    <para>
4061     <anchor id="filter-fun">
4062     <screen>+filter{fun}                 # Text replacements for subversive browsing fun!</screen>
4063    </para>
4064    <para>
4065     <anchor id="filter-frameset-borders">
4066     <screen>+filter{frameset-borders}    # Give frames a border and make them resizeable</screen> 
4067    </para>
4068    <para>
4069     <anchor id="filter-refresh-tags">
4070     <screen>+filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)</screen>
4071    </para>
4072    <para>
4073     <anchor id="filter-nimda">
4074     <screen>+filter{nimda}               # Remove Nimda (virus) code.</screen>
4075    </para>
4076    <para>
4077     <anchor id="filter-shockwave-flash">
4078     <screen>+filter{shockwave-flash}     # Kill embedded Shockwave Flash objects</screen>
4079    </para>
4080    <para>
4081     <anchor id="filter-crude-parental">
4082     <screen>+filter{crude-parental}      # Kill all web pages that contain the words "sex" or "warez"</screen>
4083    </para>
4084   </listitem>
4085  </varlistentry>
4086 </variablelist>
4087 </sect3>
4088
4089
4090 <!--   ~~~~~       New section      ~~~~~     -->
4091 <sect3 renderas="sect4" id="handle-as-image">
4092 <title>handle-as-image</title>
4093
4094 <variablelist>
4095  <varlistentry>
4096   <term>Typical use:</term>
4097   <listitem>
4098    <para>Mark URLs as belonging to images (so they'll be replaced by images <emphasis>if they get blocked</emphasis>)</para>
4099   </listitem>
4100  </varlistentry>
4101
4102  <varlistentry>
4103   <term>Effect:</term>
4104   <listitem>
4105    <para>
4106     This action alone doesn't do anything noticeable. It just marks URLs as images.
4107     If the <literal><link linkend="block">block</link></literal> action <emphasis>also applies</emphasis>,
4108     the presence or absence of this mark decides whether an HTML <quote>blocked</quote>
4109     page, or a replacement image (as determined by the <literal><link
4110     linkend="set-image-blocker">set-image-blocker</link></literal> action) will be sent to the
4111     client as a substitute for the blocked content.
4112    </para>
4113   </listitem>
4114  </varlistentry>
4115
4116  <varlistentry>
4117   <term>Type:</term>
4118   <!-- Boolean, Parameterized, Multi-value -->
4119   <listitem>
4120    <para>Boolean.</para>
4121   </listitem>
4122  </varlistentry>
4123
4124  <varlistentry>
4125   <term>Parameter:</term>
4126   <listitem>
4127    <para>
4128     N/A
4129    </para>
4130   </listitem>
4131  </varlistentry>
4132  
4133  <varlistentry>
4134   <term>Notes:</term>
4135   <listitem>
4136    <para>
4137     The below generic example section is actually part of <filename>default.action</filename>.
4138     It marks all URLs with well-known image file name extensions as images and should
4139     be left intact. 
4140    </para>
4141    <para>
4142     Users will probably only want to use the handle-as-image action in conjunction with
4143     <literal><link linkend="block">block</link></literal>, to block sources of banners, whose URLs don't
4144     reflect the file type, like in the second example section.
4145    </para>
4146    <para>
4147     Note that you cannot treat HTML pages as images in most cases. For instance, (inline) ad
4148     frames require an HTML page to be sent, or they won't display properly.
4149     Forcing <literal>handle-as-image</literal> in this situation will not replace the
4150     ad frame with an image, but lead to error messages.
4151    </para>
4152   </listitem>
4153  </varlistentry>
4154
4155  <varlistentry>
4156   <term>Example usage (sections):</term>
4157   <listitem>
4158    <para>
4159      <screen># Generic image extensions:
4160 #
4161 {+handle-as-image}
4162 /.*\.(gif|jpg|jpeg|png|bmp|ico)$
4163
4164 # These don't look like images, but they're banners and should be
4165 # blocked as images:
4166 #
4167 {+block +handle-as-image}
4168 some.nasty-banner-server.com/junk.cgi?output=trash
4169
4170 # Banner source! Who cares if they also have non-image content?
4171 ad.doubleclick.net 
4172 </screen>
4173    </para>
4174   </listitem>
4175  </varlistentry>
4176 </variablelist>
4177 </sect3>
4178
4179
4180 <!--   ~~~~~       New section      ~~~~~     -->
4181 <sect3 renderas="sect4" id="hide-forwarded-for-headers">
4182 <title>hide-forwarded-for-headers</title>
4183
4184 <variablelist>
4185  <varlistentry>
4186   <term>Typical use:</term>
4187   <listitem>
4188    <para>Improve privacy by hiding the true source of the request</para>
4189   </listitem>
4190  </varlistentry>
4191
4192  <varlistentry>
4193   <term>Effect:</term>
4194   <listitem>
4195    <para>
4196     Deletes any existing <quote>X-Forwarded-for:</quote> HTTP header from client requests,
4197     and prevents adding a new one.
4198    </para>
4199   </listitem>
4200  </varlistentry>
4201
4202  <varlistentry>
4203   <term>Type:</term>
4204   <!-- Boolean, Parameterized, Multi-value -->
4205   <listitem>
4206    <para>Boolean.</para>
4207   </listitem>
4208  </varlistentry>
4209
4210  <varlistentry>
4211   <term>Parameter:</term>
4212   <listitem>
4213    <para>
4214     N/A
4215    </para>
4216   </listitem>
4217  </varlistentry>
4218  
4219  <varlistentry>
4220   <term>Notes:</term>
4221   <listitem>
4222    <para>
4223     It is fairly safe to leave this on.
4224    </para>
4225    <para>
4226     This action is scheduled for improvement: It should be able to generate forged 
4227     <quote>X-Forwarded-for:</quote> headers using random IP addresses from a specified network,
4228     to make successive requests from the same client look like requests from a pool of different
4229     users sharing the same proxy.
4230    </para>
4231   </listitem>
4232  </varlistentry>
4233
4234  <varlistentry>
4235   <term>Example usage:</term>
4236   <listitem>
4237     <para>
4238      <screen>+hide-forwarded-for-headers</screen>
4239    </para>
4240   </listitem>
4241  </varlistentry>
4242 </variablelist>
4243 </sect3>
4244
4245
4246 <!--   ~~~~~       New section      ~~~~~     -->
4247 <sect3 renderas="sect4" id="hide-from-header">
4248 <title>hide-from-header</title>
4249
4250 <variablelist>
4251  <varlistentry>
4252   <term>Typical use:</term>
4253   <listitem>
4254    <para>Keep your (old and ill) browser from telling web servers your email address</para>
4255   </listitem>
4256  </varlistentry>
4257
4258  <varlistentry>
4259   <term>Effect:</term>
4260   <listitem>
4261    <para>
4262     Deletes any existing <quote>From:</quote> HTTP header, or replaces it with the
4263     specified string.
4264    </para>
4265   </listitem>
4266  </varlistentry>
4267
4268  <varlistentry>
4269   <term>Type:</term>
4270   <!-- Boolean, Parameterized, Multi-value -->
4271   <listitem>
4272    <para>Parameterized.</para>
4273   </listitem>
4274  </varlistentry>
4275
4276  <varlistentry>
4277   <term>Parameter:</term>
4278   <listitem>
4279    <para>
4280     Keyword: <quote>block</quote>, or any user defined value.
4281    </para>
4282   </listitem>
4283  </varlistentry>
4284  
4285  <varlistentry>
4286   <term>Notes:</term>
4287   <listitem>
4288    <para>
4289     The keyword <quote>block</quote> will completely remove the header 
4290     (not to be confused with the <literal><link linkend="block">block</link></literal>
4291     action).
4292    </para>
4293    <para>
4294     Alternately, you can specify any value you prefer to be sent to the web
4295     server. If you do, it is a matter of fairness not to use any address that
4296     is actually used by a real person.
4297    </para>
4298    <para>
4299     This action is rarely needed, as modern web browsers don't send
4300     <quote>From:</quote> headers anymore.
4301    </para>
4302   </listitem>
4303  </varlistentry>
4304
4305  <varlistentry>
4306   <term>Example usage:</term>
4307   <listitem>
4308    <para>
4309     <screen>+hide-from-header{block}</screen> or
4310     <screen>+hide-from-header{spam-me-senseless@sittingduck.example.com}</screen>
4311    </para>
4312   </listitem>
4313  </varlistentry>
4314 </variablelist>
4315 </sect3>
4316
4317
4318 <!--   ~~~~~       New section      ~~~~~     -->
4319 <sect3 renderas="sect4" id="hide-referrer">
4320 <title>hide-referrer</title>
4321 <anchor id="hide-referer">
4322 <variablelist>
4323  <varlistentry>
4324   <term>Typical use:</term>
4325   <listitem>
4326    <para>Conceal which link you followed to get to a particular site</para>
4327   </listitem>
4328  </varlistentry>
4329
4330  <varlistentry>
4331   <term>Effect:</term>
4332   <listitem>
4333    <para>
4334     Deletes the <quote>Referer:</quote> (sic) HTTP header from the client request,
4335     or replaces it with a forged one.
4336    </para>
4337   </listitem>
4338  </varlistentry>
4339
4340  <varlistentry>
4341   <term>Type:</term>
4342   <!-- Boolean, Parameterized, Multi-value -->
4343   <listitem>
4344    <para>Parameterized.</para>
4345   </listitem>
4346  </varlistentry>
4347
4348  <varlistentry>
4349   <term>Parameter:</term>
4350   <listitem>
4351    <itemizedlist>
4352     <listitem>
4353      <para><quote>block</quote> to delete the header completely.</para>
4354     </listitem>
4355     <listitem>
4356      <para><quote>forge</quote> to pretend to be coming from the homepage of the server we are talking to.</para>
4357     </listitem>
4358     <listitem>
4359      <para>Any other string to set a user defined referrer.</para>
4360     </listitem>
4361    </itemizedlist>
4362   </listitem>
4363  </varlistentry>
4364  
4365  <varlistentry>
4366   <term>Notes:</term>
4367   <listitem>
4368    <para>
4369     <quote>forge</quote> is the preferred option here, since some servers will
4370     not send images back otherwise, in an attempt to prevent their valuable
4371     content from being embedded elsewhere (and hence, without being surrounded
4372     by <emphasis>their</emphasis> banners).
4373    </para>
4374   <para>  
4375    <literal>hide-referer</literal> is an alternate spelling of
4376    <literal>hide-referrer</literal> and the two can be can be freely
4377    substituted with each other. (<quote>referrer</quote> is the
4378    correct English spelling, however the HTTP specification has a bug - it
4379    requires it to be spelled as <quote>referer</quote>.) 
4380   </para>
4381   </listitem>
4382  </varlistentry>
4383
4384  <varlistentry>
4385   <term>Example usage:</term>
4386   <listitem>
4387    <para>
4388      <screen>+hide-referrer{forge}</screen> or
4389      <screen>+hide-referrer{http://www.yahoo.com/}</screen>
4390    </para>
4391   </listitem>
4392  </varlistentry>
4393 </variablelist>
4394 </sect3>
4395
4396
4397 <!--   ~~~~~       New section      ~~~~~     -->
4398 <sect3 renderas="sect4" id="hide-user-agent">
4399 <title>hide-user-agent</title>
4400
4401 <variablelist>
4402  <varlistentry>
4403   <term>Typical use:</term>
4404   <listitem>
4405    <para>Conceal your type of browser and client operating system</para>
4406   </listitem>
4407  </varlistentry>
4408
4409  <varlistentry>
4410   <term>Effect:</term>
4411   <listitem>
4412    <para>
4413     Replaces the value of the <quote>User-Agent:</quote> HTTP header
4414     in client requests with the specified value.
4415    </para>
4416   </listitem>
4417  </varlistentry>
4418
4419  <varlistentry>
4420   <term>Type:</term>
4421   <!-- Boolean, Parameterized, Multi-value -->
4422   <listitem>
4423    <para>Parameterized.</para>
4424   </listitem>
4425  </varlistentry>
4426
4427  <varlistentry>
4428   <term>Parameter:</term>
4429   <listitem>
4430    <para>
4431     Any user-defined string.
4432    </para>
4433   </listitem>
4434  </varlistentry>
4435  
4436  <varlistentry>
4437   <term>Notes:</term>
4438   <listitem>
4439    <warning> 
4440     <para>
4441      This breaks many web sites that depend on looking at this header in order
4442      to customize their content for different browsers (which, by the
4443      way, is <emphasis>NOT</emphasis> a <ulink
4444      url="http://www.javascriptkit.com/javaindex.shtml">smart way to do
4445      that</ulink>!).
4446     </para>
4447    </warning>
4448    <para>
4449     Using this action in multi-user setups or wherever different types of
4450     browsers will access the same <application>Privoxy</application> is
4451     <emphasis>not recommended</emphasis>. In single-user, single-browser
4452     setups, you might use it to delete your OS version information from
4453     the headers, because it is an invitation to exploit known bugs for your
4454     OS. It is also occasionally useful to forge this in order to access 
4455     sites that won't let you in otherwise (though there may be a good 
4456     reason in some cases). Example of this: some MSN sites will not 
4457     let <application>Mozilla</application> enter, yet forging to a 
4458     <application>Netscape 6.1</application> user-agent works just fine.
4459     (Must be just a silly MS goof, I'm sure :-).
4460    </para>
4461    <para>
4462     This action is scheduled for improvement.
4463    </para>
4464    </listitem>
4465  </varlistentry>
4466
4467  <varlistentry>
4468   <term>Example usage:</term>
4469   <listitem>
4470    <para>
4471      <screen>+hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}</screen>
4472    </para>
4473   </listitem>
4474  </varlistentry>
4475 </variablelist>
4476 </sect3>
4477
4478
4479 <!--   ~~~~~       New section      ~~~~~     -->
4480 <sect3 renderas="sect4" id="kill-popups">
4481 <title>kill-popups<anchor id="kill-popup"></title>
4482
4483 <variablelist>
4484  <varlistentry>
4485   <term>Typical use:</term>
4486   <listitem>
4487    <para>Eliminate those annoying pop-up windows</para>
4488   </listitem>
4489  </varlistentry>
4490
4491  <varlistentry>
4492   <term>Effect:</term>
4493   <listitem>
4494    <para>
4495     While loading the document, replace JavaScript code that opens
4496     pop-up windows with (syntactically neutral) dummy code on the fly.
4497    </para>
4498   </listitem>
4499  </varlistentry>
4500
4501  <varlistentry>
4502   <term>Type:</term>
4503   <!-- Boolean, Parameterized, Multi-value -->
4504   <listitem>
4505    <para>Boolean.</para>
4506   </listitem>
4507  </varlistentry>
4508
4509  <varlistentry>
4510   <term>Parameter:</term>
4511   <listitem>
4512    <para>
4513     N/A
4514    </para>
4515   </listitem>
4516  </varlistentry>
4517  
4518  <varlistentry>
4519   <term>Notes:</term>
4520   <listitem>
4521    <para>
4522     This action is easily confused with the built-in, hardwired <literal><link linkend="filter">filter</link></literal>
4523     action, but there are important differences: For <literal>kill-popups</literal>,
4524     the document need not be buffered, so it can be incrementally rendered while
4525     downloading. But <literal>kill-popups</literal> doesn't catch as many pop-ups as
4526     <literal><link
4527     linkend="filter">filter</link>{<replaceable>popups</replaceable>}</literal>
4528     does. 
4529    </para>
4530    <para>
4531     Think of it as a fast and efficient replacement for a filter that you
4532     can use if you don't want any filtering at all. Note that it doesn't make
4533     sense to combine it with any <literal><link linkend="filter">filter</link></literal> action,
4534     since as soon as one <literal><link linkend="filter">filter</link></literal> applies,
4535     the whole document needs to be buffered anyway, which destroys the advantage of
4536     the <literal>kill-popups</literal> action over its filter equivalent.
4537    </para>
4538    <para>
4539     Killing all pop-ups is a dangerous business. Many shops and banks rely on
4540     pop-ups to display forms, shopping carts etc, and killing only the unwanted pop-ups 
4541     would require artificial intelligence in <application>Privoxy</application>.
4542     If the only kind of pop-ups that you want to kill are exit consoles (those
4543     <emphasis>really nasty</emphasis> windows that appear when you close an other
4544     one), you might want to use
4545     <literal><link
4546     linkend="filter">filter</link>{<replaceable>js-annoyances</replaceable>}</literal>
4547     instead. 
4548    </para>
4549
4550   <!-- 
4551    <para>
4552     An alternate spelling is <literal>+kill-popup</literal>, which is 
4553     interchangeable.
4554    </para>
4555  --> 
4556   </listitem>
4557  </varlistentry>
4558
4559  <varlistentry>
4560   <term>Example usage:</term>
4561   <listitem>
4562    <para><screen>+kill-popups</screen></para>
4563   </listitem>
4564  </varlistentry>
4565 </variablelist>
4566 </sect3>
4567
4568
4569 <!--   ~~~~~       New section      ~~~~~     -->
4570 <sect3 renderas="sect4" id="limit-connect">
4571 <title>limit-connect</title>
4572
4573 <variablelist>
4574  <varlistentry>
4575   <term>Typical use:</term>
4576   <listitem>
4577    <para>Prevent abuse of <application>Privoxy</application> as a TCP proxy relay</para>
4578   </listitem>
4579  </varlistentry>
4580
4581  <varlistentry>
4582   <term>Effect:</term>
4583   <listitem>
4584    <para>
4585     Specifies to which ports HTTP CONNECT requests are allowable.
4586    </para>
4587   </listitem>
4588  </varlistentry>
4589
4590  <varlistentry>
4591   <term>Type:</term>
4592   <!-- Boolean, Parameterized, Multi-value -->
4593   <listitem>
4594    <para>Parameterized.</para>
4595   </listitem>
4596  </varlistentry>
4597
4598  <varlistentry>
4599   <term>Parameter:</term>
4600   <listitem>
4601    <para>
4602     A comma-separated list of ports or port ranges (the latter using dashes, with the minimum
4603     defaulting to 0 and the maximum to 65K).
4604    </para>
4605   </listitem>
4606  </varlistentry>
4607  
4608  <varlistentry>
4609   <term>Notes:</term>
4610   <listitem>
4611    <para>
4612     By default, i.e. if no <literal>limit-connect</literal> action applies,
4613     <application>Privoxy</application> only allows HTTP CONNECT
4614     requests to port 443 (the standard, secure HTTPS port). Use 
4615     <literal>limit-connect</literal> if more fine-grained control is desired
4616     for some or all destinations.
4617    </para>
4618    <para>
4619     The CONNECT methods exists in HTTP to allow access to secure websites
4620     (<quote>https://</quote> URLs) through proxies. It works very simply:
4621     the proxy connects to the server on the specified port, and then
4622     short-circuits its connections to the client and to the remote server.
4623     This can be a big security hole, since CONNECT-enabled proxies can be
4624     abused as TCP relays very easily.
4625   </para>
4626   <para>
4627    If you don't know what any of this means, there probably is no reason to 
4628    change this one, since the default is already very restrictive.
4629   </para>
4630   </listitem>
4631  </varlistentry>
4632
4633  <varlistentry>
4634   <term>Example usages:</term>
4635   <listitem>
4636    <!-- I had trouble getting the spacing to look right in my browser -->
4637    <!-- I probably have the wrong font setup, bollocks. -->
4638    <!-- Apparently the emphasis tag uses a proportional font no matter what -->
4639     <para>
4640      <screen>+limit-connect{443}                   # This is the default and need not be specified.
4641 +limit-connect{80,443}                # Ports 80 and 443 are OK.
4642 +limit-connect{-3, 7, 20-100, 500-}   # Ports less than 3, 7, 20 to 100 and above 500 are OK.
4643 +limit-connect{-}                     # All ports are OK (gaping security hole!)</screen>
4644    </para>
4645   </listitem>
4646  </varlistentry>
4647 </variablelist>
4648 </sect3>
4649
4650 <!--   ~~~~~       New section      ~~~~~     -->
4651 <sect3 renderas="sect4" id="prevent-compression">
4652 <title>prevent-compression</title>
4653
4654 <variablelist>
4655  <varlistentry>
4656   <term>Typical use:</term>
4657   <listitem>
4658    <para>
4659     Ensure that servers send the content uncompressed, so it can be
4660     passed through <literal><link linkend="filter">filter</link></literal>s
4661    </para>
4662   </listitem>
4663  </varlistentry>
4664
4665  <varlistentry>
4666   <term>Effect:</term>
4667   <listitem>
4668    <para>
4669     Adds a header to the request that asks for uncompressed transfer.
4670    </para>
4671   </listitem>
4672  </varlistentry>
4673
4674  <varlistentry>
4675   <term>Type:</term>
4676   <!-- Boolean, Parameterized, Multi-value -->
4677   <listitem>
4678    <para>Boolean.</para>
4679   </listitem>
4680  </varlistentry>
4681
4682  <varlistentry>
4683   <term>Parameter:</term>
4684   <listitem>
4685    <para>
4686     N/A
4687    </para>
4688   </listitem>
4689  </varlistentry>
4690  
4691  <varlistentry>
4692   <term>Notes:</term>
4693   <listitem>
4694    <para>
4695     More and more websites send their content compressed by default, which
4696     is generally a good idea and saves bandwidth. But for the <literal><link
4697     linkend="filter">filter</link></literal>, <literal><link linkend="deanimate-gifs">deanimate-gifs</link></literal>
4698     and <literal><link linkend="kill-popups">kill-popups</link></literal> actions to work,
4699     <application>Privoxy</application> needs access to the  uncompressed data.
4700     Unfortunately, <application>Privoxy</application> can't yet(!)  uncompress, filter, and
4701     re-compress the content on the fly. So if you want to ensure that all websites, including
4702     those that normally compress, can be filtered, you need to use this action.
4703    </para>
4704    <para>
4705     This will slow down transfers from those websites, though. If you use any of the above-mentioned
4706     actions, you will typically want to use <literal>prevent-compression</literal> in conjunction
4707     with them.
4708    </para>
4709    <para>
4710     Note that some (rare) ill-configured sites don't handle requests for uncompressed
4711     documents correctly (they send an empty document body). If you use <literal>prevent-compression</literal>
4712     per default, you'll have to add exceptions for those sites. See the example for how to do that.
4713    </para>
4714   </listitem>
4715  </varlistentry>
4716
4717  <varlistentry>
4718   <term>Example usage (sections):</term>
4719   <listitem>
4720    <para>
4721     <screen># Set default:
4722 #
4723 {+prevent-compression}
4724 / # Match all sites
4725
4726 # Make exceptions for ill sites:
4727 #
4728 {-prevent-compression}
4729 www.debianhelp.org
4730 www.pclinuxonline.com</screen>
4731    </para>
4732   </listitem>
4733  </varlistentry>
4734
4735 </variablelist>
4736 </sect3>
4737
4738
4739 <!--   ~~~~~       New section      ~~~~~     -->
4740 <sect3 renderas="sect4" id="send-vanilla-wafer">
4741 <title>send-vanilla-wafer</title>
4742
4743 <variablelist>
4744  <varlistentry>
4745   <term>Typical use:</term>
4746   <listitem>
4747    <para>
4748     Feed log analysis scripts with useless data.
4749    </para>
4750   </listitem>
4751  </varlistentry>
4752
4753  <varlistentry>
4754   <term>Effect:</term>
4755   <listitem>
4756    <para>
4757     Sends a cookie with each request stating that you do not accept any copyright
4758     on cookies sent to you, and asking the site operator not to track you.
4759    </para>
4760   </listitem>
4761  </varlistentry>
4762
4763  <varlistentry>
4764   <term>Type:</term>
4765   <!-- Boolean, Parameterized, Multi-value -->
4766   <listitem>
4767    <para>Boolean.</para>
4768   </listitem>
4769  </varlistentry>
4770
4771  <varlistentry>
4772   <term>Parameter:</term>
4773   <listitem>
4774    <para>
4775     N/A
4776    </para>
4777   </listitem>
4778  </varlistentry>
4779  
4780  <varlistentry>
4781   <term>Notes:</term>
4782   <listitem>
4783    <para>
4784     The vanilla wafer is a (relatively) unique header and could conceivably be used to track you.
4785    </para>
4786    <para>
4787     This action is rarely used and not enabled in the default configuration.
4788    </para>
4789   </listitem>
4790  </varlistentry>
4791
4792  <varlistentry>
4793   <term>Example usage:</term>
4794   <listitem>
4795    <para>
4796      <screen>+send-vanilla-wafer</screen>
4797    </para>
4798   </listitem>
4799  </varlistentry>
4800
4801 </variablelist>
4802 </sect3>
4803
4804
4805 <!--   ~~~~~       New section      ~~~~~     -->
4806 <sect3 renderas="sect4" id="send-wafer">
4807 <title>send-wafer</title>
4808
4809 <variablelist>
4810  <varlistentry>
4811   <term>Typical use:</term>
4812   <listitem>
4813    <para>
4814     Send custom cookies or feed log analysis scripts with even more useless data.
4815    </para>
4816   </listitem>
4817  </varlistentry>
4818
4819  <varlistentry>
4820   <term>Effect:</term>
4821   <listitem>
4822    <para>
4823     Sends a custom, user-defined cookie with each request.
4824    </para>
4825   </listitem>
4826  </varlistentry>
4827
4828  <varlistentry>
4829   <term>Type:</term>
4830   <!-- Boolean, Parameterized, Multi-value -->
4831   <listitem>
4832    <para>Multi-value.</para>
4833   </listitem>
4834  </varlistentry>
4835
4836  <varlistentry>
4837   <term>Parameter:</term>
4838   <listitem>
4839    <para>
4840     A string of the form <quote><replaceable class="option">name</replaceable>=<replaceable
4841     class="parameter">value</replaceable></quote>.
4842    </para>
4843   </listitem>
4844  </varlistentry>
4845  
4846  <varlistentry>
4847   <term>Notes:</term>
4848   <listitem>
4849    <para>
4850     Being multi-valued, multiple instances of this action can apply to the same request,
4851     resulting in multiple cookies being sent.
4852    </para>
4853    <para>
4854     This action is rarely used and not enabled in the default configuration.
4855    </para>
4856   </listitem>
4857  </varlistentry>
4858  <varlistentry>
4859   <term>Example usage (section):</term>
4860   <listitem>
4861    <para>
4862     <screen>{+send-wafer{UsingPrivoxy=true}}
4863 my-internal-testing-server.void</screen>
4864    </para>
4865   </listitem>
4866  </varlistentry>
4867 </variablelist>
4868 </sect3>
4869
4870
4871 <!--   ~~~~~       New section      ~~~~~     -->
4872 <sect3 renderas="sect4" id="session-cookies-only">
4873 <title>session-cookies-only</title>
4874
4875 <variablelist>
4876  <varlistentry>
4877   <term>Typical use:</term>
4878   <listitem>
4879    <para>
4880     Allow only temporary <quote>session</quote> cookies (for the current browser session <emphasis>only</emphasis>).
4881    </para>
4882   </listitem>
4883  </varlistentry>
4884
4885  <varlistentry>
4886   <term>Effect:</term>
4887   <listitem>
4888    <para>
4889     Deletes the <quote>expires</quote> field from <quote>Set-Cookie:</quote> server headers.
4890     Most browsers will not store such cookies permanently and forget them in between sessions.
4891    </para>
4892   </listitem>
4893  </varlistentry>
4894
4895 <varlistentry>
4896   <term>Type:</term>
4897   <!-- Boolean, Parameterized, Multi-value -->
4898   <listitem>
4899    <para>Boolean.</para>
4900   </listitem>
4901  </varlistentry>
4902
4903  <varlistentry>
4904   <term>Parameter:</term>
4905   <listitem>
4906    <para>
4907     N/A
4908    </para>
4909   </listitem>
4910  </varlistentry>
4911  
4912  <varlistentry>
4913   <term>Notes:</term>
4914   <listitem>
4915    <para>
4916     This is less strict than <literal><link linkend="crunch-incoming-cookies">crunch-incoming-cookies</link></literal> / 
4917     <literal><link linkend="crunch-outgoing-cookies">crunch-outgoing-cookies</link></literal> and allows you to browse
4918     websites that insist or rely on setting cookies, without compromising your privacy too badly.
4919    </para>
4920    <para>
4921     Most browsers will not permanently store cookies that have been processed by
4922     <literal>session-cookies-only</literal> and will forget about them between sessions.
4923     This makes profiling cookies useless, but won't break sites which require cookies so
4924     that you can log in for transactions. This is generally turned on for all 
4925     sites, and is the recommended setting.
4926    </para>
4927    <para>
4928     It makes <emphasis>no sense at all</emphasis> to use <literal>session-cookies-only</literal>
4929     together with <literal><link linkend="crunch-incoming-cookies">crunch-incoming-cookies</link></literal> or
4930     <literal><link linkend="crunch-outgoing-cookies">crunch-outgoing-cookies</link></literal>. If you do, cookies
4931     will be plainly killed.
4932    </para>
4933    <para>
4934     Note that it is up to the browser how it handles such cookies without an <quote>expires</quote>
4935     field. If you use an exotic browser, you might want to try it out to be sure.
4936    </para>
4937   </listitem>
4938  </varlistentry>
4939
4940  <varlistentry>
4941   <term>Example usage:</term>
4942   <listitem>
4943    <para>
4944      <screen>+session-cookies-only</screen>
4945    </para>
4946   </listitem>
4947  </varlistentry>
4948 </variablelist>
4949 </sect3>
4950
4951
4952 <!--   ~~~~~       New section      ~~~~~     -->
4953 <sect3 renderas="sect4" id="set-image-blocker">
4954 <title>set-image-blocker</title>
4955
4956 <variablelist>
4957  <varlistentry>
4958   <term>Typical use:</term>
4959   <listitem>
4960    <para>Choose the replacement for blocked images</para>
4961   </listitem>
4962  </varlistentry>
4963
4964  <varlistentry>
4965   <term>Effect:</term>
4966   <listitem>
4967    <para>
4968      This action alone doesn't do anything noticeable. If <emphasis>both</emphasis>
4969      <literal><link linkend="block">block</link></literal> <emphasis>and</emphasis> <literal><link
4970      linkend="handle-as-image">handle-as-image</link></literal> <emphasis>also</emphasis>
4971      apply, i.e. if the request is to be blocked as an image,
4972      <emphasis>then</emphasis> the parameter of this action decides what will be
4973      sent as a replacement.
4974    </para>
4975   </listitem>
4976  </varlistentry>
4977
4978  <varlistentry>
4979   <term>Type:</term>
4980   <!-- Boolean, Parameterized, Multi-value -->
4981   <listitem>
4982    <para>Parameterized.</para>
4983   </listitem>
4984  </varlistentry>
4985
4986  <varlistentry>
4987   <term>Parameter:</term>
4988   <listitem>
4989    <itemizedlist>
4990     <listitem>
4991      <para>
4992       <quote>pattern</quote> to send a built-in checkerboard pattern image. The image is visually
4993       decent, scales very well, and makes it obvious where banners were busted.
4994      </para>
4995     </listitem>
4996     <listitem>
4997      <para>
4998       <quote>blank</quote> to send a built-in transparent image. This makes banners disappear
4999       completely, but makes it hard to detect where <application>Privoxy</application> has blocked
5000       images on a given page and complicates troubleshooting if <application>Privoxy</application>
5001       has blocked innocent images, like navigation icons.
5002      </para>
5003     </listitem>
5004     <listitem>
5005      <para>
5006       <quote><replaceable class="parameter">target-url</replaceable></quote> to
5007       send a redirect to <replaceable class="parameter">target-url</replaceable>. You can redirect
5008       to any image anywhere, even in your local filesystem (via <quote>file:///</quote> URL).
5009      </para>
5010      <para>
5011       A good application of redirects is to use special <application>Privoxy</application>-built-in
5012       URLs, which send the built-in images, as <replaceable class="parameter">target-url</replaceable>.
5013       This has the same visual effect as specifying <quote>blank</quote> or <quote>pattern</quote> in
5014       the first place, but enables your browser to cache the replacement image, instead of requesting
5015       it over and over again.
5016      </para>
5017     </listitem>
5018    </itemizedlist>
5019   </listitem>
5020  </varlistentry>
5021
5022  <varlistentry>
5023   <term>Notes:</term>
5024   <listitem>
5025    <para>
5026     The URLs for the built-in images are <quote>http://config.privoxy.org/send-banner?type=<replaceable
5027     class="parameter">type</replaceable></quote>, where <replaceable class="parameter">type</replaceable> is
5028     either <quote>blank</quote> or <quote>pattern</quote>.
5029    </para>
5030    <para>
5031     There is a third (advanced) type, called <quote>auto</quote>. It is <emphasis>NOT</emphasis> to be
5032     used in <literal>set-image-blocker</literal>, but meant for use from <link linkend="filter-file">filters</link>.
5033     Auto will select the type of image that would have applied to the referring page, had it been an image.
5034    </para>
5035   </listitem>
5036  </varlistentry>
5037
5038  <varlistentry>
5039   <term>Example usage:</term>
5040   <listitem>
5041    <para>
5042     Built-in pattern:
5043    </para>
5044    <para>
5045     <screen>+set-image-blocker{pattern}</screen>
5046    </para>
5047    <para>
5048     Redirect to the BSD devil:
5049    </para>
5050    <para>
5051     <screen>+set-image-blocker{http://www.freebsd.org/gifs/dae_up3.gif}</screen>
5052    </para>
5053    <para>
5054     Redirect to the built-in pattern for better caching:
5055    </para>
5056    <para>
5057     <screen>+set-image-blocker{http://config.privoxy.org/send-banner?type=pattern}</screen>
5058    </para>
5059   </listitem>
5060  </varlistentry>
5061 </variablelist>
5062 </sect3>
5063
5064
5065 <!--   ~~~~~       New section      ~~~~~     -->
5066 <sect3>
5067 <title>Summary</title>
5068 <para>
5069  Note that many of these actions have the potential to cause a page to
5070  misbehave, possibly even not to display at all. There are many ways 
5071  a site designer may choose to design his site, and what HTTP header 
5072  content, and other criteria, he may depend on. There is no way to have hard
5073  and fast rules for all sites. See the <link
5074  linkend="ACTIONSANAT">Appendix</link> for a brief example on troubleshooting
5075  actions.
5076 </para>
5077 </sect3>
5078 </sect2>
5079
5080 <!--   ~~~~~       New section      ~~~~~     -->
5081 <sect2 id="aliases">
5082 <title>Aliases</title>
5083 <para>
5084  Custom <quote>actions</quote>, known to <application>Privoxy</application>
5085  as <quote>aliases</quote>, can be defined by combining other actions.
5086  These can in turn be invoked just like the built-in actions.
5087  Currently, an alias name can contain any character except space, tab,
5088  <quote>=</quote>,
5089  <quote>{</quote> and <quote>}</quote>, but we <emphasis>strongly 
5090  recommend</emphasis> that you only use <quote>a</quote> to <quote>z</quote>,
5091  <quote>0</quote> to <quote>9</quote>, <quote>+</quote>, and <quote>-</quote>.
5092  Alias names are not case sensitive, and are not required to start with a
5093  <quote>+</quote> or <quote>-</quote> sign, since they are merely textually
5094  expanded.
5095 </para>
5096 <para>
5097  Aliases can be used throughout the actions file, but they <emphasis>must be
5098  defined in a special section at the top of the file!</emphasis>
5099  And there can only be one such section per actions file. Each actions file may
5100  have its own alias section, and the aliases defined in it are only visible
5101  within that file.
5102 </para>
5103 <para>
5104  There are two main reasons to use aliases: One is to save typing for frequently
5105  used combinations of actions, the other one is a gain in flexibility: If you
5106  decide once how you want to handle shops by defining an alias called
5107  <quote>shop</quote>, you can later change your policy on shops in
5108  <emphasis>one</emphasis> place, and your changes will take effect everywhere
5109  in the actions file where the <quote>shop</quote> alias is used. Calling aliases
5110  by their purpose also makes your actions files more readable.
5111 </para>
5112 <para>
5113  Currently, there is one big drawback to using aliases, though:
5114  <application>Privoxy</application>'s built-in web-based action file
5115  editor honors aliases when reading the actions files, but it expands
5116  them before writing. So the effects of your aliases are of course preserved,
5117  but the aliases themselves are lost when you edit sections that use aliases
5118  with it.
5119  This is likely to change in future versions of <application>Privoxy</application>.
5120 </para>
5121
5122 <para>
5123  Now let's define some aliases...
5124 </para>
5125
5126 <para>
5127  <screen>
5128  # Useful custom aliases we can use later.
5129  #
5130  # Note the (required!) section header line and that this section
5131  # must be at the top of the actions file!
5132  #
5133  {{alias}}
5134
5135  # These aliases just save typing later:
5136  # (Note that some already use other aliases!)
5137  #
5138  +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
5139  -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
5140  block-as-image      = +block +handle-as-image
5141  mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
5142
5143  # These aliases define combinations of actions
5144  # that are useful for certain types of sites:
5145  #
5146  fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
5147  shop        = -crunch-all-cookies -filter{popups} -kill-popups
5148
5149  # Short names for other aliases, for really lazy people ;-)
5150  #
5151  c0 = +crunch-all-cookies
5152  c1 = -crunch-all-cookies</screen>
5153 </para>
5154
5155 <para>
5156  ...and put them to use. These sections would appear in the lower part of an 
5157  actions file and define exceptions to the default actions (as specified further
5158  up for the <quote>/</quote> pattern):
5159 </para>
5160
5161 <para>
5162  <screen>
5163  # These sites are either very complex or very keen on
5164  # user data and require minimal interference to work:
5165  #
5166  {fragile}
5167  .office.microsoft.com
5168  .windowsupdate.microsoft.com
5169  .nytimes.com
5170
5171  # Shopping sites:
5172  # Allow cookies (for setting and retrieving your customer data)
5173  #           
5174  {shop}
5175  .quietpc.com
5176  .worldpay.com   # for quietpc.com
5177  .scan.co.uk
5178
5179  # These shops require pop-ups:
5180  #
5181  {shop -kill-popups -filter{popups}}
5182   .dabs.com
5183   .overclockers.co.uk</screen>
5184 </para>
5185
5186 <para>
5187  Aliases like <quote>shop</quote> and <quote>fragile</quote> are often used for 
5188  <quote>problem</quote> sites that require some actions to be disabled 
5189  in order to function properly.
5190 </para>
5191 </sect2>
5192
5193 <!--   ~~~~~       New section      ~~~~~     -->
5194 <sect2 id="act-examples">
5195 <title>Actions Files Tutorial</title>
5196 <para>
5197  The above chapters have shown <link linkend="actions-file">which actions files
5198  there are and how they are organized</link>, how actions are <link
5199  linkend="actions">specified</link> and <link linkend="actions-apply">applied
5200  to URLs</link>, how <link linkend="af-patterns">patterns</link> work, and how to
5201  define and use <link linkend="aliases">aliases</link>. Now, let's look at an
5202  example <filename>default.action</filename> and <filename>user.action</filename>
5203  file and see how all these pieces come together:
5204 </para>
5205
5206 <sect3><title>default.action</title>
5207
5208 <para>
5209 Every config file should start with a short comment stating its purpose:
5210 </para>
5211
5212 <para>
5213  <screen># Sample default.action file &lt;developers@privoxy.org&gt;</screen>
5214 </para>
5215
5216 <para>
5217 Then, since this is the <filename>default.action</filename> file, the
5218 first section is a special section for internal use that you needn't
5219 change or worry about:
5220 </para>
5221
5222 <para>
5223  <screen>
5224 ##########################################################################
5225 # Settings -- Don't change! For internal Privoxy use ONLY.
5226 ##########################################################################
5227
5228 {{settings}}
5229 for-privoxy-version=3.0</screen>
5230 </para>
5231
5232 <para>
5233 After that comes the (optional) alias section. We'll use the example
5234 section from the above <link linkend="aliases">chapter on aliases</link>,
5235 that also explains why and how aliases are used:
5236 </para>
5237
5238 <para>
5239  <screen>
5240 ##########################################################################
5241 # Aliases
5242 ##########################################################################
5243 {{alias}}
5244
5245 # These aliases just save typing later:
5246 # (Note that some already use other aliases!)
5247 #
5248 +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
5249 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
5250 block-as-image      = +block +handle-as-image
5251 mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
5252
5253 # These aliases define combinations of actions
5254 # that are useful for certain types of sites:
5255 #
5256 fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
5257 shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
5258 </para>
5259
5260 <para>
5261  Now come the regular sections, i.e. sets of actions, accompanied
5262  by URL patterns to which they apply. Remember <emphasis>all actions
5263  are disabled when matching starts</emphasis>, so we have to explicitly
5264  enable the ones we want.
5265 </para>
5266
5267 <para>
5268  The first regular section is probably the most important. It has only
5269  one pattern, <quote><literal>/</literal></quote>, but this pattern
5270  <link linkend="af-patterns">matches all URLs.</link>. Therefore, the
5271  set of actions used in this <quote>default</quote> section <emphasis>will
5272  be applied to all requests as a start</emphasis>. It can  be partly or
5273  wholly overridden by later matches further down this file, or in user.action,
5274  but it will still be largely responsible for your overall browsing
5275  experience.
5276 </para>
5277
5278 <para>
5279  Again, at the start of matching, all actions are disabled, so there is
5280  no real need to disable any actions here, but we will do that nonetheless,
5281  to have a complete listing for your reference. (Remember: A <quote>+</quote>
5282  preceding the action name enables the action, a <quote>-</quote> disables!).
5283  Also note how this long line has been made more readable by splitting it into
5284  multiple lines with line continuation.
5285 </para> 
5286
5287 <para>
5288  <screen>
5289 ##########################################################################
5290 # "Defaults" section:
5291 ##########################################################################
5292  { \
5293  -<link linkend="ADD-HEADER">add-header</link> \
5294  -<link linkend="BLOCK">block</link> \
5295  -<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> \
5296  -<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link> \
5297  +<link linkend="DEANIMATE-GIFS">deanimate-gifs</link> \
5298  -<link linkend="DOWNGRADE-HTTP-VERSION">downgrade-http-version</link> \
5299  +<link linkend="FAST-REDIRECTS">fast-redirects</link> \
5300  +<link linkend="FILTER-HTML-ANNOYANCES">filter{html-annoyances}</link> \
5301  +<link linkend="FILTER-JS-ANNOYANCES">filter{js-annoyances}</link> \
5302  -<link linkend="FILTER-CONTENT-COOKIES">filter{content-cookies}</link> \
5303  +<link linkend="FILTER-POPUPS">filter{popups}</link> \
5304  +<link linkend="FILTER-WEBBUGS">filter{webbugs}</link> \
5305  -<link linkend="FILTER-REFRESH-TAGS">filter{refresh-tags}</link> \
5306  -<link linkend="FILTER-FUN">filter{fun}</link> \
5307  +<link linkend="FILTER-NIMDA">filter{nimda}</link> \
5308  +<link linkend="FILTER-BANNERS-BY-SIZE">filter{banners-by-size}</link> \
5309  -<link linkend="FILTER-SHOCKWAVE-FLASH">filter{shockwave-flash}</link> \
5310  -<link linkend="FILTER-CRUDE-PARENTAL">filter{crude-parental}</link> \
5311  -<link linkend="HANDLE-AS-IMAGE">handle-as-image</link> \
5312  +<link linkend="HIDE-FORWARDED-FOR-HEADERS">hide-forwarded-for-headers</link> \
5313  +<link linkend="HIDE-FROM-HEADER">hide-from-header{block}</link> \
5314  +<link linkend="HIDE-REFERER">hide-referrer{forge}</link> \
5315  -<link linkend="HIDE-USER-AGENT">hide-user-agent</link> \
5316  -<link linkend="KILL-POPUPS">kill-popups</link> \
5317  -<link linkend="LIMIT-CONNECT">limit-connect</link> \
5318  +<link linkend="PREVENT-COMPRESSION">prevent-compression</link> \
5319  -<link linkend="SEND-VANILLA-WAFER">send-vanilla-wafer</link> \
5320  -<link linkend="SEND-WAFER">send-wafer</link> \
5321  +<link linkend="SESSION-COOKIES-ONLY">session-cookies-only</link> \
5322  +<link linkend="SET-IMAGE-BLOCKER">set-image-blocker{pattern}</link> \
5323  }
5324  / # forward slash will match *all* potential URL patterns.</screen>
5325 </para>
5326
5327 <para>
5328  The default behavior is now set. Note that some actions, like not hiding
5329  the user agent, are part of a <quote>general policy</quote> that applies
5330  universally and won't get any exceptions defined later. Other choices,
5331  like not blocking (which is <emphasis>understandably</emphasis> the
5332  default!) need exceptions, i.e. we need to specify explicitly what we
5333  want to block in later sections.
5334  We will also want to make exceptions from our general pop-up-killing,
5335  and use our defined aliases for that.
5336 </para>
5337
5338 <para>
5339  The first of our specialized sections is concerned with <quote>fragile</quote>
5340  sites, i.e. sites that require minimum interference, because they are either
5341  very complex or very keen on tracking you (and have mechanisms in place that
5342  make them unusable for people who avoid being tracked). We will simply use
5343  our pre-defined <literal>fragile</literal> alias instead of stating the list
5344  of actions explicitly:
5345 </para>
5346
5347 <para>
5348  <screen>
5349 ##########################################################################
5350 # Exceptions for sites that'll break under the default action set:
5351 ##########################################################################
5352
5353 # "Fragile" Use a minimum set of actions for these sites (see alias above):
5354 #
5355 { fragile }
5356 .office.microsoft.com           # surprise, surprise!
5357 .windowsupdate.microsoft.com</screen>
5358 </para>
5359
5360 <para>
5361  Shopping sites are not as fragile, but they typically
5362  require cookies to log in, and pop-up windows for shopping
5363  carts or item details. Again, we'll use a pre-defined alias:
5364 </para>
5365  
5366 <para>
5367  <screen>
5368 # Shopping sites:
5369 #
5370 { shop }
5371 .quietpc.com 
5372 .worldpay.com   # for quietpc.com
5373 .jungle.com
5374 .scan.co.uk</screen>
5375 </para>
5376
5377 <para>
5378  Then, there are sites which rely on pop-up windows (yuck!) to work.
5379  Since we made pop-up-killing our default above, we need to make exceptions
5380  now. <ulink url="http://www.mozilla.org/">Mozilla</ulink> users, who
5381  can turn on smart handling of unwanted pop-ups in their browsers, can
5382  safely choose
5383  -<literal><link linkend="FILTER-POPUPS">filter{popups}</link></literal> (and
5384  -<literal><link linkend="KILL-POPUPS">kill-popups</link></literal>) above
5385  and hence don't need this section. Anyway, disabling an already disabled
5386  action doesn't hurt, so we'll define our exceptions regardless of what was
5387  chosen in the defaults section:
5388 </para>
5389
5390 <para>
5391  <screen>
5392 # These sites require pop-ups too :( 
5393 #
5394 { -<link linkend="KILL-POPUPS">kill-popups</link> -<link linkend="FILTER-POPUPS">filter{popups}</link> }
5395 .dabs.com
5396 .overclockers.co.uk
5397 .deutsche-bank-24.de</screen>
5398 </para>
5399
5400 <para>
5401  The <literal><link linkend="FAST-REDIRECTS">fast-redirects</link></literal>
5402  action, which we enabled per default above,  breaks some sites. So disable
5403  it for popular sites where we know it misbehaves:
5404 </para>
5405
5406 <para>
5407  <screen>
5408 { -<link linkend="FAST-REDIRECTS">fast-redirects</link> }
5409 login.yahoo.com
5410 edit.*.yahoo.com
5411 .google.com
5412 .altavista.com/.*(like|url|link):http
5413 .altavista.com/trans.*urltext=http
5414 .nytimes.com</screen>
5415 </para>
5416
5417 <para>
5418  It is important that <application>Privoxy</application> knows which
5419  URLs belong to images, so that <emphasis>if</emphasis> they are to
5420  be blocked, a substitute image can be sent, rather than an HTML page.
5421  Contacting the remote site to find out is not an option, since it
5422  would destroy the loading time advantage of banner blocking, and it
5423  would feed the advertisers (in terms of money <emphasis>and</emphasis>
5424  information). We can mark any URL as an image with the <literal><link
5425  linkend="handle-as-image">handle-as-image</link></literal> action,
5426  and marking all URLs that end in a known image file extension is a
5427  good start:
5428 </para>
5429
5430 <para>
5431  <screen>
5432 ##########################################################################
5433 # Images:
5434 ##########################################################################
5435
5436 # Define which file types will be treated as images, in case they get
5437 # blocked further down this file:
5438 #
5439 { +<link linkend="HANDLE-AS-IMAGE">handle-as-image</link> }
5440 /.*\.(gif|jpe?g|png|bmp|ico)$</screen>
5441 </para>
5442
5443 <para>
5444  And then there are known banner sources. They often use scripts to
5445  generate the banners, so it won't be visible from the URL that the
5446  request is for an image. Hence we block them <emphasis>and</emphasis>
5447  mark them as images in one go, with the help of our
5448  <literal>block-as-image</literal> alias defined above. (We could of
5449  course just as well use <literal>+<link linkend="block">block</link>
5450  +<link linkend="handle-as-image">handle-as-image</link></literal> here.)
5451  Remember that the type of the replacement image is chosen by the
5452  <literal><link linkend="set-image-blocker">set-image-blocker</link></literal>
5453  action. Since all URLs have matched the default section with its
5454  <literal>+<link linkend="set-image-blocker">set-image-blocker</link>{pattern}</literal>
5455  action before, it still applies and needn't be repeated:
5456 </para>
5457
5458 <para>
5459  <screen>
5460 # Known ad generators:
5461 #
5462 { block-as-image }
5463 ar.atwola.com 
5464 .ad.doubleclick.net
5465 .ad.*.doubleclick.net
5466 .a.yimg.com/(?:(?!/i/).)*$
5467 .a[0-9].yimg.com/(?:(?!/i/).)*$
5468 bs*.gsanet.com
5469 bs*.einets.com
5470 .qkimg.net</screen>
5471 </para>
5472
5473 <para>
5474  One of the most important jobs of <application>Privoxy</application>
5475  is to block banners. A huge bunch of them are already <quote>blocked</quote>
5476  by the <literal><link linkend="filter">filter</link>{banners-by-size}</literal>
5477  action, which we enabled above, and which deletes the references to banner
5478  images from the pages while they are loaded, so the browser doesn't request
5479  them anymore, and hence they don't need to be blocked here. But this naturally
5480  doesn't catch all banners, and some people choose not to use filters, so we
5481  need a comprehensive list of patterns for banner URLs here, and apply the
5482  <literal><link linkend="block">block</link></literal> action to them.
5483 </para>
5484 <para>
5485  First comes a bunch of generic patterns, which do most of the work, by
5486  matching typical domain and path name components of banners. Then comes
5487  a list of individual patterns for specific sites, which is omitted here
5488  to keep the example short:
5489 </para>
5490
5491 <para>
5492  <screen>
5493 ##########################################################################
5494 # Block these fine banners:
5495 ##########################################################################
5496 { <link linkend="BLOCK">+block</link> }
5497
5498 # Generic patterns:
5499
5500 ad*.
5501 .*ads.
5502 banner?.
5503 count*.
5504 /.*count(er)?\.(pl|cgi|exe|dll|asp|php[34]?)
5505 /(?:.*/)?(publicite|werbung|rekla(ma|me|am)|annonse|maino(kset|nta|s)?)/
5506
5507 # Site-specific patterns (abbreviated):
5508 #
5509 .hitbox.com</screen>
5510 </para>
5511
5512 <para>
5513  You wouldn't believe how many advertisers actually call their banner
5514  servers ads.<replaceable>company</replaceable>.com, or call the directory
5515  in which the banners are stored simply <quote>banners</quote>. So the above
5516  generic patterns are surprisingly effective.
5517 </para>
5518 <para>
5519  But being very generic, they necessarily also catch URLs that we don't want
5520  to block. The pattern <literal>.*ads.</literal> e.g. catches 
5521  <quote>nasty-<emphasis>ads</emphasis>.nasty-corp.com</quote> as intended,
5522  but also <quote>downlo<emphasis>ads</emphasis>.sourcefroge.net</quote> or
5523  <quote><emphasis>ads</emphasis>l.some-provider.net.</quote> So here come some
5524  well-known exceptions to the <literal>+<link linkend="BLOCK">block</link></literal>
5525  section above.
5526 </para>
5527 <para>
5528  Note that these are exceptions to exceptions from the default! Consider the URL
5529  <quote>downloads.sourcefroge.net</quote>: Initially, all actions are deactivated,
5530  so it wouldn't get blocked. Then comes the defaults section, which matches the
5531  URL, but just deactivates the <literal><link linkend="BLOCK">block</link></literal>
5532  action once again. Then it matches <literal>.*ads.</literal>, an exception to the
5533  general non-blocking policy, and suddenly
5534  <literal><link linkend="BLOCK">+block</link></literal> applies. And now, it'll match
5535  <literal>.*loads.</literal>, where <literal><link linkend="BLOCK">-block</link></literal>
5536  applies, so (unless it matches <emphasis>again</emphasis> further down) it ends up
5537  with no <literal><link linkend="BLOCK">block</link></literal> action applying.
5538 </para>
5539
5540 <para>
5541  <screen>
5542 ##########################################################################
5543 # Save some innocent victims of the above generic block patterns:
5544 ##########################################################################
5545
5546 # By domain:
5547
5548 { -<link linkend="BLOCK">block</link> }
5549 adv[io]*.  # (for advogato.org and advice.*)
5550 adsl.      # (has nothing to do with ads)
5551 ad[ud]*.   # (adult.* and add.*)
5552 .edu       # (universities don't host banners (yet!))
5553 .*loads.   # (downloads, uploads etc)
5554
5555 # By path:
5556 #
5557 /.*loads/
5558
5559 # Site-specific:
5560 #
5561 www.globalintersec.com/adv # (adv = advanced)
5562 www.ugu.com/sui/ugu/adv</screen>
5563 </para>
5564
5565 <para>
5566  Filtering source code can have nasty side effects,
5567  so make an exception for our friends at sourceforge.net,
5568  and all paths with <quote>cvs</quote> in them. Note that
5569  <literal>-<link linkend="FILTER">filter</link></literal>
5570  disables <emphasis>all</emphasis> filters in one fell swoop!
5571 </para>
5572
5573 <para>
5574  <screen>
5575 # Don't filter code!
5576 #
5577 { -<link linkend="FILTER">filter</link> }
5578 /.*cvs
5579 .sourceforge.net</screen>
5580 </para>
5581
5582 <para>
5583  The actual <filename>default.action</filename> is of course more
5584  comprehensive, but we hope this example made clear how it works.
5585 </para>
5586
5587 </sect3>
5588
5589 <sect3><title>user.action</title>
5590
5591 <para>
5592  So far we are painting with a broad brush by setting general policies,
5593  which would be a reasonable starting point for many people. Now, 
5594  you'd maybe want to be more specific and have customized rules that
5595  are more suitable to your personal habits and preferences. These would
5596  be for narrowly defined situations like your ISP or your bank, and should
5597  be placed in <filename>user.action</filename>, which is parsed after all other 
5598  actions files and hence has the last word, over-riding any previously
5599  defined actions. <filename>user.action</filename> is also a 
5600  <emphasis>safe</emphasis> place for your personal settings, since
5601  <filename>default.action</filename> is actively maintained by the
5602  <application>Privoxy</application> developers and you'll probably want
5603  to install updated versions from time to time.
5604 </para>
5605
5606 <para>
5607  So let's look at a few examples of things that one might typically do in
5608  <filename>user.action</filename>: 
5609 </para>
5610
5611
5612 <!-- brief sample user.action here -->
5613
5614 <para>
5615  <screen>
5616 # My user.action file. &lt;fred@foobar.com&gt;</screen>
5617 </para>
5618
5619 <para>
5620  As <link linkend="aliases">aliases</link> are local to the actions
5621  file that they are defined in, you can't use the ones from
5622  <filename>default.action</filename>, unless you repeat them here:
5623 </para>
5624
5625 <para>
5626  <screen>
5627 # (Re-)define aliases for this file:
5628 #
5629 {{alias}}
5630 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
5631 mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
5632 fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
5633 shop        = mercy-for-cookies -filter{popups} -kill-popups
5634 allow-ads   = -block -filter{banners-by-size} # (see below)</screen>
5635  
5636 </para>
5637
5638 <para>
5639  Say you have accounts on some sites that you visit regularly, and
5640  you don't want to have to log in manually each time. So you'd like
5641  to allow persistent cookies for these sites. The
5642  <literal>mercy-for-cookies</literal> alias defined above does exactly
5643  that, i.e. it disables crunching of cookies in any direction, and
5644  processing of cookies to make them temporary.
5645 </para>
5646
5647 <para>
5648  <screen>
5649 { mercy-for-cookies }
5650 sunsolve.sun.com
5651 slashdot.org
5652 .yahoo.com
5653 .msdn.microsoft.com
5654 .redhat.com</screen>
5655 </para>
5656
5657 <para>
5658  Your bank needs popups and is allergic to some filter, but you don't
5659  know which, so you disable them all:
5660 </para>
5661
5662 <para>
5663  <screen>
5664 { -<link linkend="FILTER">filter</link> -<link linkend="KILL-POPUPS">kill-popups</link> }
5665 .your-home-banking-site.com</screen>
5666 </para>
5667
5668 <para>
5669  While browsing the web with <application>Privoxy</application> you
5670  noticed some ads that sneaked through, but you were too lazy to
5671  report them through our fine and easy <link linkend="contact">feedback</link>
5672  system, so you have added them here:
5673 </para>
5674
5675 <para>
5676  <screen>
5677 { +<link linkend="BLOCK">block</link> }
5678 www.a-popular-site.com/some/unobvious/path
5679 another.popular.site.net/more/junk/here/</screen>
5680 </para>
5681
5682 <para>
5683  Note that, assuming the banners in the above example have regular image
5684  extensions (most do),
5685  <literal>+<link linkend="HANDLE-AS-IMAGE">handle-as-image</link></literal>
5686  need not be specified, since all URLs ending in these extensions will
5687  already have been tagged as images in the relevant section of 
5688  <filename>default.action</filename> by now.
5689 </para>
5690
5691 <para>
5692  Then you noticed that the default configuration breaks Forbes Magazine,
5693  but you were too lazy to find out which action is the culprit, and you
5694  were again too lazy to give <link linkend="contact">feedback</link>, so
5695  you just used the <literal>fragile</literal> alias on the site, and
5696  -- whoa! -- it worked:
5697 </para>
5698
5699 <para>
5700 <screen>
5701 { fragile }
5702 .forbes.com</screen>
5703 </para>
5704
5705 <para>
5706  You like the <quote>fun</quote> text replacements in <filename>default.filter</filename>,
5707  but it is disabled in the distributed actions file. (My colleagues on the team just
5708  don't have a sense of humour, that's why! ;-). So you'd like to turn it on in your private,
5709  update-safe config, once and for all:
5710 </para>
5711
5712 <para>
5713 <screen>
5714 { +<link linkend="filter-fun">filter{fun}</link> }
5715 / # For ALL sites!</screen>
5716 </para>
5717
5718 <para>
5719  Note that the above is not really a good idea: There are exceptions
5720  to the filters in <filename>default.action</filename> for things that
5721  really shouldn't be filtered, like code on CVS->Web interfaces. Since
5722  <filename>user.action</filename> has the last word, these exceptions
5723  won't be valid for the <quote>fun</quote> filtering specified here.
5724 </para>
5725
5726 <para>
5727  Finally, you might think about how your favourite free websites are
5728  funded, and find that they rely on displaying banner advertisements
5729  to survive. So you might want to specifically allow banners for those
5730  sites that you feel provide value to you:
5731 </para>
5732
5733 <para>
5734 <screen>
5735 { allow-ads }
5736 .sourceforge.net
5737 .slashdot.org
5738 .osdn.net</screen>   
5739 </para>
5740
5741 <para>
5742  Note that <literal>allow-ads</literal> has been aliased to 
5743  <literal>-<link linkend="block">block</link></literal>
5744  <literal>-<link linkend="filter-banners-by-size">filter{banners-by-size}</link></literal>
5745  above.
5746 </para>
5747 </sect3>
5748 </sect2>
5749
5750 <!--  ~  End section  ~  -->
5751
5752 </sect1>
5753
5754 <!--  ~  End section  ~  -->
5755
5756 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
5757
5758 <sect1 id="filter-file">
5759 <title>The Filter File</title>
5760
5761 <para>
5762  All text substitutions that can be invoked through the
5763  <literal><link linkend="filter">filter</link></literal> action
5764  must first be defined in the filter file, which is typically
5765  called <filename>default.filter</filename> and which can be
5766  selected through the <literal>
5767  <link linkend="filterfile">filterfile</link></literal> config
5768  option.
5769 </para>
5770
5771 <para>
5772  Typical reasons for doing such substitutions are to eliminate
5773  common annoyances in HTML and JavaScript, such as pop-up windows,
5774  exit consoles, crippled windows without navigation tools, the
5775  infamous &lt;BLINK&gt; tag etc, to suppress images with certain
5776  width and height attributes (standard banner sizes or web-bugs),
5777  or just to have fun. The possibilities are endless.
5778 </para>
5779
5780 <para>
5781  Filtering works on any text-based document type, including plain
5782  text, HTML, JavaScript, CSS etc. (all <literal>text/*</literal>
5783  MIME types). Substitutions are made at the source level, so if
5784  you want to <quote>roll your own</quote> filters, you should be
5785  familiar with HTML syntax.
5786 </para>
5787
5788 <para>
5789  Just like the <link linkend="actions-file">actions files</link>, the
5790  filter file is organized in sections, which are called <emphasis>filters</emphasis>
5791  here. Each filter consists of a heading line, that starts with the
5792  <emphasis>keyword</emphasis> <literal>FILTER:</literal>, followed by
5793  the filter's <emphasis>name</emphasis>, and a short (one line) 
5794  <emphasis>description</emphasis> of what it does. Below that line
5795  come the <emphasis>jobs</emphasis>, i.e. lines that define the actual
5796  text substitutions. By convention, the name of a filter
5797  should describe what the filter <emphasis>eliminates</emphasis>. The
5798  comment is used in the <ulink url="http://config.privoxy.org/">web-based
5799  user interface</ulink>.
5800 </para>
5801
5802 <para>
5803  Once a filter called <replaceable>name</replaceable> has been defined
5804  in the filter file, it can be invoked by using an action of the form
5805  +<literal><link linkend="filter">filter</link>{<replaceable>name</replaceable>}</literal>
5806  in any <link linkend="actions-file">actions file</link>.
5807 </para>
5808  
5809 <para>
5810  A filter header line for a filter called <quote>foo</quote> could look
5811  like this:
5812 </para>
5813
5814 <para>
5815  <screen>FILTER: foo Replace all "foo" with "bar"</screen>
5816 </para>
5817
5818 <para>
5819  Below that line, and up to the next header line, come the jobs that
5820  define what text replacements the filter executes. They are specified
5821  in a syntax that imitates <ulink url="http://www.perl.org/">Perl</ulink>'s
5822  <literal>s///</literal> operator. If you are familiar with Perl, you
5823  will find this to be quite intuitive, and may want to look at the
5824  <ulink url="http://www.oesterhelt.org/pcrs/pcrs.1.html">PCRS man page</ulink>
5825  for the subtle differences to Perl behaviour. Most notably, the non-standard
5826  option letter <literal>U</literal> is supported, which turns the default
5827  to ungreedy matching.
5828 </para>
5829
5830 <para>
5831  If you are new to regular expressions, you might want to take a look at
5832  the <link linkend="regex">Appendix on regular expressions</link>, and
5833  see the <ulink url="http://perldoc.com/perl5.6.1/pod/perl.html">Perl
5834  manual</ulink> for
5835  <ulink url="http://perldoc.com/perl5.6.1/pod/perlop.html#s-PATTERN-REPLACEMENT-egimosx">the 
5836  <literal>s///</literal> operator's syntax</ulink> and <ulink
5837  url="http://perldoc.com/perl5.6.1/pod/perlre.html">Perl-style regular
5838  expressions</ulink> in general.
5839  The below examples might also help to get you started.
5840 </para>
5841
5842 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
5843
5844 <sect2><title>Filter File Tutorial</title>
5845 <para>
5846  Now, let's complete our <quote>foo</quote> filter. We have already defined
5847  the heading, but the jobs are still missing. Since all it does is to replace
5848  <quote>foo</quote> with <quote>bar</quote>, there is only one (trivial) job
5849  needed:
5850 </para>
5851
5852 <para>
5853  <screen>s/foo/bar/</screen>
5854 </para>
5855
5856 <para>
5857  But wait! Didn't the comment say that <emphasis>all</emphasis> occurrences
5858  of <quote>foo</quote> should be replaced? Our current job will only take
5859  care of the first <quote>foo</quote> on each page. For global substitution,
5860  we'll need to add the <literal>g</literal> option:
5861 </para>
5862
5863 <para>
5864  <screen>s/foo/bar/g</screen>
5865 </para>
5866
5867 <para>
5868  Our complete filter now looks like this:
5869 </para>
5870 <para>
5871  <screen>FILTER: foo Replace all "foo" with "bar"
5872 s/foo/bar/g</screen>
5873 </para>
5874
5875 <para>
5876  Let's look at some real filters for more interesting examples. Here you see
5877  a filter that protects against some common annoyances that arise from JavaScript
5878  abuse. Let's look at its jobs one after the other:
5879 </para>
5880
5881
5882 <para>
5883  <screen>
5884 FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse
5885
5886 # Get rid of JavaScript referrer tracking. Test page: http://www.randomoddness.com/untitled.htm
5887 #
5888 s|(&lt;script.*)document\.referrer(.*&lt;/script&gt;)|$1"Not Your Business!"$2|Usg</screen>
5889 </para>
5890
5891 <para>
5892  Following the header line and a comment, you see the job. Note that it uses
5893  <literal>|</literal> as the delimiter instead of <literal>/</literal>, because
5894  the pattern contains a forward slash, which would otherwise have to be escaped
5895  by a backslash (<literal>\</literal>).
5896 </para>
5897
5898 <para>
5899  Now, let's examine the pattern: it starts with the text <literal>&lt;script.*</literal>
5900  enclosed in parentheses. Since the dot matches any character, and <literal>*</literal>
5901  means: <quote>Match an arbitrary number of the element left of myself</quote>, this
5902  matches <quote>&lt;script</quote>, followed by <emphasis>any</emphasis> text, i.e.
5903  it matches the whole page, from the start of the first &lt;script&gt; tag.
5904 </para>
5905
5906 <para>
5907  That's more than we want, but the pattern continues: <literal>document\.referrer</literal>
5908  matches only the exact string <quote>document.referrer</quote>. The dot needed to
5909  be <emphasis>escaped</emphasis>, i.e. preceded by a backslash, to take away its
5910  special meaning as a joker, and make it just a regular dot. So far, the meaning is:
5911  Match from the start of the first &lt;script&gt; tag in a the page, up to, and including,
5912  the text <quote>document.referrer</quote>, if <emphasis>both</emphasis> are present
5913  in the page (and appear in that order).
5914 </para>
5915
5916 <para>
5917  But there's still more pattern to go. The next element, again enclosed in parentheses,
5918  is <literal>.*&lt;/script&gt;</literal>. You already know what <literal>.*</literal>
5919  means, so the whole pattern translates to: Match from the start of the first  &lt;script&gt;
5920  tag in a page to the end of the last &lt;script&gt; tag, provided that the text
5921  <quote>document.referrer</quote> appears somewhere in between.
5922 </para>
5923
5924 <para>
5925  This is still not the whole story, since we have ignored the options and the parentheses:
5926  The portions of the page matched by sub-patterns that are enclosed in parentheses, will be
5927  remembered and be available through the variables <literal>$1, $2, ...</literal> in
5928  the substitute. The <literal>U</literal> option switches to ungreedy matching, which means
5929  that the first <literal>.*</literal> in the pattern will only <quote>eat up</quote> all
5930  text in between <quote>&lt;script</quote> and the <emphasis>first</emphasis> occurrence
5931  of <quote>document.referrer</quote>, and that the second <literal>.*</literal> will
5932  only span the text up to the <emphasis>first</emphasis> <quote>&lt;/script&gt;</quote>
5933  tag. Furthermore, the <literal>s</literal> option says that the match may span
5934  multiple lines in the page, and the <literal>g</literal> option again means that the
5935  substitution is global.
5936 </para>
5937
5938 <para>
5939  So, to summarize, the pattern means: Match all scripts that contain the text
5940  <quote>document.referrer</quote>. Remember the parts of the script from
5941  (and including) the start tag up to (and excluding) the string
5942  <quote>document.referrer</quote> as <literal>$1</literal>, and the part following
5943  that string, up to and including the closing tag, as <literal>$2</literal>.
5944 </para>
5945
5946 <para>
5947  Now the pattern is deciphered, but wasn't this about substituting things? So
5948  lets look at the substitute: <literal>$1"Not Your Business!"$2</literal> is
5949  easy to read: The text remembered as <literal>$1</literal>, followed by 
5950  <literal>"Not Your Business!"</literal> (<emphasis>including</emphasis>
5951  the quotation marks!), followed by the text remembered as <literal>$2</literal>.
5952  This produces an exact copy of the original string, with the middle part
5953  (the <quote>document.referrer</quote>) replaced by <literal>"Not Your
5954  Business!"</literal>.
5955 </para>
5956
5957 <para>
5958  The whole job now reads: Replace <quote>document.referrer</quote> by
5959  <literal>"Not Your Business!"</literal> wherever it appears inside a
5960  &lt;script&gt tag. Note that this job won't break JavaScript syntax,
5961  since both the original and the replacement are syntactically valid
5962  string objects. The script just won't have access to the referrer
5963  information anymore.
5964 </para>
5965
5966 <para>
5967  We'll show you two other jobs from the JavaScript taming department, but
5968  this time only point out the constructs of special interest:
5969 </para>
5970
5971 <para>
5972  <screen>
5973 # The status bar is for displaying link targets, not pointless blahblah
5974 #
5975 s/window\.status\s*=\s*['"].*?['"]/dUmMy=1/ig</screen>
5976 </para>
5977
5978 <para>
5979  <literal>\s</literal> stands for whitespace characters (space, tab, newline,
5980  carriage return, form feed), so that <literal>\s*</literal> means: <quote>zero
5981  or more whitespace</quote>. The <literal>?</literal> in <literal>.*?</literal>
5982  makes this matching of arbitrary text ungreedy. (Note that the <literal>U</literal>
5983  option is not set). The <literal>['"]</literal> construct means: <quote>a single
5984  <emphasis>or</emphasis> a double quote</quote>.
5985 </para>
5986
5987 <para>
5988  So what does this job do? It replaces assignments of single- or double-quoted
5989  strings to the <quote>window.status</quote> object with a dummy assignment
5990  (using a variable name that is hopefully odd enough not to conflict with
5991  real variables in scripts). Thus, it catches many cases where e.g. pointless
5992  descriptions are displayed in the status bar instead of the link target when
5993  you move your mouse over links.
5994 </para>
5995
5996 <para>
5997  <screen>
5998 # Kill OnUnload popups. Yummy. Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
5999 #
6000 s/(&lt;body .*)onunload(.*&gt;)/$1never$2/iU</screen>
6001 </para>
6002
6003 <para>
6004  Including the
6005  <ulink url="http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings-htmlevents">OnUnload
6006  event binding</ulink> in the HTML DOM was a <emphasis>CRIME</emphasis>.
6007  When I close a browser window, I want it to close and die. Basta.
6008  This job replaces the <quote>onunload</quote> attribute in
6009  <quote>&lt;body&gt</quote> tags with the dummy word <literal>never</literal>.
6010  Note that the <literal>i</literal> option makes the pattern matching
6011  case-insensitive.
6012 </para>
6013
6014 <para>
6015  The last example is from the fun department:
6016 </para>
6017
6018 <para>
6019  <screen>
6020 FILTER: fun Fun text replacements
6021
6022 # Spice the daily news:
6023 #
6024 s/microsoft(?!\.com)/MicroSuck/ig</screen>
6025 </para>
6026
6027 <para>
6028  Note the <literal>(?!\.com)</literal> part (a so-called negative lookahead)
6029  in the job's pattern, which means: Don't match, if the string 
6030  <quote>.com</quote> appears directly following <quote>microsoft</quote>
6031  in the page. This prevents links to microsoft.com from being messed, while
6032  still replacing the word everywhere else.
6033 </para>
6034
6035 <para>
6036  <screen>
6037 # Buzzword Bingo (example for extended regex syntax)
6038 #
6039 s* industry[ -]leading \
6040 |  cutting[ -]edge \
6041 |  award[ -]winning # Comments are OK, too! \
6042 |  high[ -]performance \
6043 |  solutions[ -]based \
6044 |  unmatched \
6045 |  unparalleled \
6046 |  unrivalled \
6047 *&lt;font color="red"&gt;&lt;b&gt;BINGO!&lt;/b&gt;&lt;/font&gt; \
6048 *igx</screen>
6049 </para>
6050
6051 <para>
6052  The <literal>x</literal> option in this job turns on extended syntax, and allows for
6053  e.g. the liberal use of (non-interpreted!) whitespace for nicer formatting.
6054 </para>
6055
6056 <para>
6057  You get the idea?
6058 </para>
6059 </sect2>
6060 </sect1>
6061
6062 <!--  ~  End section  ~  -->
6063
6064
6065
6066 <!--   ~~~~~       New section      ~~~~~     -->
6067
6068 <sect1 id="templates">
6069 <title>Templates</title>
6070 <para>
6071  All <application>Privoxy</application> built-in pages, i.e. error pages such as the 
6072  <ulink url="http://show-the-404-error.page"><quote>404 - No Such Domain</quote>
6073  error page</ulink>, the <ulink
6074  url="http://ads.bannerserver.example.com/nasty-ads/sponsor.html"><quote>BLOCKED</quote>
6075  page</ulink>
6076  and all pages of its <ulink url="http://config.privoxy.org/">web-based
6077  user interface</ulink>, are generated from <emphasis>templates</emphasis>. 
6078  (<application>Privoxy</application> must be running for the above links to work as
6079  intended)
6080 </para>
6081
6082 <para>
6083  These templates are stored in a subdirectory of the <link linkend="confdir">configuration
6084  directory</link> called <filename>templates</filename>. On unixish platforms,
6085  this is typically
6086  <ulink url="file:///etc/privoxy/templates/"><filename>/etc/privoxy/templates/</filename></ulink>.
6087 </para>
6088
6089 <para>
6090  The templates are basically normal HTML files, but with place-holders (called symbols
6091  or exports), which <application>Privoxy</application> fills at run time. You can
6092  edit the templates with a normal text editor, should you want to customize them.
6093  (<emphasis>Not recommended for the casual user</emphasis>). Note that
6094  just like in configuration files, lines starting with <literal>#</literal> are
6095  ignored when the templates are filled in.
6096 </para>
6097
6098 <para>
6099  The place-holders are of the form <literal>@name@</literal>, and you will
6100  find a list of available symbols, which vary from template to template,
6101  in the comments at the start of each file. Note that these comments are not
6102  always accurate, and that it's probably best to look at the existing HTML
6103  code to find out which symbols are supported and what they are filled in with.
6104 </para>
6105
6106 <para>
6107  A special application of this substitution mechanism is to make whole
6108  blocks of HTML code disappear when a specific symbol is set. We use this
6109  for many purposes, one of them being to include the beta warning in all
6110  our user interface (CGI) pages when <application>Privoxy</application>
6111  in in an alpha or beta development stage:
6112 </para>
6113
6114 <para>
6115  <screen>
6116 &lt;!-- @if-unstable-start --&gt;
6117
6118   ... beta warning HTML code goes here ...
6119
6120 &lt;!-- if-unstable-end@ --&gt;</screen>
6121 </para>
6122
6123 <para>
6124  If the "unstable" symbol is set, everything in between and including
6125  <literal>@if-unstable-start</literal> and <literal>if-unstable-end@</literal>
6126  will disappear, leaving nothing but an empty comment:
6127 </para>
6128
6129 <para>
6130  <screen>&lt;!--  --&gt;</screen>
6131 </para>
6132
6133 <para>
6134  There's also an if-then-else construct and an <literal>#include</literal>
6135  mechanism, but you'll sure find out if you are inclined to edit the
6136  templates ;-)
6137 </para>
6138
6139 <para>
6140  All templates refer to a style located at
6141  <ulink url="http://config.privoxy.org/send-stylesheet"><literal>http://config.privoxy.org/send-stylesheet</literal></ulink>.
6142  This is, of course, locally served by <application>Privoxy</application>
6143  and the source for it can be found and edited in the
6144  <filename>cgi-style.css</filename> template.
6145 </para>
6146
6147 </sect1>
6148
6149 <!--  ~  End section  ~  -->
6150
6151
6152
6153 <!--   ~~~~~       New section      ~~~~~     -->
6154
6155 <sect1 id="contact"><title>Contacting the Developers, Bug Reporting and Feature
6156 Requests</title>
6157
6158 <!-- Include contacting.sgml boilerplate: -->
6159  &contacting;
6160 <!-- end boilerplate -->
6161
6162 </sect1>
6163
6164 <!--  ~  End section  ~  -->
6165
6166
6167 <!--   ~~~~~       New section      ~~~~~     -->
6168 <sect1 id="copyright"><title><application>Privoxy</application> Copyright, License and History</title>
6169
6170 <!-- Include copyright.sgml: -->
6171  &copyright;
6172 <!-- end copyright -->
6173
6174 <!--   ~~~~~       New section      ~~~~~     -->
6175 <sect2><title>License</title>
6176 <!-- Include copyright.sgml: -->
6177  &license;
6178 <!-- end copyright -->
6179 </sect2>
6180 <!--  ~  End section  ~  -->
6181
6182
6183 <!--   ~~~~~       New section      ~~~~~     -->
6184
6185 <sect2 id="history"><title>History</title>
6186 <!-- Include history.sgml: -->
6187  &history;
6188 <!-- end history -->
6189 </sect2>
6190
6191 <sect2 id="authors"><title>Authors</title>
6192 <!-- Include p-authors.sgml: -->
6193  &p-authors;
6194 <!-- end authors -->
6195 </sect2>
6196
6197 </sect1>
6198
6199 <!--  ~  End section  ~  -->
6200
6201
6202 <!--   ~~~~~       New section      ~~~~~     -->
6203 <sect1 id="seealso"><title>See Also</title>
6204 <!-- Include seealso.sgml: -->
6205  &seealso;
6206 <!-- end seealso -->
6207 </sect1>
6208
6209
6210
6211 <!--   ~~~~~       New section      ~~~~~     -->
6212 <sect1 id="appendix"><title>Appendix</title>
6213
6214
6215 <!--   ~~~~~       New section      ~~~~~     -->
6216 <sect2 id="regex">
6217 <title>Regular Expressions</title>
6218 <para>
6219  <application>Privoxy</application> uses Perl-style <quote>regular
6220  expressions</quote> in its <link linkend="actions-file">actions
6221  files</link> and <link linkend="filter-file">filter file</link>,
6222  through the <ulink url="http://www.pcre.org/">PCRE</ulink> and
6223  <ulink url="http://www.oesterhelt.org/pcrs/">PCRS</ulink> libraries.
6224 </para>
6225
6226 <para>
6227  If you are reading this, you probably don't understand what <quote>regular
6228  expressions</quote> are, or what they can do. So this will be a very brief
6229  introduction only. A full explanation would require a <ulink
6230  url="http://www.oreilly.com/catalog/regex/">book</ulink> ;-)
6231 </para>
6232
6233 <para>
6234  Regular expressions provide a language to describe patterns that can be
6235  run against strings of characters (letter, numbers, etc), to see if they
6236  match the string or not. The  patterns are themselves (sometimes complex)
6237  strings of literal characters, combined with  wild-cards, and other special
6238  characters, called meta-characters. The <quote>meta-characters</quote> have
6239  special meanings and are used to build complex patterns to be matched against.
6240  Perl Compatible Regular Expressions are an especially convenient
6241  <quote>dialect</quote> of the regular expression language.
6242 </para>
6243
6244 <para>
6245  To make a simple analogy, we do something similar when we use wild-card
6246  characters when listing files with the <command>dir</command> command in DOS. 
6247  <literal>*.*</literal> matches all filenames. The <quote>special</quote>
6248  character here is the asterisk which matches any and all characters. We can be
6249  more specific and use <literal>?</literal> to match just individual
6250  characters. So <quote>dir file?.text</quote> would match
6251  <quote>file1.txt</quote>, <quote>file2.txt</quote>, etc. We are pattern
6252  matching, using a similar technique to <quote>regular expressions</quote>!
6253 </para>
6254
6255 <para>
6256  Regular expressions do essentially the same thing, but are much, much more
6257  powerful. There are many more <quote>special characters</quote> and ways of 
6258  building complex patterns however. Let's look at a few of the common ones,
6259  and then some examples:
6260 </para>
6261
6262 <para><simplelist>
6263  <member>
6264   <emphasis>.</emphasis> - Matches any single character, e.g. <quote>a</quote>,
6265   <quote>A</quote>, <quote>4</quote>, <quote>:</quote>, or <quote>@</quote>.
6266  </member>
6267 </simplelist></para>
6268
6269 <para><simplelist>
6270  <member>
6271   <emphasis>?</emphasis> - The preceding character or expression is matched ZERO or ONE
6272   times. Either/or.
6273  </member>
6274 </simplelist></para>
6275
6276 <para><simplelist>
6277  <member>
6278   <emphasis>+</emphasis> - The preceding character or expression is matched ONE or MORE
6279   times.
6280  </member>
6281 </simplelist></para>
6282
6283 <para><simplelist>
6284  <member>
6285   <emphasis>*</emphasis> - The preceding character or expression is matched ZERO or MORE
6286   times.
6287  </member>
6288 </simplelist></para>
6289
6290 <para><simplelist>
6291  <member>
6292   <emphasis>\</emphasis> - The <quote>escape</quote> character denotes that
6293   the following character should be taken literally. This is used where one of the 
6294   special characters (e.g. <quote>.</quote>) needs to be taken literally and
6295   not as a special meta-character. Example: <quote>example\.com</quote>, makes 
6296   sure the period is recognized only as a period (and not expanded to its 
6297   meta-character meaning of any single character).
6298  </member>
6299 </simplelist></para>
6300
6301 <para><simplelist>
6302  <member>
6303   <emphasis>[]</emphasis> - Characters enclosed in brackets will be matched if
6304   any of the enclosed characters are encountered. For instance, <quote>[0-9]</quote>
6305   matches any numeric digit (zero through nine). As an example, we can combine 
6306   this with <quote>+</quote> to match any digit one of more times: <quote>[0-9]+</quote>.
6307  </member>
6308 </simplelist></para>
6309
6310 <para><simplelist>
6311  <member>
6312   <emphasis>()</emphasis> - parentheses are used to group a sub-expression,
6313   or multiple sub-expressions.
6314  </member>
6315 </simplelist></para>
6316
6317 <para><simplelist>
6318  <member>
6319   <emphasis>|</emphasis> - The <quote>bar</quote> character works like an
6320   <quote>or</quote> conditional statement. A match is successful if the
6321   sub-expression on either side of <quote>|</quote> matches. As an example:
6322   <quote>/(this|that) example/</quote> uses grouping and the bar character 
6323   and would match either <quote>this example</quote> or <quote>that
6324   example</quote>, and nothing else.
6325  </member>
6326 </simplelist></para>
6327
6328 <para>
6329  These are just some of the ones you are likely to use when matching URLs with 
6330  <application>Privoxy</application>, and is a long way from a definitive
6331  list. This is enough to get us started with a few simple examples which may
6332  be more illuminating:
6333 </para>
6334
6335 <para>
6336  <emphasis><literal>/.*/banners/.*</literal></emphasis> - A  simple example
6337  that uses the common combination of <quote>.</quote> and <quote>*</quote> to 
6338  denote any character, zero or more times. In other words, any string at all.
6339  So we start with a literal forward slash, then our regular expression pattern 
6340  (<quote>.*</quote>) another literal forward slash, the string
6341  <quote>banners</quote>, another forward slash, and lastly another
6342  <quote>.*</quote>. We are building 
6343  a directory path here. This will match any file with the path that has a
6344  directory named <quote>banners</quote> in it. The <quote>.*</quote> matches
6345  any characters, and this could conceivably be more forward slashes, so it
6346  might expand into a much longer looking path. For example, this could match:
6347  <quote>/eye/hate/spammers/banners/annoy_me_please.gif</quote>, or just
6348  <quote>/banners/annoying.html</quote>, or almost an infinite number of other
6349  possible combinations, just so it has <quote>banners</quote> in the path
6350  somewhere.
6351 </para>
6352
6353 <para>
6354  A now something a little more complex:
6355 </para>
6356
6357 <para>
6358  <emphasis><literal>/.*/adv((er)?ts?|ertis(ing|ements?))?/</literal></emphasis> - 
6359  We have several literal forward slashes again (<quote>/</quote>), so we are
6360  building another expression that is a file path statement. We have another 
6361  <quote>.*</quote>, so we are matching against any conceivable sub-path, just so
6362  it matches our expression. The only true literal that <emphasis>must
6363  match</emphasis> our pattern is <application>adv</application>, together with
6364  the forward slashes. What comes after the <quote>adv</quote> string is the
6365  interesting part. 
6366 </para>
6367
6368 <para>
6369  Remember the <quote>?</quote> means the preceding expression (either a
6370  literal character or anything grouped with <quote>(...)</quote> in this case)
6371  can exist or not, since this means either zero or one match. So
6372  <quote>((er)?ts?|ertis(ing|ements?))</quote> is optional, as are the
6373  individual sub-expressions: <quote>(er)</quote>,
6374  <quote>(ing|ements?)</quote>, and the <quote>s</quote>. The <quote>|</quote>
6375  means <quote>or</quote>. We have two of those. For instance, 
6376  <quote>(ing|ements?)</quote>, can expand to match either <quote>ing</quote> 
6377  <emphasis>OR</emphasis> <quote>ements?</quote>. What is being done here, is an
6378  attempt at matching as many variations of <quote>advertisement</quote>, and 
6379  similar, as possible. So this would expand to match just <quote>adv</quote>,
6380  or <quote>advert</quote>, or <quote>adverts</quote>, or
6381  <quote>advertising</quote>, or <quote>advertisement</quote>, or
6382  <quote>advertisements</quote>. You get the idea. But it would not match 
6383  <quote>advertizements</quote> (with a <quote>z</quote>). We could fix that by
6384  changing our regular expression to: 
6385  <quote>/.*/adv((er)?ts?|erti(s|z)(ing|ements?))?/</quote>, which would then match
6386  either spelling.
6387 </para>
6388
6389 <para>
6390  <emphasis><literal>/.*/advert[0-9]+\.(gif|jpe?g)</literal></emphasis> - Again 
6391  another path statement with forward slashes. Anything in the square brackets 
6392  <quote>[]</quote> can be matched. This is using <quote>0-9</quote> as a
6393  shorthand expression to mean any digit one through nine. It is the same as
6394  saying <quote>0123456789</quote>. So any digit matches. The <quote>+</quote>
6395  means one or more of the preceding expression must be included. The preceding 
6396  expression here is what is in the square brackets -- in this case, any digit 
6397  one through nine. Then, at the end, we have a grouping: <quote>(gif|jpe?g)</quote>. 
6398  This includes a <quote>|</quote>, so this needs to match the expression on
6399  either side of that bar character also. A simple <quote>gif</quote> on one side, and the other
6400  side will in turn match either <quote>jpeg</quote> or <quote>jpg</quote>,
6401  since the <quote>?</quote> means the letter <quote>e</quote> is optional and
6402  can be matched once or not at all. So we are building an expression here to
6403  match image GIF or JPEG type image file. It must include the literal
6404  string <quote>advert</quote>, then one or more digits, and a <quote>.</quote>
6405  (which is now a literal, and not a special character, since it is escaped
6406  with <quote>\</quote>), and lastly either <quote>gif</quote>, or
6407  <quote>jpeg</quote>, or <quote>jpg</quote>. Some possible matches would
6408  include: <quote>//advert1.jpg</quote>,
6409  <quote>/nasty/ads/advert1234.gif</quote>,
6410  <quote>/banners/from/hell/advert99.jpg</quote>. It would not match
6411  <quote>advert1.gif</quote> (no leading slash), or
6412  <quote>/adverts232.jpg</quote> (the expression does not include an
6413  <quote>s</quote>), or <quote>/advert1.jsp</quote> (<quote>jsp</quote> is not
6414  in the expression anywhere).
6415 </para>
6416
6417 <para>
6418  We are barely scratching the surface of regular expressions here so that you
6419  can understand the default <application>Privoxy</application>
6420  configuration files, and maybe use this knowledge to customize your own
6421  installation. There is much, much more that can be done with regular
6422  expressions. Now that you know enough to get started, you can learn more on
6423  your own :/
6424 </para>
6425
6426 <para>
6427  More reading on Perl Compatible Regular expressions: 
6428  <ulink url="http://www.perldoc.com/perl5.6/pod/perlre.html">http://www.perldoc.com/perl5.6/pod/perlre.html</ulink>
6429 </para>
6430
6431 <para>
6432  For information on regular expression based substititions and their applications
6433  in filters, please see the <link linkend="filter-file">filter file tutorial</link>
6434  in this manual.
6435 </para>
6436 </sect2>
6437
6438 <!--  ~  End section  ~  -->
6439
6440
6441 <!--   ~~~~~       New section      ~~~~~     -->
6442 <sect2>
6443 <title><application>Privoxy</application>'s Internal Pages</title>
6444
6445 <para>
6446  Since <application>Privoxy</application> proxies each requested 
6447  web page, it is easy for <application>Privoxy</application> to 
6448  trap certain special URLs. In this way, we can talk directly to
6449  <application>Privoxy</application>, and see how it is 
6450  configured, see how our rules are being applied, change these 
6451  rules and other configuration options, and even turn
6452  <application>Privoxy's</application> filtering off, all with 
6453  a web browser.
6454
6455 </para>
6456
6457 <para>
6458  The URLs listed below are the special ones that allow direct access 
6459  to <application>Privoxy</application>. Of course,
6460  <application>Privoxy</application> must be running to access these. If 
6461  not, you will get a friendly error message. Internet access is not 
6462  necessary either.
6463 </para>
6464
6465 <para>
6466  <itemizedlist>
6467
6468  <listitem>
6469   <para>  
6470    Privoxy main page: 
6471   </para>
6472   <blockquote>
6473    <para> 
6474      <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
6475    </para>
6476   </blockquote>
6477   <para>
6478    There is a shortcut: <ulink url="http://p.p/">http://p.p/</ulink> (But it
6479    doesn't provide a fallback to a real page, in case the request is not
6480    sent through <application>Privoxy</application>)
6481   </para>
6482  </listitem>
6483
6484  <listitem>
6485   <para>  
6486     Show information about the current configuration, including viewing and 
6487     editing of actions files:
6488   </para>
6489    <blockquote>
6490    <para> 
6491     <ulink url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
6492    </para>
6493   </blockquote>
6494  </listitem>
6495  
6496  <listitem>
6497   <para>  
6498     Show the source code version numbers:
6499   </para>
6500   <blockquote>
6501    <para> 
6502     <ulink url="http://config.privoxy.org/show-version">http://config.privoxy.org/show-version</ulink>
6503    </para>
6504   </blockquote>
6505  </listitem>
6506  
6507  <listitem>
6508   <para>  
6509    Show the browser's request headers:
6510   </para>
6511   <blockquote>
6512    <para> 
6513     <ulink url="http://config.privoxy.org/show-request">http://config.privoxy.org/show-request</ulink>
6514    </para>
6515   </blockquote>
6516  </listitem>
6517  
6518  <listitem>
6519   <para>  
6520    Show which actions apply to a URL and why:
6521   </para>
6522    <blockquote>
6523    <para> 
6524     <ulink url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>
6525    </para>
6526   </blockquote>
6527  </listitem>
6528  
6529  <listitem>
6530   <para>  
6531    Toggle Privoxy on or off. In this case, <quote>Privoxy</quote> continues 
6532    to run, but only as a pass-through proxy, with no actions taking place:
6533   </para>
6534    <blockquote>
6535    <para> 
6536     <ulink url="http://config.privoxy.org/toggle">http://config.privoxy.org/toggle</ulink>
6537    </para>
6538   </blockquote>
6539   <para>
6540    Short cuts. Turn off, then on: 
6541   </para>
6542    <blockquote>
6543    <para> 
6544      <ulink url="http://config.privoxy.org/toggle?set=disable">http://config.privoxy.org/toggle?set=disable</ulink>
6545    </para>
6546   </blockquote>
6547    <blockquote>
6548    <para> 
6549      <ulink url="http://config.privoxy.org/toggle?set=enable">http://config.privoxy.org/toggle?set=enable</ulink>
6550    </para>
6551   </blockquote>
6552  </listitem>
6553  
6554  </itemizedlist>
6555 </para>
6556
6557 <para>
6558  These may be bookmarked for quick reference. See next.
6559
6560 </para>
6561
6562 <sect3 id="bookmarklets">
6563 <title>Bookmarklets</title>
6564 <para>
6565  Below are some <quote>bookmarklets</quote> to allow you to easily access a
6566  <quote>mini</quote> version of some of <application>Privoxy's</application>
6567  special pages. They are designed for MS Internet Explorer, but should work
6568  equally well in Netscape, Mozilla, and other browsers which support
6569  JavaScript. They are designed to run directly from your bookmarks - not by
6570  clicking the links below (although that should work for testing).
6571 </para>
6572 <para>
6573  To save them, right-click the link and choose <quote>Add to Favorites</quote>
6574  (IE) or <quote>Add Bookmark</quote> (Netscape). You will get a warning that
6575  the bookmark <quote>may not be safe</quote> - just click OK. Then you can run the
6576  Bookmarklet directly from your favorites/bookmarks. For even faster access,
6577  you can put them on the <quote>Links</quote> bar (IE) or the <quote>Personal
6578  Toolbar</quote> (Netscape), and run them with a single click. 
6579 </para>
6580
6581 <para>
6582  <itemizedlist>
6583
6584   <listitem>
6585    <para>
6586     <ulink
6587     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());">Privoxy - Enable</ulink>
6588    </para>
6589   </listitem> 
6590
6591   <listitem>
6592    <para>
6593     <ulink
6594     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());">Privoxy - Disable</ulink>
6595    </para>
6596   </listitem> 
6597
6598   <listitem>
6599    <para>
6600     <ulink
6601     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());">Privoxy - Toggle Privoxy</ulink> (Toggles between enabled and disabled)
6602    </para>
6603   </listitem> 
6604
6605   <listitem>
6606    <para>
6607     <ulink
6608     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());">Privoxy- View Status</ulink>
6609    </para>
6610   </listitem> 
6611
6612   <listitem>
6613    <para>
6614     <ulink url="javascript:w=Math.floor(screen.width/2);h=Math.floor(screen.height*0.9);void(window.open('http://www.privoxy.org/actions/index.php?url='+escape(location.href),'Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">Privoxy - Submit Actions File Feedback</ulink>
6615    </para>
6616   </listitem> 
6617   <listitem>
6618    <para>
6619     <ulink url="javascript:void(window.open('http://config.privoxy.org/show-url-info?url='+escape(location.href),'Why').focus());">Privoxy - Why?</ulink>
6620    </para>
6621   </listitem> 
6622  </itemizedlist>
6623 </para>
6624
6625 <para>
6626  Credit: The site which gave us the general idea for these bookmarklets is
6627  <ulink url="http://www.bookmarklets.com">www.bookmarklets.com</ulink>. They
6628  have more information about bookmarklets. 
6629 </para>
6630
6631
6632 </sect3>
6633
6634 </sect2>
6635
6636
6637 <!--   ~~~~~       New section      ~~~~~     -->
6638 <sect2 id="chain">
6639 <title>Chain of Events</title>
6640 <para>
6641  Let's take a quick look at the basic sequence of events when a web page is 
6642  requested by your browser and <application>Privoxy</application> is on duty:
6643 </para>
6644
6645 <para>
6646  <itemizedlist>
6647  <listitem>
6648   <para>
6649    First, your web browser requests a web page. The browser knows to send 
6650    the request to <application>Privoxy</application>, which will in turn, 
6651    relay the request to the remote web server after passing the following 
6652    tests: 
6653   </para>
6654  </listitem> 
6655  <listitem>
6656   <para>
6657    <application>Privoxy</application> traps any request for its own internal CGI 
6658    pages (e.g http://p.p/) and sends the CGI page back to the browser.
6659   </para>
6660  </listitem> 
6661  <listitem>
6662   <para>
6663    Next, <application>Privoxy</application> checks to see if the URL 
6664    matches any <link
6665    linkend="BLOCK"><quote>+block</quote></link> patterns. If
6666    so, the URL is then blocked, and the remote web server will not be contacted.
6667    <link linkend="HANDLE-AS-IMAGE"><quote>+handle-as-image</quote></link> 
6668    is then checked and if it does not match, an 
6669    HTML <quote>BLOCKED</quote> page is sent back. Otherwise, if it does match,
6670    an image is returned. The type of image depends on the setting of <link
6671    linkend="SET-IMAGE-BLOCKER"><quote>+set-image-blocker</quote></link>
6672    (blank, checkerboard pattern, or an HTTP redirect to an image elsewhere).
6673   </para>
6674  </listitem> 
6675  <listitem>
6676   <para>
6677    Untrusted URLs are blocked. If URLs are being added to the
6678    <filename>trust</filename> file, then that is done.
6679   </para>
6680  </listitem> 
6681  <listitem>
6682   <para>
6683    If the URL pattern matches the <link
6684    linkend="FAST-REDIRECTS"><quote>+fast-redirects</quote></link> action,
6685    it is then processed. Unwanted parts of the requested URL are stripped.
6686   </para>
6687  </listitem> 
6688  <listitem>
6689   <para>
6690    Now the rest of the client browser's request headers are processed. If any
6691    of these match any of the relevant actions (e.g. <link
6692    linkend="HIDE-USER-AGENT"><quote>+hide-user-agent</quote></link>,
6693    etc.), headers are suppressed or forged as determined by these actions and
6694    their parameters.
6695   </para>
6696  </listitem> 
6697  <listitem>
6698   <para>
6699    Now the web server starts sending its response back (i.e. typically a web page and related 
6700    data).
6701   </para>
6702  </listitem> 
6703  <listitem>
6704   <para>
6705    First, the server headers are read and processed to determine, among other
6706    things, the MIME type (document type) and encoding. The headers are then
6707    filtered as deterimed by the 
6708    <link linkend="CRUNCH-INCOMING-COOKIES"><quote>+crunch-incoming-cookies</quote></link>,
6709    <link linkend="SESSION-COOKIES-ONLY"><quote>+session-cookies-only</quote></link>,
6710    and <link linkend="DOWNGRADE-HTTP-VERSION"><quote>+downgrade-http-version</quote></link>
6711    actions.
6712   </para>
6713  </listitem> 
6714  <listitem>
6715   <para>
6716    If the <link linkend="KILL-POPUPS"><quote>+kill-popups</quote></link>
6717    action applies, and it is an HTML or JavaScript document, the popup-code in the
6718    response is filtered on-the-fly as it is received.
6719   </para>
6720  </listitem> 
6721  <listitem>
6722   <para>
6723    If a <link linkend="FILTER"><quote>+filter</quote></link>
6724    or <link
6725    linkend="DEANIMATE-GIFS"><quote>+deanimate-gifs</quote></link>
6726    action applies (and the document type fits the action), the rest of the page is
6727    read into memory (up to a configurable limit). Then the filter rules (from
6728    <filename>default.filter</filename>) are processed against the buffered
6729    content. Filters are applied in the order they are specified in the
6730    <filename>default.filter</filename> file. Animated GIFs, if present, are
6731    reduced to either the first or last frame, depending on the action
6732    setting.The entire page, which is now filtered, is then sent by
6733    <application>Privoxy</application> back to your browser. 
6734   </para>
6735   <para>
6736    If neither <link linkend="FILTER"><quote>+filter</quote></link>
6737    or <link
6738    linkend="DEANIMATE-GIFS"><quote>+deanimate-gifs</quote></link>
6739    matches, then <application>Privoxy</application> passes the raw data through 
6740    to the client browser as it becomes available.
6741   </para>
6742  </listitem> 
6743  <listitem>
6744   <para>
6745    As the browser receives the now (probably filtered) page content, it 
6746    reads and then requests any URLs that may be embedded within the page
6747    source, e.g. ad images, stylesheets, JavaScript, other HTML documents (e.g.
6748    frames), sounds, etc. For each of these objects, the browser issues a new
6749    request. And each such request is in turn processed as above. Note that a
6750    complex web page may have many such embedded URLs.
6751   </para>
6752  </listitem> 
6753  
6754  </itemizedlist>
6755 </para>
6756
6757 </sect2>
6758
6759
6760 <!--   ~~~~~       New section      ~~~~~     -->
6761 <sect2 id="actionsanat">
6762 <title>Anatomy of an Action</title>
6763
6764 <para>
6765  The way <application>Privoxy</application> applies 
6766  <link linkend="ACTIONS">actions</link> and <link linkend="FILTER">filters</link>
6767  to any given URL can be complex, and not always so
6768  easy to understand what is happening. And sometimes we need to be able to
6769  <emphasis>see</emphasis> just what <application>Privoxy</application> is
6770  doing. Especially, if something <application>Privoxy</application> is doing
6771  is causing us a problem inadvertently. It can be a little daunting to look at
6772  the actions and filters files themselves, since they tend to be filled with
6773  <link linkend="regex">regular expressions</link> whose consequences are not
6774  always so obvious. 
6775 </para>
6776
6777 <para>
6778  One quick test to see if <application>Privoxy</application> is causing a problem 
6779  or not, is to disable it temporarily. This should be the first troubleshooting 
6780  step. See <link linkend="bookmarklets">the Bookmarklets</link> section on a quick 
6781  and easy way to do this (be sure to flush caches afterward!).
6782 </para>
6783
6784 <para>
6785  <application>Privoxy</application> also provides the 
6786  <ulink url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>
6787  page that can show us very specifically how <application>actions</application>
6788  are being applied to any given URL. This is a big help for troubleshooting.
6789 </para>
6790
6791 <para>
6792  First, enter one URL (or partial URL) at the prompt, and then
6793  <application>Privoxy</application> will tell us 
6794  how the current configuration will handle it. This will not
6795  help with filtering effects (i.e. the <link
6796  linkend="FILTER"><quote>+filter</quote></link> action) from
6797  the <filename>default.filter</filename> file since this is handled very
6798  differently and not so easy to trap! It also will not tell you about any other
6799  URLs that may be embedded within the URL you are testing. For instance, images
6800  such as ads are expressed as URLs within the raw page source of HTML pages. So
6801  you will only get info for the actual URL that is pasted into the prompt area
6802  -- not any sub-URLs. If you want to know about embedded URLs like ads, you
6803  will have to dig those out of the HTML source. Use your browser's <quote>View
6804  Page Source</quote> option for this. Or right click on the ad, and grab the
6805  URL.
6806 </para>
6807
6808 <para>
6809  Let's try an example, <ulink url="http://google.com">google.com</ulink>, 
6810  and look at it one section at a time:
6811 </para>
6812
6813 <para>
6814  <screen>
6815  Matches for http://google.com:
6816
6817  In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
6818
6819 {-add-header 
6820  -block 
6821  -crunch-outgoing-cookies 
6822  -crunch-incoming-cookies 
6823  +deanimate-gifs{last} 
6824  -downgrade-http-version 
6825  +fast-redirects 
6826  -filter{popups} 
6827  -filter{fun} 
6828  -filter{shockwave-flash} 
6829  -filter{crude-parental} 
6830  +filter{html-annoyances} 
6831  +filter{js-annoyances} 
6832  +filter{content-cookies} 
6833  +filter{webbugs} 
6834  +filter{refresh-tags} 
6835  +filter{nimda} 
6836  +filter{banners-by-size} 
6837  +hide-forwarded-for-headers 
6838  +hide-from-header{block} 
6839  +hide-referer{forge} 
6840  -hide-user-agent 
6841  -handle-as-image 
6842  -kill-popups 
6843  -limit-connect 
6844  +prevent-compression 
6845  -send-vanilla-wafer 
6846  -send-wafer 
6847  +session-cookies-only 
6848  +set-image-blocker{pattern} }
6849 /
6850
6851  { -session-cookies-only }
6852  .google.com
6853
6854  { -fast-redirects }
6855  .google.com
6856
6857 In file: user.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
6858 (no matches in this file)  
6859 </screen>
6860 </para>
6861
6862 <para>
6863  This tells us how we have defined our 
6864  <link linkend="ACTIONS"><quote>actions</quote></link>, and
6865  which ones match for our example, <quote>google.com</quote>. The first listing
6866  is any matches for the <filename>standard.action</filename> file. No hits at
6867  all here on <quote>standard</quote>. Then next is <quote>default</quote>, or
6868  our <filename>default.action</filename> file. The large, multi-line listing,
6869  is how the actions are set to match for all URLs, i.e. our default settings.
6870  If you look at your <quote>actions</quote> file, this would be the section
6871  just below the <quote>aliases</quote> section near the top. This will apply to
6872  all URLs as signified by the single forward slash at the end of the listing
6873  -- <quote>/</quote>.
6874 </para>
6875
6876 <para>
6877  But we can define additional actions that would be exceptions to these general
6878  rules, and then list specific URLs (or patterns) that these exceptions would
6879  apply to. Last match wins. Just below this then are two explicit matches for
6880  <quote>.google.com</quote>. The first is negating our previous cookie setting, 
6881  which was for <link
6882  linkend="SESSION-COOKIES-ONLY"><quote>+session-cookies-only</quote></link>
6883  (i.e. not persistent). So we will allow persistent cookies for google. The
6884  second turns <emphasis>off</emphasis> any 
6885  <link
6886  linkend="FAST-REDIRECTS"><quote>+fast-redirects</quote></link>
6887  action, allowing this to take place unmolested. Note that there is a leading
6888  dot here -- <quote>.google.com</quote>. This will match any hosts and
6889  sub-domains, in the google.com domain also, such as
6890  <quote>www.google.com</quote>. So, apparently, we have these two actions
6891  defined somewhere in the lower part of our <filename>default.action</filename>
6892  file, and <quote>google.com</quote> is referenced somewhere in these latter
6893  sections.
6894 </para>
6895
6896 <para>
6897  Then, for our <filename>user.action</filename> file, we again have no hits.
6898 </para>
6899
6900 <para>
6901  And finally we pull it all together in the bottom section and summarize how
6902  <application>Privoxy</application> is applying all its <quote>actions</quote> 
6903  to <quote>google.com</quote>:
6904
6905 </para>
6906
6907 <para>
6908  <screen>
6909
6910  Final results:
6911  
6912  -add-header 
6913  -block 
6914  -crunch-outgoing-cookies 
6915  -crunch-incoming-cookies 
6916  +deanimate-gifs{last} 
6917  -downgrade-http-version 
6918  -fast-redirects 
6919  -filter{popups} 
6920  -filter{fun} 
6921  -filter{shockwave-flash} 
6922  -filter{crude-parental} 
6923  +filter{html-annoyances} 
6924  +filter{js-annoyances} 
6925  +filter{content-cookies} 
6926  +filter{webbugs} 
6927  +filter{refresh-tags} 
6928  +filter{nimda} 
6929  +filter{banners-by-size} 
6930  +hide-forwarded-for-headers 
6931  +hide-from-header{block} 
6932  +hide-referer{forge} 
6933  -hide-user-agent 
6934  -handle-as-image 
6935  -kill-popups 
6936  -limit-connect 
6937  +prevent-compression 
6938  -send-vanilla-wafer 
6939  -send-wafer
6940  -session-cookies-only 
6941  +set-image-blocker{pattern} 
6942 </screen>
6943 </para>
6944
6945 <para>
6946  Notice the only difference here to the previous listing, is to 
6947  <quote>fast-redirects</quote> and <quote>session-cookies-only</quote>.
6948 </para>
6949
6950 <para>
6951  Now another example, <quote>ad.doubleclick.net</quote>:
6952 </para>
6953
6954 <para>
6955  <screen>
6956
6957  { +block +handle-as-image }
6958   .ad.doubleclick.net
6959
6960  { +block +handle-as-image }
6961   ad*.
6962
6963  { +block +handle-as-image }
6964   .doubleclick.net
6965 </screen>
6966 </para>
6967
6968 <para>
6969  We'll just show the interesting part here, the explicit matches. It is 
6970  matched three different times. Each as an <quote>+block +handle-as-image</quote>,
6971  which is the expanded form of one of our aliases that had been defined as: 
6972  <quote>+imageblock</quote>. (<link
6973  linkend="ALIASES"><quote>Aliases</quote></link> are defined in
6974  the first section of the actions file and typically used to combine more 
6975  than one action.)
6976 </para>
6977
6978 <para>
6979  Any one of these would have done the trick and blocked this as an unwanted 
6980  image. This is unnecessarily redundant since the last case effectively 
6981  would also cover the first. No point in taking chances with these guys 
6982  though ;-) Note that if you want an ad or obnoxious 
6983  URL to be invisible, it should be defined as <quote>ad.doubleclick.net</quote>
6984  is done here -- as both a <link
6985  linkend="BLOCK"><quote>+block</quote></link>
6986  <emphasis>and</emphasis> an 
6987  <link
6988  linkend="HANDLE-AS-IMAGE"><quote>+handle-as-image</quote></link>.
6989  The custom alias <quote>+imageblock</quote> just simplifies the process and make 
6990  it more readable.
6991 </para>
6992
6993 <para>
6994  One last example. Let's try <quote>http://www.rhapsodyk.net/adsl/HOWTO/</quote>.
6995  This one is giving us problems. We are getting a blank page. Hmmm...
6996 </para>
6997
6998 <para>
6999  <screen>
7000
7001  Matches for http://www.rhapsodyk.net/adsl/HOWTO/:
7002
7003  In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
7004
7005  {-add-header 
7006   -block 
7007   -crunch-incoming-cookies 
7008   -crunch-outgoing-cookies 
7009   +deanimate-gifs 
7010   -downgrade-http-version 
7011   +fast-redirects 
7012   +filter{html-annoyances} 
7013   +filter{js-annoyances} 
7014   +filter{kill-popups} 
7015   +filter{webbugs} 
7016   +filter{nimda} 
7017   +filter{banners-by-size} 
7018   +filter{hal} 
7019   +filter{fun} 
7020   +hide-forwarded-for-headers 
7021   +hide-from-header{block} 
7022   +hide-referer{forge} 
7023   -hide-user-agent 
7024   -handle-as-image 
7025   +kill-popups 
7026   +prevent-compression 
7027   -send-vanilla-wafer 
7028   -send-wafer 
7029   +session-cookies-only 
7030   +set-image-blocker{blank} }
7031    /
7032
7033  { +block +handle-as-image }
7034   /ads
7035 </screen>
7036 </para>
7037
7038 <para>
7039  Ooops, the <quote>/adsl/</quote> is matching <quote>/ads</quote>! But 
7040  we did not want this at all! Now we see why we get the blank page. We could
7041  now add a new action below this that explicitly does <emphasis>not</emphasis>
7042  block (<quote>{-block}</quote>) paths with <quote>adsl</quote>. There are
7043  various ways to handle such exceptions. Example:
7044 </para>
7045
7046 <para>
7047  <screen>
7048
7049  { -block }
7050   /adsl
7051 </screen>
7052 </para>
7053
7054 <para>
7055  Now the page displays ;-) Be sure to flush your browser's caches when 
7056  making such changes. Or, try using <literal>Shift+Reload</literal>.
7057 </para>
7058
7059 <para>
7060  But now what about a situation where we get no explicit matches like 
7061  we did with:
7062 </para>
7063
7064 <para>
7065  <screen>
7066
7067  { +block +handle-as-image }
7068  /ads
7069 </screen>
7070 </para>
7071
7072 <para>
7073  That actually was very telling and pointed us quickly to where the problem
7074  was. If you don't get this kind of match, then it means one of the default 
7075  rules in the first section is causing the problem. This would require some 
7076  guesswork, and maybe a little trial and error to isolate the offending rule.
7077  One likely cause would be one of the <quote>{+filter}</quote> actions. Try 
7078  adding the URL for the site to one of aliases that turn off <quote>+filter</quote>:
7079 </para>
7080
7081 <para>
7082  <screen>
7083
7084  {shop}
7085  .quietpc.com
7086  .worldpay.com   # for quietpc.com
7087  .jungle.com
7088  .scan.co.uk
7089  .forbes.com
7090 </screen>
7091 </para>
7092
7093 <para>
7094  <quote>{shop}</quote> is an <quote>alias</quote> that expands to 
7095  <quote>{ -filter -session-cookies-only }</quote>.
7096  Or you could do your own exception to negate filtering:
7097
7098 </para>
7099
7100 <para>
7101  <screen>
7102
7103  {-filter}
7104  .forbes.com
7105 </screen>
7106 </para>
7107
7108 <para>
7109  This would probably be most appropriately put in <filename>user.action</filename>, 
7110  for local site exceptions.
7111 </para>
7112
7113 <para>
7114  <quote>{fragile}</quote> is an alias that disables most actions. This can be 
7115  used as a last resort for problem sites. Remember to flush caches! If this 
7116  still does not work, you will have to go through the remaining actions one by
7117  one to find which one(s) is causing the problem.
7118 </para>
7119
7120 </sect2>
7121
7122 </sect1>
7123
7124  <!--
7125
7126  This program is free software; you can redistribute it 
7127  and/or modify it under the terms of the GNU General
7128  Public License as published by the Free Software
7129  Foundation; either version 2 of the License, or (at
7130  your option) any later version.
7131
7132  This program is distributed in the hope that it will
7133  be useful, but WITHOUT ANY WARRANTY; without even the
7134  implied warranty of MERCHANTABILITY or FITNESS FOR A
7135  PARTICULAR PURPOSE.  See the GNU General Public
7136  License for more details.
7137
7138  The GNU General Public License should be included with
7139  this file.  If not, you can view it at
7140  http://www.gnu.org/copyleft/gpl.html
7141  or write to the Free Software Foundation, Inc., 59
7142  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
7143
7144  $Log: user-manual.sgml,v $
7145  Revision 1.121  2002/05/23 23:20:17  oes
7146   - Changed more (all?) references to actions to the
7147     <literal><link> style.
7148   - Small fixes in the actions chapter
7149   - Small clarifications in the quickstart to ad blocking
7150   - Removed <emphasis> from <title>s since the new doc CSS
7151     renders them red (bad in TOC).
7152
7153  Revision 1.120  2002/05/23 19:16:43  roro
7154  Correct Debian specials (installation and startup).
7155
7156  Revision 1.119  2002/05/22 17:17:05  oes
7157  Added Security hint
7158
7159  Revision 1.118  2002/05/21 04:54:55  hal9
7160  -New Section: Quickstart to Ad Blocking
7161  -Reformat Actions Anatomy to match new CGI layout
7162
7163  Revision 1.117  2002/05/17 13:56:16  oes
7164   - Reworked & extended Templates chapter
7165   - Small changes to Regex appendix
7166   - #included authors.sgml into (C) and hist chapter
7167
7168  Revision 1.116  2002/05/17 03:23:46  hal9
7169  Fixing merge conflict in Quickstart section.
7170
7171  Revision 1.115  2002/05/16 16:25:00  oes
7172  Extended the Filter File chapter & minor fixes
7173
7174  Revision 1.114  2002/05/16 09:42:50  oes
7175  More ulink->link, added some hints to Quickstart section
7176
7177  Revision 1.113  2002/05/15 21:07:25  oes
7178  Extended and further commented the example actions files
7179
7180  Revision 1.112  2002/05/15 03:57:14  hal9
7181  Spell check. A few minor edits here and there for better syntax and
7182  clarification.
7183
7184  Revision 1.111  2002/05/14 23:01:36  oes
7185  Fixing the fixes   
7186
7187  Revision 1.110  2002/05/14 19:10:45  oes
7188  Restored alphabetical order of actions
7189
7190  Revision 1.109  2002/05/14 17:23:11  oes
7191  Renamed the prevent-*-cookies actions, extended aliases section and moved it before the example AFs
7192
7193  Revision 1.108  2002/05/14 15:29:12  oes
7194  Completed proofreading the actions chapter
7195
7196  Revision 1.107  2002/05/12 03:20:41  hal9
7197  Small clarifications for 127.0.0.1 vs localhost for listen-address since this
7198  apparently an important distinction for some OS's.
7199
7200  Revision 1.106  2002/05/10 01:48:20  hal9
7201  This is mostly proposed copyright/licensing additions and changes. Docs
7202  are still GPL, but licensing and copyright are more visible. Also, copyright
7203  changed in doc header comments (eliminate references to JB except FAQ).
7204
7205  Revision 1.105  2002/05/05 20:26:02  hal9
7206  Sorting out license vs copyright in these docs.
7207
7208  Revision 1.104  2002/05/04 08:44:45  swa
7209  bumped version
7210
7211  Revision 1.103  2002/05/04 00:40:53  hal9
7212  -Remove the TOC first page kludge. It's fixed proper now in ldp.dsl.in.
7213  -Some minor additions to Quickstart.
7214
7215  Revision 1.102  2002/05/03 17:46:00  oes
7216  Further proofread & reactivated short build instructions
7217
7218  Revision 1.101  2002/05/03 03:58:30  hal9
7219  Move the user-manual config directive to top of section. Add note about
7220  Privoxy needing read permissions for configs, and write for logs.
7221
7222  Revision 1.100  2002/04/29 03:05:55  hal9
7223  Add clarification on differences of new actions files.
7224
7225  Revision 1.99  2002/04/28 16:59:05  swa
7226  more structure in starting section
7227
7228  Revision 1.98  2002/04/28 05:43:59  hal9
7229  This is the break up of configuration.html into multiple files. This
7230  will probably break links elsewhere :(
7231
7232  Revision 1.97  2002/04/27 21:04:42  hal9
7233  -Rewrite of Actions File example.
7234  -Add section for user-manual directive in config.
7235
7236  Revision 1.96  2002/04/27 05:32:00  hal9
7237  -Add short section to Filter Files to tie in with +filter action.
7238  -Start rewrite of examples in Actions Examples (not finished).
7239
7240  Revision 1.95  2002/04/26 17:23:29  swa
7241  bookmarks cleaned, changed structure of user manual, screen and programlisting cleanups, and numerous other changes that I forgot
7242
7243  Revision 1.94  2002/04/26 05:24:36  hal9
7244  -Add most of Andreas suggestions to Chain of Events section.
7245  -A few other minor corrections and touch up.
7246
7247  Revision 1.92  2002/04/25 18:55:13  hal9
7248  More catchups on new actions files, and new actions names.
7249  Other assorted cleanups, and minor modifications.
7250
7251  Revision 1.91  2002/04/24 02:39:31  hal9
7252  Add 'Chain of Events' section.
7253
7254  Revision 1.90  2002/04/23 21:41:25  hal9
7255  Linuxconf is deprecated on RH, substitute chkconfig.
7256
7257  Revision 1.89  2002/04/23 21:05:28  oes
7258  Added hint for startup on Red Hat
7259
7260  Revision 1.88  2002/04/23 05:37:54  hal9
7261  Add AmigaOS install stuff.
7262
7263  Revision 1.87  2002/04/23 02:53:15  david__schmidt
7264  Updated OSX installation section
7265  Added a few English tweaks here an there
7266
7267  Revision 1.86  2002/04/21 01:46:32  hal9
7268  Re-write actions section.
7269
7270  Revision 1.85  2002/04/18 21:23:23  hal9
7271  Fix ugly typo (mine).
7272
7273  Revision 1.84  2002/04/18 21:17:13  hal9
7274  Spell Redhat correctly (ie Red Hat). A few minor grammar corrections.
7275
7276  Revision 1.83  2002/04/18 18:21:12  oes
7277  Added RPM install detail
7278
7279  Revision 1.82  2002/04/18 12:04:50  oes
7280  Cosmetics
7281
7282  Revision 1.81  2002/04/18 11:50:24  oes
7283  Extended Install section - needs fixing by packagers
7284
7285  Revision 1.80  2002/04/18 10:45:19  oes
7286  Moved text to buildsource.sgml, renamed some filters, details
7287
7288  Revision 1.79  2002/04/18 03:18:06  hal9
7289  Spellcheck, and minor touchups.
7290
7291  Revision 1.78  2002/04/17 18:04:16  oes
7292  Proofreading part 2
7293
7294  Revision 1.77  2002/04/17 13:51:23  oes
7295  Proofreading, part one
7296
7297  Revision 1.76  2002/04/16 04:25:51  hal9
7298  -Added 'Note to Upgraders' and re-ordered the 'Quickstart' section.
7299  -Note about proxy may need requests to re-read config files.
7300
7301  Revision 1.75  2002/04/12 02:08:48  david__schmidt
7302  Remove OS/2 building info... it is already in the developer-manual
7303
7304  Revision 1.74  2002/04/11 00:54:38  hal9
7305  Add small section on submitting actions.
7306
7307  Revision 1.73  2002/04/10 18:45:15  swa
7308  generated
7309
7310  Revision 1.72  2002/04/10 04:06:19  hal9
7311  Added actions feedback  to Bookmarklets section
7312
7313  Revision 1.71  2002/04/08 22:59:26  hal9
7314  Version update. Spell chkconfig correctly :)
7315
7316  Revision 1.70  2002/04/08 20:53:56  swa
7317  ?
7318
7319  Revision 1.69  2002/04/06 05:07:29  hal9
7320  -Add privoxy-man-page.sgml, for man page.
7321  -Add authors.sgml for AUTHORS (and p-authors.sgml)
7322  -Reworked various aspects of various docs.
7323  -Added additional comments to sub-docs.
7324
7325  Revision 1.68  2002/04/04 18:46:47  swa
7326  consistent look. reuse of copyright, history et. al.
7327
7328  Revision 1.67  2002/04/04 17:27:57  swa
7329  more single file to be included at multiple points. make maintaining easier
7330
7331  Revision 1.66  2002/04/04 06:48:37  hal9
7332  Structural changes to allow for conditional inclusion/exclusion of content
7333  based on entity toggles, e.g. 'entity % p-not-stable  "INCLUDE"'. And
7334  definition of internal entities, e.g. 'entity p-version "2.9.13"' that will
7335  eventually be set by Makefile.
7336  More boilerplate text for use across multiple docs.
7337
7338  Revision 1.65  2002/04/03 19:52:07  swa
7339  enhance squid section due to user suggestion
7340
7341  Revision 1.64  2002/04/03 03:53:43  hal9
7342  A few minor bug fixes, and touch ups. Ready for review.
7343
7344  Revision 1.63  2002/04/01 16:24:49  hal9
7345  Define entities to include boilerplate text. See doc/source/*.
7346
7347  Revision 1.62  2002/03/30 04:15:53  hal9
7348  - Fix privoxy.org/config links.
7349  - Paste in Bookmarklets from Toggle page.
7350  - Move Quickstart nearer top, and minor rework.
7351
7352  Revision 1.61  2002/03/29 01:31:08  hal9
7353  Minor update.
7354
7355  Revision 1.60  2002/03/27 01:57:34  hal9
7356  Added more to Anatomy section.
7357
7358  Revision 1.59  2002/03/27 00:54:33  hal9
7359  Touch up intro for new name.
7360
7361  Revision 1.58  2002/03/26 22:29:55  swa
7362  we have a new homepage!
7363
7364  Revision 1.57  2002/03/24 20:33:30  hal9
7365  A few minor catch ups with name change.
7366
7367  Revision 1.56  2002/03/24 16:17:06  swa
7368  configure needs to be generated.
7369
7370  Revision 1.55  2002/03/24 16:08:08  swa
7371  we are too lazy to make a block-built
7372  privoxy logo. hence removed the option.
7373
7374  Revision 1.54  2002/03/24 15:46:20  swa
7375  name change related issue.
7376
7377  Revision 1.53  2002/03/24 11:51:00  swa
7378  name change. changed filenames.
7379
7380  Revision 1.52  2002/03/24 11:01:06  swa
7381  name change
7382
7383  Revision 1.51  2002/03/23 15:13:11  swa
7384  renamed every reference to the old name with foobar.
7385  fixed "application foobar application" tag, fixed
7386  "the foobar" with "foobar". left junkbustser in cvs
7387  comments and remarks to history untouched.
7388
7389  Revision 1.50  2002/03/23 05:06:21  hal9
7390  Touch up.
7391
7392  Revision 1.49  2002/03/21 17:01:05  hal9
7393  New section in Appendix.
7394
7395  Revision 1.48  2002/03/12 06:33:01  hal9
7396  Catching up to Andreas and re_filterfile changes.
7397
7398  Revision 1.47  2002/03/11 13:13:27  swa
7399  correct feedback channels
7400
7401  Revision 1.46  2002/03/10 00:51:08  hal9
7402  Added section on JB internal pages in Appendix.
7403
7404  Revision 1.45  2002/03/09 17:43:53  swa
7405  more distros
7406
7407  Revision 1.44  2002/03/09 17:08:48  hal9
7408  New section on Jon's actions file editor, and move some stuff around.
7409
7410  Revision 1.43  2002/03/08 00:47:32  hal9
7411  Added imageblock{pattern}.
7412
7413  Revision 1.42  2002/03/07 18:16:55  swa
7414  looks better
7415
7416  Revision 1.41  2002/03/07 16:46:43  hal9
7417  Fix a few markup problems for jade.
7418
7419  Revision 1.40  2002/03/07 16:28:39  swa
7420  provide correct feedback channels
7421
7422  Revision 1.39  2002/03/06 16:19:28  hal9
7423  Note on perceived filtering slowdown per FR.
7424
7425  Revision 1.38  2002/03/05 23:55:14  hal9
7426  Stupid I did it again. Double hyphen in comment breaks jade.
7427
7428  Revision 1.37  2002/03/05 23:53:49  hal9
7429  jade barfs on '- -' embedded in comments. - -user option broke it.
7430
7431  Revision 1.36  2002/03/05 22:53:28  hal9
7432  Add new - - user option.
7433
7434  Revision 1.35  2002/03/05 00:17:27  hal9
7435  Added section on command line options.
7436
7437  Revision 1.34  2002/03/04 19:32:07  oes
7438  Changed default port to 8118
7439
7440  Revision 1.33  2002/03/03 19:46:13  hal9
7441  Emphasis on where/how to report bugs, etc
7442
7443  Revision 1.32  2002/03/03 09:26:06  joergs
7444  AmigaOS changes, config is now loaded from PROGDIR: instead of
7445  AmiTCP:db/junkbuster/ if no configuration file is specified on the
7446  command line.
7447
7448  Revision 1.31  2002/03/02 22:45:52  david__schmidt
7449  Just tweaking
7450
7451  Revision 1.30  2002/03/02 22:00:14  hal9
7452  Updated 'New Features' list. Ran through spell-checker.
7453
7454  Revision 1.29  2002/03/02 20:34:07  david__schmidt
7455  Update OS/2 build section
7456
7457  Revision 1.28  2002/02/24 14:34:24  jongfoster
7458  Formatting changes.  Now changing the doctype to DocBook XML 4.1
7459  will work - no other changes are needed.
7460
7461  Revision 1.27  2002/01/11 14:14:32  hal9
7462  Added a very short section on Templates
7463
7464  Revision 1.26  2002/01/09 20:02:50  hal9
7465  Fix bug re: auto-detect config file changes.
7466
7467  Revision 1.25  2002/01/09 18:20:30  hal9
7468  Touch ups for *.action files.
7469
7470  Revision 1.24  2001/12/02 01:13:42  hal9
7471  Fix typo.
7472
7473  Revision 1.23  2001/12/02 00:20:41  hal9
7474  Updates for recent changes.
7475
7476  Revision 1.22  2001/11/05 23:57:51  hal9
7477  Minor update for startup now daemon mode.
7478
7479  Revision 1.21  2001/10/31 21:11:03  hal9
7480  Correct 2 minor errors
7481
7482  Revision 1.18  2001/10/24 18:45:26  hal9
7483  *** empty log message ***
7484
7485  Revision 1.17  2001/10/24 17:10:55  hal9
7486  Catching up with Jon's recent work, and a few other things.
7487
7488  Revision 1.16  2001/10/21 17:19:21  swa
7489  wrong url in documentation
7490
7491  Revision 1.15  2001/10/14 23:46:24  hal9
7492  Various minor changes. Fleshed out SEE ALSO section.
7493
7494  Revision 1.13  2001/10/10 17:28:33  hal9
7495  Very minor changes.
7496
7497  Revision 1.12  2001/09/28 02:57:04  hal9
7498  Ditto :/
7499
7500  Revision 1.11  2001/09/28 02:25:20  hal9
7501  Ditto.
7502
7503  Revision 1.9  2001/09/27 23:50:29  hal9
7504  A few changes. A short section on regular expression in appendix.
7505
7506  Revision 1.8  2001/09/25 00:34:59  hal9
7507  Some additions, and re-arranging.
7508
7509  Revision 1.7  2001/09/24 14:31:36  hal9
7510  Diddling.
7511
7512  Revision 1.6  2001/09/24 14:10:32  hal9
7513  Including David's OS/2 installation instructions.
7514
7515  Revision 1.2  2001/09/13 15:27:40  swa
7516  cosmetics
7517
7518  Revision 1.1  2001/09/12 15:36:41  swa
7519  source files for junkbuster documentation
7520
7521  Revision 1.3  2001/09/10 17:43:59  swa
7522  first proposal of a structure.
7523
7524  Revision 1.2  2001/06/13 14:28:31  swa
7525  docs should have an author.
7526
7527  Revision 1.1  2001/06/13 14:20:37  swa
7528  first import of project's documentation for the webserver.
7529
7530  -->
7531
7532 </article>