-Added 'Note to Upgraders' and re-ordered the 'Quickstart' section.
[privoxy.git] / doc / source / user-manual.sgml
1 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
2 <!entity % dummy "INCLUDE"> 
3 <!entity supported SYSTEM "supported.sgml">
4 <!entity newfeatures SYSTEM "newfeatures.sgml">
5 <!entity p-intro SYSTEM "privoxy.sgml">
6 <!entity seealso SYSTEM "seealso.sgml">
7 <!entity buildsource SYSTEM "buildsource.sgml">
8 <!entity contacting SYSTEM "contacting.sgml">
9 <!entity history SYSTEM "history.sgml">
10 <!entity copyright SYSTEM "copyright.sgml">
11 <!entity p-version "2.9.14">
12 <!entity p-status "beta">
13 <!entity % p-not-stable "INCLUDE">
14 <!entity % p-stable "IGNORE">
15 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
16 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
17 <!entity % p-readme "IGNORE">
18 <!entity % p-supp-userman "IGNORE"> <!-- Omit some from supported.sgml    -->
19 ]>
20 <!--
21  File        :  $Source: /cvsroot/ijbswa/current/doc/source/user-manual.sgml,v $
22
23  Purpose     :  user manual
24                 This file belongs into
25                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
26                 
27  $Id: user-manual.sgml,v 1.75 2002/04/12 02:08:48 david__schmidt Exp $
28
29  Written by and Copyright (C) 2001 the SourceForge
30  Privoxy team. http://www.privoxy.org/
31
32  Based on the Internet Junkbuster originally written
33  by and Copyright (C) 1997 Anonymous Coders and 
34  Junkbusters Corporation.  http://www.junkbusters.com
35
36
37  ========================================================================
38  NOTE: Please read developer-manual/documentation.html before touching 
39  anything in this, or other Privoxy documentation.
40  ========================================================================
41
42 -->
43
44 <article id="index">
45 <artheader>
46 <title>Privoxy User Manual</title>
47
48 <pubdate>$Id: user-manual.sgml,v 1.75 2002/04/12 02:08:48 david__schmidt Exp $</pubdate>
49
50 <authorgroup>
51  <author>
52   <affiliation>
53    <orgname>By: Privoxy Developers</orgname>
54    </affiliation>
55  </author>
56 </authorgroup>
57
58 <abstract>
59 <![%dummy;[
60  <para>
61  <comment>
62   This is here to keep vim syntax file from breaking :/
63   If I knew enough to fix it, I would.
64   PLEASE DO NOT REMOVE! HB: hal@foobox.net
65  </comment>
66  </para>
67 ]]>
68
69  <para>
70   The user manual gives users information on how to install, configure and use
71   <ulink
72   url="http://www.privoxy.org/"><application>Privoxy</application></ulink>.
73   </para>
74
75 <!-- Include privoxy.sgml boilerplate: -->
76  &p-intro;
77 <!-- end privoxy.sgml -->
78
79  <para>
80   You can find the latest version of the user manual at  <ulink
81   url="http://www.privoxy.org/user-manual/">http://www.privoxy.org/user-manual/</ulink>.
82   Please see the <ulink url="contact.html">Contact section</ulink> on how to
83   contact the developers.
84   </para>
85
86 <!--   <para> -->
87 <!--    Feel free to send a note to the developers at <email>ijbswa-developers@lists.sourceforge.net</email>. -->
88 <!--   </para> -->
89 </abstract>
90
91 </artheader>
92
93 <!--   ~~~~~       New section      ~~~~~     -->
94 <sect1 id="intro" label=""><title></title>
95 <!-- dummy section to force TOC on page by itself -->
96 <!-- DO NOT REMOVE! please ;) -->
97 <para> </para>
98 </sect1>
99
100 <!--   ~~~~~       New section      ~~~~~     -->
101
102 <sect1 label="1" id="introduction"><title>Introduction</title>
103
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 <![%p-not-stable;[
116 <!-- include only in non-stable versions -->
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  feature 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 <anchor id="testing"/>
134 </para>
135
136 <!-- Include newfeatures.sgml boilerplate here: -->
137  &newfeatures;
138 <!-- end boilerplate -->
139 </sect2>
140
141 </sect1>
142
143 <!--  ~  End section  ~  -->
144
145
146 <!--   ~~~~~       New section      ~~~~~     -->
147 <sect1 id="installation"><title>Installation</title>
148 <para>
149  <application>Privoxy</application> is available as raw source code (tarball 
150  or via CVS), or pre-compiled binaries for various platforms. See the <ulink
151  url="http://sourceforge.net/projects/ijbswa/">Privoxy Project Page</ulink> for
152  the most up to date release information.
153  <application>Privoxy</application> is also available via <ulink
154  url="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/current/">CVS</ulink>.
155  <![%p-not-stable;[This is the recommended approach at this time.]]> But
156  please be aware that CVS is constantly changing, and it may break in
157  mysterious ways.
158 </para>
159
160 <!-- Include supported.sgml boilerplate -->
161  &supported;
162 <!-- end boilerplate -->
163
164 <!--   ~~~~~       New section      ~~~~~     -->
165 <sect2 id="installation-source"><title>Source</title>
166
167
168 <!-- include buildsource.sgml boilerplate: -->
169  &buildsource;
170 <!-- end boilerplate -->
171
172 <para>
173  For Redhat and SuSE Linux RPM packages, see below.
174 </para>
175
176
177 <!--   ~~~~~       New section      ~~~~~     -->
178 <sect3 id="installation-rh"><title>Red Hat</title>
179 <para>
180  To build Redhat RPM packages from source, install source as above. Then:
181 </para>
182
183 <para>
184  <screen>
185  autoheader
186  autoconf
187  ./configure
188  make redhat-dist
189  </screen>
190 </para>
191
192 <para>
193  This will create both binary and src RPMs in the usual places. Example:
194 </para>
195
196 <para>
197  &nbsp;&nbsp;&nbsp;/usr/src/redhat/RPMS/i686/privoxy-&p-version;-1.i686.rpm
198 </para>
199 <para>
200  &nbsp;&nbsp;&nbsp;/usr/src/redhat/SRPMS/privoxy-&p-version;-1.src.rpm
201 </para>
202
203 <para>
204  To install, of course:
205 </para>
206
207 <para>
208  <screen>
209  rpm -Uvv /usr/src/redhat/RPMS/i686/privoxy-&p-version;-1.i686.rpm
210  </screen>
211 </para>
212
213 <para>
214  This will place the <application>Privoxy</application> configuration 
215  files in <filename>/etc/privoxy/</filename>, and log files in 
216  <filename>/var/log/privoxy/</filename>. Run 
217  <quote><command>chkconfig privoxy on</command></quote> to have
218  <application>Privoxy</application> start automatically during init.
219
220 </para>
221
222 </sect3>
223
224 <!--   ~~~~~       New section      ~~~~~     -->
225 <sect3 id="installation-suse"><title>SuSE</title>
226 <para>
227  To build SuSE RPM packages, install source as above. Then:
228 </para>
229
230 <para>
231  <screen>
232  autoheader
233  autoconf
234  ./configure
235  make suse-dist
236  </screen>
237 </para>
238
239 <para>
240  This will create both binary and src RPMs in the usual places. Example:
241 </para>
242
243 <para>
244  &nbsp;&nbsp;&nbsp;/usr/src/packages/RPMS/i686/privoxy-&p-version;-1.i686.rpm
245 </para>
246 <para>
247  &nbsp;&nbsp;&nbsp;/usr/src/packages/SRPMS/privoxy-&p-version;-1.src.rpm
248 </para>
249
250 <para>
251  To install, of course:
252 </para>
253
254 <para>
255  <screen>
256  rpm -Uvv /usr/src/packages/RPMS/i686/privoxy-&p-version;-1.i686.rpm
257  </screen>
258 </para>
259
260 <para>
261  This will place the <application>Privoxy</application> configuration 
262  files in <filename>/etc/privoxy/</filename>, and log files in 
263  <filename>/var/log/privoxy/</filename>. 
264 </para>
265
266 </sect3>
267
268
269 <!--   ~~~~~       New section      ~~~~~     -->
270 <sect3 id="installation-os2"><title>OS/2</title>
271
272 <!--
273 Thanx David Schmidt!
274 -->
275
276 <para>
277  <application>Privoxy</application> is packaged in a WarpIN self-
278  installing archive.  The self-installing program will be named depending
279  on the release version, something like:
280  <filename>privoxyos2_setup_&p-version;.exe</filename>.  In order to install it, simply
281  run this executable or double-click on its icon and follow the WarpIN
282  installation panels.  A shadow of the <application>Privoxy</application>
283  executable will be placed in your startup folder so it will start 
284  automatically whenever OS/2 starts.
285 </para>
286
287 <para>
288  The directory you choose to install <application>Privoxy</application>
289  into will contain all of the configuration files.
290 </para>
291
292 </sect3>
293
294
295 <!--   ~~~~~       New section      ~~~~~     -->
296 <sect3 id="installation-win"><title>Windows</title>
297 <para>Click-click. (I need help on this. Not a clue here. Also for 
298 configuration section below. HB.)
299 </para>
300 </sect3>
301
302 <!--   ~~~~~       New section      ~~~~~     -->
303 <sect3 id="installation-other"><title>Other</title>
304 <para>
305  Some quick notes on other Operating Systems.
306 </para>
307
308 <para>
309  For FreeBSD (and other *BSDs?), the build will require <command>gmake</command> 
310  instead of the included <command>make</command>. <command>gmake</command> is
311  available from <ulink url="http://www.gnu.org">http://www.gnu.org</ulink>.
312  The rest should be the same as above for Linux/Unix.
313 </para>
314
315 </sect3>
316 </sect2>
317
318 </sect1>
319
320 <!--  ~  End section  ~  -->
321
322
323 <!--   ~~~~~       New section      ~~~~~     -->
324
325 <sect1 id="quickstart"><title>Quickstart to Using <application>Privoxy</application></title>
326
327
328 <!--   ~~~~~       New section      ~~~~~     -->
329 <sect2 id="upgradersnote">
330 <title>Note to Upgraders</title>
331 <para>
332  There are very significant changes from older versions of 
333  <application>Junkbuster</application> to the current
334  <application>Privoxy</application>. Configuration is substantially 
335  changed. <application>Junkbuster 2.0.x</application> and earlier 
336  configuration files will not migrate. The functionality of the old
337  <filename>blockfile</filename>, <filename>cookiefile</filename> and
338  <filename>imagelist</filename>, are now combined into the
339  <quote><filename>actions file</filename></quote>
340  (<filename>default.action</filename> for most installations).
341 </para>
342 <para>
343  A <quote><filename>filterfile</filename></quote> (typically
344  <filename>default.filter</filename>) is new with
345  <application>Privoxy 2.9.x</application>, and provides some of the new
346  sophisticaton (explained below). <filename>config</filename> is 
347  much the same.
348 </para>
349 <para>
350  If upgrading from a 2.0.x version, you will have to use the new config 
351  files, and possibly adapt any personal rules from your older files.
352  If upgrading from 2.9.x development versions, it is still recommended 
353  to use the new configuration files.
354 </para>
355 <para>
356  A quick list of things to be aware of before upgrading: 
357 </para>
358
359 <para>
360  <itemizedlist>
361
362  <listitem>
363   <para>
364    The default listening port is now 8118 due to a conflict with another 
365    service (NAS).
366   </para>
367  </listitem>  
368  <listitem>
369   <para>  
370     Some installers may remove earlier versions completely. Save any 
371     important configuration files!
372   </para>
373  </listitem>
374  <listitem>
375   <para>
376    <application>Privoxy</application> is reachable with a web browser 
377    at the special URL: <ulink url="http://p.p/">http://p.p/</ulink>. Many
378    aspects of configuration can be done here, including temporarily disabling
379    <application>Privoxy</application>. Alternately, 
380    <ulink url="http://config.privoxy.org/">http://config.privoxy.org</ulink>
381    may work in some rare cases where the former does not.
382   </para>
383  </listitem> 
384  <listitem>
385   <para>
386    The primary configuration file for cookie management, ad and banner 
387    blocking, and many other aspects of <application>Privoxy</application>
388    configuration is <filename>default.action</filename>.
389   </para>
390  </listitem> 
391   <listitem>
392   <para>
393 <!-- I think it is best to keep this somewhat vague, in case  -->
394 <!-- the situation changes under our feet. -->   
395    Some installers may not automatically start
396    <application>Privoxy</application> after installation.
397   </para>
398  </listitem> 
399
400  </itemizedlist>
401 </para>
402
403 </sect2>
404
405 <!--   ~~~~~       New section      ~~~~~     -->
406 <sect2 id="startup">
407 <title>Starting <application>Privoxy</application></title>
408 <para>
409  Before launching <application>Privoxy</application> for the first time, you 
410  will want to configure your browser(s) to use <application>Privoxy</application>
411  as a HTTP and HTTPS proxy. The default is localhost for the proxy address,
412  and port 8118 (earlier versions used port 8000). This is the one required 
413  configuration that must be done! 
414 </para>
415  
416 <para> 
417  With <application>Netscape</application> (and
418  <application>Mozilla</application>), this can be set under <literal>Edit
419  -&gt; Preferences -&gt; Advanced -&gt; Proxies -&gt; HTTP Proxy</literal>.
420  For <application>Internet Explorer</application>: <literal>Tools -&gt;
421  Internet Properties -&gt; Connections -&gt; LAN Setting</literal>. Then,
422  check <quote>Use Proxy</quote> and fill in the appropriate info (Address:
423  localhost, Port: 8118). Include if HTTPS proxy support too.
424 </para>
425
426 <para>
427  After doing this, flush your browser's disk and memory caches to force a
428  re-reading of all pages and get rid of any ads that may be cached. You 
429  are now ready to start enjoying the benefits of using
430  <application>Privoxy</application>.
431 </para>
432
433
434 <para>
435  <application>Privoxy</application> is typically started by specifying the
436  main configuration file to be used on the command line. Example Unix startup
437  command:
438 </para>
439
440 <para>
441  <screen>
442  
443  # /usr/sbin/privoxy /etc/privoxy/config
444  
445  </screen>
446 </para>
447
448 <para>
449  An init script is provided for SuSE and Redhat.
450 </para>
451
452 <para>
453  For for SuSE: <command>/etc/rc.d/privoxy start</command>
454 </para>
455
456 <para>
457  For RedHat: <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 <filename>default.action</filename> 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>default.action</filename> and disable this feature. If you
487  use more than one browser, it would make more sense to let
488  <application>Privoxy</application> handle this. In which case, the
489  browser(s) should be set to accept all cookies.
490 </para>
491
492 <para>
493  <application>Privoxy</application> is HTTP/1.1 compliant,  but not all 1.1
494  features are as yet implemented. If browsers that support HTTP/1.1 (like
495  <application>Mozilla</application> or recent versions of I.E.) experience
496  problems, you might try to force HTTP/1.0 compatibility. For Mozilla, look
497  under <literal>Edit -&gt; Preferences -&gt; Debug -&gt; Networking</literal>.
498  Or set the <quote>+downgrade</quote> config option in
499  <filename>default.action</filename>.
500 </para>
501
502 <para>
503  After running <application>Privoxy</application> for a while, you can 
504  start to fine tune the configuration to suit your personal, or site, 
505  preferences and requirements. There are many, many aspects that can 
506  be customized. <quote>Actions</quote> (as specified in <filename>default.action</filename>) 
507  can be adjusted by pointing your browser to 
508  <ulink url="http://p.p/">http://p.p/</ulink>, 
509  and then follow the link to <quote>edit the actions list</quote>. 
510  (This is an internal page and does not require Internet access.)
511 </para>
512
513 <para>
514  In fact, various aspects of <application>Privoxy</application>
515  configuration can be viewed from this page, including 
516  current configuration parameters, source code version numbers, 
517  the browser's request headers, and <quote>actions</quote> that apply 
518  to a given URL. In addition to the <filename>default.action</filename> file 
519  editor mentioned above, <application>Privoxy</application> can also 
520  be turned <quote>on</quote> and <quote>off</quote> from this page.
521 </para>
522
523 <para>
524  If you encounter problems, please verify it is a
525  <application>Privoxy</application> bug, by disabling
526  <application>Privoxy</application>, and then trying the same page. 
527  Also, try another browser if possible to eliminate browser or site 
528  problems. Before reporting it as a bug, see if there is not a configuration
529  option that is enabled that is causing the page not to load. You can then add
530  an exception for that page or site. For instance, try adding it to the
531  <literal>{fragile}</literal> section of <filename>default.action</filename>.
532  This will turn off most actions for this site. For more on troubleshooting
533  problem sites, see the <ulink
534  url="appendix.html#ACTIONSANAT">Appendix</ulink>. If a bug, please report it
535  to the developers (see below). 
536 </para>
537
538 </sect2>
539
540
541 <!--   ~~~~~       New section      ~~~~~     -->
542 <sect2>
543 <title>Command Line Options</title>
544 <para>
545  <application>Privoxy</application> may be invoked with the following
546  command-line options:
547 </para>
548
549 <para>
550  <itemizedlist>
551
552  <listitem>
553   <para>
554     <emphasis>--version</emphasis>
555   </para>
556   <para>
557      Print version info and exit, Unix only.
558   </para>
559  </listitem> 
560  <listitem>
561   <para>
562     <emphasis>--help</emphasis>
563   </para>
564   <para>
565    Print a short usage info and exit, Unix only.
566   </para>
567  </listitem> 
568  <listitem>
569   <para>
570    <emphasis>--no-daemon</emphasis>
571   </para>
572   <para>
573    Don't become a daemon, i.e. don't fork and become process group
574    leader, don't detach from controlling tty. Unix only.
575   </para>
576  </listitem> 
577  <listitem>
578   <para>
579    <emphasis>--pidfile FILE</emphasis>
580   
581   </para>
582   <para>
583    On startup, write the process ID to <emphasis>FILE</emphasis>. Delete the
584    <emphasis>FILE</emphasis> on exit. Failiure to create or delete the
585    <emphasis>FILE</emphasis> is non-fatal. If no <emphasis>FILE</emphasis>
586    option is given, no PID file will be used. Unix only.
587   </para>
588  </listitem> 
589  <listitem>
590   <para>
591    <emphasis>--user USER[.GROUP]</emphasis>
592   
593   </para>
594   <para>
595    After (optionally) writing the PID file, assume the user  ID  of
596    <emphasis>USER</emphasis>, and if included the GID of GROUP.  Exit if the
597    privileges are not sufficient to do so. Unix only.
598   </para>
599  </listitem> 
600  <listitem>
601   <para>
602     <emphasis>configfile</emphasis>
603   </para>
604   <para>
605     If no <emphasis>configfile</emphasis> is included on the command line, 
606     <application>Privoxy</application> will look for a file named 
607     <quote>config</quote> in the current directory (except on Win32 
608     where it will look for <quote>config.txt</quote> instead). Specify 
609     full path to avoid confusion.
610   </para>
611  </listitem> 
612
613  </itemizedlist>
614 </para>
615
616 </sect2>
617
618 </sect1>
619
620 <!--  ~  End section  ~  -->
621
622
623 <!--   ~~~~~       New section      ~~~~~     -->
624 <sect1 id="configuration"><title><application>Privoxy</application> Configuration</title>
625  <para>
626   All <application>Privoxy</application> configuration is stored  
627   in text files. These files can be edited with a text editor.
628   Many important aspects of <application>Privoxy</application> can 
629   also be controlled easily with a web browser.
630
631  </para>
632
633
634 <!--   ~~~~~       New section      ~~~~~     -->
635
636 <sect2>
637 <title>Controlling <application>Privoxy</application> with Your Web Browser</title>
638 <para>
639  <application>Privoxy</application> can be reached by the special 
640  URL <ulink url="http://p.p/">http://p.p/</ulink> (or alternately
641  <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>), 
642  which is an internal page. You will see the following section:
643
644 </para>
645
646 <para>
647  <screen>
648
649 Please choose from the following options:
650
651     * Privoxy main page
652     * Show information about the current configuration
653     * Show the source code version numbers
654     * Show the request headers.
655     * Show which actions apply to a URL and why
656     * Toggle Privoxy on or off
657     * Edit the actions list
658
659  </screen>
660 </para>
661
662 <para>
663  This should be self-explanatory. Note the last item is an editor for the
664  <quote>actions list</quote>, which is where much of the ad, banner, cookie,
665  and URL blocking magic is configured as well as other advanced features of
666  <application>Privoxy</application>. This is an easy way to adjust various
667  aspects of <application>Privoxy</application> configuration. The actions
668  file, and other configuration files, are explained in detail below. 
669  <application>Privoxy</application> will automatically detect any changes 
670  to these files. Note: one or two requests to the proxy might required to
671  <quote>wake up</quote> <application>Privoxy</application>, 
672  and force a re-reading of the configuration. It is not necessarily 
673  instantaneous.
674 </para>
675
676 <para>
677  <quote>Toggle Privoxy On or Off</quote> is handy for sites that might 
678  have problems with your current actions and filters, or just to test if 
679  a site misbehaves, whether it is <application>Privoxy</application> 
680  causing the problem or not. <application>Privoxy</application> continues 
681  to run as a proxy in this case, but all filtering is disabled.
682
683 </para>
684
685 </sect2>
686
687 <!--  ~  End section  ~  -->
688
689
690
691
692 <!--   ~~~~~       New section      ~~~~~     -->
693
694 <sect2>
695 <title>Configuration Files Overview</title>
696 <para>
697  For Unix, *BSD and Linux, all configuration files are located in
698  <filename>/etc/privoxy/</filename> by default. For MS Windows, OS/2, and
699  AmigaOS these are all in the same directory as the 
700  <application>Privoxy</application> executable. <![%p-not-stable;[ The name
701  and number of configuration files has changed from previous versions, and is
702  subject to change as development progresses.]]>
703 </para>
704
705 <para>
706  The installed defaults provide a reasonable starting point, though possibly
707  aggressive by some standards. For the time being, there are only three
708  default configuration files (this may change in time):
709 </para>
710
711 <para>
712  <itemizedlist>
713
714   <listitem>
715    <para>
716      The main configuration file is named <filename>config</filename>
717      on Linux, Unix, BSD, OS/2, and AmigaOS and <filename>config.txt</filename>
718      on Windows.
719    </para>
720   </listitem> 
721
722   <listitem>
723    <para>
724     The <filename>default.action</filename> file is used  to define various 
725     <quote>actions</quote> relating to images, banners, pop-ups, access
726     restrictions, banners and cookies. There is a CGI based editor for this
727     file that can be accessed via <ulink
728     url="http://p.p">http://p.p</ulink>. (Other actions 
729     files are included as well with differing levels of filtering 
730     and blocking, e.g. <filename>basic.action</filename>.)
731    </para>
732   </listitem> 
733
734   <listitem>
735    <para>
736     The <filename>default.filter</filename> file can be used to re-write the raw
737     page content, including viewable text as well as embedded HTML and JavaScript,
738     and whatever else lurks on any given web page.
739    </para>
740   </listitem> 
741
742  </itemizedlist>
743 </para>
744
745 <para>
746  <filename>default.action</filename> and <filename>default.filter</filename> 
747  can use Perl style regular expressions for maximum flexibility. All files use
748  the <quote><literal>#</literal></quote> character to denote a comment. Such
749  lines are not processed by <application>Privoxy</application>. After
750  making any changes, there is no need to restart
751  <application>Privoxy</application> in order for the changes to take
752  effect. <application>Privoxy</application> should detect such changes 
753  automatically.
754 </para>
755
756 <![%p-not-stable;[
757 <para>
758  While under development, the configuration content is subject to change. 
759  The below documentation may not be accurate by the time you read this. 
760  Also, what constitutes a <quote>default</quote> setting, may change, so 
761  please check all your configuration files on important issues.
762 </para>
763 ]]>
764 </sect2>
765
766
767 <!--   ~~~~~       New section      ~~~~~     -->
768
769 <sect2>
770 <title>The Main Configuration File</title>
771 <para>
772  Again, the main configuration file is named <filename>config</filename> on
773  Linux/Unix/BSD and OS/2, and <filename>config.txt</filename> on Windows.
774  Configuration lines consist of an initial keyword followed by a list of
775  values, all separated by whitespace (any number of spaces or tabs). For
776  example:
777 </para>
778
779 <para>
780  <literal>
781   <msgtext> 
782    <literallayout>
783   <emphasis>blockfile blocklist.ini</emphasis>
784    </literallayout>
785   </msgtext> 
786  </literal>
787 </para>
788
789 <para>
790  Indicates that the blockfile is named <quote>blocklist.ini</quote>. (A 
791  default installation does not use this.)
792 </para>
793
794 <para>
795  A <quote><literal>#</literal></quote> indicates a comment.  Any part of a
796  line following a <quote><literal>#</literal></quote> is ignored, except if
797  the <quote><literal>#</literal></quote> is preceded by a
798  <quote><literal>\</literal></quote>.
799 </para>
800
801 <para>
802  Thus, by placing a <quote><literal>#</literal></quote> at the start of an
803  existing configuration line, you can make it a comment and it will be treated
804  as if it weren't there. This is called <quote>commenting out</quote> an
805  option and can be useful to turn off features: If you comment out the
806  <quote>logfile</quote> line, <application>Privoxy</application> will not
807  log to a file at all. Watch for the <quote>default:</quote> section in each
808  explanation to see what happens if the option is left unset (or commented
809  out). 
810 </para>
811
812 <para>
813  Long lines can be continued on the next line by using a
814  <quote><literal>\</literal></quote> as the very last character.
815 </para>
816
817 <para>
818  There are various aspects of <application>Privoxy</application> behavior 
819  that can be tuned.
820 </para>
821
822
823 <!--   ~~~~~       New section      ~~~~~     -->
824
825 <sect3>
826 <title>Defining Other Configuration Files</title>
827
828 <para>
829  <application>Privoxy</application> can use a number of other files to tell it
830  what ads to block, what cookies to accept, and perform other functions.  This
831  section of the configuration file tells <application>Privoxy</application>
832  where to find all those other files. 
833 </para>
834
835 <para>
836  On <application>Windows</application> and <application>AmigaOS</application>,
837  <application>Privoxy</application> looks for these files in the same
838  directory as the executable.  On Unix and  OS/2,
839  <application>Privoxy</application> looks for these files in the current
840  working directory. In either case, an absolute path name can be used to
841  avoid problems.
842 </para>
843
844 <para>
845  When development goes modular and multi-user, the blocker, filter, and
846  per-user config will be stored in subdirectories of <quote>confdir</quote>.
847  For now, only <filename>confdir/templates</filename> is used for storing HTML
848  templates for CGI results. 
849 </para>
850
851 <para>
852  The location of the configuration files:
853 </para>
854
855 <para>
856  <literal>
857   <msgtext> 
858    <literallayout>
859   <emphasis>confdir  /etc/privoxy</emphasis>       # No trailing /, please.
860    </literallayout>
861   </msgtext> 
862  </literal>
863 </para>
864
865 <para>
866  The directory where all logging (i.e. <filename>logfile</filename> and 
867  <filename>jarfile</filename>) takes place. No trailing
868  <quote><literal>/</literal></quote>, please: 
869 </para>
870
871 <para>
872  <literal>
873   <msgtext> 
874    <literallayout>
875   <emphasis>logdir  /var/log/privoxy</emphasis>
876    </literallayout>
877   </msgtext> 
878  </literal>
879 </para>
880
881 <para>
882  Note that all file specifications below are relative to 
883  the above two directories!
884 </para>
885
886 <para>
887  The <quote>default.action</quote> file contains patterns to specify the
888  actions to apply to requests for each site. Default: Cookies to and from all
889  destinations are kept only during the current browser session (i.e. they are
890  not saved to disk). Pop-ups are disabled for all sites. All sites are
891  filtered through selected sections of <quote>default.filter</quote>. No sites
892  are blocked. <application>Privoxy</application> displays a checkboard type
893  pattern for filtered ads and other images. The syntax of this file is
894  explained in detail <link linkend="actionsfile">below</link>. Other
895  <quote>actions</quote> files are included, and you are free to use any of
896  them. They have varying degrees of aggressiveness.
897 </para>
898
899 <para>
900  <literal>
901   <msgtext> 
902    <literallayout>
903   <emphasis>actionsfile  default.action</emphasis>
904    </literallayout>
905   </msgtext> 
906  </literal>
907 </para>
908
909 <para>
910  The <quote>default.filter</quote> file contains content modification rules 
911  that use <quote>regular expressions</quote>. These rules permit powerful
912  changes on the content of Web pages, e.g., you could disable your favorite
913  JavaScript annoyances, re-write the actual displayed text, or just have some
914  fun replacing <quote>Microsoft</quote> with <quote>MicroSuck</quote> wherever
915  it appears on a Web page. Default: whatever the developers are playing with
916  :-/
917 </para>
918
919 <para>
920  Filtering requires buffering the page content, which may appear to slow down
921  page rendering since nothing is displayed until all content has passed 
922  the filters. (It does not really take longer, but seems that way since 
923  the page is not incrementally displayed.) This effect will be more noticeable
924  on slower connections.
925
926 </para>
927
928 <para>
929  <literal>
930   <msgtext> 
931    <literallayout>
932   <emphasis>filterfile  default.filter</emphasis>
933    </literallayout>
934   </msgtext> 
935  </literal>
936 </para>
937
938 <para>
939  The logfile is where all logging and error messages are written. The logfile
940  can be useful for tracking down a problem with
941  <application>Privoxy</application> (e.g., it's not blocking an ad you
942  think it should block) but in most cases you probably will never look at it.
943 </para>
944
945 <para>
946  Your logfile will grow indefinitely, and you will probably want to
947  periodically remove it.  On Unix systems, you can do this with a cron job
948  (see <quote>man cron</quote>). For Redhat, a <command>logrotate</command> 
949  script has been included.
950 </para>
951
952 <para>
953  On SuSE Linux systems, you can place a line like <quote>/var/log/privoxy.*
954  +1024k 644 nobody.nogroup</quote> in <filename>/etc/logfiles</filename>, with
955  the effect that cron.daily will automatically archive, gzip, and empty the
956  log, when it exceeds 1M size.
957 </para>
958
959 <para>
960  Default: Log to the a file named <filename>logfile</filename>. 
961  Comment out to disable logging.
962 </para>
963
964 <para>
965  <literal>
966   <msgtext> 
967    <literallayout>
968   <emphasis>logfile  logfile</emphasis>
969    </literallayout>
970   </msgtext> 
971  </literal>
972 </para>
973
974 <para>
975  The <quote>jarfile</quote> defines where
976  <application>Privoxy</application> stores the cookies it intercepts.  Note
977  that if you use a <quote>jarfile</quote>, it may grow quite large. Default:
978  Don't store intercepted cookies.
979 </para>
980
981 <para>
982  <literal>
983   <msgtext> 
984    <literallayout>
985   <emphasis>#jarfile  jarfile</emphasis>
986    </literallayout>
987   </msgtext> 
988  </literal>
989 </para>
990
991 <para>
992  If you specify a <quote>trustfile</quote>,
993  <application>Privoxy</application> will only allow access to sites that
994  are named in the trustfile. You can also mark sites as trusted referrers,
995  with the effect that access to untrusted sites will be granted, if a link
996  from a trusted referrer was used. The link target will then be added to the
997  <quote>trustfile</quote>. This is a very restrictive feature that typical
998  users most probably want to leave disabled. Default: Disabled, don't use the
999  trust mechanism.
1000 </para>
1001
1002 <para>
1003  <literal>
1004   <msgtext> 
1005    <literallayout>
1006   <emphasis>#trustfile  trust</emphasis>
1007    </literallayout>
1008   </msgtext> 
1009  </literal>
1010 </para>
1011  
1012 <para>
1013  If you use the trust mechanism, it is a good idea to write up some on-line
1014  documentation about your blocking policy and to specify the URL(s) here. They
1015  will appear on the page that your users receive when they try to access
1016  untrusted content. Use multiple times for multiple URLs. Default: Don't
1017  display links on the <quote>untrusted</quote> info page.
1018 </para>
1019
1020 <para>
1021  <literal>
1022   <msgtext> 
1023    <literallayout>
1024   <emphasis>trust-info-url http://www.example.com/why_we_block.html</emphasis>
1025   <emphasis>trust-info-url http://www.example.com/what_we_allow.html</emphasis>
1026    </literallayout>
1027   </msgtext> 
1028  </literal>
1029 </para>
1030
1031 </sect3>
1032
1033 <!--  ~  End section  ~  -->
1034
1035
1036
1037 <!--   ~~~~~       New section      ~~~~~     -->
1038
1039 <sect3>
1040 <title>Other Configuration Options</title>
1041
1042 <para>
1043  This part of the configuration file contains options that control how
1044  <application>Privoxy</application> operates.
1045 </para>
1046
1047 <para>
1048  <quote>Admin-address</quote> should be set to the email address of the proxy
1049  administrator. It is used in many of the proxy-generated pages. Default:
1050  fill@me.in.please.
1051 </para>
1052
1053 <para>
1054  <literal>
1055   <msgtext> 
1056    <literallayout>
1057   <emphasis>#admin-address  fill@me.in.please</emphasis>
1058    </literallayout>
1059   </msgtext> 
1060  </literal>
1061 </para>
1062
1063 <para>
1064  <quote>Proxy-info-url</quote> can be set to a URL that contains more info
1065  about this <application>Privoxy</application> installation, it's
1066  configuration and policies. It is used in many of the proxy-generated pages
1067  and its use is highly recommended in multi-user installations, since your
1068  users will want to know why certain content is blocked or modified. Default:
1069  Don't show a link to on-line documentation.
1070 </para>
1071
1072 <para>
1073  <literal>
1074   <msgtext> 
1075    <literallayout>
1076   <emphasis>proxy-info-url  http://www.example.com/proxy.html</emphasis>
1077    </literallayout>
1078   </msgtext> 
1079  </literal>
1080 </para>
1081
1082 <para>
1083  <quote>Listen-address</quote> specifies the address and port where
1084  <application>Privoxy</application> will listen for connections from your
1085  Web browser.  The default is to listen on the localhost port 8118, and
1086  this is suitable for most users.  (In your web browser, under proxy
1087  configuration, list the proxy server as <quote>localhost</quote> and the
1088  port as <quote>8118</quote>).
1089 </para>
1090
1091 <para>
1092  If you already have another service running on port 8118, or if you want to
1093  serve requests from other machines (e.g. on your local network) as well, you
1094  will need to override the default. The syntax is 
1095  <quote>listen-address [&lt;ip-address&gt;]:&lt;port&gt;</quote>. If you leave
1096  out the IP address, <application>Privoxy</application> will bind to all
1097  interfaces (addresses) on your machine and may become reachable from the
1098  Internet. In that case, consider using access control lists (acl's) (see
1099  <quote>aclfile</quote> above), or a firewall.
1100 </para>
1101
1102 <para>
1103  For example, suppose you are running <application>Privoxy</application> on
1104  a machine which has the address 192.168.0.1 on your local private network
1105  (192.168.0.0) and has another outside connection with a different address.
1106  You want it to serve requests from inside only:
1107 </para>
1108
1109 <para>
1110  <literal>
1111   <msgtext> 
1112    <literallayout>
1113   <emphasis>listen-address  192.168.0.1:8118</emphasis>
1114    </literallayout>
1115   </msgtext> 
1116  </literal>
1117 </para>
1118
1119 <para>
1120  If you want it to listen on all addresses (including the outside
1121  connection):
1122 </para>
1123
1124 <para>
1125  <literal>
1126   <msgtext> 
1127    <literallayout>
1128   <emphasis>listen-address  :8118</emphasis>
1129    </literallayout>
1130   </msgtext> 
1131  </literal>
1132 </para>
1133
1134 <para>
1135  If you do this, consider using ACLs (see <quote>aclfile</quote> above). Note:
1136  you will need to point your browser(s) to the address and port that you have
1137  configured here. Default: localhost:8118 (127.0.0.1:8118).
1138 </para>
1139
1140 <para>
1141  The debug option sets the level of debugging information to log in the
1142  logfile (and to the console in the Windows version).  A debug level of 1 is
1143  informative because it will show you each request as it happens.  Higher
1144  levels of debug are probably only of interest to developers.
1145 </para>
1146
1147 <para>
1148  <literal>
1149   <msgtext> 
1150    <literallayout>
1151   debug         1 # GPC   = show each GET/POST/CONNECT request
1152   debug         2 # CONN  = show each connection status
1153   debug         4 # IO    = show I/O status
1154   debug         8 # HDR   = show header parsing
1155   debug        16 # LOG   = log all data into the logfile
1156   debug        32 # FRC   = debug force feature
1157   debug        64 # REF   = debug regular expression filter 
1158   debug       128 #       = debug fast redirects
1159   debug       256 #       = debug GIF de-animation
1160   debug       512 # CLF   = Common Log Format
1161   debug      1024 #       = debug kill pop-ups
1162   debug      4096 # INFO  = Startup banner and warnings.
1163   debug      8192 # ERROR = Non-fatal errors
1164     </literallayout>
1165   </msgtext>
1166  </literal>
1167 </para>
1168
1169 <![%p-not-stable;[
1170 <para>
1171  It is <emphasis>highly recommended</emphasis> that you enable ERROR
1172  reporting (debug 8192), at least until v3.0 is released.
1173 </para>
1174 ]]>
1175
1176 <para>
1177  The reporting of FATAL errors (i.e. ones which crash 
1178  <application>Privoxy</application>) is always on and cannot be disabled.
1179 </para>
1180
1181 <para>
1182  If you want to use CLF (Common Log Format), you should set <quote>debug
1183  512</quote> ONLY, do not enable anything else.
1184 </para>
1185
1186 <para>
1187  Multiple <quote>debug</quote> directives, are OK - they're logical-OR'd
1188  together. 
1189 </para>
1190
1191 <para>
1192  <literal>
1193   <msgtext> 
1194    <literallayout>
1195   <emphasis>debug    15     # same as setting the first 4 listed above</emphasis>
1196    </literallayout>
1197   </msgtext> 
1198  </literal>
1199 </para>
1200
1201 <para>
1202  Default:
1203 </para>
1204
1205 <para>
1206  <literal>
1207   <msgtext> 
1208    <literallayout>
1209   <emphasis>debug   1     # URLs</emphasis>
1210   <emphasis>debug   4096  # Info</emphasis>
1211   <emphasis>debug   8192  # Errors - *we highly recommended enabling this*</emphasis>
1212    </literallayout>
1213   </msgtext> 
1214  </literal>
1215 </para>
1216
1217 <para>
1218  <application>Privoxy</application> normally uses
1219  <quote>multi-threading</quote>, a software technique that permits it to
1220  handle many different requests simultaneously. In some cases you may wish to
1221  disable this -- particularly if you're trying to debug a problem.  The
1222  <quote>single-threaded</quote> option forces
1223  <application>Privoxy</application> to handle requests sequentially.
1224  Default: Multi-threaded mode.
1225 </para>
1226
1227 <para>
1228  <literal>
1229   <msgtext> 
1230    <literallayout>
1231   <emphasis>#single-threaded</emphasis>
1232    </literallayout>
1233   </msgtext> 
1234  </literal>
1235 </para>
1236
1237 <para>
1238  <quote>toggle</quote> allows you to temporarily disable all
1239  <application>Privoxy's</application>  filtering. Just set <quote>toggle
1240  0</quote>.
1241 </para>
1242
1243 <para>
1244  The Windows version of <application>Privoxy</application> puts an icon in
1245  the system tray, which also allows you to change this option.  If you
1246  right-click on that icon (or select the <quote>Options</quote> menu), one
1247  choice is <quote>Enable</quote>. Clicking on enable toggles
1248  <application>Privoxy</application> on and off. This is useful if you want
1249  to temporarily disable <application>Privoxy</application>, e.g., to access
1250  a site that requires cookies which you would otherwise have blocked. This can also
1251  be toggled via a web browser at the <application>Privoxy</application>
1252  internal address of <ulink url="http://p.p">http://p.p</ulink> on 
1253  any platform.
1254 </para>
1255
1256 <para>
1257  <quote>toggle 1</quote> means <application>Privoxy</application> runs
1258  normally, <quote>toggle 0</quote> means that
1259  <application>Privoxy</application> becomes a non-anonymizing non-blocking
1260  proxy. Default: 1 (on). 
1261 </para>
1262
1263 <para>
1264  <literal>
1265   <msgtext> 
1266    <literallayout>
1267   <emphasis>toggle    1</emphasis>
1268    </literallayout>
1269   </msgtext> 
1270  </literal>
1271 </para>
1272
1273 <para>
1274  For content filtering, i.e. the <quote>+filter</quote> and
1275  <quote>+deanimate-gif</quote> actions, it is necessary that 
1276  <application>Privoxy</application> buffers the entire document body.
1277  This can be potentially dangerous, since a server could just keep sending
1278  data indefinitely and wait for your RAM to exhaust. With nasty consequences.
1279 </para>
1280
1281 <para>
1282  The <application>buffer-limit</application> option lets you set the maximum
1283  size in Kbytes that each buffer may use. When the documents buffer exceeds
1284  this size, it is flushed to the client unfiltered and no further attempt to
1285  filter the rest of it is made. Remember that there may multiple threads
1286  running, which might require increasing the <quote>buffer-limit</quote>
1287  Kbytes <emphasis>each</emphasis>, unless you have enabled 
1288  <quote>single-threaded</quote> above.
1289 </para>
1290
1291 <para>
1292  <literal>
1293   <msgtext> 
1294    <literallayout>
1295   <emphasis>buffer-limit    4096</emphasis>
1296    </literallayout>
1297   </msgtext> 
1298  </literal>
1299 </para>
1300
1301 <para>
1302  To enable the web-based <filename>default.action</filename> file editor set
1303  <application>enable-edit-actions</application> to 1, or 0 to disable.  Note
1304  that you must have compiled <application>Privoxy</application> with
1305  support for this feature, otherwise this option has no effect. This 
1306  internal page can be reached at <ulink
1307  url="http://p.p">http://p.p</ulink>.
1308  </para>
1309
1310 <para>
1311  Security note: If this is enabled, anyone who can use the proxy
1312  can edit the actions file, and their changes will affect all users.
1313  For shared proxies, you probably want to disable this. Default: enabled.
1314 </para>
1315
1316 <para>
1317  <literal>
1318   <msgtext> 
1319    <literallayout>
1320   <emphasis>enable-edit-actions    1</emphasis>
1321    </literallayout>
1322   </msgtext> 
1323  </literal>
1324 </para>
1325
1326 <para>
1327  Allow <application>Privoxy</application> to be toggled on and off
1328  remotely, using your web browser.  Set <quote>enable-remote-toggle</quote>to
1329  1 to enable, and 0 to disable.  Note that you must have compiled 
1330  <application>Privoxy</application> with support for this feature,
1331  otherwise this option has no effect.
1332 </para>
1333
1334 <para>
1335  Security note:  If this is enabled, anyone who can use the proxy can toggle
1336  it on or off (see <ulink url="http://p.p">http://p.p</ulink>), and
1337  their changes will affect all users. For shared proxies, you probably want to
1338  disable this. Default: enabled.
1339 </para>
1340
1341 <para>
1342  <literal>
1343   <msgtext> 
1344    <literallayout>
1345   <emphasis>enable-remote-toggle    1</emphasis>
1346    </literallayout>
1347   </msgtext> 
1348  </literal>
1349 </para>
1350
1351 </sect3>
1352
1353 <!--  ~  End section  ~  -->
1354
1355
1356 <!--   ~~~~~       New section      ~~~~~     -->
1357
1358 <sect3>
1359 <title>Access Control List (ACL)</title>
1360 <para>
1361  Access controls are included at the request of some ISPs and systems
1362  administrators, and are not usually needed by individual users. Please note
1363  the warnings in the FAQ that this proxy is not intended to be a substitute
1364  for a firewall or to encourage anyone to defer addressing basic security
1365  weaknesses.
1366 </para>
1367
1368 <para>
1369  If no access settings are specified, the proxy talks to anyone that
1370  connects. If any access settings file are specified, then the proxy
1371  talks only to IP addresses permitted somewhere in this file and not
1372  denied later in this file.
1373 </para>
1374
1375 <para>
1376  Summary -- if using an ACL:
1377 </para>
1378
1379  <simplelist>
1380   <member>
1381    Client must have permission to receive service.
1382   </member>
1383  </simplelist>
1384  <simplelist>
1385   <member>
1386    LAST match in ACL wins.
1387   </member>
1388  </simplelist>
1389  <simplelist>
1390   <member>
1391    Default behavior is to deny service.
1392   </member>
1393  </simplelist>
1394
1395 <para>
1396  The syntax for an entry in the Access Control List is:
1397 </para>
1398
1399 <para>
1400  <literal>
1401   <msgtext> 
1402    <literallayout>
1403   ACTION    SRC_ADDR[/SRC_MASKLEN]    [ DST_ADDR[/DST_MASKLEN] ]
1404    </literallayout>
1405   </msgtext> 
1406  </literal>
1407 </para>
1408
1409 <para>
1410  Where the individual fields are:
1411 </para>
1412
1413 <para>
1414  <literal>
1415   <msgtext> 
1416    <literallayout>
1417  <emphasis>ACTION</emphasis>      = <quote>permit-access</quote> or <quote>deny-access</quote>
1418
1419  <emphasis>SRC_ADDR</emphasis>    = client hostname or dotted IP address
1420  <emphasis>SRC_MASKLEN</emphasis> = number of bits in the subnet mask for the source
1421
1422  <emphasis>DST_ADDR</emphasis>    = server or forwarder hostname or dotted IP address
1423  <emphasis>DST_MASKLEN</emphasis> = number of bits in the subnet mask for the target
1424    </literallayout>
1425   </msgtext> 
1426  </literal>
1427 </para>
1428
1429
1430 <para> 
1431  The field separator (FS) is whitespace (space or tab).
1432 </para>
1433
1434 <para>
1435  IMPORTANT NOTE: If <application>Privoxy</application> is using a
1436  forwarder (see below) or a gateway for a particular destination URL, the
1437  <literal>DST_ADDR</literal> that is examined is the address of the forwarder
1438  or the gateway and <emphasis>NOT</emphasis> the address of the ultimate
1439  target. This is necessary because it may be impossible for the local
1440  <application>Privoxy</application> to determine the address of the
1441  ultimate target (that's often what gateways are used for).
1442 </para>
1443
1444 <para>
1445  Here are a few examples to show how the ACL features work:
1446 </para>
1447
1448 <para>
1449  <quote>localhost</quote> is OK -- no DST_ADDR implies that
1450  <emphasis>ALL</emphasis> destination addresses are OK:
1451 </para>
1452
1453 <para>
1454  <literal>
1455   <msgtext> 
1456    <literallayout>
1457   <emphasis>permit-access  localhost</emphasis>
1458    </literallayout>
1459   </msgtext> 
1460  </literal>
1461 </para>
1462
1463 <para>
1464  A silly example to illustrate permitting any host on the class-C subnet with
1465  <application>Privoxy</application> to go anywhere:
1466 </para>
1467
1468 <para>
1469  <literal>
1470   <msgtext> 
1471    <literallayout>
1472   <emphasis>permit-access    www.privoxy.com/24</emphasis>
1473    </literallayout>
1474   </msgtext> 
1475  </literal>
1476 </para>
1477
1478 <para>
1479  Except deny one particular IP address from using it at all:
1480 </para>
1481
1482 <para>
1483  <literal>
1484   <msgtext> 
1485    <literallayout>
1486   <emphasis>deny-access      ident.privoxy.com</emphasis>
1487    </literallayout>
1488   </msgtext> 
1489  </literal>
1490 </para>
1491
1492 <para>
1493  You can also specify an explicit network address and subnet mask.
1494  Explicit addresses do not have to be resolved to be used.
1495 </para>
1496
1497 <para>
1498  <literal>
1499   <msgtext> 
1500    <literallayout>
1501   <emphasis>permit-access    207.153.200.0/24</emphasis>
1502    </literallayout>
1503   </msgtext> 
1504  </literal>
1505 </para>
1506
1507 <para>
1508  A subnet mask of 0 matches anything, so the next line permits everyone.
1509 </para>
1510
1511 <para>
1512  <literal>
1513   <msgtext> 
1514    <literallayout>
1515   <emphasis>permit-access    0.0.0.0/0</emphasis>
1516    </literallayout>
1517   </msgtext> 
1518  </literal>
1519 </para>
1520
1521 <para>
1522  Note, you <emphasis>cannot</emphasis> say:
1523 </para>
1524
1525 <para>
1526  <literal>
1527   <msgtext> 
1528    <literallayout>
1529   <emphasis>permit-access    .org</emphasis>
1530    </literallayout>
1531   </msgtext> 
1532  </literal>
1533 </para>
1534
1535 <para>
1536  to allow all *.org domains. Every IP address listed must resolve fully.
1537 </para>
1538
1539 <para>
1540  An ISP may want to provide a <application>Privoxy</application> that is
1541  accessible by <quote>the world</quote> and yet restrict use of some of their
1542  private content to hosts on its internal network (i.e. its own subscribers).
1543  Say, for instance the ISP owns the Class-B IP address block 123.124.0.0 (a 16
1544  bit netmask). This is how they could do it:
1545 </para>
1546
1547 <para>
1548  <literal>
1549   <msgtext> 
1550    <literallayout>
1551  <emphasis>permit-access 0.0.0.0/0   0.0.0.0/0</emphasis>   # other clients can go anywhere 
1552                                        # with the following exceptions:
1553  
1554  <emphasis>deny-access</emphasis>   0.0.0.0/0   123.124.0.0/16 # block all external requests for
1555                                           # sites on the ISP's network
1556
1557  <emphasis>permit 0.0.0.0/0   www.my_isp.com</emphasis>        # except for the ISP's main 
1558                                           # web site
1559
1560  <emphasis>permit 123.124.0.0/16 0.0.0.0/0</emphasis>          # the ISP's clients can go 
1561                                           # anywhere
1562    </literallayout>
1563   </msgtext> 
1564  </literal>
1565 </para>
1566
1567 <para>
1568  Note that if some hostnames are listed with multiple IP addresses, 
1569  the primary value returned by DNS (via gethostbyname()) is used. Default:
1570  Anyone can access the proxy.
1571 </para>
1572
1573 </sect3>
1574
1575 <!--  ~  End section  ~  -->
1576
1577
1578 <!--   ~~~~~       New section      ~~~~~     -->
1579
1580 <sect3 id="forwarding">
1581 <title>Forwarding</title>
1582
1583 <para>
1584  This feature allows chaining of HTTP requests via multiple proxies.
1585  It can be used to better protect privacy and confidentiality when
1586  accessing specific domains by routing requests to those domains
1587  to a special purpose filtering proxy such as lpwa.com. Or to use 
1588  a caching proxy to speed up browsing.
1589 </para>
1590
1591 <para>
1592  It can also be used in an environment with multiple networks to route
1593  requests via multiple gateways allowing transparent access to multiple
1594  networks without having to modify browser configurations.
1595 </para>
1596
1597 <para>
1598  Also specified here are SOCKS proxies. <application>Privoxy</application>
1599  SOCKS 4 and SOCKS 4A. The difference is that SOCKS 4A will resolve the target
1600  hostname using DNS on the SOCKS server, not our local DNS client.
1601 </para>
1602
1603 <para>
1604  The syntax of each line is:
1605 </para>
1606
1607 <para>
1608  <literal>
1609   <msgtext> 
1610    <literallayout>
1611  <emphasis>forward target_domain[:port] http_proxy_host[:port]</emphasis>
1612  <emphasis>forward-socks4  target_domain[:port] socks_proxy_host[:port] http_proxy_host[:port]</emphasis>
1613  <emphasis>forward-socks4a target_domain[:port] socks_proxy_host[:port] http_proxy_host[:port]</emphasis>
1614    </literallayout>
1615   </msgtext> 
1616  </literal>
1617 </para>
1618
1619 <para>
1620  If http_proxy_host is <quote>.</quote>, then requests are not forwarded to a
1621  HTTP proxy but are made directly to the web servers.
1622 </para>
1623
1624 <para>
1625  Lines are checked in sequence, and the last match wins.
1626 </para>
1627
1628 <para>
1629  There is an implicit line equivalent to the following, which specifies that
1630  anything not finding a match on the list is to go out without forwarding
1631  or gateway protocol, like so:
1632 </para>
1633
1634 <para>
1635  <literal>
1636   <msgtext> 
1637    <literallayout>
1638   <emphasis>forward   .*   .       </emphasis># implicit
1639    </literallayout>
1640   </msgtext> 
1641  </literal>
1642 </para>
1643
1644 <para>
1645  In the following common configuration, everything goes to Lucent's LPWA,
1646  except SSL on port 443 (which it doesn't handle):
1647 </para>
1648
1649 <para>
1650  <literal>
1651   <msgtext> 
1652    <literallayout>
1653  <emphasis>forward   .*     lpwa.com:8000</emphasis>
1654  <emphasis>forward   :443   .</emphasis>
1655    </literallayout>
1656   </msgtext> 
1657  </literal>
1658 </para>
1659
1660 <para>
1661 <!--
1662  See the FAQ for instructions on how to automate the login procedure for LPWA.
1663 --> 
1664  Some users have reported difficulties related to LPWA's use of
1665  <quote>.</quote> as the last element of the domain, and have said that this
1666  can be fixed with this:
1667 </para>
1668    
1669 <para>
1670  <literal>
1671   <msgtext> 
1672    <literallayout>
1673   <emphasis>forward   lpwa.  lpwa.com:8000</emphasis>
1674    </literallayout>
1675   </msgtext> 
1676  </literal>
1677 </para>
1678  
1679 <para>
1680  (NOTE: the syntax for specifying target_domain has changed since the
1681  previous paragraph was written -- it will not work now.  More information
1682  is welcome.)
1683 </para>
1684
1685 <para>
1686  In this fictitious example, everything goes via an ISP's caching proxy,
1687  except requests to that ISP:
1688 </para>
1689
1690 <para>
1691  <literal>
1692   <msgtext> 
1693    <literallayout>
1694  <emphasis>forward    .*         caching.myisp.net:8000</emphasis>
1695  <emphasis>forward    myisp.net  .</emphasis>
1696    </literallayout>
1697   </msgtext> 
1698  </literal>
1699 </para>
1700
1701 <para>
1702  For the @home network, we're told the forwarding configuration is this:
1703 </para>
1704
1705
1706 <para>
1707  <literal>
1708   <msgtext> 
1709    <literallayout>
1710   <emphasis>forward    .*    proxy:8080</emphasis>
1711    </literallayout>
1712   </msgtext> 
1713  </literal>
1714 </para>
1715
1716 <para>
1717  Also, we're told they insist on getting cookies and JavaScript, so you should 
1718  allow cookies from home.com. We consider JavaScript a potential security risk.
1719  Java need not be enabled.
1720 </para>
1721
1722 <para>
1723  In this example direct connections are made to all <quote>internal</quote>
1724  domains, but everything else goes through Lucent's LPWA by way of the
1725  company's SOCKS gateway to the Internet.
1726 </para>
1727
1728 <para>
1729  <literal>
1730   <msgtext> 
1731    <literallayout>
1732  <emphasis>forward-socks4  .*  lpwa.com:8000  firewall.my_company.com:1080</emphasis>
1733  <emphasis>forward    my_company.com  .</emphasis>
1734    </literallayout>
1735   </msgtext> 
1736  </literal>
1737 </para>
1738
1739 <para>
1740  This is how you could set up a site that always uses SOCKS but no forwarders:
1741 </para>
1742
1743 <para>
1744  <literal>
1745   <msgtext> 
1746    <literallayout>
1747   <emphasis>forward-socks4a   .*  .  firewall.my_company.com:1080</emphasis>
1748    </literallayout>
1749   </msgtext> 
1750  </literal>
1751 </para>
1752
1753 <para>
1754  An advanced example for network administrators:
1755 </para>
1756
1757 <para>
1758  If you have links to multiple ISPs that provide various special content to
1759  their subscribers, you can configure forwarding to pass requests to the
1760  specific host that's connected to that ISP so that everybody can see all
1761  of the content on all of the ISPs.
1762 </para>
1763
1764 <para>
1765  This is a bit tricky, but here's an example:
1766 </para>
1767
1768
1769 <para>
1770  host-a has a PPP connection to isp-a.com. And host-b has a PPP connection to
1771  isp-b.com. host-a can run a <application>Privoxy</application> proxy with
1772  forwarding like this: 
1773 </para>
1774
1775 <para>
1776  <literal>
1777   <msgtext> 
1778    <literallayout>
1779  <emphasis>forward    .*         .</emphasis>
1780  <emphasis>forward    isp-b.com  host-b:8118</emphasis>
1781    </literallayout>
1782   </msgtext> 
1783  </literal>
1784 </para>
1785
1786 <para>
1787  host-b can run a <application>Privoxy</application> proxy with forwarding
1788  like this: 
1789 </para>
1790
1791 <para>
1792  <literal>
1793   <msgtext> 
1794    <literallayout>
1795  <emphasis>forward    .*          .</emphasis>
1796  <emphasis>forward    isp-a.com   host-a:8118</emphasis>
1797    </literallayout>
1798   </msgtext> 
1799  </literal>
1800 </para>
1801
1802 <para>
1803  Now, <emphasis>anyone</emphasis> on the Internet (including users on host-a
1804  and host-b) can set their browser's proxy to <emphasis>either</emphasis>
1805  host-a or host-b and be able to browse the content on isp-a or isp-b.
1806 </para>
1807
1808 <para>
1809  Here's another practical example, for University of Kent at
1810  Canterbury students with a network connection in their room, who
1811  need to use the University's Squid web cache.
1812 </para>
1813
1814 <para>
1815  <literal>
1816   <msgtext> 
1817    <literallayout>
1818  <emphasis>forward  *. ssbcache.ukc.ac.uk:3128</emphasis>  # Use the proxy, except for:
1819  <emphasis>forward  .ukc.ac.uk            .    </emphasis> # Anything on the same domain as us
1820  <emphasis>forward  *                     .    </emphasis> # Host with no domain specified
1821  <emphasis>forward  129.12.*.*            .    </emphasis> # A dotted IP on our /16 network.
1822  <emphasis>forward  127.*.*.*             .    </emphasis> # Loopback address
1823  <emphasis>forward  localhost.localdomain .    </emphasis> # Loopback address
1824  <emphasis>forward  www.ukc.mirror.ac.uk  .    </emphasis> # Specific host
1825    </literallayout>
1826   </msgtext> 
1827  </literal>
1828 </para>
1829
1830 <para>
1831  If you intend to chain <application>Privoxy</application> and 
1832  <application>squid</application> locally, then chain as 
1833  <literal>browser -> squid -> privoxy</literal> is the recommended way. 
1834 </para>
1835
1836 <para>
1837 Your squid configuration could then look like this (assuming that the IP
1838 address of the box is <literal>192.168.0.1</literal> ):
1839 </para>
1840
1841 <para>
1842  <literal>
1843   <msgtext> 
1844    <literallayout>
1845   # Define Privoxy as parent cache 
1846  <!-- per feedback from user...
1847   cache_peer 127.0.0.1 8118 parent 0 no-query 
1848  --> 
1849   cache_peer 192.168.0.1 parent 8118 0 no-query
1850
1851   # don't listen to the whole world
1852   http_port 192.168.0.1:3128
1853
1854   # define the local lan
1855   acl mylocallan src 192.168.0.1-192.168.0.5/255.255.255.255
1856
1857   # grant access for http to local lan
1858   http_access allow mylocallan
1859   
1860   # Define ACL for protocol FTP 
1861   acl FTP proto FTP 
1862
1863   # Do not forward ACL FTP to privoxy
1864   always_direct allow FTP 
1865
1866   # Do not forward ACL CONNECT (https) to privoxy
1867   always_direct allow CONNECT 
1868
1869   # Forward the rest to privoxy
1870   never_direct allow all 
1871    </literallayout>
1872   </msgtext> 
1873  </literal>
1874 </para>
1875
1876 </sect3>
1877
1878 <!--  ~  End section  ~  -->
1879
1880
1881 <!--   ~~~~~       New section      ~~~~~     -->
1882
1883 <sect3>
1884 <title>Windows GUI Options</title>
1885 <!--
1886 Removed references to Win32. HB 09/23/01
1887 -->
1888 <para>
1889  <application>Privoxy</application> has a number of options specific to the
1890  Windows GUI interface:
1891 </para>
1892
1893 <para>
1894  If <quote>activity-animation</quote> is set to 1, the
1895  <application>Privoxy</application> icon will animate when
1896  <quote>Privoxy</quote> is active. To turn off, set to 0.
1897 </para>
1898
1899 <para>
1900  <literal>
1901   <msgtext> 
1902    <literallayout>
1903   <emphasis>activity-animation   1</emphasis>
1904    </literallayout>
1905   </msgtext> 
1906  </literal>
1907 </para>
1908
1909 <para>
1910  If <quote>log-messages</quote> is set to 1,
1911  <application>Privoxy</application> will log messages to the console
1912  window:
1913 </para>
1914
1915 <para>
1916  <literal>
1917   <msgtext> 
1918    <literallayout>
1919   <emphasis>log-messages       1</emphasis>
1920    </literallayout>
1921   </msgtext> 
1922  </literal>
1923 </para>
1924
1925 <para> 
1926  If <quote>log-buffer-size</quote> is set to 1, the size of the log buffer,
1927  i.e. the amount of memory used for the log messages displayed in the
1928  console window, will be limited to <quote>log-max-lines</quote> (see below).
1929 </para>
1930
1931 <para>
1932  Warning: Setting this to 0 will result in the buffer to grow infinitely and
1933  eat up all your memory!
1934 </para>
1935
1936 <para>
1937  <literal>
1938   <msgtext> 
1939    <literallayout>
1940   <emphasis>log-buffer-size      1</emphasis>
1941    </literallayout>
1942   </msgtext> 
1943  </literal>
1944 </para>
1945
1946 <para>
1947  <application>log-max-lines</application> is the maximum number of lines held
1948  in the log buffer. See above.
1949 </para>
1950
1951 <para>
1952  <literal>
1953   <msgtext> 
1954    <literallayout>
1955   <emphasis>log-max-lines      200</emphasis>
1956    </literallayout>
1957   </msgtext> 
1958  </literal>
1959 </para>
1960
1961 <para>
1962  If <quote>log-highlight-messages</quote> is set to 1,
1963  <application>Privoxy</application> will highlight portions of the log
1964  messages with a bold-faced font:
1965 </para>
1966
1967 <para>
1968  <literal>
1969   <msgtext> 
1970    <literallayout>
1971   <emphasis>log-highlight-messages   1</emphasis>
1972    </literallayout>
1973   </msgtext> 
1974  </literal>
1975 </para>
1976
1977 <para>
1978  The font used in the console window:
1979 </para>
1980
1981 <para>
1982  <literal>
1983   <msgtext> 
1984    <literallayout>
1985   <emphasis>log-font-name        Comic Sans MS</emphasis>
1986    </literallayout>
1987   </msgtext> 
1988  </literal>
1989 </para>
1990
1991 <para>
1992  Font size used in the console window:
1993 </para>
1994
1995 <para>
1996  <literal>
1997   <msgtext> 
1998    <literallayout>
1999   <emphasis>log-font-size        8</emphasis>
2000    </literallayout>
2001   </msgtext> 
2002  </literal>
2003 </para>
2004
2005 <para>  
2006  <quote>show-on-task-bar</quote> controls whether or not
2007  <application>Privoxy</application> will appear as a button on the Task bar
2008  when minimized:
2009 </para>
2010
2011 <para>
2012  <literal>
2013   <msgtext> 
2014    <literallayout>
2015   <emphasis>show-on-task-bar     0</emphasis>
2016    </literallayout>
2017   </msgtext> 
2018  </literal>
2019 </para>
2020
2021 <para>
2022  If <quote>close-button-minimizes</quote> is set to 1, the Windows close
2023  button will minimize <application>Privoxy</application> instead of closing
2024  the program (close with the exit option on the File menu).
2025 </para>
2026
2027 <para>
2028  <literal>
2029   <msgtext> 
2030    <literallayout>
2031   <emphasis>close-button-minimizes  1</emphasis>
2032    </literallayout>
2033   </msgtext> 
2034  </literal>
2035 </para>
2036
2037 <para>
2038  The <quote>hide-console</quote> option is specific to the MS-Win console
2039  version of <application>Privoxy</application>. If this option is used,
2040  <application>Privoxy</application> will disconnect from and hide  the
2041  command console.
2042 </para>
2043
2044 <para>
2045  <literal>
2046   <msgtext> 
2047    <literallayout>
2048   #hide-console
2049    </literallayout>
2050   </msgtext> 
2051  </literal>
2052 </para>
2053
2054 </sect3>
2055 </sect2>
2056
2057 <!--  ~  End section  ~  -->
2058
2059
2060 <!--   ~~~~~       New section      ~~~~~     -->
2061 <sect2 id="actionsfile">
2062 <title>The Actions File</title>
2063
2064 <para>
2065  The <quote>default.action</quote> file (formerly
2066  <filename>actionsfile</filename> or <filename>ijb.action</filename>) is used
2067  to define what actions <application>Privoxy</application> takes, and thus
2068  determines how ad images, cookies and various other aspects of HTTP content
2069  and transactions are handled. These can be accepted or rejected for all
2070  sites, or just those sites you choose. See below for a complete list of 
2071  actions. 
2072 </para>
2073 <para> 
2074  Anything you want can blocked, including ads, banners, or just some obnoxious
2075  URL that you would rather not see. Cookies can be accepted or rejected, or
2076  accepted only during the current browser session (i.e. not written to disk).
2077  Changes to <filename>default.action</filename> should be immediately visible
2078  to <application>Privoxy</application> without the need to restart.
2079 </para>
2080
2081 <para>
2082  Note that some sites may misbehave, or possibly not work at all with some 
2083  actions. This may require some tinkering with the rules to get the most 
2084  mileage of <application>Privoxy's</application> features, and still be 
2085  able to see and enjoy just what you want to. There is no general rule of
2086  thumb on these things. There just are too many variables, and sites are 
2087  always changing.
2088
2089 </para>
2090
2091 <para>
2092  The easiest way to edit the <quote>actions</quote> file is with a browser by
2093  loading <ulink url="http://p.p/">http://p.p/</ulink>, and then select
2094  <quote>Edit Actions List</quote>. A text editor can also be used.
2095 </para>
2096
2097 <para>
2098  To determine which actions apply to a request, the URL of the request is
2099  compared to all patterns in this file. Every time it matches, the list of
2100  applicable actions for the URL is incrementally updated. You can trace
2101  this process by visiting <ulink
2102  url="http://p.p/show-url-info">http://p.p/show-url-info</ulink>. 
2103 </para>
2104
2105
2106 <para>
2107  There are four types of lines in this file: comments (begin with a 
2108  <quote>#</quote> character), actions, aliases and patterns, all of which are
2109  explained below, as well as the configuration file syntax that 
2110  <application>Privoxy</application> understands.
2111
2112 </para>
2113
2114
2115 <!--   ~~~~~       New section      ~~~~~     -->
2116 <sect3>
2117 <title>URL Domain and Path Syntax</title>
2118 <para>
2119  Generally, a pattern has the form &lt;domain&gt;/&lt;path&gt;, where both the
2120  &lt;domain&gt; and &lt;path&gt; part are optional. If you only specify a
2121  domain part, the <quote>/</quote> can be left out:
2122 </para>
2123
2124 <para>
2125  <emphasis>www.example.com</emphasis> - is a domain only pattern and will match any request to
2126  <quote>www.example.com</quote>.
2127 </para>
2128
2129 <para>
2130  <emphasis>www.example.com/</emphasis> - means exactly the same.
2131 </para>
2132
2133 <para>
2134  <emphasis>www.example.com/index.html</emphasis> - matches only the single
2135  document <quote>/index.html</quote> on <quote>www.example.com</quote>.
2136 </para>
2137
2138 <para>
2139  <emphasis>/index.html</emphasis> - matches the document <quote>/index.html</quote>, 
2140  regardless of the domain. So would match any page named <quote>index.html</quote>
2141  on any site.
2142 </para>
2143
2144 <para>
2145  <emphasis>index.html</emphasis> - matches nothing, since it would be
2146  interpreted as a domain name and there is no top-level domain called
2147  <quote>.html</quote>.
2148 </para>
2149
2150 <para>
2151  The matching of the domain part offers some flexible options: if the
2152  domain starts or ends with a dot, it becomes unanchored at that end. 
2153  For example:
2154 </para>
2155
2156 <para>
2157  <emphasis>.example.com</emphasis> - matches any domain or sub-domain that
2158  <emphasis>ENDS</emphasis> in <quote>.example.com</quote>.
2159 </para>
2160
2161 <para>
2162  <emphasis>www.</emphasis> - matches any domain that <emphasis>STARTS</emphasis> with
2163  <quote>www</quote>.
2164 </para>
2165
2166 <para>
2167  Additionally, there are wild-cards that you can use in the domain names
2168  themselves. They work pretty similar to shell wild-cards: <quote>*</quote>
2169  stands for zero or more arbitrary characters, <quote>?</quote> stands for
2170  any single character. And you can define character classes in square
2171  brackets and they can be freely mixed:
2172 </para>
2173
2174 <para>
2175  <emphasis>ad*.example.com</emphasis> - matches <quote>adserver.example.com</quote>, 
2176  <quote>ads.example.com</quote>, etc but not <quote>sfads.example.com</quote>.
2177 </para>
2178
2179 <para>
2180  <emphasis>*ad*.example.com</emphasis> - matches all of the above, and then some.
2181 </para>
2182
2183 <para>
2184  <emphasis>.?pix.com</emphasis> - matches <quote>www.ipix.com</quote>,
2185  <quote>pictures.epix.com</quote>, <quote>a.b.c.d.e.upix.com</quote>, etc. 
2186 </para>
2187
2188 <para>
2189  <emphasis>www[1-9a-ez].example.com</emphasis> - matches <quote>www1.example.com</quote>, 
2190  <quote>www4.example.com</quote>, <quote>wwwd.example.com</quote>, 
2191  <quote>wwwz.example.com</quote>, etc., but <emphasis>not</emphasis> 
2192  <quote>wwww.example.com</quote>.
2193 </para>
2194
2195 <para>
2196  If <application>Privoxy</application> was compiled with
2197  <quote>pcre</quote> support (the default), Perl compatible regular expressions
2198  can be used. These are more flexible and powerful than other types 
2199  of <quote>regular expressions</quote>. See the <filename>pcre/docs/</filename> directory or <quote>man
2200  perlre</quote> (also available on  <ulink
2201  url="http://www.perldoc.com/perl5.6/pod/perlre.html">http://www.perldoc.com/perl5.6/pod/perlre.html</ulink>)
2202  for details. A brief discussion of regular expressions is in the 
2203  <link linkend="regex">Appendix</link>. For instance:
2204 </para>
2205
2206 <para>
2207  <emphasis>/.*/advert[0-9]+\.jpe?g</emphasis>  - would match a URL from any
2208  domain, with any path that includes <quote>advert</quote> followed
2209  immediately by one or more digits, then a <quote>.</quote> and ending in
2210  either <quote>jpeg</quote> or <quote>jpg</quote>. So we match
2211  <quote>example.com/ads/advert2.jpg</quote>, and
2212  <quote>www.example.com/ads/banners/advert39.jpeg</quote>, but not
2213  <quote>www.example.com/ads/banners/advert39.gif</quote> (no gifs in the
2214  example pattern).
2215 </para>
2216
2217 <para>
2218  Please note that matching in the path is case
2219  <emphasis>INSENSITIVE</emphasis> by default, but you can switch to case
2220  sensitive at any point in the pattern by using the 
2221  <quote>(?-i)</quote> switch:
2222 </para>
2223
2224 <para>
2225  <emphasis>www.example.com/(?-i)PaTtErN.*</emphasis> - will match only
2226  documents whose path starts with <quote>PaTtErN</quote> in
2227  <emphasis>exactly</emphasis> this capitalization.
2228 </para>
2229
2230 </sect3>
2231
2232 <!--  ~  End section  ~  -->
2233
2234
2235
2236 <!--   ~~~~~       New section      ~~~~~     -->
2237
2238 <sect3>
2239 <title>Actions</title>
2240 <para>
2241  Actions are enabled if preceded with a <quote>+</quote>, and disabled if 
2242  preceded with a <quote>-</quote>. Actions are invoked by enclosing the 
2243  action name in curly braces (e.g. {+some_action}), followed by a list of 
2244  URLs to which the action applies. There are three classes of actions:
2245 </para>
2246
2247 <para>
2248  <itemizedlist>
2249
2250  <listitem>
2251   <para>  
2252    Boolean (e.g. <quote>+/-block</quote>):
2253   </para>
2254   <para>
2255    <literal>
2256     <msgtext> 
2257      <literallayout>
2258   <emphasis>{+name}</emphasis>        # enable this action
2259   <emphasis>{-name}</emphasis>        # disable this action
2260      </literallayout>
2261     </msgtext> 
2262    </literal>
2263   </para>
2264  </listitem>
2265
2266
2267  <listitem>
2268   <para>  
2269    parameterized (e.g. <quote>+/-hide-user-agent</quote>):
2270   </para>
2271   <para>
2272    <literal>
2273     <msgtext> 
2274      <literallayout>
2275   <emphasis>{+name{param}}</emphasis>  # enable action and set parameter to <quote>param</quote>
2276   <emphasis>{-name}</emphasis>         # disable action
2277      </literallayout>
2278     </msgtext> 
2279    </literal>
2280   </para>
2281  </listitem>
2282  
2283  <listitem>
2284   <para>  
2285    Multi-value (e.g. <quote>{+/-add-header{Name: value}}</quote>, <quote>{+/-wafer{name=value}}</quote>):
2286   </para>
2287   <para>
2288    <literal>
2289     <msgtext> 
2290      <literallayout>
2291   <emphasis>{+name{param}}</emphasis>   # enable action and add parameter <quote>param</quote>
2292   <emphasis>{-name{param}}</emphasis>   # remove the parameter <quote>param</quote>
2293   <emphasis>{-name}</emphasis>          # disable this action totally
2294      </literallayout>
2295     </msgtext> 
2296    </literal>
2297   </para>
2298  </listitem>
2299
2300  </itemizedlist>
2301 </para>
2302
2303 <para>
2304  If nothing is specified in this file, no <quote>actions</quote> are taken.
2305  So in this case <application>Privoxy</application> would just be a
2306  normal, non-blocking, non-anonymizing proxy. You must specifically
2307  enable the privacy and blocking features you need (although the 
2308  provided default <filename>default.action</filename> file will 
2309  give a good starting point).
2310 </para>
2311
2312 <para>
2313  Later defined actions always over-ride earlier ones.  So exceptions 
2314  to any rules you make, should come in the latter part of the file. For
2315  multi-valued actions, the actions are applied in the order they are
2316  specified.
2317 </para>
2318
2319 <para>
2320  The list of valid <application>Privoxy</application> <quote>actions</quote> are:
2321 </para>
2322
2323 <para>
2324  <itemizedlist>
2325  
2326  <listitem>
2327   <para>  
2328    Add the specified HTTP header, which is not checked for validity.
2329    You may specify this many times to specify many different headers:
2330   </para>
2331   <para>
2332    <literal>
2333     <msgtext> 
2334      <literallayout>
2335   <emphasis>+add-header{Name: value}</emphasis>
2336      </literallayout>
2337     </msgtext> 
2338    </literal>
2339   </para>
2340  </listitem>
2341  
2342  
2343  <listitem>
2344   <para>  
2345    Block this URL totally. In a default installation, a <quote>blocked</quote>
2346    URL will result in bright red banner that says <quote>BLOCKED</quote>, 
2347    with a reason why it is being blocked, and an option to see it anyway.
2348    The page displayed for this is the <quote>blocked</quote> template 
2349    file.
2350   </para>
2351   <para>
2352    <literal>
2353     <msgtext> 
2354      <literallayout>
2355   <emphasis>+block</emphasis>
2356      </literallayout>
2357     </msgtext> 
2358    </literal>
2359   </para>
2360  </listitem>
2361  
2362  
2363  <listitem>
2364   <para>  
2365    De-animate all animated GIF images, i.e. reduce them to their last frame.
2366    This will also shrink the images considerably (in bytes, not pixels!). If
2367    the option <quote>first</quote> is given, the first frame of the animation
2368    is used as the replacement. If <quote>last</quote> is given, the last frame
2369    of the animation is used instead, which probably makes more sense for most
2370    banner animations, but also has the risk of not showing the entire last
2371    frame (if it is only a delta to an earlier frame).
2372   </para>
2373   <para>
2374    <literal>
2375     <msgtext> 
2376      <literallayout>
2377   <emphasis>+deanimate-gifs{last}</emphasis>
2378   <emphasis>+deanimate-gifs{first}</emphasis>
2379      </literallayout>
2380     </msgtext> 
2381    </literal>
2382   </para>
2383  </listitem>
2384  
2385  <listitem>
2386   <para>
2387    <quote>+downgrade</quote> will downgrade HTTP/1.1 client requests to
2388    HTTP/1.0 and downgrade the responses as well. Use this action for servers
2389    that use HTTP/1.1 protocol features that
2390    <application>Privoxy</application> doesn't handle well yet. HTTP/1.1 
2391    is only partially implemented. Default is not to downgrade requests.
2392   </para>
2393   <para>
2394    <literal>
2395     <msgtext> 
2396      <literallayout>
2397   <emphasis>+downgrade</emphasis>
2398      </literallayout>
2399     </msgtext> 
2400    </literal>
2401   </para>
2402  </listitem> 
2403  
2404  <listitem>
2405   <para>  
2406    Many sites, like yahoo.com, don't just link to other sites. Instead, they
2407    will link to some script on their own server, giving the destination as a
2408    parameter, which will then redirect you to the final target. URLs resulting
2409    from this scheme typically look like:
2410    <emphasis>http://some.place/some_script?http://some.where-else</emphasis>.
2411   </para>
2412   <para>
2413    Sometimes, there are even multiple consecutive redirects encoded in the
2414    URL. These redirections via scripts make your web browsing more traceable,
2415    since the server from which you follow such a link can see where you go to.
2416    Apart from that, valuable bandwidth and time is wasted, while your browser
2417    ask the server for one redirect after the other. Plus, it feeds the
2418    advertisers.
2419   </para>
2420   <para>
2421    The <quote>+fast-redirects</quote> option enables interception of these
2422    types of requests by <application>Privoxy</application>, who will cut off
2423    all but the last valid URL in the request and send a local redirect back to
2424    your browser without contacting the intermediate site(s).
2425   </para>
2426   <para>
2427    <literal>
2428     <msgtext> 
2429      <literallayout>
2430   <emphasis>+fast-redirects</emphasis>
2431      </literallayout>
2432     </msgtext> 
2433    </literal>
2434   </para>
2435  </listitem>
2436
2437  <listitem>
2438   <para>  
2439    Apply the filters in the <literal>section_header</literal> 
2440    section of the <filename>default.filter</filename> file to the site(s).
2441    <filename>default.filter</filename> sections are grouped according to like
2442    functionality. <application>Filters</application> can be used to 
2443    re-write any of the raw page content. This is a potentially a 
2444    very powerful feature!
2445   </para> 
2446    
2447   <para>
2448    <literal>
2449     <msgtext> 
2450      <literallayout>
2451  <emphasis>+filter{section_header}</emphasis>
2452      </literallayout>
2453     </msgtext> 
2454    </literal>
2455   </para>
2456
2457   <para>   
2458    Filter sections that are pre-defined in the supplied
2459    <filename>default.filter</filename> include:
2460   </para>
2461
2462  <blockquote>
2463   <simplelist>
2464    <member>
2465      <emphasis>html-annoyances</emphasis>:  Get rid of particularly annoying HTML abuse.
2466    </member>
2467   </simplelist>
2468   <simplelist>
2469    <member>
2470     <emphasis>js-annoyances</emphasis>:    Get rid of particularly annoying JavaScript abuse
2471    </member>
2472   </simplelist>
2473   <simplelist>
2474    <member>
2475     <emphasis>no-poups</emphasis>:         Kill all popups in JS and HTML
2476    </member>
2477   </simplelist>
2478   <simplelist>
2479    <member>
2480     <emphasis>frameset-borders</emphasis>: Give frames a border
2481    </member>
2482   </simplelist>
2483   <simplelist>
2484    <member>
2485     <emphasis>webbugs</emphasis>:          Squish WebBugs (1x1 invisible GIFs used for user tracking)
2486    </member>
2487   </simplelist>
2488   <simplelist>
2489    <member>
2490     <emphasis>no-refresh</emphasis>:       Automatic refresh sucks on auto-dialup lines
2491    </member>
2492   </simplelist>
2493   <simplelist>
2494    <member>
2495     <emphasis>fun</emphasis>:              Text replacements  for subversive browsing fun!
2496    </member>
2497   </simplelist>
2498   <simplelist>
2499    <member>
2500     <emphasis>nimda</emphasis>:            Remove (virus) Nimda code.
2501    </member>
2502   </simplelist>
2503   <simplelist>
2504    <member>
2505      <emphasis>banners-by-size</emphasis>:  Kill banners by size
2506    </member>
2507   </simplelist>
2508   <simplelist>
2509    <member>
2510     <emphasis>crude-parental</emphasis>:   Kill all web pages that contain the words "sex" or "warez"
2511    </member>
2512   </simplelist>
2513  </blockquote>
2514
2515  </listitem>
2516
2517  <listitem>
2518   <para>  
2519    Block any existing X-Forwarded-for header, and do not add a new one:
2520   </para>
2521   <para>
2522    <literal>
2523     <msgtext> 
2524      <literallayout>
2525   <emphasis>+hide-forwarded</emphasis>
2526      </literallayout>
2527     </msgtext> 
2528    </literal>
2529   </para>
2530  </listitem>
2531
2532  <listitem>
2533   <para>  
2534    If the browser sends a <quote>From:</quote> header containing your e-mail
2535    address, this either completely removes the header (<quote>block</quote>), or
2536    changes it to the specified e-mail address.
2537   </para>
2538   <para>
2539    <literal>
2540     <msgtext> 
2541      <literallayout>
2542   <emphasis>+hide-from{block}</emphasis>
2543   <emphasis>+hide-from{spam@sittingduck.xqq}</emphasis>
2544      </literallayout>
2545     </msgtext> 
2546    </literal>
2547   </para>
2548  </listitem>
2549  
2550  <listitem>
2551   <para>  
2552    Don't send the <quote>Referer:</quote> (sic) header to the web site.  You
2553    can block it, forge a URL to the same server as the request (which is
2554    preferred because some sites will not send images otherwise) or set it to a
2555    constant, user defined string of your choice.
2556   </para>
2557   <para>
2558    <literal>
2559     <msgtext> 
2560      <literallayout>
2561   <emphasis>+hide-referer{block}</emphasis>
2562   <emphasis>+hide-referer{forge}</emphasis>
2563   <emphasis>+hide-referer{http://nowhere.com}</emphasis>
2564      </literallayout>
2565     </msgtext> 
2566    </literal>
2567   </para>
2568  </listitem>
2569  
2570  <listitem>
2571   <para>  
2572    Alternative spelling of <quote>+hide-referer</quote>.  It has the same
2573    parameters, and can be freely mixed with, <quote>+hide-referer</quote>.
2574    (<quote>referrer</quote> is the correct English spelling, however the HTTP
2575    specification has a bug - it requires it to be spelled <quote>referer</quote>.) 
2576   </para>
2577   <para>
2578    <literal>
2579     <msgtext> 
2580      <literallayout>
2581   <emphasis>+hide-referrer{...}</emphasis>
2582      </literallayout>
2583     </msgtext> 
2584    </literal>
2585   </para>
2586  </listitem>
2587
2588  <listitem>
2589   <para>  
2590    Change the <quote>User-Agent:</quote> header so web servers can't tell your
2591    browser type.  Warning! This breaks many web sites.  Specify the
2592    user-agent value you want. Example, pretend to be using Netscape on
2593    Linux:
2594   </para>
2595   <para>
2596    <literal>
2597     <msgtext> 
2598      <literallayout>
2599   <emphasis>+hide-user-agent{Mozilla (X11; I; Linux 2.0.32 i586)}</emphasis>
2600      </literallayout>
2601     </msgtext> 
2602    </literal>
2603   </para>
2604  <!-- 
2605   <para>
2606    Or to identify yourself explicitly as a  <application>Privoxy</application> user:
2607   </para>
2608   <para>
2609    <literal>
2610     <msgtext> 
2611      <literallayout>
2612   <emphasis>+hide-user-agent{Privoxy/1.0}</emphasis>
2613      </literallayout>
2614     </msgtext> 
2615    </literal>
2616   </para>
2617    (Don't change the version number from 1.0 - after all, why tell them?)
2618   <para>
2619   </para>
2620   <para>
2621    <literal>
2622     <msgtext> 
2623      <literallayout>
2624   <emphasis>+hide-user-agent{browser-type}</emphasis>
2625      </literallayout>
2626     </msgtext> 
2627    </literal>
2628   </para>
2629 -->
2630  </listitem>
2631
2632  <listitem>
2633   <para>  
2634    Treat this URL as an image.  This only matters if it's also <quote>+block</quote>ed,
2635    in which case a <quote>blocked</quote> image can be sent rather than a HTML page.
2636    See <quote>+image-blocker{}</quote> below for the control over what is actually sent.
2637    If you want <emphasis>invisible</emphasis> ads, they should be defined as 
2638    <emphasis>images</emphasis> and <emphasis>blocked</emphasis>. And also, 
2639    <quote>image-blocker</quote>  should be set to <quote>blank</quote>. Note you 
2640    cannot treat HTML pages as images in most cases. For instance, frames 
2641    require an HTML page to display. So a frame that is an ad, cannot be 
2642    treated as an image. Forcing an <quote>image</quote> in this 
2643    situation just will not work.
2644   </para>
2645   <para>
2646    <literal>
2647     <msgtext> 
2648      <literallayout>
2649   <emphasis>+image</emphasis>
2650      </literallayout>
2651     </msgtext> 
2652    </literal>
2653   </para>
2654  </listitem>
2655  
2656  <listitem>
2657   <para> Decides what to do with URLs that end up tagged with <quote>{+block
2658   +image}</quote>, e.g an advertizement. There are five options.
2659   <quote>-image-blocker</quote> will send a HTML <quote>blocked</quote> page,
2660   usually resulting in a <quote>broken image</quote> icon.
2661 <!--   <quote>+image-blocker{logo}</quote> will send a -->
2662 <!--   <application>Privoxy</application> logo -->
2663 <!--   image. -->
2664 <quote>+image-blocker{blank}</quote> will send a 1x1 transparent GIF
2665 image. And finally, <quote>+image-blocker{http://xyz.com}</quote> will send a
2666 HTTP temporary redirect to the specified image. This has the advantage of the
2667 icon being being cached by the browser, which will speed up the display.
2668 <quote>+image-blocker{pattern}</quote> will send a checkboard type pattern
2669 <!-- , -->
2670 <!-- which scales better than the logo (which can get blocky if the browser -->
2671 <!-- enlarges it too much). -->
2672   </para>
2673   <para>
2674    <literal>
2675     <msgtext> 
2676      <literallayout>
2677 <!--   <emphasis>+image-blocker{logo}</emphasis> -->
2678   <emphasis>+image-blocker{blank}</emphasis>
2679   <emphasis>+image-blocker{pattern}</emphasis>
2680   <emphasis>+image-blocker{http://p.p/send-banner}</emphasis>
2681      </literallayout>
2682     </msgtext> 
2683    </literal>
2684   </para>
2685  </listitem>
2686  
2687  <listitem>
2688    <para> 
2689    By default (i.e. in the absence of a <quote>+limit-connect</quote>
2690    action), <application>Privoxy</application> will only allow CONNECT
2691    requests to port 443, which is the standard port for https as a 
2692    precaution.
2693   </para>
2694  
2695   <para>
2696    The CONNECT methods exists in HTTP to allow access to secure websites
2697    (https:// URLs) through proxies. It works very simply: the proxy
2698    connects to the server on the specified port, and then short-circuits
2699    its connections to the client <emphasis>and</emphasis> to the remote proxy.
2700    This can be a big security hole, since CONNECT-enabled proxies can
2701    be abused as TCP relays very easily.
2702   </para>
2703   
2704   <para> 
2705    If you want to allow CONNECT for more ports than this, or want to forbid
2706    CONNECT altogether, you can specify a comma separated list of ports and
2707    port ranges (the latter using dashes, with the minimum defaulting to 0 and
2708    max to 65K):
2709   </para>
2710
2711   <para>
2712    <literal>
2713     <msgtext> 
2714      <literallayout>
2715   <emphasis>+limit-connect{443}                 # This is the default and need no be specified.</emphasis>
2716   <emphasis>+limit-connect{80,443}              # Ports 80 and 443 are OK.</emphasis>
2717   <emphasis>+limit-connect{-3, 7, 20-100, 500-} # Port less than 3, 7, 20 to 100</emphasis>
2718   <emphasis>                                    #and above 500 are OK.</emphasis>
2719      </literallayout>
2720     </msgtext> 
2721    </literal>
2722   </para>
2723
2724  </listitem> 
2725  
2726  <listitem>
2727   <para>
2728    <quote>+no-compression</quote> prevents the website from compressing the
2729    data. Some websites do this, which can be a problem for
2730    <application>Privoxy</application>, since <quote>+filter</quote>,
2731    <quote>+no-popup</quote> and <quote>+gif-deanimate</quote> will not work on
2732    compressed data. This will slow down connections to those websites,
2733    though. Default is <quote>no-compression</quote> is turned on.
2734   </para>
2735
2736   <para>
2737    <literal>
2738     <msgtext> 
2739      <literallayout>
2740   <emphasis>+nocompression</emphasis>
2741      </literallayout>
2742     </msgtext> 
2743    </literal>
2744   </para>
2745  </listitem> 
2746  
2747  <listitem>
2748   <para>  
2749    If the website sets cookies, <quote>no-cookies-keep</quote> will make sure
2750    they are erased when you exit and restart your web browser. This makes
2751    profiling cookies useless, but won't break sites which require cookies so
2752    that you can log in for transactions. Default: on.
2753   </para>
2754   <para>
2755    <literal>
2756     <msgtext> 
2757      <literallayout>
2758   <emphasis>+no-cookies-keep</emphasis>
2759      </literallayout>
2760     </msgtext> 
2761    </literal>
2762   </para>
2763  </listitem>
2764  
2765  <listitem>
2766   <para>  
2767    Prevent the website from reading cookies:
2768   </para>
2769   <para>
2770    <literal>
2771     <msgtext> 
2772      <literallayout>
2773   <emphasis>+no-cookies-read</emphasis>
2774      </literallayout>
2775     </msgtext> 
2776    </literal>
2777   </para>
2778  </listitem>
2779  
2780  <listitem>
2781   <para>  
2782    Prevent the website from setting cookies:
2783   </para>
2784   <para>
2785    <literal>
2786     <msgtext> 
2787      <literallayout>
2788   <emphasis>+no-cookies-set</emphasis>
2789      </literallayout>
2790     </msgtext> 
2791    </literal>
2792   </para>
2793  </listitem>
2794  
2795  <listitem>
2796   <para>  
2797    Filter the website through a built-in filter to disable those obnoxious 
2798    JavaScript pop-up windows via window.open(), etc. The two alternative
2799    spellings are equivalent.
2800   </para>
2801   <para>
2802    <literal>
2803     <msgtext> 
2804      <literallayout>
2805   <emphasis>+no-popup</emphasis>
2806   <emphasis>+no-popups</emphasis>
2807      </literallayout>
2808     </msgtext> 
2809    </literal>
2810   </para>
2811  </listitem>
2812  
2813  <listitem>
2814   <para>  
2815    This action only applies if you are using a <filename>jarfile</filename>
2816    for saving cookies. It sends a cookie to every site stating that you do not
2817    accept any copyright on cookies sent to you, and asking them not to track
2818    you.  Of course, this is a (relatively) unique header they could use to
2819    track you.
2820   </para>
2821   <para>
2822    <literal>
2823     <msgtext> 
2824      <literallayout>
2825   <emphasis>+vanilla-wafer</emphasis>
2826      </literallayout>
2827     </msgtext> 
2828    </literal>
2829   </para>
2830  </listitem>
2831  
2832  <listitem>
2833   <para>  
2834    This allows you to add an arbitrary cookie. It can be specified multiple
2835    times in order to add as many cookies as you like.
2836   </para>
2837   <para>
2838    <literal>
2839     <msgtext> 
2840      <literallayout>
2841   <emphasis>+wafer{name=value}</emphasis>
2842      </literallayout>
2843     </msgtext> 
2844    </literal>
2845   </para>
2846  </listitem>
2847
2848  </itemizedlist>
2849 </para>
2850
2851 <para>
2852  The meaning of any of the above is reversed by preceding the action with a 
2853  <quote>-</quote>, in place of the <quote>+</quote>.
2854 </para>
2855
2856 <para>
2857  Some examples:
2858 </para>
2859
2860 <para>
2861  Turn off cookies by default, then allow a few through for specified sites:
2862 </para>
2863   
2864 <para>
2865  <literal>
2866   <msgtext> 
2867    <literallayout>
2868  # Turn off all persistent cookies
2869  { +no-cookies-read }
2870  { +no-cookies-set }
2871  # Allow cookies for this browser session ONLY
2872  { +no-cookies-keep }
2873
2874  # Exceptions to the above, sites that benefit from persistent cookies
2875  { -no-cookies-read }
2876  { -no-cookies-set }
2877  { -no-cookies-keep }
2878  .javasoft.com
2879  .sun.com
2880  .yahoo.com
2881  .msdn.microsoft.com
2882  .redhat.com
2883
2884  # Alternative way of saying the same thing
2885  {-no-cookies-set -no-cookies-read -no-cookies-keep}
2886  .sourceforge.net
2887  .sf.net
2888    </literallayout>
2889   </msgtext> 
2890  </literal>
2891 </para>
2892
2893 <para>
2894  Now turn off <quote>fast redirects</quote>, and then we allow two exceptions:
2895 </para>
2896
2897 <para>
2898  <literal>
2899   <msgtext> 
2900    <literallayout>
2901  # Turn them off!
2902  {+fast-redirects}
2903  
2904  # Reverse it for these two sites, which don't work right without it.
2905  {-fast-redirects}
2906  www.ukc.ac.uk/cgi-bin/wac\.cgi\?
2907  login.yahoo.com
2908    </literallayout>
2909   </msgtext> 
2910  </literal>
2911 </para>
2912
2913 <para>
2914  Turn on page filtering according to rules in the defined sections 
2915  of <filename>refilterfile</filename>, and make one exception for 
2916  sourceforge:
2917  </para>
2918
2919 <para>
2920  <literal>
2921   <msgtext> 
2922    <literallayout>
2923  # Run everything through the filter file, using only the
2924  # specified sections:
2925  +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups}\
2926  +filter{webbugs} +filter{nimda} +filter{banners-by-size}
2927               
2928  # Then disable filtering of code from sourceforge!
2929  {-filter}
2930  .cvs.sourceforge.net
2931    </literallayout>
2932   </msgtext> 
2933  </literal>
2934 </para>
2935
2936 <para>
2937  Now some URLs that we want <quote>blocked</quote> (normally generates 
2938  the <quote>blocked</quote> banner). Many of these use regular expressions
2939  that will expand to match multiple URLs:
2940 </para>
2941
2942 <para>
2943  <literal>
2944   <msgtext> 
2945    <literallayout>
2946   # Blocklist:
2947   {+block}
2948   /.*/(.*[-_.])?ads?[0-9]?(/|[-_.].*|\.(gif|jpe?g))
2949   /.*/(.*[-_.])?count(er)?(\.cgi|\.dll|\.exe|[?/])
2950   /.*/(ng)?adclient\.cgi
2951   /.*/(plain|live|rotate)[-_.]?ads?/
2952   /.*/(sponsor)s?[0-9]?/
2953   /.*/_?(plain|live)?ads?(-banners)?/
2954   /.*/abanners/
2955   /.*/ad(sdna_image|gifs?)/
2956   /.*/ad(server|stream|juggler)\.(cgi|pl|dll|exe)
2957   /.*/adbanners/
2958   /.*/adserver
2959   /.*/adstream\.cgi
2960   /.*/adv((er)?ts?|ertis(ing|ements?))?/
2961   /.*/banner_?ads/
2962   /.*/banners?/
2963   /.*/banners?\.cgi/
2964   /.*/cgi-bin/centralad/getimage
2965   /.*/images/addver\.gif
2966   /.*/images/marketing/.*\.(gif|jpe?g)
2967   /.*/popupads/
2968   /.*/siteads/
2969   /.*/sponsor.*\.gif
2970   /.*/sponsors?[0-9]?/
2971   /.*/advert[0-9]+\.jpg
2972   /Media/Images/Adds/
2973   /ad_images/
2974   /adimages/
2975   /.*/ads/
2976   /bannerfarm/
2977   /grafikk/annonse/
2978   /graphics/defaultAd/
2979   /image\.ng/AdType
2980   /image\.ng/transactionID
2981   /images/.*/.*_anim\.gif # alvin brattli
2982   /ip_img/.*\.(gif|jpe?g)
2983   /rotateads/
2984   /rotations/ 
2985   /worldnet/ad\.cgi
2986   /cgi-bin/nph-adclick.exe/
2987   /.*/Image/BannerAdvertising/
2988   /.*/ad-bin/
2989   /.*/adlib/server\.cgi
2990   /autoads/
2991    </literallayout>
2992   </msgtext> 
2993  </literal>
2994 </para>
2995
2996 <para>
2997  Note that many of these actions have the potential to cause a page to
2998  misbehave, possibly even not to display at all. There are many ways 
2999  a site designer may choose to design his site, and what HTTP header 
3000  content he may depend on. There is no way to have hard and fast rules 
3001  for all sites. See the <link linkend="ACTIONSANAT">Appendix</link>
3002  for a brief example on troubleshooting actions.
3003 </para>
3004
3005 </sect3>
3006
3007 <!--  ~  End section  ~  -->
3008
3009
3010 <!--   ~~~~~       New section      ~~~~~     -->
3011 <sect3>
3012 <title>Aliases</title>
3013 <para>
3014  Custom <quote>actions</quote>, known to <application>Privoxy</application>
3015  as <quote>aliases</quote>, can be defined by combining other <quote>actions</quote>.
3016  These can in turn be invoked just like the built-in <quote>actions</quote>.
3017  Currently, an alias can contain any character except space, tab, <quote>=</quote>,
3018  <quote>{</quote> or <quote>}</quote>. But please use only <quote>a</quote>-
3019  <quote>z</quote>, <quote>0</quote>-<quote>9</quote>, <quote>+</quote>, and
3020  <quote>-</quote>. Alias names are not case sensitive, and 
3021  <emphasis>must be defined  before anything</emphasis> else in the
3022  <filename>default.action</filename>file! And there can only be one set of
3023  <quote>aliases</quote> defined.
3024 </para>
3025
3026 <para>
3027  Now let's define a few aliases:
3028 </para>
3029
3030 <para>
3031  <literal>
3032   <msgtext> 
3033    <literallayout>
3034  # Useful custom aliases we can use later. These must come first!
3035  {{alias}}
3036  +no-cookies = +no-cookies-set +no-cookies-read
3037  -no-cookies = -no-cookies-set -no-cookies-read
3038  fragile     = -block -no-cookies -filter -fast-redirects -hide-referer -no-popups
3039  shop        = -no-cookies -filter -fast-redirects
3040  +imageblock = +block +image
3041
3042  #For people who don't like to type too much:  ;-)
3043  c0 = +no-cookies
3044  c1 = -no-cookies
3045  c2 = -no-cookies-set +no-cookies-read
3046  c3 = +no-cookies-set -no-cookies-read
3047  #... etc.  Customize to your heart's content.
3048    </literallayout>
3049   </msgtext> 
3050  </literal>
3051 </para>
3052
3053 <para>
3054  Some examples using our <quote>shop</quote> and <quote>fragile</quote>
3055  aliases from above:
3056 </para>
3057
3058 <para>
3059  <literal>
3060   <msgtext> 
3061    <literallayout>
3062  # These sites are very complex and require
3063  # minimal interference.
3064  {fragile}
3065  .office.microsoft.com
3066  .windowsupdate.microsoft.com
3067  .nytimes.com
3068
3069  # Shopping sites - still want to block ads.
3070  {shop}
3071  .quietpc.com
3072  .worldpay.com   # for quietpc.com
3073  .jungle.com
3074  .scan.co.uk
3075
3076  # These shops require pop-ups
3077  {shop -no-popups}
3078  .dabs.com
3079  .overclockers.co.uk
3080    </literallayout>
3081   </msgtext> 
3082  </literal>
3083 </para>
3084
3085 <para>
3086  The <quote>shop</quote> and <quote>fragile</quote> aliases are often used for 
3087  <quote>problem</quote> sites that require most actions to be disabled 
3088  in order to function properly.
3089
3090 </para>
3091
3092 </sect3>
3093 </sect2>
3094
3095 <!--  ~  End section  ~  -->
3096
3097
3098 <!--   ~~~~~       New section      ~~~~~     -->
3099 <sect2 id="filterfile">
3100 <title>The Filter File</title>
3101 <para>
3102  Any web page can be dynamically modified with the filter file. This
3103  modification can be removal, or re-writing, of any web page content,
3104  including tags and non-visible content. The default filter file is
3105  <filename>default.filter</filename>, located in the config directory. 
3106 </para>
3107
3108 <para>
3109  This is potentially a very powerful feature, and requires knowledge of both 
3110  <quote>regular expression</quote> and HTML in order create custom 
3111  filters. But, there are a number of useful filters included with 
3112  <application>Privoxy</application> for many common situations.
3113 </para>
3114
3115 <para>
3116  The included example file is divided into sections. Each section begins 
3117  with the <literal>FILTER</literal> keyword, followed by the identifier 
3118  for that section, e.g. <quote>FILTER: webbugs</quote>. Each section performs
3119  a similar type of filtering, such as <quote>html-annoyances</quote>.
3120 </para>
3121
3122 <para>
3123  This file uses regular expressions to alter or remove any string in the
3124  target page. The expressions can only operate on one line at a time. Some
3125  examples from the included default <filename>default.filter</filename>:
3126 </para>
3127
3128 <para>
3129  Stop web pages from displaying annoying messages in the status bar by
3130  deleting such references:
3131 </para>
3132
3133 <para>
3134  <literal>
3135   <msgtext> 
3136    <literallayout>
3137  FILTER: html-annoyances
3138
3139  # New browser windows should be resizeable and have a location and status
3140  # bar. Make it so.
3141  #
3142  s/resizable="?(no|0)"?/resizable=1/ig s/noresize/yesresize/ig
3143  s/location="?(no|0)"?/location=1/ig s/status="?(no|0)"?/status=1/ig
3144  s/scrolling="?(no|0|Auto)"?/scrolling=1/ig
3145  s/menubar="?(no|0)"?/menubar=1/ig 
3146
3147  # The &lt;BLINK&gt; tag was a crime!
3148  #
3149  s*&lt;blink&gt;|&lt;/blink&gt;**ig
3150
3151  # Is this evil? 
3152  #
3153  #s/framespacing="?(no|0)"?//ig
3154  #s/margin(height|width)=[0-9]*//gi
3155    </literallayout>
3156   </msgtext> 
3157  </literal>
3158 </para>
3159
3160 <para>
3161  Just for kicks, replace any occurrence of <quote>Microsoft</quote> with
3162  <quote>MicroSuck</quote>, and have a little fun with topical buzzwords: 
3163 </para>
3164
3165 <para>
3166  <literal>
3167   <msgtext> 
3168    <literallayout>
3169  FILTER: fun
3170
3171  s/microsoft(?!.com)/MicroSuck/ig
3172
3173  # Buzzword Bingo:
3174  #
3175  s/industry-leading|cutting-edge|award-winning/&lt;font color=red&gt;&lt;b&gt;BINGO!&lt;/b&gt;&lt;/font&gt;/ig
3176    </literallayout>
3177   </msgtext> 
3178  </literal>
3179 </para>
3180
3181 <para>
3182  Kill those pesky little web-bugs:
3183 </para>
3184
3185 <para>
3186  <literal>
3187   <msgtext> 
3188    <literallayout>
3189  # webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking)
3190  FILTER: webbugs
3191
3192  s/&lt;img\s+[^&gt;]*?(width|height)\s*=\s*['"]?1\D[^&gt;]*?(width|height)\s*=\s*['"]?1(\D[^&gt;]*?)?>/&lt;!-- Squished WebBug --&gt;/sig
3193    </literallayout>
3194   </msgtext> 
3195  </literal>
3196 </para>
3197
3198 </sect2>
3199
3200 <!--  ~  End section  ~  -->
3201
3202
3203
3204 <!--   ~~~~~       New section      ~~~~~     -->
3205
3206 <sect2>
3207 <title>Templates</title>
3208 <para>
3209  When <application>Privoxy</application> displays one of its internal 
3210  pages, such as a 404 Not Found error page, it uses the appropriate template.
3211  On Linux, BSD, and Unix, these are located in
3212  <filename>/etc/privoxy/templates</filename> by default. These may be
3213  customized, if desired. <filename>cgi-style.css</filename> is 
3214  used to control the HTML attributes (fonts, etc).
3215 </para>
3216 <para>
3217  The default <quote>Blocked</quote> banner page with the bright red top 
3218  banner, is called just <quote><filename>blocked</filename></quote>. This 
3219  may be customized or replaced with something else if desired.
3220
3221 </para>
3222 </sect2>
3223
3224 </sect1>
3225
3226 <!--  ~  End section  ~  -->
3227
3228
3229
3230 <!--   ~~~~~       New section      ~~~~~     -->
3231
3232 <sect1 id="contact"><title>Contacting the Developers, Bug Reporting and Feature
3233 Requests</title>
3234
3235 <!-- Include contacting.sgml boilerplate: -->
3236  &contacting;
3237 <!-- end boilerplate -->
3238
3239
3240 <!--   ~~~~~       New section      ~~~~~     -->
3241 <sect2 id="submitactions">
3242 <title>Submitting Ads and <quote>Action</quote> Problems</title>
3243 <para>
3244  Ads and banners that are not stopped by <application>Privoxy</application> 
3245  can be submitted to the developers by accessing a special page and filling 
3246  out the brief, required form. Conversely, you can also report pages, images,
3247  etc. that <application>Privoxy</application> is blocking, but should not.
3248  The form itself does require Internet access.
3249 </para>
3250 <para>
3251  To do this, point your browser to <application>Privoxy</application> 
3252  at <ulink url="http://p.p/">http://p.p/</ulink>, and then select 
3253  <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>, 
3254  near the bottom of the page. Paste in the URL that is the cause of the 
3255  unwanted behavior, and follow the prompts. The developers will 
3256  try to incorporate your submission into future versions.
3257 </para>
3258
3259 <para>
3260  New <filename>default.actions</filename> files will occasionally be made
3261  available based on your feedback. These 
3262  will be announced on the 
3263  <ulink
3264  url="http://lists.sourceforge.net/lists/listinfo/ijbswa-announce">ijbswa-announce</ulink>
3265  list.
3266 </para>
3267 </sect2>
3268
3269 </sect1>
3270
3271
3272 <!--   ~~~~~       New section      ~~~~~     -->
3273 <sect1 id="copyright"><title>Copyright and History</title>
3274
3275 <sect2><title>Copyright</title>
3276 <!-- Include copyright.sgml: -->
3277  &copyright;
3278 <!-- end copyright -->
3279 </sect2>
3280
3281 <!--  ~  End section  ~  -->
3282
3283
3284 <!--   ~~~~~       New section      ~~~~~     -->
3285
3286 <sect2 id="history"><title>History</title>
3287 <!-- Include history.sgml: -->
3288  &history;
3289 <!-- end history -->
3290 </sect2>
3291 </sect1>
3292
3293 <!--   ~~~~~       New section      ~~~~~     -->
3294 <sect1 id="seealso"><title>See Also</title>
3295 <!-- Include seealso.sgml: -->
3296  &seealso;
3297 <!-- end seealso -->
3298 </sect1>
3299
3300
3301
3302 <!--   ~~~~~       New section      ~~~~~     -->
3303 <sect1 id="appendix"><title>Appendix</title>
3304
3305
3306 <!--   ~~~~~       New section      ~~~~~     -->
3307 <sect2 id="regex">
3308 <title>Regular Expressions</title>
3309 <para>
3310  <application>Privoxy</application> can use <quote>regular expressions</quote> 
3311  in various config files. Assuming support for <quote>pcre</quote> (Perl
3312  Compatible Regular Expressions) is compiled in, which is the default. Such
3313  configuration directives do not require regular expressions, but they can be
3314  used to increase flexibility by matching a pattern with wild-cards against
3315  URLs.
3316 </para>
3317
3318 <para>
3319  If you are reading this, you probably don't understand what <quote>regular
3320  expressions</quote> are, or what they can do. So this will be a very brief
3321  introduction only. A full explanation would require a book ;-)
3322 </para>
3323
3324 <para>
3325  <quote>Regular expressions</quote> is a way of matching one character
3326  expression against another to see if it matches or not. One of the
3327  <quote>expressions</quote> is a literal string of readable characters
3328  (letter, numbers, etc), and the other is a complex string of literal
3329  characters combined with wild-cards, and other special characters, called
3330  meta-characters. The <quote>meta-characters</quote> have special meanings and
3331  are used to build the complex pattern to be matched against. Perl Compatible
3332  Regular Expressions is an enhanced form of the regular expression language
3333  with backward compatibility.
3334 </para>
3335
3336 <para>
3337  To make a simple analogy, we do something similar when we use wild-card
3338  characters when listing files with the <command>dir</command> command in DOS. 
3339  <literal>*.*</literal> matches all filenames. The <quote>special</quote>
3340  character here is the asterisk which matches any and all characters. We can be
3341  more specific and use <literal>?</literal> to match just individual
3342  characters. So <quote>dir file?.text</quote> would match
3343  <quote>file1.txt</quote>, <quote>file2.txt</quote>, etc. We are pattern
3344  matching, using a similar technique to <quote>regular expressions</quote>!
3345 </para>
3346
3347 <para>
3348  Regular expressions do essentially the same thing, but are much, much more
3349  powerful. There are many more <quote>special characters</quote> and ways of 
3350  building complex patterns however. Let's look at a few of the common ones,
3351  and then some examples:
3352 </para>
3353
3354 <simplelist>
3355  <member>
3356   <emphasis>.</emphasis> - Matches any single character, e.g. <quote>a</quote>,
3357   <quote>A</quote>, <quote>4</quote>, <quote>:</quote>, or <quote>@</quote>.
3358  </member>
3359 </simplelist>
3360
3361 <simplelist>
3362  <member>
3363   <emphasis>?</emphasis> - The preceding character or expression is matched ZERO or ONE
3364   times. Either/or.
3365  </member>
3366 </simplelist>
3367
3368 <simplelist>
3369  <member>
3370   <emphasis>+</emphasis> - The preceding character or expression is matched ONE or MORE
3371   times.
3372  </member>
3373 </simplelist>
3374
3375 <simplelist>
3376  <member>
3377   <emphasis>*</emphasis> - The preceding character or expression is matched ZERO or MORE
3378   times.
3379  </member>
3380 </simplelist>
3381
3382 <simplelist>
3383  <member>
3384   <emphasis>\</emphasis> - The <quote>escape</quote> character denotes that
3385   the following character should be taken literally. This is used where one of the 
3386   special characters (e.g. <quote>.</quote>) needs to be taken literally and
3387   not as a special meta-character.
3388  </member>
3389 </simplelist>
3390
3391 <simplelist>
3392  <member>
3393   <emphasis>[]</emphasis> - Characters enclosed in brackets will be matched if
3394   any of the enclosed characters are encountered.
3395  </member>
3396 </simplelist>
3397
3398 <simplelist>
3399  <member>
3400   <emphasis>()</emphasis> - parentheses are used to group a sub-expression,
3401   or multiple sub-expressions.
3402  </member>
3403 </simplelist>
3404
3405 <simplelist>
3406  <member>
3407   <emphasis>|</emphasis> - The <quote>bar</quote> character works like an
3408   <quote>or</quote> conditional statement. A match is successful if the
3409   sub-expression on either side of <quote>|</quote> matches.
3410  </member>
3411 </simplelist>
3412
3413 <simplelist>
3414  <member>
3415   <emphasis>s/string1/string2/g</emphasis> - This is used to rewrite strings of text. 
3416   <quote>string1</quote> is replaced by <quote>string2</quote> in this
3417   example.
3418  </member>
3419 </simplelist>
3420
3421 <para>
3422  These are just some of the ones you are likely to use when matching URLs with 
3423  <application>Privoxy</application>, and is a long way from a definitive
3424  list. This is enough to get us started with a few simple examples which may
3425  be more illuminating:
3426 </para>
3427
3428 <para>
3429  <emphasis><literal>/.*/banners/.*</literal></emphasis> - A  simple example
3430  that uses the common combination of <quote>.</quote> and <quote>*</quote> to 
3431  denote any character, zero or more times. In other words, any string at all.
3432  So we start with a literal forward slash, then our regular expression pattern 
3433  (<quote>.*</quote>) another literal forward slash, the string
3434  <quote>banners</quote>, another forward slash, and lastly another
3435  <quote>.*</quote>. We are building 
3436  a directory path here. This will match any file with the path that has a
3437  directory named <quote>banners</quote> in it. The <quote>.*</quote> matches
3438  any characters, and this could conceivably be more forward slashes, so it
3439  might expand into a much longer looking path. For example, this could match:
3440  <quote>/eye/hate/spammers/banners/annoy_me_please.gif</quote>, or just
3441  <quote>/banners/annoying.html</quote>, or almost an infinite number of other
3442  possible combinations, just so it has <quote>banners</quote> in the path
3443  somewhere.
3444 </para>
3445
3446 <para>
3447  A now something a little more complex:
3448 </para>
3449
3450 <para>
3451  <emphasis><literal>/.*/adv((er)?ts?|ertis(ing|ements?))?/</literal></emphasis> - 
3452  We have several literal forward slashes again (<quote>/</quote>), so we are
3453  building another expression that is a file path statement. We have another 
3454  <quote>.*</quote>, so we are matching against any conceivable sub-path, just so
3455  it matches our expression. The only true literal that <emphasis>must
3456  match</emphasis> our pattern is <application>adv</application>, together with
3457  the forward slashes. What comes after the <quote>adv</quote> string is the
3458  interesting part. 
3459 </para>
3460
3461 <para>
3462  Remember the <quote>?</quote> means the preceding expression (either a
3463  literal character or anything grouped with <quote>(...)</quote> in this case)
3464  can exist or not, since this means either zero or one match. So
3465  <quote>((er)?ts?|ertis(ing|ements?))</quote> is optional, as are the
3466  individual sub-expressions: <quote>(er)</quote>,
3467  <quote>(ing|ements?)</quote>, and the <quote>s</quote>. The <quote>|</quote>
3468  means <quote>or</quote>. We have two of those. For instance, 
3469  <quote>(ing|ements?)</quote>, can expand to match either <quote>ing</quote> 
3470  <emphasis>OR</emphasis> <quote>ements?</quote>. What is being done here, is an
3471  attempt at matching as many variations of <quote>advertisement</quote>, and 
3472  similar, as possible. So this would expand to match just <quote>adv</quote>,
3473  or <quote>advert</quote>, or <quote>adverts</quote>, or
3474  <quote>advertising</quote>, or <quote>advertisement</quote>, or
3475  <quote>advertisements</quote>. You get the idea. But it would not match 
3476  <quote>advertizements</quote> (with a <quote>z</quote>). We could fix that by
3477  changing our regular expression to: 
3478  <quote>/.*/adv((er)?ts?|erti(s|z)(ing|ements?))?/</quote>, which would then match
3479  either spelling.
3480 </para>
3481
3482 <para>
3483  <emphasis><literal>/.*/advert[0-9]+\.(gif|jpe?g)</literal></emphasis> - Again 
3484  another path statement with forward slashes. Anything in the square brackets 
3485  <quote>[]</quote> can be matched. This is using <quote>0-9</quote> as a
3486  shorthand expression to mean any digit one through nine. It is the same as
3487  saying <quote>0123456789</quote>. So any digit matches. The <quote>+</quote>
3488  means one or more of the preceding expression must be included. The preceding 
3489  expression here is what is in the square brackets -- in this case, any digit 
3490  one through nine. Then, at the end, we have a grouping: <quote>(gif|jpe?g)</quote>. 
3491  This includes a <quote>|</quote>, so this needs to match the expression on
3492  either side of that bar character also. A simple <quote>gif</quote> on one side, and the other
3493  side will in turn match either <quote>jpeg</quote> or <quote>jpg</quote>,
3494  since the <quote>?</quote> means the letter <quote>e</quote> is optional and
3495  can be matched once or not at all. So we are building an expression here to
3496  match image GIF or JPEG type image file. It must include the literal
3497  string <quote>advert</quote>, then one or more digits, and a <quote>.</quote>
3498  (which is now a literal, and not a special character, since it is escaped
3499  with <quote>\</quote>), and lastly either <quote>gif</quote>, or
3500  <quote>jpeg</quote>, or <quote>jpg</quote>. Some possible matches would
3501  include: <quote>//advert1.jpg</quote>,
3502  <quote>/nasty/ads/advert1234.gif</quote>,
3503  <quote>/banners/from/hell/advert99.jpg</quote>. It would not match
3504  <quote>advert1.gif</quote> (no leading slash), or
3505  <quote>/adverts232.jpg</quote> (the expression does not include an
3506  <quote>s</quote>), or <quote>/advert1.jsp</quote> (<quote>jsp</quote> is not
3507  in the expression anywhere).
3508 </para>
3509
3510 <para>
3511  <emphasis><literal>s/microsoft(?!.com)/MicroSuck/i</literal></emphasis> - This is 
3512  a substitution. <quote>MicroSuck</quote> will replace any occurrence of 
3513  <quote>microsoft</quote>.  The <quote>i</quote> at the end of the expression
3514  means ignore case. The <quote>(?!.com)</quote> means 
3515  the match should fail if <quote>microsoft</quote> is followed by
3516  <quote>.com</quote>. In other words, this acts like a <quote>NOT</quote>
3517  modifier. In case this is a hyperlink, we don't want to break it ;-).
3518 </para>
3519
3520 <para>
3521  We are barely scratching the surface of regular expressions here so that you
3522  can understand the default <application>Privoxy</application>
3523  configuration files, and maybe use this knowledge to customize your own
3524  installation. There is much, much more that can be done with regular
3525  expressions. Now that you know enough to get started, you can learn more on
3526  your own :/
3527 </para>
3528
3529 <para>
3530  More reading on Perl Compatible Regular expressions: 
3531  <ulink url="http://www.perldoc.com/perl5.6/pod/perlre.html">http://www.perldoc.com/perl5.6/pod/perlre.html</ulink>
3532 </para>
3533
3534 </sect2>
3535
3536 <!--  ~  End section  ~  -->
3537
3538
3539 <!--   ~~~~~       New section      ~~~~~     -->
3540 <sect2>
3541 <title><application>Privoxy</application>'s Internal Pages</title>
3542
3543 <para>
3544  Since <application>Privoxy</application> proxies each requested 
3545  web page, it is easy for <application>Privoxy</application> to 
3546  trap certain special URLs. In this way, we can talk directly to
3547  <application>Privoxy</application>, and see how it is 
3548  configured, see how our rules are being applied, change these 
3549  rules and other configuration options, and even turn
3550  <application>Privoxy's</application> filtering off, all with 
3551  a web browser.
3552
3553 </para>
3554
3555 <para>
3556  The URLs listed below are the special ones that allow direct access 
3557  to <application>Privoxy</application>. Of course,
3558  <application>Privoxy</application> must be running to access these. If 
3559  not, you will get a friendly error message. Internet access is not 
3560  necessary either.
3561 </para>
3562
3563 <para>
3564  <itemizedlist>
3565
3566  <listitem>
3567   <para>  
3568    Privoxy main page: 
3569   </para>
3570   <blockquote>
3571    <para> 
3572      <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>
3573    </para>
3574   </blockquote>
3575   <para>
3576    Alternately, this may be reached at <ulink
3577    url="http://p.p/">http://p.p/</ulink>, but this
3578    variation may not work as reliably as the above in some configurations.
3579   </para>
3580  </listitem>
3581
3582  <listitem>
3583   <para>  
3584     Show information about the current configuration: 
3585   </para>
3586    <blockquote>
3587    <para> 
3588     <ulink url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
3589    </para>
3590   </blockquote>
3591  </listitem>
3592  
3593  <listitem>
3594   <para>  
3595     Show the source code version numbers:
3596   </para>
3597   <blockquote>
3598    <para> 
3599     <ulink url="http://config.privoxy.org/show-version">http://config.privoxy.org/show-version</ulink>
3600    </para>
3601   </blockquote>
3602  </listitem>
3603  
3604  <listitem>
3605   <para>  
3606    Show the client's request headers:
3607   </para>
3608   <blockquote>
3609    <para> 
3610     <ulink url="http://config.privoxy.org/show-request">http://config.privoxy.org/show-request</ulink>
3611    </para>
3612   </blockquote>
3613  </listitem>
3614  
3615  <listitem>
3616   <para>  
3617    Show which actions apply to a URL and why:
3618   </para>
3619    <blockquote>
3620    <para> 
3621     <ulink url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>
3622    </para>
3623   </blockquote>
3624  </listitem>
3625  
3626  <listitem>
3627   <para>  
3628    Toggle Privoxy on or off. In this case, <quote>Privoxy</quote> continues 
3629    to run, but only as a pass-through proxy, with no actions taking place:
3630   </para>
3631    <blockquote>
3632    <para> 
3633     <ulink url="http://config.privoxy.org/toggle">http://config.privoxy.org/toggle</ulink>
3634    </para>
3635   </blockquote>
3636   <para>
3637    Short cuts. Turn off, then on: 
3638   </para>
3639    <blockquote>
3640    <para> 
3641      <ulink url="http://config.privoxy.org/toggle?set=disable">http://config.privoxy.org/toggle?set=disable</ulink>
3642    </para>
3643   </blockquote>
3644    <blockquote>
3645    <para> 
3646      <ulink url="http://config.privoxy.org/toggle?set=enable">http://config.privoxy.org/toggle?set=enable</ulink>
3647    </para>
3648   </blockquote>
3649  </listitem>
3650
3651  <listitem>
3652   <para>  
3653    Edit the actions list file:
3654   </para>
3655    <blockquote>
3656    <para> 
3657     <ulink url="http://config.privoxy.org/edit-actions">http://config.privoxy.org/edit-actions</ulink>
3658    </para>
3659   </blockquote>
3660  </listitem>
3661  
3662  </itemizedlist>
3663 </para>
3664
3665 <para>
3666  These may be bookmarked for quick reference.
3667
3668 </para>
3669
3670 <sect3 id="bookmarklets">
3671 <title>Bookmarklets</title>
3672 <para>
3673  Below are some <quote>bookmarklets</quote> to allow you to easily access a
3674  <quote>mini</quote> version of some of <application>Privoxy's</application>
3675  special pages. They are designed for MS Internet Explorer, but should work
3676  equally well in Netscape, Mozilla, and other browsers which support
3677  JavaScript. They are designed to run directly from your bookmarks - not by
3678  clicking the links below (although that should work for testing).
3679 </para>
3680 <para>
3681  To save them, right-click the link and choose <quote>Add to Favorites</quote>
3682  (IE) or <quote>Add Bookmark</quote> (Netscape). You will get a warning that
3683  the bookmark <quote>may not be safe</quote> - just click OK. Then you can run the
3684  Bookmarklet directly from your favourites/bookmarks. For even faster access,
3685  you can put them on the <quote>Links</quote> bar (IE) or the <quote>Personal
3686  Toolbar</quote> (Netscape), and run them with a single click. 
3687 </para>
3688
3689 <para>
3690  <itemizedlist>
3691
3692   <listitem>
3693    <para>
3694     <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>
3695    </para>
3696   </listitem> 
3697
3698   <listitem>
3699    <para>
3700     <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>
3701    </para>
3702   </listitem> 
3703
3704   <listitem>
3705    <para>
3706     <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)
3707    </para>
3708   </listitem> 
3709
3710   <listitem>
3711    <para>
3712     <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>
3713    </para>
3714   </listitem> 
3715
3716   <listitem>
3717    <para>
3718     <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>
3719    </para>
3720   </listitem> 
3721
3722  </itemizedlist>
3723 </para>
3724
3725
3726
3727 <para>
3728  Credit: The site which gave me the general idea for these bookmarklets is
3729  <ulink url="http://www.bookmarklets.com">www.bookmarklets.com</ulink>. They
3730  have more information about bookmarklets. 
3731 </para>
3732
3733
3734 </sect3>
3735
3736 </sect2>
3737
3738
3739 <!--   ~~~~~       New section      ~~~~~     -->
3740 <sect2 id="actionsanat">
3741 <title>Anatomy of an Action</title>
3742
3743 <para>
3744  The way <application>Privoxy</application> applies <quote>actions</quote>
3745  and <quote>filters</quote> to any given URL can be complex, and not always so
3746  easy to understand what is happening. And sometimes we need to be able to
3747  <emphasis>see</emphasis> just what <application>Privoxy</application> is
3748  doing. Especially, if something <application>Privoxy</application> is doing
3749  is causing us a problem inadvertantly. It can be a little daunting to look at
3750  the actions and filters files themselves, since they tend to be filled with
3751  <quote>regular expressions</quote> whose consequences are not always 
3752  so obvious. <application>Privoxy</application> provides the 
3753  <ulink url="http://config.privoxy.org/show-url-info">http://config.privoxy.org/show-url-info</ulink>
3754  page that can show us very specifically how <application>actions</application>
3755  are being applied to any given URL. This is a big help for troubleshooting.
3756  </para>
3757
3758 <para>
3759  First, enter one URL (or partial URL) at the prompt, and then
3760  <application>Privoxy</application> will tell us 
3761  how the current configuration will handle it. This will not
3762  help with filtering effects from the <filename>default.filter</filename> file! It
3763  also will not tell you about any other URLs that may be embedded within the
3764  URL you are testing. For instance, images such as ads are expressed as URLs
3765  within the raw page source of HTML pages. So you will only get info for the
3766  actual URL that is pasted into the prompt area -- not any sub-URLs. If you
3767  want to know about embedded URLs like ads, you will have to dig those out of
3768  the HTML source. Use your browser's <quote>View Page Source</quote> option
3769  for this. Or right click on the ad, and grab the URL.
3770 </para>
3771
3772 <para>
3773  Let's look at an example, <ulink url="http://google.com">google.com</ulink>, 
3774  one section at a time:
3775 </para>
3776
3777 <para>
3778  <screen>
3779  System default actions:
3780
3781  { -add-header -block -deanimate-gifs -downgrade -fast-redirects -filter 
3782    -hide-forwarded -hide-from -hide-referer -hide-user-agent -image 
3783    -image-blocker -limit-connect -no-compression -no-cookies-keep 
3784    -no-cookies-read -no-cookies-set -no-popups -vanilla-wafer -wafer }
3785  
3786  </screen>
3787 </para>
3788
3789 <para>
3790  This is the top section, and only tells us of the compiled in defaults. This 
3791  is basically what <application>Privoxy</application> would do if there 
3792  were not any <quote>actions</quote> defined, i.e. it does nothing. Every action 
3793  is disabled. This is not particularly informative for our purposes here. OK,
3794  next section:
3795 </para>
3796
3797 <para>
3798  <screen>
3799
3800  Matches for http://google.com:
3801
3802  { -add-header -block +deanimate-gifs -downgrade +fast-redirects 
3803    +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups} 
3804    +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
3805    +filter{fun} +hide-forwarded +hide-from{block} +hide-referer{forge} 
3806    -hide-user-agent -image +image-blocker{blank} +no-compression 
3807    +no-cookies-keep -no-cookies-read -no-cookies-set +no-popups 
3808    -vanilla-wafer -wafer }
3809    /
3810
3811  { -no-cookies-keep -no-cookies-read -no-cookies-set }
3812   .google.com
3813
3814  { -fast-redirects }
3815   .google.com
3816
3817  </screen>
3818 </para>
3819
3820 <para>
3821  This is much more informative, and tells us how we have defined our 
3822  <quote>actions</quote>, and which ones match for our example, 
3823  <quote>google.com</quote>. The first grouping shows our default 
3824  settings, which would apply to all URLs. If you look at your <quote>actions</quote>
3825  file, this would be the section just below the <quote>aliases</quote> section 
3826  near the top. This applies to all URLs as signified by the single forward
3827  slash -- <quote>/</quote>.
3828  
3829 </para>
3830
3831 <para>
3832  These are the default actions we have enabled. But we can define additional
3833  actions that would be exceptions to these general rules, and then list 
3834  specific URLs that these exceptions would apply to. Last match wins.
3835  Just below this then are two explict matches for <quote>.google.com</quote>.
3836  The first is negating our various cookie blocking actions (i.e. we will allow
3837  cookies here). The second is allowing <quote>fast-redirects</quote>. Note
3838  that there is a leading dot here -- <quote>.google.com</quote>. This will
3839  match any hosts and sub-domains, in the google.com domain also, such as
3840  <quote>www.google.com</quote>. So, apparently, we have these actions defined
3841  somewhere in the lower part of our actions file, and
3842  <quote>google.com</quote> is referenced in these sections.
3843
3844 </para>
3845
3846 <para>
3847  And now we pull it altogether in the bottom section and summarize how
3848  <application>Privoxy</application> is appying all its <quote>actions</quote> 
3849  to <quote>google.com</quote>:
3850
3851 </para>
3852
3853 <para>
3854  <screen>
3855
3856  Final results:
3857
3858  -add-header -block -deanimate-gifs -downgrade -fast-redirects 
3859  +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups} 
3860  +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
3861  +filter{fun} +hide-forwarded +hide-from{block} +hide-referer{forge} 
3862  -hide-user-agent -image +image-blocker{blank} -limit-connect +no-compression 
3863  -no-cookies-keep -no-cookies-read -no-cookies-set +no-popups -vanilla-wafer 
3864  -wafer
3865
3866  </screen>
3867 </para>
3868
3869 <para>
3870  Now another example, <quote>ad.doubleclick.net</quote>:
3871 </para>
3872
3873 <para>
3874  <screen>
3875
3876  { +block +image }
3877   .ad.doubleclick.net
3878
3879  { +block +image }
3880   ad*.
3881
3882  { +block +image }
3883   .doubleclick.net
3884
3885  </screen>
3886 </para>
3887
3888 <para>
3889  We'll just show the interesting part here, the explicit matches. It is 
3890  matched three different times. Each as an <quote>+block +image</quote>,
3891  which is the expanded form of one of our aliases that had been defined as: 
3892  <quote>+imageblock</quote>. (<quote>Aliases</quote> are defined in the 
3893  first section of the actions file and typically used to combine more 
3894  than one action.)
3895 </para>
3896
3897 <para>
3898  Any one of these would have done the trick and blocked this as an unwanted 
3899  image. This is unnecessarily redundant since the last case effectively 
3900  would also cover the first. No point in taking chances with these guys 
3901  though ;-) Note that if you want an ad or obnoxious 
3902  URL to be invisible, it should be defined as <quote>ad.doubleclick.net</quote>
3903  is done here -- as both a <quote>+block</quote> <emphasis>and</emphasis> an
3904  <quote>+image</quote>. The custom alias <quote>+imageblock</quote> does this
3905  for us.
3906 </para>
3907
3908 <para>
3909  One last example. Let's try <quote>http://www.rhapsodyk.net/adsl/HOWTO/</quote>.
3910  This one is giving us problems. We are getting a blank page. Hmmm...
3911 </para>
3912
3913 <para>
3914  <screen>
3915
3916  Matches for http://www.rhapsodyk.net/adsl/HOWTO/:
3917
3918  { -add-header -block +deanimate-gifs -downgrade +fast-redirects 
3919    +filter{html-annoyances} +filter{js-annoyances} +filter{no-popups} 
3920    +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
3921    +filter{fun} +hide-forwarded +hide-from{block} +hide-referer{forge} 
3922    -hide-user-agent -image +image-blocker{blank} +no-compression 
3923    +no-cookies-keep -no-cookies-read -no-cookies-set +no-popups 
3924    -vanilla-wafer -wafer }
3925    /
3926
3927  { +block +image }
3928   /ads
3929
3930  </screen>
3931 </para>
3932
3933 <para>
3934  Ooops, the <quote>/adsl/</quote> is matching <quote>/ads</quote>! But 
3935  we did not want this at all! Now we see why we get the blank page. We could
3936  now add a new action below this that explictly does <emphasis>not</emphasis>
3937  block (-block) pages with <quote>adsl</quote>. There are various ways to
3938  handle such exceptions. Example:
3939 </para>
3940
3941 <para>
3942  <screen>
3943
3944  { -block }
3945   /adsl
3946  
3947  </screen>
3948 </para>
3949
3950 <para>
3951  Now the page displays ;-) Be sure to flush your browser's caches when 
3952  making such changes. Or, try using <literal>Shift+Reload</literal>.
3953 </para>
3954
3955 <para>
3956  But now what about a situation where we get no explicit matches like 
3957  we did with:
3958 </para>
3959
3960 <para>
3961  <screen>
3962
3963  { -block }
3964   /adsl
3965  
3966  </screen>
3967 </para>
3968
3969 <para>
3970  That actually was very telling and pointed us quickly to where the problem
3971  was. If you don't get this kind of match, then it means one of the default 
3972  rules in the first section is causing the problem. This would require some 
3973  guesswork, and maybe a little trial and error to isolate the offending rule.
3974  One likely cause would be one of the <quote>{+filter}</quote> actions. Try 
3975  adding the URL for the site to one of aliases that turn off <quote>+filter</quote>:
3976 </para>
3977
3978 <para>
3979  <screen>
3980
3981  {shop}
3982  .quietpc.com
3983  .worldpay.com   # for quietpc.com
3984  .jungle.com
3985  .scan.co.uk
3986  .forbes.com
3987  
3988  </screen>
3989 </para>
3990
3991 <para>
3992  <quote>{shop}</quote> is an <quote>alias</quote> that expands to 
3993  <quote>{ -filter -no-cookies -no-cookies-keep }</quote>. Or you could do 
3994  your own exception to negate filtering:
3995
3996 </para>
3997
3998 <para>
3999  <screen>
4000
4001  {-filter}
4002  .forbes.com
4003  
4004  </screen>
4005 </para>
4006
4007 <para>
4008  <quote>{fragile}</quote> is an alias that disables most actions. This can be 
4009  used as a last resort for problem sites. Remember to flush caches! If this 
4010  still does not work, you will have to go through the remaining actions one by
4011  one to find which one(s) is causing the problem.
4012 </para>
4013
4014 </sect2>
4015
4016 </sect1>
4017
4018  <!--
4019
4020  This program is free software; you can redistribute it 
4021  and/or modify it under the terms of the GNU General
4022  Public License as published by the Free Software
4023  Foundation; either version 2 of the License, or (at
4024  your option) any later version.
4025
4026  This program is distributed in the hope that it will
4027  be useful, but WITHOUT ANY WARRANTY; without even the
4028  implied warranty of MERCHANTABILITY or FITNESS FOR A
4029  PARTICULAR PURPOSE.  See the GNU General Public
4030  License for more details.
4031
4032  The GNU General Public License should be included with
4033  this file.  If not, you can view it at
4034  http://www.gnu.org/copyleft/gpl.html
4035  or write to the Free Software Foundation, Inc., 59
4036  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
4037
4038  $Log: user-manual.sgml,v $
4039  Revision 1.75  2002/04/12 02:08:48  david__schmidt
4040  Remove OS/2 building info... it is already in the developer-manual
4041
4042  Revision 1.74  2002/04/11 00:54:38  hal9
4043  Add small section on submitting actions.
4044
4045  Revision 1.73  2002/04/10 18:45:15  swa
4046  generated
4047
4048  Revision 1.72  2002/04/10 04:06:19  hal9
4049  Added actions feedback  to Bookmarklets section
4050
4051  Revision 1.71  2002/04/08 22:59:26  hal9
4052  Version update. Spell chkconfig correctly :)
4053
4054  Revision 1.70  2002/04/08 20:53:56  swa
4055  ?
4056
4057  Revision 1.69  2002/04/06 05:07:29  hal9
4058  -Add privoxy-man-page.sgml, for man page.
4059  -Add authors.sgml for AUTHORS (and p-authors.sgml)
4060  -Reworked various aspects of various docs.
4061  -Added additional comments to sub-docs.
4062
4063  Revision 1.68  2002/04/04 18:46:47  swa
4064  consistent look. reuse of copyright, history et. al.
4065
4066  Revision 1.67  2002/04/04 17:27:57  swa
4067  more single file to be included at multiple points. make maintaining easier
4068
4069  Revision 1.66  2002/04/04 06:48:37  hal9
4070  Structural changes to allow for conditional inclusion/exclusion of content
4071  based on entity toggles, e.g. 'entity % p-not-stable  "INCLUDE"'. And
4072  definition of internal entities, e.g. 'entity p-version "2.9.13"' that will
4073  eventually be set by Makefile.
4074  More boilerplate text for use across multiple docs.
4075
4076  Revision 1.65  2002/04/03 19:52:07  swa
4077  enhance squid section due to user suggestion
4078
4079  Revision 1.64  2002/04/03 03:53:43  hal9
4080  A few minor bug fixes, and touch ups. Ready for review.
4081
4082  Revision 1.63  2002/04/01 16:24:49  hal9
4083  Define entities to include boilerplate text. See doc/source/*.
4084
4085  Revision 1.62  2002/03/30 04:15:53  hal9
4086  - Fix privoxy.org/config links.
4087  - Paste in Bookmarklets from Toggle page.
4088  - Move Quickstart nearer top, and minor rework.
4089
4090  Revision 1.61  2002/03/29 01:31:08  hal9
4091  Minor update.
4092
4093  Revision 1.60  2002/03/27 01:57:34  hal9
4094  Added more to Anatomy section.
4095
4096  Revision 1.59  2002/03/27 00:54:33  hal9
4097  Touch up intro for new name.
4098
4099  Revision 1.58  2002/03/26 22:29:55  swa
4100  we have a new homepage!
4101
4102  Revision 1.57  2002/03/24 20:33:30  hal9
4103  A few minor catch ups with name change.
4104
4105  Revision 1.56  2002/03/24 16:17:06  swa
4106  configure needs to be generated.
4107
4108  Revision 1.55  2002/03/24 16:08:08  swa
4109  we are too lazy to make a block-built
4110  privoxy logo. hence removed the option.
4111
4112  Revision 1.54  2002/03/24 15:46:20  swa
4113  name change related issue.
4114
4115  Revision 1.53  2002/03/24 11:51:00  swa
4116  name change. changed filenames.
4117
4118  Revision 1.52  2002/03/24 11:01:06  swa
4119  name change
4120
4121  Revision 1.51  2002/03/23 15:13:11  swa
4122  renamed every reference to the old name with foobar.
4123  fixed "application foobar application" tag, fixed
4124  "the foobar" with "foobar". left junkbustser in cvs
4125  comments and remarks to history untouched.
4126
4127  Revision 1.50  2002/03/23 05:06:21  hal9
4128  Touch up.
4129
4130  Revision 1.49  2002/03/21 17:01:05  hal9
4131  New section in Appendix.
4132
4133  Revision 1.48  2002/03/12 06:33:01  hal9
4134  Catching up to Andreas and re_filterfile changes.
4135
4136  Revision 1.47  2002/03/11 13:13:27  swa
4137  correct feedback channels
4138
4139  Revision 1.46  2002/03/10 00:51:08  hal9
4140  Added section on JB internal pages in Appendix.
4141
4142  Revision 1.45  2002/03/09 17:43:53  swa
4143  more distros
4144
4145  Revision 1.44  2002/03/09 17:08:48  hal9
4146  New section on Jon's actions file editor, and move some stuff around.
4147
4148  Revision 1.43  2002/03/08 00:47:32  hal9
4149  Added imageblock{pattern}.
4150
4151  Revision 1.42  2002/03/07 18:16:55  swa
4152  looks better
4153
4154  Revision 1.41  2002/03/07 16:46:43  hal9
4155  Fix a few markup problems for jade.
4156
4157  Revision 1.40  2002/03/07 16:28:39  swa
4158  provide correct feedback channels
4159
4160  Revision 1.39  2002/03/06 16:19:28  hal9
4161  Note on perceived filtering slowdown per FR.
4162
4163  Revision 1.38  2002/03/05 23:55:14  hal9
4164  Stupid I did it again. Double hyphen in comment breaks jade.
4165
4166  Revision 1.37  2002/03/05 23:53:49  hal9
4167  jade barfs on '- -' embedded in comments. - -user option broke it.
4168
4169  Revision 1.36  2002/03/05 22:53:28  hal9
4170  Add new - - user option.
4171
4172  Revision 1.35  2002/03/05 00:17:27  hal9
4173  Added section on command line options.
4174
4175  Revision 1.34  2002/03/04 19:32:07  oes
4176  Changed default port to 8118
4177
4178  Revision 1.33  2002/03/03 19:46:13  hal9
4179  Emphasis on where/how to report bugs, etc
4180
4181  Revision 1.32  2002/03/03 09:26:06  joergs
4182  AmigaOS changes, config is now loaded from PROGDIR: instead of
4183  AmiTCP:db/junkbuster/ if no configuration file is specified on the
4184  command line.
4185
4186  Revision 1.31  2002/03/02 22:45:52  david__schmidt
4187  Just tweaking
4188
4189  Revision 1.30  2002/03/02 22:00:14  hal9
4190  Updated 'New Features' list. Ran through spell-checker.
4191
4192  Revision 1.29  2002/03/02 20:34:07  david__schmidt
4193  Update OS/2 build section
4194
4195  Revision 1.28  2002/02/24 14:34:24  jongfoster
4196  Formatting changes.  Now changing the doctype to DocBook XML 4.1
4197  will work - no other changes are needed.
4198
4199  Revision 1.27  2002/01/11 14:14:32  hal9
4200  Added a very short section on Templates
4201
4202  Revision 1.26  2002/01/09 20:02:50  hal9
4203  Fix bug re: auto-detect config file changes.
4204
4205  Revision 1.25  2002/01/09 18:20:30  hal9
4206  Touch ups for *.action files.
4207
4208  Revision 1.24  2001/12/02 01:13:42  hal9
4209  Fix typo.
4210
4211  Revision 1.23  2001/12/02 00:20:41  hal9
4212  Updates for recent changes.
4213
4214  Revision 1.22  2001/11/05 23:57:51  hal9
4215  Minor update for startup now daemon mode.
4216
4217  Revision 1.21  2001/10/31 21:11:03  hal9
4218  Correct 2 minor errors
4219
4220  Revision 1.18  2001/10/24 18:45:26  hal9
4221  *** empty log message ***
4222
4223  Revision 1.17  2001/10/24 17:10:55  hal9
4224  Catching up with Jon's recent work, and a few other things.
4225
4226  Revision 1.16  2001/10/21 17:19:21  swa
4227  wrong url in documentation
4228
4229  Revision 1.15  2001/10/14 23:46:24  hal9
4230  Various minor changes. Fleshed out SEE ALSO section.
4231
4232  Revision 1.13  2001/10/10 17:28:33  hal9
4233  Very minor changes.
4234
4235  Revision 1.12  2001/09/28 02:57:04  hal9
4236  Ditto :/
4237
4238  Revision 1.11  2001/09/28 02:25:20  hal9
4239  Ditto.
4240
4241  Revision 1.9  2001/09/27 23:50:29  hal9
4242  A few changes. A short section on regular expression in appendix.
4243
4244  Revision 1.8  2001/09/25 00:34:59  hal9
4245  Some additions, and re-arranging.
4246
4247  Revision 1.7  2001/09/24 14:31:36  hal9
4248  Diddling.
4249
4250  Revision 1.6  2001/09/24 14:10:32  hal9
4251  Including David's OS/2 installation instructions.
4252
4253  Revision 1.2  2001/09/13 15:27:40  swa
4254  cosmetics
4255
4256  Revision 1.1  2001/09/12 15:36:41  swa
4257  source files for junkbuster documentation
4258
4259  Revision 1.3  2001/09/10 17:43:59  swa
4260  first proposal of a structure.
4261
4262  Revision 1.2  2001/06/13 14:28:31  swa
4263  docs should have an author.
4264
4265  Revision 1.1  2001/06/13 14:20:37  swa
4266  first import of project's documentation for the webserver.
4267
4268  -->
4269
4270 </article>