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